- 01.Starting Point
- 02.Loaded mdview skill to understand rendering options
- 03.Added the polish pass
- 04.Added freeform guidance argument
- 05.Almost lost previous updates
- 06.Tension: polish pass vs format guidance
- 07.Switched to symlink-based install
- 08.Added trace workflow to global CLAUDE.md
- 09.Trace-First Context Loading [RECOMMENDED]
- 10.Where We Landed
- 11.Takeaways
v0.2 — Polish Pass, Guidance, and Symlink Install
cc-trace-command v0.1 was released 2026-01-04. The `/trace` command creates cacheable codebase understanding snapshots in `.traces/`. User wanted to add a feature: upgrade rough ASCII diagrams to Merm
Starting Point
cc-trace-command v0.1 was released 2026-01-04. The /trace command creates cacheable codebase understanding snapshots in .traces/. User wanted to add a feature: upgrade rough ASCII diagrams to Mermaid during trace creation.
The observation: Explore agents often sketch ASCII diagrams as a quick first pass, but Claude is bad at getting box widths aligned (right edges are often out of sync). Mermaid renders cleanly in mdview.
Loaded mdview skill to understand rendering options
Checked what diagram formats mdview supports:
src/
├── index.ts # CLI entry point
├── processor.ts # unified pipeline
...
From /Users/joel/Code/mdview/CLAUDE.md:
- Mermaid — flowcharts, sequence diagrams, ERDs, architecture
- D3 — executable
tsx d3code blocks for data viz - KaTeX — math equations
User mentioned React Flow but that's not in mdview yet — they'll add it later. For now, Mermaid only.
Added the polish pass
Inserted Step 4 between synthesis and write:
#### Step 4: Polish pass — Upgrade box-based ASCII to Mermaid
After synthesis, scan the trace for ASCII diagrams that would benefit from Mermaid rendering.
**What to upgrade:**
- Box-based ASCII diagrams (Claude often misaligns right edges of boxes)
- Flowcharts drawn with `+---+` or `| |` characters
- Architecture diagrams with multiple connected components
- Entity relationships and data models
**What to leave alone:**
- **Lifecycle/state diagrams** — ASCII is more readable in terminal for these
- Directory trees (`├── src/`, `└── lib/`) — standard and well-aligned
- Simple inline arrows (`A → B → C`)
- Markdown tables
- Simple linear flows that don't need visual polishKey insight from user: ASCII is actually FINE for lifecycle/state diagrams because they're often read in terminal. The misalignment problem is specifically with box-based architecture diagrams.
Added freeform guidance argument
User wanted to pass context like "focus on OAuth flow" or "I just pulled changes". Added - separator syntax:
**Guidance (optional):**
After a `-` separator, capture freeform guidance that influences exploration and synthesis:
- `/trace auth - focus on the new OAuth flow`
- `/trace --update - add mermaid diagrams for the data flow`
- `/trace api - I just pulled changes, note breaking changes in v2`
The guidance gets passed to explore agents and the polish pass.Updated argument-hint in frontmatter:
argument-hint: [name] [--update] [--list] [- guidance]Almost lost previous updates
Ran ./install.sh which copied trace.md to ~/.claude/commands/ — but the installed version had updates that weren't in the repo! User caught this before we lost them.
The missing content was enhanced synthesis guidance:
**Format guidance**:
- **Lead with understanding, follow with reference** — Mental Model and Lifecycle sections go FIRST to contextualize, then architecture/schemas/files as reference material
...
- **Mental Model** (REQUIRED for subsystem traces — how should someone think about this?)
- Analogies to familiar concepts (e.g., "Templates are like Docker images")
- Why it exists / the problem it solves
- Key abstractions and their relationships
- **Lifecycle** (REQUIRED for stateful systems)
- State diagram or flowchart showing creation → use → destruction
- What triggers state transitions
- Timing/billing/persistence characteristicsMerged this into the source file.
Tension: polish pass vs format guidance
The format guidance said "Use ASCII diagrams for lifecycles/state machines (more readable in terminal)" but the polish pass was upgrading everything to Mermaid.
Fixed by making the polish pass smarter:
**What to leave alone:**
- **Lifecycle/state diagrams** — ASCII is more readable in terminal for theseSwitched to symlink-based install
The copy-based install was dangerous — edits to the installed file diverge from the repo. Rewrote install.sh:
link_command() {
local src="$SCRIPT_DIR/$1"
local dest="$COMMANDS_DIR/$1"
if [ -L "$dest" ]; then
# Already a symlink - check if it points to us
current_target=$(readlink "$dest")
if [ "$current_target" = "$src" ]; then
echo " - /$1 (already linked)"
return
else
echo " - /$1: symlink points elsewhere ($current_target)"
echo " Run: ln -sf \"$src\" \"$dest\" to update"
return
fi
elif [ -f "$dest" ]; then
# Regular file exists - check for differences
if diff -q "$src" "$dest" > /dev/null 2>&1; then
# Same content, safe to replace with symlink
rm "$dest"
ln -s "$src" "$dest"
echo " - /$1 (converted to symlink)"
else
echo " - /$1: DIFFERS from source!"
echo " Installed version has changes. Diff:"
diff "$src" "$dest" | head -20
echo " ..."
echo " To overwrite: ln -sf \"$src\" \"$dest\""
return
fi
else
# No file exists, create symlink
ln -s "$src" "$dest"
echo " - /$1 (linked)"
fi
}Now edits to the source take effect immediately, and install.sh warns if the installed version has drifted.
Added trace workflow to global CLAUDE.md
Added "Trace-First Context Loading" section to ~/.claude/CLAUDE.md:
## Trace-First Context Loading [RECOMMENDED]
When diving into a feature or module, check for existing traces first:
1. Look for `.traces/` directory
2. If trace exists for the area (`auth.md`, `api.md`, etc.) → load it
3. If no relevant trace → suggest creating one: "Want to `/trace auth` first? Captures the module for future sessions too."
**Why trace first:**
- Instant context vs. exploratory searching
- Shared understanding (traces are git-committed)
- Creates reusable snapshot for future sessionsWhere We Landed
v0.2 installed via symlinks at ~/.claude/commands/trace.md:
ls -la ~/.claude/commands/trace.md
lrwxr-xr-x@ 1 joel staff 42 Jan 6 15:37 /Users/joel/.claude/commands/trace.md -> /Users/joel/Code/cc-trace-command/trace.md
Changes in v0.2:
- Synthesis overhaul — "Lead with understanding, follow with reference" with Mental Model and Lifecycle sections
- Polish pass — Upgrades box-based ASCII to Mermaid, leaves lifecycle diagrams as ASCII
- Freeform guidance via
-separator - Symlinked install — Safe, warns on drift
Takeaways
Copy-based installs for commands are dangerous. If you edit the installed version directly (easy to do when testing), you lose those changes next time you run install. Symlinks solve this — one file, one truth.
ASCII vs Mermaid isn't binary. Lifecycle/state diagrams are actually MORE readable as ASCII in terminal. Box-based architecture diagrams are where Mermaid shines because alignment is hard.
The - separator for freeform guidance is elegant. It's unambiguous (flags use --), natural language friendly, and doesn't conflict with trace names.