Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Artifact CLI

Status: experimental — see Experimental Features.

For shell scripts, git hooks, and CI jobs that cannot speak MCP, the codescout binary exposes the artifact catalog as subcommands. Names mirror the MCP tool names 1:1, so any MCP example translates trivially.

Each subcommand defaults to a pretty table for human reading; add --json for machine consumers.

Why a CLI surface

The MCP server is the primary interface, but two reader classes cannot use it:

  • Pre-commit hooks that need to inspect open trackers before allowing a commit have no MCP client at hand.
  • CI jobs and shell pipelines that want to fail a build when an audit finds high-severity drift need a binary they can pipe through jq.

The CLI gives both groups direct catalog access without bootstrapping a session, while keeping the MCP surface as the single source of truth for behaviour — the CLI is a thin wrapper that calls the same code paths.

Subcommands

codescout artifact ... — CRUD and queries

SubcommandMirrors MCP actionPurpose
findartifact(action="find")Filter + semantic search
get <id>artifact(action="get")Body / headings / line slice / links
createartifact(action="create")New artifact (--kind, --title, --rel-path, --augment)
update <id>artifact(action="update")Patch fields; --commit-refresh after a gather
move <id>artifact(action="move")Rename / relocate; updates path edges
linkartifact(action="link")Create typed edge between two artifacts
graph <id>artifact(action="graph")BFS neighbourhood as ASCII tree
state-at <id>artifact(action="state_at")Time-travel snapshot at commit or timestamp

codescout artifact-event ... — append-only event log

SubcommandMirrors MCP action
createartifact_event(action="create")
listartifact_event(action="list")

codescout artifact-refresh ... — augmentation lifecycle

SubcommandMirrors MCP action
gather <id>artifact_refresh(action="gather")
list-staleartifact_refresh(action="list_stale")

codescout artifact-augment <id> — attach or patch augmentation

Mirrors artifact_augment MCP tool. Accepts --prompt, --params (JSON), and --merge for params-only RFC 7396 merge-patch.

Output modes

# Pretty table (default)
codescout artifact find --kind tracker --status active

# Machine-readable JSON
codescout artifact find --kind tracker --status active --json | jq '.[] | .id'

# Body of one artifact
codescout artifact get abc123 --full

# Just the "Findings" section
codescout artifact get abc123 --heading "## Findings"

Stdin support

For subcommands that take a body or augmentation params, pass - to read from stdin:

echo "# New spec\n\nDraft body." | codescout artifact create \
    --kind spec --title "Retrieval rewrite" --body -

This lets you compose bodies from cat chains, heredocs, or upstream pipeline stages without writing a temp file.

Exit codes

CodeMeaning
0Success
1Recoverable error (missing artifact, invalid filter, etc.) — message on stderr
2Usage error (bad flag combination)

Combine with --json for scriptable error handling — the JSON body includes the same error message the human-readable mode prints to stderr.

Relationship to the MCP tools

The CLI does not invent new behaviour. Anything you can do via the CLI you can also do via the MCP tools, and vice versa. When in doubt about a subcommand’s semantics, the MCP tool description is authoritative — the CLI inherits it.

Further reading

  • Design spec: docs/superpowers/specs/2026-05-16-artifact-cli-design.md
  • Implementation plan: docs/superpowers/plans/2026-05-16-artifact-cli.md
  • Librarian Embedded — the catalog the CLI reads