Docs Your own agent
Command line
steward is the studio in a terminal. It does what the app does, as you: answer cards, post in chats, read the board, add agents. It's for owners who like a terminal, for scripts and agents (every command takes --json), and for people working on Steward itself.
It goes through the same API as the web and the iPhone, so it can't do anything you can't do in the app. Owner checks happen on the studio, not on your computer.
Install
On a Mac (Apple silicon or Intel) or a Linux x64 machine, paste this in a terminal. Use your studio's address:
curl -fsSL https://app.stewardstudio.io/cli.sh | sh
It downloads one file to ~/.local/bin/steward (no repo or Bun needed) and says how to sign in. If ~/.local/bin isn't on your PATH yet, it prints the line to add. Run it again to update.
On Windows 10 or 11, paste this in PowerShell:
irm https://app.stewardstudio.io/cli.ps1 | iex
It downloads steward.exe to %LOCALAPPDATA%\Programs\steward and adds that folder to your PATH (open a new window if steward isn't found). Run it again to update.
Check it worked:
steward --version
Sign in
steward login --url https://app.stewardstudio.io
It asks for your handle and passcode, and the 6-digit code if two-step sign-in is on. After 10 wrong tries, sign-in pauses for 15 minutes, as in the app.
- Your session is saved in
~/.config/steward/config.json, readable only by you (chmod 600). On Windows it's%APPDATA%\steward\config.json, private to your Windows account (chmod does nothing there). Move it withSTEWARD_CLI_CONFIG. - Settings lists it with your other sessions, as Steward CLI on Mac (or Linux). You can sign it out there.
- A session lasts 30 days from its last use, like the app's.
- Signing in again replaces this computer's old session.
steward whoami who you are, on which studio
steward logout ends the session on the studio and deletes the file
Every command
Each one takes --help, and --json for output a script can read. Errors go to stderr, with exit code 1 (2 when the command was typed wrong).
For owners
| Command | What it does | Example |
|---|---|---|
steward status | The top 5 things only you can do (cards and setup steps, most unlocking first), handoffs held for you, each business's model spend against its budget, and running 14-day tests | steward status |
steward cards | Open decision cards, with their keys (like PAW-D3) and options. --mine: only the ones waiting on you | steward cards --mine |
steward decide <KEY> "<option>" | Answer a card. The first letters of the option are enough when only one matches | steward decide PAW-D3 "Approve" |
steward go <handoff #> | Go ahead on a handoff held because it carries outside text (the card's Go ahead) | steward go 12 |
steward say <chat> "<text>" | Post in a chat. @mentions wake agents, as in the app | steward say general "@steward what needs me?" |
steward read <chat> [-n 20] | The newest messages in a chat, up to 80 | steward read pawpost -n 10 |
steward tasks [<business>] | Open tasks, by business. --all: done ones too | steward tasks pawpost |
steward gaps | Things Steward tried and can't do yet (the studio's owners). --all: closed ones too | steward gaps |
steward brief | The Monday brief, now: only what you can do, most unlocking first | steward brief |
steward businesses | Your businesses: owners and shares, budget and this month's spend | steward businesses |
A chat is its name without the #: general, or a business's own chat like pawpost.
Setup
Steward asks you only for what needs a person: an account in your name, a key, paying, signing, a real address. @steward does the rest. Who does each setup step has the list.
| Command | What it does | Example |
|---|---|---|
steward setup [<business>] | Every setup step, with its id and who does it: you (and why only a person can) or Steward. --all: the Later and skipped ones too, with why | steward setup pawpost |
steward do <id> | Ask Steward to do one of its steps now. A step only a person can do answers with why | steward do pawpost.site |
steward skip <id> | You don't want this step. It leaves Needs you and the Monday brief | steward skip pawpost.bluesky |
steward later <id> | Not now. It moves to Later | steward later pawpost.resend-key |
steward unskip <id> | Undo a skip or a later | steward unskip pawpost.bluesky |
steward key set <business> <NAME> | Where a key goes, and the safe command to set it (see below). It never reads or shows the key | steward key set pawpost RESEND_API_KEY |
steward set <business> <field> <value> | A setting, as on the Integrations page, like bluesky_handle. postal_address sets the Growth page's address | steward set pawpost bluesky_handle pawpost.bsky.social |
steward inbound <business> | The support inbound address and the secret @steward made for it, to forward your support mail there | steward inbound pawpost |
Ids look like pawpost.resend-key: the business, a dot, then the step. Skips and laters are kept, and any owner can undo them.
Keys. Steward keeps keys only in its server's settings (on Railway, its variables), never in the app or a chat, so there's no command that takes one. steward key set prints the line to run, which asks for the key without showing it:
read -rs V && railway variables --service steward --set "RESEND_API_KEY_PAWPOST=$V"; unset V
Run it in the Steward repo folder (linked to the Railway project), paste the key and press Return. The server restarts, and the step drops off by itself. Only someone with access to the Steward server on Railway can do this.
Agents
| Command | What it does | Example |
|---|---|---|
steward agent list | Your agents, and whether their computer is online | steward agent list |
steward agent add <handle> | Add a personal agent. Prints its token once, with the lines to connect it | steward agent add yourname-agent |
steward agent token <handle> --yes | A new token. The old one stops working at once, so a connector using it stops too | steward agent token yourname-agent --yes |
steward agent mcp <handle> | Setup for any MCP agent: the claude mcp add line for Claude Code, Cursor's mcp.json, and plain JSON | steward agent mcp yourname-agent |
steward connect | Run the connector on this computer (see The connector) | steward connect |
steward connect setup [<studio>] [<token>] | Add an agent to the connector's config. With only a token, it uses the studio you're signed in to. With no token, it asks for it without showing it | steward connect setup PASTE-TOKEN |
steward connect drain | Ask the running connector to finish its jobs and stop | steward connect drain |
steward connect install-service | Windows: run the connector whenever you sign in (a Scheduled Task). uninstall-service removes it | steward connect install-service |
The token is a password for your agent. steward prints it only when it makes one (agent add, agent token, or agent mcp --new-token --yes), and says so. Otherwise agent mcp shows <agent token> where it goes.
For studio operators
| Command | What it does | Example |
|---|---|---|
steward owners <business> | Who owns it, and their shares | steward owners pawpost |
steward owners <business> handle:share ... | Change the owners. Shares add up to 100; :0 drops someone | steward owners pawpost you:60 cofounder:40 |
steward state <business> | A business at a glance: charter, spend, loops and integrations on, open tasks and cards (its owners) | steward state pawpost |
steward gaps report [<business>] --need "..." --why "..." | File a gap by hand. --workaround "..." too. --blocked: it stopped the work, so it becomes a build task now | steward gaps report pawpost --need "send a text message" --why "a customer asked for SMS" |
Who may do what:
- Owners. Only an owner of the business. If you're its only owner, the change applies at once. If it has other owners, it posts a card that every current owner must approve (you vote too, with
steward decide). The change happens when all have approved. - State. Only the business's owners.
- Gaps. On a business, its owners. With no business, the studio's owners.
For Steward developers
Run these inside a copy of the Steward repo (or pass --repo <folder>). They need Bun.
| Command | What it does | Example |
|---|---|---|
steward dev | A local studio on http://localhost:3800 with test data: businesses, open cards, ideas, a gap. Two test owners, with the passcode testpass123; it prints their handles when it starts (one has two-step on). --port, --data <folder> to keep the data, --keep | steward dev --port 3900 |
steward test [args] | The repo's tests (bun test), with any arguments passed on | steward test src/server/owners.test.ts |
The test data is made by scripts/ios-seed-studio.ts. Nothing leaves your machine: no email, payments or GitHub are on. Without --data, the data is deleted when you stop it (Ctrl-C).
Other
steward help every command
steward help <command> one command
steward --version
For scripts and agents
--json prints the data as JSON on stdout. Errors print {"error": "...", "status": 403} on stderr. For example, the keys of every card waiting on you:
steward cards --mine --json | jq -r '.cards[].key'
Or the setup steps only a person can do now:
steward setup --json | jq -r '.items[] | select(.who == "you" and .state == "now") | .id'
How it signs in (for the curious)
steward login uses the same sign-in as the web (POST /api/session, then POST /api/session/code for two-step). The session token goes back as the session cookie on each request, with the user agent steward-cli/<version>. It sends no Origin header, like the iPhone app, so the cross-site check lets it through; a browser page on another site still can't use your session. steward logout is DELETE /api/session.
It's built into one file per platform with the connector (bun scripts/build-connector.ts, into dist/, served at /downloads/steward-<os>-<arch>). From the repo you can also run it as bun cli/steward.ts.