| name | ascii-diagrams |
| description | Use when the user asks for ASCII diagrams, timeline diagrams, flow diagrams, schedule explanations, stack traces, flamegraphs, or a single user-friendly ASCII output with Apple/Uber-like clean styling. |
ASCII Diagrams
Use this skill when a diagram will explain timing, data flow, state, architecture, comparisons, profiling, or operational behavior more clearly than prose.
Pick the right shape first
Do not default to a flow diagram. Match the diagram to the problem.
| Problem shape | Use |
|---|
| One value, ratio, threshold, before/after, simple comparison, short enumeration | Simple ASCII (bars, list, table) |
| Movement between steps/services/states, pipelines, request lifecycles, deps | Flow diagram |
| Call stacks, hot paths, CPU/memory profiles, nested time spent, blame trees | Stack / flamegraph |
| Time-anchored events, schedules, ranges, durations | Timeline |
| A value plotted against a continuous axis (time, distance, progress); curves, drift, spread | XY plot |
| Memory/buffer layout, geometry, or spatial relationships | Other (layouts, vectors) |
If two shapes fit, pick the smaller one. When in doubt, prefer the simplest shape that still answers the question โ never wrap a number, ratio, or 2-line answer in a flow.
Style
Aim for clean, premium, Apple/Uber-like text styling:
- minimal visual noise
- generous spacing
- short headings
- boxed sections with rounded corners only when they add clarity
- aligned columns and timelines
- one strong visual idea per section
- concise summary at the end
Shape 1 โ Simple ASCII
Use for ratios, magnitudes, short comparisons, config snapshots, or enumerations. Often the best answer is a single bar chart or a 3-row table โ not a diagram.
Horizontal bar comparison:
p50 โโโ 42 ms
p95 โโโโโโโโโโโโ 180 ms
p99 โโโโโโโโโโโโโโโโโโโโโโโโโโโ 640 ms
Before / after:
before โโโโโโโโโโโโโโโโโโโโโโ 2.4 s
after โโโโโ 540 ms (4.4ร faster)
Tiny enumeration:
โข reads cached, 1 RTT
โข writes quorum, 2 RTT
โข failover ~3 s, no data loss
Shape 2 โ Flow diagram
Use only when arrows between distinct nodes carry meaning (services, steps, states, dependencies).
โญโโโโโโโโโฎ โญโโโโโโฎ โญโโโโโโโโโโโฎ
โ Client โโโโโโถโ API โโโโโโถโ Database โ
โฐโโโโโฌโโโโฏ โฐโโโฌโโโฏ โฐโโโโโโโโโโโฏ
โ โ
โ โผ
โ โญโโโโโโโโโฎ
โฐโโโโโโโโถโ Worker โ
โฐโโโโโโโโโฏ
Keep nodes few. If you need more than ~8 boxes, split into sections or switch shape.
Shape 3 โ Stack / flamegraph
Use for call stacks, hot paths, profiles, nested durations, or "where did the time go". Width = time or share. Stacked rows = caller โ callee (root on top or bottom; be consistent).
Flamegraph (root on top, width โ time):
main 1000 ms
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
handleRequest 820 ms
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
parseBody 120 ms
โโโโโโโ
queryDB 560 ms
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
serialize 90 ms
โโโโโ
render 140 ms
โโโโโโโโ
log 180 ms
โโโโโโโโโโ
Call stack / call tree (causality and nesting, no time axis). Use an indented tree with โ arrows in a language-tagged code block so identifiers get syntax highlighting:
```ts
LocationServiceMap.get(ref)
โ build location layer
โ Config.layer reads authored documents
โ merge authored documents
โ run currently active Config loaders
โ Policy.layer reads transformed Config
โ Catalog.layer reads transformed Config
โ materialize baseline provider/model catalog
โ PluginBoot baseline ready
โ Frontend.fetchCatalog()
PluginBoot background fiber
โ install/update plugin packages concurrently
โ activate completed plugins
โ Config.loader(pluginID).replace(transform)
โ ReloadScheduler.request()
โ debounce short burst of completed activations
โ Reload.all()
โ Config.get()
โ run newly active Config loaders
โ Catalog.reload()
โ Catalog.Event.Updated
โ Frontend.refetchCatalog()
```
Rules:
- trees: 2-space indent per level,
โ on every child, one exact identifier per line (Module.method()); separate independent stacks with a blank line under a heading; tag the block (ts, py, go, โฆ) so identifiers highlight.
- flamegraphs: align all bars to the same left edge, label first then bar, show time/% on the right, collapse irrelevant frames into
โฆ.
Shape 4 โ Timeline
Use when the X axis is time and you need to show events or ranges.
Sun Mon Tue Wed Thu Fri
โ โ โ โ โ โ
โ โฒ โ โ โ โ
โ deploy v2
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โฒ
โ canary window
Shape 5 โ XY plot
Use when a value changes over a continuous axis (time, distance, progress) and the shape of the curve is the point: growth, drift, deltas, spread. Y axis labeled on the left, X axis along the bottom with an arrow, โค / โผ for tick joints.
Single curve (elapsed time vs track progress):
elapsed
28s โค โ
โ โ โ
โ โ โ โ
14s โคโโโโโโโโโ โ โ โ โ
โ โ โ โ โ โ โ
0s โคโ โ โ โ โ โ โ โ
โโโโโโโโโโโดโโโโโโโโโโโโโโโถ progress
0 0.42 1
Signed values around a zero baseline (delta above/below a reference):
+ฮ โค โ โ
โ โ โ โ โ
0 โผโโโโโโโโโโโโโโโโโโโโโโโโโโโถ progress
โ โ โ โ
โฮ โค โ
0 1 +ฮ behind ยท โฮ ahead ยท 0 reference
Curve plus an envelope/spread band (โ actual run, โ ยฑฯ band):
e + โค โโโโ
โ โโโโโโโโโโโโโ
0 โคโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โโโโโโโโโโโโโโโโโโโโโโโโ
e โ โค โโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโถ t
Rules for XY plots:
- label the Y axis above the top tick; put the X axis label after the arrow
- use
โค for plain ticks, โผ where a zero/baseline line crosses
- keep one glyph per column so points stay vertically aligned
- legend goes on one line under the plot, not inside it
Shape 6 โ Layout / geometry
Use for memory and buffer layouts, on-disk formats, or spatial/vector relationships โ anything where position carries the meaning.
Ring buffer / memory layout:
head โโ (next write)
idx: 0 1 2 3 โฆ 15
โโโโโโฌโโโโโฌโโโโโฌโโโโโฌโโโโโ
โ tโ โ tโ โ tโ โ tโ โ tโโ
โ timestamps (ยตs)
โโโโโโดโโโโโดโโโโโดโโโโโดโโโโโ
โ oldest newest โ
Geometric projection (project a point onto the nearest segment):
โ point
โ โ perpendicular onto nearest segment
โผ
โขโฎ A B
โฐโขโฎ โญโขโโโXโโโโโขโฎ
โฐโขโฏ โฐโขโโ โฆ โโโถ
X = A + tยท(B โ A)
t = clamp(0, (โ โ A)ยท(B โ A) / |B โ A|ยฒ, 1)
Rules
- Return the diagram as a single
text code block when the user asks for a single ASCII output.
- Do not use Mermaid or other rendered diagram syntaxes.
- Keep labels short; include only the details needed to make the point.
- Prefer vertical sections over one huge crowded diagram.
- End with a compact summary box only when there is a decision or conclusion worth restating.