burgee

Callers

Every feature against every caller — a person, an agent, CI, a screen reader and another program — and the test that holds each cell.

Generated by npm run callers:page from examples/conformance/src/callers.ts. Do not edit by hand.

Five callers arrive at a command, and each one is told apart by what it can observe — whether stdout is a terminal, the environment, the flags — never by guessing who is on the other end. Every feature has a cell per caller. A cell is held by a named test, does not apply (and says why, and that caller gets the plain static text), or is missing. A missing cell is a gap we publish, and the count of them may only fall.

43 held · 7 n/a · 5 missing, of 55 cells.

The callers

CallerWhoTold apart byMode
ttya person at a terminalstdout is a TTY, no agent variable, no CItty
agentan AI agenta pipe, --json, or an agent variable (CLAUDECODE, AI_AGENT, …) even on a TTYjson · pipe
ciCI or a scripta pipe, or CI setci
accessiblea screen readera TTY with CLI_ACCESSIBLE setaccessible
programanother program--schema, --mcp, a completion script, the Fig specjson

The matrix

FeaturePackagettyagentciaccessibleprogram
helpburgee✅✅✅✅✅
errorsburgee✅✅✅❌ missing✅
promptscaique✅✅✅✅❌ missing
spinnerflagstaff✅✅✅✅❌ missing
progressflagstaff✅✅✅✅✅
tableflagstaff✅✅✅✅❌ missing
boxflagstaff✅✅✅✅❌ missing
themeroundel✅✅✅✅n/a
pluginsburgee · flagstaff✅✅✅✅✅
completionsburgee✅n/an/an/a✅
mcpburgeen/a✅n/an/a✅

Each cell

FeatureCallerHeld by
helptty✅ packages/burgee/src/help.test.ts › “takes its width from the injected stdout when it has columns (H3)”
helpagent✅ packages/burgee/src/color.test.ts › “a detected agent reads plain help even on a terminal, as it reads non-interactive (N12)”
helpci✅ packages/burgee/src/color.test.ts › “is styled on a terminal, and only there”
helpaccessible✅ packages/burgee/src/color.test.ts › “is plain under CLI_ACCESSIBLE, as every accessible surface is”
helpprogram✅ packages/burgee/src/help-json.test.ts › “is the same shape as --schema, scoped to one command”
errorstty✅ packages/burgee/src/json-failure.test.ts › “$name: at a terminal, stderr is the prose alone — no JSON (R6)”
errorsagent✅ packages/burgee/src/json-failure.test.ts › “$name: the envelope is on stdout, alone, and stderr is the one structured line (R6)”
errorsci✅ packages/burgee/src/json-failure.test.ts › “$name: plain mode keeps its prose on stderr, nothing on stdout, and the structured line last when stderr is piped (R6)”
errorsaccessible❌ missing — no test holds this cell yet
errorsprogram✅ packages/burgee/src/json-failure.test.ts › “$name: isError with the envelope as the text, then answers the next call”
promptstty✅ packages/caique/src/shape.test.ts › “on a terminal, the same call is a prompt”
promptsagent✅ scripts/prompt-exit-codes.test.ts › “carries the code into the JSON envelope an agent reads”
promptsci✅ scripts/prompt-exit-codes.test.ts › “a question nobody can answer — no TTY — exits 2, naming the flag to pass instead”
promptsaccessible✅ packages/caique/src/ask.test.ts › “writes no escape sequence and no carriage return — it is the accessible mode”
promptsprogram❌ missing — no test holds this cell yet
spinnertty✅ packages/flagstaff/src/spinner.test.ts › “hoisted on a terminal with a manual clock, the frames are exact”
spinneragent✅ packages/flagstaff/src/loop.test.ts › “json: one NDJSON event per transition on stderr, stdout untouched”
spinnerci✅ packages/flagstaff/src/ora.test.ts › “under CI the same, even when the stream claims to be a terminal”
spinneraccessible✅ packages/flagstaff/src/loop.test.ts › “%s: the static projection once per state change, no repaint”
spinnerprogram❌ missing — no test holds this cell yet
progresstty✅ packages/flagstaff/src/builtins.test.ts › “the drawn bar is exactly the width it was given”
progressagent✅ packages/flagstaff/src/loop.test.ts › “json: one NDJSON event per transition on stderr, stdout untouched”
progressci✅ packages/flagstaff/src/builtins.test.ts › “%s writes no carriage return and no escape on a pipe”
progressaccessible✅ packages/flagstaff/src/loop.test.ts › “%s: the static projection once per state change, no repaint”
progressprogram✅ packages/flagstaff/src/progress.test.ts › “sends done, total and the static line through ctx.progress, and draws nothing in either projection”
tabletty✅ packages/flagstaff/src/builtins.test.ts › “draws a grid whose every row is the same measured width”
tableagent✅ packages/flagstaff/src/builtins.test.ts › “the component emits header-and-value pairs off a terminal, not the grid”
tableci✅ packages/flagstaff/src/builtins.test.ts › “%s writes no carriage return and no escape on a pipe”
tableaccessible✅ packages/flagstaff/src/loop.test.ts › “%s: the static projection once per state change, no repaint”
tableprogram❌ missing — no test holds this cell yet
boxtty✅ packages/flagstaff/src/builtins.test.ts › “draws the border it was asked for, at the width it was given”
boxagent✅ packages/flagstaff/src/loop.test.ts › “json: one NDJSON event per transition on stderr, stdout untouched”
boxci✅ packages/flagstaff/src/builtins.test.ts › “the component says the text off a terminal, and draws only on one”
boxaccessible✅ packages/flagstaff/src/loop.test.ts › “%s: the static projection once per state change, no repaint”
boxprogram❌ missing — no test holds this cell yet
themetty✅ packages/roundel/src/theme.test.ts › “degrades to the nearest readable of 256 at level 2”
themeagent✅ packages/roundel/src/theme.test.ts › “flies at level 0 when the run was asked for --json”
themeci✅ packages/roundel/src/policy.test.ts › “an empty CI with no vendor is the table’s floor, not the terminal’s level”
themeaccessible✅ packages/roundel/src/policy.test.ts › “defaults to 0 on the most colour-capable terminal there is”
themeprogramn/a — --schema and --mcp carry data, never styled text: the json row of the colour policy (level 0) is what they get
pluginstty✅ packages/flagstaff/src/cli.test.ts › “prints the plugin in all five modes side by side and exits 0”
pluginsagent✅ packages/flagstaff/src/cli.test.ts › “prints the plugin in all five modes side by side and exits 0”
pluginsci✅ packages/flagstaff/src/cli.test.ts › “prints the plugin in all five modes side by side and exits 0”
pluginsaccessible✅ packages/flagstaff/src/cli.test.ts › “prints the plugin in all five modes side by side and exits 0”
pluginsprogram✅ packages/burgee/src/schema-fields.test.ts › “names the plugin that contributed it”
completionstty✅ packages/burgee/src/mcp.test.ts › “the Fig spec and the shell completions still offer it, because a person is not an agent”
completionsagentn/a — a completion script is what a shell sources; this caller runs commands, and reads --schema for what they take
completionscin/a — a completion script is what a shell sources; this caller runs commands, and reads --schema for what they take
completionsaccessiblen/a — the candidate list is drawn by the shell, not by the program; the script hands it plain words, one per line
completionsprogram✅ packages/burgee/src/completions.test.ts › “%s script is deterministic and mentions every visible command and option”
mcpttyn/a — --mcp speaks JSON-RPC on stdio to an MCP client; this caller is not one, and runs the same commands directly
mcpagent✅ packages/burgee/src/mcp.test.ts › “lists exactly the commands the author did not withhold, generated from the manifest (N1, N2, N6)”
mcpcin/a — --mcp speaks JSON-RPC on stdio to an MCP client; this caller is not one, and runs the same commands directly
mcpaccessiblen/a — --mcp speaks JSON-RPC on stdio to an MCP client; this caller is not one, and runs the same commands directly
mcpprogram✅ packages/burgee/src/mcp.test.ts › “completes the handshake and names the program (N1)”

On this page