Loading...
Loading...
This skill should be used whenever a plan for non-trivial work is being produced, presented, or proposed (a feature, design, refactor, migration, or any multi-step task), including in plan mode and together with whatever planning skill produced the plan. It is the default way to deliver a plan: instead of a wall of text, it renders the plan as MDX to a scannable, self-contained HTML page (diagrams, phases, file-change maps, comparisons) via the `vplan` CLI. It applies when the user says "plan this", "what's the approach", "how should we approach X", "show me the plan", "make a visual plan", "render this plan", or asks for a plan with diagrams/charts, and when they want to review, approve, sign off on, or give feedback on a plan. Skip only for a trivial one-step change or when the user explicitly asks for plain prose.
npx skill4agent add brandonburrus/visualplan visual-planvplanIf thecommand is not found, install it globally first:vplan(published on npm). Re-run the failed command afterward.npm i -g vplan@latest
.mdx# Titleimportvplan check <file>.mdxfile:line:colcheckcheckvplan <file>.mdx<Questions>Answer to "<question>":--timeout--review[must-fix][suggestion]vplan <file>.mdx-i N.mdxvplan--diff <baseline.mdx>--no-diff<Questions>references/static-exports.mdvplan componentsFileTreeChartStatCompareMatrixQuestionsChecklistMatrixCharttitletypestatus{[{ ... }]}<Phase title="..." status="planned|active|done">```mermaidflowchartsequenceDiagramstateDiagram-v2classDiagramerDiagramxychart-beta<Chart>checkfile:line:col```math```mathT(n) = O(n \log n)<Callout type="note|tip|risk|decision|warn">notetipdecisionriskwarn<FileTree>- <change> <path>changeadd|modify|delete|move- move <from> -> <to>/- delete src/legacy/ -- <note><FileTree>
- add src/gateway/rate-limiter.ts -- sliding-window check against Redis
- modify src/gateway/middleware.ts -- mount the limiter behind the flag
- delete src/gateway/legacy/
</FileTree><Chart type="bar|line|area|scatter|radar|gauge|funnel|treemap|pie" title="...">- <label>: <value>barlinearearadarcategory | series1 | series2scatter| point | x | y |piegaugefunneltreemapgaugefunnelstackedbararea<Chart type="bar" stacked><Chart type="bar" title="Effort (days)">
- Limiter: 2
- Dashboards: 1
</Chart>
<Chart type="line" title="Latency by stage (ms)">
| Stage | p50 | p95 |
|-------|-----|-----|
| Auth | 12 | 30 |
| DB | 40 | 120 |
</Chart><Compare>## Name(pick)- pro:- con:<Compare>
## Redis sliding window (pick)
- pro: accurate
- pro: shared across nodes
- con: network hop
## In-memory token bucket
- pro: fast
- con: per-node only
</Compare><Matrix>(pick)<Compare><Matrix><Matrix>
| Dimension | Postgres (pick) | ClickHouse | DynamoDB |
|-----------|-----------------|------------|----------|
| Writes | medium | high | high |
| Querying | high | medium | low |
</Matrix><Questions>title="..."--review<Questions><Questions>
- Should the limiter fail open or fail closed if Redis is unreachable?
- Fail open, availability first
- Fail closed, safety first
- Is a 15-minute access-token TTL acceptable?
</Questions><Checklist title="Done when">- [x]- [ ]<Checklist title="Done when">
- [x] Returns 429 over the limit
- [ ] Dashboards live
</Checklist><Stat>- <label>: <value> (<intent>) -- <caption>note|good|warn|risk(intent)-- caption5 min99.9%<Chart><Stat><Stat>
- Files changed: 12
- Est. uptime: 99.9% (good)
- RPO: 5 min (risk) -- worst-case data loss
</Stat>```ts```ts title="src/path/file.ts"markinsdel/regex/```ts {2}```ts {2-4}```ts {1, 3, 5-6}```ts ins={3-4} del={2} mark={6}```ts "TokenBucket"```ts del="oldName" ins="newName"```ts /\bTODO\b/```ts ins=/const (\w+) =/```mermaid<Phase><FileTree><Callout><Questions><Compare><Matrix><Checklist><Phase><FileTree><Checklist><Stat><Phase><Callout><FileTree><Chart><Matrix>```mermaid- [ ]--no-open--no-opencheck```mermaidMatrixFileTreeChartcheck<{}<Thing>{value}List<T>check<kbd><sub><sup><details><Matrix><Chart>~~strikethrough~~- [ ]<Chart><Matrix><Callout>-- comments<FileTree>move← <from><Callout>-- commentsflowchart TDLR