ai-employees 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/docs/COST.md +4 -0
  2. package/docs/FAQ.md +2 -0
  3. package/docs/GUARDRAILS.md +2 -0
  4. package/docs/HARNESSES.md +13 -1
  5. package/docs/HOW-EMPLOYEES-WORK.md +1 -0
  6. package/docs/INSTALL.md +1 -1
  7. package/docs/PREREQUISITES.md +3 -3
  8. package/docs/STANDARD.md +4 -1
  9. package/docs/WHAT-SETS-THEM-APART.md +2 -0
  10. package/employees/ad-manager-employee/AGENTS.md +6 -2
  11. package/employees/ad-manager-employee/CAPABILITIES.md +50 -35
  12. package/employees/ad-manager-employee/CHANGELOG.md +12 -0
  13. package/employees/ad-manager-employee/CONTRACT.md +1 -0
  14. package/employees/ad-manager-employee/INSTALL-PROMPT.md +1 -1
  15. package/employees/ad-manager-employee/VERSION +1 -1
  16. package/employees/ad-manager-employee/employee.json +7 -3
  17. package/employees/ad-manager-employee/routines/ads-desk-standup/SKILL.md +2 -0
  18. package/employees/chief-of-staff/AGENTS.md +6 -2
  19. package/employees/chief-of-staff/CAPABILITIES.md +45 -30
  20. package/employees/chief-of-staff/CHANGELOG.md +12 -0
  21. package/employees/chief-of-staff/CONTRACT.md +1 -0
  22. package/employees/chief-of-staff/INSTALL-PROMPT.md +1 -1
  23. package/employees/chief-of-staff/VERSION +1 -1
  24. package/employees/chief-of-staff/employee.json +7 -3
  25. package/employees/chief-of-staff/routines/cos-fleet-reconcile/SKILL.md +2 -0
  26. package/employees/customer-satisfaction-employee/AGENTS.md +6 -2
  27. package/employees/customer-satisfaction-employee/CAPABILITIES.md +46 -31
  28. package/employees/customer-satisfaction-employee/CHANGELOG.md +12 -0
  29. package/employees/customer-satisfaction-employee/CONTRACT.md +1 -0
  30. package/employees/customer-satisfaction-employee/INSTALL-PROMPT.md +1 -1
  31. package/employees/customer-satisfaction-employee/VERSION +1 -1
  32. package/employees/customer-satisfaction-employee/employee.json +7 -3
  33. package/employees/customer-satisfaction-employee/routines/csat-desk-standup/SKILL.md +2 -0
  34. package/employees/gtm-engineer/AGENTS.md +6 -2
  35. package/employees/gtm-engineer/CAPABILITIES.md +49 -34
  36. package/employees/gtm-engineer/CHANGELOG.md +12 -0
  37. package/employees/gtm-engineer/CONTRACT.md +1 -0
  38. package/employees/gtm-engineer/INSTALL-PROMPT.md +1 -1
  39. package/employees/gtm-engineer/VERSION +1 -1
  40. package/employees/gtm-engineer/employee.json +7 -3
  41. package/employees/gtm-engineer/routines/gtm-board-standup/SKILL.md +2 -0
  42. package/employees/sales-employee/AGENTS.md +6 -2
  43. package/employees/sales-employee/CAPABILITIES.md +45 -30
  44. package/employees/sales-employee/CHANGELOG.md +12 -0
  45. package/employees/sales-employee/CONTRACT.md +1 -0
  46. package/employees/sales-employee/INSTALL-PROMPT.md +1 -1
  47. package/employees/sales-employee/VERSION +1 -1
  48. package/employees/sales-employee/employee.json +7 -3
  49. package/employees/sales-employee/routines/sales-desk-standup/SKILL.md +2 -0
  50. package/employees/seo-employee/AGENTS.md +6 -2
  51. package/employees/seo-employee/CAPABILITIES.md +51 -36
  52. package/employees/seo-employee/CHANGELOG.md +12 -0
  53. package/employees/seo-employee/CONTRACT.md +1 -0
  54. package/employees/seo-employee/INSTALL-PROMPT.md +1 -1
  55. package/employees/seo-employee/VERSION +1 -1
  56. package/employees/seo-employee/employee.json +7 -3
  57. package/employees/seo-employee/routines/seo-standup/SKILL.md +2 -0
  58. package/employees/social-media-employee/AGENTS.md +6 -2
  59. package/employees/social-media-employee/CAPABILITIES.md +50 -35
  60. package/employees/social-media-employee/CHANGELOG.md +12 -0
  61. package/employees/social-media-employee/CONTRACT.md +1 -0
  62. package/employees/social-media-employee/INSTALL-PROMPT.md +1 -1
  63. package/employees/social-media-employee/VERSION +1 -1
  64. package/employees/social-media-employee/employee.json +7 -3
  65. package/employees/social-media-employee/routines/soc-calendar-standup/SKILL.md +2 -0
  66. package/employees/web-dev-employee/AGENTS.md +6 -2
  67. package/employees/web-dev-employee/CAPABILITIES.md +48 -33
  68. package/employees/web-dev-employee/CHANGELOG.md +12 -0
  69. package/employees/web-dev-employee/CONTRACT.md +1 -0
  70. package/employees/web-dev-employee/INSTALL-PROMPT.md +1 -1
  71. package/employees/web-dev-employee/VERSION +1 -1
  72. package/employees/web-dev-employee/employee.json +7 -3
  73. package/employees/web-dev-employee/routines/web-standup/SKILL.md +2 -0
  74. package/package.json +1 -1
package/docs/COST.md CHANGED
@@ -49,6 +49,10 @@ Anthropic publishes no token or dollar quota per plan, so a plan cannot be mappe
49
49
 
50
50
  The only way to turn the table into dollars is an API key, and an API key loses the browser lane, which most of these routines need. Run them on a seat.
51
51
 
52
+ ## On Grok Bot
53
+
54
+ Grok Bot is metered differently: a plan carries a weekly usage allowance, and the bots draw it down. As of August 21, 2026, bots come with Cursor Pro+ at $60 a month, SuperGrok Plus at $100, Cursor Ultra at $200, SuperGrok Heavy at $300, and Cursor Teams at $40 a seat, with a limited free trial. What the price does not say is how fast the allowance moves under a fleet: operators running several bots on patrol report reaching it early in the week. The kits are not always on, which is the point. One Employee is a handful of runs a day, each inside a window and a budget, and a skipped fire exits before it reads the contract. Start on the lowest tier that includes bots, run one Employee for a week, and read the meter before you add a second. Nothing on this page was measured on Grok Bot; the numbers above are its published prices, and the measurement will follow the first install that reports.
55
+
52
56
  ## Making cost a field, not a guess
53
57
 
54
58
  `scripts/runlog.mjs` accepts nine optional fields on a run record: `model`, `harness`, `turns`, `input_tokens`, `output_tokens`, `cache_write_tokens`, `cache_read_tokens`, `cost_usd`, and `cost_basis` (`api-list`, `subscription`, or `unknown`). They are counts and prices only, never required, and the refusal rules on the rest of the record are untouched. On the CLI, `claude -p --output-format json` prints `total_cost_usd` and the token counts on exit; the launcher in `run/` writes that JSON to `run/<id>.last.json`. A flag that attaches those numbers to the record the routine just wrote is not built yet, and until it is the fields get filled by the routine's own last step where a harness exposes them, or stay absent.
package/docs/FAQ.md CHANGED
@@ -10,6 +10,8 @@
10
10
 
11
11
  **Which harness?** Built for Claude Code, OpenClaw, Hermes, OpenCode, Grok Bot, Codex, Antigravity, Pi, Cline, Qwen Code and DeepSeek. Claude Code is the one the GTM Engineer runs my own club launch on every weekday. OpenClaw, Hermes, Cline and Qwen Code have built in cron or scheduled tasks, Codex has scheduled runs, Antigravity has the `agy` job runner, DeepSeek schedules through a plugin, OpenCode and Pi use the operating system's scheduler, and Grok Bot runs from its own cloud computer. `docs/HARNESSES.md` has the invocation and the first run check for each.
12
12
 
13
+ **Does it run on Grok Bot?** Yes, with one difference: the bot's computer is not yours. The bot installs the kit on its own cloud computer, you paste the kit's `AGENTS.md` into the bot's Instructions field, one recurring task per routine runs from `SCHEDULE.md`, and the morning brief is posted into the bot's own thread because you never open that computer's files. Every bot on your account shares that computer and every login on it, so scope by what you sign in to, never by which bot you talk to. The hosted section of `docs/HARNESSES.md` has the detail.
14
+
13
15
  **Can I run just one?** Yes. Each employee is a self contained folder. They share nothing but a scheduler. The GTM Engineer is the one to start with; the Chief of Staff is the one to add second, because it reads the run logs of every other employee on the machine and tells you which one quietly stopped.
14
16
 
15
17
  **What happens when my machine is asleep?** It depends on your scheduler: the Claude Desktop app and Windows Task Scheduler run one late catch up, launchd folds every missed fire into one, and cron skips it for good. Every routine has a window, so a late fire either does its work once or records a skip and exits. A closed laptop produces nothing, and the next morning's standup says so in plain words.
@@ -4,6 +4,8 @@
4
4
 
5
5
  **The second guardrail is on credentials, and it stays on.** No AI Employee creates an account, enters or generates a password, completes a captcha, accepts terms, or writes a credential into any file. It never needs your password to do its job, so there is nothing to release.
6
6
 
7
+ **On a hosted harness the guardrails are still yours to keep, and bots are not a boundary.** On Grok Bot every bot on your account shares one cloud computer, one filesystem and every login on it. A release you write for one Employee is a file every bot can read, and a session you sync there is a session every bot can use. Scope by what you sign in to on that computer, never by which bot you talk to, and start read only on public pages before you sync anything.
8
+
7
9
  | Routine kind | Reads | Writes | Leaves for you | Holds, unless you release it |
8
10
  |---|---|---|---|---|
9
11
  | The standup, every weekday | Every ledger, run record and tick since yesterday | The board and the thirty line brief | The brief, first thing | Uses a browser |
package/docs/HARNESSES.md CHANGED
@@ -16,7 +16,7 @@ Two rules hold on every harness. **Routines are scheduled jobs, not skills**: po
16
16
  | OpenClaw | Ready | Built in cron: `openclaw automations create "<cron>" "<message>" --name <id> --session isolated`, one per routine, with the timezone flag | The message is `Read <root>/routines/<id>/SKILL.md and follow it.` | Whether its browser control attaches to your signed in profile; run the probe in `CAPABILITIES.md` 1.2 | `mcp.servers` in its config, `openclaw mcp login <name>`; skills from ClawHub |
17
17
  | Hermes | Ready | Built in cron with delivery to any platform | Point each job at the routine file as its prompt | Whether it reads files and runs a shell command; then the browser question | `mcp_servers` in `~/.hermes/config.yaml`, or `hermes mcp install <name>` from its catalog |
18
18
  | OpenCode | Ready | None built in; use the operating system's | `opencode run "<prompt>"`, confirm against `opencode --help` | Add a browser automation server for the browser lane | `mcp.<name>` in `opencode.json`, then `opencode mcp auth <name>` |
19
- | Grok Bot | Ready | Its bots run routines on a schedule from their own cloud computer | One recurring task per routine, handed that routine's `SKILL.md` as the run prompt | Whether it can reach your signed in accounts at all; it runs elsewhere | Its built in connectors, or a custom connector by URL at grok.com/connectors |
19
+ | Grok Bot | Ready | Its recurring tasks, one per routine, on a bot named after the Employee. Every bot on your account shares one cloud computer, and the kit lives there | The bot installs the kit on its own computer (`npx ai-employees hire <slug> --to ~/ai-employees/<slug>` in its terminal), you paste the kit's `AGENTS.md` into the bot's Instructions field, and each recurring task's prompt is `Read <root>/routines/<id>/SKILL.md and follow it.` with the fire time in the timezone `SCHEDULE.md` names | Whether your signed in sessions are on that computer. They are only if you signed in there or you run a cookie sync to it (Agent Cookie, from a Mac over Tailscale), and every bot then shares every login. Then that the first brief arrived in the bot's thread, which is `brief.deliver` | Its built in connectors, or a custom connector by URL at grok.com/connectors |
20
20
  | Codex | Confirmed | The app's automations: one cron automation per routine, named after the routine id, local execution, the kit folder as a working directory | The automation's own prompt, Shape B; `codex exec "<prompt>"` by hand where the CLI is signed in | The sandbox and the scheduled process: confirm it can write in the kit folder, reach the network, and reach the same connections the chat session could, because the first scheduled fire is the first real test of both | `[mcp_servers.<name>]` in `~/.codex/config.toml`, then `codex mcp login <name>`; skills in `.agents/skills` |
21
21
  | Antigravity | Ready | `agy` job runner pointed at the routine folder | `agy -p "<prompt>"` | Whether it drives your signed in browser profile or a clean one | `.agents/mcp_config.json` in the workspace or `~/.gemini/config/mcp_config.json`, with `serverUrl`, or its MCP Store |
22
22
  | Pi | Ready | None built in; use the operating system's | `pi -p "<prompt>"`, confirm against `pi --help` | Whether it reads the kit folder as the working directory; then the browser question | None. Pi runs no MCP servers by design, so only the command line routes in a kit's section 4b apply, wrapped as skills |
@@ -33,6 +33,18 @@ Every kit's `CAPABILITIES.md` section 4b names the connections that read its acc
33
33
  3. **Prove one routine by hand before registering the rest.** Run the standup, watch it write `brief-latest.md` and exactly one line into `runlog.jsonl`. Eight jobs registered on an invocation nobody ran is eight silent failures on the same morning.
34
34
  4. **A non zero exit should leave a record.** The Windows launcher does this through `runlog.mjs --failed-run`. On other harnesses, add the same `||` fallback to the command line.
35
35
 
36
+ ## Grok Bot, and the hosted shape it set
37
+
38
+ Grok Bot is the one harness on this page whose computer is not yours, and the shape is worth writing down once because Codex cloud and Meta Muse share it. Everything here comes from operators' published accounts of the product in August 2026, and each kit's `CAPABILITIES.md` marks it `expected` until you write `confirmed` into `## Corrections`.
39
+
40
+ - **One computer for every bot.** All the bots on an account share one persistent Linux machine with a terminal, file access and a real browser. Each bot has its own screen and runs one computer-use task at a time; several bots can drive the browser at once. So the kit lives on that computer, the bot installs it there itself, and the cloud sync rule does not apply.
41
+ - **One bot per Employee, one task per routine.** Name the bot after the role, paste the kit's `AGENTS.md` into its Instructions field (it is the map that points at the files, and it is short enough to fit), and register one recurring task per routine with the Shape B prompt. Do not turn the routines into the bot's workflows: a workflow is invoked on demand, a routine runs in a window.
42
+ - **Bots are not a security boundary.** Files, browser sessions and app logins are shared by every bot on the computer. A release you write for one Employee is a file every bot can read; a session you sync there is a session every bot can use. Scope by what you sign in to, never by which bot you talk to, and start read only on public pages before you sync anything.
43
+ - **Staying signed in is a sync you run.** Nothing in a kit signs in, so your sessions reach the bot's browser only if you signed in there or you keep them there with a cookie sync such as Agent Cookie (Chrome cookies from a Mac to the bot over Tailscale, every fifteen minutes). The kit names it under `browser.session`, detects it, and installs nothing.
44
+ - **The brief comes to your thread.** You never open that computer's files, so the standup resolves `brief.deliver` and posts `brief-latest.md` into the bot's own thread, which the Grok app carries to your phone. The file stays the record.
45
+ - **Two more routes.** Claude Code can be logged in on the bot's computer, which turns the Grok Bot row into the Claude Code CLI row with Grok Bot as the scheduler. Peekaboo, installed by you on a Mac, lets the bot see and click native Mac apps over the same link. Both are yours to add.
46
+ - **Watch the meter.** Plans carry a weekly usage allowance and fleet work moves it fast. Start on the lowest tier that includes bots, run one Employee for a week, and read the meter before you add a second.
47
+
36
48
  ## Ran a kit on one of these?
37
49
 
38
50
  Open an issue with the harness and version, the invocation you used, what the first run record said, and what you changed. It goes into the notes for that row, with your name on the change.
@@ -57,6 +57,7 @@ Every routine starts with the same five numbered items, in this order, before an
57
57
  - **The pause switch.** An empty file called `PAUSED` in the employee's folder stops every routine. Routine ids on lines inside it stop only those. Delete it and everything resumes; nothing was unregistered. No routine ever creates, writes, or deletes that file.
58
58
  - **Corrections.** Every file ends with a `## Corrections` section you write into and every routine reads at the top of every run. A dated line there outranks the file it sits in. This is how a kit gets good at your business specifically.
59
59
  - **The changelog of its own changes.** When a routine amends its own instructions it appends one line to `improvements/CHANGELOG.md` carrying the full text it replaced, so anything can be undone without the original download, and tomorrow's brief says what changed under `What changed about me`. It informs you. It does not ask you, because your harness already asks before anything writes to your disk, and that is the right place for that gate.
60
+ - **The brief comes to you.** After the standup writes `brief-latest.md` it resolves `brief.deliver`: the dashboard on a machine you use, the employee's own thread on a hosted agent whose computer you never open, or your own inbox where a mail route exists. The delivered text is the file's text with nothing added, and a brief to your own thread or address is delivery, not a send. Absent every route the file is the brief.
60
61
  - **The one push.** It notifies you only when you are the thing blocking it: an expired login, a credential it needs, conversion tracking that died while ads are running, or a browser lock held by a run that died. Once each, never twice for the same problem, never outside your working hours. Everything else waits for the brief.
61
62
 
62
63
  ## The save test
package/docs/INSTALL.md CHANGED
@@ -120,7 +120,7 @@ One line per routine, from `CAPABILITIES.md` section 9.3, with the full path to
120
120
 
121
121
  ### The other ten harnesses
122
122
 
123
- OpenClaw, Hermes, Cline and Qwen Code have a built in cron, Codex has scheduled runs, Antigravity has the `agy` job runner, DeepSeek schedules through a plugin, and Grok Bot runs recurring tasks from its own cloud computer: register one job per routine in that scheduler, with the kit folder as the working directory, the fire time from `SCHEDULE.md`, and the prompt `Read <root>/routines/<id>/SKILL.md and follow it.`. OpenCode and Pi have no scheduler of their own, so use the operating system's route above with their headless command in place of `claude -p`. `docs/HARNESSES.md` has the exact invocation and the first run check for each, and the same rule holds everywhere: run one routine by hand before you register the rest.
123
+ OpenClaw, Hermes, Cline and Qwen Code have a built in cron, Codex has scheduled runs, Antigravity has the `agy` job runner, DeepSeek schedules through a plugin, and Grok Bot runs recurring tasks from its own cloud computer: register one job per routine in that scheduler, with the kit folder as the working directory, the fire time from `SCHEDULE.md`, and the prompt `Read <root>/routines/<id>/SKILL.md and follow it.`. OpenCode and Pi have no scheduler of their own, so use the operating system's route above with their headless command in place of `claude -p`. `docs/HARNESSES.md` has the exact invocation and the first run check for each, and the same rule holds everywhere: run one routine by hand before you register the rest. Grok Bot is the one whose computer is not yours: the bot installs the kit on its own cloud computer, you paste the kit's `AGENTS.md` into the bot's Instructions field, and the brief reaches you in the bot's thread. The hosted section of `docs/HARNESSES.md` has the rest, including what the shared computer means for your logins.
124
124
 
125
125
  ## What a first day looks like
126
126
 
@@ -53,7 +53,7 @@ Claude Code uses it for its shell tool and the Desktop app requires it for local
53
53
 
54
54
  Optional, and the section in each kit's README called "What you lose with no browser control" is honest about what it costs to skip. The requirement is the same on every harness: it has to drive a browser that carries your own logins, not a clean automated profile, because the routines share your browser's login state and never sign in to anything. On a login wall or a captcha they stop that phase and say so.
55
55
 
56
- On Claude Code that means Google Chrome or Microsoft Edge, the Claude in Chrome extension (1.0.36 or later), `claude --chrome` on the CLI or the Desktop app's own integration, a login based session rather than an API key, and the site permissions granted in the extension before the first scheduled run. On OpenCode and Codex it is a browser automation server you add. On Antigravity and DeepSeek browser control is part of the product, and the thing to settle is which profile it drives. On Grok Bot the browser runs on its own cloud computer, so whether it can reach your accounts at all is the first check. Each kit's `CAPABILITIES.md` section 1.2 has a probe that answers the question on any harness in a minute.
56
+ On Claude Code that means Google Chrome or Microsoft Edge, the Claude in Chrome extension (1.0.36 or later), `claude --chrome` on the CLI or the Desktop app's own integration, a login based session rather than an API key, and the site permissions granted in the extension before the first scheduled run. On OpenCode and Codex it is a browser automation server you add. On Antigravity and DeepSeek browser control is part of the product, and the thing to settle is which profile it drives. On Grok Bot the browser runs on the bot's own cloud computer, so your sessions are there only if you signed in on that computer or you run a cookie sync to it (Agent Cookie syncs a Mac's Chrome cookies over Tailscale), and every bot on the account then shares every login: scope by what you sign in to, never by which bot you talk to. Each kit's `CAPABILITIES.md` section 1.2 has a probe that answers the question on any harness in a minute.
57
57
 
58
58
  ## 7. A scheduler
59
59
 
@@ -72,11 +72,11 @@ Otherwise the operating system's:
72
72
 
73
73
  ## 8. A machine that is awake at fire time
74
74
 
75
- These are scheduled routines on your machine, not a service somewhere else. Either the machine is awake at the times in `SCHEDULE.md`, or you move the fire times to after it normally wakes. On the Desktop app, turn on Keep computer awake. A closed lid still sleeps. Grok Bot is the one exception, because its schedule runs on its own cloud computer.
75
+ These are scheduled routines on your machine, not a service somewhere else. Either the machine is awake at the times in `SCHEDULE.md`, or you move the fire times to after it normally wakes. On the Desktop app, turn on Keep computer awake. A closed lid still sleeps. Grok Bot is the one exception, because its schedule runs on its own cloud computer. The kit lives on that computer too, and the brief reaches you in the bot's own thread rather than in a file you open (`brief.deliver`, `CAPABILITIES.md` section 6).
76
76
 
77
77
  ## 9. A working folder outside cloud sync
78
78
 
79
- Not inside OneDrive, Dropbox, Google Drive or iCloud. The routines write state and a run log mid run, and a sync client corrupts exactly the file that tells tomorrow's run what already happened. `D:\AgentOps\gtm-engineer` or `~/ai-employees/gtm-engineer` is right. The installer refuses a synced path, and the install prompt moves the kit out of one if it finds itself there.
79
+ Not inside OneDrive, Dropbox, Google Drive or iCloud. The routines write state and a run log mid run, and a sync client corrupts exactly the file that tells tomorrow's run what already happened. `D:\AgentOps\gtm-engineer` or `~/ai-employees/gtm-engineer` is right. The installer refuses a synced path, and the install prompt moves the kit out of one if it finds itself there. On Grok Bot the folder is on the bot's own cloud computer, which no sync client touches.
80
80
 
81
81
  ## 10. A usage budget
82
82
 
package/docs/STANDARD.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Build spec for every AI Employee in the club. Not shipped to members. The GTM Engineer is the reference implementation; every later Employee inherits everything here and adds only its own domain expertise.
4
4
 
5
- Standard version 1.3, 2026-09-11: LAW 4 names connected sources, the per capability routes a member connects in their own harness, read only and preferred over the browser lane. Version 1.2, 2026-09-05: LAW 2 became the two guardrails, the first of them released channel by channel by the member in `RELEASES.md`. Version 1.1, 2026-08-28. Laws 6 through 8 and the operator-session and browser-lane sections were earned in the first live week of the GTM Engineer running Mark's own launch; the release notes in each kit's CHANGELOG carry the short story.
5
+ Standard version 1.4, 2026-09-23: LAW 7 gains a third delivery surface, `brief.deliver`, so the brief reaches the member on a harness whose computer they never open; section 4 gains the five questions a routine answers before it is scheduled. Version 1.3, 2026-09-11: LAW 4 names connected sources, the per capability routes a member connects in their own harness, read only and preferred over the browser lane. Version 1.2, 2026-09-05: LAW 2 became the two guardrails, the first of them released channel by channel by the member in `RELEASES.md`. Version 1.1, 2026-08-28. Laws 6 through 8 and the operator-session and browser-lane sections were earned in the first live week of the GTM Engineer running Mark's own launch; the release notes in each kit's CHANGELOG carry the short story.
6
6
 
7
7
  Derived from Mark's own production routines rather than invented: the push mechanics come from `night-shift-brief` and `morning-clicks-block`, the window and period guards from the same, the browser craft from roughly thirty live Chrome routines.
8
8
 
@@ -35,6 +35,7 @@ An Employee is judged on one question: **after ninety days of running unattended
35
35
  **LAW 7: The Employee brings the work to the member.** Work product that only exists as a file the member must go hunting for reads as no work at all. Two delivery surfaces, used wherever the role allows:
36
36
  - *The dashboard is a view over live state, never installed prose.* The build bakes the morning artifact, queue files, digests, and the run history straight from the working files; every routine that writes work product rebuilds the dashboard before writing its run record; a tab describing work renders from the board, not from text written at install, which rots the same week.
37
37
  - *The browser is a delivery surface.* Where the role touches the world through forms, drafts, or posts, the Employee fills the form and leaves the tab open, prepares the draft inside the member's own account in draft state, and stages the post ready to publish. The member's contribution shrinks to the one click a held guardrail reserves for them. Every browser-staged deliverable also lands in a durable queue file carrying the full text of every field, so a closed tab loses nothing. Anti-bot checks are never answered; they are left for the member with the submit.
38
+ - *The brief is delivered, not filed.* Every standup resolves `brief.deliver` after it writes `brief-latest.md`: the dashboard on a machine the member uses, the Employee's own thread on a hosted harness whose computer the member never opens, the member's own address where a mail route exists. The delivered text is the file's text with nothing added. A brief to the member's own thread or address is delivery, not a send, and needs no release; absent every route the file is the brief and the run record says `brief: file only`. (v1.4, 2026-09-23, from the first hosted harness: a brief on a cloud computer nobody opens is no brief.)
38
39
  (Earned 2026-08-28, Mark: "They should bring it to me and bring it to my attention," and the same morning three directory submissions went live within minutes of forms being staged in his browser.)
39
40
 
40
41
  **LAW 8: A tick records consent; the routine performs the move.** When a member ticks a card whose definition of done implies a file change, the next routine to read that tick completes the mechanical part itself. A confirmed proof inventory whose lines never got moved is a day of thin drafts nobody wanted. Consent is the member's; labor is the Employee's.
@@ -151,6 +152,8 @@ scripts/ small deterministic helpers with a --selftest
151
152
 
152
153
  **Two routines never drive one browser.** A mutex with a dead-holder timeout, and a routine that never took the lock never deletes it.
153
154
 
155
+ **Five questions before any routine exists**, and every shipped routine answers them in its `SCHEDULE.md` row, its brief lines and its push rules: **trigger** (a clock time, or an event such as new mail or a new row), **frequency** (how often the underlying thing actually changes, never how often it would be nice to look), **output** (where the result lands and who reads it), **silence** (what it does when there is nothing to report, which is nothing) and **stop** (the one condition that pages the member instead of waiting for the brief). A routine that cannot answer all five is not ready to schedule, and a routine whose honest answer to frequency is "rarely" gets a weekly row, not a patrol. (v1.4, 2026-09-23.)
156
+
154
157
  ---
155
158
 
156
159
  ## 5. Voice and copy
@@ -3,8 +3,10 @@
3
3
  - **They get better at your business every run.** When a page moves, a button changes or a step now needs a scroll, the routine fixes its own instructions in the run that hit it, keeps the text it replaced as the undo, and tells you in the next morning's brief under "What changed about me".
4
4
  - **They drive your browser and your PC the way you do.** Every browser routine works from a technique library written from real runs on my own machine, not from documentation: click what the page actually shows, read the page back to verify, leave a filled form open on the last step. Each site's flow is learned on your machine the first time a routine needs it and repaired every time after. Two routines never use the same signed in account at once, and on LinkedIn they read and never click.
5
5
  - **One push to your phone, only when you are the blocker.** A login expired, a credential is missing, your conversion tracking stopped while ads are live, or a run died holding the browser. Four cases and no fifth. One short line, never twice for the same thing, never outside your working hours, never on a first run. Everything else waits for the brief. [The one push](STANDARD.md#23-the-one-push).
6
+ - **The brief comes to you.** After the standup writes it, the routine brings it to wherever you are: the dashboard on your own machine, the Employee's own thread on a hosted agent such as Grok Bot, or your own inbox where a mail route exists. A brief on a computer you never open is no brief, so on a hosted harness it lands in your thread and the Grok app carries it to your phone.
6
7
  - **They use the connections you already have.** Where your agent already has a connector for an account, the routine reads through it instead of the screen: Meta's own Ads MCP server for an ad account, the Gmail connector for drafts and replies, the Vercel and Supabase connectors for logs and advisors, Metricool for publishing. Each kit names its connections in one table, uses them read only, and works without any of them; nothing is installed for you.
7
8
  - **They run on the agent you already use.** Claude Code, OpenClaw, Hermes, OpenCode, Grok Bot, Codex, Antigravity, Pi, Cline, Qwen Code and DeepSeek, without a routine changing by one word. Routines describe what they need done, and one file per kit says how each agent does it.
9
+ - **One routine, one job, one output.** Routines run solo and never supervise each other; the Chief of Staff reads their run logs afterwards and names what quietly stopped. Crews of agents that hand work to each other unsupervised have been measured multiplying their own errors many times over, and a wrong step here lands in your brief instead of in three other routines.
8
10
  - **You can direct any of them in chat.** Open a session in the employee's folder and it does anything you could do by hand, on your word: tick a card you confirmed, stage a form now, retune a strategy file, correct a stale brief. It leaves the same trail a routine would, and the scheduled runs treat that work as yours.
9
11
  - **You set how far they go.** Every employee drafts, fills and stages by default, and the last click is yours. Release a channel in `RELEASES.md` and the routine completes that action itself from then on. Your agent's own permission settings are the gate, and every file in the kit is plain text in your own folder, yours to change.
10
12
  - **Upgrades never overwrite your work.** `npx ai-employees upgrade` reports first, leaves any file you edited alone, and never reads your strategy or your ledgers. Every kit follows the published [Agent Employee Standard](STANDARD.md), and `npx ai-employees contribute` turns the fixes a kit made to itself into a report you can send upstream.
@@ -1,8 +1,12 @@
1
1
  # AGENTS.md
2
2
 
3
- **Ad Manager**, kit version 1.2.0. One of the eight AI Employees from [github.com/markfulton/ai-employees](https://github.com/markfulton/ai-employees).
3
+ **Ad Manager**, one of the eight AI Employees from [github.com/markfulton/ai-employees](https://github.com/markfulton/ai-employees).
4
4
 
5
- This file follows the [AGENTS.md](https://agents.md) convention so that any harness can pick this kit up without being told how. It is a map, not the instructions. **The instructions are the files it points at, and they are authoritative over anything summarised here.**
5
+ This file follows the [AGENTS.md](https://agents.md) convention so that any harness can pick this kit up without being told how. It is a map, not the instructions. **The instructions are the files it points at, and they are authoritative over anything summarised here.** The version this kit ships as is in `VERSION` at the root.
6
+
7
+ ## If your harness has an Instructions field instead of a folder
8
+
9
+ On a hosted agent such as Grok Bot, the kit lives on the bot's own cloud computer and the bot reads an Instructions field before every task. Paste this whole file into that field, with the folder's absolute path on that computer in place of `«ADS_ROOT»`. It is the base layer (the two guardrails and the files that outrank everything else), the role layer (`ROLE.md`, which names the evidence standard) and the current focus (the strategy folder the routines keep current), and it is short enough to fit. Everything else stays in the files.
6
10
 
7
11
  ## If you have been asked to install this Employee
8
12
 
@@ -91,7 +91,7 @@ One row each. The browser column is the one that changes how much of the kit run
91
91
  | **OpenClaw** | Expected, core to it | Unconfirmed. Probe | Probe this specifically | Built in cron, `openclaw automations create` | `expected` on files, `unknown` on browser |
92
92
  | **Hermes** | Expected | Probe | Probe this specifically | Built in cron | `expected` on files, `unknown` on browser |
93
93
  | **OpenCode** | Expected, core to it | Add a browser automation server | Depends on that server's config | None of its own, use the operating system's | `expected` on files |
94
- | **Grok Bot** | Expected, on its own cloud computer | Its own browser, on that computer | Check first; it runs elsewhere | Built in recurring tasks | `expected` on files, `unknown` on your sessions |
94
+ | **Grok Bot** | Yes, on its own cloud computer: a Linux machine with a terminal, files and a browser, shared by every bot on your account | Its own browser, on that computer | Only what you signed in to on that computer, or a session you sync to it | Built in recurring tasks | `expected`; your sessions depend on the sync |
95
95
  | **Codex** | Expected, core to it | Add a browser automation server | Depends on that server's config | Scheduled runs | `expected` on files |
96
96
  | **Antigravity** | Expected, core to it | Part of the product | Probe this specifically | The `agy` job runner | `expected` |
97
97
  | **Pi** | Expected, core to it | Probe | Probe this specifically | None of its own, use the operating system's | `expected` on files |
@@ -109,7 +109,7 @@ The capability tables in sections 3 to 6 carry one row for each of the first sev
109
109
 
110
110
  **OpenCode.** An open source terminal coding agent. Reading files, writing files, and running commands are core to what it is for, so the whole environment table should hold. It supports MCP servers, which is the route to browser control: add a browser automation server and the browser table becomes available under different names. I know of no built in scheduler, so use the operating system's, per section 9.
111
111
 
112
- **Grok Bot.** Its bots already run routines on a schedule from their own cloud computer, so the scheduler is built in and the invocation is the routine file handed over as the run prompt. The thing to settle first is whether it can reach your own signed in accounts at all, because it runs somewhere else; if it cannot, section 7 says what the file side of the kit still produces.
112
+ **Grok Bot.** xAI's hosted agent, and the one harness on this list that does not run on your machine. Every bot on your account shares one persistent cloud computer: a Linux machine with a terminal, file access and a real browser, where each bot has its own screen and runs one computer-use task at a time. The kit lives on that computer, so the bot installs it there itself (`npx ai-employees hire <slug> --to ~/ai-employees/<slug>`, run in its own terminal), and the cloud sync rule does not apply. One bot per Employee, named after the role, with this kit's `AGENTS.md` pasted into the bot's Instructions field, which is the map the bot reads before every task. One recurring task per routine, the Shape B prompt from section 9.2a, the fire time from `SCHEDULE.md` in the timezone that file names. Three things follow from the shared computer. Your signed in sessions are only there if you signed in on that computer or you run a sync that keeps them there (Agent Cookie syncs a Mac's Chrome cookies to the bot over Tailscale), and every bot on the account can then use every login, so bots are not a security boundary: scope by what you sign in to, never by which bot you talk to. The browser lock in `CONTRACT.md` section 6 still matters, because two bots on one platform share one browser. And the brief is a file on a computer you never open, so `brief.deliver` in section 6 posts it into the bot's own thread. Two more routes worth knowing: Claude Code can be logged in on the bot's computer, which turns this row into the Claude Code CLI row with Grok Bot as the scheduler; and Peekaboo, installed by you on a Mac, lets the bot see and click native Mac apps over the same link. The kit names both, detects them, and installs neither. Everything in this paragraph is read from operators' published accounts of the product in August 2026 and is `expected` until you write `confirmed` into `## Corrections` with the date.
113
113
 
114
114
  **Codex.** OpenAI's coding agent. Files and commands are core. The specific thing to check here is the sandbox: confirm it can write inside `«ADS_ROOT»` and confirm whether it can reach the network, because a sandbox that blocks outbound requests turns off `web.fetch` and `web.search` without announcing it, and a routine will report a documentation page as unreachable when the page is fine. Browser control comes from adding a browser automation server. Codex has scheduled runs; register one per routine.
115
115
 
@@ -138,7 +138,7 @@ Read the machine timezone id and the local wall clock time.
138
138
  | OpenClaw | Its own clock, or a shell command | `expected` |
139
139
  | Hermes | Unknown. A shell command is the fallback if it has one | `unknown` |
140
140
  | OpenCode | Its own clock, or a shell command | `expected` |
141
- | Grok Bot | Unknown. A shell command is the fallback if it has one | `unknown` |
141
+ | Grok Bot | A shell command on its cloud computer. That computer keeps its own clock, so read the timezone from `SCHEDULE.md` and never assume the machine's | `expected` |
142
142
  | Codex | Its own clock, or a shell command | `expected` |
143
143
  | Antigravity | Its own clock, or a shell command | `expected` |
144
144
 
@@ -153,7 +153,7 @@ Read a file as text.
153
153
  | OpenClaw | Its file read, or a shell command | `expected` |
154
154
  | Hermes | Unknown | `unknown` |
155
155
  | OpenCode | Its file read, or a shell command | `expected` |
156
- | Grok Bot | Unknown | `unknown` |
156
+ | Grok Bot | Its own file access on its cloud computer, where the kit lives | `expected` |
157
157
  | Codex | Its file read. Confirm the sandbox includes `«ADS_ROOT»` | `expected` |
158
158
  | Antigravity | Its file read, or a shell command | `expected` |
159
159
 
@@ -168,7 +168,7 @@ Write a file. Anything a crash could truncate is written to a temp path and rena
168
168
  | OpenClaw | Its file write, or a shell command | `expected` |
169
169
  | Hermes | Unknown | `unknown` |
170
170
  | OpenCode | Its file write, or a shell command | `expected` |
171
- | Grok Bot | Unknown | `unknown` |
171
+ | Grok Bot | Its own file access on its cloud computer, where the kit lives | `expected` |
172
172
  | Codex | Its file write. Confirm the sandbox allows writes, not just reads | `expected` |
173
173
  | Antigravity | Its file write, or a shell command | `expected` |
174
174
 
@@ -185,7 +185,7 @@ List paths under a folder.
185
185
  | OpenClaw | Its glob, or a shell command | `expected` |
186
186
  | Hermes | Unknown | `unknown` |
187
187
  | OpenCode | Its glob, or a shell command | `expected` |
188
- | Grok Bot | Unknown | `unknown` |
188
+ | Grok Bot | Its own file access on its cloud computer, where the kit lives | `expected` |
189
189
  | Codex | Its glob, or a shell command | `expected` |
190
190
  | Antigravity | Its glob, or a shell command | `expected` |
191
191
 
@@ -200,7 +200,7 @@ Run a local command and read its output.
200
200
  | OpenClaw | Its shell | `expected` |
201
201
  | Hermes | Unknown | `unknown` |
202
202
  | OpenCode | Its shell | `expected` |
203
- | Grok Bot | Unknown | `unknown` |
203
+ | Grok Bot | The terminal on its cloud computer | `expected` |
204
204
  | Codex | Its shell, inside the sandbox | `expected` |
205
205
  | Antigravity | Its shell | `expected` |
206
206
 
@@ -227,7 +227,7 @@ Confirm browser control is attached to a browser holding your own logged in sess
227
227
  | OpenClaw | Its own browser control if it has one, otherwise a browser automation server | `unknown` |
228
228
  | Hermes | Unknown. Probe before relying on any browser routine | `unknown` |
229
229
  | OpenCode | A browser automation server added to the harness | `expected` |
230
- | Grok Bot | Unknown. Probe before relying on any browser routine | `unknown` |
230
+ | Grok Bot | Its own browser on its cloud computer. Your session is there only if you signed in on that computer, or you run a sync that keeps it there (Agent Cookie syncs a Mac's Chrome cookies over Tailscale, every fifteen minutes). Every bot on the account shares that browser and its logins | `expected` |
231
231
  | Codex | A browser automation server added to the harness | `expected` |
232
232
  | Antigravity | Its built in browser control. Confirm it drives your signed in profile | `expected` |
233
233
 
@@ -241,7 +241,7 @@ Confirm browser control is attached to a browser holding your own logged in sess
241
241
  | OpenClaw | Unknown |
242
242
  | Hermes | Unknown |
243
243
  | OpenCode | A browser automation server over a local protocol. A failed call is expected to mean a failed action, though a timeout still leaves the action's fate unknown |
244
- | Grok Bot | Unknown |
244
+ | Grok Bot | Its own computer-use lane, one task per bot at a time. A failed call's fate is unknown until the page is re-read |
245
245
  | Codex | As OpenCode |
246
246
  | Antigravity | Unknown |
247
247
 
@@ -256,7 +256,7 @@ Create a tab for this run and close it at the end.
256
256
  | OpenClaw | Its browser control, if present | `unknown` |
257
257
  | Hermes | Unknown | `unknown` |
258
258
  | OpenCode | The browser automation server's page or context handling | `expected` |
259
- | Grok Bot | Unknown | `unknown` |
259
+ | Grok Bot | Its own browser on its cloud computer | `expected` |
260
260
  | Codex | The browser automation server's page or context handling | `expected` |
261
261
  | Antigravity | Its browser control | `expected` |
262
262
 
@@ -271,7 +271,7 @@ Go to a URL.
271
271
  | OpenClaw | Its browser control, if present | `unknown` |
272
272
  | Hermes | Unknown | `unknown` |
273
273
  | OpenCode | The browser automation server's navigation | `expected` |
274
- | Grok Bot | Unknown | `unknown` |
274
+ | Grok Bot | Its own browser on its cloud computer | `expected` |
275
275
  | Codex | The browser automation server's navigation | `expected` |
276
276
  | Antigravity | Its browser control | `expected` |
277
277
 
@@ -288,7 +288,7 @@ Read the page as a structured tree where each interactive element carries a stab
288
288
  | OpenClaw | Its page read, if present | `unknown` |
289
289
  | Hermes | Unknown | `unknown` |
290
290
  | OpenCode | The browser automation server's accessibility snapshot | `expected` |
291
- | Grok Bot | Unknown | `unknown` |
291
+ | Grok Bot | Its own browser on its cloud computer, reading the page as a tree; fall back to `page.text` where a read returns only a picture | `expected` |
292
292
  | Codex | The browser automation server's accessibility snapshot | `expected` |
293
293
  | Antigravity | Its page read | `expected` |
294
294
 
@@ -302,7 +302,7 @@ Read the page as a structured tree where each interactive element carries a stab
302
302
  | OpenClaw | Unknown | Re read after any view change and use what the fresh read returns |
303
303
  | Hermes | Unknown | Same |
304
304
  | OpenCode | The browser automation server's snapshot is expected to re number on every read, with detached nodes absent | Take a fresh read after any view change. Highest numbered means nothing here and would pick an arbitrary element |
305
- | Grok Bot | Unknown | Re read after any view change |
305
+ | Grok Bot | Expected to re-number on every read, as a hosted browser does | Re-read after any view change and use what the fresh read returns |
306
306
  | Codex | As OpenCode | As OpenCode |
307
307
  | Antigravity | Unknown | Re read after any view change |
308
308
 
@@ -317,7 +317,7 @@ Read the visible text.
317
317
  | OpenClaw | Its text extraction, if present | `unknown` |
318
318
  | Hermes | Unknown | `unknown` |
319
319
  | OpenCode | The browser automation server's text or content read | `expected` |
320
- | Grok Bot | Unknown | `unknown` |
320
+ | Grok Bot | Its own browser on its cloud computer | `expected` |
321
321
  | Codex | The browser automation server's text or content read | `expected` |
322
322
  | Antigravity | Its text extraction | `expected` |
323
323
 
@@ -334,7 +334,7 @@ Capture the screen, or a region of it.
334
334
  | OpenClaw | Its screenshot, if present | `unknown` |
335
335
  | Hermes | Unknown | `unknown` |
336
336
  | OpenCode | The browser automation server's screenshot | `expected` |
337
- | Grok Bot | Unknown | `unknown` |
337
+ | Grok Bot | Its own browser on its cloud computer | `expected` |
338
338
  | Codex | The browser automation server's screenshot | `expected` |
339
339
  | Antigravity | Its screenshot | `expected` |
340
340
 
@@ -351,7 +351,7 @@ Click one element by its reference from `page.read`.
351
351
  | OpenClaw | Its click, if present | `unknown` |
352
352
  | Hermes | Unknown | `unknown` |
353
353
  | OpenCode | The browser automation server's click on a snapshot reference | `expected` |
354
- | Grok Bot | Unknown | `unknown` |
354
+ | Grok Bot | Its own browser on its cloud computer | `expected` |
355
355
  | Codex | The browser automation server's click on a snapshot reference | `expected` |
356
356
  | Antigravity | Its click | `expected` |
357
357
 
@@ -369,7 +369,7 @@ Click one element by its reference from `page.read`.
369
369
  | OpenClaw | Unknown. Assume the harness permission layer at minimum |
370
370
  | Hermes | Unknown. Same |
371
371
  | OpenCode | The harness permission layer. A browser automation server has no classifier of its own and does not refuse |
372
- | Grok Bot | Unknown. Same |
372
+ | Grok Bot | Its own approval layer, which pauses a bot and asks you in its thread. A routine that hits it records the blocker and carries on with the phases that do not need it |
373
373
  | Codex | The harness permission layer plus its sandbox, which can decline network access without saying so |
374
374
  | Antigravity | Unknown. Assume the harness permission layer |
375
375
 
@@ -384,7 +384,7 @@ Set a form field's value by reference.
384
384
  | OpenClaw | Its form input, if present | `unknown` |
385
385
  | Hermes | Unknown | `unknown` |
386
386
  | OpenCode | The browser automation server's fill or type | `expected` |
387
- | Grok Bot | Unknown | `unknown` |
387
+ | Grok Bot | Its own browser on its cloud computer | `expected` |
388
388
  | Codex | The browser automation server's fill or type | `expected` |
389
389
  | Antigravity | Its form input | `expected` |
390
390
 
@@ -403,7 +403,7 @@ Evaluate a script in the page context and get a JSON result back.
403
403
  | OpenClaw | Its script evaluation, if present | `unknown` |
404
404
  | Hermes | Unknown | `unknown` |
405
405
  | OpenCode | The browser automation server's evaluate | `expected` |
406
- | Grok Bot | Unknown | `unknown` |
406
+ | Grok Bot | Its own browser on its cloud computer, where it exposes script evaluation; otherwise `page.read` plus `field.set` plus `element.click` | `expected` |
407
407
  | Codex | The browser automation server's evaluate | `expected` |
408
408
  | Antigravity | Its script evaluation | `expected` |
409
409
 
@@ -421,7 +421,7 @@ Evaluate a script in the page context and get a JSON result back.
421
421
  | OpenClaw | Unknown |
422
422
  | Hermes | Unknown |
423
423
  | OpenCode | The browser automation server's own default, commonly 30 seconds and usually configurable |
424
- | Grok Bot | Unknown |
424
+ | Grok Bot | Its own default, not published. Treat a slow call as unknown and re-read the page |
425
425
  | Codex | As OpenCode |
426
426
  | Antigravity | Unknown |
427
427
 
@@ -436,7 +436,7 @@ Wait for a condition, polling rather than sleeping long.
436
436
  | OpenClaw | Its wait, if present, or polling | `unknown` |
437
437
  | Hermes | Unknown | `unknown` |
438
438
  | OpenCode | The browser automation server's wait for selector or load state | `expected` |
439
- | Grok Bot | Unknown | `unknown` |
439
+ | Grok Bot | Its own browser on its cloud computer | `expected` |
440
440
  | Codex | The browser automation server's wait for selector or load state | `expected` |
441
441
  | Antigravity | Its wait | `expected` |
442
442
 
@@ -457,7 +457,7 @@ Send one short notification to your own device.
457
457
  | OpenClaw | Its own notifier if it has one, then a hosted club notifier | `unknown` |
458
458
  | Hermes | Unknown | `unknown` |
459
459
  | OpenCode | A hosted club notifier, then none | `unknown` |
460
- | Grok Bot | Unknown | `unknown` |
460
+ | Grok Bot | A message in the bot's own thread, which the Grok app carries to your phone | `expected` |
461
461
  | Codex | A hosted club notifier, then none | `unknown` |
462
462
  | Antigravity | Its own notifier if it has one, then a hosted club notifier | `unknown` |
463
463
 
@@ -505,7 +505,7 @@ Produce one image from a prompt.
505
505
  | OpenClaw | Hosted club generator when available, then an installed image helper | `unknown` |
506
506
  | Hermes | Unknown | `unknown` |
507
507
  | OpenCode | Hosted club generator when available, then an installed image helper | `unknown` |
508
- | Grok Bot | Unknown | `unknown` |
508
+ | Grok Bot | Hosted club generator when available, then an image connector you added at grok.com/connectors | `expected` |
509
509
  | Codex | Hosted club generator when available, then an installed image helper | `unknown` |
510
510
  | Antigravity | Hosted club generator when available, then an installed image helper | `unknown` |
511
511
 
@@ -526,7 +526,7 @@ Resize and re encode an image below the injection ceiling while keeping it prese
526
526
  | OpenClaw | Hosted club compressor when available, then `shell.run` | `expected` |
527
527
  | Hermes | Hosted club compressor when available, then `shell.run` if it has one | `unknown` |
528
528
  | OpenCode | Hosted club compressor when available, then `shell.run` | `expected` |
529
- | Grok Bot | Hosted club compressor when available, then `shell.run` if it has one | `unknown` |
529
+ | Grok Bot | Hosted club compressor when available, then a local image tool through `shell.run` on its cloud computer | `expected` |
530
530
  | Codex | Hosted club compressor when available, then `shell.run` | `expected` |
531
531
  | Antigravity | Hosted club compressor when available, then `shell.run` | `expected` |
532
532
 
@@ -547,7 +547,7 @@ Put a compressed image into exactly one file input and dispatch a bubbling chang
547
547
  | OpenClaw | `page.script`, then `file.upload` | `unknown` |
548
548
  | Hermes | Unknown | `unknown` |
549
549
  | OpenCode | The server's file chooser handling, then `page.script` | `expected` |
550
- | Grok Bot | Unknown | `unknown` |
550
+ | Grok Bot | `page.script` in its own browser, then `file.upload` | `expected` |
551
551
  | Codex | The server's file chooser handling, then `page.script` | `expected` |
552
552
  | Antigravity | `page.script`, then `file.upload` | `expected` |
553
553
 
@@ -564,7 +564,7 @@ Hand a local file to a page's file input.
564
564
  | OpenClaw | Its file upload, if present | `unknown` |
565
565
  | Hermes | Unknown | `unknown` |
566
566
  | OpenCode | The browser automation server's set input files | `expected` |
567
- | Grok Bot | Unknown | `unknown` |
567
+ | Grok Bot | Its own browser. The file is already on its cloud computer, because the kit lives there | `expected` |
568
568
  | Codex | The browser automation server's set input files | `expected` |
569
569
  | Antigravity | Its file upload | `expected` |
570
570
 
@@ -579,7 +579,7 @@ Put formatted copy into a rich text editor.
579
579
  | OpenClaw | Hosted club converter when available, then a synthetic paste | `unknown` |
580
580
  | Hermes | Unknown | `unknown` |
581
581
  | OpenCode | Hosted club converter when available, then a synthetic paste through evaluate | `expected` |
582
- | Grok Bot | Unknown | `unknown` |
582
+ | Grok Bot | Hosted club converter, then a synthetic paste in its own browser | `expected` |
583
583
  | Codex | Hosted club converter when available, then a synthetic paste through evaluate | `expected` |
584
584
  | Antigravity | Hosted club converter when available, then a synthetic paste | `expected` |
585
585
 
@@ -594,7 +594,7 @@ Get search results for a query.
594
594
  | OpenClaw | Your own search endpoint, then its web search if present | `unknown` |
595
595
  | Hermes | Unknown | `unknown` |
596
596
  | OpenCode | Your own search endpoint, then a search server if you added one | `expected` |
597
- | Grok Bot | Unknown | `unknown` |
597
+ | Grok Bot | Its built in web search, then its own browser | `expected` |
598
598
  | Codex | Your own search endpoint. Confirm the sandbox allows outbound requests | `expected` |
599
599
  | Antigravity | Your own search endpoint, then its web search | `expected` |
600
600
 
@@ -613,7 +613,7 @@ Read a URL's text without opening a browser.
613
613
  | OpenClaw | Its fetch, then `shell.run` with a fetch command, then the browser | `expected` |
614
614
  | Hermes | Unknown. `shell.run` with a fetch command if it has a shell | `unknown` |
615
615
  | OpenCode | Its fetch, then `shell.run` with a fetch command, then the browser | `expected` |
616
- | Grok Bot | Unknown. `shell.run` with a fetch command if it has a shell | `unknown` |
616
+ | Grok Bot | `shell.run` with a fetch command on its cloud computer, then its own browser | `expected` |
617
617
  | Codex | Its fetch or `shell.run`. Confirm the sandbox allows outbound requests | `expected` |
618
618
  | Antigravity | Its fetch, then the browser | `expected` |
619
619
 
@@ -650,7 +650,7 @@ Append exactly one validated run record to `runlog.jsonl`.
650
650
  | OpenClaw | `shell.run` on `scripts/runlog.mjs`, then a direct append | `expected` |
651
651
  | Hermes | `shell.run` if present, then a direct append through `file.write` | `unknown` |
652
652
  | OpenCode | `shell.run` on `scripts/runlog.mjs`, then a direct append | `expected` |
653
- | Grok Bot | `shell.run` if present, then a direct append through `file.write` | `unknown` |
653
+ | Grok Bot | `shell.run` on its cloud computer, then a direct append through `file.write` | `expected` |
654
654
  | Codex | `shell.run` on `scripts/runlog.mjs`, then a direct append | `expected` |
655
655
  | Antigravity | `shell.run` on `scripts/runlog.mjs`, then a direct append | `expected` |
656
656
 
@@ -679,7 +679,7 @@ The scripted judge for any text about to be written into a creative set, a build
679
679
  | OpenClaw | `shell.run` on `scripts/copy-check.mjs`, then in agent | `expected` |
680
680
  | Hermes | `shell.run` if present, then in agent | `unknown` |
681
681
  | OpenCode | `shell.run` on `scripts/copy-check.mjs`, then in agent | `expected` |
682
- | Grok Bot | `shell.run` if present, then in agent | `unknown` |
682
+ | Grok Bot | `shell.run` on its cloud computer, then in agent | `expected` |
683
683
  | Codex | `shell.run` on `scripts/copy-check.mjs`, then in agent | `expected` |
684
684
  | Antigravity | `shell.run` on `scripts/copy-check.mjs`, then in agent | `expected` |
685
685
 
@@ -704,7 +704,7 @@ Derive every creative set's review, publication and delivery state from the thre
704
704
  | OpenClaw | `shell.run` on `scripts/review.mjs`, then in agent | `expected` |
705
705
  | Hermes | `shell.run` if present, then in agent | `unknown` |
706
706
  | OpenCode | `shell.run` on `scripts/review.mjs`, then in agent | `expected` |
707
- | Grok Bot | `shell.run` if present, then in agent | `unknown` |
707
+ | Grok Bot | `shell.run` on its cloud computer, then in agent | `expected` |
708
708
  | Codex | `shell.run` on `scripts/review.mjs`, then in agent | `confirmed` |
709
709
  | Antigravity | `shell.run` on `scripts/review.mjs`, then in agent | `expected` |
710
710
 
@@ -727,7 +727,7 @@ Register, inspect, or change a recurring job named after a routine id.
727
727
  | OpenClaw | Its built in cron, `openclaw automations create`, through `shell.run` | `expected` |
728
728
  | Hermes | Its built in cron | `expected` |
729
729
  | OpenCode | Not available in the harness. The operating system's scheduler | `expected` |
730
- | Grok Bot | Its recurring tasks, on its own cloud computer | `expected` |
730
+ | Grok Bot | Its recurring tasks, one per routine, on its own cloud computer | `expected` |
731
731
  | Codex | Its scheduled runs | `expected` |
732
732
  | Antigravity | Its `agy` job runner, through `shell.run` | `expected` |
733
733
  | Pi | Not available in the harness. The operating system's scheduler | `expected` |
@@ -739,6 +739,21 @@ Register, inspect, or change a recurring job named after a routine id.
739
739
 
740
740
  **Nothing about a routine's behaviour depends on which of the three registered it.** The routine reads the clock, reads its row in `SCHEDULE.md`, and decides for itself whether to work. A job that fires at the wrong time gets caught by the window guard. A job that fires twice gets caught by the period guard. The scheduler is a starter motor, not a controller.
741
741
 
742
+ ### `brief.deliver`
743
+ Bring `brief-latest.md` to you after the standup writes it. The brief is the product, and on a harness whose computer you never open it is otherwise a file nobody reads.
744
+
745
+ | Harness | Route | Confidence |
746
+ |---|---|---|
747
+ | Claude Code | Rebuild the dashboard and open it, as the standup already does | `confirmed` |
748
+ | OpenClaw | The dashboard, then the harness's own delivery channel where its cron delivers to one | `expected` |
749
+ | Hermes | Its cron's delivery target, which reaches any platform you set | `expected` |
750
+ | OpenCode | The dashboard, then none | `expected` |
751
+ | Grok Bot | The brief text posted into this Employee's own thread, where the Grok app shows it and carries it to your phone | `expected` |
752
+ | Codex | The dashboard, then the automation's own result view | `expected` |
753
+ | Antigravity | The dashboard, then none | `expected` |
754
+
755
+ **Absent every route, the file is the brief** and the run record says `brief: file only`. That is a normal outcome and never a blocker. The brief posted anywhere is the same text as the file: no draft copy, no personal data and no credential ever leaves the file in a delivery, because a thread and a phone are less private than a folder. A brief delivered to your own address or your own thread is delivery, not a send, and needs no row in `RELEASES.md`; every other destination is a send and is held.
756
+
742
757
  ---
743
758
 
744
759
  ## 7. What you lose with no browser at all
@@ -828,7 +843,7 @@ No two share a fire minute, including the one that never touches a browser.
828
843
  | **OpenClaw** | Built in cron: `openclaw automations create "<cron>" "<message>" --name <id> --session isolated`, one per routine, with the timezone flag | `expected` |
829
844
  | **Hermes** | Built in cron, one job per routine, each handed that routine's `SKILL.md` as the prompt | `expected` |
830
845
  | **OpenCode** | None of its own. Use the operating system's scheduler below | `expected` |
831
- | **Grok Bot** | Its bots run on a schedule from their own cloud computer: one recurring task per routine | `expected` |
846
+ | **Grok Bot** | Its recurring tasks, on the shared cloud computer: one recurring task per routine, on the bot named after this Employee, with the fire time in the timezone `SCHEDULE.md` names | `expected` |
832
847
  | **Codex** | The Codex app's automations: one `kind = "cron"` automation per routine, named after the routine id, `execution_environment = "local"`, the kit folder among its working directories, and an `rrule` built from the `SCHEDULE.md` row. Each automation keeps its own memory file, which is a note to itself and never a ledger this kit reads | `confirmed` on Windows: seven routines fired on schedule under the app's automatic review mode, after the member approved the registrations in the session |
833
848
  | **Antigravity** | The `agy` job runner, one job per routine, pointed at the routine folder | `expected` |
834
849
  | **Pi** | None of its own. Use the operating system's scheduler below | `expected` |
@@ -869,7 +884,7 @@ Two shapes cover every harness.
869
884
  | **OpenClaw** | The automation holds the invocation: its message is the Shape B prompt, so there is no separate headless command to write. For a run by hand, use its own headless flag from its help output | `expected` |
870
885
  | **Hermes** | The cron job's prompt is the Shape B prompt. For a run by hand, use its own headless flag from its help output | `expected` |
871
886
  | **OpenCode** | `opencode run "<prompt>"` is its non interactive form. Confirm it against `opencode --help` on your version. Shape B | `expected` |
872
- | **Grok Bot** | The recurring task's run prompt is the Shape B prompt. It runs on its own cloud computer, not on this machine | `expected` |
887
+ | **Grok Bot** | The recurring task's run prompt is the Shape B prompt, with the kit's path on the bot's own cloud computer, where the kit lives. Nothing runs on your machine. Shape B | `expected` |
873
888
  | **Codex** | The app's automation holds the invocation: its prompt is the Shape B prompt with the kit folder named as the working directory, and no separate headless line is written. `codex exec "<prompt>"` is the by hand form, and it runs only where the CLI is signed in, which the app's own sign in does not imply. Shape B | `confirmed` for the automation route; `codex exec` stays `expected` |
874
889
  | **Antigravity** | `agy -p "<prompt>"`. The print flag is read off the CLI's own help text. That a routine then runs correctly through it is not verified | `expected` |
875
890
  | **Pi** | `pi -p "<prompt>"`. Confirm the print flag against `pi --help` on your version. Shape B | `expected` |
@@ -2,6 +2,18 @@
2
2
 
3
3
  The version this kit ships as lives in `VERSION` at the root. This file is written by the people who publish the kit and **no routine ever writes it**. Your own improvements go to `improvements/CHANGELOG.md`, which is a different file and stays yours.
4
4
 
5
+ ## 1.8.0, 2026-09-23
6
+
7
+ The Employee runs on a hosted agent, and its brief reaches you wherever it runs.
8
+
9
+ - `CAPABILITIES.md` section 2, the Grok Bot row and paragraph, rewritten from operators' published accounts of the product: every bot on an account shares one persistent cloud computer with a terminal, files and a browser; the kit lives on that computer; one bot per Employee with `AGENTS.md` pasted into its Instructions field; one recurring task per routine; sessions reach the bot only through a sync you run, and every bot then shares every login. Every Grok Bot row in sections 3 to 6 moves from `unknown` to a named route at `expected`.
10
+ - `CAPABILITIES.md` section 6, `brief.deliver`, new: the standup brings `brief-latest.md` to you after it writes it, by opening the dashboard, by posting the brief into the Employee's own thread on a harness whose computer you never open, or by sending it to your own address where a mail route exists. `CONTRACT.md` section 3.2a carries the capability and the rule: a brief to your own thread or address is delivery, not a send, and no personal data or draft copy is ever added for the delivery. Absent every route the file is the brief and the run record says `brief: file only`.
11
+ - `routines/ads-desk-standup/SKILL.md`, the step that writes the brief, gains the delivery line.
12
+ - `browser.session` names the route that keeps a hosted bot signed in (a cookie sync you run, such as Agent Cookie from a Mac over Tailscale). The kit detects it and installs nothing, as section 8 has always said.
13
+ - `AGENTS.md` no longer carries a version number that drifted from `VERSION`, and says what to do with itself on a harness that has an Instructions field instead of a folder.
14
+ - `employee.json` lists all eleven harnesses the docs promise. Pi, Cline, Qwen Code and DeepSeek were missing.
15
+ - The install prompt's Phase 0 says the cloud sync rule does not apply on a hosted harness.
16
+
5
17
  ## 1.7.0, 2026-09-19
6
18
 
7
19
  The Employee tells you when a newer kit is out, and offers its own repairs back to the project.
@@ -428,6 +428,7 @@ Every capability in this table degrades the same way when the harness has no bro
428
428
  | Capability | What it does | Routes, in preference order | Degradation |
429
429
  |---|---|---|---|
430
430
  | `notify.push` | Send one short notification to the member's own device | harness push notification tool, then a hosted club notifier, then none | **Absence is not a failure and is never a blocker.** Put `push: not available` in the run record `notes` and carry on. Every push in this kit is a shortcut to a line that is already in the brief, so the member loses speed and never loses information |
431
+ | `brief.deliver` | Bring `brief-latest.md` to the member after the standup writes it: open the dashboard on a machine the member uses, post the brief text into the Employee's own thread on a harness whose computer the member never opens, or send it to the member's own address where a mail route exists. The brief to the member's own thread or address is delivery, not a send, and needs no release | The dashboard, then the Employee's own thread or delivery channel, then the member's own address, then none | **Absence is not a failure and is never a blocker.** Put `brief: file only` in the run record `notes` and carry on. The delivered text is the file's text: no draft copy, no personal data and no credential is added for the delivery, because a thread and a phone are less private than a folder |
431
432
 
432
433
  ### 3.3 Content
433
434
 
@@ -65,7 +65,7 @@ These apply from now until I remove them. They are not negotiable inside this se
65
65
  ## PHASE 0. Read the contract, then check the machine
66
66
 
67
67
  1. Read these in full, in this order, including the `## Corrections` section at the bottom of each: `«ADS_ROOT»/CONTRACT.md`, `ROLE.md`, `CAPABILITIES.md`, `SCHEDULE.md`. Where anything in this prompt and `CONTRACT.md` disagree, the contract wins. Where the contract and my own workspace rule file disagree, mine wins.
68
- 2. Confirm `«ADS_ROOT»` exists and is writable, and that it is **not** inside OneDrive, Dropbox, Google Drive, or iCloud. If it is inside a synced folder, copy the whole kit to a local path that is not synced, continue there, leave a pointer file behind, and put the new path as the first line of your day one report. **Do not ask me.** These routines write state mid run and a sync client corrupts exactly the file that tells tomorrow's run what already happened, and it also mangles a creative set folder written as a burst of images.
68
+ 2. Confirm `«ADS_ROOT»` exists and is writable, and that it is **not** inside OneDrive, Dropbox, Google Drive, or iCloud. If it is inside a synced folder, copy the whole kit to a local path that is not synced, continue there, leave a pointer file behind, and put the new path as the first line of your day one report. **Do not ask me.** These routines write state mid run and a sync client corrupts exactly the file that tells tomorrow's run what already happened, and it also mangles a creative set folder written as a burst of images. On a harness whose computer is not a machine I use (Grok Bot runs this kit on its own cloud computer), the sync rule does not apply: the kit lives on that computer, you install it there, and the brief reaches me through `brief.deliver` in `CONTRACT.md` section 3.2a, because I never open that computer's files.
69
69
  3. Read the local timezone id and the local wall clock time from this machine using rule 18. Record both. Every time you write from here on is in that zone.
70
70
  4. Check `node --version`. It must be 18 or newer. Then run the three self tests once: `node "«ADS_ROOT»/scripts/copy-check.mjs" --selftest`, `node "«ADS_ROOT»/scripts/runlog.mjs" --selftest` and `node "«ADS_ROOT»/scripts/guard.mjs" --selftest`. If Node is missing or a self test fails, record the blocker, take the in agent routes for `copy.check` and `runlog.append` described in `CAPABILITIES.md` section 6, and carry on. **None of the three is ever skipped.** **Then check the login, and stop if it is missing:** run `claude auth status` through `shell.run`, or your harness's own equivalent. If it reports `loggedIn: false`, or no signed in account, stop here and tell me in one plain sentence that nothing after this phase can run until I open a terminal, run `claude`, and complete `/login` myself. A scheduled run that is not logged in exits in under a second with `Not logged in` and writes nothing, so there is nothing to gain by continuing. Never try to log in for me, and never enter or write a key.
71
71
  5. Detect your own capabilities live, using the framing in `CAPABILITIES.md` section 1.2. Answer it for yourself rather than asking me. Try the cheap ones rather than reasoning about them, including one throwaway call to `image.generate` if it has a route. Settle two things specifically and write down both answers:
@@ -1 +1 @@
1
- 1.7.0
1
+ 1.8.0