Skip to main content

CLI Reference

All commands are accessed via the arc binary. Use arc --help or arc <command> --help for inline help.

arc ask

Send a prompt to an agent and print the response.

arc ask [OPTIONS] [PROMPT]
OptionShortTypeDefaultDescription
PROMPTstringPrompt text. If omitted, stdin is required.
--agent-astringAgent name from ~/.arc/agents/
--model-mstringOverride model (e.g. haiku, sonnet, ollama/qwen3:8b)
--prettyflagfalsePrint dispatch info header before the response

Behavior: The CLI first tries the daemon via IPC. If the daemon is not running and daemon.auto_start is true, it spawns the daemon and retries. If still unreachable, it dispatches directly.

You must provide --agent or --model (or both). Without either, the command exits with an error.

Examples:

# Basic
arc ask --agent coach "What's my workout today?"

# Override model (use acpx alias for Claude, ollama/ prefix for Ollama)
arc ask --agent coach --model haiku "Quick question"

# Local Ollama model
arc ask --agent coach --model ollama/qwen3:8b "Summarize my week"

# Pipe stdin
cat report.md | arc ask --agent main

# Stdin and argument combined (concatenated with blank line)
cat context.md | arc ask --agent main "Given the above, what should I do next?"

# Show dispatch metadata
arc ask --agent coach --pretty "Hello"
# [acpx / sonnet]
#
# Hello! How can I help?

arc status

Show daemon state, configured agents, and scheduled cron jobs.

arc status [OPTIONS]

No options. Queries the daemon via IPC if running; otherwise reads config files directly.

Example output:

daemon running (pid=12345, socket=/Users/you/.arc/arc.sock)

agents
coach sonnet /workspace/fitness-coach discord 1234567890123456789
trainer ollama/qwen3:8b /workspace/fitness-coach

cron
weekly-plan next: in 3h 14m
heartbeat next: in 12 min
daily-summary disabled

arc version

Print the installed arc version.

arc version

Example:

arc version
# arc 0.2.0

arc setup

Interactive first-run setup wizard.

arc setup [OPTIONS]

Checks for acpx and claude in PATH, creates ~/.arc/ with subdirectories, writes a default config.yaml, and optionally configures Discord.

Example:

arc setup
# arc setup -- configuring /Users/you/.arc
#
# [ok] acpx: /usr/local/bin/acpx
# [ok] claude: /usr/local/bin/claude
#
# Created /Users/you/.arc/config.yaml
# Created /Users/you/.arc/.env (chmod 600)
#
# Set up Discord bot? [y/N]: y
# Discord bot token: ...
# Discord guild ID: ...
# Discord configured. Restart daemon to apply.
#
# Setup complete. Run: arc daemon start

arc tokens

Show Claude Code token usage via codeburn.

arc tokens [OPTIONS]
OptionShortTypeDefaultDescription
--agent-astringScope to a single agent's workspace
--period-pstringtodayPeriod: today, week, month, all
--cmdstringstatuscodeburn subcommand: status, report, today, month, export
--allflagfalseShow global spend across all projects (bypasses agent scoping)

Requires codeburn to be installed: npm install -g codeburn

Examples:

# Today's token usage across all configured agents
arc tokens

# Scoped to one agent
arc tokens --agent coach

# Weekly usage
arc tokens --period week

# Full interactive report
arc tokens --cmd report

# This month's dashboard
arc tokens --cmd month

# Export to CSV
arc tokens --cmd export

# Global spend across all Claude Code projects (not just arc agents)
arc tokens --all
arc tokens --all --period month

arc import-openclaw

Import agents and cron jobs from an OpenClaw installation.

arc import-openclaw [OPTIONS]
OptionTypeDefaultDescription
--frompath~/.openclawOpenClaw config directory
--dry-runflagfalsePreview without writing files

Examples:

# Dry run (preview only)
arc import-openclaw --dry-run

# Import from default location
arc import-openclaw

# Import from a custom path
arc import-openclaw --from /opt/openclaw

arc daemon

Manage the arc background daemon.

arc daemon start

arc daemon start [OPTIONS]
OptionTypeDefaultDescription
--foregroundflagfalseRun in the foreground (for systemd, do not background)

If the daemon is already running, exits with a message. Otherwise spawns the daemon as a detached background process.

arc daemon start
# Daemon started.

arc daemon start --foreground
# (runs until SIGTERM)

arc daemon stop

arc daemon stop

Sends SIGTERM to the daemon process. Reads the PID from ~/.arc/daemon.pid.

arc daemon stop
# Daemon stopped (pid=12345).

arc daemon status

arc daemon status

Prints running status, PID, and socket path. Exits with code 1 if not running.

arc daemon status
# Daemon running (pid=12345, socket=/Users/you/.arc/arc.sock)

arc daemon restart

arc daemon restart

Sends SIGTERM to the existing process (if any), waits briefly, then spawns a new daemon.

arc daemon restart
# Daemon restarted.

arc daemon install

arc daemon install

Generates a systemd user service unit file at ~/.config/systemd/user/arc-daemon.service.

arc daemon install
# Wrote /home/user/.config/systemd/user/arc-daemon.service
# To enable: systemctl --user enable --now arc-daemon

arc agent

Manage arc agent configurations.

arc agent list

arc agent list

Lists all YAML files in ~/.arc/agents/ with name, model, workspace, and Discord channel.

arc agent list
# coach sonnet /workspace/fitness-coach channel=1234567890123456789
# trainer ollama/qwen3:8b /workspace/fitness-coach

arc agent show

arc agent show NAME

Prints the raw YAML for the named agent.

arc agent show coach

arc agent create

arc agent create [OPTIONS]
OptionShortTypeDescription
--frompathCopy from an existing YAML file
--name-nstringAgent name
--workspace-wstringWorkspace directory path
--model-mstringDefault model

Without --from, prompts for missing values interactively.

# Interactive
arc agent create

# With flags
arc agent create --name coach --workspace /workspace/fitness-coach --model sonnet

# From a YAML file
arc agent create --from ./my-agent.yaml --name my-renamed-agent

arc agent edit

arc agent edit NAME

Opens the agent YAML in $EDITOR.

arc agent edit coach

arc agent delete

arc agent delete NAME [OPTIONS]
OptionShortDescription
--yes-ySkip confirmation prompt
arc agent delete old-agent
# Delete agent 'old-agent'? [y/N]: y
# Deleted agent 'old-agent'.

arc agent delete old-agent --yes
# Deleted agent 'old-agent'.

arc agent clone

arc agent clone SOURCE_NAME NEW_NAME

Copies an agent YAML under a new name. Clears discord.channel_id to avoid conflicts.

arc agent clone coach coach-dev
# Cloned 'coach' -> 'coach-dev'. Edit /Users/you/.arc/agents/coach-dev.yaml to configure.

arc cron

Manage scheduled cron jobs.

arc cron list

arc cron list

Lists all jobs in ~/.arc/cron/jobs.yaml with status, schedule, and options.

arc cron list
# weekly-plan [enabled] 0 19 * * 0
# Generate weekly training plan every Sunday at 7 PM
# heartbeat [enabled] */30 * * * * model=haiku notify=discord_on_urgent
# daily-summary [disabled] 0 20 * * *

arc cron add

arc cron add [OPTIONS]
OptionShortTypeDescription
--name-nstringJob name
--schedule-sstringCron expression
--agent-astringAgent name
--prompt-pstringPrompt text
--notifystringdiscord or discord_on_urgent
--model-mstringModel override

Prompts for missing required values. Writes to jobs.yaml and reminds you to restart the daemon.

arc cron add \
--name weekly-plan \
--schedule "0 19 * * 0" \
--agent coach \
--prompt "Write the weekly training plan." \
--notify discord
# Added job 'weekly-plan'. Restart daemon to schedule it.

arc cron remove

arc cron remove NAME

Removes a job from jobs.yaml.

arc cron remove old-job
# Removed job 'old-job'. Restart daemon to apply.

arc cron edit

arc cron edit NAME

Opens ~/.arc/cron/jobs.yaml in $EDITOR. The NAME argument is required but currently unused -- the command always opens the full jobs file regardless of which job name is given.

arc cron edit heartbeat

arc cron enable

arc cron enable NAME

Sets enabled: true for the named job. Requires daemon restart.

arc cron enable daily-summary
# Enabled daily-summary. Restart the daemon to apply.

arc cron disable

arc cron disable NAME

Sets enabled: false for the named job. Requires daemon restart.

arc cron disable heartbeat
# Disabled heartbeat. Restart the daemon to apply.

arc cron run

arc cron run NAME

Runs a job immediately. Routes through daemon IPC if running (enables Discord notifications and logging); falls back to direct dispatch if the daemon is not running.

arc cron run weekly-plan

arc cron next

arc cron next

Shows the next scheduled run time for each enabled job. Computes times directly from the cron expression without requiring the daemon.

arc cron next
# weekly-plan 2026-05-03 19:00 MDT
# heartbeat 2026-04-30 22:30 MDT
# daily-summary [disabled]

arc cron history

arc cron history [NAME] [OPTIONS]
OptionShortTypeDefaultDescription
NAMEstringFilter to a specific job (optional)
--last-nint10Number of entries to show

Reads from ~/.arc/logs/cron.jsonl.

arc cron history
arc cron history heartbeat --last 5
# 2026-04-30 21:30 heartbeat [ok] No urgent items found.
# 2026-04-30 21:00 heartbeat [ok] No urgent items found.

arc log

View arc log files.

arc log routing

arc log routing [OPTIONS]
OptionShortTypeDefaultDescription
--last-nint20Number of entries to show
--agent-astringFilter to a specific agent

Reads from ~/.arc/logs/routing.jsonl.

arc log routing
arc log routing --agent coach --last 5
# 2026-04-30 21:00 coach sonnet discord What's my workout today?

arc log cron

arc log cron [OPTIONS]
OptionShortTypeDefaultDescription
--last-nint10Number of entries to show
--job-jstringFilter to a specific job

Reads from ~/.arc/logs/cron.jsonl.

arc log cron
arc log cron --job weekly-plan --last 3

arc log tail

arc log tail [OPTIONS]
OptionShortTypeDefaultDescription
--agent-astringFilter routing log to a specific agent

Without --agent, runs tail -f on both routing.jsonl and cron.jsonl. With --agent, tails only routing.jsonl and prints lines matching that agent name. Press Ctrl+C to stop.

# Tail all logs
arc log tail

# Tail only coach agent activity
arc log tail --agent coach

arc config

Manage arc configuration.

arc config show

arc config show

Prints the current ~/.arc/config.yaml.

arc config show

arc config edit

arc config edit

Opens ~/.arc/config.yaml in $EDITOR.

arc config edit

arc config set

arc config set KEY VALUE

Sets a single config value using dot-notation. Type coercion: true/false become booleans, numeric strings become integers, everything else stays a string.

arc config set daemon.auto_start false
arc config set daemon.log_level debug
arc config set discord.enabled true
arc config set discord.rate_limit.messages_per_minute 10
arc config set timeouts.acpx_request 600

arc ping

Check reachability of the daemon, acpx binary, and all configured Ollama endpoints.

arc ping

Exits with code 0 if all checks pass, 1 if any fail.

Example output:

daemon ok ~/.arc/arc.sock
acpx ok /usr/local/bin/acpx
ollama ok local @ http://localhost:11434/v1
ollama fail kyle @ http://kyle.tailnet:8080/v1

Useful for verifying a fresh install or diagnosing connectivity issues without running a full dispatch.


Global options

The --config-dir option is available on all commands (hidden from help by default). It overrides the ~/.arc directory for testing or running multiple isolated arc instances. Pass it after the subcommand:

arc ask --config-dir /tmp/arc-test --agent main "Hello"
arc daemon --config-dir /tmp/arc-test start

Shell completions are installed with arc --install-completion and shown (without installing) with arc --show-completion.