Adding Agents
A guide for getting Claude to build automation agents for you β like "every morning, count tomorrow's checkouts and post to Slack." Describe your idea in a sentence and Claude investigates, asks questions, and plans it with you. Also clarifies what only humans can do (approve, activate).
What is this?
The platform can run automation agents: small jobs that run automatically on a schedule β like "every morning, count tomorrow's checkouts and post the number to Slack."
Your part is to describe the automation in plain words and hand it to Claude. Claude then builds it by following the /add-agent-to-platform skill. A few steps, though, are deliberately human-only (so nothing goes live on its own).
Symbols on this page:
- π€ = a step you hand to your Claude (copy-paste the prompt)
- π€ = a step you do by hand
- π = a step only an admin / owner can do (ask one if you can't)
This assumes Claude is already connected to the platform via MCP. If not, do Connect Claude (MCP) first.
What can an agent do? (three output types)
| Type | What it does | Writes data? |
|---|---|---|
| Notify | Just tells you in Slack | No (simplest β best starting point) |
| Propose | Creates a change, applied only after a human approves | Only after approval |
| Report | Writes a text summary | No |
There are two ways it runs (the "route"). Usually DSL (follows fixed steps; normally no extra AI cost); only when judgment is needed does it use an LLM agent (token cost). You don't have to choose β Claude decides by looking at the task (when in doubt, DSL wins).
If you only want to move an existing app job onto the platform's schedule (the logic already lives in the app), Claude can use a minimal setup called
triggerβ almost no new code.
Before you start (prerequisites)
| What you need | Why | Who |
|---|---|---|
| MCP connected | So Claude can read data and register the instruction | π€ If not, see the connect guide |
| A rough idea in words of the automation | To kick off the conversation with Claude | π€ You |
| The data exists on the platform (bookings, shifts, staff meals, pricing, recruiting, etc.) | It's the agent's source data | π€ Confirm (ask Claude if unsure) |
| Ability to change code and open a PR | For any new logic | π€ Claude writes it β π€ you review/merge |
| An agent-console admin who can approve/activate, or one to ask | The final step to go live | π Admin |
Adding an agent is not "one prompt and done." It's usually two tracks: a code change (PR) and governance setup. Claude writes the code; you review/merge it via the normal Minor Changes flow.
Step 1 β Plan it together with Claude π€ β π€
You don't need to write a finished spec up front. Describe what you want to automate in a sentence or two, and Claude will (1) update the repo to the latest, (2) read the /add-agent-to-platform skill, (3) investigate this monorepo's conventions, the real data visible via MCP, and existing agents worth referencing, and (4) come back with feasibility and spec questions for you. You answer, and the implementation plan takes shape through the conversation.
Starting in Claude Code's Plan Mode lets you review and adjust the plan before any code or PR is written.
A one- or two-line idea is enough for "Automation I want to build." Three common shapes:
- Notify β every morning, tell staff on Slack how many rooms check out tomorrow
- Propose β auto-draft next month's shifts for a manager to approve and confirm
- Report β summarize last week's handover notes into key points
Notify vs. propose: notify just tells you in Slack and stops. Propose creates a draft that only takes effect after a human approves it in the console (nothing in production changes until then).
From here Claude asks its questions, folds in your answers, and settles the implementation plan (route / output / write_policy / data / schedule / how personal info is handled). Once you agree, it writes code and opens a PR (if needed) and drafts the instruction. The next section clarifies how much Claude can do and where the human's job begins.
Step 2 β What Claude (MCP) can do vs. what humans must do π€π€π
This is the key distinction. Claude (via MCP) can go as far as "draft and configure," but it cannot "approve" or "activate" β those are deliberately human-only for safety.
| Step | Who | Note |
|---|---|---|
| Share the idea & answer questions | π€ You | The Step 1 planning conversation |
| Build the logic / write code (when needed) | π€ Claude | DSL first; new code via a normal PR |
| Review / merge the PR | π€ You | The Minor Changes flow |
| Register / draft the instruction | π€ Claude (MCP) or π admin | The authoring tools require admin rights |
| Set the schedule (what time it runs) | π€ Claude (MCP) or π admin | Or the console Schedule editor |
| Set the Slack channel | π console (pick by name) / π€ MCP needs an ID | Console picker is the easy, name-based way |
| Approve | π Human only (console) | Not possible via MCP |
| Activate | π Human only (console) | Only now does it become live |
| Toggle write_policy (propose / auto) | π Admin (console) | "Auto" applies without approval |
| Test run (Run now) | π Admin (console) | Run it once by hand |
| Env vars, inviting the Slack bot, etc. | π Owner | The groundwork to run it |
| View run results | π€ Claude (MCP run_read) / π€ console | MCP run_read has no personal info; console report bodies may show staff names |
Why are approve and activate human-only? They're the safety valve that keeps an agent from going live on its own. Claude does the "prep"; a human always gives the GO. If you're not an admin, ask one for these two.
Step 3 β Test β schedule β Slack (finishing up)
Once the code (PR) is merged and the instruction is registered, three finishing steps remain.
β Test it first (Run now) π / π€
Don't jump straight to daily. Run it once by hand and check the result. A console admin does this with "Run now" (π ). You can also have Claude check the result:
"0 results" can still be a success. By design it doesn't notify when there's nothing to report, so "nothing in Slack" doesn't always mean "broken." Check the run result first.
β‘ Put it on a schedule π€ / π
If the test looks good, set the run time. You can ask Claude (or use the console Schedule editor, π ):
For scheduled runs, the owner must have the worker turned ON (
RUNNER_WORKER_ENABLED=true) (π ). If it's set but not running, check this first.
β’ Set the Slack channel π (console)
Decide which channel the notifications go to. The easiest way is to pick the channel from the list on the instruction page in agent-console β you choose it by name (no ID hunting; it's resolved to the correct ID under the hood).
Setting it via MCP (Claude) currently needs the channel ID (
Cβ¦/Gβ¦) β MCP has no nameβID lookup yet. Get the ID from Slack's channel details β "Copy channel ID." To choose by name, the console picker is easier.
To post to a private channel, the owner must invite the bot to that channel (π ). Public channels usually don't need this. If it's set but nothing arrives, suspect a missing invite.
Troubleshooting
| Symptom | Meaning / fix |
|---|---|
| Doesn't run on schedule | Is it activated? Is the schedule ON? Is the worker ON on the owner side (π )? |
| No Slack notification | Did you set the channel? For a private channel, is the bot invited? Or it may be 0 results = skipped (by design). Check the run result first. |
| Approved but nothing applied | Check write_policy and the approver's token permissions (π ). |
| Numbers look wrong / data is stale | Ask Claude to check the read tools used and the row limit. |
| Claude can't see the new tools | Right after a deploy, restart (reconnect) the MCP client. |
Quiz
Who can perform the final 'approve' and 'activate' that take an agent live?
What's next
Once your agent is live, you'll eventually want to tune or fix it β "only flag it when the signal is strong," "run it earlier," "post somewhere else." That's a different (but just as Claude-guided) flow: see Modifying Agents.