Help us improve
Share bugs, ideas, or general feedback.
From process-siren
Converts prose/bullet workflows in SKILL.md, CLAUDE.md, AGENT.md, or rules files/directories to Mermaid diagrams via process-siren agent. Use --dry-run or --report for planning.
npx claudepluginhub jamie-bitflight/claude_skills --plugin process-sirenHow this skill is triggered — by the user, by Claude, or both
Slash command
/process-siren:woo-sailorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are about to optimize a set of files.
Optimizes CLAUDE.md, SKILL.md, agents, and plugin files for Claude comprehension and token economy using metrics, specialist agent delegation, verification, and before/after reports.
Routes Mermaid diagram requests to type-specific guides (sequence, activity, ER, architecture); validates .md files, renders .mmd to SVG, architects from codebases.
Generates Mermaid sequence diagrams or flowcharts for multi-step workflows, with optional insertion into markdown files and mmcd validation.
Share bugs, ideas, or general feedback.
You are about to optimize a set of files.
$0 $1 <user_arguments>$ARGUMENTS</user_arguments>
If there is no value, then stop, and say: /woo-sailor [--dry-run|--report]
The following diagram is the authoritative procedure for argument handling and execution routing. Execute steps in the exact order shown, including branches, decision points, and stop conditions.
Eligible file patterns for directory mode: **/SKILL.md, **/CLAUDE.md, **/AGENT.md, **/agents/*.md, **/rules/*.md. For a single file, Read it to understand why the user wanted optimizations applied — it may contain inline documentation, embedded AI prompts, or a process image.
flowchart TD
Start(["Path available"]) --> Q1{"Glob pattern '<path>{/*,*}'<br>— any results?"}
Q1 -->|"No results — path does not exist"| Stop(["Output exactly: 'A file or directory to process must be provided.'<br>Stop."])
Q1 -->|"One result equal to <path> — single file"| Q2File{"Is DRY_RUN true?"}
Q1 -->|"Results are children of <path> — directory"| Q2Dir{"Is DRY_RUN true?"}
Q2File -->|"Yes"| DryFile["Spawn Agent(subagent_type='process-siren',<br>prompt='Read-only mode. Report every section you would<br>optimize and how. Make NO edits. Target file: <path>')"]
Q2File -->|"No"| LiveFile["Spawn Agent(subagent_type='process-siren',<br>prompt='Optimize all processes in this file in-place.<br>Target file: <path>')"]
Q2Dir -->|"Yes"| DryFilter["Glob <path> using eligible patterns:<br>SKILL.md, CLAUDE.md, AGENT.md, agents/*.md, rules/*.md"]
Q2Dir -->|"No"| LiveFilter["Glob <path> using eligible patterns:<br>SKILL.md, CLAUDE.md, AGENT.md, agents/*.md, rules/*.md"]
DryFilter --> DryDir["For each eligible file:<br>Spawn Agent(subagent_type='process-siren',<br>prompt='Read-only mode. Report every section you would<br>optimize and how. Make NO edits. Target file: {file path}')"]
LiveFilter --> LiveDir["For each eligible file:<br>Spawn Agent(subagent_type='process-siren',<br>prompt='Optimize all processes in this file in-place.<br>Target file: {file path}')"]
DryFile --> QBlockedFile{"Agent returned BLOCKED?"}
LiveFile --> QBlockedFile
DryDir --> QBlockedDir{"Any agent returned BLOCKED?"}
LiveDir --> QBlockedDir
QBlockedFile -->|"Yes"| RelayFile["Surface blocking message and file path to user. Stop."]
QBlockedFile -->|"No"| Report(["Return report"])
QBlockedDir -->|"Yes — per blocked file"| RelayDir["Surface blocking message and file path to user.<br>Skip that file; continue others."]
QBlockedDir -->|"No"| Done(["All eligible files processed"])
RelayDir --> Done