Get agency-os running in under 10 minutes. For the full story of how agency-os works and why it matters, read the launch post.
- Claude Code installed and authenticated (
claude --versionshould return a version). - A Notion workspace where you have admin rights (or at least permission to create pages and databases).
- A Notion internal integration token - create one at https://www.notion.so/my-integrations. Share the integration with the page subtree you want agency-os to manage (or the workspace root for maximum reach).
Step 1 - Install the plugin.
/plugin install https://github.com/ratamaha-git/agency-os
Once installed, /agency-os commands are available in the current Claude Code project.
Step 2 - Set your Notion token.
Create or edit .env in your project root:
NOTION_KEY=secret_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
The token must have access to the workspace or the Hub page. Never commit .env - it should already be in .gitignore.
Step 3 - Scaffold the workspace.
/agency-os scaffold
This is the single-shot setup. It creates the Hub page, Tasks database (with the full schema), General Guidance page, Resources page, default corpus pages (General, Recurring), and every linked view inside Notion. No Notion template duplication required - the command builds everything from scratch. It's idempotent: safe to run again if anything was missed.
If your integration is scoped to a specific page rather than the workspace root, pass that page:
/agency-os scaffold --parent=<page-id-or-url>
After scaffolding, Notion prints the Hub URL. Open it and:
- Enable "Full width" on the Hub, Guidance, Resources, and corpus pages (the Notion MCP can't do this for you - use the ... menu on each page).
- Enable Sub-items on the Tasks database and wire it to the
Parent Task/Subtasksrelation (see the scaffold output for exact steps).
Step 4 - Define your corpora.
A corpus is a domain of work (e.g. "Backlinks", "Community", "Infrastructure"). The scaffold creates General and Recurring by default. Add your own:
/agency-os add-corpus "Content" --goal "Publish 2 posts per week on automatelab.tech"
/agency-os add-corpus "Outreach" --goal "Build backlinks through directory submissions"
Each corpus gets a Notion page with a Goal section, a Local guidance section, and a linked view of its tasks.
Step 5 - File your first suggestion.
/agency-os suggest "Write a quickstart guide for agency-os" --corpus="Content" --effort=M
The task lands in the Suggestions Inbox in Notion with Status=Suggestion.
This is the full lifecycle of a task from idea to done.
# Suggest
/agency-os suggest "Submit to BetaList" --corpus="Outreach" --effort=S
# Opens the task for clarification (flips to Discussion)
/agency-os discuss <id>
# Log decisions mid-discussion
/agency-os log <id> "Decided to use the short-form description, 300 chars max"
# Carve off a subtask for a separable deliverable
/agency-os add-subtask <id> "Write 300-char product description for BetaList"
# Approve - moves task and subtask to To-Do
/agency-os approve <id>
# Start the subtask first (loads its brief, flips to In Progress)
/agency-os start <subtask-id>
# ... agent executes the subtask ...
# Close the subtask
/agency-os done <subtask-id> --note "Written, 287 chars"
# All subtasks done - close the parent
/agency-os done <id> --result-link "https://www.betalist.com/startups/agency-os"
At each step, the task page in Notion reflects the current state. The operator can follow along without opening Claude Code.
By default, tasks have Exec=none - they don't enter the agent queue automatically. To let an agent pick up a task:
- Open the task row in Notion.
- Set
Exec = Agent.
Only do this for tasks you're confident can complete end-to-end without operator input: no captchas, no personal account logins, no "click publish" steps that require a human.
/agency-os refresh
Fetches all Status=To-Do AND Exec=Agent rows from Notion and writes them to state/todo-ids.json. Use this to inspect the queue before dispatching.
/agency-os run
Without --go, this is a dry run. It shows:
- Which tasks would be dispatched, and at what model (Haiku/Sonnet/Opus)
- Which stage each task belongs to (based on dependencies)
- Which tasks are blocked because their dependencies haven't reached Done yet
Review the plan before pulling the trigger.
/agency-os run --go
Stages execute sequentially. Within each stage, tasks fan out in parallel (cap: 5 at a time). Each execution agent loads the kickoff brief via /agency-os start, does the work, and calls /agency-os done when finished. If a task can't complete end-to-end (operator login required, etc.), it closes with blocked-operator and the row stays In Progress so you see it.
After run --go finishes, a summary shows counts by outcome: done, needs-operator, needs-clarification, blocked-deps, failed.