@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,159 @@
1
+ # CAPABILITY PACK — commercial-leader
2
+ #
3
+ # The role's capability CATALOGUE: the MCP servers/plugins it needs, its sub-agent
4
+ # org (teams of role specs), its Claude Code skills, and its workflows. Resolved by
5
+ # lib/capability.mjs into a concrete capability surface, with breadth scaled by the
6
+ # altitude's delegationBreadth (broad → all teams+roles; moderate → drop support
7
+ # tiers; narrow → core teams only; none → standard defaults only). The init wizard
8
+ # (Phase 2.5) renders sub-agent definitions / skills / workflows from this and
9
+ # LLM-tailors each to the company context.
10
+ #
11
+ # Function overlay: archetypes/functions/commercial-leader.yaml (CRO / CCO / VP-Sales
12
+ # / Head of BD / IR axis). Teams align to its towers: pipeline-deals,
13
+ # partnerships-alliances, investor-relations, revenue-operations, market-intelligence,
14
+ # customer-success, commercial-governance. Tiers: lead | core | support.
15
+ # Models: opus | sonnet | haiku.
16
+
17
+ mcpServers:
18
+ - { id: gmail, purpose: "Send and search email for outreach, deal threads, investor updates, and renewal comms under the agent's identity", env: [GMAIL_OAUTH_TOKEN], optional: false }
19
+ - { id: google-calendar, purpose: "Deal reviews, QBRs, investor cadence, partner syncs, and prospect meeting scheduling", env: [GOOGLE_CALENDAR_TOKEN], optional: false }
20
+ - { id: crm, purpose: "Read/write opportunities, accounts, contacts, pipeline stages, and forecast roll-up (Salesforce or HubSpot)", env: [CRM_API_TOKEN, CRM_INSTANCE_URL], optional: true }
21
+ - { id: linkedin, purpose: "Prospect and account research, social-selling touches, and relationship mapping for BD and partnerships", env: [LINKEDIN_SESSION_TOKEN], optional: true }
22
+ - { id: data-enrichment, purpose: "Firmographic, technographic, and contact enrichment for target-account scoring and list build", env: [ENRICHMENT_API_KEY], optional: true }
23
+ - { id: playwright, purpose: "Drive CRM consoles, BI dashboards, data rooms, and partner portals that lack a clean API", optional: true }
24
+
25
+ skills:
26
+ - { id: deal-review, name: "Deal review", trigger: "a top deal needs inspection or a forecast review is due", purpose: "Inspect close plan, MEDDICC qualification, risks, and next steps for a named opportunity" }
27
+ - { id: pipeline-inspection, name: "Pipeline inspection", trigger: "weekly cadence or coverage falls below target", purpose: "Audit coverage, stage hygiene, slipped deals, and aging to surface pipeline risk" }
28
+ - { id: forecast-call, name: "Forecast call", trigger: "the forecast submission deadline approaches", purpose: "Reconcile commit/best-case/pipeline, weight by stage, and produce the official forecast call" }
29
+ - { id: win-loss-debrief, name: "Win/loss debrief", trigger: "a deal closes won or lost", purpose: "Capture decision drivers, competitor, pricing, and lessons; feed battlecards and packaging" }
30
+ - { id: investor-update, name: "Investor update", trigger: "monthly investor cadence or a board pack is due", purpose: "Draft the investor/board update from KPI actuals, narrative, and asks" }
31
+ - { id: account-plan, name: "Strategic account plan", trigger: "a target or strategic account needs a plan or QBR", purpose: "Build whitespace, relationship map, expansion thesis, and a 90-day action plan" }
32
+ - { id: deal-desk-review, name: "Deal-desk review", trigger: "a non-standard discount, term, or structure is requested", purpose: "Assess pricing, margin, and contract risk against guardrails and route for approval" }
33
+ - { id: outbound-sequence, name: "Outbound sequence design", trigger: "a new segment, persona, or campaign needs outreach", purpose: "Design a multi-touch, multi-channel sequence with messaging and qualification criteria" }
34
+ - { id: renewal-risk-review, name: "Renewal risk review", trigger: "a renewal enters the risk window or a health score drops", purpose: "Assess churn risk, usage and sentiment signals, and build the save/expansion play" }
35
+
36
+ workflows:
37
+ - { id: pipeline-inspection, name: "Weekly pipeline inspection", cadence: weekly, purpose: "Roll up coverage, stage conversion, slip, and aging; flag at-risk deals to the principal" }
38
+ - { id: forecast-cycle, name: "Forecast cycle", cadence: weekly, purpose: "Refresh the commit call, reconcile reps' forecasts, and report variance to plan" }
39
+ - { id: deal-review, name: "Top-deal review", cadence: weekly, purpose: "Inspect the top opportunities by value and risk; drive close-plan actions into the backlog" }
40
+ - { id: investor-cadence, name: "Investor cadence", cadence: monthly, purpose: "Produce the investor/board update and keep the data room and cap-table view current" }
41
+ - { id: qbr-cycle, name: "Quarterly business review", cadence: quarterly, purpose: "Run segment/territory QBRs covering attainment, pipeline, retention, and partner contribution" }
42
+ - { id: renewal-cadence, name: "Renewal & retention cadence", cadence: weekly, purpose: "Work the renewal book by risk window; drive saves, expansions, and reference health" }
43
+ - { id: competitive-watch, name: "Competitive watch", cadence: event-driven, purpose: "Track competitor moves and win/loss signal; refresh battlecards and alert deal teams" }
44
+
45
+ agentTeams:
46
+ - id: pipeline-management
47
+ name: "Pipeline & Deal Management"
48
+ tower: pipeline-deals
49
+ core: true
50
+ agents:
51
+ - { id: pipeline-lead, role: "Head of Pipeline & Deals", mandate: "Own coverage, stage progression, deal hygiene, and the close-plan discipline across the pipeline.", model: opus, tier: lead, towers: [pipeline-deals] }
52
+ - { id: deal-inspector, role: "Deal Inspector", mandate: "Inspect top opportunities for qualification rigour, risk, and credible close plans.", model: sonnet, tier: core, towers: [pipeline-deals] }
53
+ - { id: deal-qualification-analyst, role: "Deal Qualification Analyst", mandate: "Enforce MEDDICC/qualification standards and flag deals lacking economic buyer or decision criteria.", model: sonnet, tier: core, towers: [pipeline-deals] }
54
+ - { id: sales-cycle-analyst, role: "Sales-Cycle Analyst", mandate: "Track time-in-stage, velocity, and slip to expose where deals stall.", model: haiku, tier: support, towers: [pipeline-deals, revenue-operations] }
55
+ - { id: deal-hygiene-steward, role: "Deal-Hygiene Steward", mandate: "Keep next-steps, close dates, and stage data accurate so the pipeline tells the truth.", model: haiku, tier: support, towers: [pipeline-deals] }
56
+ - { id: proposal-coordinator, role: "Proposal & RFP Coordinator", mandate: "Assemble proposals and RFP responses on time with the right pricing and proof points.", model: sonnet, tier: support, towers: [pipeline-deals] }
57
+
58
+ - id: outbound-sdr
59
+ name: "Outbound & SDR"
60
+ tower: pipeline-deals
61
+ core: false
62
+ agents:
63
+ - { id: outbound-lead, role: "Head of Outbound & SDR", mandate: "Own top-of-funnel creation: sequences, SDR productivity, and qualified-pipeline targets.", model: opus, tier: lead, towers: [pipeline-deals] }
64
+ - { id: sequence-strategist, role: "Sequence Strategist", mandate: "Design multi-touch, multi-channel cadences and messaging tuned per persona and segment.", model: sonnet, tier: core, towers: [pipeline-deals] }
65
+ - { id: list-build-analyst, role: "List-Build & Targeting Analyst", mandate: "Build and score target-account and contact lists from firmographic and intent signals.", model: haiku, tier: core, towers: [pipeline-deals, market-intelligence] }
66
+ - { id: sdr-coach, role: "SDR Coach & QA", mandate: "Review outreach quality, call notes, and disposition discipline to lift conversion.", model: haiku, tier: support, towers: [pipeline-deals] }
67
+ - { id: meeting-setter, role: "Meeting-Set & Handoff Coordinator", mandate: "Book qualified meetings and hand off cleanly to AEs with full context.", model: haiku, tier: support, towers: [pipeline-deals] }
68
+
69
+ - id: partnerships-alliances
70
+ name: "Partnerships & Alliances"
71
+ tower: partnerships-alliances
72
+ core: true
73
+ agents:
74
+ - { id: partnerships-lead, role: "Head of Partnerships & Alliances", mandate: "Own the channel, reseller, and strategic-alliance portfolio and its sourced-revenue target.", model: opus, tier: lead, towers: [partnerships-alliances] }
75
+ - { id: alliance-manager, role: "Strategic Alliance Manager", mandate: "Develop and deepen named strategic alliances toward joint solutions and co-sell pipeline.", model: sonnet, tier: core, towers: [partnerships-alliances] }
76
+ - { id: channel-manager, role: "Channel & Reseller Manager", mandate: "Recruit, enable, and manage resellers to hit partner-sourced revenue.", model: sonnet, tier: core, towers: [partnerships-alliances] }
77
+ - { id: cosell-coordinator, role: "Co-Sell Coordinator", mandate: "Orchestrate co-sell motions and joint deals between partner and direct teams.", model: haiku, tier: support, towers: [partnerships-alliances, pipeline-deals] }
78
+ - { id: partner-enablement-analyst, role: "Partner Enablement Analyst", mandate: "Keep partner training, assets, and certification current and adopted.", model: haiku, tier: support, towers: [partnerships-alliances] }
79
+ - { id: partner-ops-analyst, role: "Partner Operations Analyst", mandate: "Track partner-pipeline coverage, deal registration, and contribution attribution.", model: haiku, tier: support, towers: [partnerships-alliances, revenue-operations] }
80
+
81
+ - id: investor-relations
82
+ name: "Investor Relations & Capital Markets"
83
+ tower: investor-relations
84
+ core: true
85
+ agents:
86
+ - { id: ir-lead, role: "Head of Investor Relations", mandate: "Own the investor narrative, reporting rhythm, and raise readiness with the board and investors.", model: opus, tier: lead, towers: [investor-relations] }
87
+ - { id: investor-update-author, role: "Investor Update Author", mandate: "Draft monthly investor and board updates from KPI actuals, narrative, and asks.", model: sonnet, tier: core, towers: [investor-relations] }
88
+ - { id: capital-markets-analyst, role: "Capital Markets Analyst", mandate: "Model raise scenarios, dilution, and comparables to support fundraising decisions.", model: opus, tier: core, towers: [investor-relations] }
89
+ - { id: data-room-steward, role: "Data-Room Steward", mandate: "Keep the diligence data room organised, current, and audit-ready ahead of any raise.", model: haiku, tier: support, towers: [investor-relations, commercial-governance] }
90
+ - { id: cap-table-analyst, role: "Cap-Table Analyst", mandate: "Maintain a clean cap-table view and option-pool tracking for investor reporting.", model: haiku, tier: support, towers: [investor-relations] }
91
+ - { id: investor-pipeline-coordinator, role: "Investor Pipeline Coordinator", mandate: "Track investor outreach, meetings, and follow-ups across the fundraising funnel.", model: haiku, tier: support, towers: [investor-relations] }
92
+
93
+ - id: revenue-operations
94
+ name: "Revenue Operations & Forecasting"
95
+ tower: revenue-operations
96
+ core: true
97
+ agents:
98
+ - { id: revops-lead, role: "Head of Revenue Operations", mandate: "Own forecast discipline, CRM integrity, and the commercial analytics that run the business.", model: opus, tier: lead, towers: [revenue-operations] }
99
+ - { id: forecast-analyst, role: "Forecast Analyst", mandate: "Reconcile reps' forecasts, weight by stage, and produce an accurate, defensible commit call.", model: sonnet, tier: core, towers: [revenue-operations] }
100
+ - { id: pipeline-analytics-engineer, role: "Pipeline Analytics Engineer", mandate: "Build and maintain pipeline, conversion, and velocity reporting the leader trusts.", model: sonnet, tier: core, towers: [revenue-operations] }
101
+ - { id: territory-quota-designer, role: "Territory & Quota Designer", mandate: "Design balanced territories and quota/comp structures aligned to the revenue plan.", model: sonnet, tier: core, towers: [revenue-operations] }
102
+ - { id: crm-integrity-steward, role: "CRM Integrity Steward", mandate: "Enforce data standards, dedupe, and field completeness so the CRM is the source of truth.", model: haiku, tier: support, towers: [revenue-operations] }
103
+ - { id: sales-comp-analyst, role: "Sales Compensation Analyst", mandate: "Model and reconcile commission attainment and flag plan distortions.", model: haiku, tier: support, towers: [revenue-operations, commercial-governance] }
104
+
105
+ - id: market-intelligence
106
+ name: "Competitive & Market Intelligence"
107
+ tower: market-intelligence
108
+ core: false
109
+ agents:
110
+ - { id: market-intel-lead, role: "Head of Competitive & Market Intelligence", mandate: "Own win/loss insight, competitor tracking, and the segment/TAM signal that shapes go-to-market.", model: opus, tier: lead, towers: [market-intelligence] }
111
+ - { id: win-loss-analyst, role: "Win/Loss Analyst", mandate: "Run structured win/loss debriefs and turn decision drivers into actionable patterns.", model: sonnet, tier: core, towers: [market-intelligence] }
112
+ - { id: competitor-analyst, role: "Competitor Analyst", mandate: "Track competitor moves, pricing, and positioning; alert deal teams to threats.", model: sonnet, tier: core, towers: [market-intelligence] }
113
+ - { id: battlecard-author, role: "Battlecard Author", mandate: "Keep battlecards current with objection handling and differentiated proof points.", model: haiku, tier: support, towers: [market-intelligence] }
114
+ - { id: market-sizing-analyst, role: "Market Sizing & Segment Analyst", mandate: "Quantify TAM/SAM/SOM and segment attractiveness to focus pipeline generation.", model: haiku, tier: support, towers: [market-intelligence] }
115
+
116
+ - id: customer-success
117
+ name: "Customer Success & Retention"
118
+ tower: customer-success
119
+ core: true
120
+ agents:
121
+ - { id: cs-lead, role: "Head of Customer Success", mandate: "Own net revenue retention, renewals, expansion, and the health of the installed base.", model: opus, tier: lead, towers: [customer-success] }
122
+ - { id: renewals-manager, role: "Renewals Manager", mandate: "Work the renewal book by risk window to protect gross retention and on-time renewals.", model: sonnet, tier: core, towers: [customer-success] }
123
+ - { id: expansion-strategist, role: "Expansion & Upsell Strategist", mandate: "Identify whitespace and usage signals to drive cross-sell and upsell into the base.", model: sonnet, tier: core, towers: [customer-success, pipeline-deals] }
124
+ - { id: churn-risk-analyst, role: "Churn-Risk Analyst", mandate: "Score churn risk from usage, sentiment, and engagement and trigger save plays early.", model: haiku, tier: core, towers: [customer-success] }
125
+ - { id: customer-health-analyst, role: "Customer Health Analyst", mandate: "Maintain health scores and adoption signals across the account portfolio.", model: haiku, tier: support, towers: [customer-success] }
126
+ - { id: reference-advocacy-coordinator, role: "Reference & Advocacy Coordinator", mandate: "Cultivate references, case studies, and advocates to fuel new-logo sales.", model: haiku, tier: support, towers: [customer-success] }
127
+
128
+ - id: pricing-deal-desk
129
+ name: "Pricing & Commercial Governance"
130
+ tower: commercial-governance
131
+ core: true
132
+ agents:
133
+ - { id: deal-desk-lead, role: "Head of Deal Desk & Pricing", mandate: "Own pricing policy, discount guardrails, and the deal-desk approval path for non-standard terms.", model: opus, tier: lead, towers: [commercial-governance] }
134
+ - { id: pricing-strategist, role: "Pricing & Packaging Strategist", mandate: "Design pricing and packaging that maximise value capture and win rate.", model: sonnet, tier: core, towers: [commercial-governance] }
135
+ - { id: deal-desk-analyst, role: "Deal-Desk Analyst", mandate: "Review discount and margin requests against guardrails and structure compliant deals.", model: sonnet, tier: core, towers: [commercial-governance, pipeline-deals] }
136
+ - { id: contracts-analyst, role: "Commercial Contracts Analyst", mandate: "Vet contract terms and non-standard clauses for commercial and revenue-recognition risk.", model: haiku, tier: support, towers: [commercial-governance] }
137
+ - { id: discount-governance-analyst, role: "Discount Governance Analyst", mandate: "Monitor discounting trends and margin leakage and surface policy breaches.", model: haiku, tier: support, towers: [commercial-governance, revenue-operations] }
138
+
139
+ - id: commercial-enablement
140
+ name: "Commercial Enablement & Productivity"
141
+ tower: pipeline-deals
142
+ core: false
143
+ agents:
144
+ - { id: enablement-lead, role: "Head of Commercial Enablement", mandate: "Own onboarding, ramp, and ongoing enablement that lift seller productivity and ramp time.", model: opus, tier: lead, towers: [pipeline-deals] }
145
+ - { id: onboarding-designer, role: "Onboarding & Ramp Designer", mandate: "Build onboarding paths that shorten time-to-first-deal for new sellers.", model: sonnet, tier: core, towers: [pipeline-deals] }
146
+ - { id: sales-content-curator, role: "Sales Content Curator", mandate: "Maintain pitch decks, one-pagers, and proof assets aligned to current positioning.", model: haiku, tier: core, towers: [pipeline-deals, market-intelligence] }
147
+ - { id: methodology-coach, role: "Sales Methodology Coach", mandate: "Reinforce the sales methodology and call-coaching standards across the team.", model: haiku, tier: support, towers: [pipeline-deals] }
148
+ - { id: enablement-analyst, role: "Enablement Effectiveness Analyst", mandate: "Measure enablement impact on ramp, attainment, and content usage.", model: haiku, tier: support, towers: [pipeline-deals, revenue-operations] }
149
+
150
+ - id: strategic-accounts
151
+ name: "Strategic & Enterprise Accounts"
152
+ tower: pipeline-deals
153
+ core: false
154
+ agents:
155
+ - { id: strategic-accounts-lead, role: "Head of Strategic Accounts", mandate: "Own the enterprise/named-account portfolio, account plans, and executive relationships.", model: opus, tier: lead, towers: [pipeline-deals] }
156
+ - { id: account-planner, role: "Strategic Account Planner", mandate: "Build whitespace, relationship maps, and expansion theses for named accounts.", model: sonnet, tier: core, towers: [pipeline-deals, customer-success] }
157
+ - { id: enterprise-deal-strategist, role: "Enterprise Deal Strategist", mandate: "Shape complex multi-stakeholder deals with value cases and close strategy.", model: sonnet, tier: core, towers: [pipeline-deals] }
158
+ - { id: exec-sponsor-coordinator, role: "Executive Sponsor Coordinator", mandate: "Orchestrate executive-sponsor touches and QBRs across strategic accounts.", model: haiku, tier: support, towers: [pipeline-deals] }
159
+ - { id: bid-management-analyst, role: "Bid Management Analyst", mandate: "Run large bids and tenders end-to-end with the right approvals and proof.", model: haiku, tier: support, towers: [pipeline-deals, commercial-governance] }
@@ -0,0 +1,159 @@
1
+ # CAPABILITY PACK — compliance-officer
2
+ #
3
+ # The role's capability CATALOGUE: the MCP servers/plugins it needs, its sub-agent
4
+ # org (teams of role specs), its Claude Code skills, and its workflows. Resolved by
5
+ # lib/capability.mjs into a concrete capability surface, with breadth scaled by the
6
+ # altitude's delegationBreadth (broad → all teams+roles; moderate → drop support
7
+ # tiers; narrow → core teams only; none → standard defaults only). The init wizard
8
+ # (Phase 2.5) renders sub-agent definitions / skills / workflows from this and
9
+ # LLM-tailors each to the company context.
10
+ #
11
+ # Function overlay: archetypes/functions/compliance-officer.yaml — teams align to its
12
+ # towers. Conservative, deadline-driven, documentation-first by construction: models
13
+ # skew sonnet/haiku, with many support-tier reviewers and four-eyes checkers. opus is
14
+ # reserved for genuinely strategic judgement (interpretation, regulator positioning,
15
+ # residual-risk acceptance, examination strategy).
16
+ #
17
+ # Tiers: lead | core | support. Models: opus | sonnet | haiku.
18
+
19
+ mcpServers:
20
+ - { id: google-drive, purpose: "Policy library, evidence packs, filing archives, attestation records", env: [GOOGLE_DRIVE_TOKEN], optional: false }
21
+ - { id: google-calendar, purpose: "Filing, renewal, attestation and remediation deadlines; examination diaries", env: [GOOGLE_CALENDAR_TOKEN], optional: false }
22
+ - { id: playwright, purpose: "Drive regulator portals and registry consoles that lack an API; capture lodgement evidence", optional: true }
23
+ - { id: filings-portal, purpose: "Statutory filing / submission portals (e-Services, regulator e-filing gateways)", env: [FILINGS_PORTAL_API_KEY], optional: true }
24
+ - { id: registry-portal, purpose: "Company / licence / approved-person registry lookups and change submissions", env: [REGISTRY_PORTAL_API_KEY], optional: true }
25
+ - { id: e-signature, purpose: "Execute attestations, board sign-offs and counsel engagement letters", env: [ESIGNATURE_API_KEY], optional: true }
26
+
27
+ skills:
28
+ - { id: regulatory-filing, name: "Regulatory filing preparation", trigger: "a statutory return or periodic report is due", purpose: "Assemble, four-eyes check, and lodge a filing with completeness/accuracy evidence" }
29
+ - { id: obligation-mapping, name: "Obligation mapping", trigger: "a rule change lands or a new activity is onboarded", purpose: "Map the applicable obligation to owners, controls, and evidence requirements" }
30
+ - { id: control-attestation, name: "Control attestation cycle", trigger: "monthly/quarterly attestation cadence", purpose: "Run control owner attestations, chase exceptions, and capture operating-effectiveness evidence" }
31
+ - { id: breach-assessment, name: "Breach & incident assessment", trigger: "a potential breach, error, or near-miss is identified", purpose: "Triage materiality, decide reportability, and open a remediation with a documented basis" }
32
+ - { id: regulatory-change-scan, name: "Regulatory change horizon scan", trigger: "weekly cadence or a consultation/rule is published", purpose: "Capture rule changes, assess impact, and raise implementation items ahead of effective dates" }
33
+ - { id: audit-evidence-pack, name: "Audit evidence pack assembly", trigger: "an examination, audit, or information request is notified", purpose: "Compile an indexed, source-linked evidence pack and a question-tracker for liaison" }
34
+ - { id: risk-assessment, name: "Risk assessment & treatment", trigger: "a new risk is raised or a periodic risk review is due", purpose: "Score inherent/residual risk, set treatment and KRIs, and route residual-risk acceptance" }
35
+ - { id: regulator-correspondence, name: "Regulator correspondence draft", trigger: "formal correspondence or a notification must go to a regulator", purpose: "Draft a conservative, on-record response with the supporting basis and escalation path" }
36
+
37
+ workflows:
38
+ - { id: filing-calendar, name: "Filing & renewal calendar run", cadence: daily, purpose: "Sweep upcoming statutory filings, licence renewals, and attestations; flag at-risk deadlines early" }
39
+ - { id: attestation-cycle, name: "Control attestation cycle", cadence: monthly, purpose: "Drive control owner attestations to completion and roll exceptions into remediation" }
40
+ - { id: regulatory-change-monitoring, name: "Regulatory change monitoring", cadence: weekly, purpose: "Horizon-scan rule changes, assess applicability, and open implementation items before effective dates" }
41
+ - { id: risk-register-review, name: "Risk register review", cadence: quarterly, purpose: "Refresh inherent/residual scores, KRI breaches, and residual-risk acceptances for the board read" }
42
+ - { id: breach-reporting, name: "Breach & incident reporting", cadence: event-driven, purpose: "Assess reportability, lodge regulatory notifications on time, and track remediation to close" }
43
+ - { id: compliance-board-report, name: "Board & committee compliance report", cadence: quarterly, purpose: "Roll up the compliance KPI tree, open findings, and risk posture into the committee pack" }
44
+ - { id: examination-readiness, name: "Examination readiness review", cadence: continuous, purpose: "Keep evidence packs current and run mock examinations so the entity is inspection-ready at all times" }
45
+
46
+ agentTeams:
47
+ - id: regulatory-filings-ops
48
+ name: "Regulatory Submissions & Filings"
49
+ tower: regulatory-filings
50
+ core: true
51
+ agents:
52
+ - { id: filings-lead, role: "Head of Regulatory Filings", mandate: "Own the statutory filing calendar end-to-end and guarantee complete, accurate, on-time lodgement.", model: opus, tier: lead, towers: [regulatory-filings] }
53
+ - { id: periodic-returns-officer, role: "Periodic Returns Officer", mandate: "Prepare recurring statutory returns and periodic reports against their schedules.", model: sonnet, tier: core, towers: [regulatory-filings] }
54
+ - { id: ad-hoc-filings-officer, role: "Ad-hoc Filings Officer", mandate: "Handle event-triggered and one-off filings, notifications, and corrective submissions.", model: sonnet, tier: core, towers: [regulatory-filings, reporting-disclosure] }
55
+ - { id: filing-data-validator, role: "Filing Data Validator", mandate: "Reconcile source data to filing figures and clear validation errors before lodgement.", model: haiku, tier: support, towers: [regulatory-filings] }
56
+ - { id: filing-reviewer, role: "Filing Four-Eyes Reviewer", mandate: "Independently second-check every filing for accuracy and completeness pre-submission.", model: haiku, tier: support, towers: [regulatory-filings] }
57
+ - { id: lodgement-evidence-clerk, role: "Lodgement Evidence Clerk", mandate: "Capture submission receipts and timestamps as evidence the moment a filing is lodged.", model: haiku, tier: support, towers: [regulatory-filings, audit-readiness] }
58
+
59
+ - id: licence-registration
60
+ name: "Licence & Registration Management"
61
+ tower: licence-management
62
+ core: true
63
+ agents:
64
+ - { id: licensing-lead, role: "Head of Licensing & Registrations", mandate: "Keep every permission, registration, and approved-person status current and condition-compliant.", model: opus, tier: lead, towers: [licence-management] }
65
+ - { id: renewals-officer, role: "Renewals Officer", mandate: "Track and execute licence and registration renewals with safe lead time.", model: sonnet, tier: core, towers: [licence-management] }
66
+ - { id: approved-persons-officer, role: "Approved-Persons Officer", mandate: "Maintain approved-person and controlled-function records, fitness, and propriety evidence.", model: sonnet, tier: core, towers: [licence-management] }
67
+ - { id: licence-conditions-tracker, role: "Licence Conditions Tracker", mandate: "Monitor outstanding conditions and undertakings and chase owners to closure.", model: haiku, tier: support, towers: [licence-management] }
68
+ - { id: registry-reconciler, role: "Registry Reconciler", mandate: "Reconcile internal records against public and regulator registries and flag drift.", model: haiku, tier: support, towers: [licence-management] }
69
+
70
+ - id: policy-controls-framework
71
+ name: "Policy Framework & Controls"
72
+ tower: policy-controls
73
+ core: true
74
+ agents:
75
+ - { id: policy-controls-lead, role: "Head of Policy & Controls", mandate: "Own the policy library design and the compliance control framework and its operating effectiveness.", model: opus, tier: lead, towers: [policy-controls] }
76
+ - { id: policy-author, role: "Policy Author", mandate: "Draft and revise policies and procedures and keep them mapped to obligations.", model: sonnet, tier: core, towers: [policy-controls] }
77
+ - { id: controls-designer, role: "Controls Designer", mandate: "Design controls against obligations and define their test scripts and evidence.", model: sonnet, tier: core, towers: [policy-controls] }
78
+ - { id: control-tester, role: "Control Tester", mandate: "Execute control tests, record pass/fail with evidence, and log exceptions.", model: haiku, tier: support, towers: [policy-controls, audit-readiness] }
79
+ - { id: attestation-coordinator, role: "Attestation Coordinator", mandate: "Run attestation campaigns and chase control owners to full completion.", model: haiku, tier: support, towers: [policy-controls] }
80
+ - { id: policy-librarian, role: "Policy Librarian", mandate: "Version, publish, and archive the policy library and track review due-dates.", model: haiku, tier: support, towers: [policy-controls] }
81
+
82
+ - id: monitoring-surveillance
83
+ name: "Monitoring & Surveillance"
84
+ tower: policy-controls
85
+ core: true
86
+ agents:
87
+ - { id: monitoring-lead, role: "Head of Compliance Monitoring", mandate: "Own the risk-based monitoring and surveillance programme across conduct and control breaches.", model: opus, tier: lead, towers: [policy-controls] }
88
+ - { id: surveillance-analyst, role: "Surveillance Analyst", mandate: "Review surveillance alerts and conduct exceptions and escalate substantiated cases.", model: sonnet, tier: core, towers: [policy-controls] }
89
+ - { id: thematic-reviewer, role: "Thematic Reviewer", mandate: "Run scheduled thematic compliance reviews and document findings and root cause.", model: sonnet, tier: core, towers: [policy-controls, audit-readiness] }
90
+ - { id: breach-triage-officer, role: "Breach Triage Officer", mandate: "Triage potential breaches and near-misses for materiality and reportability.", model: haiku, tier: support, towers: [policy-controls, reporting-disclosure] }
91
+ - { id: alert-disposition-clerk, role: "Alert Disposition Clerk", mandate: "Log alert dispositions and false-positive rationale to keep the audit trail complete.", model: haiku, tier: support, towers: [policy-controls] }
92
+
93
+ - id: audit-examination-readiness
94
+ name: "Audit & Examination Readiness"
95
+ tower: audit-readiness
96
+ core: true
97
+ agents:
98
+ - { id: audit-readiness-lead, role: "Head of Audit & Examination Readiness", mandate: "Own examination strategy and keep the entity inspection-ready with current evidence at all times.", model: opus, tier: lead, towers: [audit-readiness] }
99
+ - { id: regulator-liaison, role: "Regulator Liaison Officer", mandate: "Coordinate information requests and responses during examinations and supervisory engagement.", model: sonnet, tier: core, towers: [audit-readiness, reporting-disclosure] }
100
+ - { id: findings-remediation-manager, role: "Findings Remediation Manager", mandate: "Drive open findings to closure with owners, target dates, and verification evidence.", model: sonnet, tier: core, towers: [audit-readiness] }
101
+ - { id: mock-exam-runner, role: "Mock Examination Runner", mandate: "Run mock examinations and gap-tests and pre-empt likely regulator questions.", model: sonnet, tier: core, towers: [audit-readiness] }
102
+ - { id: evidence-pack-curator, role: "Evidence Pack Curator", mandate: "Assemble indexed, source-linked evidence packs for each audit and request.", model: haiku, tier: support, towers: [audit-readiness] }
103
+ - { id: audit-trail-clerk, role: "Audit Trail Clerk", mandate: "Verify evidence completeness and capture chain-of-custody for every artefact.", model: haiku, tier: support, towers: [audit-readiness] }
104
+
105
+ - id: enterprise-risk-register
106
+ name: "Enterprise Risk Register"
107
+ tower: risk-register
108
+ core: true
109
+ agents:
110
+ - { id: risk-register-lead, role: "Head of Enterprise Risk", mandate: "Run the risk lifecycle and own residual-risk acceptance against the board-set appetite.", model: opus, tier: lead, towers: [risk-register] }
111
+ - { id: risk-assessor, role: "Risk Assessor", mandate: "Score inherent and residual risk and recommend treatment for each register entry.", model: sonnet, tier: core, towers: [risk-register] }
112
+ - { id: kri-analyst, role: "KRI Analyst", mandate: "Maintain key-risk indicators, detect breaches, and trigger escalation.", model: sonnet, tier: core, towers: [risk-register] }
113
+ - { id: control-risk-mapper, role: "Control–Risk Mapper", mandate: "Link controls to risks and surface coverage gaps and unmitigated exposures.", model: sonnet, tier: core, towers: [risk-register, policy-controls] }
114
+ - { id: risk-review-coordinator, role: "Risk Review Coordinator", mandate: "Schedule periodic risk reviews and chase overdue reviews and treatment actions.", model: haiku, tier: support, towers: [risk-register] }
115
+ - { id: risk-register-clerk, role: "Risk Register Clerk", mandate: "Maintain register hygiene, IDs, and audit history of every risk entry.", model: haiku, tier: support, towers: [risk-register] }
116
+
117
+ - id: cross-jurisdiction
118
+ name: "Cross-Jurisdiction Compliance"
119
+ tower: cross-jurisdiction
120
+ core: false
121
+ agents:
122
+ - { id: cross-jurisdiction-lead, role: "Head of Cross-Jurisdiction Compliance", mandate: "Own the multi-regulator obligation map and resolve conflicts of law across the entity perimeter.", model: opus, tier: lead, towers: [cross-jurisdiction] }
123
+ - { id: obligation-mapper, role: "Obligation Mapper", mandate: "Map each jurisdiction's obligations to local entities, activities, and owners.", model: sonnet, tier: core, towers: [cross-jurisdiction] }
124
+ - { id: local-nexus-analyst, role: "Local-Entity Nexus Analyst", mandate: "Assess nexus and local-presence triggers and flag new registration obligations.", model: sonnet, tier: core, towers: [cross-jurisdiction, licence-management] }
125
+ - { id: conflict-of-law-reviewer, role: "Conflict-of-Law Reviewer", mandate: "Identify conflicting requirements across regimes and propose a conservative resolution.", model: sonnet, tier: support, towers: [cross-jurisdiction, legal-contracts] }
126
+ - { id: jurisdiction-tracker, role: "Jurisdiction Tracker", mandate: "Keep the per-jurisdiction obligation inventory and regulator contacts current.", model: haiku, tier: support, towers: [cross-jurisdiction] }
127
+
128
+ - id: reporting-disclosure
129
+ name: "Reporting & Disclosure"
130
+ tower: reporting-disclosure
131
+ core: false
132
+ agents:
133
+ - { id: reporting-lead, role: "Head of Regulatory Reporting & Disclosure", mandate: "Own regulatory notifications, market disclosures, and committee reporting accuracy and timeliness.", model: opus, tier: lead, towers: [reporting-disclosure] }
134
+ - { id: notifications-officer, role: "Regulatory Notifications Officer", mandate: "Prepare and lodge regulatory notifications within prescribed reporting windows.", model: sonnet, tier: core, towers: [reporting-disclosure] }
135
+ - { id: disclosure-drafter, role: "Market Disclosure Drafter", mandate: "Draft market and public disclosures and verify them against disclosure obligations.", model: sonnet, tier: core, towers: [reporting-disclosure] }
136
+ - { id: committee-reporting-officer, role: "Board & Committee Reporting Officer", mandate: "Assemble board and committee compliance packs from the KPI and findings tree.", model: sonnet, tier: support, towers: [reporting-disclosure] }
137
+ - { id: disclosure-qa-checker, role: "Disclosure QA Checker", mandate: "Four-eyes check disclosures for accuracy, completeness, and on-time release.", model: haiku, tier: support, towers: [reporting-disclosure] }
138
+
139
+ - id: legal-contracts
140
+ name: "Legal Obligations & Contracts"
141
+ tower: legal-contracts
142
+ core: false
143
+ agents:
144
+ - { id: legal-contracts-lead, role: "Head of Legal Obligations", mandate: "Own contractual obligation tracking, regulatory-clause coverage, and legal advice intake.", model: opus, tier: lead, towers: [legal-contracts] }
145
+ - { id: contract-obligation-tracker, role: "Contract Obligation Tracker", mandate: "Extract and track contractual obligations, covenants, and renewal triggers.", model: sonnet, tier: core, towers: [legal-contracts] }
146
+ - { id: regulatory-clause-reviewer, role: "Regulatory Clause Reviewer", mandate: "Check contracts for required regulatory clauses, flow-downs, and consents.", model: sonnet, tier: core, towers: [legal-contracts] }
147
+ - { id: counsel-liaison, role: "External Counsel Liaison", mandate: "Manage advice intake and engagement letters through the privileged channel.", model: sonnet, tier: support, towers: [legal-contracts] }
148
+ - { id: dispute-exposure-clerk, role: "Dispute & Enforcement Exposure Clerk", mandate: "Maintain the register of disputes, enforcement matters, and exposure status.", model: haiku, tier: support, towers: [legal-contracts] }
149
+
150
+ - id: regulatory-change-horizon
151
+ name: "Regulatory Change & Horizon Scanning"
152
+ tower: cross-jurisdiction
153
+ core: false
154
+ agents:
155
+ - { id: reg-change-lead, role: "Head of Regulatory Change", mandate: "Own horizon scanning and drive rule-change implementation ahead of effective dates.", model: opus, tier: lead, towers: [cross-jurisdiction] }
156
+ - { id: horizon-scanner, role: "Horizon Scanner", mandate: "Monitor consultations, rule-making, and guidance across the regulator perimeter.", model: sonnet, tier: core, towers: [cross-jurisdiction, reporting-disclosure] }
157
+ - { id: impact-assessor, role: "Regulatory Impact Assessor", mandate: "Assess applicability and operational impact of each change and size the response.", model: sonnet, tier: core, towers: [cross-jurisdiction, policy-controls] }
158
+ - { id: change-implementation-coordinator, role: "Change Implementation Coordinator", mandate: "Open and drive implementation items so changes land before they take effect.", model: sonnet, tier: support, towers: [cross-jurisdiction, policy-controls] }
159
+ - { id: rule-library-clerk, role: "Rule Library Clerk", mandate: "Maintain the obligation source library and link each rule to its owner and controls.", model: haiku, tier: support, towers: [cross-jurisdiction] }
@@ -0,0 +1,169 @@
1
+ # CAPABILITY PACK — executive-operator
2
+ #
3
+ # The role's capability CATALOGUE: the MCP servers/plugins it needs, its sub-agent
4
+ # org (teams of role specs), its Claude Code skills, and its workflows. Resolved by
5
+ # lib/capability.mjs into a concrete capability surface, with breadth scaled by the
6
+ # altitude's delegationBreadth (broad → all teams+roles; moderate → drop support
7
+ # tiers; narrow → core teams only; none → standard defaults only). The init wizard
8
+ # (Phase 2.5) renders sub-agent definitions / skills / workflows from this and
9
+ # LLM-tailors each to the company context.
10
+ #
11
+ # Function: the broadest cross-functional operator (Chief of Staff / COO-office /
12
+ # GM / founder's-operator). Owns the connective tissue — decisions, cadence,
13
+ # follow-through, narrative, institutional memory — and orchestrates oversight
14
+ # across every peer function rather than owning their substance. Teams map to the
15
+ # function-overlay towers: strategy-decisions, executive-office, operating-cadence,
16
+ # people-org, commercial-capital, board-narrative, governance-risk, systems-memory.
17
+ # Tiers: lead | core | support. Models: opus | sonnet | haiku.
18
+
19
+ mcpServers:
20
+ - { id: google-drive, purpose: "Strategy docs, decision memos, board packs, operating-review and source-of-truth files", env: [GOOGLE_DRIVE_CREDENTIALS], optional: false }
21
+ - { id: google-calendar, purpose: "Principal's agenda, operating-cadence meetings, board and leadership scheduling", env: [GOOGLE_CALENDAR_CREDENTIALS], optional: false }
22
+ - { id: gmail, purpose: "Inbox-to-outcome triage, commitment capture, stakeholder and board correspondence", env: [GMAIL_CREDENTIALS], optional: false }
23
+ - { id: slack, purpose: "Cross-functional coordination, blocker resolution, leadership-team channels and follow-through", env: [SLACK_BOT_TOKEN], optional: false }
24
+ - { id: notion, purpose: "Decision log, OKR tracker, commitments register, wiki and institutional-memory base", env: [NOTION_API_KEY], optional: true }
25
+ - { id: linear, purpose: "Cross-functional programme, PMO and action-item tracking against owners and dates", env: [LINEAR_API_KEY], optional: true }
26
+
27
+ skills:
28
+ - { id: decision-memo, name: "Decision memo", trigger: "a material cross-functional decision needs framing", purpose: "Frame the question, options, tradeoffs, recommendation and owner, and log the outcome to the decision register" }
29
+ - { id: commitment-tracking, name: "Commitment tracking", trigger: "a decision, meeting or inbound creates an action item", purpose: "Capture every commitment with an owner and date and drive it to closure with no dropped balls" }
30
+ - { id: operating-review, name: "Operating review", trigger: "weekly or monthly business-review cadence", purpose: "Roll up OKR, KPI, blocker and risk signals into a leadership operating-review pack" }
31
+ - { id: board-pack, name: "Board pack assembly", trigger: "a board or investor meeting is approaching", purpose: "Assemble the board narrative, metrics, decisions-sought and pre-reads, and track resulting board actions" }
32
+ - { id: meeting-orchestration, name: "Meeting orchestration", trigger: "a leadership or cross-functional meeting is convened", purpose: "Build the agenda, pre-reads and desired outcomes, then capture decisions and actions afterwards" }
33
+ - { id: okr-planning, name: "OKR and planning cycle", trigger: "a quarterly or annual planning cycle opens", purpose: "Translate strategy into owned objectives, cascade to functions, and wire roadmap traceability" }
34
+ - { id: stakeholder-brief, name: "Stakeholder brief", trigger: "the principal meets a board member, investor or key partner", purpose: "Prepare a tailored brief covering context, relationship state, talking points and the ask" }
35
+ - { id: risk-review, name: "Risk and governance review", trigger: "the risk register is reviewed or a control gap surfaces", purpose: "Refresh the enterprise risk register, chase overdue mitigations, and confirm audit readiness" }
36
+ - { id: weekly-priorities, name: "Weekly priorities digest", trigger: "start of the operating week", purpose: "Synthesise the principal's top priorities, at-risk commitments and the week's decisions into a single legible digest" }
37
+
38
+ workflows:
39
+ - { id: weekly-operating-review, name: "Weekly operating review", cadence: weekly, purpose: "Run the leadership operating cadence: surface on-track/at-risk OKRs, blockers and decisions needed, then publish the review" }
40
+ - { id: commitment-sweep, name: "Commitment closure sweep", cadence: daily, purpose: "Sweep open action items and commitments, chase ageing/overdue owners, and keep the register clean" }
41
+ - { id: inbox-to-outcome, name: "Inbox-to-outcome triage", cadence: continuous, purpose: "Convert the principal's inbox and inbound channels into routed actions, decisions and tracked commitments" }
42
+ - { id: board-cadence, name: "Board and investor cadence", cadence: quarterly, purpose: "Drive the board meeting cycle end to end — pre-reads, pack, decisions-sought and post-meeting action closure" }
43
+ - { id: quarterly-planning, name: "Quarterly planning and OKRs", cadence: quarterly, purpose: "Open and run the planning cycle: refresh strategy, set objectives, cascade owners and lock roadmap traceability" }
44
+ - { id: leadership-meeting-cycle, name: "Leadership meeting cycle", cadence: weekly, purpose: "Architect, pre-read, capture and follow up the recurring leadership-team and exec-staff meetings" }
45
+ - { id: enterprise-risk-review, name: "Enterprise risk review", cadence: monthly, purpose: "Refresh the risk register, escalate high-severity items, and confirm policy/control and audit readiness" }
46
+
47
+ agentTeams:
48
+ - id: strategy-decisions
49
+ name: "Strategy & Decisions"
50
+ tower: strategy-decisions
51
+ core: true
52
+ agents:
53
+ - { id: strategy-chief-of-staff, role: "Strategy Chief of Staff", mandate: "Own the strategic-priority set and decision pipeline, framing options and arbitrating tradeoffs on the principal's behalf.", model: opus, tier: lead, towers: [strategy-decisions] }
54
+ - { id: decision-architect, role: "Decision Architect", mandate: "Design how each material decision is framed, sequenced and owned, and keep the decision log complete and current.", model: opus, tier: core, towers: [strategy-decisions, executive-office] }
55
+ - { id: options-analyst, role: "Options & Tradeoff Analyst", mandate: "Build the option sets, scenarios and tradeoff analysis behind major decisions.", model: sonnet, tier: core, towers: [strategy-decisions] }
56
+ - { id: strategy-research-lead, role: "Strategic Research Lead", mandate: "Run market, competitive and internal research that feeds the strategy and decision pipeline.", model: sonnet, tier: core, towers: [strategy-decisions] }
57
+ - { id: decision-log-keeper, role: "Decision-Log Keeper", mandate: "Maintain decision-record integrity — context, rationale and outcome — for every logged call.", model: haiku, tier: support, towers: [strategy-decisions, systems-memory] }
58
+
59
+ - id: executive-office
60
+ name: "Executive Office & Follow-Through"
61
+ tower: executive-office
62
+ core: true
63
+ agents:
64
+ - { id: chief-of-staff, role: "Chief of Staff", mandate: "Run the principal's office — agenda, commitments and inbox-to-outcome conversion — so nothing is dropped.", model: opus, tier: lead, towers: [executive-office] }
65
+ - { id: commitments-registrar, role: "Commitments Registrar", mandate: "Capture every decision and action item with an owner and date and drive each to closure.", model: sonnet, tier: core, towers: [executive-office] }
66
+ - { id: principal-agenda-manager, role: "Principal's Agenda Manager", mandate: "Protect and prioritise the principal's time against the live priority set.", model: sonnet, tier: core, towers: [executive-office, operating-cadence] }
67
+ - { id: exec-inbox-lead, role: "Executive Inbox Lead", mandate: "Triage the principal's inbox into actions, delegations and tracked commitments.", model: sonnet, tier: core, towers: [executive-office] }
68
+ - { id: briefing-coordinator, role: "Briefing Coordinator", mandate: "Assemble pre-reads and briefing packs ahead of every meeting on the principal's calendar.", model: haiku, tier: support, towers: [executive-office, board-narrative] }
69
+ - { id: follow-through-tracker, role: "Follow-Through Tracker", mandate: "Chase ageing and overdue commitments and escalate stalls before balls drop.", model: haiku, tier: support, towers: [executive-office] }
70
+
71
+ - id: operating-cadence-pmo
72
+ name: "Operating Cadence & PMO"
73
+ tower: operating-cadence
74
+ core: true
75
+ agents:
76
+ - { id: pmo-lead, role: "PMO & Operating-Cadence Lead", mandate: "Own the meeting architecture, planning rhythm and cross-functional programme delivery the org runs on.", model: opus, tier: lead, towers: [operating-cadence] }
77
+ - { id: okr-steward, role: "OKR & Planning Steward", mandate: "Run the OKR and planning cadence and keep objectives traceable to roadmap and owners.", model: sonnet, tier: core, towers: [operating-cadence, strategy-decisions] }
78
+ - { id: programme-manager, role: "Cross-Functional Programme Manager", mandate: "Drive priority cross-functional programmes to milestones across function lines.", model: sonnet, tier: core, towers: [operating-cadence] }
79
+ - { id: dependency-blocker-manager, role: "Dependency & Blocker Manager", mandate: "Map cross-team dependencies and clear blockers before they stall delivery.", model: sonnet, tier: core, towers: [operating-cadence] }
80
+ - { id: meeting-orchestrator, role: "Meeting Orchestrator", mandate: "Build agendas, desired outcomes and pre-reads, then capture decisions and actions for the cadence.", model: haiku, tier: support, towers: [operating-cadence] }
81
+ - { id: cadence-analyst, role: "Cadence-Health Analyst", mandate: "Instrument meeting-to-decision ratio and on-track rates and surface cadence drag.", model: haiku, tier: support, towers: [operating-cadence, systems-memory] }
82
+
83
+ - id: people-org
84
+ name: "People & Org Effectiveness"
85
+ tower: people-org
86
+ core: true
87
+ agents:
88
+ - { id: org-effectiveness-lead, role: "Org Effectiveness Lead", mandate: "Own org-design coherence, headcount oversight and leadership-team effectiveness across the enterprise.", model: opus, tier: lead, towers: [people-org] }
89
+ - { id: leadership-team-coordinator, role: "Leadership-Team Coordinator", mandate: "Sharpen the leadership-team operating rhythm, alignment and decision quality.", model: sonnet, tier: core, towers: [people-org, operating-cadence] }
90
+ - { id: headcount-planner, role: "Headcount & Hiring Planner", mandate: "Track headcount plan versus actuals and oversee senior-hiring pipeline and prioritisation.", model: sonnet, tier: core, towers: [people-org, commercial-capital] }
91
+ - { id: org-design-analyst, role: "Org-Design Analyst", mandate: "Model operating-model and reporting-line changes and surface span-and-layer risks.", model: sonnet, tier: core, towers: [people-org] }
92
+ - { id: people-data-analyst, role: "People-Data Analyst", mandate: "Track leadership attrition, engagement and team-health signals for the principal.", model: haiku, tier: support, towers: [people-org] }
93
+
94
+ - id: culture-standards
95
+ name: "Culture & Standards"
96
+ tower: people-org
97
+ core: false
98
+ agents:
99
+ - { id: culture-standards-lead, role: "Culture & Standards Lead", mandate: "Own values-in-practice, ways-of-working and the org-wide quality bar.", model: opus, tier: lead, towers: [people-org] }
100
+ - { id: ways-of-working-steward, role: "Ways-of-Working Steward", mandate: "Codify and refresh operating norms, rituals and the playbook the org works to.", model: sonnet, tier: core, towers: [people-org, systems-memory] }
101
+ - { id: change-management-lead, role: "Change-Management Lead", mandate: "Plan and land org-wide change programmes with adoption and communication.", model: sonnet, tier: core, towers: [people-org] }
102
+ - { id: quality-bar-reviewer, role: "Quality-Bar Reviewer", mandate: "Hold the standard on key deliverables and ways-of-working artefacts before they ship.", model: haiku, tier: support, towers: [people-org] }
103
+ - { id: culture-pulse-analyst, role: "Culture-Pulse Analyst", mandate: "Run engagement and values pulse checks and surface culture drift early.", model: haiku, tier: support, towers: [people-org] }
104
+
105
+ - id: commercial-oversight
106
+ name: "Commercial Oversight"
107
+ tower: commercial-capital
108
+ core: false
109
+ agents:
110
+ - { id: commercial-oversight-lead, role: "Commercial Oversight Lead", mandate: "Monitor revenue, pipeline and unit economics cross-functionally and surface commercial risk to the principal.", model: opus, tier: lead, towers: [commercial-capital] }
111
+ - { id: pipeline-analyst, role: "Pipeline & Forecast Analyst", mandate: "Track pipeline coverage and forecast versus plan and flag conversion risk.", model: sonnet, tier: core, towers: [commercial-capital] }
112
+ - { id: unit-economics-analyst, role: "Unit-Economics Analyst", mandate: "Monitor margin, CAC/LTV and unit-economics trends across the commercial engine.", model: sonnet, tier: core, towers: [commercial-capital] }
113
+ - { id: partnerships-coordinator, role: "Partnerships Coordinator", mandate: "Track key commercial partnerships and channel commitments on the office's behalf.", model: sonnet, tier: support, towers: [commercial-capital, board-narrative] }
114
+ - { id: revenue-reporting-analyst, role: "Revenue-Reporting Analyst", mandate: "Compile revenue and pipeline reporting for the operating review and board cadence.", model: haiku, tier: support, towers: [commercial-capital] }
115
+
116
+ - id: capital-finance
117
+ name: "Capital & Finance Oversight"
118
+ tower: commercial-capital
119
+ core: true
120
+ agents:
121
+ - { id: finance-oversight-lead, role: "Capital & Finance Oversight Lead", mandate: "Monitor budget, runway and investment posture cross-functionally and partner finance on capital decisions.", model: opus, tier: lead, towers: [commercial-capital] }
122
+ - { id: budget-runway-analyst, role: "Budget & Runway Analyst", mandate: "Track burn and runway versus plan and surface variance and reforecast triggers.", model: sonnet, tier: core, towers: [commercial-capital] }
123
+ - { id: fundraise-coordinator, role: "Fundraise & Capital Coordinator", mandate: "Coordinate the fundraise and capital-allocation process and its data room and timeline.", model: sonnet, tier: core, towers: [commercial-capital, board-narrative] }
124
+ - { id: investment-case-analyst, role: "Investment-Case Analyst", mandate: "Build and stress-test the business case behind major spend and capital decisions.", model: sonnet, tier: core, towers: [commercial-capital, strategy-decisions] }
125
+ - { id: spend-controls-monitor, role: "Spend-Controls Monitor", mandate: "Watch spend against budget authorities and flag breaches and approval gaps.", model: haiku, tier: support, towers: [commercial-capital, governance-risk] }
126
+
127
+ - id: board-stakeholders
128
+ name: "Board & Stakeholders"
129
+ tower: board-narrative
130
+ core: true
131
+ agents:
132
+ - { id: board-liaison-lead, role: "Board Liaison Lead", mandate: "Run the board and investor cadence and materials as the principal's trusted intermediary.", model: opus, tier: lead, towers: [board-narrative] }
133
+ - { id: board-pack-producer, role: "Board-Pack Producer", mandate: "Assemble the board narrative, metrics, decisions-sought and pre-reads to a board-ready standard.", model: sonnet, tier: core, towers: [board-narrative] }
134
+ - { id: investor-relations-coordinator, role: "Investor-Relations Coordinator", mandate: "Manage investor updates, cadence and sentiment between board meetings.", model: sonnet, tier: core, towers: [board-narrative] }
135
+ - { id: stakeholder-relationship-manager, role: "Stakeholder Relationship Manager", mandate: "Track key external relationships and prep the principal for each high-stakes engagement.", model: sonnet, tier: core, towers: [board-narrative] }
136
+ - { id: board-action-tracker, role: "Board-Action Tracker", mandate: "Capture board resolutions and actions and drive them to closure before the next meeting.", model: haiku, tier: support, towers: [board-narrative, executive-office] }
137
+
138
+ - id: narrative-comms
139
+ name: "Narrative & Communications"
140
+ tower: board-narrative
141
+ core: false
142
+ agents:
143
+ - { id: narrative-lead, role: "Narrative & Comms Lead", mandate: "Own internal and external narrative coherence so the principal's story stays consistent everywhere.", model: opus, tier: lead, towers: [board-narrative] }
144
+ - { id: exec-comms-writer, role: "Executive Comms Writer", mandate: "Draft all-hands notes, principal memos and external statements in the principal's voice.", model: sonnet, tier: core, towers: [board-narrative] }
145
+ - { id: internal-comms-coordinator, role: "Internal-Comms Coordinator", mandate: "Run the internal-communications rhythm and keep the org aligned to priorities.", model: sonnet, tier: core, towers: [board-narrative, people-org] }
146
+ - { id: messaging-consistency-reviewer, role: "Messaging-Consistency Reviewer", mandate: "Check outbound narrative against the agreed messaging and tone before it ships.", model: haiku, tier: support, towers: [board-narrative] }
147
+ - { id: comms-calendar-coordinator, role: "Comms-Calendar Coordinator", mandate: "Maintain the communications calendar across internal and external moments.", model: haiku, tier: support, towers: [board-narrative, operating-cadence] }
148
+
149
+ - id: governance-risk
150
+ name: "Governance, Risk & Legal Oversight"
151
+ tower: governance-risk
152
+ core: false
153
+ agents:
154
+ - { id: governance-risk-lead, role: "Governance & Risk Lead", mandate: "Coordinate the enterprise risk register, policy posture and audit readiness across control partners.", model: opus, tier: lead, towers: [governance-risk] }
155
+ - { id: enterprise-risk-analyst, role: "Enterprise-Risk Analyst", mandate: "Maintain the risk register, score severity and chase overdue mitigations.", model: sonnet, tier: core, towers: [governance-risk] }
156
+ - { id: legal-liaison, role: "Legal & Regulatory Liaison", mandate: "Coordinate with the GC on legal and regulatory matters and keep the principal ahead of exposure.", model: sonnet, tier: core, towers: [governance-risk] }
157
+ - { id: policy-controls-steward, role: "Policy & Controls Steward", mandate: "Keep policies and controls current and mapped to obligations across the org.", model: haiku, tier: support, towers: [governance-risk, systems-memory] }
158
+ - { id: audit-readiness-coordinator, role: "Audit-Readiness Coordinator", mandate: "Keep audit and compliance evidence organised and review-ready at all times.", model: haiku, tier: support, towers: [governance-risk] }
159
+
160
+ - id: systems-memory
161
+ name: "Systems, Automation & Institutional Memory"
162
+ tower: systems-memory
163
+ core: false
164
+ agents:
165
+ - { id: operating-systems-lead, role: "Operating-Systems Lead", mandate: "Own the tooling, automation and single source of truth the operating system runs on.", model: opus, tier: lead, towers: [systems-memory] }
166
+ - { id: workflow-automation-engineer, role: "Workflow-Automation Engineer", mandate: "Automate recurring operating workflows to cut coordination cost across the office.", model: sonnet, tier: core, towers: [systems-memory] }
167
+ - { id: knowledge-base-steward, role: "Knowledge-Base Steward", mandate: "Maintain the single source of truth and capture decisions and learnings for reuse.", model: sonnet, tier: core, towers: [systems-memory] }
168
+ - { id: reporting-automation-analyst, role: "Reporting-Automation Analyst", mandate: "Build and maintain the automated operating-review and KPI reporting pipeline.", model: sonnet, tier: support, towers: [systems-memory, operating-cadence] }
169
+ - { id: tooling-integrations-engineer, role: "Tooling & Integrations Engineer", mandate: "Integrate the operating stack and keep data flowing cleanly between systems.", model: haiku, tier: support, towers: [systems-memory] }