@cohortapp/agent-sdk 2.3.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 (731) hide show
  1. package/.claude/commands/init-agent.md +104 -0
  2. package/.claude/commands/init-maestro.md +1187 -0
  3. package/.claude/settings.json +161 -0
  4. package/.env.example +216 -0
  5. package/README.md +632 -0
  6. package/agents/browser-operator/agent.md +52 -0
  7. package/agents/calendar-ops/agent.md +50 -0
  8. package/agents/communications/agent.md +96 -0
  9. package/agents/decision-log/agent.md +65 -0
  10. package/agents/desktop-operator/agent.md +59 -0
  11. package/agents/gmail-operator/agent.md +62 -0
  12. package/agents/inbound-dispatcher/agent.md +66 -0
  13. package/agents/inbox-processor/agent.md +39 -0
  14. package/agents/pmo-execution/agent.md +60 -0
  15. package/agents/session-spawner/agent.md +64 -0
  16. package/agents/slack-operator/agent.md +60 -0
  17. package/agents/whatsapp-operator/agent.md +60 -0
  18. package/agents/workflow-automation/agent.md +61 -0
  19. package/archetypes/altitudes/c-suite.yaml +58 -0
  20. package/archetypes/altitudes/founder.yaml +68 -0
  21. package/archetypes/altitudes/senior-manager.yaml +63 -0
  22. package/archetypes/altitudes/svp.yaml +60 -0
  23. package/archetypes/altitudes/vp.yaml +50 -0
  24. package/archetypes/archetype.schema.json +77 -0
  25. package/archetypes/base.yaml +47 -0
  26. package/archetypes/capabilities/commercial-leader.yaml +159 -0
  27. package/archetypes/capabilities/compliance-officer.yaml +159 -0
  28. package/archetypes/capabilities/executive-operator.yaml +169 -0
  29. package/archetypes/capabilities/finance-leader.yaml +162 -0
  30. package/archetypes/capabilities/operations-leader.yaml +154 -0
  31. package/archetypes/capabilities/product-leader.yaml +148 -0
  32. package/archetypes/capabilities/technical-leader.yaml +146 -0
  33. package/archetypes/functions/commercial-leader.yaml +62 -0
  34. package/archetypes/functions/compliance-officer.yaml +64 -0
  35. package/archetypes/functions/executive-operator.yaml +70 -0
  36. package/archetypes/functions/finance-leader.yaml +70 -0
  37. package/archetypes/functions/operations-leader.yaml +62 -0
  38. package/archetypes/functions/product-leader.yaml +61 -0
  39. package/archetypes/functions/technical-leader.yaml +57 -0
  40. package/bin/cohort-mcp.mjs +81 -0
  41. package/bin/maestro.mjs +3516 -0
  42. package/bin/maestro.test.mjs +1015 -0
  43. package/desktop-control/README.md +56 -0
  44. package/desktop-control/app-profiles/gmail.yaml +120 -0
  45. package/desktop-control/app-profiles/slack.yaml +315 -0
  46. package/desktop-control/app-profiles/whatsapp.yaml +107 -0
  47. package/docs/architecture/agent-topology.md +2239 -0
  48. package/docs/architecture/archetype-agent-factory.md +110 -0
  49. package/docs/architecture/collective-memory-and-org-mesh.md +115 -0
  50. package/docs/architecture/continuous-monitoring.md +221 -0
  51. package/docs/architecture/mcp-capability-map.md +585 -0
  52. package/docs/architecture/system-architecture.md +1272 -0
  53. package/docs/company-context/README.md +40 -0
  54. package/docs/guides/agent-persona-setup.md +600 -0
  55. package/docs/guides/agents-observe-setup.md +64 -0
  56. package/docs/guides/billing-console-keys.md +88 -0
  57. package/docs/guides/ccxray-diagnostics.md +65 -0
  58. package/docs/guides/channel-bus.md +127 -0
  59. package/docs/guides/claude-mem-setup.md +79 -0
  60. package/docs/guides/claude-pace-setup.md +56 -0
  61. package/docs/guides/claudraband-sessions.md +98 -0
  62. package/docs/guides/clawteam-swarm.md +116 -0
  63. package/docs/guides/code-review-graph-setup.md +86 -0
  64. package/docs/guides/email-setup.md +431 -0
  65. package/docs/guides/mac-mini.md +119 -0
  66. package/docs/guides/media-generation-setup.md +349 -0
  67. package/docs/guides/model-routing.md +162 -0
  68. package/docs/guides/observability-otel.md +265 -0
  69. package/docs/guides/org-onboarding.md +132 -0
  70. package/docs/guides/outbound-governance-setup.md +437 -0
  71. package/docs/guides/pdf-generation-setup.md +315 -0
  72. package/docs/guides/poller-daemon-setup.md +563 -0
  73. package/docs/guides/rag-context-setup.md +459 -0
  74. package/docs/guides/self-optimization-pattern.md +82 -0
  75. package/docs/guides/setup-wizard.md +178 -0
  76. package/docs/guides/slack-setup.md +350 -0
  77. package/docs/guides/telegram-setup.md +227 -0
  78. package/docs/guides/twilio-subaccounts-setup.md +223 -0
  79. package/docs/guides/verification.md +128 -0
  80. package/docs/guides/voice-mode.md +188 -0
  81. package/docs/guides/voice-sms-setup.md +698 -0
  82. package/docs/guides/webhook-relay-setup.md +349 -0
  83. package/docs/guides/whatsapp-setup.md +288 -0
  84. package/docs/prompts/board-pack-cover-template.md +36 -0
  85. package/docs/prompts/decision-recommendation-template.md +88 -0
  86. package/docs/prompts/followup-message-template.md +141 -0
  87. package/docs/prompts/investor-letter-template.md +52 -0
  88. package/docs/prompts/morning-brief-template.md +82 -0
  89. package/docs/prompts/presentation-template.md +58 -0
  90. package/docs/prompts/weekly-strategic-memo-template.md +104 -0
  91. package/docs/research/hallucinated-tool-output-investigation.md +151 -0
  92. package/docs/runbooks/backup-restore.md +205 -0
  93. package/docs/runbooks/cohort-cutover.md +129 -0
  94. package/docs/runbooks/fleet-operations.md +200 -0
  95. package/docs/runbooks/incident-response.md +226 -0
  96. package/docs/runbooks/mac-mini-bootstrap.md +431 -0
  97. package/docs/runbooks/perpetual-operations.md +509 -0
  98. package/docs/runbooks/recovery-and-failover.md +260 -0
  99. package/framework-features.json +267 -0
  100. package/ingest/README.md +87 -0
  101. package/lib/action-executor.js +689 -0
  102. package/lib/action-executor.test.mjs +871 -0
  103. package/lib/agent-root.mjs +37 -0
  104. package/lib/archetype.mjs +236 -0
  105. package/lib/archetype.test.mjs +132 -0
  106. package/lib/autonomy.mjs +114 -0
  107. package/lib/autonomy.test.mjs +66 -0
  108. package/lib/backlog.mjs +358 -0
  109. package/lib/backlog.test.mjs +266 -0
  110. package/lib/budget-guard.mjs +279 -0
  111. package/lib/budget-guard.test.mjs +291 -0
  112. package/lib/cadence-bus-schedule.test.mjs +194 -0
  113. package/lib/cadence-bus.mjs +1120 -0
  114. package/lib/cadence-bus.test.mjs +720 -0
  115. package/lib/cadences.mjs +205 -0
  116. package/lib/cadences.test.mjs +125 -0
  117. package/lib/capability.mjs +154 -0
  118. package/lib/capability.test.mjs +78 -0
  119. package/lib/channels/base-adapter.mjs +719 -0
  120. package/lib/channels/base-adapter.test.mjs +590 -0
  121. package/lib/channels/channel.mjs +128 -0
  122. package/lib/channels/channels.test.mjs +371 -0
  123. package/lib/channels/contract.mjs +215 -0
  124. package/lib/channels/contract.test.mjs +137 -0
  125. package/lib/channels/conversation-resolver.mjs +95 -0
  126. package/lib/channels/gmail/adapter.mjs +87 -0
  127. package/lib/channels/inbox-item.mjs +255 -0
  128. package/lib/channels/inbox-item.test.mjs +335 -0
  129. package/lib/channels/index.mjs +94 -0
  130. package/lib/channels/orgmail/adapter.mjs +353 -0
  131. package/lib/channels/orgmail/adapter.test.mjs +311 -0
  132. package/lib/channels/pairing.mjs +363 -0
  133. package/lib/channels/pairing.test.mjs +270 -0
  134. package/lib/channels/registry.mjs +164 -0
  135. package/lib/channels/slack/adapter.mjs +317 -0
  136. package/lib/channels/slack-adapter.test.mjs +212 -0
  137. package/lib/channels/sms/adapter.mjs +43 -0
  138. package/lib/channels/telegram/adapter.mjs +432 -0
  139. package/lib/channels/telegram-adapter.test.mjs +306 -0
  140. package/lib/channels/voice/adapter.mjs +301 -0
  141. package/lib/channels/voice/adapter.test.mjs +278 -0
  142. package/lib/channels/whatsapp/adapter-baileys.mjs +587 -0
  143. package/lib/channels/whatsapp/adapter-baileys.test.mjs +359 -0
  144. package/lib/channels/whatsapp/adapter-twilio.mjs +65 -0
  145. package/lib/channels/whatsapp/baileys-typing.test.mjs +154 -0
  146. package/lib/charter.mjs +256 -0
  147. package/lib/charter.test.mjs +89 -0
  148. package/lib/claude-bin.mjs +134 -0
  149. package/lib/claude-bin.test.mjs +75 -0
  150. package/lib/collective/capture.mjs +185 -0
  151. package/lib/collective/capture.test.mjs +121 -0
  152. package/lib/collective/cards.mjs +201 -0
  153. package/lib/collective/cards.test.mjs +114 -0
  154. package/lib/collective/config.mjs +186 -0
  155. package/lib/collective/config.test.mjs +123 -0
  156. package/lib/collective/global-config.mjs +113 -0
  157. package/lib/collective/global-config.test.mjs +75 -0
  158. package/lib/collective/presence.mjs +201 -0
  159. package/lib/collective/presence.test.mjs +95 -0
  160. package/lib/collective/recall.mjs +215 -0
  161. package/lib/collective/recall.test.mjs +116 -0
  162. package/lib/comms/send-gate.mjs +554 -0
  163. package/lib/comms/send-gate.test.mjs +577 -0
  164. package/lib/comms.mjs +67 -0
  165. package/lib/comms.test.mjs +41 -0
  166. package/lib/diagnostics/alerts.mjs +424 -0
  167. package/lib/diagnostics/alerts.test.mjs +318 -0
  168. package/lib/diagnostics/backup-freshness.mjs +188 -0
  169. package/lib/diagnostics/backup-freshness.test.mjs +185 -0
  170. package/lib/diagnostics/counters.mjs +269 -0
  171. package/lib/diagnostics/counters.test.mjs +206 -0
  172. package/lib/diagnostics/events.mjs +188 -0
  173. package/lib/diagnostics/events.test.mjs +290 -0
  174. package/lib/diagnostics/otel.mjs +237 -0
  175. package/lib/diagnostics/otel.test.mjs +196 -0
  176. package/lib/diagnostics/trace.mjs +216 -0
  177. package/lib/diagnostics/trace.test.mjs +251 -0
  178. package/lib/env-compat.mjs +74 -0
  179. package/lib/env-compat.test.mjs +104 -0
  180. package/lib/feature-init.mjs +331 -0
  181. package/lib/fs-atomic.mjs +112 -0
  182. package/lib/fs-atomic.test.mjs +72 -0
  183. package/lib/fs-ownership.mjs +111 -0
  184. package/lib/fs-ownership.test.mjs +158 -0
  185. package/lib/hooks/bus.mjs +347 -0
  186. package/lib/hooks/bus.test.mjs +387 -0
  187. package/lib/index.js +16 -0
  188. package/lib/learning/config.mjs +106 -0
  189. package/lib/learning/config.test.mjs +75 -0
  190. package/lib/learning/counters.mjs +156 -0
  191. package/lib/learning/counters.test.mjs +69 -0
  192. package/lib/learning/curator-consolidate.test.mjs +238 -0
  193. package/lib/learning/curator.mjs +453 -0
  194. package/lib/learning/curator.test.mjs +106 -0
  195. package/lib/learning/log.mjs +40 -0
  196. package/lib/learning/reflect.mjs +534 -0
  197. package/lib/learning/reflect.test.mjs +0 -0
  198. package/lib/learning/session-index.mjs +352 -0
  199. package/lib/learning/session-index.test.mjs +125 -0
  200. package/lib/learning/skill-writer.mjs +474 -0
  201. package/lib/learning/skill-writer.test.mjs +210 -0
  202. package/lib/mcp/server.mjs +328 -0
  203. package/lib/mcp/server.test.mjs +400 -0
  204. package/lib/model-router/auth-profiles.mjs +758 -0
  205. package/lib/model-router/auth-profiles.test.mjs +580 -0
  206. package/lib/model-router/catalog/anthropic.yaml +153 -0
  207. package/lib/model-router/catalog/deepseek.yaml +86 -0
  208. package/lib/model-router/catalog/moonshot.yaml +81 -0
  209. package/lib/model-router/catalog/qwen.yaml +114 -0
  210. package/lib/model-router/catalog.mjs +925 -0
  211. package/lib/model-router/catalog.test.mjs +385 -0
  212. package/lib/model-router/economics.mjs +564 -0
  213. package/lib/model-router/economics.test.mjs +344 -0
  214. package/lib/model-router/failover.mjs +298 -0
  215. package/lib/model-router/failover.test.mjs +439 -0
  216. package/lib/model-router/health.mjs +453 -0
  217. package/lib/model-router/health.test.mjs +338 -0
  218. package/lib/model-router/integration-coverage.test.mjs +829 -0
  219. package/lib/model-router/integration.test.mjs +564 -0
  220. package/lib/model-router/ledger.mjs +402 -0
  221. package/lib/model-router/ledger.test.mjs +382 -0
  222. package/lib/model-router/llm-task.mjs +515 -0
  223. package/lib/model-router/llm-task.test.mjs +392 -0
  224. package/lib/model-router/org-credentials.mjs +260 -0
  225. package/lib/model-router/org-credentials.test.mjs +265 -0
  226. package/lib/model-router/pricing-refresh.mjs +463 -0
  227. package/lib/model-router/pricing-refresh.test.mjs +286 -0
  228. package/lib/model-router/reconcile.mjs +429 -0
  229. package/lib/model-router/reconcile.test.mjs +316 -0
  230. package/lib/model-router/repair.mjs +471 -0
  231. package/lib/model-router/repair.test.mjs +180 -0
  232. package/lib/model-router/resolve.mjs +1206 -0
  233. package/lib/model-router/spawn.mjs +497 -0
  234. package/lib/model-router/spawn.test.mjs +425 -0
  235. package/lib/model-router/taxonomy.mjs +893 -0
  236. package/lib/model-router/taxonomy.test.mjs +410 -0
  237. package/lib/model-router.mjs +677 -0
  238. package/lib/model-router.test.mjs +907 -0
  239. package/lib/org/activity.mjs +211 -0
  240. package/lib/org/activity.test.mjs +134 -0
  241. package/lib/org/approvals.mjs +448 -0
  242. package/lib/org/approvals.test.mjs +216 -0
  243. package/lib/org/awareness.mjs +222 -0
  244. package/lib/org/awareness.test.mjs +159 -0
  245. package/lib/org/board.mjs +229 -0
  246. package/lib/org/board.test.mjs +177 -0
  247. package/lib/org/bootstrap-context.mjs +169 -0
  248. package/lib/org/bootstrap-context.test.mjs +153 -0
  249. package/lib/org/client.mjs +1628 -0
  250. package/lib/org/client.test.mjs +1107 -0
  251. package/lib/org/cohort-client.mjs +67 -0
  252. package/lib/org/cohort-client.test.mjs +126 -0
  253. package/lib/org/cost-sync.mjs +227 -0
  254. package/lib/org/cost-sync.test.mjs +153 -0
  255. package/lib/org/doctor.mjs +212 -0
  256. package/lib/org/doctor.test.mjs +212 -0
  257. package/lib/org/handoff.mjs +293 -0
  258. package/lib/org/handoff.test.mjs +269 -0
  259. package/lib/org/integration-tools.mjs +182 -0
  260. package/lib/org/integration-tools.test.mjs +160 -0
  261. package/lib/org/keys.mjs +131 -0
  262. package/lib/org/keys.test.mjs +92 -0
  263. package/lib/org/knowledge.mjs +463 -0
  264. package/lib/org/knowledge.test.mjs +319 -0
  265. package/lib/org/leases.mjs +335 -0
  266. package/lib/org/leases.test.mjs +235 -0
  267. package/lib/org/mesh-integration.test.mjs +127 -0
  268. package/lib/org/mesh.mjs +459 -0
  269. package/lib/org/mesh.test.mjs +345 -0
  270. package/lib/org/messaging.mjs +503 -0
  271. package/lib/org/messaging.test.mjs +238 -0
  272. package/lib/org/policy.mjs +345 -0
  273. package/lib/org/policy.test.mjs +237 -0
  274. package/lib/org/protocol.checksum +1 -0
  275. package/lib/org/protocol.checksum.test.mjs +90 -0
  276. package/lib/org/protocol.mjs +967 -0
  277. package/lib/org/protocol.test.mjs +264 -0
  278. package/lib/org/registry.mjs +194 -0
  279. package/lib/org/registry.test.mjs +100 -0
  280. package/lib/org/tool-surface-integration.test.mjs +120 -0
  281. package/lib/org/tool-surface.mjs +2535 -0
  282. package/lib/org/tool-surface.test.mjs +589 -0
  283. package/lib/org/ui-parity.mjs +3236 -0
  284. package/lib/org/ui-parity.test.mjs +348 -0
  285. package/lib/org/verify.mjs +176 -0
  286. package/lib/org/verify.test.mjs +194 -0
  287. package/lib/rag/embed.mjs +188 -0
  288. package/lib/rag/indexer.mjs +425 -0
  289. package/lib/rag/rag.test.mjs +505 -0
  290. package/lib/rag/search.mjs +475 -0
  291. package/lib/rate-guard.mjs +246 -0
  292. package/lib/rate-guard.test.mjs +201 -0
  293. package/lib/render.mjs +112 -0
  294. package/lib/render.test.mjs +68 -0
  295. package/lib/resource-governor.mjs +297 -0
  296. package/lib/resource-governor.test.mjs +262 -0
  297. package/lib/scheduling/dynamic-jobs.mjs +675 -0
  298. package/lib/scheduling/dynamic-jobs.test.mjs +344 -0
  299. package/lib/scheduling/jitter.mjs +0 -0
  300. package/lib/scheduling/jitter.test.mjs +140 -0
  301. package/lib/secrets/broker.mjs +315 -0
  302. package/lib/secrets/broker.test.mjs +280 -0
  303. package/lib/secrets/providers.mjs +461 -0
  304. package/lib/secrets/providers.test.mjs +274 -0
  305. package/lib/security/audit-engine.mjs +684 -0
  306. package/lib/security/audit-engine.test.mjs +389 -0
  307. package/lib/security/coerce-args.mjs +552 -0
  308. package/lib/security/coerce-args.test.mjs +281 -0
  309. package/lib/security/dangerous-tools.mjs +97 -0
  310. package/lib/security/dangerous-tools.test.mjs +68 -0
  311. package/lib/security/external-content.mjs +145 -0
  312. package/lib/security/external-content.test.mjs +67 -0
  313. package/lib/security/redact.mjs +592 -0
  314. package/lib/security/redact.test.mjs +441 -0
  315. package/lib/security/secret-equal.mjs +73 -0
  316. package/lib/security/secret-equal.test.mjs +55 -0
  317. package/lib/session-permissions.mjs +101 -0
  318. package/lib/session-permissions.test.mjs +100 -0
  319. package/lib/setup/claude-probe.mjs +74 -0
  320. package/lib/setup/completeness.mjs +175 -0
  321. package/lib/setup/completeness.test.mjs +110 -0
  322. package/lib/setup/context-pack.mjs +173 -0
  323. package/lib/setup/context-pack.test.mjs +89 -0
  324. package/lib/setup/enrich.mjs +277 -0
  325. package/lib/setup/enrich.test.mjs +115 -0
  326. package/lib/setup/enroll-from-cohort.mjs +441 -0
  327. package/lib/setup/enroll-from-cohort.test.mjs +233 -0
  328. package/lib/setup/integration.test.mjs +162 -0
  329. package/lib/setup/io.mjs +360 -0
  330. package/lib/setup/io.test.mjs +77 -0
  331. package/lib/setup/run-generator.mjs +81 -0
  332. package/lib/setup/runner.mjs +244 -0
  333. package/lib/setup/runner.test.mjs +132 -0
  334. package/lib/setup/sections/comms.mjs +173 -0
  335. package/lib/setup/sections/company.mjs +120 -0
  336. package/lib/setup/sections/enrich.mjs +138 -0
  337. package/lib/setup/sections/identity.mjs +182 -0
  338. package/lib/setup/sections/identity.test.mjs +140 -0
  339. package/lib/setup/sections/learning.mjs +153 -0
  340. package/lib/setup/sections/learning.test.mjs +81 -0
  341. package/lib/setup/sections/messaging.mjs +219 -0
  342. package/lib/setup/sections/messaging.test.mjs +127 -0
  343. package/lib/setup/sections/model.mjs +102 -0
  344. package/lib/setup/sections/operating-model.mjs +78 -0
  345. package/lib/setup/sections/org.mjs +475 -0
  346. package/lib/setup/sections/org.test.mjs +313 -0
  347. package/lib/setup/sections/orgmail.mjs +173 -0
  348. package/lib/setup/sections/orgmail.test.mjs +118 -0
  349. package/lib/setup/sections/recovery.mjs +159 -0
  350. package/lib/setup/sections/recovery.test.mjs +98 -0
  351. package/lib/setup/sections/tools.mjs +132 -0
  352. package/lib/setup/sections/verify.mjs +97 -0
  353. package/lib/setup/sot.mjs +205 -0
  354. package/lib/setup/sot.test.mjs +81 -0
  355. package/lib/setup/state.mjs +151 -0
  356. package/lib/setup/state.test.mjs +92 -0
  357. package/lib/singleton.js +229 -0
  358. package/lib/singleton.test.mjs +135 -0
  359. package/lib/telemetry/alerts.mjs +216 -0
  360. package/lib/telemetry/alerts.test.mjs +109 -0
  361. package/lib/telemetry/collect.mjs +512 -0
  362. package/lib/telemetry/collect.test.mjs +202 -0
  363. package/lib/tool-definitions-integration.test.mjs +83 -0
  364. package/lib/tool-definitions.js +738 -0
  365. package/lib/tool-definitions.test.mjs +437 -0
  366. package/lib/util/fetch-timeout.mjs +136 -0
  367. package/lib/util/fetch-timeout.test.mjs +202 -0
  368. package/lib/util/reconnect.mjs +343 -0
  369. package/lib/util/reconnect.test.mjs +369 -0
  370. package/lib/util/unhandled.mjs +205 -0
  371. package/lib/util/unhandled.test.mjs +216 -0
  372. package/lib/voice/context-loader.mjs +466 -0
  373. package/lib/voice/index.mjs +100 -0
  374. package/lib/voice/openai-realtime.mjs +510 -0
  375. package/lib/voice/outbound.mjs +542 -0
  376. package/lib/voice/outbound.test.mjs +69 -0
  377. package/lib/voice/post-call-brief.mjs +428 -0
  378. package/lib/voice/provider.mjs +52 -0
  379. package/lib/voice/session-rotation.mjs +257 -0
  380. package/lib/voice/stt.mjs +161 -0
  381. package/lib/voice/stt.test.mjs +226 -0
  382. package/lib/voice/tool-bridge.mjs +370 -0
  383. package/lib/voice/tts.mjs +104 -0
  384. package/lib/voice/twilio-sip-bridge.mjs +288 -0
  385. package/lib/voice/voice.test.mjs +990 -0
  386. package/mcp/README.md +80 -0
  387. package/package.json +151 -0
  388. package/plugins/maestro-skills/plugin.json +139 -0
  389. package/plugins/maestro-skills/skills/agents-observe.md +110 -0
  390. package/plugins/maestro-skills/skills/board-deck.md +68 -0
  391. package/plugins/maestro-skills/skills/books-close.md +77 -0
  392. package/plugins/maestro-skills/skills/brand-steward.md +121 -0
  393. package/plugins/maestro-skills/skills/calendar-plan.md +57 -0
  394. package/plugins/maestro-skills/skills/call-working-sessions.md +124 -0
  395. package/plugins/maestro-skills/skills/ccxray-diagnostics.md +91 -0
  396. package/plugins/maestro-skills/skills/claude-pace.md +61 -0
  397. package/plugins/maestro-skills/skills/code-review-graph.md +99 -0
  398. package/plugins/maestro-skills/skills/crm-pipeline.md +65 -0
  399. package/plugins/maestro-skills/skills/decision-brief.md +89 -0
  400. package/plugins/maestro-skills/skills/directory-hygiene.md +125 -0
  401. package/plugins/maestro-skills/skills/draft-comms.md +84 -0
  402. package/plugins/maestro-skills/skills/evening-wrap.md +53 -0
  403. package/plugins/maestro-skills/skills/files-find.md +65 -0
  404. package/plugins/maestro-skills/skills/generative-ui.md +228 -0
  405. package/plugins/maestro-skills/skills/hiring-triage.md +74 -0
  406. package/plugins/maestro-skills/skills/inbox-triage.md +61 -0
  407. package/plugins/maestro-skills/skills/mail-triage.md +86 -0
  408. package/plugins/maestro-skills/skills/morning-brief.md +54 -0
  409. package/plugins/maestro-skills/skills/native-artifacts.md +157 -0
  410. package/plugins/maestro-skills/skills/org-board.md +133 -0
  411. package/plugins/maestro-skills/skills/org-credential.md +68 -0
  412. package/plugins/maestro-skills/skills/org-recall.md +81 -0
  413. package/plugins/maestro-skills/skills/pipeline-review.md +76 -0
  414. package/plugins/maestro-skills/skills/regulatory-status.md +81 -0
  415. package/plugins/maestro-skills/skills/router-why.md +78 -0
  416. package/plugins/maestro-skills/skills/schedule-meeting.md +91 -0
  417. package/plugins/maestro-skills/skills/session-search.md +71 -0
  418. package/plugins/maestro-skills/skills/set-reminder.md +93 -0
  419. package/plugins/maestro-skills/skills/slack-followup.md +64 -0
  420. package/plugins/maestro-skills/skills/team-activity.md +86 -0
  421. package/plugins/maestro-skills/skills/weekly-memo.md +70 -0
  422. package/policies/action-classification.yaml +114 -0
  423. package/policies/ai-disclosure.yaml +294 -0
  424. package/policies/communication-style.md +139 -0
  425. package/policies/information-barriers.yaml +118 -0
  426. package/policies/prompt-injection-defence.yaml +138 -0
  427. package/public/assets/icon-dark.png +0 -0
  428. package/public/assets/icon-dark.svg +9 -0
  429. package/public/assets/icon-light.svg +9 -0
  430. package/public/assets/logo-dark.svg +15 -0
  431. package/public/assets/logo-light.svg +15 -0
  432. package/scaffold/.mcp.json +7 -0
  433. package/scaffold/CLAUDE.md +368 -0
  434. package/scaffold/config/agent.json +55 -0
  435. package/scaffold/config/agent.ts +76 -0
  436. package/scaffold/config/agent.ts.example +89 -0
  437. package/scaffold/config/alerts.yaml +23 -0
  438. package/scaffold/config/allowlist.yaml.example +25 -0
  439. package/scaffold/config/caller-id-map.yaml +46 -0
  440. package/scaffold/config/collective.yaml +49 -0
  441. package/scaffold/config/company.json +20 -0
  442. package/scaffold/config/known-agents.json +6 -0
  443. package/scaffold/config/learning.yaml +55 -0
  444. package/scaffold/config/model-routing.yaml.example +104 -0
  445. package/scaffold/config/org.yaml +25 -0
  446. package/scaffold/config/orgmail.yaml.example +19 -0
  447. package/scaffold/config/recovery.yaml +72 -0
  448. package/scaffold/config/secrets.yaml +27 -0
  449. package/scaffold/config/slack.yaml.example +35 -0
  450. package/scaffold/config/telegram.yaml.example +38 -0
  451. package/scaffold/config/voice.yaml.example +89 -0
  452. package/scaffold/config/whatsapp.yaml.example +39 -0
  453. package/schedules/README.md +49 -0
  454. package/schedules/triggers/backlog-executor.md +102 -0
  455. package/schedules/triggers/brand-steward.md +72 -0
  456. package/schedules/triggers/daily-evening-wrap.md +159 -0
  457. package/schedules/triggers/daily-midday-sweep.md +58 -0
  458. package/schedules/triggers/daily-morning-brief.md +55 -0
  459. package/schedules/triggers/directory-hygiene.md +81 -0
  460. package/schedules/triggers/dynamic-jobs.md +40 -0
  461. package/schedules/triggers/inbox-processor.md +115 -0
  462. package/schedules/triggers/meeting-action-capture.md +60 -0
  463. package/schedules/triggers/meeting-prep.md +69 -0
  464. package/schedules/triggers/messaging-inbound.md +50 -0
  465. package/schedules/triggers/org-pulse.md +24 -0
  466. package/schedules/triggers/quarterly-self-assessment.md +54 -0
  467. package/schedules/triggers/weekly-engineering-health.md +37 -0
  468. package/schedules/triggers/weekly-execution.md +65 -0
  469. package/schedules/triggers/weekly-hiring.md +53 -0
  470. package/schedules/triggers/weekly-priorities.md +38 -0
  471. package/schedules/triggers/weekly-strategic-memo.md +124 -0
  472. package/scripts/archive-email.sh +55 -0
  473. package/scripts/cadence/cadence-status.mjs +36 -0
  474. package/scripts/cadence/enqueue-cadence-tick.mjs +174 -0
  475. package/scripts/cadence/enqueue-cadence-tick.test.mjs +187 -0
  476. package/scripts/cadence/launchd-cadence-wrapper.sh +85 -0
  477. package/scripts/cadence/launchd-cloud-relay-wrapper.sh +95 -0
  478. package/scripts/cadence/launchd-socket-mode-wrapper.sh +95 -0
  479. package/scripts/ci/check-docs-accuracy.mjs +493 -0
  480. package/scripts/ci/check-docs-accuracy.test.mjs +409 -0
  481. package/scripts/ci/check-exports-exist.mjs +140 -0
  482. package/scripts/ci/check-files-exist.mjs +107 -0
  483. package/scripts/ci/check-no-build-artifacts.mjs +111 -0
  484. package/scripts/ci/check-no-build-artifacts.test.mjs +71 -0
  485. package/scripts/ci/check-no-confidential.mjs +198 -0
  486. package/scripts/ci/check-no-conflict-markers.mjs +169 -0
  487. package/scripts/ci/check-no-residual-identity.mjs +163 -0
  488. package/scripts/ci/check-no-residual-identity.test.mjs +89 -0
  489. package/scripts/ci/check-tarball-fidelity.mjs +205 -0
  490. package/scripts/ci/check-unresolved-tokens.mjs +83 -0
  491. package/scripts/ci/check.mjs +109 -0
  492. package/scripts/ci/check.test.mjs +194 -0
  493. package/scripts/ci/run-coverage.mjs +82 -0
  494. package/scripts/ci/run-tests.mjs +71 -0
  495. package/scripts/cloud-relay/README.md +59 -0
  496. package/scripts/cloud-relay/index.mjs +233 -0
  497. package/scripts/cloud-relay/package.json +15 -0
  498. package/scripts/cloud-relay/railway.json +13 -0
  499. package/scripts/cloud-relay/voice/README.md +94 -0
  500. package/scripts/cloud-relay/voice/package-lock.json +39 -0
  501. package/scripts/cloud-relay/voice/package.json +16 -0
  502. package/scripts/cloud-relay/voice/railway.json +13 -0
  503. package/scripts/cloud-relay/voice/server.mjs +532 -0
  504. package/scripts/collective/hook-runner.mjs +211 -0
  505. package/scripts/collective/hook-runner.test.mjs +90 -0
  506. package/scripts/collective/org-pulse.mjs +72 -0
  507. package/scripts/collective/org-sync.mjs +61 -0
  508. package/scripts/collective/recall.mjs +45 -0
  509. package/scripts/collective/who.mjs +30 -0
  510. package/scripts/comms-monitor.sh +288 -0
  511. package/scripts/configure-whatsapp-sandbox.sh +201 -0
  512. package/scripts/continuous-monitor.sh +91 -0
  513. package/scripts/cost/fleet-digest.mjs +407 -0
  514. package/scripts/cost/fleet-digest.test.mjs +207 -0
  515. package/scripts/cost/track-claude-usage.mjs +169 -0
  516. package/scripts/daemon/agent-daemon.mjs +989 -0
  517. package/scripts/daemon/agent-daemon.test.mjs +525 -0
  518. package/scripts/daemon/cadence-consumer-governance.test.mjs +220 -0
  519. package/scripts/daemon/cadence-consumer.mjs +1080 -0
  520. package/scripts/daemon/cadence-consumer.test.mjs +770 -0
  521. package/scripts/daemon/cadence-handlers.mjs +1121 -0
  522. package/scripts/daemon/cadence-handlers.test.mjs +617 -0
  523. package/scripts/daemon/classifier.mjs +704 -0
  524. package/scripts/daemon/classifier.test.mjs +238 -0
  525. package/scripts/daemon/classify-kind.mjs +54 -0
  526. package/scripts/daemon/classify-kind.test.mjs +40 -0
  527. package/scripts/daemon/context-compiler.mjs +605 -0
  528. package/scripts/daemon/context-compiler.test.mjs +300 -0
  529. package/scripts/daemon/dispatcher-cooldown.test.mjs +122 -0
  530. package/scripts/daemon/dispatcher-governance.test.mjs +886 -0
  531. package/scripts/daemon/dispatcher.mjs +1516 -0
  532. package/scripts/daemon/health.mjs +72 -0
  533. package/scripts/daemon/inbox-deferral.mjs +210 -0
  534. package/scripts/daemon/inbox-deferral.test.mjs +242 -0
  535. package/scripts/daemon/integration.test.mjs +149 -0
  536. package/scripts/daemon/launchd-wrapper-generic.sh +96 -0
  537. package/scripts/daemon/launchd-wrapper-slack-events.sh +37 -0
  538. package/scripts/daemon/launchd-wrapper.sh +91 -0
  539. package/scripts/daemon/lib/session-router.mjs +274 -0
  540. package/scripts/daemon/lib/session-router.test.mjs +295 -0
  541. package/scripts/daemon/maestro-daemon.mjs +275 -0
  542. package/scripts/daemon/prompt-builder.mjs +685 -0
  543. package/scripts/daemon/prompt-builder.test.mjs +213 -0
  544. package/scripts/daemon/responder.mjs +854 -0
  545. package/scripts/daemon/session-lock.mjs +721 -0
  546. package/scripts/daemon/session-lock.test.mjs +252 -0
  547. package/scripts/daemon/session-outcomes.mjs +640 -0
  548. package/scripts/daemon/session-outcomes.test.mjs +533 -0
  549. package/scripts/daemon/typing-registry.mjs +90 -0
  550. package/scripts/daemon/typing-registry.test.mjs +77 -0
  551. package/scripts/daemon/voice-webhook-server.mjs +804 -0
  552. package/scripts/decisions/capture-decision.mjs +116 -0
  553. package/scripts/disclosure_assessment.py +873 -0
  554. package/scripts/disclosure_boundaries.py +562 -0
  555. package/scripts/email-signature-principal.html +52 -0
  556. package/scripts/email-signature.html +60 -0
  557. package/scripts/email_quote_thread.py +167 -0
  558. package/scripts/email_thread_dedup.py +362 -0
  559. package/scripts/emergency-stop.sh +81 -0
  560. package/scripts/healthcheck.sh +116 -0
  561. package/scripts/hooks/block-mcp-cohort-send.sh +15 -0
  562. package/scripts/hooks/block-mcp-slack-send.sh +7 -0
  563. package/scripts/hooks/post-action-log.sh +126 -0
  564. package/scripts/hooks/pre-send-audit.sh +174 -0
  565. package/scripts/hooks/pre-send-audit.test.mjs +215 -0
  566. package/scripts/hooks/session-end-log.sh +27 -0
  567. package/scripts/hooks/session-start-banner.sh +115 -0
  568. package/scripts/huddle/audio-bridge.mjs +664 -0
  569. package/scripts/huddle/boot-slack-cdp.sh +102 -0
  570. package/scripts/huddle/huddle-controller.mjs +942 -0
  571. package/scripts/huddle/huddle-server.mjs +1229 -0
  572. package/scripts/huddle/launch-slack.sh +232 -0
  573. package/scripts/huddle/openai-realtime-bridge.mjs +462 -0
  574. package/scripts/huddle/package-lock.json +62 -0
  575. package/scripts/huddle/package.json +22 -0
  576. package/scripts/huddle/setup-audio.sh +239 -0
  577. package/scripts/huddle/start-call.mjs +318 -0
  578. package/scripts/huddle/test-pipeline.mjs +263 -0
  579. package/scripts/learning/consolidate-skills.mjs +72 -0
  580. package/scripts/learning/session-search.mjs +125 -0
  581. package/scripts/llm_email_dedup.py +442 -0
  582. package/scripts/local-triggers/generate-plists.sh +432 -0
  583. package/scripts/local-triggers/generate-plists.test.mjs +413 -0
  584. package/scripts/local-triggers/install-all.sh +49 -0
  585. package/scripts/local-triggers/plists/.gitkeep +0 -0
  586. package/scripts/local-triggers/run-trigger.sh +63 -0
  587. package/scripts/local-triggers/templates/rag-reindex.plist.template +47 -0
  588. package/scripts/local-triggers/templates/voice-relay-poller.plist.template +54 -0
  589. package/scripts/local-triggers/templates/voice-tunnel.plist.template +55 -0
  590. package/scripts/local-triggers/templates/voice-webhook.plist.template +51 -0
  591. package/scripts/maintenance/backup-to-cloud.sh +124 -0
  592. package/scripts/maintenance/health-check.sh +377 -0
  593. package/scripts/media-generation/README.md +105 -0
  594. package/scripts/media-generation/gemini-image-client.mjs +173 -0
  595. package/scripts/media-generation/generate-assets.mjs +289 -0
  596. package/scripts/media-generation/veo-video-client.mjs +219 -0
  597. package/scripts/org/send-orgmail.mjs +227 -0
  598. package/scripts/outbound-dedup-cleanup.sh +43 -0
  599. package/scripts/outbound-dedup.sh +477 -0
  600. package/scripts/outbound_dedup.py +115 -0
  601. package/scripts/parse-voice-transcript.mjs +481 -0
  602. package/scripts/pdf-generation/README.md +63 -0
  603. package/scripts/pdf-generation/build-document.mjs +247 -0
  604. package/scripts/pdf-generation/templates/board-pack.latex +136 -0
  605. package/scripts/pdf-generation/templates/corporate-letter.latex +126 -0
  606. package/scripts/pdf-generation/templates/memo.latex +114 -0
  607. package/scripts/poll-slack-events.sh +35 -0
  608. package/scripts/poller/calendar-poller.mjs +12 -0
  609. package/scripts/poller/gmail-poller.mjs +192 -0
  610. package/scripts/poller/imap-client.mjs +289 -0
  611. package/scripts/poller/inbox-scan-poller.mjs +156 -0
  612. package/scripts/poller/inbox-scan-poller.test.mjs +231 -0
  613. package/scripts/poller/index.mjs +73 -0
  614. package/scripts/poller/intra-session-check.mjs +285 -0
  615. package/scripts/poller/lib/cloud-relay-dedup.mjs +88 -0
  616. package/scripts/poller/lib/cloud-relay-dedup.test.mjs +133 -0
  617. package/scripts/poller/lib/slash-command-handlers.mjs +177 -0
  618. package/scripts/poller/secondary-gmail-poller.mjs +132 -0
  619. package/scripts/poller/slack-cloud-relay-client.mjs +368 -0
  620. package/scripts/poller/slack-poller.mjs +854 -0
  621. package/scripts/poller/slack-socket-mode.mjs +917 -0
  622. package/scripts/poller/slack-socket-mode.test.mjs +753 -0
  623. package/scripts/poller/trigger.mjs +75 -0
  624. package/scripts/poller/utils.mjs +371 -0
  625. package/scripts/poller/voice-cloud-relay-client.mjs +179 -0
  626. package/scripts/poller/voice-poller.mjs +236 -0
  627. package/scripts/poller-launchd/install.sh +66 -0
  628. package/scripts/poller-launchd/poller.plist.template +40 -0
  629. package/scripts/poller-launchd/whatsapp-handler.plist.template +39 -0
  630. package/scripts/post-interaction-indexer.py +1598 -0
  631. package/scripts/pre-draft-context.py +994 -0
  632. package/scripts/pre_draft_lookup.py +258 -0
  633. package/scripts/rag/build-index.mjs +47 -0
  634. package/scripts/rag/ingest.mjs +111 -0
  635. package/scripts/rag/search.mjs +119 -0
  636. package/scripts/rag-indexer.py +629 -0
  637. package/scripts/restore-from-backup.sh +248 -0
  638. package/scripts/restore-from-backup.test.mjs +178 -0
  639. package/scripts/resume-operations.sh +80 -0
  640. package/scripts/search-secondary-inbox.py +181 -0
  641. package/scripts/secondary-inbox-poller.py +437 -0
  642. package/scripts/self-optimization/compute-metrics.py +398 -0
  643. package/scripts/send-email-as-principal.py +369 -0
  644. package/scripts/send-email-threaded.py +392 -0
  645. package/scripts/send-email-with-attachment.py +377 -0
  646. package/scripts/send-email.sh +131 -0
  647. package/scripts/send-sms.sh +175 -0
  648. package/scripts/send-whatsapp.sh +292 -0
  649. package/scripts/session-start.sh +106 -0
  650. package/scripts/setup/boot-claude-session.sh +94 -0
  651. package/scripts/setup/configure-macos.sh +674 -0
  652. package/scripts/setup/configure-twilio-sip-trunk.mjs +207 -0
  653. package/scripts/setup/configure-voice-tunnel.mjs +182 -0
  654. package/scripts/setup/generate-agent-env.mjs +92 -0
  655. package/scripts/setup/generate-agent-package-json.mjs +222 -0
  656. package/scripts/setup/generate-agent-package-json.test.mjs +143 -0
  657. package/scripts/setup/generate-autonomy.mjs +60 -0
  658. package/scripts/setup/generate-backlog.mjs +101 -0
  659. package/scripts/setup/generate-cadences.mjs +92 -0
  660. package/scripts/setup/generate-capability.mjs +162 -0
  661. package/scripts/setup/generate-charter.mjs +76 -0
  662. package/scripts/setup/generate-comms.mjs +59 -0
  663. package/scripts/setup/generate-company.mjs +92 -0
  664. package/scripts/setup/init-agent.sh +547 -0
  665. package/scripts/setup/init-agent.test.mjs +151 -0
  666. package/scripts/setup/init-archetype.mjs +74 -0
  667. package/scripts/setup/init-backup.mjs +54 -0
  668. package/scripts/setup/init-cadence-bus.mjs +60 -0
  669. package/scripts/setup/init-channel-bus.mjs +46 -0
  670. package/scripts/setup/init-cost-tracking.mjs +45 -0
  671. package/scripts/setup/init-decision-capture.mjs +66 -0
  672. package/scripts/setup/init-known-agents.mjs +57 -0
  673. package/scripts/setup/init-learning.mjs +70 -0
  674. package/scripts/setup/init-memory-executive.mjs +45 -0
  675. package/scripts/setup/init-model-router.mjs +124 -0
  676. package/scripts/setup/init-rag.mjs +174 -0
  677. package/scripts/setup/init-session-router.mjs +38 -0
  678. package/scripts/setup/init-slack-socket-mode.mjs +260 -0
  679. package/scripts/setup/init-telegram.mjs +165 -0
  680. package/scripts/setup/init-voice-realtime.mjs +204 -0
  681. package/scripts/setup/init-whatsapp-baileys.mjs +77 -0
  682. package/scripts/setup/install-dev-tools.sh +150 -0
  683. package/scripts/setup/lib/install-plist.mjs +95 -0
  684. package/scripts/setup/migrate-agent-to-sot.mjs +192 -0
  685. package/scripts/setup/render-environment-yaml.mjs +133 -0
  686. package/scripts/slack-events-ctl.sh +177 -0
  687. package/scripts/slack-events-server.mjs +1045 -0
  688. package/scripts/slack-react.mjs +89 -0
  689. package/scripts/slack-responded.sh +232 -0
  690. package/scripts/slack-send.sh +287 -0
  691. package/scripts/slack-typing.mjs +196 -0
  692. package/scripts/slack-upload-v2.py +95 -0
  693. package/scripts/sms-handler.mjs +450 -0
  694. package/scripts/spawn-session.sh +120 -0
  695. package/scripts/sync-protocol.mjs +217 -0
  696. package/scripts/system-verify.sh +184 -0
  697. package/scripts/test-email-thread-dedup.py +239 -0
  698. package/scripts/test-information-barriers.py +484 -0
  699. package/scripts/test-llm-email-dedup.py +251 -0
  700. package/scripts/test-pre-draft-integration.py +203 -0
  701. package/scripts/test-rag-phase2.sh +442 -0
  702. package/scripts/test-rag-search.sh +251 -0
  703. package/scripts/test-voice-parser.mjs +316 -0
  704. package/scripts/user-context-search.py +659 -0
  705. package/scripts/validate_outbound.py +1504 -0
  706. package/scripts/watchdog/ai.maestro.memory-watchdog.plist +41 -0
  707. package/scripts/watchdog/force-reboot.sh +157 -0
  708. package/scripts/watchdog/memory-watchdog.sh +473 -0
  709. package/scripts/whatsapp-handler.mjs +538 -0
  710. package/teams/desktop-operations.yaml +34 -0
  711. package/teams/executive-office.yaml +27 -0
  712. package/teams/legal-and-regulatory.yaml +24 -0
  713. package/teams/platform-and-engineering.yaml +23 -0
  714. package/teams/strategy-and-growth.yaml +29 -0
  715. package/workflows/continuous/backlog-executor.yaml +141 -0
  716. package/workflows/continuous/inbound-monitor.yaml +168 -0
  717. package/workflows/daily/applicant-triage.yaml +197 -0
  718. package/workflows/daily/comms-triage.yaml +80 -0
  719. package/workflows/daily/evening-wrap.yaml +105 -0
  720. package/workflows/daily/morning-brief.yaml +164 -0
  721. package/workflows/daily/slack-followup-sweep.yaml +87 -0
  722. package/workflows/event-driven/README.md +50 -0
  723. package/workflows/event-driven/agent-failure-investigation.yaml +137 -0
  724. package/workflows/event-driven/pr-review.yaml +107 -0
  725. package/workflows/monthly/board-readiness.yaml +76 -0
  726. package/workflows/quarterly/strategic-scenario-analysis.yaml +85 -0
  727. package/workflows/session-protocol.md +171 -0
  728. package/workflows/weekly/engineering-health.yaml +154 -0
  729. package/workflows/weekly/hiring-review.yaml +169 -0
  730. package/workflows/weekly/rollup-pipeline-review.yaml +76 -0
  731. package/workflows/weekly/strategic-memo.yaml +79 -0
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: brand-steward
3
+ description: Work the org's Design section — read the brand foundation and voice, rewrite copy in that voice, render and export templates and the brand kit, regenerate stale imagery within a budget, and propose reviewable foundation changes. Use before writing anything the workspace publishes, to produce a branded asset, or when imagery/templates have gone stale.
4
+ ---
5
+
6
+ # Brand Steward
7
+
8
+ The product section is called **Design**; the wire family is `branding.*`. That
9
+ split is deliberate — do not "fix" it.
10
+
11
+ The workspace's brand is a versioned document. Reads are cheap. The producers
12
+ (render, rewrite, export, image generation) cost real money and return what they
13
+ spent. Foundation mutations are always human-gated: your lane is
14
+ `design_propose_change`, which stages a reviewable diff and writes nothing.
15
+
16
+ All of it is `executeOrgTool`; frames are fail-open.
17
+
18
+ ## Read before you write
19
+
20
+ ```bash
21
+ node --input-type=module -e '
22
+ import { executeOrgTool } from "./lib/org/tool-surface.mjs";
23
+ const v = await executeOrgTool("design_voice", {});
24
+ console.log(v.ok ? JSON.stringify(v.result, null, 2) : v.error);
25
+ '
26
+ ```
27
+
28
+ - `design_voice` — the voice statement, the trait pills that are ON, the
29
+ SAY/AVOID lexicon, and worked in-practice examples. **Read this before drafting
30
+ anything the workspace publishes.** It composes with
31
+ `policies/communication-style.md`, which still governs the mechanics of your
32
+ prose; voice tells you the register, the style policy tells you what is banned.
33
+ - `design_foundation` — typography, colour, scale, archetype, principles, plus
34
+ the version-history head. `historyLimit: 0` suppresses the history block;
35
+ `versionId` reads a historical snapshot.
36
+ - `design_list_templates` — the gallery with each template's status chip. `STALE`
37
+ means the foundation moved underneath it.
38
+
39
+ ## Producing things (these cost money)
40
+
41
+ Every producer takes `budgetCents`, clamped server-side to a hard per-run
42
+ ceiling, and returns what it actually spent. Report the spend, every time.
43
+
44
+ - `design_rewrite_in_voice` — rewrite one sentence in the brand voice. It
45
+ produces copy; it sends nothing. Whatever you do with the result is screened at
46
+ the send verb, as normal.
47
+ - `design_render_template` — HTML for any template, PNG for `GENERATED` ones.
48
+ - `design_export_kit` — tokens (`px` | `rem` | `em`), voice, and the mark bytes
49
+ unless `includeMarks: false`.
50
+ - `design_generate_image` — regenerate canonical image slots.
51
+
52
+ **Quote before you spend.** `budgetCents: 0` on `design_generate_image` is the
53
+ QUOTE call: it generates nothing, spends nothing, and still returns every slot's
54
+ price and staleness. Omitting `slots` regenerates every STALE slot — never a
55
+ silent full re-run, but still the expensive path. Quote, report the number, then
56
+ spend.
57
+
58
+ ```bash
59
+ node --input-type=module -e '
60
+ import { executeOrgTool } from "./lib/org/tool-surface.mjs";
61
+ const quote = await executeOrgTool("design_generate_image", { budgetCents: 0 });
62
+ if (!quote.ok) { console.log(quote.error); process.exit(0); }
63
+ const stale = (quote.result.slots ?? []).filter((s) => s.stale);
64
+ console.log(`${stale.length} stale slot(s), ${stale.reduce((n, s) => n + (s.priceCents ?? 0), 0)}c to refresh`);
65
+ '
66
+ ```
67
+
68
+ ## Proposing a foundation change
69
+
70
+ ```bash
71
+ node --input-type=module -e '
72
+ import { executeOrgTool } from "./lib/org/tool-surface.mjs";
73
+ const head = await executeOrgTool("design_foundation", { historyLimit: 1 });
74
+ const res = await executeOrgTool("design_propose_change", {
75
+ patch: { fonts: { display: "Söhne", body: "Söhne", mono: "Söhne Mono" } },
76
+ note: "Unify the display and body face",
77
+ rationale: "Two faces at the same optical size read as an accident on the pricing page.",
78
+ expectedVersionId: head.ok ? head.result.headVersionId : undefined,
79
+ });
80
+ console.log(res.ok ? res.result : res.error);
81
+ '
82
+ ```
83
+
84
+ Two things will bite you:
85
+
86
+ 1. **Blocks are replaced wholesale.** Send the *complete* block — the whole
87
+ `fonts` object, the whole `colors` array. A partial block is a silent
88
+ half-write that drops every key you left out.
89
+ 2. **Pass `expectedVersionId`** from `design_foundation`. A proposal computed
90
+ against a head that has since moved is refused rather than staged against
91
+ stale ground.
92
+
93
+ The proposal writes nothing. A human applies it, and their note becomes the
94
+ version label.
95
+
96
+ ## Human-only, by design
97
+
98
+ `branding.saveFoundation` and `branding.restoreFoundation` are `admin` scope — an
99
+ ordinary agent seat cannot reach them, and that is the point. When the foundation
100
+ genuinely needs to move, stage the diff and put it in front of the human with the
101
+ rationale you would give in review.
102
+
103
+ ## The long tail via `org_rpc`
104
+
105
+ `branding.listVersions` and `branding.exportTemplate` (both `org.read`), plus the
106
+ admin Brand Studio surface: `branding.regenerate`, `branding.regenerateTemplates`,
107
+ `branding.regenerateTemplate`, `branding.regenerateImages`, `branding.uploadImage`,
108
+ `branding.amendArtifact`, `branding.amendTemplate`, `branding.cloneTemplate`,
109
+ `branding.deleteTemplate`, `branding.restoreVersion`, `branding.undo`,
110
+ `branding.redo`.
111
+
112
+ ## Rules of the desk
113
+
114
+ - Voice first. Never draft published copy before reading `design_voice`;
115
+ `policies/communication-style.md` still governs the prose mechanics on top.
116
+ - Quote, then spend, then report the cost in cents. An unreported spend is a
117
+ surprise on someone's invoice.
118
+ - Stale is a fact, not a verdict — say which slots and templates are stale and
119
+ what refreshing them costs; let the human choose.
120
+ - Propose foundation changes with a rationale a reviewer can act on. "Looks
121
+ better" is not one.
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: calendar-plan
3
+ description: Plan and manage workspace calendar events — scan attendees' calendars for a free slot deterministically, create typed events with real invites, answer your own invites, and reschedule with everyone notified. Use when asked to find a time, set up a meeting or focus block, respond to an invite, or move an event.
4
+ ---
5
+
6
+ # Calendar Planning
7
+
8
+ The workspace calendar is a governed surface: events are typed
9
+ (`MEETING / REVIEW / FOCUS / AGENT_BLOCK / ALL_HANDS / HOLD`), invites queue REAL
10
+ emails, an optional `channelId` posts the invite note as a real channel message, and
11
+ guardian reshapes are logged. Agent seats answer their own invites and COMMIT.
12
+
13
+ All of it is `executeOrgTool` over the calendar-desk tools; fail-open frames.
14
+
15
+ ## Find a time first
16
+
17
+ `calendar_find_a_time` is a deterministic free-slot scan across the attendees'
18
+ calendars — agent blocks included, nothing persisted, no model involved:
19
+
20
+ ```bash
21
+ node --input-type=module -e '
22
+ import { executeOrgTool } from "./lib/org/tool-surface.mjs";
23
+ const res = await executeOrgTool("calendar_find_a_time", {
24
+ attendeeMemberIds: ["m_alex", "m_robin"], durationMinutes: 45, fromDay: "2026-07-28",
25
+ });
26
+ console.log(JSON.stringify(res, null, 2));
27
+ '
28
+ ```
29
+
30
+ Propose from its slots — never invent availability.
31
+
32
+ ## Create, answer, move
33
+
34
+ - `calendar_create` — typed event with attendees; `channelId` (optional) posts the
35
+ invite note into that channel; invite emails queue for real. Idempotent — a
36
+ replayed create does not double-book.
37
+ - `calendar_rsvp` — the acting seat answers its OWN invite (`ACCEPTED` /
38
+ `DECLINED` / `TENTATIVE`). Agents commit; do not leave invites hanging.
39
+ - `calendar_list` `{fromDay, toDay, viewpoint?}` / `calendar_get` `{eventId}` —
40
+ the window read and the single-event read (attendee rows + linked records).
41
+ - Long tail via `org_rpc`: `calendar.update` (fields/attendees),
42
+ `calendar.reschedule` (move; invites update, guardian reshapes logged),
43
+ `calendar.delete` (release the slot; attendees notified).
44
+
45
+ ## Meetings → the knowledge plane
46
+
47
+ After a held meeting, `meetings_recap_file` files the recap + transcript into the
48
+ workspace drive — two DOC files plus a MeetingRecord with links back to the event.
49
+ Use it as the notetaker's landing verb; `org_rpc` `meetings.record` records a
50
+ meeting into the org's knowledge plane directly.
51
+
52
+ ## Rules of the desk
53
+
54
+ - Scan before you book; state whose calendars you scanned.
55
+ - One event per intent — rely on create's idempotency instead of re-firing blind.
56
+ - When you move someone else's meeting, say why in the update — the reshape is
57
+ logged either way.
@@ -0,0 +1,124 @@
1
+ ---
2
+ name: call-working-sessions
3
+ 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.
4
+ ---
5
+
6
+ # Call working sessions
7
+
8
+ When you're in a Cohort call, you can do more than talk: you can PRESENT a
9
+ workspace surface on the call stage like a screen share, drive it with steps
10
+ every participant sees, and read back the room — what's on screen, who reacted,
11
+ whose hand is up.
12
+
13
+ All of it rides the calls-desk org tools (`executeOrgTool`, fail-open frames,
14
+ never a throw) or the equivalent `calling*` wrappers in `lib/org/client.mjs`.
15
+ You must be a participant in the (still-live) call for every verb below.
16
+
17
+ ## Presenting a surface
18
+
19
+ `org_call_share_start` puts a surface on the stage. Surface kinds and refs:
20
+ `doc` / `sheet` (a drive fileId), `channel` (channelId), `board` (`"org"`),
21
+ `charter` (charter slug).
22
+
23
+ ```bash
24
+ node --input-type=module -e '
25
+ import { callingAppShareStart } from "./lib/org/client.mjs";
26
+ import { resolveOrgToolConfig } from "./lib/org/tool-surface.mjs";
27
+ const { base, orgId, token } = resolveOrgToolConfig();
28
+ const res = await callingAppShareStart(
29
+ { callId: "CALL_ID", surface: { kind: "doc", ref: "FILE_ID", title: "Q3 plan" } },
30
+ { base, token, orgId },
31
+ );
32
+ console.log(JSON.stringify(res)); // {ok:true, result:{sessionId}} — keep the sessionId
33
+ '
34
+ ```
35
+
36
+ One active session per call: starting again supersedes your own session; a
37
+ `CONFLICT` frame means another member is presenting — wait or ask, never fight
38
+ for the stage. And always narrate verbally what you're showing: the tile is a
39
+ visual aid, the meeting is still a conversation.
40
+
41
+ ## Stepping through it
42
+
43
+ `org_call_share_step` sends a batch (≤20) of choreography steps the tiles
44
+ animate:
45
+
46
+ - `{k:"cursor", x, y}` — move your pointer (normalized 0..1).
47
+ - `{k:"scroll", anchor}` — bring an anchor into view.
48
+ - `{k:"highlight", anchor, note?}` — ring it, with an optional ≤200-char note.
49
+ - `{k:"type", anchor, text}` — a visual typing preview (≤2000 chars). This is
50
+ NOT a real edit — see live-editing below.
51
+ - `{k:"refresh"}` — every tile refetches the surface content.
52
+
53
+ Anchors: `block:3` (doc block), `msg:<id>` (channel message), `cell:B4`
54
+ (sheet), `task:<id>` (board), `section:<idx>` (charter), `top` / `bottom`.
55
+
56
+ ```bash
57
+ node --input-type=module -e '
58
+ import { callingAppShareAct } from "./lib/org/client.mjs";
59
+ import { resolveOrgToolConfig } from "./lib/org/tool-surface.mjs";
60
+ const { base, orgId, token } = resolveOrgToolConfig();
61
+ const res = await callingAppShareAct(
62
+ { callId: "CALL_ID", sessionId: "SESSION_ID", steps: [
63
+ { k: "scroll", anchor: "block:3" },
64
+ { k: "highlight", anchor: "block:3", note: "the revenue line we discussed" },
65
+ ] },
66
+ { base, token, orgId },
67
+ );
68
+ console.log(JSON.stringify(res)); // {ok:true, result:{seq}}
69
+ '
70
+ ```
71
+
72
+ Highlight notes and typed text are read by every human on the call, so the
73
+ send-gate screens them locally before dispatch — same as a channel message.
74
+
75
+ ## Live-editing a doc while talking
76
+
77
+ Real edits ride the files desk, not the share lane. The pattern:
78
+
79
+ 1. `files_doc_write` (or `org_rpc files.sheetWriteCells`) — the REAL revision.
80
+ 2. A share step batch: `{k:"type", ...}` to animate the change being written,
81
+ then `{k:"refresh"}` so every tile settles on the canonical new content.
82
+
83
+ The room sees the edit happen; the drive records a real DocRevision.
84
+
85
+ ## Reading the room
86
+
87
+ - `org_call_visual_context` — the narrated visual stream: `{kind: screen|
88
+ camera|appshare, sourceMemberId, summary, at}` rows distilled from sampled
89
+ frames (narration text only — frames are never persisted). Use it before
90
+ answering "this chart" / "that number" talk so you speak to what's actually
91
+ on screen.
92
+ - `org_call_events` — recent non-speech events: reactions, raised/lowered
93
+ hands, joins, share lifecycle. A raised hand you can see is an invitation to
94
+ bring someone in.
95
+
96
+ ```bash
97
+ node --input-type=module -e '
98
+ import { callingGetVisualContext, callingGetCallEvents } from "./lib/org/client.mjs";
99
+ import { resolveOrgToolConfig } from "./lib/org/tool-surface.mjs";
100
+ const { base, orgId, token } = resolveOrgToolConfig();
101
+ console.log(JSON.stringify(await callingGetVisualContext({ callId: "CALL_ID", limit: 20 }, { base, token, orgId })));
102
+ console.log(JSON.stringify(await callingGetCallEvents({ callId: "CALL_ID", limit: 30 }, { base, token, orgId })));
103
+ '
104
+ ```
105
+
106
+ `callingGetAppShare({ callId })` returns the active session (or `null`) —
107
+ check it before starting your own.
108
+
109
+ ## Ending
110
+
111
+ `org_call_share_end` (`callingAppShareEnd({ callId, sessionId })`) clears the
112
+ stage; the sharer or the call host may end a session. End your share when the
113
+ walkthrough is done — don't squat on the stage.
114
+
115
+ ## Rules of the desk
116
+
117
+ - Participant-gated: every verb refuses when you're not in the call, or the
118
+ call has ended (`CONFLICT`) — surface it, don't retry blindly.
119
+ - The chain is redacted: share events record ids/counts only; your step text
120
+ reaches call participants' screens, never the org event chain.
121
+ - Step text is human-visible — write it like something you'd say out loud, and
122
+ keep the policies/communication-style.md register.
123
+ - Show AND tell: pair every share step with spoken narration; a silent moving
124
+ cursor is confusing, not helpful.
@@ -0,0 +1,91 @@
1
+ ---
2
+ name: ccxray-diagnostics
3
+ description: Run token/cost X-ray diagnostics on Claude API sessions — per-turn breakdown, context window heatmaps, system prompt diffs. Use for debugging expensive sessions or comparing sub-agent efficiency.
4
+ ---
5
+
6
+ # Token/Cost X-Ray Diagnostics (ccxray)
7
+
8
+ You are a Maestro agent. Use ccxray to diagnose token usage, cost, and context window utilization across agent sessions.
9
+
10
+ ## When to Invoke
11
+
12
+ - **Debugging expensive sessions** — a backlog cycle consumed unexpectedly high tokens
13
+ - **Sub-agent efficiency comparison** — comparing token cost across parallel agents doing similar work
14
+ - **Context window analysis** — investigating whether agents are hitting context limits or carrying stale context
15
+ - **System prompt auditing** — diffing system prompts across agents to find bloat
16
+ - **Post-incident analysis** — understanding what went wrong in a failed or degraded session
17
+
18
+ ## Background
19
+
20
+ ccxray is a transparent HTTP proxy that intercepts all Claude API calls and provides a live dashboard with per-turn token/cost breakdowns. It is an on-demand diagnostic tool, not always-on infrastructure.
21
+
22
+ - Proxy + dashboard: `npx ccxray claude`
23
+ - Logs stored at: `~/.ccxray/logs/`
24
+ - Dashboard shows live data during the session
25
+
26
+ ## Steps
27
+
28
+ 1. **Launch a diagnostic session** — run the target agent through ccxray:
29
+ ```bash
30
+ npx ccxray claude
31
+ ```
32
+ This wraps the Claude Code session in the ccxray proxy. All API calls are intercepted and logged.
33
+
34
+ 2. **Open the dashboard** — ccxray serves a local dashboard showing:
35
+ - Per-turn input/output token counts
36
+ - Cumulative cost tracking
37
+ - Context window heatmap (what is filling the window)
38
+ - System prompt content and diffs between turns
39
+
40
+ 3. **Analyze token distribution** — identify where tokens are being spent:
41
+ - Large system prompts eating context budget
42
+ - Repeated tool outputs inflating input tokens
43
+ - Verbose agent responses consuming output tokens
44
+ - Context window near capacity causing cache misses
45
+
46
+ 4. **Compare sub-agents** — if multiple agents ran in parallel, compare their ccxray logs:
47
+ - Which agent consumed the most tokens per unit of work?
48
+ - Are any agents carrying unnecessary context?
49
+ - Are system prompts appropriately sized for each agent's role?
50
+
51
+ 5. **Review historical logs** — check `~/.ccxray/logs/` for past session data:
52
+ ```bash
53
+ ls -lt ~/.ccxray/logs/
54
+ ```
55
+
56
+ 6. **Produce findings** — summarize token/cost insights and recommend optimizations.
57
+
58
+ ## Output
59
+
60
+ Report the following:
61
+
62
+ ```
63
+ ## Token/Cost X-Ray Report
64
+
65
+ ### Session Summary
66
+ - Total input tokens: [N]
67
+ - Total output tokens: [N]
68
+ - Estimated cost: $[X.XX]
69
+ - Turns: [N]
70
+ - Context window peak: [N]% utilization
71
+
72
+ ### Top Token Consumers
73
+ 1. [Turn/phase] — [N] tokens ([reason])
74
+ 2. [Turn/phase] — [N] tokens ([reason])
75
+
76
+ ### Optimization Recommendations
77
+ - [Specific recommendation, e.g., "Reduce system prompt by removing unused policy sections"]
78
+ - [Specific recommendation, e.g., "Cache tool outputs instead of re-reading files"]
79
+
80
+ ### Sub-Agent Comparison (if applicable)
81
+ | Agent | Input Tokens | Output Tokens | Cost | Efficiency |
82
+ |---|---|---|---|---|
83
+ | [name] | [N] | [N] | $[X] | [notes] |
84
+ ```
85
+
86
+ ## Integration Notes
87
+
88
+ - This is an on-demand tool — do NOT run ccxray on every session, only when diagnosing issues
89
+ - ccxray adds minimal overhead (~5ms per request) but writes logs to disk
90
+ - Use for periodic token budget audits per backlog cycle (e.g., weekly)
91
+ - Pair with claude-pace to correlate token usage with quota consumption
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: claude-pace
3
+ description: Check Claude API rate limit quota — 5-hour/7-day usage, reset countdowns, pace delta. Use before heavy backlog cycles, when quota warnings appear, or to decide whether to defer non-urgent work.
4
+ ---
5
+
6
+ # Rate Limit Monitoring (claude-pace)
7
+
8
+ You are a Maestro agent. Use the claude-pace status line plugin to monitor API quota and make informed scheduling decisions.
9
+
10
+ ## When to Invoke
11
+
12
+ - **Before heavy backlog cycles** — check headroom before spawning parallel agents
13
+ - **When quota warnings appear** — "hit your limit" or rate-limit errors in logs
14
+ - **Capacity planning** — deciding whether to defer improvement-backlog or non-urgent items
15
+ - **Post-incident** — confirming quota has recovered after a rate-limit outage
16
+
17
+ ## Background
18
+
19
+ claude-pace is a Claude Code status line plugin (Bash + jq, ~10ms latency). It is auto-installed by `init-agent.sh` via `claude plugin marketplace add Astro-Han/claude-pace`. It displays real-time quota data in the Claude Code status bar.
20
+
21
+ The key signal is **pace delta**:
22
+ - **Green** — headroom available, safe to proceed with full parallelism
23
+ - **Yellow** — approaching limits, reduce parallel agent count
24
+ - **Red** — near or at limit, defer all non-urgent work immediately
25
+
26
+ ## Steps
27
+
28
+ 1. **Read the status line** — claude-pace displays 5-hour window usage, 7-day rolling usage, and time until next reset directly in the Claude Code status bar.
29
+
30
+ 2. **Evaluate pace delta** — determine current capacity:
31
+ - **Green (>40% remaining)**: Proceed normally. Full parallel agent spawning is safe.
32
+ - **Yellow (15-40% remaining)**: Reduce to 2 parallel agents max. Defer improvement-backlog items.
33
+ - **Red (<15% remaining)**: Critical items only. No parallel spawning. Defer all non-urgent work.
34
+
35
+ 3. **Check reset countdown** — if quota is constrained, note when the 5-hour window resets. Schedule deferred work for after reset.
36
+
37
+ 4. **Adjust execution plan** based on findings:
38
+ - Prioritize critical/high-priority queue items only when constrained
39
+ - Move improvement-backlog and low-priority items to next cycle
40
+ - Reduce `parallel_with` fan-out in workflow steps
41
+ - Log the capacity decision in the session audit
42
+
43
+ 5. **If rate-limit outage is suspected**, check workflow logs for the pattern: `"started"` entry without a matching `"completed"` entry, and inspect `.log` files for `"hit your limit"` strings.
44
+
45
+ ## Output
46
+
47
+ Report the following to the calling agent or session:
48
+
49
+ ```
50
+ ## Quota Status
51
+ - 5-hour window: [X]% used — resets in [T]
52
+ - 7-day rolling: [X]% used
53
+ - Pace delta: [green/yellow/red]
54
+ - Recommendation: [proceed normally / reduce parallelism / critical-only mode]
55
+ ```
56
+
57
+ ## Integration Notes
58
+
59
+ - Complements Maestro's reactive rate-limit detection (checking logs post-facto) with proactive visibility
60
+ - Does NOT require launching a separate process — data is in the status bar
61
+ - When pace delta is red, the backlog executor should automatically shrink its batch size from 3-5 items to 1-2
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: code-review-graph
3
+ description: Structural code analysis via tree-sitter knowledge graph — blast radius, review context, architecture overview, semantic search. Use for PR reviews, refactoring, and engineering health checks.
4
+ ---
5
+
6
+ # Structural Code Analysis (code-review-graph)
7
+
8
+ You are a Maestro agent. Use code-review-graph to build and query a tree-sitter-based knowledge graph of any codebase for structural analysis.
9
+
10
+ ## When to Invoke
11
+
12
+ - **PR reviews** — assess blast radius of changes before approving
13
+ - **Refactoring** — understand call chains, import graphs, and dependencies before making changes
14
+ - **Engineering health checks** — generate architecture overviews for repos in the portfolio
15
+ - **Pre-change analysis** — determine what will break if a function/class is modified
16
+ - **Semantic code search** — find functions, patterns, or relationships across a codebase
17
+
18
+ ## Background
19
+
20
+ code-review-graph uses tree-sitter to parse source code and build a knowledge graph mapping functions, classes, imports, and call relationships. It provides both CLI tools and an MCP server with specialized analysis tools.
21
+
22
+ ## Steps
23
+
24
+ ### One-Time Setup
25
+
26
+ 1. **Index the target repository**:
27
+ ```bash
28
+ npx code-review-graph index /path/to/repo
29
+ ```
30
+ This parses all source files and builds the knowledge graph. Re-run after significant changes.
31
+
32
+ 2. **Configure as MCP server** (optional, for persistent access):
33
+ Add to `.claude/settings.json` under `mcpServers`:
34
+ ```json
35
+ {
36
+ "code-review-graph": {
37
+ "command": "npx",
38
+ "args": ["code-review-graph", "serve", "--port", "3848"]
39
+ }
40
+ }
41
+ ```
42
+
43
+ ### Analysis Workflows
44
+
45
+ 3. **Blast radius analysis** — before approving a PR or making a change:
46
+ - Query which functions/modules depend on the changed code
47
+ - Identify downstream consumers that may break
48
+ - Map the full call chain from changed function to entry points
49
+ - Tool: `blast_radius` (via MCP) or CLI equivalent
50
+
51
+ 4. **Review context** — when reviewing a PR:
52
+ - Pull structural context for changed files (what calls them, what they call)
53
+ - Identify if changes touch hot paths or critical modules
54
+ - Surface related functions that should have been changed but were not
55
+ - Tool: `review_context` (via MCP)
56
+
57
+ 5. **Architecture overview** — for engineering health checks:
58
+ - Generate module dependency graph
59
+ - Identify circular dependencies
60
+ - Map public API surface vs internal implementation
61
+ - Surface orphaned code (defined but never called)
62
+ - Tool: `architecture_overview` (via MCP)
63
+
64
+ 6. **Semantic search** — finding code by intent:
65
+ - Search for functions matching a description or pattern
66
+ - Find all implementations of a given interface
67
+ - Locate similar code patterns across the codebase
68
+ - Tool: `semantic_search` (via MCP)
69
+
70
+ ## Output
71
+
72
+ Report findings appropriate to the workflow:
73
+
74
+ **For blast radius:**
75
+ ```
76
+ ## Blast Radius: [function/file]
77
+ - Direct dependents: [N] functions in [N] files
78
+ - Transitive impact: [N] modules
79
+ - Risk level: [low/medium/high]
80
+ - Affected entry points: [list]
81
+ ```
82
+
83
+ **For architecture overview:**
84
+ ```
85
+ ## Architecture: [repo]
86
+ - Modules: [N]
87
+ - Key dependency chains: [list top 3]
88
+ - Circular dependencies: [list or "none"]
89
+ - Orphaned exports: [count]
90
+ - Hottest module (most dependents): [name]
91
+ ```
92
+
93
+ ## Integration Notes
94
+
95
+ - Recommended for coding-oriented agents (engineering, platform, product)
96
+ - Optional for operational agents (comms, hiring, strategy) — they rarely need code-level analysis
97
+ - Re-index after merging significant PRs to keep the graph current
98
+ - The MCP server runs on port 3848 by default — ensure no conflicts
99
+ - Graph build time scales with repo size; large monorepos may take 30-60 seconds
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: crm-pipeline
3
+ description: Work the org's CRM desk — pipeline and deal reads, stage moves, attributed interaction logging, next-best-action inside playbook lines, and the escalation lane where humans sign held work. Use when asked about pipeline state, to progress or hand over a deal, to log a touch, or to run the next step on a deal.
4
+ ---
5
+
6
+ # CRM Pipeline
7
+
8
+ The CRM desk is playbook-governed: agents run inside compiled playbook lines,
9
+ manual holds gate the next outbound step, and the verbs that commit the org —
10
+ signing held work, setting the quarter's target — are HUMAN-ONLY in the domain
11
+ layer. An agent call to those fails exactly as the UI would never allow it; that
12
+ refusal is correct behaviour, not an error to work around. Money is integer cents
13
+ everywhere.
14
+
15
+ All of it is `executeOrgTool` over the crm-desk tools; fail-open frames.
16
+
17
+ ## Reading the pipeline
18
+
19
+ ```bash
20
+ node --input-type=module -e '
21
+ import { executeOrgTool } from "./lib/org/tool-surface.mjs";
22
+ const res = await executeOrgTool("crm_list_deals", { openOnly: true });
23
+ for (const d of res.ok ? res.result.deals ?? res.result : []) console.log(d.id, d.stage, d.name, d.valueCents);
24
+ '
25
+ ```
26
+
27
+ - `crm_get_deal` — one deal + its attributed trail.
28
+ - `crm_list_escalations` — deals holding for a human signature (the guardian
29
+ queue). Surface these; never "resolve" them yourself.
30
+ - Long-tail reads via `org_rpc`: `crm.listAccounts` (health + ARR),
31
+ `crm.listContacts`, `crm.listInteractions`, `crm.listPlaybooks`,
32
+ `crm.getTargets` (target + live committed/best-case), `crm.compilePlaybook`
33
+ (PURE preview, nothing persisted).
34
+
35
+ ## Progressing a deal
36
+
37
+ - `crm_create_deal` — open at INBOUND.
38
+ - `crm_move_stage` — stage/board move, logged.
39
+ - `crm_log_interaction` — an attributed touch on the deal/contact trail. Log every
40
+ real touch; the trail is the deal's story.
41
+ - `crm_next_best_action` — start the playbook's proposed step. Holds gate NBA: a
42
+ deal holding for signature will not run — report the hold.
43
+ - Long tail via `org_rpc`: `crm.updateDeal` (term edits re-evaluate playbooks),
44
+ `crm.closeDeal` (won → a REAL Books draft invoice), `crm.delegate` (owner
45
+ reassign + a real handover board task), `crm.taskFollowThrough` (a real
46
+ work-board task), `crm.shareDeal` (people grants; a channelId posts a real
47
+ system line), `crm.linkContact` / `crm.linkFiles`, `crm.holdNextStep` (manual
48
+ signature gate), `crm.returnEscalation` (return held work with a posture note),
49
+ `crm.updateHeldTerms` (re-price held terms), `crm.logDealDecision` (a real
50
+ Decision row in the registry), `crm.pinNote`, `crm.redactInteraction` (SOFT —
51
+ the ledger record remains), accounts/contacts CRUD, playbook save/toggle/delete
52
+ (locked playbooks refuse), `crm.setTarget`.
53
+
54
+ ## Human-only, by design
55
+
56
+ `crm.signEscalation` and `crm.setTarget`'s `targetCents` refuse non-human actors in
57
+ the domain. When a deal needs a signature: put it in front of the human
58
+ (`crm.listEscalations` + a channel note), do not attempt the sign.
59
+
60
+ ## Rules of the desk
61
+
62
+ - Attribute everything — an unlogged touch did not happen.
63
+ - Report holds and escalations verbatim (stage, amount in cents, what tripped).
64
+ - Won deals hand off to Books automatically; check `books_invoices` before
65
+ drafting a duplicate.