Skip to content

Help catalog

Back to Prompts & guidance

42 verified entries in help / catalog.

spex help

help:overview

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 b9ba931da16a32038079d8fba1eee5b2489fa1f95d8958832d73eb35ebf96708
Content role help
spex — SpexCode CLI (spec↔code graph + worktree session state machine)

Usage: spex <noun> <verb> [object] [flags]     the verb is always the token after its noun;
                                               a bare noun prints that drawer's help
       spex help <command>                     one command's usage (or spex <command> --help — always
                                               safe: a help probe never runs the verb)

Project verbs (implicit object = this project)
  graph                 the assembled view: bare = readable tree · --json = the full payload
  init [dir]            adopt SpexCode on a repo: seed .spec + hooks + materialize  --harness <ids> [--preset name]
  materialize           the base pass of harness adaptation: render .spec/.plugins into your harness’s artifacts
  doctor                diagnose spec health and whether the workflow reaches this agent  [--contract|--conflicts]
  uninstall [dir]       remove all derived artifacts + local state; preserve tracked intent  [--hooks]
  serve [api|ui]        api (default) = the backend :8787 · ui = the dashboard :5173 on top of it
  dashboard             ONE dashboard for every project you serve — no --api-port pairing  [--port N=5173]
  guidance              export the immutable guidance catalog index  [--out <path>]

Noun drawers
  spec <verb>           the governance graph: search · owner · lint · ack
  session <verb>        the worktree state machine: new · ls · watch · wait · review · merge · send · …
  eval <verb>           the measurement system: add · ls · scenario ls/write · lint · ok · retract · clean
  issue <verb>          concern threads, local + forge merged: ls · show · open · reply · close · promote · links
  remark <verb>         resolvable pins on a host: add · resolve · retract
  evidence put|get      content-addressed bytes: put stashes & prints the hash, get reads back

Manuals
  guide [topic]         the manuals: setup workflow · spec/eval file formats · spexcode.json · footprint

Conventions (stated once, hold everywhere)
  SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
  accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
  none (or @all) means every session.
  `.` as a node argument means the node THIS worktree works on (the session's bound node, else the
  node/<id> branch). One-shot payload reads (graph · spec search · session ls/show/review · eval ls ·
  scenario ls · issue ls/show/links) take --json.
  Backend routing: every backend-touching verb accepts --api <url> (--port <n> = localhost sugar) to name
  its backend explicitly — the flag always wins. Bare, it resolves: worker env / the cwd project's live
  recorded backend / fallback / :8787 (spex guide settings → BACKEND ROUTING). A password-gated explicit
  gateway accepts --password <pw> (or SPEXCODE_PASSWORD); its self-signed certificate needs explicit --insecure.
  Mentions: @session · [[node]] work in ANY prompt, issue, or remark body — text passed as a CLI arg included.
  [[node]] names a topic; @session names a retained session for the receiving agent to inspect, contact with
  `spex session send`, or inherit with `/distill`. Mentions are references only: they never send or spawn.

Concepts & best practice live in the guide: spex guide (setup) · guide spec · guide eval · guide settings · guide footprint.
Machine plumbing (hook/launch-script callees) lives under `spex internal` — not part of your vocabulary.

spex help dashboard

help:dashboard

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 bf09e483919c37502cdd1e46f54503482153f8f774975b47f2e6b000d68497f9
Content role help
spex dashboard — ONE dashboard for every project you serve — no --api-port pairing  [--port N=5173]

Usage: spex dashboard [--port N=5173] [--host H=127.0.0.1]

The HOST gateway: serves the built dashboard once and routes to EVERY backend the current user runs —
the multi-project hub engine plus the host registry on top. It continuously reconciles the per-project
endpoint records each `spex serve` publishes (validating each against the live backend's /api/instance
identity), keeps a durable known-project catalog, and proxies each project's API + SSE + terminal
socket under /p/<projectId>/* — the project is named in the path, so nothing is "current" and no
pairing flag exists.

Admin surface (hub-authorized: implicit from loopback until an admin password is set, then cookie
sessions): GET /projects (the validated list + gating state) · GET /projects/stream (SSE) ·
GET /projects/browse?path=… (read-only host folder picker) · POST /projects {root, initGit?, init?}
(explicit setup, then register) · GET|PUT /projects/<id>/config (raw portable
spexcode.json, revision-guarded) · POST /projects/<id>/init|doctor|serve
(run the real `spex init`/`spex doctor`, or start an offline project's backend, detached — a
backend never depends on this gateway staying up) · PUT|DELETE /projects/admin-password and
/projects/<id>/password (the gates). A gated project answers /p/<id>/login with the designed page.

Loopback-only by default; --host widens the bind — the admin surface stays locked to loopback until
an admin password exists, and ungated projects serve open.

see also: spex serve (each project's backend) · spex serve ui (explicit one-backend pairing)

map: spex help · skills: spex guide

spex help doctor

help:doctor

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 95bb58d485dc84af20caaaeea011d32ed51440de7261bf251943d308231f9eb4
Content role help
spex doctor — diagnose spec health and whether the workflow reaches this agent  [--contract|--conflicts]

Usage: spex doctor                spec-health findings + delivery report: preconditions · git-hook floor ·
                                  contract · hooks + handler existence · backend · footprint
       spex doctor --contract     print the composed surface:system text any agent here reads
       spex doctor --conflicts    detect double-delivery (loose artifacts beside the managed ones)

Bare doctor is the opt-in, read-only health surface: it reports altitude and breadth findings without
putting them in the lint gate, then audits workflow delivery. Run it directly or let the tidy workflow
consume the same visible diagnosis.

see also: spex spec lint (deterministic graph/contract gate) · spex materialize (repair delivery artifacts)

map: spex help · skills: spex guide

spex help eval

help:eval

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 624484225f1ae78f52a853396994967201f8efb6017b331580fbdc044e8463e2
Content role help
spex eval — the measurement system: add · ls · scenario ls/write · lint · ok · retract · clean

Usage: spex eval add [<node>|.] [--scenario <name>] (--pass|--fail) [--note <text>]
                    [--image <png> …repeatable] [--result <path|->] [--video <webm|mp4>] [--timeline <json>]
       spex eval ls [<node>|.] [--json]                a node's eval timeline, newest first
       spex eval ls --session <SEL> [--json]           a session's aggregate: its changed nodes' scores
       spex eval ls --session <SEL> --export [--open | --out <path>]
       spex eval scenario ls [<node>|.] [--unmeasured] [--json]   declared scenarios; JSON = canonical index
       spex eval scenario write --mutation <json> < eval.md       propose one canonical metadata mutation
       spex eval lint [--changed]                      measurement-layer findings (advisory, always exit 0)
       spex eval ok <node> [--scenario <name>]         the HUMAN sign-off on the scenario's latest measurement
       spex eval retract [<node>|.] [--scenario <name>] [--last | --ts <iso>] [--note <why>]
       spex eval clean [--keep-latest | --all]         GC the content-addressed evidence cache

add — file an eval of a scenario against its expected: the loss signal the optimizer reads.
Measure through the REAL product surface, never by reasoning about the code. Evidence kind follows
the behaviour: MOVING/timed behaviour records a --video; a STATIC end state screenshots --image;
backend/CLI files a --result transcript. A fix's evidence is a fail→pass pair on the SAME scenario.

ls — node-scoped bare (its per-scenario eval history); session-scoped with an EXPLICIT --session
(never type-sniffed): filed evals are newest-first across nodes and source ownership; own measurements
are ✦-marked, evals filed by other sessions are unmarked, and blind spots follow measured rows. --export writes ONE self-contained
HTML artifact (diff · evidence inlined · gates) for CI/sharing.

scenario ls — the DECLARED contracts, no evals: text may show the latest verdict and --unmeasured is its blind-spot
worklist; --json emits the complete canonical semantic/measurement index with stable hashes and fixed-tree provenance
(--unmeasured is text-only because the JSON projection never reads the eval sidecar).

scenario write — the fixed-tree declaration writer for an external measurement guard: stdin is the authoritative
eval.md, --mutation is one closed JSON insert/delete request for one scenario's test metadata, and stdout is only
the proposed eval.md bytes. It reads no worktree or runner and fails without stdout on malformed or ambiguous input.

lint — the measurement layer's findings: malformed eval.md (eval-schema) · unmeasured (eval-missing) ·
stale (eval-drift) · orphaned remark tracks (eval-dangling) · governed source with no eval.md
(eval-coverage — the same name and shape as spec lint's coverage, one rule per layer) · over-owned
files (eval-owners). --changed scopes to the nodes THIS branch touched. spec lint's errors block
commits; eval lint is PURE ADVISORY, always exit 0 — a measurement gap never blocks anyone.

ok — the human's reviewed-and-agreed mark on the scenario's LATEST measurement: an appended, monotonic
sign-off bound to that one immutable measurement (a newer measurement or staleness releases it on its own —
no un-ok exists). The evals feed default-hides a fresh, ok'd scenario; a governed session is refused
(an agent's judgment on a measurement is a remark, never a self-blessing).

retract — the sanctioned undo for a botched filing: APPENDS a retraction event (traceable, never
deletes a line); the previous eval becomes latest again, or the scenario honestly returns to
unmeasured.

`.` as a node argument means the node THIS worktree works on (the session's bound node, else the
node/<id> branch). One-shot payload reads (graph · spec search · session ls/show/review · eval ls ·
scenario ls · issue ls/show/links) take --json.

see also: spex guide eval (the eval.md scenario format + evidence rules) · spex evidence (bare byte transport)

map: spex help · skills: spex guide

spex help evidence

help:evidence

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 14b1861f855e7dd23bff818f8e86b9be628c5075bea253eec6af30fd6bcf5be9
Content role help
spex evidence — content-addressed bytes: put stashes & prints the hash, get reads back

Usage: spex evidence put <file|->
       spex evidence get <hash> [-o <file>]

put writes bytes into the shared content-addressed evidence cache and prints the hash — transport
only, no eval filed. Use the hash with --evidence on issues/remarks; re-putting the same content
restores pruned or cloned-away evidence.

get is the symmetric read: hash in, bytes out. Local cache first (no backend needed — the evidence
is usually on this disk), then the backend on a local miss; both missing fails loud naming each
path. Bytes go to stdout by default (pipe-friendly); -o writes a file.

see also: spex eval add (file an eval WITH evidence) · spex issue open --evidence <hash>

map: spex help · skills: spex guide

spex help graph

help:graph

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 e7c7314c04cd853dfc55b375deb0599d13edd3cc4e2c735b521ed6940ae563a0
Content role help
spex graph — the assembled view: bare = readable tree · --json = the full payload

Usage: spex graph [--focus <id>] [--depth N] [--json]

The ONE assembled view — merged spec tree + worktree overlay + sessions. Bare it renders the
status-coloured tree (coloured when stdout is a tty; NO_COLOR respected), one line per node: id,
derived status, title, and attention badges (drift:N · stale:N · issues:N · ghost).
  --focus <id>  render just that subtree (unknown id fails loud)
  --depth N     limit levels below the shown root; prunes are counted, never silent
  --json        the full payload (tree · overlay · sessions), identical to GET /api/graph — machine
                food; with --focus/--depth it is that filtered subtree as nested objects instead

see also: spex spec search (find one node by intent) · spex session ls (just the sessions, as a table)

map: spex help · skills: spex guide

spex help guidance

help:guidance

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 681615999d2224e8edaefd35c529d182abe4efde6652d3fffe692275de6c75f2
Content role help
spex guidance — export the immutable guidance catalog index  [--out <path>]

Usage: spex guidance [--out <path>] [--json]

Prints the deterministic, schema-versioned guidance index. Entries point at the authoritative active plugin,
help, and guide sources with exact rendered content, content hashes, and git revision provenance. The derived
effective system-contract view follows materialization order; no separate authoring source is created.
--out writes the same bytes to a file instead of stdout.

see also: spex help · spex guide (the source guidance surfaces)

map: spex help · skills: spex guide

spex help guide

help:guide

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 6ad9a4fb0106e3a1624b7765112dd6f6b3ee4ffc93d0c1679aeedbd4208a5204
Content role help
spex guide — the manuals: setup workflow · spec/eval file formats · spexcode.json · footprint

Usage: spex guide            the human setup workflow (install once, adopt a repo, serve)
       spex guide spec       the spec.md file format + every lint rule
       spex guide eval       the eval.md scenario format + how loss is measured and filed
       spex guide settings   every spexcode.json / spexcode.local.json field, and which file it belongs in
       spex guide footprint  the footprint model: never-tracked artifacts, exclude + content filter, anchors

guide is the SKILL layer — workflows and formats. Command usage lives here in help
(`spex help <cmd>`); guide carries what the commands assume you know.

map: spex help · skills: spex guide

spex help help

help:help

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 e310e52974337a2377705d16d46a34c91a3e48a3bbeb8033d70337408c43da0a
Content role help
Usage: spex help              the command map
       spex help <command>    one command/drawer's usage (same as spex <command> --help)
       spex guide [topic]     the skill layer: workflows, file formats, best practice

map: spex help · skills: spex guide

spex help init

help:init

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 25c43590b8649fbff0dc43d778b6f79e7a03e3e3bcf24996355f64d9480d2fb7
Content role help
spex init — adopt SpexCode on a repo: seed .spec + hooks + materialize  --harness <ids> [--preset name]

Usage: spex init [dir=cwd] --harness <id[,id]|plugin:<folder>> [--preset default]

Scaffolds adoption in one shot: seeds a starter .spec tree (project root + .plugins plugins), plants
spexcode.json, installs the git hooks, and materializes the harness artifacts (contract block +
shims). --harness is REQUIRED — the explicit choice of which harnesses materialize delivers into
(stamped as spexcode.json "harnesses"; only their launchers are seeded); a pre-existing "harnesses"
field satisfies it. Additive — never overwrites your files. --preset picks the .plugins plugin tier (cumulative).
Footprint is fixed: materialized artifacts are never tracked — hidden via the per-clone .git/info/exclude, with
a tracked/mixed CLAUDE.md/AGENTS.md covered by the clean/smudge filter (see spex guide footprint).

see also: spex guide (the full setup workflow) · spex uninstall (the inverse) · spex spec lint (adoption TODO)

map: spex help · skills: spex guide

spex help internal

help:internal

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 756c1a85d6f7d6e9711a4de766ec1c767af772d63c8728c33a769de2d46a75ee
Content role help
Usage: spex internal <sub>

Machine plumbing — called by generated hooks and launch scripts, never typed by a human or agent:
  trunk             print the resolved source-of-truth branch (the pre-commit main-guard captures it)
  commit-surgery    pre-commit footprint anchor: unconditional materialize + staged-index repair
  refresh-footprint quiet materialize — the post-checkout/post-merge freshness anchor
  check-staged      pre-commit eval backstop: reject staged stray evidence files / malformed eval.md
  session-state <st> --session <id>   a lifecycle hook authors the session's state
  session-fail  --session <id>        the StopFailure hook marks the session errored
  session-idle  --session <id>        the idle-prompt hook marks an active session idle
  commit-gate       the Stop gate's deterministic commit check (exit 0 = ready to declare done)
  hook-prompt <name>                  render canonical model-facing text for a runtime hook
  nudge <node>      the post-merge hook prints the issue nudge for a merged node
  shared-runtime-spawn <cwd> <log> <pid> <scope> <cmd> [args…]  detached adapter control plane (launch script)
  codex-launch <sock> <cwd> [prompt…]   backend-owned codex thread/start + first turn (launch script)
  codex-turn   <sock> <threadId> <text…>  fire a follow-up turn on an owned thread (tests/scripts)
  claude-headless-run <id> <runtime> <cmd> -- <tail…>  resident stream-json controller (launch script)
  pi-headless-run <id> <runtime> <cmd> -- <tail…>      resident pi text-mode controller (launch script)

If you reached for one of these by hand, the porcelain you want is probably elsewhere: the trunk
name also lives at GET /api/settings (.layout); sessions are driven with spex session new / session send;
your own state is declared with spex session done|park|ask.

see also: spex help (the porcelain map)

map: spex help · skills: spex guide

spex help issue

help:issue

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 c4f181e56ff97a4535dd66d230ebc5ed8e9abcfcd608c367c9c172722e96df5b
Content role help
spex issue — concern threads, local + forge merged: ls · show · open · reply · close · promote · links

Usage: spex issue ls [--node <id>] [--store local|<host>] [--all] [--json]
       spex issue show <id> [--json]
       spex issue open "<concern>" [--store local|<host>] [--node <id>…] [--evidence <hash>…] [--body -|<text>]
       spex issue reply <id> --body -|<text> [--evidence <hash>…]
       spex issue close <id>
       spex issue promote <id>
       spex issue links [--pending] [--store <host>] [--node <id>] [--json]

ls is the drain view a supervisor reads: ONE store-tagged list, local + forge interleaved by
creation time. `show <id>` is the single-thread detail — the whole thread with its replies (a local
id, or a forge id like github#12). `open` welcomes taste, annotations, and off-mainline smells —
not only bugs; --store <host> opens straight on the forge. `reply` and `close` route by the
issue's store — one verb, local or forge. `promote` moves an OPEN local issue to the forge as one
recorded action. `links` is the read-only forge trace: which open forge issues/PRs serve which
spec node (--pending narrows to threads still awaiting an eval). The issues workflow's
on/off switch is the `issues.enabled` key in spexcode.json (no CLI toggle verb — edit the JSON;
`spex doctor` reports its state).
Mentions: @session · [[node]] work in ANY prompt, issue, or remark body — text passed as a CLI arg included.
[[node]] names a topic; @session names a retained session for the receiving agent to inspect, contact with
`spex session send`, or inherit with `/distill`. Mentions are references only: they never send or spawn.

see also: spex remark (pin a resolvable concern to an issue or scenario) · spex evidence put (stash evidence bytes)

map: spex help · skills: spex guide

spex help materialize

help:materialize

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 bc4c3a0525d1a27e2d5d86a69ff4506842252eec2a4f069afe4af3c4f999363a
Content role help
spex materialize — the base pass of harness adaptation: render .spec/.plugins into your harness’s artifacts

Usage: spex materialize

The base operation of HARNESS ADAPTATION: one pass renders the spec tree's surface nodes into the
artifacts each selected harness auto-discovers — the managed <!-- spexcode --> block of
CLAUDE.md/AGENTS.md, the .claude/.codex shims, the skills/agents — and prints the content hash.
The outputs are derived and never tracked: to change one, edit its source (.plugins, spexcode.json)
and re-materialize — never the artifact. Not a one-time setup: it anchors on git-native events
(init · this verb · session-worktree creation · the pre-commit/post-checkout/post-merge hooks) —
run it by hand after a toolchain update, or in the setup step of any clone that has no spex-planted
hooks yet (CI, a cloud agent): generated and excluded, the artifacts never arrive via git.

see also: spex doctor (verify the materialized artifacts actually reach an agent)

map: spex help · skills: spex guide

spex help remark

help:remark

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 9c953f56a1533eacb245c2fd64623f31bc5f1bedc21c334d81b38c7780a81396
Content role help
spex remark — resolvable pins on a host: add · resolve · retract

Usage: spex remark add <issue-id | <node> --scenario <name>> --body -|<text> [--code-sha <sha>] [--evidence <hash>…]
       spex remark resolve <ref>          (the <thread-id>#<rid> that `spex remark add` printed)
       spex remark retract <ref>

The resolvable interaction primitive: `add` pins a concern to a HOST — a local issue, or a scenario
(`--scenario` present ⇒ the positional is a node; otherwise it is an issue id — the flag decides,
never type-sniffing). A SECOND agent `resolve`s it (never the author); the AUTHOR `retract`s their
own. The whole loop is CLI-first; the dashboard adds no capability.

see also: spex issue (the thread hosts) · spex eval ls (scenario hosts)

map: spex help · skills: spex guide

spex help serve

help:serve

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 a93c122d4e81ae84a0c26044201c3e0599a41ef2bb34361178ad3432c2eeee2c
Content role help
spex serve — api (default) = the backend :8787 · ui = the dashboard :5173 on top of it

Usage: spex serve [api] [--port N=8787]
       spex serve [api] --public --password <pw> [--tls-cert F --tls-key F] [--http]
       spex serve ui [--port N=5173] [--api-port N=8787] [--host H=127.0.0.1]

`serve` (or `serve api`) runs the backend for the repo at cwd behind a zero-downtime supervisor
(hot-reloads on source change; the public port never gaps). On a successful bind it RECORDS its
endpoint in the per-project runtime tier — that's how a bare `spex` run from this project's tree
finds this backend (spex guide settings → BACKEND ROUTING). --public exposes it on a public IP behind
a password + self-signed TLS (own cert via --tls-cert/--tls-key; --http drops TLS).

`serve ui` is a SEPARATE process: it serves the bundled dashboard on its own port and proxies /api +
the terminal socket to a running backend (--api-port pairs with the backend's --port, so many
projects coexist on one host). Loopback-only by default; --host 0.0.0.0 opens it to a LAN/tailnet —
still plain HTTP with no gate, so bind wide only on a network you trust.

see also: GET /health (backend liveness probe)

map: spex help · skills: spex guide

spex help session

help:session

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 315cc1d3bea368085e0e63d7da833ca73357d1ca0ec399124eb2b9b8488cd997
Content role help
spex session — the worktree state machine: new · ls · watch · wait · review · merge · send · …

Manager verbs (dispatch, monitor, land):
  spex session new "<prompt>" [--prompt-file <path>|-] [--launcher <name>] [--name <name>] [--base <commit-ish>]
      Launch a worker in its own node worktree. The materialized system contract reaches it
      automatically; the prompt supplies the task context. Its first [[id]] mention binds the
      session to that node. --prompt-file <path>|- carries a long prompt without shell quoting
      (exclusive with the inline prompt). --name sets the session's initial display name without changing the prompt.
      --base <commit-ish> pins the fork point instead of the source-of-truth branch's current head, so a run can be
      reproduced against a frozen commit; a base that names no commit is refused before anything is created.
      The successful receipt names what to read, monitor, and reply on.
  spex session ls [SEL…] [--status a,b] [--all] [--json]
      One-shot table of living sessions. Shelved sessions ([[archive]]) are hidden; --all includes them, and naming one explicitly always shows it.
  spex session resources [--json]
      Read-only host/process ownership, budgets, shared refs, and findings.
  spex session watch <SEL…>
  spex session watch list
  spex session watch cancel <SEL…>
  spex session watch stream [SEL…] [--as NAME] [--idle] [--interval N=1]
      With a governed caller, watch registers durable send-backed state delivery and exits. list/cancel manage those relations. Without a governed caller it names the background `session wait` fallback. stream is the human-only continuous log view and blocks until killed.
  spex session wait [SEL…] [--timeout S=1200] [--interval S=1] [--idle]
      EDGE-TRIGGERED wait: follows the selected sessions' logs AND your own log, and exits 0 on
      the FIRST thing worth waking for — a followed session TRANSITIONING from a non-actionable
      status into an actionable one (stdout = the observed path, e.g. working→review; read the LAST
      token as the status reached), or a message arriving for you (stdout = message). The arrival
      status is printed immediately on stderr but never returns it: it NEVER returns just because a
      session is actionable ALREADY — for "what is it right NOW" use `session ls` / `session review`.
      It reads files only, so it needs no `spex serve` and costs the sessions it follows nothing.
      --timeout is the guaranteed exit (code 1, observed path on stderr); code 2 = a followed
      session's store is gone.
  spex session review <SEL> [--json]
      Reports ahead · uncommitted · proposal · gates · merge-base diff.
  spex session merge <SEL>
      Dispatches a gated merge to the session's own agent; it does not close the session.
  spex session reparent <child-SEL...> --to <parent-SEL>
      Move one or more governed children to a replacement parent, replacing only the former parent's managed watch relation. It never restarts a child and works when the former parent is offline.

Control another session:
  spex session send <SEL> "<msg>"
  spex session send <SEL> [--api <url> | --port <n>] -- <option-shaped-msg>
  spex session send <SEL> --keys "<keys>"
      Plain send delivers a message once its timeline append succeeds; a dead adapter only delays its context. Routing flags may precede or follow ordinary text; use -- before a message that begins with --. --keys is the LAST RESORT:
      raw nav-mode keystrokes to a TUI dialog ("Up Up Enter", C-/M-/S- combos). The raw key surface
      is UNSTABLE and can confirm dangerous dialogs — try a plain send first; use keys only when text
      provably cannot land.
  spex session interrupt <SEL>
      Hard-interrupt the current turn through native harness control.
  spex session rename <SEL> "<name>"
      Set the display name; an empty name clears it.
  spex session show <SEL> [--capture] [--json]
      The session record: status · node · branch · launcher · the full originating prompt.
      --capture prints the LIVE PANE as text instead (empty pane = exit 0; unknown session = exit 2).
  spex session resume <SEL> [--force]
      Relaunch ONLY if confirmed offline; --force is for a wedged session.
  spex session stop <SEL>
      Soft stop: kill the exact agent and KEEP the worktree resumable.
  spex session archive <SEL>
      Cold-archive it: exact leaf/runtime stopped, worktree and conversation kept.
  spex session unarchive <SEL>
      Deprecated compatibility spelling: same behavior as resume, relaunching the same conversation.
  spex session close <SEL>
      Retire ANOTHER session — one you dispatched — deleting its worktree, branch and record.
      <SEL> names that session; it is never `.` and never your own id. Closing yourself deletes the worktree
      you are running in, mid-turn. Your own ending is a declaration: `done --propose close`.
  spex session quarantine <ID> --adapter <harness> [--thread <native-id>] --tmux <id> --worktree <absent-path> --branch <absent-branch> [--restore]
      Move only an unreadable record after the backend proves every named residue absent. --thread is an adapter-native conversation id, never the SpexCode session id; omit it for Claude. Quarantine and --restore both require the original exact id because corrupt rows are outside selectors.

Worker verbs (declare YOUR OWN state — a claim the graph and your supervisor act on):
  spex session done --propose merge|nothing|close [--note T]
      `merge` declares review: committed work ready for human review, and it is the ONLY declaration that offers a clickable merge. `nothing` is an intended trap: it writes no state and sends the agent to the true merge, close, ask, or park destination. `close` declares close-pending only for settled work: discardable worktree and no outstanding human decision, follow-up, or inspection. The human closes it. This declaration is how a session ends itself; never run `session close` on your own id.
  spex session park --note <what-you-await>
      Declare parked only when a managed watch delivery or real background task will wake your own session. It self-resumes; waiting for a human is asking, not parked.
  spex session ask --note <your-question>
      Declare asking when the session needs a human reply or direction, including an answered exploratory question or handoff awaiting follow-up. It resumes only when the human replies; a background wake-up is parked instead.
  spex session files add <path>
  spex session files ls
  spex session files retract <path>
      Publish, list, or withdraw YOUR session’s live file paths. Posting stores an absolute path beside the session record without copying bytes; the dashboard downloads it only when the human clicks.
  spex session web add <url>
  spex session web ls
  spex session web retract <url>
      Publish, list, or withdraw YOUR session’s live loopback web-service URLs. Posting records no bytes and does not contact the service; the dashboard proxies the current HTTP/WebSocket service only when the human opens its preview.

Human escape hatch:
  spex session attach <SEL>
      Attaches the current terminal to the worker's tmux (detach: C-b d) and blocks until detached.
      LOCAL-only (fails loud on a remote backend); show --capture and send are non-interactive.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.
Manager verbs that WRITE (send/interrupt/rename/resume/stop/close/merge/reparent) are PROJECT-BOUND: a backend serving
another project's repo refuses loudly — name the target with --api <url> to drive it on purpose.
Mentions: @session · [[node]] work in ANY prompt, issue, or remark body — text passed as a CLI arg included.
[[node]] names a topic; @session names a retained session for the receiving agent to inspect, contact with
`spex session send`, or inherit with `/distill`. Mentions are references only: they never send or spawn.

see also: spex eval ls --session <SEL> (the session’s measured loss) · spex help eval

map: spex help · skills: spex guide

spex help spec

help:spec

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 08ce6d25a7ac5e708bc90c6679e8cca5653b8fff00b692999552a019bca3b6d0
Content role help
spex spec — the governance graph: search · owner · lint · ack

Usage: spex spec search <query…> [--limit N=10] [--json]
       spex spec owner <path> [--actionable]
       spex spec lint [--json]
       spex spec ack <node-id>… --reason "<why the contract still holds>"

search — which spec node GOVERNS a topic, ranked by user-story relevance (which surfaces user-facing
behaviour a code-grep misses). Run it BEFORE touching code: the node's spec.md body is the current
contract. The corpus is English — query in English.

owner — the reverse edge: a file's GOVERNORS (code: — drives drift + eval freshness) and REFERENCERS (related:
— coverage only), with the verdict spelled out (uncovered / related-only / sanely governed /
over-owned → split the file). --actionable prints NOTHING unless action is needed (hook use).

lint — checks the whole spec↔code graph and exits non-zero on errors. Errors: integrity (a
code:/related: file does not exist; a dead/ambiguous/unverifiable `path#symbol` selector; a selector
whose language has no designated extractor or whose extractor can't run here; a duplicate entry, a
base path both bare and scoped, or a selector on a glob/directory) · anchor-drift (a
commit since the spec's version touched an ANCHORED unit's lines, unacked — the blocking tier of
drift; same-file selectors OR'd, one error naming the hit selectors) · one-govern (a node
governs >1 DISTINCT file) · living (a "## vN" changelog heading) · id-format (an
id char outside the whitelist — ascii [a-z0-9-] or a non-ascii unicode letter/number, CJK ok — or a
leaf id reused) · mention (a [[id]] naming no node). Warns: coverage · drift
(UNANCHORED drift — always advisory, never blocks; on a scoped file's MISS, `lint.scopedCodeMiss:
"ignore"` may silence it) · anchor (anchoring a type) · related-drift (a scoped related row warns
per selector HIT, misses silent) · owners (whole-file governors only; scoped don't count) ·
confusable-id (two leaf ids one edit apart). spec lint's errors BLOCK commits (the prepared reference hook; bypass SPEXCODE_SKIP_LINT=1);
contrast `spex eval lint`, which is pure advisory and never blocks anyone. `--json` writes the
versioned machine report to stdout (source candidates + structured findings); its exit code still blocks
on errors.

ack — stamp Spec-OK on HEAD (an empty stamp commit): the drift remedy when only MECHANICS changed
and the spec's contract still holds. --reason is required and recorded in the ack commit's body
(quieting an anchor hit is a strong claim — the why must be durable). If the intent DID change,
edit the spec instead — same commit as the code.

see also: spex guide spec (the file format + every lint rule) · spex graph (browse the whole tree)

map: spex help · skills: spex guide

spex help uninstall

help:uninstall

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 ab6392642b05e9cef2299bb2f163eb5d9f68d651a799fb21b24b6711bab216b8
Content role help
spex uninstall — remove all derived artifacts + local state; preserve tracked intent  [--hooks]

Usage: spex uninstall [dir=cwd] [--hooks]

Removes all SpexCode-derived wiring and project-local state: contract blocks, harness shims,
generated skills/agents, plugin bundles, trust/filter/exclude entries, and the global per-project
store. Your tracked intent (.spec including .plugins, plus spexcode.json) and surrounding user prose
are preserved. Git hooks remain unless --hooks; that flag removes only unmodified canonical copies.

see also: spex init (re-adopt later — your tracked intent survives)

map: spex help · skills: spex guide

spex session archive --help

help:session.archive

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 e567e3c46d8da527e496bb212743e293ba487322a2026e4848f24a064c4d2c49
Content role help
Usage: spex session archive <SEL>

Cold-archive it: exact leaf/runtime stopped, worktree and conversation kept.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session ask --help

help:session.ask

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 a22863de0c4f12bf2a731192deda2a659ca8b977cf56452f61d17e035c6f37f0
Content role help
Usage: spex session ask --note <your-question>

Declare asking when the session needs a human reply or direction, including an answered exploratory question or handoff awaiting follow-up. It resumes only when the human replies; a background wake-up is parked instead.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session attach --help

help:session.attach

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 40f576eff0b320478c9f3bc526f9931b750e9c0162408e3c87693c28d0e8e5e3
Content role help
Usage: spex session attach <SEL>

Attaches the current terminal to the worker's tmux (detach: C-b d) and blocks until detached.
LOCAL-only (fails loud on a remote backend); show --capture and send are non-interactive.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session close --help

help:session.close

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 eb97d6613ebf537e49d13b797b7538ef145a6c020d80d112a5fe79d64e873aa8
Content role help
Usage: spex session close <SEL>

Retire ANOTHER session — one you dispatched — deleting its worktree, branch and record.
<SEL> names that session; it is never `.` and never your own id. Closing yourself deletes the worktree
you are running in, mid-turn. Your own ending is a declaration: `done --propose close`.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

Manager verbs that WRITE (send/interrupt/rename/resume/stop/close/merge/reparent) are PROJECT-BOUND: a backend serving
another project's repo refuses loudly — name the target with --api <url> to drive it on purpose.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session done --help

help:session.done

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 f2f8f5fe9ca601f567aaa56deaa1f27e4690e4a28b3e9aaed86b010edc40c7be
Content role help
Usage: spex session done --propose merge|nothing|close [--note T]

`merge` declares review: committed work ready for human review, and it is the ONLY declaration that offers a clickable merge. `nothing` is an intended trap: it writes no state and sends the agent to the true merge, close, ask, or park destination. `close` declares close-pending only for settled work: discardable worktree and no outstanding human decision, follow-up, or inspection. The human closes it. This declaration is how a session ends itself; never run `session close` on your own id.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session files --help

help:session.files

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 4307a647157fa8649c87aa9de5aa7cab5173a4ad3fe2534089b02ac2ce50081b
Content role help
Usage: spex session files add <path>
       spex session files ls
       spex session files retract <path>

Publish, list, or withdraw YOUR session’s live file paths. Posting stores an absolute path beside the session record without copying bytes; the dashboard downloads it only when the human clicks.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session interrupt --help

help:session.interrupt

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 3dbac0299b9e0016b0ec2dda0d4ee1313d2b2c166f52ba7d8d0207ca0280b206
Content role help
Usage: spex session interrupt <SEL>

Hard-interrupt the current turn through native harness control.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

Manager verbs that WRITE (send/interrupt/rename/resume/stop/close/merge/reparent) are PROJECT-BOUND: a backend serving
another project's repo refuses loudly — name the target with --api <url> to drive it on purpose.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session ls --help

help:session.ls

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 ae93a6fe428250131405a2fafb9fed87d3c48d2b6204e04219ddeeebe74a3ed0
Content role help
Usage: spex session ls [SEL…] [--status a,b] [--all] [--json]

One-shot table of living sessions. Shelved sessions ([[archive]]) are hidden; --all includes them, and naming one explicitly always shows it.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session merge --help

help:session.merge

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 0130200ab81253721a5277c91508305ddcc20a74623b48096b52d6ee5eafdaa7
Content role help
Usage: spex session merge <SEL>

Dispatches a gated merge to the session's own agent; it does not close the session.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

Manager verbs that WRITE (send/interrupt/rename/resume/stop/close/merge/reparent) are PROJECT-BOUND: a backend serving
another project's repo refuses loudly — name the target with --api <url> to drive it on purpose.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session new --help

help:session.new

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 2d28c51493e6eeb0301fad8c7bd7db48eb8e29520809194c606c75a20229962a
Content role help
Usage: spex session new "<prompt>" [--prompt-file <path>|-] [--launcher <name>] [--name <name>] [--base <commit-ish>]

Launch a worker in its own node worktree. The materialized system contract reaches it
automatically; the prompt supplies the task context. Its first [[id]] mention binds the
session to that node. --prompt-file <path>|- carries a long prompt without shell quoting
(exclusive with the inline prompt). --name sets the session's initial display name without changing the prompt.
--base <commit-ish> pins the fork point instead of the source-of-truth branch's current head, so a run can be
reproduced against a frozen commit; a base that names no commit is refused before anything is created.
The successful receipt names what to read, monitor, and reply on.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session park --help

help:session.park

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 04a754839400c6ea660b51a5c085602cc138b55078d8fe2837a938fd30e3f287
Content role help
Usage: spex session park --note <what-you-await>

Declare parked only when a managed watch delivery or real background task will wake your own session. It self-resumes; waiting for a human is asking, not parked.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session quarantine --help

help:session.quarantine

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 ab3d8c84cceaf8547561a7560e985f1c9a09d8380fbdc555aebabd80119a10bf
Content role help
Usage: spex session quarantine <ID> --adapter <harness> [--thread <native-id>] --tmux <id> --worktree <absent-path> --branch <absent-branch> [--restore]

Move only an unreadable record after the backend proves every named residue absent. --thread is an adapter-native conversation id, never the SpexCode session id; omit it for Claude. Quarantine and --restore both require the original exact id because corrupt rows are outside selectors.

Manager verbs that WRITE (send/interrupt/rename/resume/stop/close/merge/reparent) are PROJECT-BOUND: a backend serving
another project's repo refuses loudly — name the target with --api <url> to drive it on purpose.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session rename --help

help:session.rename

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 883a3b6ffbd4d6a989b3d084ab257ecbbbf8d618825b780bfb3104a809d4056c
Content role help
Usage: spex session rename <SEL> "<name>"

Set the display name; an empty name clears it.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

Manager verbs that WRITE (send/interrupt/rename/resume/stop/close/merge/reparent) are PROJECT-BOUND: a backend serving
another project's repo refuses loudly — name the target with --api <url> to drive it on purpose.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session reparent --help

help:session.reparent

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 aa12e86e5db682ea60b5b3bcda16224af9032ccbcd6f23dfe96d8f30680a5a93
Content role help
Usage: spex session reparent <child-SEL...> --to <parent-SEL>

Move one or more governed children to a replacement parent, replacing only the former parent's managed watch relation. It never restarts a child and works when the former parent is offline.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

Manager verbs that WRITE (send/interrupt/rename/resume/stop/close/merge/reparent) are PROJECT-BOUND: a backend serving
another project's repo refuses loudly — name the target with --api <url> to drive it on purpose.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session resources --help

help:session.resources

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 bfe81a6cfb706441cdde77de53120621eb177ce4903895bd839dc359a4d18497
Content role help
Usage: spex session resources [--json]

Read-only host/process ownership, budgets, shared refs, and findings.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session resume --help

help:session.resume

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 ff9cc680748a38cd71a86ed7c28983aba1bd0ad324487b5bb161f539d5b69a0a
Content role help
Usage: spex session resume <SEL> [--force]

Relaunch ONLY if confirmed offline; --force is for a wedged session.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

Manager verbs that WRITE (send/interrupt/rename/resume/stop/close/merge/reparent) are PROJECT-BOUND: a backend serving
another project's repo refuses loudly — name the target with --api <url> to drive it on purpose.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session review --help

help:session.review

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 2d29e34d9bef8dea5ec2b5f42b07c8ca7c18301bf47c99794cb994e5bf6765c7
Content role help
Usage: spex session review <SEL> [--json]

Reports ahead · uncommitted · proposal · gates · merge-base diff.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session send --help

help:session.send

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 d11e6c3469625ad2adca3661be1462d61247220c7a8daa662058aee6f55074ed
Content role help
Usage: spex session send <SEL> "<msg>"
       spex session send <SEL> [--api <url> | --port <n>] -- <option-shaped-msg>
       spex session send <SEL> --keys "<keys>"

Plain send delivers a message once its timeline append succeeds; a dead adapter only delays its context. Routing flags may precede or follow ordinary text; use -- before a message that begins with --. --keys is the LAST RESORT:
raw nav-mode keystrokes to a TUI dialog ("Up Up Enter", C-/M-/S- combos). The raw key surface
is UNSTABLE and can confirm dangerous dialogs — try a plain send first; use keys only when text
provably cannot land.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

Manager verbs that WRITE (send/interrupt/rename/resume/stop/close/merge/reparent) are PROJECT-BOUND: a backend serving
another project's repo refuses loudly — name the target with --api <url> to drive it on purpose.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session show --help

help:session.show

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 81e05e8d825feaf76e79cb99fe195d010cdec551698b97ba578e595cbee4fb49
Content role help
Usage: spex session show <SEL> [--capture] [--json]

The session record: status · node · branch · launcher · the full originating prompt.
--capture prints the LIVE PANE as text instead (empty pane = exit 0; unknown session = exit 2).

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session stop --help

help:session.stop

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 194ef640148657d771e5f551f5db51c75ee6c9c753f6160baccf2e5a728fc9c3
Content role help
Usage: spex session stop <SEL>

Soft stop: kill the exact agent and KEEP the worktree resumable.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

Manager verbs that WRITE (send/interrupt/rename/resume/stop/close/merge/reparent) are PROJECT-BOUND: a backend serving
another project's repo refuses loudly — name the target with --api <url> to drive it on purpose.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session unarchive --help

help:session.unarchive

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 3f779c336515d0056471f33af7f19949f7d075d7227ba7a18312419e6cd7de0b
Content role help
Usage: spex session unarchive <SEL>

Deprecated compatibility spelling: same behavior as resume, relaunching the same conversation.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session wait --help

help:session.wait

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 9000221ae4b5139ed1dcd5233beb4b7ecfdcab5ae5963bf345966131e8143e25
Content role help
Usage: spex session wait [SEL…] [--timeout S=1200] [--interval S=1] [--idle]

EDGE-TRIGGERED wait: follows the selected sessions' logs AND your own log, and exits 0 on
the FIRST thing worth waking for — a followed session TRANSITIONING from a non-actionable
status into an actionable one (stdout = the observed path, e.g. working→review; read the LAST
token as the status reached), or a message arriving for you (stdout = message). The arrival
status is printed immediately on stderr but never returns it: it NEVER returns just because a
session is actionable ALREADY — for "what is it right NOW" use `session ls` / `session review`.
It reads files only, so it needs no `spex serve` and costs the sessions it follows nothing.
--timeout is the guaranteed exit (code 1, observed path on stderr); code 2 = a followed
session's store is gone.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session watch --help

help:session.watch

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 b5ff9182ec0d35055db701f49458c976f1864dbecf83f3da668eeef09e700a5e
Content role help
Usage: spex session watch <SEL…>
       spex session watch list
       spex session watch cancel <SEL…>
       spex session watch stream [SEL…] [--as NAME] [--idle] [--interval N=1]

With a governed caller, watch registers durable send-backed state delivery and exits. list/cancel manage those relations. Without a governed caller it names the background `session wait` fallback. stream is the human-only continuous log view and blocks until killed.

SEL = session id (or unique id-prefix) | node id | branch — every session read/control verb
accepts any of the four; inside a session worktree, . means that worktree's session. On the list verbs (ls/watch),
none (or @all) means every session.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide

spex session web --help

help:session.web

CLI command usage and safety guidance

Field Value
Source path spec-cli/src/help.ts
Source revision 6a63deb6be59a992e9e25e193cc72b1d5c27b77e
Content SHA-256 60d3ed8ee27b5a94f51839ee0f215c99ade5d5d7e6b73ea1a8c2d7cc2484024f
Content role help
Usage: spex session web add <url>
       spex session web ls
       spex session web retract <url>

Publish, list, or withdraw YOUR session’s live loopback web-service URLs. Posting records no bytes and does not contact the service; the dashboard proxies the current HTTP/WebSocket service only when the human opens its preview.

see also: spex session (the complete drawer)

map: spex help · skills: spex guide