docs: add a visual command map (docs/commands.html) - #32
Merged
Conversation
The command surface was documented three ways — README, CLAUDE.md, and `tabbrew help` — all of them prose. None of them drew the thing that actually matters: that the CLI straddles three different places (this disk, a loopback bridge to Chrome, and tabbrew.com), and that no command in it can change a tab. So: one self-contained HTML page, diagram-first. Eight sections — - every command as a card, colour-coded by **reach** (offline / loopback 127.0.0.1 / account over HTTPS / GitHub Releases), with a legend that filters the map down to one reach at a time. The reach idea is new; it isn't stated anywhere else, and it's the fastest way to answer "what can this one actually touch"; - both workflows as step diagrams — one request → one script, and the auto-mode loop — each ending on the step where a human presses a button; - how to *turn auto mode on*, from the user's side: the three setup steps with what success looks like for each, and the Accept/Deny card drawn out, since that card is the only screen most people ever read; - the bridge's routes across its three conversations, plus the four gates that make a no-token loopback server defensible; - the six-verb grammar with the fixed DEL → UNPIN → UNGROUP → GROUP → PIN → MOVE phase order, and real `tabs check` output; - the four verdicts, where state lives on disk, and an "I want to…" index. Self-contained by construction: no CDN, font, or image requests, so it renders identically from a `file://` open, `tabbrew docs push`, or any strict-CSP host. Themed through `color-scheme` + `light-dark()` tokens, so system preference and a host's `data-theme` stamp both work from one definition. The page is a hand-written mirror of `registry.ts` — nothing generates it and no test pins it — so CLAUDE.md now says that out loud next to the "adding a command" checklist, and the layout tree lists `docs/`. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The command surface is documented three ways —
README.md,CLAUDE.md, andtabbrew help— and all three are prose. None of them draws the thing that actually matters: the CLI straddles three different places (this disk, a loopback bridge to Chrome, and tabbrew.com), and no command in it can change a tab.This adds one self-contained HTML page that shows that instead of describing it.
What's in it
Eight sections, diagram-first:
127.0.0.1/ account over HTTPS / GitHub Releases. Legend chips filter the map to one reach.DEL → UNPIN → UNGROUP → GROUP → PIN → MOVEphase order, with realtabs checkoutput.0600files, and an "I want to… → run this" index.Reach is the one idea the page adds — it isn't stated anywhere else in the repo, and it's the fastest way to answer "what can this command actually touch". §03 is likewise new:
SKILL.auto.mddocuments the loop for the agent, but nothing documented the three things a person has to do to start it.How it's built
file://open,tabbrew docs push, or a strict-CSP host. The one external URL is an<a href>back to this repo.color-schemedrives everylight-dark()token, and a host'sdata-themestamp just re-declares it — system preference, a viewer toggle, and a raw file open all work from one definition.The maintenance cost, stated up front
The page is a hand-written mirror of
registry.ts— nothing generates it and no test pins it, so a new command or a reworded summary has to be carried over by hand. Rather than leave that implicit,CLAUDE.mdnow says so directly next to the "adding a command = a row here + acaseinindex.ts" checklist, and the layout tree listsdocs/.It's the only file in the repo that duplicates
registry.ts.Verified
bun run typecheckandbun run test— clean (20 pass), though this PR touches no TypeScript.bun run src/index.ts help --all.grepconfirms nosrc=/<link>/@import/url()anywhere in the file.Preview
open docs/commands.html— ortabbrew docs push docs/commands.html --cloudto read it in the sidepanel Docs view it was partly written for.🤖 Generated with Claude Code