Skip to content

CLI Reference

Run AI-powered workflows from your terminal.

  1. Clone the repository and install dependencies:

    Terminal window
    git clone https://github.com/coleam00/Archon
    cd Archon
    bun install
  2. Make CLI globally available (recommended):

    Terminal window
    cd packages/cli
    bun link

    This creates an archon command available from anywhere.

  3. Authenticate with Claude:

    Terminal window
    claude /login

Note: Examples below use archon (after bun link). If you skip step 2, use bun run cli from the repo directory instead.

Terminal window
# List available workflows (requires git repository)
archon workflow list --cwd /path/to/repo
# Run a workflow (auto-creates isolated worktree by default)
archon workflow run assist --cwd /path/to/repo "Explain the authentication flow"
# Explicit branch name for the worktree
archon workflow run plan --cwd /path/to/repo --branch feature-auth "Add OAuth support"
# Opt out of isolation (run in live checkout)
archon workflow run assist --cwd /path/to/repo --no-worktree "Quick question"

Note: Workflow and isolation commands require running from within a git repository. Running from subdirectories automatically resolves to the repo root. The version, help, chat, and setup commands work anywhere.

Send a message to the orchestrator for a one-off AI interaction.

Terminal window
archon chat "What does the orchestrator do?"

Interactive setup wizard for credentials and configuration.

Terminal window
archon setup
archon setup --spawn # Open in a new terminal window

Flags:

FlagEffect
--spawnOpen setup wizard in a new terminal window

List workflows available in target directory.

Terminal window
archon workflow list --cwd /path/to/repo
# Machine-readable output for scripting
archon workflow list --cwd /path/to/repo --json

Discovers workflows from .archon/workflows/ (recursive), ~/.archon/.archon/workflows/ (global), and bundled defaults. See Global Workflows.

Flags:

FlagEffect
--cwd <path>Target directory (required for most use cases)
--jsonOutput machine-readable JSON instead of formatted text

With --json, outputs { "workflows": [...], "errors": [...] }. Optional fields (provider, model, modelReasoningEffort, webSearchMode) are omitted when not set on a workflow.

Run a workflow with an optional user message.

Terminal window
# Basic usage
archon workflow run assist --cwd /path/to/repo "What does this function do?"
# With isolation
archon workflow run plan --cwd /path/to/repo --branch feature-x "Add caching"

Progress events (node start/complete/fail/skip, approval gates) are written to stderr during execution.

Flags:

FlagEffect
--cwd <path>Target directory (required for most use cases)
--branch <name>Explicit branch name for the worktree
--from <branch>, --from-branch <branch>Override base branch (start-point for worktree)
--no-worktreeOpt out of isolation — run directly in live checkout
--resumeResume from last failed run at the working path (skips completed nodes)
--allow-env-keysGrant env-leak-gate consent during auto-registration (bypasses the gate for this codebase). Audit-logged as env_leak_consent_granted with actor: 'user-cli'. See security.md.
--quiet, -qSuppress all progress output to stderr
--verbose, -vAlso show tool-level events (tool name and duration)

Default (no flags):

  • Creates worktree with auto-generated branch (archon/task-<workflow>-<timestamp>)
  • Auto-registers codebase if in a git repo

With --branch:

  • Creates/reuses worktree at ~/.archon/workspaces/<owner>/<repo>/worktrees/<branch>/
  • Reuses existing worktree if healthy

With --no-worktree:

  • Runs in target directory directly (no isolation)
  • Mutually exclusive with --branch and --from

Name Matching:

Workflow names are resolved using a 4-tier fallback hierarchy. This applies consistently across the CLI and all chat platforms (Slack, Telegram, Web, GitHub, Discord):

  1. Exact match - archon-assist matches archon-assist
  2. Case-insensitive - Archon-Assist matches archon-assist
  3. Suffix match - assist matches archon-assist (looks for -assist suffix)
  4. Substring match - smart matches archon-smart-pr-review

If multiple workflows match at the same tier, an error lists the candidates:

Ambiguous workflow 'review'. Did you mean:
- archon-review
- custom-review

Show all running workflow runs across all worktrees.

Terminal window
archon workflow status
archon workflow status --json

Resume a failed workflow run. Re-executes the workflow, automatically skipping nodes that completed in the prior run.

Terminal window
archon workflow resume <run-id>

Discard a workflow run (marks it as failed). Use this to unblock a worktree when you don’t want to resume.

Terminal window
archon workflow abandon <run-id>

Approve a paused workflow run at an interactive approval gate. Optionally provide a comment that is available to the workflow via $LOOP_USER_INPUT.

Terminal window
archon workflow approve <run-id>
archon workflow approve <run-id> "Looks good, proceed"
archon workflow approve <run-id> --comment "Looks good, proceed"

Reject a paused workflow run at an approval gate. Optionally provide a reason that is available to the workflow via $REJECTION_REASON.

Terminal window
archon workflow reject <run-id>
archon workflow reject <run-id> --reason "Needs more tests"

Delete old terminal workflow run records from the database.

Terminal window
archon workflow cleanup # Default: 7 days
archon workflow cleanup 30 # Custom threshold

Emit a workflow event directly to the database. Primarily used inside workflow loop prompts to record story-level lifecycle events.

Terminal window
archon workflow event emit --run-id <uuid> --type <event-type> [--data <json>]

Flags:

FlagRequiredDescription
--run-idYesUUID of the workflow run
--typeYesEvent type (e.g., ralph_story_started, node_completed)
--dataNoJSON string attached to the event. Invalid JSON prints a warning and is ignored.

Exit code: 0 on success, 1 when --run-id, --type is missing, or --type is not a valid event type. Event persistence is best-effort (non-throwing) — check server logs if events appear missing.

Show all active worktree environments.

Terminal window
archon isolation list

Groups by codebase, shows branch, workflow type, platform, and days since activity.

Remove stale environments.

Terminal window
# Default: 7 days
archon isolation cleanup
# Custom threshold
archon isolation cleanup 14
# Remove environments with branches merged into main (also deletes remote branches)
archon isolation cleanup --merged
# Also remove environments whose PRs were closed without merging
archon isolation cleanup --merged --include-closed

Merge detection uses three signals in order: git branch ancestry (fast-forward / merge commit), patch equivalence (squash-merge via git cherry), and GitHub PR state via the gh CLI. The gh CLI is optional — if absent, only git signals are used.

By default, branches with a CLOSED PR are skipped. Pass --include-closed to clean those up as well. Branches with an OPEN PR are always skipped.

Validate workflow YAML definitions and their referenced resources (command files, MCP configs, skill directories).

Terminal window
archon validate workflows # Validate all workflows
archon validate workflows my-workflow # Validate a single workflow
archon validate workflows my-workflow --json # Machine-readable JSON output

Checks: YAML syntax, DAG structure (cycles, dependency refs), command file existence, MCP config files, skill directories, provider compatibility. Returns actionable error messages with “did you mean?” suggestions for typos.

Exit code: 0 = all valid, 1 = errors found.

Validate command files (.md) in .archon/commands/.

Terminal window
archon validate commands # Validate all commands
archon validate commands my-command # Validate a single command

Checks: file exists, non-empty, valid name.

Exit code: 0 = all valid, 1 = errors found.

Remove a branch’s worktree, local branch, and remote branch, and mark its isolation environment as destroyed.

Terminal window
archon complete feature-auth
archon complete feature-auth --force # bypass uncommitted-changes check

Flags:

FlagEffect
--forceSkip uncommitted-changes guard

Use this after a PR is merged and you no longer need the worktree or branches. Accepts multiple branch names in one call.

Show version, build type, and database info.

Terminal window
archon version
OptionEffect
--cwd <path>Override working directory (default: current directory)
--quiet, -qReduce log verbosity to warnings and errors only
--verbose, -vShow debug-level output
--jsonOutput machine-readable JSON (for workflow list, workflow status)
--help, -hShow help message

The CLI determines where to run based on:

  1. --cwd flag (if provided)
  2. Current directory (default)

Running from a subdirectory (e.g., /repo/packages/cli) automatically resolves to the git repository root (e.g., /repo).

When using --branch, workflows run inside the worktree directory.

Commands and workflows are loaded from the working directory at runtime. The CLI reads directly from disk, so it picks up uncommitted changes immediately. This is different from the server (Telegram/Slack/GitHub), which reads from the workspace clone at ~/.archon/workspaces/ — that clone only syncs from the remote before worktree creation, so changes must be pushed to take effect there.

The CLI loads environment variables exclusively from ~/.archon/.env. It does not load .env from the current working directory. This prevents conflicts when running Archon from target projects that have their own database configurations.

On startup, the CLI:

  1. Deletes any DATABASE_URL that Bun may have auto-loaded from the target repo’s .env
  2. Loads ~/.archon/.env with override: true
  3. Auto-enables global Claude auth if no explicit tokens are set
  • Without DATABASE_URL (default): Uses SQLite at ~/.archon/archon.db — zero setup, auto-initialized on first run
  • With DATABASE_URL: Uses PostgreSQL (optional, for cloud/advanced deployments)

Both work transparently. Most users never need to configure a database.

Terminal window
# One-off AI chat
archon chat "How does error handling work in this codebase?"
# Interactive setup wizard
archon setup
# Quick question (auto-isolated in archon/task-assist-<timestamp>)
archon workflow run assist --cwd ~/projects/my-app "How does error handling work here?"
# Quick question without isolation
archon workflow run assist --cwd ~/projects/my-app --no-worktree "How does error handling work here?"
# Plan a feature (auto-isolated)
archon workflow run plan --cwd ~/projects/my-app "Add rate limiting to the API"
# Implement with explicit branch name
archon workflow run implement --cwd ~/projects/my-app --branch feature-rate-limit "Add rate limiting"
# Branch from a specific source branch instead of auto-detected default
archon workflow run implement --cwd ~/projects/my-app --branch test-adapters --from feature/extract-adapters "Test adapter changes"
# Approve or reject a paused workflow
archon workflow approve <run-id> "Ship it"
archon workflow reject <run-id> --reason "Missing test coverage"
# Check worktrees after work session
archon isolation list
# Clean up old worktrees
archon isolation cleanup