@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,110 @@
1
+ # The Archetype Agent Factory
2
+
3
+ > How Maestro turns a chosen archetype into a complete, ready-to-operate
4
+ > autonomous agent — McKinsey/Goldman-grade, generated from data, busy from
5
+ > minute one. Persona-agnostic: every example below is illustrative.
6
+
7
+ ## 1. The model: Function × Altitude
8
+
9
+ An agent's operating model is composed from **two orthogonal axes**, not one:
10
+
11
+ - **Function** — *what the agent owns*: control towers, KPI categories,
12
+ stakeholders, backlog streams, tool/skill/workflow packs, and the MCP servers
13
+ the role needs. Six functions: `executive-operator`, `technical-leader`,
14
+ `commercial-leader`, `compliance-officer`, `product-leader`, `operations-leader`.
15
+ - **Altitude** — *how the agent operates*: autonomy bands, decision-rights
16
+ authority, escalation thresholds, KPI altitude, backlog granularity, delegation
17
+ breadth, and communication formality. Five altitudes: `founder`, `c-suite`,
18
+ `svp`, `vp`, `senior-manager`.
19
+
20
+ Seniority roles decompose into cells: a **CTO** = `technical-leader × c-suite`; a
21
+ **VP of Engineering** = `technical-leader × vp`; a **Head of Operations** =
22
+ `operations-leader × svp`; a **Startup Founder** = `executive-operator × founder`.
23
+ The same function at two altitudes shares skills and towers but has radically
24
+ different decision rights and autonomy — which a single-axis model cannot express.
25
+
26
+ ## 2. The data spine
27
+
28
+ The operating model is **data, not prose** — versioned, validatable, diffable:
29
+
30
+ ```
31
+ archetypes/
32
+ ├── base.yaml shared defaults (voice modes, principles, universal reds)
33
+ ├── functions/<function>.yaml towers, KPIs, stakeholders, backlog streams, packs
34
+ ├── altitudes/<altitude>.yaml autonomy bands, decision-rights, escalation, granularity
35
+ ├── capabilities/<function>.yaml the role's sub-agent org (teams of roles), skills,
36
+ │ workflows, MCP servers
37
+ └── archetype.schema.json the resolved-profile contract
38
+ ```
39
+
40
+ Resolved by small, tested, dependency-light modules:
41
+
42
+ | Module | Resolves |
43
+ | --- | --- |
44
+ | `lib/archetype.mjs` | `base ⊕ function ⊕ altitude` → validated operating profile |
45
+ | `lib/capability.mjs` | standard defaults + altitude-scaled role roster + skills/workflows/MCP |
46
+ | `lib/cadences.mjs` | standard ⊕ function recurring workflows ⊕ altitude cadences |
47
+ | `lib/autonomy.mjs` | the action-classification policy (human bands + enforced per-action map) |
48
+ | `lib/comms.mjs` | tone/register/voice-modes/channel-strategy/templates |
49
+ | `lib/charter.mjs`, `lib/backlog.mjs` | the operating charter + the WBS backlog |
50
+ | `lib/render.mjs` | `{{agent.*}}` token substitution (framework prompts stay generic) |
51
+
52
+ ## 3. The generation pipeline (init Phase 2.5)
53
+
54
+ A chosen `{ function, altitude }` + a hybrid **context pack** (a short interview for
55
+ what only the principal knows + autonomous research) drives the generators:
56
+
57
+ ```
58
+ config/agent.json {function, altitude}
59
+ │ resolveArchetype → operating profile
60
+ ▼
61
+ init-archetype → validate + normalise
62
+ generate-charter → config/operating-charter.md (towers, RACI/decision-rights,
63
+ autonomy, KPI tree, stakeholders, 30/60/90)
64
+ generate-backlog → state/backlog/wbs.yaml + seeded state/queues/* + config/priorities.yaml
65
+ generate-capability→ agents/*/agent.md (40–60 role + 13 standard), plugins/agent-skills/,
66
+ workflows/*, config/{agent-roster,event-routing,mcp-servers}.yaml
67
+ generate-cadences → config/cadences.yaml + launchd plists (archetype-specific schedule)
68
+ generate-autonomy → policies/action-classification.yaml (archetype-derived + gate-enforced)
69
+ generate-comms → policies/communication-profile.yaml (tone/register/channels)
70
+ ```
71
+
72
+ Skeletons are deterministic from the data spine; the wizard LLM-enriches the
73
+ company-specific content from the context pack. Every artifact is reviewed before
74
+ it goes live, and a **doctor acceptance gate** refuses to call init "done" until
75
+ the agent can actually work (charter present & placeholder-free, priorities
76
+ populated, backlog seeded, capability surface generated).
77
+
78
+ ## 4. What a freshly-initialised agent gets
79
+
80
+ Worked example — a fresh **VP, Regulatory & Licensing** (`compliance-officer × vp`):
81
+
82
+ - a 150-line **operating charter** (purpose, 8 control towers, a VP-calibrated
83
+ decision-rights matrix, Green/Amber/Red autonomy, escalation, KPI tree,
84
+ stakeholder map, first-90-days);
85
+ - a **seeded backlog** — streams → 30/60/90 phases → epics → tasks, with the
86
+ first-30-day tasks materialised as `open` queue items the backlog-executor
87
+ works on the first tick;
88
+ - a **capability surface** — ~45 sub-agents (13 standard infrastructure + ~32
89
+ role-tailored, altitude-scaled), 8 skills, 7 workflows, 6 MCP servers, and an
90
+ event→capability routing table;
91
+ - **archetype-specific cadences** (a compliance rhythm, not an engineering one);
92
+ - an **enforced autonomy policy** calibrated to the altitude (a VP escalates
93
+ binding external commitments; a founder owns them);
94
+ - a **communication profile** (register, formality, channel strategy, voice modes).
95
+
96
+ A C-suite altitude scales the same function up to ~65 sub-agents and broader
97
+ autonomy; a senior-manager scales it down to a hands-on core. The agent gets
98
+ straight to work — on role-true, company-specific work — the moment the daemon starts.
99
+
100
+ ## 5. Why it's enterprise-grade
101
+
102
+ - **Reproducible & auditable** — two same-archetype agents get byte-identical
103
+ skeletons; the operating model is data a risk committee can read and diff.
104
+ - **Versioned** — the archetype library is registered in `framework-features.json`;
105
+ `upgrade` re-renders charters/backlogs/cadences when it revs.
106
+ - **Enforced, not decorative** — autonomy bands compile to the per-action map the
107
+ comms/voice gate reads; CI guards keep confidential data and residual identity
108
+ out of the published framework.
109
+ - **Persona-agnostic** — framework prompts carry `{{agent.*}}` tokens rendered at
110
+ load time; only generated per-agent artifacts carry a name.
@@ -0,0 +1,115 @@
1
+ # Collective Memory & Org Mesh
2
+
3
+ > Cross-session global memory, concurrent-session presence, and inter-agent org
4
+ > coordination for Maestro. Status: implemented (file-backed, cohort-ready).
5
+
6
+ ## Why
7
+
8
+ A senior operator — human or AI — arriving at work needs, within seconds:
9
+
10
+ 1. **"What do I already know / what happened while I was away?"** → collective memory
11
+ 2. **"Who else is working right now, and on what?"** → presence
12
+ 3. **"Who's who in the org, what do they own, what are they heads-down on, and how
13
+ do I reach them or hand work off?"** → org mesh
14
+
15
+ …and every AI action must stay **observable by the responsible humans**.
16
+
17
+ Maestro already had the raw materials (per-agent FTS5 RAG, atomic session locks,
18
+ a channel bus, and charter/backlog/archetype data) but no layer that made any of
19
+ it *collective* across sessions or *legible* across agents. This feature adds that
20
+ layer. **Anti-bloat is the spine**: nothing here is allowed to balloon a session's
21
+ context — capture is distilled and async, recall is hard token-budgeted.
22
+
23
+ ## Three pillars
24
+
25
+ ### Pillar 1 — Collective memory (`lib/collective/`)
26
+
27
+ Every Claude Code session **on the machine** (not just daemon sessions — also the
28
+ operator's ad-hoc `claude` runs in any repo) contributes to, and recalls from, the
29
+ agent's long-term memory.
30
+
31
+ - **Capture (write).** A global `Stop`/`PreCompact` hook distills the finished
32
+ session (cheap model, async, time-boxed, **fail-open**) into small structured
33
+ **memory cards** — `decision | fact | artifact | openloop | entity` — and appends
34
+ them to `memory/collective/cards/<date>.jsonl`. **Never raw transcripts.** Trivial
35
+ sessions (no tool use / too short) are skipped. Honors a repo **denylist** and the
36
+ information-barrier policy.
37
+ - **Store.** `memory/collective/` is registered as a source for the *existing*
38
+ `lib/rag` FTS5 (+ optional embedding) index — reused, not rebuilt.
39
+ - **Recall (read).** A global `SessionStart` hook injects a **hard token-budgeted
40
+ digest** (`digestBudgetTokens`, default 1500): a one-line presence summary + the
41
+ top cards ranked by **relevance × recency-decay × salience**, MMR-deduped, plus a
42
+ pointer to `rag_search` / `collective recall` for more. The budget is the
43
+ anti-bloat control.
44
+ - **Cross-repo reach.** `~/.claude/maestro-agent.json` (written at `global-setup`)
45
+ names the agent repo so sessions in *any* directory find the store; absent → the
46
+ hooks no-op silently (safe on non-agent machines).
47
+
48
+ ### Pillar 2 — Presence (`lib/collective/presence.mjs`)
49
+
50
+ A file-backed session registry under `state/collective/presence/<sessionId>.json`,
51
+ using the same atomic-`wx` + fail-open idiom as `session-lock.mjs`. Each session
52
+ `register()`s on start, `heartbeat()`s on PostToolUse, and `deregister()`s on stop;
53
+ stale entries (no beat past `staleSec`) are reaped on read. Surfaced as the one-line
54
+ summary in the SessionStart digest ("2 other sessions active — daemon: inbox triage
55
+ (4m); ~/openclaw: interactive (just now)"), and via `scripts/collective/who.mjs`.
56
+
57
+ ### Pillar 3 — Org mesh (`lib/org/`)
58
+
59
+ - **Registry SoT.** `buildSelfEntry()` assembles this agent's directory entry from
60
+ data that already exists: identity (`config/agent.json`) + archetype
61
+ (function×altitude) + charter towers/decision-rights/autonomy + live backlog focus
62
+ (`state/queues`) + presence + comms coordinates. Published **file-backed**
63
+ (`state/org/self.json` + a merged `state/org/directory.json`) — works today, zero
64
+ infra — with a **cohort API client behind a flag** (`org.cohort.enabled`) that
65
+ publishes status + fetches the directory from `api.cohortapp.com/{org}/agents`,
66
+ aligned to the contract wundr's orchestrator-daemon already speaks. The human org
67
+ chart is a **pluggable directory source** (`file` | `google` | `slack`) wired when
68
+ credentials exist.
69
+ - **A2A handoff.** `sendHandoff()` emits a structured ` ```maestro-handoff ` JSON
70
+ envelope over the **existing Slack/email channel bus** to the target agent's
71
+ coordinates; the receiving daemon's classifier recognizes the envelope and enqueues
72
+ a provenance-tagged task. Because handoffs ride Slack/email, **humans see every
73
+ one** — observability by construction. Each is mirrored to `state/org/handoffs.jsonl`
74
+ and (optionally) a human channel.
75
+ - **Observability.** An `org-pulse` cadence posts "what every agent is focused on"
76
+ to a human channel daily; all collective/org actions are logged under
77
+ `logs/collective/` and `state/org/`.
78
+
79
+ ## Plumbing
80
+
81
+ - **`maestro global-setup`** (new, idempotent): deep-merges the three collective
82
+ hooks into `~/.claude/settings.json` (**never clobbering** existing hooks/plugins —
83
+ same deepMerge+timestamped-backup discipline wundr uses), writes a delimited,
84
+ idempotent block into `~/.claude/CLAUDE.md`, and writes the `~/.claude/maestro-agent.json`
85
+ pointer. Run automatically at the end of `init-agent.sh`, by `wundr install` (which
86
+ already detects + defers to maestro), and standalone. Verified by `maestro doctor`.
87
+ - **Config:** `config/collective.yaml` — `enabled`, `captureModel`, `digestBudgetTokens`,
88
+ `recencyHalfLifeDays`, `captureOn`, `repoDenylist`, `presence.{heartbeatSec,staleSec}`,
89
+ `org.{cohort,directorySource}`.
90
+
91
+ ## Anti-bloat invariants (enforced, not aspirational)
92
+
93
+ 1. SessionStart digest is hard-capped at `digestBudgetTokens` (default 1500).
94
+ 2. Capture is async, distilled (cheap model), time-boxed, and **fail-open** — it
95
+ never blocks or slows a session, and never stores raw transcripts.
96
+ 3. Recall ranks by relevance × recency-decay × salience and MMR-dedupes before the
97
+ budget cut.
98
+ 4. Presence is one summary line, never a dump.
99
+ 5. Everything is opt-out (`enabled: false`) and scoped (repo denylist + info-barriers).
100
+
101
+ ## Module map
102
+
103
+ | Module | Responsibility |
104
+ |---|---|
105
+ | `lib/collective/config.mjs` | Load `config/collective.yaml` + defaults; agent-root + pointer resolution; denylist check |
106
+ | `lib/collective/cards.mjs` | Memory-card schema, append/read JSONL, salience |
107
+ | `lib/collective/capture.mjs` | Distill a session → cards (pluggable distiller; Haiku default) |
108
+ | `lib/collective/presence.mjs` | Session registry: register/heartbeat/deregister/list/summary/reap |
109
+ | `lib/collective/recall.mjs` | Ranking (relevance×recency×salience), MMR, budgeted digest builder |
110
+ | `lib/org/registry.mjs` | Build/publish self entry; read merged directory |
111
+ | `lib/org/handoff.mjs` | Envelope build/parse, target resolution, send, record |
112
+ | `lib/org/cohort-client.mjs` | Optional cohort API client (publish status / fetch directory) |
113
+ | `scripts/collective/hook-runner.mjs` | Dispatch for the global prime/beat/capture hooks |
114
+ | `scripts/collective/{who,recall}.mjs` | Operator CLIs |
115
+ | `bin/maestro.mjs global-setup` | Idempotent global-config wiring |
@@ -0,0 +1,221 @@
1
+ # Continuous Inbound Monitoring & Autonomous Response Architecture
2
+
3
+ > How the agent watches Slack, WhatsApp, and Gmail continuously and responds autonomously.
4
+
5
+ ---
6
+
7
+ ## Overview
8
+
9
+ The the agent operating system operates a **continuous monitoring loop** across all communication channels. Unlike the scheduled workflows (morning brief, comms triage) which run at fixed times, the continuous monitor runs **perpetually** — polling channels every 30-120 seconds and dispatching responses based on urgency, classification, and approval rules.
10
+
11
+ ### Two Response Modes
12
+
13
+ 1. **Direct Response** — the agent's main orchestrating Claude Code session handles simple/routine inbound items directly (acknowledgements, status updates, scheduling, routine follow-ups)
14
+ 2. **Spawned Session** — For complex inbound tasks that require deep work (research, analysis, document preparation, multi-step coordination), the agent spawns a dedicated Claude Code sub-session that works independently and reports back
15
+
16
+ ```
17
+ ┌─────────────────────────────────────────────────────────┐
18
+ │ CONTINUOUS MONITORING LOOP │
19
+ │ │
20
+ │ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
21
+ │ │ Slack │ │ WhatsApp │ │ Gmail │ │
22
+ │ │ Monitor │ │ Monitor │ │ Monitor │ │
23
+ │ └────┬─────┘ └────┬─────┘ └──────┬───────┘ │
24
+ │ │ │ │ │
25
+ │ └──────────────┼───────────────┘ │
26
+ │ ▼ │
27
+ │ ┌──────────────────┐ │
28
+ │ │ Inbound │ │
29
+ │ │ Dispatcher │ │
30
+ │ └────────┬─────────┘ │
31
+ │ │ │
32
+ │ ┌──────────┼──────────┐ │
33
+ │ ▼ ▼ ▼ │
34
+ │ ┌─────────┐ ┌────────┐ ┌─────────┐ │
35
+ │ │ Simple │ │ Queue │ │ Complex │ │
36
+ │ │ Direct │ │ for │ │ Spawn │ │
37
+ │ │ Reply │ │ Review │ │ Session │ │
38
+ │ └─────────┘ └────────┘ └─────────┘ │
39
+ │ │
40
+ └─────────────────────────────────────────────────────────┘
41
+ ```
42
+
43
+ ---
44
+
45
+ ## Monitoring Loop Intervals
46
+
47
+ | Channel | Poll Interval | Method | Scope |
48
+ | -------- | ------------- | ----------------------- | ---------------------------------- |
49
+ | Slack | 60 seconds | Desktop app observation | Priority channels + DMs + mentions |
50
+ | Gmail | 120 seconds | Browser observation | Unread inbox, priority senders |
51
+ | WhatsApp | 120 seconds | Desktop app observation | Business-tagged contacts only |
52
+
53
+ These run as **persistent background processes** via launchd, independent of the main Claude Code session.
54
+
55
+ ---
56
+
57
+ ## Inbound Classification
58
+
59
+ Every inbound message is classified along three dimensions:
60
+
61
+ ### 1. Urgency
62
+
63
+ | Level | Criteria | Response SLA |
64
+ | ------------ | ------------------------------------------------------------ | ----------------------------- |
65
+ | **Critical** | From the principal, regulator, or flagged-urgent contact | < 5 minutes (immediate alert) |
66
+ | **High** | From investor, board member, acquisition target, senior team | < 30 minutes |
67
+ | **Normal** | From team member, known contact, routine business | < 2 hours |
68
+ | **Low** | Newsletter, notification, non-actionable | Next scheduled triage |
69
+
70
+ ### 2. Complexity
71
+
72
+ | Level | Criteria | Response Mode |
73
+ | ------------ | ------------------------------------------------------------- | ----------------------------------- |
74
+ | **Simple** | Acknowledgement, yes/no, scheduling, status update | Direct reply from main session |
75
+ | **Moderate** | Requires context lookup, short analysis, or coordination | Direct reply with research |
76
+ | **Complex** | Requires deep analysis, document preparation, multi-step work | Spawn dedicated Claude Code session |
77
+
78
+ ### 3. Risk
79
+
80
+ | Level | Criteria | Approval |
81
+ | ---------- | -------------------------------------------------------- | ------------------------- |
82
+ | **Low** | Internal team, routine content | Auto-send (pre-approved) |
83
+ | **Medium** | External known contact, substantive content | Draft + queue for review |
84
+ | **High** | Investor, regulator, board, M&A, financial/legal content | Draft + explicit approval |
85
+
86
+ ---
87
+
88
+ ## Autonomous Response Rules
89
+
90
+ the agent can respond autonomously (without the principal's approval) to:
91
+
92
+ ### Auto-Respond (Send Immediately, Log All)
93
+
94
+ - Internal team messages requesting status updates
95
+ - Acknowledgements to known contacts ("Thanks, received — reviewing now")
96
+ - Calendar confirmations and scheduling responses
97
+ - Follow-up chasers for items already approved
98
+ - Internal Slack thread replies continuing approved conversation threads
99
+
100
+ ### Draft-and-Hold (Send After Review)
101
+
102
+ - First-contact replies to external parties
103
+ - Substantive responses containing analysis or recommendations
104
+ - Any reply that creates a commitment or deadline
105
+ - Messages to contacts classified as investor/board/regulator
106
+
107
+ ### Escalate Immediately (Alert the principal)
108
+
109
+ - Messages from regulators (the regulator, MAS, FCA, SEC, etc.)
110
+ - Messages flagged as urgent from any channel
111
+ - Messages containing legal threats or compliance issues
112
+ - Messages from acquisition targets or their advisors
113
+
114
+ ---
115
+
116
+ ## Session Spawning
117
+
118
+ When an inbound item requires complex work, the agent spawns a dedicated Claude Code session:
119
+
120
+ ### When to Spawn
121
+
122
+ - Research request requiring web searches and analysis (> 5 minutes of work)
123
+ - Document preparation (memo, brief, analysis, board material)
124
+ - Multi-repo investigation (checking code, regulatory docs, strategy docs)
125
+ - Due diligence task on a rollup target
126
+ - Complex email requiring context assembly from multiple sources
127
+ - Any task that would block the main monitoring loop for > 3 minutes
128
+
129
+ ### Spawn Mechanism
130
+
131
+ ```bash
132
+ # the agent spawns a sub-session with a specific task
133
+ claude --dangerously-skip-permissions \
134
+ -p "You are working for a Maestro agent
135
+ Task: {task_description}
136
+ Context: {assembled_context}
137
+ Deliver output to: {output_path}
138
+ When complete, write a summary to: {completion_signal_path}" \
139
+ --output-format text \
140
+ > logs/sessions/{session_id}.log 2>&1 &
141
+ ```
142
+
143
+ ### Session Contract
144
+
145
+ Each spawned session receives:
146
+
147
+ - **Task description** — What needs to be done
148
+ - **Context** — Relevant knowledge, conversation history, source material
149
+ - **Output path** — Where to write the deliverable
150
+ - **Completion signal** — File path to write when done (monitored by main session)
151
+ - **Time budget** — Maximum runtime before auto-termination
152
+ - **Scope boundary** — What repos/files the session may access
153
+
154
+ ### Session Types
155
+
156
+ | Type | Use Case | Time Budget | Example |
157
+ | --------------- | ------------------------------- | ----------- | ---------------------------------------------------------------- |
158
+ | Quick Research | Look something up, summarise | 5 min | "What's the latest on the regulator AI governance guidelines?" |
159
+ | Draft Response | Prepare a reply needing context | 10 min | Complex email reply needing rollup strategy context |
160
+ | Analysis | Deep dive on a topic | 30 min | Competitive intelligence report on a new entrant |
161
+ | Document Prep | Create a deliverable | 60 min | Board readiness assessment, target briefing |
162
+ | Multi-Repo Task | Cross-codebase investigation | 30 min | Check the regulator gap status across the regulatory-submission and platform repos |
163
+
164
+ ### Session Lifecycle
165
+
166
+ ```
167
+ Spawn → Execute → Write Output → Signal Completion → Main Session Reviews → Route Output
168
+ ```
169
+
170
+ 1. **Spawn**: Main session creates the task with full context
171
+ 2. **Execute**: Sub-session works independently
172
+ 3. **Output**: Sub-session writes deliverable to `outputs/sessions/{id}/`
173
+ 4. **Signal**: Sub-session writes completion marker
174
+ 5. **Review**: Main session reads output, verifies quality
175
+ 6. **Route**: Main session delivers output (send reply, file memo, update memory, etc.)
176
+
177
+ ---
178
+
179
+ ## Monitoring Process Architecture
180
+
181
+ ### launchd Services
182
+
183
+ Three persistent monitoring services, each as a launchd daemon:
184
+
185
+ 1. **ai.maestro.monitor.slack** — Slack observation loop
186
+ 2. **ai.maestro.monitor.gmail** — Gmail observation loop
187
+ 3. **ai.maestro.monitor.whatsapp** — WhatsApp observation loop
188
+
189
+ Plus one dispatcher:
190
+
191
+ 4. **ai.maestro.dispatcher** — Classifies and routes inbound items
192
+
193
+ ### Main Session Role
194
+
195
+ The main Claude Code session (the agent) runs continuously and:
196
+
197
+ - Reads the inbound queue populated by monitors
198
+ - Classifies items by urgency/complexity/risk
199
+ - Handles simple items directly
200
+ - Spawns sessions for complex items
201
+ - Reviews outputs from spawned sessions
202
+ - Manages the response queue
203
+ - Maintains executive memory and state
204
+
205
+ ### Failure Handling
206
+
207
+ - If a monitor crashes, launchd restarts it automatically
208
+ - If the main session crashes, monitors continue queueing — items are processed on restart
209
+ - Spawned sessions have time budgets — they are killed if they exceed them
210
+ - All inbound items are persisted to disk before processing (no data loss on crash)
211
+
212
+ ---
213
+
214
+ ## Security Considerations
215
+
216
+ - Monitors are **observe-only** — they cannot send messages
217
+ - Only the main session (or approved spawned sessions) can send
218
+ - All autonomous sends are logged with full content and recipient
219
+ - Rate limits apply even to autonomous responses
220
+ - The emergency stop halts all monitoring and response
221
+ - Session spawning is logged with task description and scope