Skip to content

CLI reference

The personalclaw command is the single entry point (installed by pip install -e . via the personalclaw console script; source: src/personalclaw/cli.py). Run personalclaw <command> --help for the live help text — this page mirrors it.

FlagEffect
--versionPrint the version and exit.
-v / --verboseIncrease log verbosity (-v INFO, -vv DEBUG). Overrides the persisted agent.log_level.

Commands that talk to a running gateway (status, stop, restart, token, logout, spawn) accept --port (default: resolved from the PERSONALCLAW_PORT env var or the dashboard.url config).

Start the PersonalClaw server (dashboard + channels). This is the long-running process everything else talks to.

FlagEffect
--headlessServe channels only; skip the dashboard web server and SSH tunnel instructions.
--no-cronsSkip the cron scheduler — use when another instance handles cron execution.
--no-openDo not auto-open the dashboard URL in the browser on startup.
--port PORTOverride the dashboard port — an integer, or auto for an OS-assigned ephemeral port. Falls back to config when omitted.
--json-readyPrint one PERSONALCLAW_READY:{...} line (port, token, pid, home) once bound — for test harnesses. The token grants access for up to 20 hours; treat captured stdout as sensitive.
--approval {reads,yolo,interactive}Default tool-approval mode. reads auto-approves read-only tools; yolo auto-approves everything (refused unless PERSONALCLAW_HOME is explicitly non-default); interactive uses the prompt flow.
--test-modeConvenience bundle: --port auto --no-open --json-ready --approval reads (explicit --port/--approval win).
--seed FIXTUREDev tool: populate $PERSONALCLAW_HOME from a named fixture (under tests_fixtures/) before starting. Refuses the main gateway home (~/.personalclaw) and non-empty targets.
--seed-replaceWith --seed, wipe $PERSONALCLAW_HOME before copying. Never overrides the main-home rail.

Chat with the agent from the terminal.

FlagEffect
(no flags)Interactive chat mode.
-m, --message TEXTSend a single message non-interactively.
--model NAMEModel to use for this run (default: the configured chat binding).

Install agent config and configure credentials (interactive wizard).

FlagEffect
--agent-onlyOnly install agent config; skip credential prompts.
--cleanFresh install — don’t merge MCP servers/tools from existing config.
--mode {docker,service,none}Deployment mode: Docker Compose, system service (systemd/launchd), or none.
--provider NAMESet the default chat provider by registry entry name.
--credential NAME[=VALUE]Store a named credential (value from the argument or an env var).

Verify the PersonalClaw setup (credentials, model bindings, channel tokens, directories). No flags.

CommandWhat it does
personalclaw status [--port]Show runtime stats from the running gateway.
personalclaw stop [--port]Stop a running gateway.
personalclaw restart [--port]Restart the gateway (service if installed, else foreground).
personalclaw logs [-f] [-n LINES]Show gateway logs (-f live tail; -n line count, default 100). Reads the systemd journal (Linux service), launchd stdout file (macOS), or the foreground log file.
personalclaw token [--port] [--ttl 20h]Print a dashboard access URL with a fresh auth token (--ttl e.g. 1h, 30m).
personalclaw logout [--port]Revoke all active dashboard sessions.
personalclaw updateUpdate PersonalClaw to the latest version (git fetch + rebuild).

Manage the gateway as a system service — systemd unit on Linux (/etc/systemd/system/, requires sudo) or launchd LaunchAgent on macOS (~/Library/LaunchAgents/, no sudo). Survives SSH disconnect, auto-restarts on crash, auto-starts on boot.

SubcommandWhat it does
service installInstall and start the gateway service.
service uninstallStop and remove the gateway service.
service statusShow service status (systemctl/launchctl).

Manage scheduled jobs.

SubcommandWhat it does
cron listList cron jobs.
cron add NAME MESSAGE [--every SECS] [--cron EXPR] [--channel ID] [--approval-mode auto]Add a job — interval (--every) or cron expression (--cron "0 9 * * MON-FRI"); optionally post results to a channel; --approval-mode auto auto-approves the job’s tools.
cron update JOB_ID [--name] [--message] [--every SECS] [--cron EXPR] [--channel ID] [--approval-mode auto|default]Update a job (default resets approval mode).
cron remove JOB_IDRemove a job.
cron pause JOB_ID / cron resume JOB_IDPause / resume a job.
cron trigger JOB_IDFire a job immediately.

Manage background subagents.

SubcommandWhat it does
spawn run TASK [--async]Spawn a subagent; waits for the result unless --async (fire-and-forget).
spawn listList active subagents.

Save or manage learned corrections.

SubcommandWhat it does
learn add RULE [--category tool|preference|knowledge] [--negative TEXT]Save a lesson (default category knowledge; --negative records what NOT to do).
learn listList all lessons.
learn remove QUERYRemove lessons whose rule matches a substring.

Manage the vector memory system.

SubcommandWhat it does
memory listShow semantic memory entries.
memory search QUERYSearch episodic memories.
memory statsShow memory statistics.
memory auditScan memory for suspicious content.
memory export [-o FILE]Export all memory to JSON (default: stdout).
memory import FILEImport memory from a JSON export.
memory migrateMigrate legacy markdown memory to the vector store.

Manage agent definitions.

SubcommandWhat it does
agent listList agents.
agent create --name NAME [--provider-agent NAME] [--default-dir PATH] [--memory-store NAME]Create an agent.
agent update NAME [--provider-agent] [--default-dir] [--memory-store]Update an agent.
agent delete NAMEDelete an agent.

Get or set configuration values (see the configuration reference).

SubcommandWhat it does
config get [KEY]Get a value by dot-separated key, or the whole config with no key.
config set KEY VALUE / config set --file FILESet a value (validated through the loader) or load a full config from JSON.
config editOpen config.json in $EDITOR.

Manage skills from the skills marketplace.

SubcommandWhat it does
skills listList locally installed skills.
skills search QUERY [--marketplace skills.sh]Search a marketplace.
skills install ID [--marketplace] [--target DIR] [--force]Install a skill (e.g. vercel-labs/agent-skills/next-js). Installs are supply-chain scanned; --force overrides a WARNING verdict — a DANGEROUS verdict is never overridable.
skills remove NAMERemove a locally installed skill.
skills curate [--dry-run]Groom the auto/ skill library (age active→stale→archived by last use).
skills verifyCheck installed skills’ file hashes against their install baseline (detects post-install tampering).

Security audit and deny list.

SubcommandWhat it does
security auditScan conversation history for suspicious tool usage.
security deny-listShow active deny patterns.
security events [-n LIMIT]Show recent security event log entries (default 20).
security verifyVerify security event log HMAC integrity.
CommandWhat it does
personalclaw snapshot [OUTPUT_DIR] [--keep N] [--list]Create a portable backup of PersonalClaw state (keeps the N most recent, default 7; --list shows existing snapshots).
personalclaw restore [SNAPSHOT] [--mode replace|merge] [--dry-run] [--components LIST] [--list-components] [--force]Restore state from a snapshot .tar.gz. --force restores even while the gateway runs.
personalclaw backup export [OUT_DIR] [--incremental]Export state as deterministic shards — canonical JSONL per store plus a SHA-256 manifest, byte-identical for identical state (so it diffs cleanly and syncs without re-uploading unchanged data). Defaults to <home>/shards. --incremental re-exports only the stores whose content changed. Secrets are never exported.
personalclaw backup validate [SHARD_DIR]Verify an export end to end: the manifest parses, every declared shard exists, and each one’s byte length, row count, and SHA-256 re-derive — plus every row re-parses. Exits non-zero on any problem, so it works as a cron/CI check. A backup nobody has verified is a hope, not a backup.

PersonalClaw can expose a read-only MCP endpoint at POST /mcp so a local MCP client (your IDE, an MCP inspector) can ask it questions. It is off by default and stays off until you both mint a token and flip the flag — and it only answers loopback callers.

CommandWhat it does
personalclaw inbound token create mcp [--rotate]Mint the surface’s bearer token, stored 0600 at <home>/.inbound_mcp_token. Printed once — copy it into your client immediately. --rotate replaces an existing token, which immediately invalidates the old one.
personalclaw inbound token show mcpReport whether a usable token is configured, and why not if it isn’t. Deliberately never prints the value: a credential the CLI can re-read is one an unattended process can exfiltrate. Lost it? Rotate.

Minting a token is not enough on its own — enable the surface too:

Terminal window
personalclaw inbound token create mcp # copy the printed bearer token
personalclaw config set inbound.mcp.enabled true

Both conditions are checked on every request, so setting inbound.mcp.enabled false is an immediate kill switch — no restart needed. When the surface refuses to mount, the gateway log carries one line naming the exact reason. Every request (allowed or refused) is recorded in <home>/inbound_audit.jsonl, and refusals also land in the security event log.

Remote access (inbound.mcp.allow_remote + inbound.public_url) exists but is discouraged until the hardened external-access layer lands. Neither knob is editable from the dashboard — they are config-file-only on purpose.

CommandWhat it does
personalclaw consolidate KEY | --allRun skill/memory extraction over a session transcript now (the same path the idle poll and session-end triggers use).
personalclaw eval [SCENARIOS...] [--all] [--judge]Run multi-session evaluation scenarios (default: a ~30s smoke test; --judge enables LLM scoring).
personalclaw mcp-schedule / personalclaw mcp-coreInternal MCP server entry points spawned by ACP agents — not user-facing (hidden from --help).

See also: Configuration reference · API overview · Getting started