Guides
Personal and company deployments
The same office serves one person running agents for their own work and a company running agents for its business. What each needs, how to set it up, and what isn't there yet.
An office for one person and an office for a company run the same platform. They differ in who signs in, who approves what, which model credential is allowed, and what has to keep working when nobody is watching.
| Personal | Company | |
|---|---|---|
| Who | You (maybe a partner as a viewer) | A team with owners, admins, leads and viewers |
| Host | A Mac that is always on, or one small VPS | A dedicated VM, run like any server with admin credentials |
| Model credential | A Claude subscription token is fine for your own work | Anthropic API keys from a Console workspace with a spend limit; per-agent keys for sensitive agents |
| Approvals | You merge your own policy PRs | Different people approve hires, access and budget |
| Sign-in | A password, on a private URL (Tailscale or similar) | Your identity provider (SSO) |
| First thing that goes wrong | Nobody notices an agent is waiting; the disk dies without a backup | The security review asks about SSO, audit export and retention |
See Model credentials for Anthropic's terms on subscription tokens and API keys.
Start with officectl init --profile personal or --profile company for matching defaults. Once the office runs, Settings → Readiness checks this office against both lists below and links to the fix for anything missing.
A personal office#
- Host. A small Ubuntu 24.04 VPS with the bundled Gitea is the shortest path (Quickstart). A Mac works too (macOS desk Mac). Keep the office off the public internet unless you need it there: a Tailscale address is enough for your phone.
- Credential.
officectl init --model-credential-kind subscriptionstores aclaude setup-tokentoken. Settings shows "Subscription: personal use". - Approvals.
require_approvalsdefaults to0, so you merge your own hires and policy changes. Needs you still lists everything that waits for you. - Backups. Set
backup.scheduleandbackup.dirinoffice.yamland the office backs itself up every day, the bundled Gitea included (Scheduled backups). Copy the backups off the machine, and keep a copy ofsecrets.keysomewhere else (a password manager): backups don't contain it, and a restore on another machine needs it. - Upgrades.
officectl upgrade <version>shows the notes for every release it crosses and stops on breaking changes. Settings → About this release shows what you are running. After each one, restart and runofficectl doctor,officectl verifyandofficectl smoke(After an upgrade): the smoke confirms with a real run that your credential works through the model proxy. - Know when you're needed. On Account → Notifications, add an ntfy topic and install the ntfy app: approvals, policy proposals, agents' pull requests, replies to your mail and failures arrive as a push (Notifications).
- Costs. Settings → Spend shows each agent's spend today against its daily budget, and the last 7 days. On a subscription token, dollar figures are estimates;
budget.max_runs_per_day(default 24) caps runs instead. - If something goes wrong. Stop now on an agent's desk ends its running work at once; Settings → Emergency stop (or
officectl halt) stops every agent. Neither needs a pull request.
A company office#
- Sign-in. Connect your identity provider (Single sign-on) and turn
auth.local_passwordsoff, so its MFA and off-boarding apply. Setauth.oidc.require_groupto the group allowed in; the office re-checks everyone with the provider every hour (max_session_minutes). - Host. A dedicated VM that runs nothing else, patched and backed up like any host holding admin credentials. Read What the POC does and doesn't protect against first.
- Credentials. API keys only: an office key from a Console workspace with a spend limit, and a per-agent key for any agent that handles sensitive data. Agents never see the key: each run gets a token for the office's model proxy, which stops working when the run ends. Set daily budgets per agent with
hard_stop: true; each run reserves its share when it starts, so runs started together can't overshoot. - People and roles. Owners and admins few; leads review agents' work and merge project PRs (
code.review); everyone else a viewer. Invite people by email; remove them inaccess.yamlby PR. - Approvals. List different people as
hiring_approvers,access_approversandbudget_approversinaccess.yaml: the office refuses a merge unless the person merging is an approver for every kind the change touches (policy_roles). Raiserequire_approvalsto1or more for a second pair of eyes. - Connections. Prefer per-agent identities (Slack bots, machine accounts) and read-only tokens; mark writing tools as approval-required in grants. Give temporary grants an
expiresdate, and keepaccess_review.every: 90d(the company profile's default) so each agent's owner confirms its grants every quarter; export completed reviews for your auditor (Expiring grants and access reviews). - Audit. The ledger is hash-chained and anchored hourly in the policy repo, by an account that can't change policy (
officectl verifycheck 8 proves it). Stream it to your SIEM withledger.export.url, or export it withofficectl ledger export(Audit and the ledger). - Change management. Pin an exact version in the office repo and upgrade by pull request; the Changelog lists Breaking, Migrations, Upgrade notes and Security for every release. Run
officectl doctor,officectl verify --liveandofficectl smokeafter each upgrade. - Start agents at draft.
officectl init --profile companysetsautonomy.default: draftin office.yaml: every write an agent makes (a Slack post, an email, a PR, a published artifact) waits for a person to approve or edit it. Agents earnactone kind of action at a time: once a track record meets the bar, the office opens a policy PR raising it, and a hiring approver merges it. A rejected draft streak or a flagged act lowers it again at once (Graduated autonomy). Existing offices can add the same line. - Outside content. Agents that read mail, Slack or tickets from outside can be asked to do things by whoever wrote them. Set
run.untrusted_writes: approveon those agents, so their writes in such runs wait for a person. - Changes to agents. Give important agents evals: a policy PR that changes their charter or model shows whether they got better or worse before anyone merges it. Mark routines
verify: trueto grade everyday runs. - If something goes wrong. Stop now on an agent's desk, or Settings → Emergency stop for the whole office, works at once, without a pull request, and is on the record.
The first week of a company pilot#
- Install on a dedicated VM; run
officectl doctorandofficectl verifyuntil both pass. - Connect SSO with
require_group; invite the pilot group; turn local passwords off. - Apply one starter kit by PR, with per-agent API keys and small budgets.
- Once the hires are merged, run
officectl smoke(Smoke test): a few cents of real runs that prove, on this host with your real key, that a chat run goes through the model proxy, a webhook starts an event run, and a handoff to a colleague comes back. Give one agent a named webhook (run.on) and a colleague it may delegate to, so no step is skipped. Check the approval wake-up by hand once, as the smoke's note describes. - Add one connection with read-only scopes; set
run.untrusted_writes: approveon agents that read outside content. With the company profile, agents' writes start as drafts on Needs you; approve, edit or reject them so each agent builds a track record. - Point
ledger.export.urlat your SIEM, setbackup.diron another disk, and storesecrets.keyapart. - Run
officectl haltandofficectl resumeonce, so the team knows the emergency stop works. - After a week: run
officectl smokeagain (it shows the runs still work after a week of real use), read Insights (its Autonomy panel shows each agent's drafts approved as-is), the agents' feedback and verifier pass rates, then decide what to widen: merge the promotion PRs the office opened for the kinds of action agents have earned.
Not there yet for companies#
| Need | State |
|---|---|
| A licence and a security contact | Ask the vendor |
The Roadmap has the full list.