@stratusagent/cli
v0.12.0
Published
Stratus Agent CLI: setup walkthrough, agent creation, local runs, and dashboard
Readme
@stratusagent/cli
Always-on agents that get smarter over time. Set up Stratus Agent on your machine, create agents with real identities, connect AI providers, and put them in Slack — from one command.

Install
npm install -g @stratusagent/cli
stratus setupThat one package is everything you need to run agents: the runtime, the providers, the agent roster, and the always-on gateway all come with it. Needs Node.js 22.13+ (23.x line: 23.4+) — the CLI checks at startup and says so plainly if yours is too old. Details: Installation.
stratus setup is the whole onboarding, as one small menu: sign in (Claude
Pro/Max subscription or API key, ChatGPT/Codex, or any OpenAI-compatible
service), pick default and fallback models, create your first agent, enable
the plugins it may use, connect Slack, choose who approves gated calls while
nobody is watching, and install the always-on service — no config files to
edit, no env vars to export. Walkthrough:
Setup.
Commands
stratus setup # onboarding menu: providers, models, agent, plugins, channels, approvals
stratus chat # talk — the conversation persists
stratus run "say hello" # one-shot run (works offline on the demo provider)
stratus serve # stratusd: the whole roster, always on
stratus serve --approvals remote # ask a human in Slack instead of refusing
stratus service install # keep stratusd running under launchd/systemd
stratus logs -f # what the daemon has been doing
stratus doctor # what a run would use right now, and why
stratus update # stop → upgrade (CLI + its companions) → migrate → repair unit → restart
stratus --version # which build this is
stratus agent new # create an agent (guided on a terminal)
stratus agents # who's on the team: souls, models, memory
stratus template add owner/repo # install an agent, its skills, and the plugins behind them — prints what it will add, then asks
stratus skill add owner/repo # install skills from GitHub (validated against the Agent Skills spec) — a running daemon picks them up, no restart
stratus skill validate ./my-skill # check a skill against the spec without installing it
stratus plugins # installed → enabled → granted → what approvals does with it
stratus restart # announced restart: refuse, drain, come back — what a plugin change needs
stratus health # is the running daemon serving? exit 0/1, for container and probe health checks
stratus credentials # stored credential names (never values)
stratus signin set anthropic --agent remy # one agent's own Claude subscription, token asked without echo (also `signins`, `signin remove`)
stratus channel set imessage --agent blair apiKey # a channel plugin's secrets for one agent, asked without echo (also `channels`, `channel remove`)
stratus schedules # what the fleet has scheduled, and where it reports
stratus grants blair # what blair may do unattended, and `grants revoke` to take one back
stratus memory list blair # every live fact, with its trust label, pin, and validity
stratus memory search blair deploy pipeline # the way the agent searches it
stratus memory pin blair <id>... # keep facts in the prompt every turn (also `memory unpin`)
stratus memory export blair --file blair.jsonl # move an agent's memory (also `memory import`)
stratus memory reassert blair --trust user --all-unknown # vouch for the facts with no recorded origin
stratus session rollover <session-id> # archive a conversation's transcript and start the same id over
stratus dashboard # web dashboard, signed in via a one-time linkFull reference with every subcommand: CLI reference.
Options
| Flag | Purpose |
| --- | --- |
| --soul <file> | Run as the agent defined by a soul file (also STRATUS_SOUL / config soul key) |
| --provider | anthropic, openai, codex, or demo (offline, no account) |
| --model | Model for real providers (anthropic default: claude-opus-5-5, codex default: gpt-5.5) |
| --base-url | Override the provider API base URL |
| --config <file> | Load settings from a specific config file |
| --approvals | run/chat: always, ask, or never. serve: headless (refuse gated calls) or remote (ask in Slack) |
| --max-turns | Max tool turns per run before it wraps up (default 40) |
| --format | text or json |
| --idle-timeout | serve: seconds of provider silence before the watchdog aborts a turn (default 120) |
| --no-events | Hide the event log |
| --no-log-file | serve: do not write ~/.stratus/logs/stratusd.jsonl |
| --log-format | serve: text (default) or json — the log's records as JSON lines on stdout, for docker logs and journald |
| --no-api | serve: do not serve the control API |
| --api-host, --api-port | serve: control API bind (default 127.0.0.1:4123) |
| --gateway <url>, --token | agents, skill reload, restart, session rollover, grants, health: a running daemon's control API |
| --tool, --scope, --origin | grants revoke: which grant goes — exactly one |
| --trust <level> | memory list: show only that label; memory reassert: the label to record (user, agent, unknown, external) |
| --all-unknown | memory reassert: every live fact with no recorded origin |
| --limit <n> | memory search: maximum hits |
| --file <path>, --preserve-trust | memory export / memory import: the JSONL, and keeping each recorded label instead of landing entries external |
| --agent <id> | credential set/remove: that agent's own key rather than the fleet's shared one; signin set/remove: whose own sign-in it is; channel set/remove: whose binding it is |
| --port, --host, --no-open | dashboard: where a daemon it starts should bind; skip opening the browser |
| --no-login | service install: install without the start-at-login trigger |
| --version, -v | Print this build's version and exit |
| -f, -n, --agent, --session | logs: follow, backlog size, and filters |
Precedence: flags → STRATUS_* env vars → soul file hints → config file.
Project-local stratus.config.json outranks the global
~/.stratus/config.json; stored sign-ins are endpoint-bound and never sent
to endpoints a project config selects. Details:
Configuration.
Each agent's own state — its conversations, its memories, and what it may
do unattended — lives in ~/.stratus/agents/<id>/, owner-only, so no read
can reach another agent's. What is in a home directory, and what an upgrade
from the older shared files moves:
State layout
· Updating.
Optional packages
Out of the box an agent can already echo, remember, recall, delegate, and
(in the daemon) schedule. Everything beyond that — a transport, real-world
tools, an open port — is a separate package you add only when you want it,
and stratus setup offers the ones your answers imply:
npm install -g @stratusagent/channel-slack # agents in Slack
npm install -g @stratusagent/tool-fs @stratusagent/tool-shell \
@stratusagent/tool-web @stratusagent/tool-browser # real capability
npm install -g @stratusagent/plugin-mcp # mount MCP servers
npm install -g @stratusagent/control-api @stratusagent/dashboard # HTTP API + web UIA tool or MCP plugin runs nothing by being installed — a config you chose
enables it, then each agent's soul allowlists its tools. The two surfaces
switch on differently, on purpose: the Slack channel connects when an
agent's stored tokens say so, and installing the control API is itself the
decision to open an authenticated local port (--no-api takes it back).
The reasoning:
the plugin trust model.
Learn more
| I want to… | Read | | --- | --- | | Put my agents in Slack | Slack | | Give agents files, a shell, the web, a browser | Tools | | Decide what runs unattended, approve the rest from Slack | Approvals | | Let agents act on their own schedule | Schedules | | Teach an agent a procedure | Skills | | Run it as a service, read its logs, upgrade it | Always on · Logs · Updating | | Run it on a server, in Docker or under a system unit | Deployment | | Understand souls, ids, and memory | Agents · Memory | | Fix a surprise | Troubleshooting |
The full index: docs.
Part of Stratus Agent — a tiny TypeScript agent runtime, MIT licensed.
