@cohortapp/agent-sdk 2.11.15 → 2.13.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 (280) hide show
  1. package/.env.example +37 -22
  2. package/README.md +2 -0
  3. package/bin/maestro.mjs +117 -39
  4. package/bin/maestro.test.mjs +175 -5
  5. package/docs/guides/front-door-session.md +313 -0
  6. package/docs/guides/mac-mini.md +100 -28
  7. package/docs/guides/org-onboarding.md +1 -1
  8. package/docs/guides/setup-wizard.md +9 -5
  9. package/docs/runbooks/cohort-cutover.md +11 -1
  10. package/docs/runbooks/mac-mini-bootstrap.md +38 -63
  11. package/lib/cadence-bus-requeue.test.mjs +83 -0
  12. package/lib/cadence-bus.mjs +43 -7
  13. package/lib/channels/inbox-item.mjs +59 -2
  14. package/lib/cli/board.mjs +285 -0
  15. package/lib/cli/board.test.mjs +227 -0
  16. package/lib/cli/design.mjs +185 -0
  17. package/lib/cli/design.test.mjs +270 -0
  18. package/lib/cli/doctor-checks.mjs +441 -0
  19. package/lib/cli/doctor-checks.test.mjs +336 -0
  20. package/lib/cli/global-setup-extras.mjs +454 -0
  21. package/lib/cli/global-setup-extras.test.mjs +462 -0
  22. package/lib/cli/inbox.mjs +304 -0
  23. package/lib/cli/inbox.test.mjs +230 -0
  24. package/lib/cli/session-ack.mjs +63 -0
  25. package/lib/cli/session-ack.test.mjs +63 -0
  26. package/lib/cli/session.mjs +760 -0
  27. package/lib/cli/session.test.mjs +613 -0
  28. package/lib/collective/global-config.mjs +209 -6
  29. package/lib/collective/global-config.test.mjs +145 -0
  30. package/lib/collective/global-skills.mjs +145 -0
  31. package/lib/collective/global-skills.test.mjs +126 -0
  32. package/lib/collective/presence.mjs +4 -3
  33. package/lib/collective/vendor-skills.mjs +305 -0
  34. package/lib/collective/vendor-skills.test.mjs +306 -0
  35. package/lib/comms/send-gate.mjs +115 -0
  36. package/lib/comms/send-gate.test.mjs +113 -0
  37. package/lib/design/design-md.mjs +793 -0
  38. package/lib/design/design-md.test.mjs +318 -0
  39. package/lib/design/fixtures/DESIGN.golden.md +238 -0
  40. package/lib/design/fixtures/PRODUCT.golden.md +67 -0
  41. package/lib/design/fixtures/foundation.json +133 -0
  42. package/lib/design/refresh-gate.mjs +154 -0
  43. package/lib/design/refresh-gate.test.mjs +144 -0
  44. package/lib/design/write.mjs +275 -0
  45. package/lib/design/write.test.mjs +241 -0
  46. package/lib/feature-init.mjs +2 -2
  47. package/lib/mcp/server.test.mjs +9 -4
  48. package/lib/model-router/spawn.test.mjs +21 -0
  49. package/lib/org/board-mine-cache.mjs +99 -0
  50. package/lib/org/board-mine-cache.test.mjs +53 -0
  51. package/lib/org/board.mjs +11 -0
  52. package/lib/org/board.test.mjs +11 -1
  53. package/lib/org/client.mjs +36 -0
  54. package/lib/org/client.test.mjs +46 -0
  55. package/lib/org/inbound/directedness.mjs +18 -2
  56. package/lib/org/inbound/directedness.test.mjs +58 -0
  57. package/lib/org/inbound/index.mjs +8 -1
  58. package/lib/org/inbound/index.test.mjs +22 -0
  59. package/lib/org/mesh-directives.test.mjs +110 -0
  60. package/lib/org/mesh.mjs +61 -1
  61. package/lib/org/protocol.checksum +1 -1
  62. package/lib/org/protocol.mjs +52 -0
  63. package/lib/org/protocol.test.mjs +12 -1
  64. package/lib/org/registry.mjs +3 -2
  65. package/lib/org/tool-surface.mjs +120 -0
  66. package/lib/org/tool-surface.test.mjs +118 -5
  67. package/lib/prompts/parallelism.mjs +79 -0
  68. package/lib/prompts/parallelism.test.mjs +177 -0
  69. package/lib/security/external-content.mjs +1 -1
  70. package/lib/security/external-content.test.mjs +17 -0
  71. package/lib/session/config.mjs +137 -0
  72. package/lib/session/config.test.mjs +92 -0
  73. package/lib/session/feed-core.mjs +229 -0
  74. package/lib/session/feed-core.test.mjs +198 -0
  75. package/lib/session/first-run.mjs +126 -0
  76. package/lib/session/first-run.test.mjs +121 -0
  77. package/lib/session/frontdoor.mjs +266 -0
  78. package/lib/session/frontdoor.test.mjs +205 -0
  79. package/lib/session/handoffs.mjs +295 -0
  80. package/lib/session/handoffs.test.mjs +183 -0
  81. package/lib/session/identity.mjs +220 -0
  82. package/lib/session/identity.test.mjs +180 -0
  83. package/lib/session/inbox-claims.mjs +434 -0
  84. package/lib/session/inbox-claims.test.mjs +286 -0
  85. package/lib/session/launch-args.mjs +161 -0
  86. package/lib/session/launch-args.test.mjs +157 -0
  87. package/lib/session/liveness.mjs +174 -0
  88. package/lib/session/liveness.test.mjs +100 -0
  89. package/lib/session/status-summary.mjs +172 -0
  90. package/lib/session/status-summary.test.mjs +118 -0
  91. package/lib/session-permissions.mjs +39 -3
  92. package/lib/session-permissions.test.mjs +20 -0
  93. package/lib/setup/claude-probe.mjs +161 -24
  94. package/lib/setup/claude-probe.test.mjs +187 -0
  95. package/lib/setup/sections/learning.mjs +2 -1
  96. package/lib/setup/sections/model.mjs +104 -24
  97. package/lib/setup/sections/model.test.mjs +240 -0
  98. package/lib/setup/sections/org.mjs +27 -2
  99. package/lib/setup/sections/org.test.mjs +35 -2
  100. package/lib/setup/sections/verify.mjs +5 -0
  101. package/lib/setup/state.mjs +30 -10
  102. package/lib/setup/state.test.mjs +24 -1
  103. package/lib/singleton.js +11 -3
  104. package/lib/singleton.test.mjs +16 -0
  105. package/lib/subagents/lock.mjs +1 -1
  106. package/lib/telemetry/collect.mjs +270 -6
  107. package/lib/telemetry/collect.test.mjs +196 -1
  108. package/lib/upgrade/global-refresh.mjs +108 -0
  109. package/lib/upgrade/global-refresh.test.mjs +65 -0
  110. package/lib/upgrade/launchd-reconcile.mjs +327 -0
  111. package/lib/upgrade/launchd-reconcile.test.mjs +272 -0
  112. package/lib/upgrade/post-steps.mjs +151 -0
  113. package/lib/upgrade/post-steps.test.mjs +200 -0
  114. package/lib/upgrade/verify.mjs +215 -0
  115. package/lib/upgrade/verify.test.mjs +164 -0
  116. package/lib/voice/outbound.mjs +3 -2
  117. package/lib/voice/post-call-brief.mjs +2 -1
  118. package/lib/voice/session-rotation.mjs +6 -1
  119. package/lib/voice/session-rotation.test.mjs +114 -0
  120. package/package.json +3 -3
  121. package/plugins/maestro-skills/plugin.json +25 -1
  122. package/plugins/maestro-skills/skills/board-work.md +63 -0
  123. package/plugins/maestro-skills/skills/cohort-design.md +153 -0
  124. package/plugins/maestro-skills/skills/inbound-triage.md +80 -0
  125. package/plugins/maestro-skills/skills/main-session.md +102 -0
  126. package/plugins/maestro-skills/skills/peer-sessions.md +65 -0
  127. package/plugins/maestro-skills/skills/persona-discipline.md +75 -0
  128. package/plugins/maestro-skills/vendor/emilkowalski/LICENSE +21 -0
  129. package/plugins/maestro-skills/vendor/emilkowalski/UPSTREAM.json +70 -0
  130. package/plugins/maestro-skills/vendor/emilkowalski/skills/animate/RECIPES.md +324 -0
  131. package/plugins/maestro-skills/vendor/emilkowalski/skills/animate/SKILL.md +199 -0
  132. package/plugins/maestro-skills/vendor/emilkowalski/skills/animation-vocabulary/SKILL.md +173 -0
  133. package/plugins/maestro-skills/vendor/emilkowalski/skills/apple-design/SKILL.md +282 -0
  134. package/plugins/maestro-skills/vendor/emilkowalski/skills/emil-design-eng/SKILL.md +674 -0
  135. package/plugins/maestro-skills/vendor/emilkowalski/skills/find-animation-opportunities/SKILL.md +132 -0
  136. package/plugins/maestro-skills/vendor/emilkowalski/skills/improve-animations/AUDIT.md +115 -0
  137. package/plugins/maestro-skills/vendor/emilkowalski/skills/improve-animations/PLAN-TEMPLATE.md +73 -0
  138. package/plugins/maestro-skills/vendor/emilkowalski/skills/improve-animations/SKILL.md +101 -0
  139. package/plugins/maestro-skills/vendor/emilkowalski/skills/prototype/PICKER.md +197 -0
  140. package/plugins/maestro-skills/vendor/emilkowalski/skills/prototype/SKILL.md +90 -0
  141. package/plugins/maestro-skills/vendor/emilkowalski/skills/review-animations/SKILL.md +112 -0
  142. package/plugins/maestro-skills/vendor/emilkowalski/skills/review-animations/STANDARDS.md +187 -0
  143. package/plugins/maestro-skills/vendor/impeccable/LICENSE +191 -0
  144. package/plugins/maestro-skills/vendor/impeccable/NOTICE.md +11 -0
  145. package/plugins/maestro-skills/vendor/impeccable/SKILL.md +86 -0
  146. package/plugins/maestro-skills/vendor/impeccable/UPSTREAM.json +201 -0
  147. package/plugins/maestro-skills/vendor/impeccable/agents/impeccable-asset-producer.md +42 -0
  148. package/plugins/maestro-skills/vendor/impeccable/agents/impeccable-documenter.md +29 -0
  149. package/plugins/maestro-skills/vendor/impeccable/agents/impeccable-finish-reviewer.md +43 -0
  150. package/plugins/maestro-skills/vendor/impeccable/agents/impeccable-manual-edit-applier.md +97 -0
  151. package/plugins/maestro-skills/vendor/impeccable/reference/adapt.md +312 -0
  152. package/plugins/maestro-skills/vendor/impeccable/reference/adapt.native.md +58 -0
  153. package/plugins/maestro-skills/vendor/impeccable/reference/android.md +46 -0
  154. package/plugins/maestro-skills/vendor/impeccable/reference/animate.md +89 -0
  155. package/plugins/maestro-skills/vendor/impeccable/reference/audit.md +136 -0
  156. package/plugins/maestro-skills/vendor/impeccable/reference/audit.native.md +139 -0
  157. package/plugins/maestro-skills/vendor/impeccable/reference/bolder.md +33 -0
  158. package/plugins/maestro-skills/vendor/impeccable/reference/clarify.md +94 -0
  159. package/plugins/maestro-skills/vendor/impeccable/reference/colorize.md +86 -0
  160. package/plugins/maestro-skills/vendor/impeccable/reference/craft-floor.md +44 -0
  161. package/plugins/maestro-skills/vendor/impeccable/reference/craft.md +5 -0
  162. package/plugins/maestro-skills/vendor/impeccable/reference/critique.md +806 -0
  163. package/plugins/maestro-skills/vendor/impeccable/reference/degraded/asset-producer.md +37 -0
  164. package/plugins/maestro-skills/vendor/impeccable/reference/degraded/documenter.md +24 -0
  165. package/plugins/maestro-skills/vendor/impeccable/reference/degraded/finish-reviewer.md +38 -0
  166. package/plugins/maestro-skills/vendor/impeccable/reference/degraded/manual-edit-applier.md +92 -0
  167. package/plugins/maestro-skills/vendor/impeccable/reference/delight.md +70 -0
  168. package/plugins/maestro-skills/vendor/impeccable/reference/distill.md +111 -0
  169. package/plugins/maestro-skills/vendor/impeccable/reference/doctor.md +54 -0
  170. package/plugins/maestro-skills/vendor/impeccable/reference/document.md +416 -0
  171. package/plugins/maestro-skills/vendor/impeccable/reference/extract.md +69 -0
  172. package/plugins/maestro-skills/vendor/impeccable/reference/harden.md +336 -0
  173. package/plugins/maestro-skills/vendor/impeccable/reference/hooks.md +111 -0
  174. package/plugins/maestro-skills/vendor/impeccable/reference/init.md +131 -0
  175. package/plugins/maestro-skills/vendor/impeccable/reference/ios.md +51 -0
  176. package/plugins/maestro-skills/vendor/impeccable/reference/layout.md +84 -0
  177. package/plugins/maestro-skills/vendor/impeccable/reference/live-setup.md +104 -0
  178. package/plugins/maestro-skills/vendor/impeccable/reference/live.md +325 -0
  179. package/plugins/maestro-skills/vendor/impeccable/reference/new-work.md +147 -0
  180. package/plugins/maestro-skills/vendor/impeccable/reference/onboard.md +234 -0
  181. package/plugins/maestro-skills/vendor/impeccable/reference/operate.md +61 -0
  182. package/plugins/maestro-skills/vendor/impeccable/reference/optimize.md +258 -0
  183. package/plugins/maestro-skills/vendor/impeccable/reference/overdrive.md +127 -0
  184. package/plugins/maestro-skills/vendor/impeccable/reference/polish.md +105 -0
  185. package/plugins/maestro-skills/vendor/impeccable/reference/quieter.md +99 -0
  186. package/plugins/maestro-skills/vendor/impeccable/reference/routing.md +24 -0
  187. package/plugins/maestro-skills/vendor/impeccable/reference/shape.md +59 -0
  188. package/plugins/maestro-skills/vendor/impeccable/reference/typeset.md +80 -0
  189. package/plugins/maestro-skills/vendor/impeccable/reference/visualize.md +46 -0
  190. package/plugins/maestro-skills/vendor/taste-skill/LICENSE +21 -0
  191. package/plugins/maestro-skills/vendor/taste-skill/UPSTREAM.json +37 -0
  192. package/plugins/maestro-skills/vendor/taste-skill/skills/minimalist-skill/SKILL.md +85 -0
  193. package/plugins/maestro-skills/vendor/taste-skill/skills/redesign-skill/SKILL.md +178 -0
  194. package/plugins/maestro-skills/vendor/taste-skill/skills/soft-skill/SKILL.md +98 -0
  195. package/plugins/maestro-skills/vendor/taste-skill/skills/taste-skill/SKILL.md +1206 -0
  196. package/plugins/maestro-skills/vendor/unlazy/LICENSE +21 -0
  197. package/plugins/maestro-skills/vendor/unlazy/SECURITY.md +72 -0
  198. package/plugins/maestro-skills/vendor/unlazy/SKILL.md +104 -0
  199. package/plugins/maestro-skills/vendor/unlazy/UPSTREAM.json +94 -0
  200. package/plugins/maestro-skills/vendor/unlazy/references/dispatch.md +82 -0
  201. package/plugins/maestro-skills/vendor/unlazy/references/gates.md +149 -0
  202. package/plugins/maestro-skills/vendor/unlazy/references/method.md +49 -0
  203. package/plugins/maestro-skills/vendor/unlazy/references/orchestration.md +107 -0
  204. package/plugins/maestro-skills/vendor/unlazy/references/parallel.md +133 -0
  205. package/plugins/maestro-skills/vendor/unlazy/references/token-economy.md +48 -0
  206. package/plugins/maestro-skills/vendor/unlazy/scripts/dispatch-check.mjs +139 -0
  207. package/plugins/maestro-skills/vendor/unlazy/scripts/gate-check.mjs +960 -0
  208. package/plugins/maestro-skills/vendor/unlazy/scripts/gate-lint.mjs +245 -0
  209. package/plugins/maestro-skills/vendor/unlazy/scripts/lib/check-supervisor.mjs +46 -0
  210. package/plugins/maestro-skills/vendor/unlazy/scripts/lib/dispatch.mjs +293 -0
  211. package/plugins/maestro-skills/vendor/unlazy/scripts/lib/gates.mjs +953 -0
  212. package/plugins/maestro-skills/vendor/unlazy/scripts/lib/process-tree.mjs +161 -0
  213. package/plugins/maestro-skills/vendor/unlazy/scripts/lib/regex-worker.mjs +9 -0
  214. package/plugins/maestro-skills/vendor/unlazy/templates/PLAN.md +116 -0
  215. package/plugins/maestro-skills/vendor/unlazy/templates/gates-leaf.md +51 -0
  216. package/plugins/maestro-skills/vendor/unlazy/templates/gates-node.md +51 -0
  217. package/scaffold/CLAUDE.md +24 -0
  218. package/scripts/ci/check-durable-write-seam.mjs +147 -0
  219. package/scripts/ci/check-durable-write-seam.test.mjs +90 -0
  220. package/scripts/ci/check-skill-packs.mjs +388 -0
  221. package/scripts/ci/check-skill-packs.test.mjs +495 -0
  222. package/scripts/ci/check.mjs +6 -0
  223. package/scripts/collective/hook-runner.mjs +39 -4
  224. package/scripts/collective/hook-runner.test.mjs +85 -2
  225. package/scripts/daemon/agent-daemon-board-mine.test.mjs +96 -0
  226. package/scripts/daemon/agent-daemon-design.test.mjs +238 -0
  227. package/scripts/daemon/agent-daemon-frontdoor.test.mjs +60 -0
  228. package/scripts/daemon/agent-daemon.mjs +249 -10
  229. package/scripts/daemon/agent-daemon.test.mjs +73 -0
  230. package/scripts/daemon/assurance-e2e.test.mjs +141 -6
  231. package/scripts/daemon/assurance.mjs +461 -37
  232. package/scripts/daemon/assurance.test.mjs +408 -43
  233. package/scripts/daemon/cadence-consumer-frontdoor.test.mjs +393 -0
  234. package/scripts/daemon/cadence-consumer.mjs +289 -89
  235. package/scripts/daemon/cadence-handlers.mjs +53 -0
  236. package/scripts/daemon/classifier.mjs +1 -1
  237. package/scripts/daemon/dispatcher-resume.test.mjs +166 -0
  238. package/scripts/daemon/dispatcher.mjs +127 -19
  239. package/scripts/daemon/health.mjs +12 -1
  240. package/scripts/daemon/inbox-deferral-session.test.mjs +49 -0
  241. package/scripts/daemon/inbox-deferral.mjs +6 -0
  242. package/scripts/daemon/lib/self-echo.mjs +201 -0
  243. package/scripts/daemon/lib/self-echo.test.mjs +153 -0
  244. package/scripts/daemon/maestro-daemon.mjs +3 -0
  245. package/scripts/daemon/prompt-builder.mjs +19 -3
  246. package/scripts/daemon/responder.mjs +51 -40
  247. package/scripts/daemon/sdk-version.mjs +51 -0
  248. package/scripts/daemon/sdk-version.test.mjs +31 -0
  249. package/scripts/hooks/pre-send-audit.sh +97 -4
  250. package/scripts/hooks/pre-send-audit.test.mjs +140 -1
  251. package/scripts/local-triggers/autoupdate.sh +243 -19
  252. package/scripts/local-triggers/autoupdate.test.mjs +518 -0
  253. package/scripts/local-triggers/generate-plists.sh +24 -1
  254. package/scripts/local-triggers/generate-plists.test.mjs +49 -11
  255. package/scripts/org/send-orgmail.first-contact.test.mjs +102 -0
  256. package/scripts/org/send-orgmail.mjs +27 -3
  257. package/scripts/poller/inbox-privilege-injection.test.mjs +167 -0
  258. package/scripts/poller/slack-poller.mjs +13 -1
  259. package/scripts/poller/utils.mjs +46 -1
  260. package/scripts/poller-launchd/install.sh +19 -11
  261. package/scripts/poller-launchd/install.test.mjs +243 -0
  262. package/scripts/poller-launchd/launchd-poller-wrapper.sh +92 -0
  263. package/scripts/poller-launchd/migrate.sh +66 -0
  264. package/scripts/poller-launchd/poller.plist.template +4 -2
  265. package/scripts/session/feed.mjs +237 -0
  266. package/scripts/session/feed.test.mjs +196 -0
  267. package/scripts/session/supervisor-sh.test.mjs +218 -0
  268. package/scripts/session/supervisor.mjs +328 -0
  269. package/scripts/session/supervisor.sh +141 -0
  270. package/scripts/session/supervisor.test.mjs +482 -0
  271. package/scripts/setup/configure-macos.sh +250 -55
  272. package/scripts/setup/configure-macos.test.mjs +306 -0
  273. package/scripts/setup/init-agent.sh +112 -7
  274. package/scripts/setup/init-agent.test.mjs +220 -1
  275. package/scripts/vendor/skill-packs.mjs +354 -0
  276. package/scripts/vendor/sync-skill-packs.mjs +242 -0
  277. package/scripts/vendor/sync-skill-packs.test.mjs +103 -0
  278. package/scripts/watchdog/memory-watchdog.sh +37 -1
  279. package/scripts/watchdog/memory-watchdog.test.mjs +64 -0
  280. package/scripts/setup/boot-claude-session.sh +0 -94
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maestro-skills",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Maestro operational skills — executive briefings, communications, hiring, strategy, and domain-specific workflows for autonomous AI agents",
5
5
  "skills": [
6
6
  {
@@ -138,6 +138,30 @@
138
138
  {
139
139
  "name": "call-working-sessions",
140
140
  "description": "Turn a Cohort call into a working session — present a doc/sheet/channel/board/charter on the call stage, step through it (scroll/highlight/type), live-edit docs while talking, read what participants see on screen, and watch reactions and raised hands. Use when you are a participant in a live Cohort call and want to show rather than tell, walk people through a document, or ground \"this chart / that number\" talk in what is actually on screen."
141
+ },
142
+ {
143
+ "name": "main-session",
144
+ "description": "Run as the agent's front door — the one long-lived session that receives every inbound Cohort event, answers or files it, works the board when idle, and restarts itself cleanly. Use when started as <first>-main, when a feed event arrives, or to explain how the front door works."
145
+ },
146
+ {
147
+ "name": "inbound-triage",
148
+ "description": "Decide, for each inbound Cohort event, whether to answer now, acknowledge + file it on the board + run a workflow, or hand it to a peer session — always acknowledging in the same turn. Use when an inbound feed line arrives or when unsure whether an ask is a reply or a task."
149
+ },
150
+ {
151
+ "name": "board-work",
152
+ "description": "Work the agent's own items across every board — list, claim the highest-priority one when idle, track progress, close — via board_mine/board_track/board_claim/board_complete or `maestro board`. Use on an idle wakeup, when asked what is on your plate, or when an item is assigned to you."
153
+ },
154
+ {
155
+ "name": "peer-sessions",
156
+ "description": "Spawn, find and talk to the agent's own peer sessions with ListAgents/SendMessage and `maestro session spawn|peers`, and relay their status to a human in the agent's own voice. Use for parallel work, when a human asks how something is going, or when a peer reports back."
157
+ },
158
+ {
159
+ "name": "cohort-design",
160
+ "description": "Harmonise the installed design skills with Cohort's own design system — DESIGN.md, PRODUCT.md and the design_* tools outrank every skill's defaults; impeccable for product-UI craft, the motion skills for animation, the taste skills for marketing pages only, unlazy for completion gates. Use before any design, redesign, polish, critique, audit, layout, typography, colour or motion work."
161
+ },
162
+ {
163
+ "name": "persona-discipline",
164
+ "description": "Be one persona to every human — never name Claude Code, sessions, sub-sessions, subagents, workflows or models in anything a person could read; how to rewrite when the pre-send audit blocks a message. Use before any outbound message or when the send hook blocks."
141
165
  }
142
166
  ]
143
167
  }
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: board-work
3
+ description: Work the agent's own items across every board — list them, claim the highest-priority one when idle, track progress, and close them — using board_mine / board_track / board_claim / board_complete or `maestro board`. Use on an idle wakeup, when asked "what is on your plate", or when a board item is assigned to you.
4
+ ---
5
+
6
+ # Board work
7
+
8
+ The boards are where the agent's work lives, across every conversation and
9
+ space. `board_ready` shows unassigned work anyone could take; `board_mine`
10
+ shows what is yours — assigned to you or waiting on your review, on every
11
+ board and workstream at once. Work from `board_mine` first.
12
+
13
+ ## Read
14
+
15
+ - `board_mine` (MCP) or `maestro board mine [--json]` — every item of yours:
16
+ `{itemId, title, boardName, channelId, workstreamId, col, stage, priority,
17
+ dueAt, updatedAt, url}`. The daemon caches the same read to
18
+ `state/org/board-mine.json` every five minutes; the session primer and
19
+ `maestro board mine` use that cache when the live read is empty or the org is
20
+ unreachable, and say so.
21
+ - `board_ready` — unassigned, unblocked items you could claim in addition.
22
+
23
+ ## Pick
24
+
25
+ On an idle wakeup: take the highest-priority item (P0 first) that you can
26
+ move today without a human decision. Prefer an item with a due date inside a
27
+ week over one without; prefer one already `doing`/`working` over one in
28
+ `todo`. Skip anything `blocked` unless what it was blocked on has arrived.
29
+
30
+ ## Claim, work, close
31
+
32
+ - `board_claim {itemId}` / `maestro board claim <itemId>` — the server
33
+ resolves the race; a `CONFLICT` means a colleague got there first, take the
34
+ next one.
35
+ - Work it. Mid-work, make the visible state honest with `board_track` on the
36
+ originating message when the item came from an ask (the row is keyed on the
37
+ message, so use the same `channelId` + `messageId`): `working` when the
38
+ substantive part starts, `blocked` with what you need and `notify` for
39
+ whoever can unblock, `review` when it wants eyes before it ships. One
40
+ comment per meaningful change, not per file edited.
41
+ - `board_complete {itemId, proof:{note, url?}}` / `maestro board complete
42
+ <itemId> --note "…"` when done. Then tell the person who asked, in the
43
+ channel it came from.
44
+
45
+ Items that did not come from a message (created on the board by a human) have
46
+ no originating message: use `task_comment` / `task_update` for progress, and
47
+ `board_complete` to close.
48
+
49
+ ## Filing new work
50
+
51
+ An inbound ask that turns into board work is filed with `board_track --stage
52
+ accepted` (or `maestro board track <inbox-id> --stage accepted --title …
53
+ --why …`), never with `task_create`: the server derives the right board from
54
+ the message and dedupes, so a re-delivered ask finds the same row. See
55
+ `inbound-triage`.
56
+
57
+ ## What not to do
58
+
59
+ - Do not narrate every step on the board; the board is for the state a
60
+ waiting person needs.
61
+ - Do not claim more than you can move today; an unclaimed item is available to
62
+ a colleague, a claimed one is not.
63
+ - Do not close an item whose deliverable the person has not received.
@@ -0,0 +1,153 @@
1
+ ---
2
+ name: cohort-design
3
+ description: Harmonise the installed design skills with Cohort's own design system for any interface work — design, redesign, layout, typography, colour, polish, critique, audit, accessibility, motion and animation, component and design-token work, landing and marketing pages, or making something feel less templated. Read this FIRST, before impeccable, the motion skills, design-taste-frontend, high-end-visual-design, minimalist-ui, redesign-existing-projects or unlazy, so the craft they carry lands on Cohort's tokens, typeface and voice rather than their own defaults.
4
+ ---
5
+
6
+ # Cohort design — which skill wins, and where the truth lives
7
+
8
+ Several strong design skills are installed on this machine. They are craft:
9
+ they know what good looks like, how to critique, what motion should feel like.
10
+ None of them knows what **Cohort** looks like. This skill is the join.
11
+
12
+ Read it before you open any of them, and keep its precedence in mind while you
13
+ work — the moment a skill's default and Cohort's system disagree, this is the
14
+ tie-break.
15
+
16
+ ## The source of truth is Cohort's own, always
17
+
18
+ **`DESIGN.md` and `PRODUCT.md` in the agent directory, and the `design_*` tools
19
+ on the `cohort` MCP server, outrank every installed skill on every question of
20
+ substance:** palette, typeface, type scale, spacing, radii, component grammar,
21
+ imagery, templates, and the voice the copy is written in.
22
+
23
+ - `DESIGN.md` lives at `$AGENT_ROOT/DESIGN.md` (the identity block at the top
24
+ of your context names the agent directory). It is generated from the
25
+ workspace's live brand foundation by `maestro design sync`, which also writes
26
+ `PRODUCT.md` and `state/design/foundation.json`. If the cwd is not the agent
27
+ directory — you are in a product repo, a site repo, a scratch directory —
28
+ read `$AGENT_ROOT/DESIGN.md` anyway. It is still the system of record.
29
+ - If `DESIGN.md` is missing or looks stale, run `maestro design sync` and read
30
+ it. Do not proceed on a skill's default palette because the file was not
31
+ there.
32
+ - The live foundation, the voice, the templates and the asset kit are reads on
33
+ the `cohort` MCP server: `design_foundation`, `design_voice`,
34
+ `design_list_templates`, `design_render_template`, `design_rewrite_in_voice`,
35
+ `design_export_kit`, `design_generate_image`. Prefer a rendered template and
36
+ an exported kit over hand-rolling an asset.
37
+ - **Foundation changes are human-gated.** Your lane is `design_propose_change`,
38
+ which stages a reviewable diff and writes nothing. Never edit tokens in
39
+ `DESIGN.md` to make a design work; propose the change and design against
40
+ what exists meanwhile. `maestro-brand-steward` carries the full mechanics of
41
+ that surface.
42
+
43
+ ## Precedence
44
+
45
+ 1. **Cohort's own system** — `DESIGN.md`, `PRODUCT.md`, the `design_*` tools.
46
+ Tokens, type, voice, templates, assets, and every mutation.
47
+ 2. **`impeccable`** — craft, critique, audit and polish of product UI. Its
48
+ modes (shape, audit, critique, layout, typeset, clarify, distill, harden,
49
+ polish, optimize) are the working vocabulary for interface quality. Use it
50
+ for hierarchy, information architecture, cognitive load, accessibility,
51
+ states, edge cases and the finish pass.
52
+ 3. **The motion skills** — `animate`, `improve-animations`,
53
+ `review-animations`, `find-animation-opportunities`,
54
+ `animation-vocabulary`, `apple-design`, `emil-design-eng`. Anything that
55
+ moves: whether it should animate at all, which property, which curve, how
56
+ long, how it interrupts, how it exits, and reduced-motion.
57
+ 4. **`design-taste-frontend`, `high-end-visual-design`, `minimalist-ui`,
58
+ `redesign-existing-projects`** — **marketing and site pages only.** They
59
+ self-declare out of scope for dashboards, data tables, forms and multi-step
60
+ product UI, and they are right about that: their instincts are editorial.
61
+ Do not apply them to product surfaces.
62
+ 5. **`unlazy`** — completion gates on substantial work. Write the acceptance
63
+ gates before you start a large or multi-part design change, and re-verify
64
+ the evidence before you report it done.
65
+
66
+ ## The overrides — read these before you follow a skill's rule
67
+
68
+ - **The em-dash ban does not apply to Cohort copy.** `design-taste-frontend`
69
+ and its siblings forbid em-dashes as an AI tell. Cohort's voice uses them.
70
+ `DESIGN.md` and `design_voice` decide punctuation, not a skill.
71
+ - **Typeface and palette come from `DESIGN.md`, never from a skill's default.**
72
+ Every one of these skills names fonts and colours it likes. Those are
73
+ examples of taste, not instructions. A design that ships a skill's default
74
+ typeface is wrong even if it looks good.
75
+ - **Never run `impeccable`'s launcher, its hooks, or its live browser mode on
76
+ this machine.** Only its markdown is installed here, deliberately: the
77
+ upstream launcher downloads and runs a binary on first use, and live mode
78
+ drives a browser. Read the skill, apply the judgement, do the work with the
79
+ tools you already have. The same rule covers its `hooks.md` guidance — no
80
+ hook from any of these packs is installed, and none should be.
81
+ - **`impeccable`'s Setup step 1 cannot run here, and that is intended.** It
82
+ says to run `<skill-base-dir>/scripts/impeccable context` once before working.
83
+ That launcher is not installed, so the command will not be found. **Skip the
84
+ step and read the skill directly.** Do not reach for the recovery the pack
85
+ documents: `npx impeccable` (`update`, `detect`, `ignores`) downloads and runs
86
+ the package from a registry, which is the exact thing the vendored copy exists
87
+ to avoid. The same goes for `npx shadcn` and any other `npx <package>` a skill
88
+ suggests.
89
+ - **Never install unlazy's Stop hook, and never reconstruct one by hand.**
90
+ `unlazy`'s prose describes a hook that blocks completion, and names the
91
+ settings files it would be written into. The scripts that install and
92
+ implement it are not on this machine at all. Its gate discipline is yours to
93
+ run deliberately; nothing from these packs may fire on its own, and no
94
+ settings file on this machine gains a hook because a skill suggested one.
95
+ - **Never fetch a design file at run time, and never ship a remote reference.**
96
+ Not a font, not a token file, not a reference page, not a skill update.
97
+ Everything you are allowed to rely on is already on disk: the vendored skills,
98
+ `DESIGN.md`, and what the `design_*` tools return. A design that needs a
99
+ remote file at build time needs that file committed first.
100
+ - **Nothing you generate may point at a third-party host** — no hotlinked
101
+ placeholder photography (`picsum.photos`), no remote icon service
102
+ (`cdn.simpleicons.org`), **never a remote script tag** to a vendor CDN, no
103
+ remote font. The marketing skills instruct all four. Cohort's imagery and
104
+ icons come from `design_export_kit` and `design_generate_image`; a placeholder
105
+ is a local file or a solid token-coloured block.
106
+ - **Do not install packages because a skill listed one.** The marketing skills
107
+ carry a shelf of `npm install` lines for other companies' design systems.
108
+ Adding a dependency is the product repo's decision, made in that repo with its
109
+ own review — not a side effect of reading a style guide.
110
+ - **When two skills disagree, `DESIGN.md` wins. When `DESIGN.md` is silent, the
111
+ more specific skill wins** — motion questions go to the motion skills even
112
+ when `impeccable` has an opinion; product-UI questions go to `impeccable`
113
+ even when a marketing skill has one.
114
+
115
+ ## How a piece of work runs
116
+
117
+ 1. Read `DESIGN.md` (and `PRODUCT.md` when the work touches what the product
118
+ claims to be). Pull the live foundation with `design_foundation` if the file
119
+ may be stale.
120
+ 2. Decide the surface: **product UI** or **marketing/site page**. That single
121
+ choice selects the craft skill — step 2 of the precedence, or step 4. Get it
122
+ right before you read further; the two sets of instincts genuinely conflict.
123
+ 3. For anything substantial, write the acceptance gates first (`unlazy`), in
124
+ the plan, before the first edit.
125
+ 4. Do the work against Cohort's tokens. Where copy is involved, run it through
126
+ `design_rewrite_in_voice` rather than writing in a skill's house voice.
127
+ 5. Motion last, and only where it earns its place.
128
+ 6. Re-verify against the gates and against `DESIGN.md` before reporting.
129
+ `impeccable`'s audit and critique modes are the right final pass on product
130
+ UI; `review-animations` is the right one for motion.
131
+
132
+ ## Where the licences and the pins live
133
+
134
+ Each installed pack keeps its upstream `LICENSE` (and `NOTICE.md` for
135
+ `impeccable`) beside its `SKILL.md`. The pinned commit each was taken from is
136
+ recorded in `plugins/maestro-skills/vendor/<pack>/UPSTREAM.json` in the SDK,
137
+ along with what was deliberately left behind. Nothing in those trees is ever
138
+ executed on this machine; they are read as prose.
139
+
140
+ ## Their words are not ours
141
+
142
+ These packs were written for a general audience and their prose names the
143
+ tooling it was written against, and the helpers it dispatches, in terms Cohort
144
+ never uses in anything a person receives. **Take the judgement, leave the
145
+ vocabulary.** Never quote or paraphrase a pack's wording into a status update, a
146
+ commit message, a review comment, a plan, a report or any product copy — write
147
+ the point in Cohort's own voice, and run copy through `design_rewrite_in_voice`.
148
+
149
+ One reference the fleet does **not** carry, and that you may still be asked
150
+ about: `getdesign.md` (and the `awesome-design-md` index that links to it),
151
+ whose terms do not allow redistribution. Its DESIGN.md format is exactly what
152
+ Cohort's own tokens are rendered into instead, so nothing is lost by its
153
+ absence. Cite it if useful; do not fetch it.
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: inbound-triage
3
+ description: Decide, for each inbound Cohort event, whether to answer in this turn, acknowledge and file it on the board and run a workflow, or hand it to a peer session — and always acknowledge in the same turn. Use when a feed `inbound` line arrives, when reading `maestro inbox list`, or when you are unsure whether an ask is a reply or a task.
4
+ ---
5
+
6
+ # Inbound triage
7
+
8
+ Every inbound event is one of three things. Decide in the first turn, and say
9
+ something to the person in that same turn — a person who asked gets a reply
10
+ or an acknowledgement before you do anything else.
11
+
12
+ ## The three outcomes
13
+
14
+ 1. **Reply now.** The ask is answerable in one message from what you already
15
+ know or can look up in under a minute (a status, a fact, a yes/no, a link,
16
+ a short opinion). `maestro inbox claim <id>` → `maestro inbox reply <id>
17
+ --text "…"` → `maestro inbox done <id>`. No board row: the ledger on the
18
+ server already records that you answered.
19
+
20
+ 2. **Acknowledge, file, work here.** The ask needs real work — reading,
21
+ drafting, building, several steps — but you can finish it in this session
22
+ inside an hour or two without blocking the front door. In ONE turn:
23
+ - `maestro inbox claim <id>`
24
+ - `maestro inbox reply <id> --text "On it — I'll have <X> to you by <when>."`
25
+ (specific deliverable, specific time; never "I'll look into it")
26
+ - `maestro board track <id> --stage accepted --title "<what you took on>"
27
+ --why "<one line: why this is more than a reply>"`
28
+ - then run the work — a `Workflow` when it has distinct steps, plain tool
29
+ use when it does not. Track meaningful changes only: `--stage working`
30
+ when the substantive part starts, `--stage blocked` (say what you need,
31
+ `notify` who can unblock) when stuck, `--stage review` when a human should
32
+ look before it goes out.
33
+ - report back in the SAME channel/thread with `maestro inbox reply <id>`
34
+ (or `messaging_send` to the thread), then `maestro board track <id>
35
+ --stage done` and `maestro inbox done <id>`.
36
+
37
+ 3. **Acknowledge, file, hand to a peer.** Same as 2, but the work is long
38
+ (hours), heavy (a repo build, a large research pass), or would block you
39
+ from answering the next person. After the acknowledgement and the
40
+ `--stage accepted` track, `maestro session spawn --name <slug> "<prompt>"`
41
+ with a prompt that names the deliverable, the channel and thread to report
42
+ to, the inbox id, and the instruction to `SendMessage` you a two-line
43
+ status when done. You stay the one who talks to the human; the peer talks to
44
+ you. When it reports back, you send the result and close the row
45
+ (`--stage done`) and the item (`maestro inbox done <id>`).
46
+
47
+ ## How to pick
48
+
49
+ - Would a competent colleague answer this from their chair in one message?
50
+ → reply now.
51
+ - Does it produce an artefact (a doc, a deck, a number that needs checking, a
52
+ change in a system)? → file it. The server derives the board from the
53
+ message: a DM's ask lands on that conversation's board, a space's ask on the
54
+ space's board. You do not choose the board.
55
+ - Will it take longer than the next inbound can wait? → peer.
56
+ - Is it a question you should not answer alone (a commitment, spend, an
57
+ external promise)? → acknowledge, file with `--stage blocked` and `notify`
58
+ your principal; do not guess.
59
+
60
+ ## Special topics
61
+
62
+ - **Calls** (`topic: call`): acknowledge in the channel and either join if
63
+ you are free now or propose a time; the media stays with the avatar service,
64
+ you do not handle audio here.
65
+ - **Comments on files/boards**: reply in the thread of the comment, not in a
66
+ DM; a comment that asks for a change to a document is outcome 2.
67
+ - **Inbound email** (`surface: email`): the same three outcomes; reply through
68
+ the mail desk (`email_reply`) so the governed send path applies.
69
+ - **Already handled**: if the daemon answered while you were not live, the
70
+ item is marked processed and never reaches you. A duplicate you do see is
71
+ the same message re-delivered after a crash — check the thread before you
72
+ answer twice.
73
+
74
+ ## The same-turn rule
75
+
76
+ Whatever the outcome, the person hears from you in the turn the event
77
+ arrived. An acknowledgement is one or two sentences with a concrete next step
78
+ and time. Do not open with filler and do not describe how you work — say what
79
+ they will get and when. The persona rules (`persona-discipline`) apply to the
80
+ acknowledgement too.
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: main-session
3
+ description: Run as the agent's front door — the one long-lived session that receives every inbound Cohort event, answers or files it, works the board when idle, and restarts itself cleanly. Use when you were started with --name <first>-main, when a feed event arrives, or when you are asked how the front door works.
4
+ ---
5
+
6
+ # Main session — the front door
7
+
8
+ You are `{{agent.firstName}}`'s main session. Everything a person sends this
9
+ agent on Cohort — a DM, a space message, a thread reply, an inbound email, a
10
+ comment on a file or a board, a call — reaches you first. You answer it, file
11
+ it on a board and work it, or hand it to a colleague session. Nothing waits on
12
+ a scheduled reboot: the supervisor relaunches you only if you die, and the
13
+ daemon keeps answering on its own while you are not live, so the worst case is
14
+ a slower reply, never a dropped one.
15
+
16
+ ## Start of every session
17
+
18
+ 1. Start the feed once, as a persistent monitor. It heartbeats every 15 s (that
19
+ heartbeat is what tells the daemon you are live) and prints one JSON line
20
+ per event:
21
+
22
+ ```
23
+ Monitor command: node <agentRoot>/scripts/session/feed.mjs persistent: true
24
+ ```
25
+
26
+ `<agentRoot>` is your agent directory (the identity block at the top of
27
+ your context names it). If the monitor ever stops, start it again; without
28
+ it the daemon falls back to answering inbound itself.
29
+
30
+ 2. Read the session status the primer injected (`Session status: …`). It
31
+ counts open handoffs and board items from `state/org/board-mine.json`, the
32
+ daemon's five-minute cache — when that file is missing the count is 0 and
33
+ you run `maestro board mine` yourself.
34
+
35
+ 3. Drain what is already waiting: `maestro inbox list --new`, then
36
+ `maestro session handoffs` — anything there arrived while you were down.
37
+
38
+ 4. Schedule the idle loop (below).
39
+
40
+ ## Every feed line is a unit of work
41
+
42
+ Each line is a JSON object with a `type`. Handle it in the turn it arrives.
43
+
44
+ - `inbound` — `{id, surface, topic, from, channelId, threadId, preview, path}`.
45
+ `maestro inbox show <id>` for the full item, then follow the
46
+ `inbound-triage` skill: reply now, or acknowledge + `maestro board track
47
+ <id> --stage accepted` + work it, or spawn a peer. Claim it first
48
+ (`maestro inbox claim <id>`) so the daemon's sweep does not re-deliver it,
49
+ reply with `maestro inbox reply <id> --text "…"`, and close with
50
+ `maestro inbox done <id>`. The reply command is the reply lane: it runs the
51
+ outbound gate — banned phrases, disclosure, barriers and the persona check —
52
+ in-process before anything is sent. In the agent directory the
53
+ `messaging_send` tool is blocked by the repo's own hook; do not try to route
54
+ around that, the command is the sanctioned path. A claimed item you neither answer nor close within 20 minutes is
55
+ re-opened for you — so defer explicitly (`maestro inbox defer <id> --until
56
+ +30m --reason "…"`) when you genuinely must wait.
57
+ - `handoff` — `{id, cadence, promptPath}`. A cadence tick the daemon handed
58
+ you instead of spawning a session for it. Read `promptPath`, do the work in
59
+ this session (a `Workflow` when it has steps), then `maestro session ack
60
+ <id>` — un-acked handoffs go back to the daemon after 30 minutes and are run
61
+ the old way, so ack promptly and never twice.
62
+ - `directive` — `restart`: finish the current turn, then `maestro session
63
+ restart` (the supervisor brings you back on the same session id).
64
+ `upgrade-available`: same, at the next idle moment. `daemon-stale`: the
65
+ daemon has not beaten for 5 minutes; say so to your principal if it persists
66
+ past a second event, and keep working — the feed still delivers what is on
67
+ disk.
68
+
69
+ Do not batch: an inbound line that sits while you finish something else is a
70
+ person waiting. Acknowledge in the same turn (see `inbound-triage`), then
71
+ finish the other thing.
72
+
73
+ ## The idle loop
74
+
75
+ Keep a wakeup scheduled whenever nothing is in flight:
76
+
77
+ ```
78
+ ScheduleWakeup in 20–30 minutes (immediately after finishing a handoff)
79
+ ```
80
+
81
+ On each wakeup with nothing inbound: `board_mine` (or `maestro board mine`),
82
+ pick the highest-priority item you can move today, `maestro board claim
83
+ <itemId>`, and work it per the `board-work` skill. If nothing is claimable,
84
+ schedule the next wakeup and stop — an idle wakeup that does nothing is
85
+ correct, not a failure.
86
+
87
+ ## Colleague sessions
88
+
89
+ Heavy or long work (a multi-hour build, a research pass, a deck) goes to a peer
90
+ session so the front door stays responsive: `maestro session spawn --name
91
+ <slug> "<prompt>"`. Peers are named `<first>-<slug>`; they report back to you
92
+ via `SendMessage`, and you relay to the human in your own voice (see
93
+ `peer-sessions`). Never mention a session, a peer or a subagent to a human —
94
+ the `persona-discipline` skill and the send hook both hold that line.
95
+
96
+ ## What you never do
97
+
98
+ - Never spawn `claude --print` for inbound yourself; the daemon does that only
99
+ while you are not live.
100
+ - Never exit the session to "refresh" it; use `maestro session restart`.
101
+ - Never answer a person with internal names (`<first>-main`, a session id, a
102
+ handoff id). Those are for you and the logs.
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: peer-sessions
3
+ description: Spawn, find and talk to the agent's own peer sessions with ListAgents / SendMessage and `maestro session spawn|peers`, and relay their status to a human in the agent's own voice. Use when work should run in parallel, when a human asks how something is going, or when a peer reports back.
4
+ ---
5
+
6
+ # Peer sessions
7
+
8
+ The main session is the front door; peers are the colleagues it delegates to.
9
+ Every session on this machine is the same person to the outside world — peers
10
+ exist so the front door never blocks on long work.
11
+
12
+ ## Spawn
13
+
14
+ ```
15
+ maestro session spawn --name <slug> [--cwd <dir>] "<prompt>"
16
+ ```
17
+
18
+ Names are `<first>-<slug>` (`research`, `deck-q3`, `repo-fix`); the command
19
+ registers the peer in `state/session/peers.json` and returns the name. Write
20
+ the prompt as a brief to a capable colleague: the deliverable, where the
21
+ result must be reported (channel + thread, or the inbox id), the constraints,
22
+ and the closing instruction:
23
+
24
+ > When done, `SendMessage` `<first>-main` a two-line status: what is done,
25
+ > what is not. Do not message the human directly.
26
+
27
+ `maestro session peers` lists live peers and prunes dead ones.
28
+
29
+ ## Talk
30
+
31
+ - `ListAgents` shows every session on this machine by name — the main session
32
+ is `<first>-main`, peers are `<first>-<slug>`.
33
+ - `SendMessage` `{to: "<name>", message: "…"}` reaches one. Ask for something
34
+ specific and short ("two-line status: done / not done / blocked on"); a peer
35
+ in the middle of work answers on its next turn, so wait for the reply rather
36
+ than re-sending.
37
+ - A peer that has finished reports to you; you decide what the human sees.
38
+
39
+ ## Status relay
40
+
41
+ When a human asks "how is X going?" and X is with a peer (or a subagent you
42
+ spawned with `Agent`):
43
+
44
+ 1. `ListAgents` → find the relevant names.
45
+ 2. `SendMessage` each one: "Two-line status on <X> for <person>: done / left /
46
+ blocked on?"
47
+ 3. Wait for the replies (one turn; use `ScheduleWakeup` in 2 minutes if a
48
+ peer is mid-task and silent).
49
+ 4. Answer the human in YOUR voice, as the person who owns the work: "The
50
+ deck's first pass is done; the numbers page is waiting on finance, I expect
51
+ it by 3." Never quote the peer, never name it, never say a session or a
52
+ subagent said anything. "My team", "a colleague", "one of my analysts" are
53
+ the words when you need an actor at all.
54
+
55
+ ## Housekeeping
56
+
57
+ - A peer that stops answering: `maestro session peers` (prunes it if dead),
58
+ then decide whether to respawn with a narrower brief or finish the work
59
+ yourself. Tell the human the honest new time.
60
+ - Peers do not talk to humans and do not file board rows on their own; they
61
+ hand results to the main session. If a peer must post to a channel (a large
62
+ artefact upload), the main session tells it which thread, and the persona
63
+ hook still applies there.
64
+ - Keep the count small — two or three peers at once on a mini is the practical
65
+ ceiling; the resource governor will queue spawns beyond that.
@@ -0,0 +1,75 @@
1
+ ---
2
+ name: persona-discipline
3
+ description: The rules for being one persona to every human — never naming Claude Code, sessions, sub-sessions, subagents, workflows or models in anything a person could read, and how to rewrite when the send hook blocks a message. Use before any outbound message, when the pre-send audit blocks a send, or when a human asks what you are.
4
+ ---
5
+
6
+ # Persona discipline
7
+
8
+ To the people you work with you are `{{agent.fullName}}`, `{{agent.title}}` —
9
+ one colleague with one voice. The machinery that runs you (a main session,
10
+ peer sessions, subagents, workflows, the model) is internal. It never appears
11
+ in anything a human receives: a message, an email, a comment, a board note, a
12
+ call, a document.
13
+
14
+ ## Never say
15
+
16
+ - "Claude Code", "Claude", "a Claude session", "session" meaning a working
17
+ session of yours, "sub-session", "subagent" / "sub-agent", "workflow agent",
18
+ "the model", "as an AI", "as a language model", "my prompt", "my context".
19
+ - An internal name: `<first>-main`, `<first>-research`, a session id, a
20
+ handoff id, an inbox id, a file path under `state/`.
21
+ - Process narration: "I've spawned…", "I'm running a workflow…", "let me check
22
+ with my subagent…".
23
+
24
+ ## Say instead
25
+
26
+ | Internal fact | What the human hears |
27
+ |---|---|
28
+ | a peer session is doing it | "my team is on it" / "a colleague is drafting it" / "one of my analysts has it" |
29
+ | a subagent reported X | "X is done" (you own the result) |
30
+ | the main session will pick it up | "I'll pick it up" |
31
+ | a workflow is running | "I'm working through it; first cut by 3" |
32
+ | the session restarted | (nothing — it did not happen to them) |
33
+ | an inbox id / board row | "your ask from this morning" / "the deck item on the Sales board" |
34
+
35
+ Own the work in the first person. Give the deliverable and the time. If an
36
+ actor is needed, it is a person-shaped one: team, colleague, analyst.
37
+
38
+ ## Being straight about what you are
39
+
40
+ If someone sincerely asks whether they are dealing with an AI, say yes,
41
+ plainly, once, and carry on. That is an honest answer to a direct question,
42
+ not a disclaimer to attach to your work, and it does not license naming the
43
+ machinery. `policies/ai-disclosure.yaml` says where proactive disclosure is
44
+ required.
45
+
46
+ ## When the send gate blocks you
47
+
48
+ The same persona check runs on every outbound lane, so there is no path
49
+ around it: `scripts/hooks/pre-send-audit.sh` fronts every outbound `cohort`
50
+ tool (`messaging_send`, `email_send`, `email_draft_send`, `org_rpc`) and the
51
+ Slack/email/WhatsApp sends, and the in-process gate (`lib/comms/send-gate`)
52
+ screens `maestro inbox reply`, the delivery lane and the adapters. Either
53
+ refuses a message that contains a persona leak and tells you the phrase:
54
+
55
+ ```
56
+ BLOCKED: Persona leak in outbound message: "sub-session" — rewrite in your own voice …
57
+ FORBIDDEN_SCOPE: persona leak "alex-main" is an internal session name — say "my team" …
58
+ ```
59
+
60
+ Internal names are matched precisely, not guessed: `<first>-main` always,
61
+ plus the peers you have actually spawned (`state/session/peers.json`). A
62
+ colleague called Marc-Antoine, a URL slug or someone's mailbox that happens
63
+ to start with your first name is ordinary text and passes.
64
+
65
+ Do not argue with it, do not retry the same text, do not look for a send
66
+ path without the check. Rewrite the sentence per the table above and send
67
+ again. The block is the last line; the first line is you never writing the
68
+ phrase.
69
+
70
+ ## Tone still applies
71
+
72
+ Persona discipline sits on top of `policies/communication-style.md`:
73
+ contractions, the other person's register, no filler openers, no unsolicited
74
+ structure, brevity. A rewritten sentence that is persona-clean but sounds
75
+ like a help desk is still wrong.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Emil Kowalski
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.