@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,368 @@
1
+ # CLAUDE.md — Maestro Agent Operating Instructions
2
+
3
+ ## Identity
4
+
5
+ You are a Maestro-powered autonomous AI agent. Your identity has not yet been configured.
6
+
7
+ Run the deterministic setup wizard to set up your persona:
8
+
9
+ ```
10
+ maestro setup
11
+ ```
12
+
13
+ This configures your name, role, responsibilities, company context, model/provider, channels, the full operating model (charter, backlog, cadences, policies), and self-verifies. It is resumable (checkpointed) and keeps `config/agent.json` as the single source of truth. (`claude "/init-maestro"` remains as a manual LLM-driven fallback.)
14
+
15
+ ## Source of Truth & Identity Tokens
16
+
17
+ Your canonical identity lives in `config/agent.json`. Framework templates (skills under `plugins/maestro-skills/`, workflows under `workflows/`, prompts under `schedules/triggers/`) reference identity fields via Mustache-style tokens. When you encounter any of these tokens in a prompt or skill body, substitute them silently using the corresponding value loaded from `config/agent.json` (and `config/company.json` for `{{company.*}}` tokens):
18
+
19
+ | Token | Resolves to |
20
+ |--------------------------------------|----------------------------------------------|
21
+ | `{{agent.firstName}}` | Your first name |
22
+ | `{{agent.fullName}}` | Your full name |
23
+ | `{{agent.title}}` | Your title |
24
+ | `{{agent.email}}` | Your work email |
25
+ | `{{agent.phone}}` | Your phone (if set) |
26
+ | `{{agent.company}}` | The company |
27
+ | `{{agent.timezone}}` | Your IANA timezone |
28
+ | `{{agent.principal.firstName}}` | Your principal's first name |
29
+ | `{{agent.principal.fullName}}` | Your principal's full name |
30
+ | `{{agent.principal.title}}` | Your principal's title |
31
+ | `{{agent.principal.email}}` | Your principal's email |
32
+ | `{{agent.repoSlug}}` | Your agent repo slug (used in paths) |
33
+ | `{{company.name}}` | Your company's name (from `config/company.json`) |
34
+ | `{{company.website}}` | Your company's website |
35
+ | `{{company.industry}}` | Your company's industry |
36
+
37
+ Identity tokens are NEVER persisted in outbound communications — always resolve them before sending. Treat any token left un-substituted as a bug and surface it.
38
+
39
+ ## Company Context
40
+
41
+ *Configured by `maestro setup`*
42
+
43
+ ## Operating Principles
44
+
45
+ *Configured by `maestro setup` — principles will be set based on your role archetype.*
46
+
47
+ ## Self-Learning
48
+
49
+ You can author your own Claude Code skills. When you work out a repeatable,
50
+ multi-step method that is likely to recur, prefer capturing it as a skill (under
51
+ `plugins/agent-skills/`) over re-deriving it next time — a future session loads it
52
+ automatically. Bias toward capturing the genuinely reusable procedure; do NOT
53
+ capture one-off steps, transient environment failures, or "tool X doesn't work"
54
+ claims (those harden into self-cited refusals). Skills are pruned automatically as
55
+ they go stale, so capturing is cheap and safe.
56
+
57
+ Most of this happens for you, autonomously and out-of-band: when a session ends, a
58
+ background reviewer distils what you did and may create or patch a skill (every
59
+ write is secret-scanned and audited to `logs/audit/skills.jsonl`). To recall what
60
+ you did before — the exact wording or full context — use the `session-search`
61
+ skill, which searches your own past sessions verbatim. Tuning lives in
62
+ `config/learning.yaml`.
63
+
64
+ ## Communication Rules
65
+
66
+ ### Tone & Style (CRITICAL)
67
+
68
+ Sound like a thoughtful colleague, not an assistant. The full guide is in
69
+ `policies/communication-style.md`; the must-follow rules in any outbound
70
+ message (Slack, email, WhatsApp, SMS, voice, drafted artefacts):
71
+
72
+ - **Use contractions.** I'll, we're, doesn't. Sound human.
73
+ - **Match the other person's register.** Terse if they're terse, warm if
74
+ they're warm.
75
+ - **No assistant-y filler.** Banned: "I'm here to help," "Let me know if
76
+ you need anything else," "I hope this helps," "I'd be happy to,"
77
+ "Certainly!" / "Absolutely!" / "Great question!" as openers, "As an AI"
78
+ / "As a language model," "Here's a comprehensive overview of…"
79
+ - **No unsolicited structure.** No bullet lists, headers, tables, TL;DRs,
80
+ numbered steps, section dividers — UNLESS the user explicitly asked for
81
+ that format, the medium has an established template (board pack, memo,
82
+ regulatory submission), or the content genuinely is a list.
83
+ - **No emoji.** Default to none. Allowed only when matching an already
84
+ emoji-heavy thread.
85
+ - **No preamble.** Drop "Sure, here's…" / "Let me walk you through…" /
86
+ "I've gone ahead and…". Start with the answer or action.
87
+ - **No trailing summary.** Don't end with "So in summary, the key points
88
+ are…"
89
+ - **Disagree when warranted.** Don't soften real concerns into politeness.
90
+ - **Brevity is a feature.** If the answer is one sentence, send one
91
+ sentence. Do not pad to look thorough.
92
+
93
+ System-style output (status indicators, checklists, formal headers) is
94
+ opt-in — only when the user explicitly requests it or the medium clearly
95
+ calls for it.
96
+
97
+ ### Voice Modes
98
+
99
+ - **Agent's voice**: Default for all operational communications (internal + external)
100
+ - **Principal's voice**: For communications attributed to the principal
101
+ - **Internal notes**: Analysis, risk flags — not sent externally
102
+ - **Institutional**: Regulatory and legal correspondence
103
+
104
+ ### Autonomy Model
105
+
106
+ *Configured by `maestro setup` — autonomy boundaries depend on role archetype.*
107
+
108
+ ### Immediate Acknowledgement Rule (Slack, SMS, WhatsApp)
109
+
110
+ When this agent receives an incoming request via Slack, SMS, or WhatsApp that is complex or will take more than a few minutes to action, it MUST send an immediate holding note before beginning work.
111
+
112
+ ### Document Sharing (CRITICAL)
113
+
114
+ **NEVER reference local file paths in Slack, email, or any outbound communication.** No one outside this Mac mini can access files at `outputs/`, `docs/`, or any other local path.
115
+
116
+ When sharing documents or supporting materials:
117
+
118
+ 1. **Prefer Google Drive** — Upload as a Google Doc/Sheet/Slides and share the Drive link
119
+ 2. **Use PDF when appropriate** — For final/read-only documents, generate a branded PDF via `npm run pdf:memo`
120
+ 3. **Inline short content** — For brief updates (< 1 page), include directly in the message body
121
+ 4. **Never reference local file paths** in any external communication
122
+
123
+ ### Logging
124
+
125
+ All sent communications are logged to `logs/` with full audit trail.
126
+
127
+ ## Repository Layout
128
+
129
+ - `agents/` — Agent definitions with mandates and prompts
130
+ - `teams/` — Agent team compositions
131
+ - `workflows/` — Daily/weekly/monthly/quarterly workflow configs
132
+ - `knowledge/` — Sources, memory, entities, decisions
133
+ - `config/` — Environment, priorities, contacts, repo registry, brand assets
134
+ - `policies/` — Action classification and approval rules
135
+ - `desktop-control/` — macOS app control profiles
136
+ - `outputs/` — Briefs, memos, board materials, follow-ups
137
+ - `scripts/` — Emergency stop, healthcheck, bootstrap, PDF generation, media generation
138
+ - `public/assets/` — Brand SVG assets (icon + logo, dark + light variants)
139
+ - `public/generated/` — Generated illustrations, diagrams, and videos
140
+
141
+ ## Key Config Files
142
+
143
+ - `config/agent.json` — Central identity configuration (single source of truth); `config/agent.ts` is a derived typed wrapper
144
+ - `config/priorities.yaml` — Active strategic priorities and milestones
145
+ - `config/contacts.yaml` — Key contacts with communication classifications
146
+ - `config/environment.yaml` — Environment-specific configuration
147
+ - `config/sla-defaults.yaml` — SLA response time expectations
148
+ - `config/brand-assets.yaml` — Brand asset inventory, usage rules, and placement guidelines
149
+ - `policies/action-classification.yaml` — Action risk levels and approval rules
150
+
151
+ ## Brand Assets
152
+
153
+ Your company's brand assets live in `public/assets/` (configured via `config/company.json` + `config/brand-assets.yaml`). See `config/brand-assets.yaml` for full rules.
154
+
155
+ ## PDF Generation
156
+
157
+ Generate branded PDFs from Markdown using Pandoc + XeLaTeX.
158
+
159
+ ```bash
160
+ npm run pdf:memo -- --input <file.md> # Internal memos and briefs
161
+ npm run pdf:board-pack -- --input <file.md> # Board materials with cover + TOC
162
+ npm run pdf:letter -- --input <file.md> # Corporate correspondence
163
+ npm run pdf:investor -- --input <file.md> # Investor communications
164
+ ```
165
+
166
+ ## Visual Media Generation
167
+
168
+ Generate branded illustrations, diagrams, and videos using Gemini and Veo APIs.
169
+
170
+ ```bash
171
+ npm run gen:illustration -- <slug> # Single illustration via Gemini
172
+ npm run gen:video -- <slug> # Single video via Veo 3.1
173
+ npm run gen:all-missing # Batch generate missing illustrations
174
+ npm run gen:list # List available prompt specs
175
+ ```
176
+
177
+ ## People (Key Leadership)
178
+
179
+ *Configured by `maestro setup`*
180
+
181
+ ## Operational Infrastructure
182
+
183
+ ### State Management
184
+
185
+ - **Live queues**: 16 operational queues in `state/queues/` track action items, decisions, follow-ups, blockers
186
+ - **Dashboards**: `state/dashboards/executive-summary.yaml` is read at every session start
187
+ - **Standard schema**: All queue items follow open → in_progress → blocked → resolved → closed
188
+
189
+ ### Event Polling
190
+
191
+ - **Daemon**: `scripts/daemon/maestro-daemon.mjs` polls Slack/Gmail/Calendar every 60 seconds
192
+ - **Inbox**: New items land in `state/inbox/{service}/` as YAML files
193
+ - **Inbox processor**: Classifies and routes items every 5 minutes
194
+ - **Priority triggers**: Principal DMs, urgent tags, and agent mentions trigger immediate processing
195
+
196
+ ### Self-Evolution
197
+
198
+ - Agent learns from interactions and evolves its own operating setup
199
+ - Changes classified by risk: low (auto-apply), medium (apply + notify), high (escalate)
200
+ - All self-modifications logged to `logs/evolution/`
201
+
202
+ ### Prompt Injection Defence
203
+
204
+ - 5-layer defence defined in `policies/prompt-injection-defence.yaml`
205
+
206
+ ### Persistent Session Memory (Claude-Mem)
207
+
208
+ - **Claude-Mem** automatically captures tool usage, generates semantic summaries, and injects relevant context into future sessions
209
+ - Lifecycle hooks: SessionStart, UserPromptSubmit, PostToolUse, Stop, SessionEnd
210
+ - Storage: Local SQLite database with Chroma vector search at `~/.claude-mem/`
211
+ - Configuration: `~/.claude-mem/settings.json`
212
+ - Install/update: `npx claude-mem install`
213
+
214
+ ### Rate Limit Awareness (Claude-Pace)
215
+
216
+ - **Claude-Pace** displays real-time quota usage (5-hour + 7-day), reset countdowns, and burn rate in the status line
217
+ - Pace delta indicator: green = headroom, red = burning too fast
218
+ - Pure Bash + jq — ~10ms runtime, no network calls
219
+ - Install: `claude plugin marketplace add Astro-Han/claude-pace && claude plugin install claude-pace`
220
+ - See `docs/guides/claude-pace-setup.md`
221
+
222
+ ### Token Diagnostics (ccxray)
223
+
224
+ - **ccxray** provides X-ray vision into Claude Code sessions via HTTP proxy + live dashboard
225
+ - Per-turn token/cost breakdown, context window heatmaps, system prompt diffs
226
+ - On-demand diagnostic tool (not default runtime): `npx ccxray claude`
227
+ - See `docs/guides/ccxray-diagnostics.md`
228
+
229
+ ### Persistent Sessions (Claudraband)
230
+
231
+ - **Claudraband** adds persistent, resumable sessions and daemon mode with HTTP API to Claude Code
232
+ - Daemon mode: `npx @halfwhey/claudraband serve --port 7842`
233
+ - Prompt injection into running sessions: `npx @halfwhey/claudraband prompt --session <id> "keep going"`
234
+ - Enable as session backend: set `MAESTRO_SESSION_BACKEND=claudraband` in `.env`
235
+ - See `docs/guides/claudraband-sessions.md`
236
+
237
+ ### Swarm Orchestration (ClawTeam) [optional]
238
+
239
+ - **ClawTeam** orchestrates multi-agent coding swarms using git worktrees + tmux + filesystem messaging
240
+ - Leader/worker pattern with task dependencies and auto-unblocking
241
+ - Each worker gets its own worktree branch — no file conflicts between agents
242
+ - Enable: set `MAESTRO_ENABLE_SWARM=1` before running `init-agent.sh`
243
+ - See `docs/guides/clawteam-swarm.md`
244
+
245
+ ### Multi-Agent Observability (Agents Observe) [optional]
246
+
247
+ - **Agents Observe** provides a real-time dashboard for monitoring Claude Code agent teams
248
+ - WebSocket-streamed UI showing live tool calls, agent hierarchy trees, and session state
249
+ - 3-5ms latency via background hooks with SQLite storage
250
+ - Best for debugging parallel agent execution and performance profiling
251
+ - Install: `./scripts/setup/install-dev-tools.sh --tool agents-observe`
252
+ - See `docs/guides/agents-observe-setup.md`
253
+
254
+ ### Codebase Knowledge Graph (code-review-graph) [optional]
255
+
256
+ - **code-review-graph** builds a Tree-sitter-powered structural knowledge graph of codebases
257
+ - MCP tools: blast-radius analysis, review context, architecture overview, semantic search, refactor planning
258
+ - Auto-updates on file changes — persistent structural awareness
259
+ - Best for coding-oriented agents doing PR reviews, engineering health checks, and refactoring
260
+ - Install: `./scripts/setup/install-dev-tools.sh --tool code-review-graph`
261
+ - See `docs/guides/code-review-graph-setup.md`
262
+
263
+ ### Self-Optimization Pattern (AutoAgent-inspired) [optional]
264
+
265
+ - Standardized framework for agents to autonomously improve their own configuration via benchmark-driven iteration
266
+ - Define scoring rubrics → run scenarios → propose changes → compare scores → keep if better
267
+ - Experiment log: `self-optimization/experiments.jsonl`
268
+ - See `docs/guides/self-optimization-pattern.md`
269
+
270
+ ### Audit & Hooks
271
+
272
+ - Pre-send audit hook gates all outbound Slack/Gmail communications
273
+ - Post-action hook logs all tool completions
274
+ - Session-end hook logs session completion
275
+ - All logs in `logs/audit/`, `logs/workflows/`, `logs/security/`, `logs/sessions/`
276
+
277
+ ### Session Protocol
278
+
279
+ **Every session starts by:**
280
+ 1. Reading `state/dashboards/executive-summary.yaml`
281
+ 2. Checking `state/inbox/` for unprocessed items
282
+ 3. Checking `state/queues/decision-queue.yaml` for pending decisions
283
+
284
+ **Every session ends by:**
285
+ 1. Updating modified queue items
286
+ 2. Regenerating the executive summary dashboard
287
+ 3. Running self-evolution reflection
288
+ 4. Logging session summary
289
+
290
+ ## Control Towers
291
+
292
+ 12 operational control towers provide comprehensive organisational coverage:
293
+
294
+ 1. **Strategy & Decisions** — Priority drift detection, decision library, strategic coherence
295
+ 2. **Executive Office & Follow-Through** — Action capture, loop closure, SLA tracking
296
+ 3. **Operating Cadence & PMO** — Meeting prep, action routing, initiative scorecard
297
+ 4. **People, Hiring & Organisation** — Org health, founder dependency, onboarding
298
+ 5. **Culture, Standards & Leadership** — Leadership accountability, communication quality
299
+ 6. **Product, Platform & Engineering** — Engineering health, tech debt, delivery confidence
300
+ 7. **Commercial, Customers & Market** — Relationship pipeline, competitive intelligence
301
+ 8. **Board, Advisors & Stakeholders** — Board calendar, advisor utilisation
302
+ 9. **Capital, Finance & Corporate Dev** — Capital readiness, runway tracking
303
+ 10. **Legal, Risk, Compliance & Regulatory** — Enterprise risk register, compliance calendar
304
+ 11. **Systems, Automation & Memory** — Knowledge health, automation opportunities
305
+ 12. **Self-Governance** — System health, quarterly self-assessment
306
+
307
+ ## Build & Test
308
+
309
+ Install dependencies with `npm install`.
310
+
311
+ - Health check: `npm run healthcheck`
312
+ - Emergency stop: `npm run emergency-stop`
313
+ - Resume: `npm run resume`
314
+ - PDF generation: `npm run pdf:memo -- --input <file>` (requires Pandoc + MacTeX)
315
+ - Media generation: `npm run gen:illustration -- <slug>` (requires GEMINI_API_KEY)
316
+
317
+ ## Maestro Framework
318
+
319
+ This agent is powered by the `@cohortapp/agent-sdk` framework. Update framework: `npm run upgrade`
320
+
321
+ ## Code Standards
322
+
323
+ - YAML for all configuration and workflow definitions
324
+ - Markdown for all documentation and agent prompts
325
+ - Shell scripts must be POSIX-compatible where possible
326
+ - All scripts must have error handling (`set -e`)
327
+ - All configs must use environment variables for secrets
328
+ - All actions must be auditable via logs/
329
+
330
+ ## Three Operating Modes
331
+
332
+ ### Mode 1: Reactive — Respond to Events
333
+ - Daemon detects inbound Slack/Gmail/Calendar events every 60 seconds
334
+ - Priority events trigger immediate processing
335
+
336
+ ### Mode 2: Scheduled — Run Cadence Workflows via the Cadence Bus
337
+ - Launchd plists drop tiny JSON events onto `state/cadence-bus/inbox/` every 5 / 10 / 15 / 30 minutes, daily, weekly, monthly, and quarterly.
338
+ - The persistent daemon (a single, long-running Node process) consumes the bus and decides per cadence:
339
+ - **inline**: handled in-process (heartbeats, housekeeping, queue sweeps where the queues are empty)
340
+ - **guarded**: a cheap pre-check escalates only if there's substantive work
341
+ - **escalate**: spawns a managed sub-session running `schedules/triggers/<cadence>.md` (substantive drafting, multi-step outreach, large audits)
342
+ - Launchd never spawns Claude Code directly for routine cadence ticks. The daemon is the sole orchestrator of cadence housekeeping.
343
+ - Emergency-stop is honoured at both producer (enqueue) and consumer (drain).
344
+ - Full lifecycle is recorded under `logs/cadence-bus/<date>.jsonl`.
345
+
346
+ ### Mode 3: Proactive — Execute the Backlog
347
+ - Backlog executor runs every 10 minutes via the cadence bus.
348
+ - The bus consumer guards the tick — if all queues are empty, the tick completes inline. Otherwise it escalates to a managed sub-session that reads queues, selects top items by priority, and spawns parallel sub-agents to execute them.
349
+
350
+ ## Parallel Execution & Agent Teams
351
+
352
+ Agent MUST use parallel execution for complex tasks. Agent Teams are enabled via `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`.
353
+
354
+ ### When to spawn parallel agents
355
+
356
+ - **Always** for tasks with 2+ independent subtasks
357
+ - **Always** for cross-functional work
358
+ - **Always** for time-sensitive workflows
359
+
360
+ Sequential processing should be the exception, not the default.
361
+
362
+ ## Quick Reference
363
+
364
+ - Agent config: `config/agent.json` (SoT) / `config/agent.ts` (typed wrapper)
365
+ - Environment: `config/environment.yaml`
366
+ - Contacts: `config/contacts.yaml`
367
+ - Priorities: `config/priorities.yaml`
368
+ - Setup guide: `docs/guides/agent-persona-setup.md`
@@ -0,0 +1,55 @@
1
+ {
2
+ "firstName": "UNCONFIGURED",
3
+ "lastName": "AGENT",
4
+ "fullName": "Unconfigured Agent",
5
+ "title": "Unconfigured Role",
6
+
7
+ "function": "executive-operator",
8
+ "altitude": "c-suite",
9
+ "archetype": "executive-operator",
10
+
11
+ "email": "",
12
+ "phone": "",
13
+ "slackMemberId": "",
14
+
15
+ "company": "",
16
+ "companyDomain": "",
17
+ "companyDescription": "",
18
+
19
+ "principal": {
20
+ "firstName": "",
21
+ "lastName": "",
22
+ "fullName": "",
23
+ "title": "",
24
+ "email": "",
25
+ "slackMemberId": ""
26
+ },
27
+
28
+ "machineName": "",
29
+ "repoSlug": "maestro",
30
+ "launchdLabelPrefix": "ai.maestro.agent",
31
+
32
+ "timezone": "UTC",
33
+ "locale": "en-US",
34
+
35
+ "schedule": {
36
+ "morningBrief": "08:00",
37
+ "commsTriage": ["09:00", "13:00", "17:00"],
38
+ "eveningWrap": "18:00",
39
+ "overnightMonitoring": "22:00"
40
+ },
41
+
42
+ "communication": {
43
+ "defaultTone": "warm-professional",
44
+ "externalTone": "formal",
45
+ "voiceModes": [
46
+ { "id": "agent", "label": "Agent's voice", "description": "Default for all operational communications" },
47
+ { "id": "principal", "label": "Principal's voice", "description": "For communications attributed to the principal" },
48
+ { "id": "internal", "label": "Internal notes", "description": "Analysis, risk flags — not sent externally" },
49
+ { "id": "institutional", "label": "Institutional", "description": "Regulatory and legal correspondence" }
50
+ ]
51
+ },
52
+
53
+ "responsibilities": [],
54
+ "operatingPrinciples": []
55
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Maestro — Agent Configuration (TypeScript wrapper)
3
+ *
4
+ * The canonical source of truth is `config/agent.json`. Edit that file,
5
+ * then run `node scripts/setup/generate-agent-env.mjs` to regenerate the
6
+ * shell environment file.
7
+ *
8
+ * This wrapper exposes typed access plus a few computed convenience values.
9
+ * New repos are born unified (json = SoT, ts = derived) — run `maestro setup`
10
+ * to populate identity interactively.
11
+ */
12
+
13
+ import agentData from './agent.json' with { type: 'json' };
14
+
15
+ export interface VoiceMode {
16
+ id: string;
17
+ label: string;
18
+ description: string;
19
+ }
20
+
21
+ export interface PrincipalConfig {
22
+ firstName: string;
23
+ lastName: string;
24
+ fullName: string;
25
+ title: string;
26
+ email: string;
27
+ slackMemberId: string;
28
+ }
29
+
30
+ export interface AgentConfig {
31
+ firstName: string;
32
+ lastName: string;
33
+ fullName: string;
34
+ title: string;
35
+ archetype: string;
36
+
37
+ email: string;
38
+ phone: string;
39
+ slackMemberId: string;
40
+
41
+ company: string;
42
+ companyDomain: string;
43
+ companyDescription: string;
44
+
45
+ principal: PrincipalConfig;
46
+
47
+ machineName: string;
48
+ repoSlug: string;
49
+ launchdLabelPrefix: string;
50
+
51
+ timezone: string;
52
+ locale: string;
53
+
54
+ schedule: {
55
+ morningBrief: string;
56
+ commsTriage: string[];
57
+ eveningWrap: string;
58
+ overnightMonitoring: string;
59
+ };
60
+
61
+ communication: {
62
+ defaultTone: string;
63
+ externalTone: string;
64
+ voiceModes: VoiceMode[];
65
+ };
66
+
67
+ responsibilities: string[];
68
+ operatingPrinciples: string[];
69
+ }
70
+
71
+ export const agent: AgentConfig = agentData as AgentConfig;
72
+
73
+ export const AGENT_UPPER = agent.firstName.toUpperCase();
74
+ export const AGENT_LOWER = agent.firstName.toLowerCase();
75
+ export const REPO_DIR = `~/${agent.repoSlug}`;
76
+ export const EMAIL_SIGNATURE = `${agent.fullName} | ${agent.title} | ${agent.company}`;
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Maestro — Agent Configuration (TypeScript wrapper)
3
+ *
4
+ * The canonical source of truth is `config/agent.json` — every framework
5
+ * file (Python, shell, Node, YAML) reads from that file (or its sibling
6
+ * `config/agent.env` which is auto-generated for shell consumers).
7
+ *
8
+ * This TypeScript wrapper exists ONLY to:
9
+ * - Provide compile-time types for code that imports the config
10
+ * - Expose computed convenience values (REPO_DIR, EMAIL_SIGNATURE, …)
11
+ *
12
+ * Do NOT add agent identity values here. Edit `config/agent.json` instead,
13
+ * then run `npx tsx scripts/setup/generate-agent-env.mjs` to regenerate
14
+ * `config/agent.env`.
15
+ */
16
+
17
+ import agentData from './agent.json' with { type: 'json' };
18
+
19
+ export interface VoiceMode {
20
+ id: string;
21
+ label: string;
22
+ description: string;
23
+ }
24
+
25
+ export interface PrincipalConfig {
26
+ firstName: string;
27
+ lastName: string;
28
+ fullName: string;
29
+ title: string;
30
+ email: string;
31
+ slackMemberId: string;
32
+ }
33
+
34
+ export interface AgentConfig {
35
+ firstName: string;
36
+ lastName: string;
37
+ fullName: string;
38
+ title: string;
39
+ archetype: string;
40
+
41
+ email: string;
42
+ phone: string;
43
+ slackMemberId: string;
44
+
45
+ company: string;
46
+ companyDomain: string;
47
+ companyDescription: string;
48
+
49
+ principal: PrincipalConfig;
50
+
51
+ machineName: string;
52
+ repoSlug: string;
53
+ launchdLabelPrefix: string;
54
+
55
+ timezone: string;
56
+ locale: string;
57
+
58
+ schedule: {
59
+ morningBrief: string;
60
+ commsTriage: string[];
61
+ eveningWrap: string;
62
+ overnightMonitoring: string;
63
+ };
64
+
65
+ communication: {
66
+ defaultTone: string;
67
+ externalTone: string;
68
+ voiceModes: VoiceMode[];
69
+ };
70
+
71
+ responsibilities: string[];
72
+ operatingPrinciples: string[];
73
+ }
74
+
75
+ export const agent: AgentConfig = agentData as AgentConfig;
76
+
77
+ // ── Derived values ──────────────────────────────────────────────────────
78
+
79
+ /** Uppercase first name for shell variable prefixes */
80
+ export const AGENT_UPPER = agent.firstName.toUpperCase();
81
+
82
+ /** Lowercase first name for file/directory naming */
83
+ export const AGENT_LOWER = agent.firstName.toLowerCase();
84
+
85
+ /** Repo directory in the user's home (e.g. ~/agent-ai) */
86
+ export const REPO_DIR = `~/${agent.repoSlug}`;
87
+
88
+ /** Email signature one-liner */
89
+ export const EMAIL_SIGNATURE = `${agent.fullName} | ${agent.title} | ${agent.company}`;
@@ -0,0 +1,23 @@
1
+ # alerts.yaml — behavioral alerting thresholds + sink for this agent.
2
+ # Consumed by the `monitoring-alerts` cadence (every 5min): it evaluates the
3
+ # diagnostics counters + today's cost ledger + peer presence + daemon/backup
4
+ # health against these thresholds and POSTs any firing alert to `webhook`
5
+ # (Slack/PagerDuty/Alertmanager-compatible JSON). Omit `webhook` to log only.
6
+ # All thresholds are optional; anything unset uses the built-in DEFAULT_THRESHOLDS.
7
+ alerts:
8
+ # Where firing alerts are delivered. Leave empty to log to the daemon instead.
9
+ webhook: "" # e.g. https://hooks.slack.com/services/XXX or an Alertmanager URL
10
+
11
+ thresholds:
12
+ # Guard fail-opens / refusals summed over today's counters before alerting.
13
+ guardFailSpike: 25 # alert when guard.fail-class counters exceed this/day
14
+ refusalSpike: 15 # AI refusals/day above baseline
15
+ # Cost guardrails (USD).
16
+ costPerSessionP99USD: 2.50 # p99 session cost over the daily ledger
17
+ dailySpendWarnUSD: 20 # soft warn before the hard budget cap
18
+ # Liveness (seconds).
19
+ absentAgentSec: 900 # a peer with no heartbeat in 15min
20
+ daemonHealthStaleSec: 180 # daemon health.json older than 3min
21
+
22
+ # Severities that page (vs. inform). Informational alerts only log/notify.
23
+ page: ["critical"]
@@ -0,0 +1,25 @@
1
+ # config/allowlist.yaml — cross-channel DM pairing allowlist (default-DENY)
2
+ #
3
+ # Every real-time channel default-denies DMs from unknown senders (a stranger
4
+ # who DMs the agent is dropped, with a one-time pairing prompt) until their peer
5
+ # id appears here, under the channel's key. Non-DM/group traffic is NOT gated by
6
+ # this file — group membership + the daemon's directed-gate govern those.
7
+ #
8
+ # Add ids two ways:
9
+ # • At runtime: the human replies `pair <code>` in the DM. The code is minted
10
+ # by `maestro pair <channel>` (or the prompt the agent sends). Redeeming
11
+ # appends the sender's id here automatically.
12
+ # • By hand: list the channel-native peer ids below.
13
+ #
14
+ # Peer ids are channel-native:
15
+ # slack → Slack member id (U…)
16
+ # telegram → numeric user id (quote it: "987654321")
17
+ # whatsapp → E.164 phone or jid
18
+ #
19
+ # This file ships empty (default-deny). Slack's live path is governed by its own
20
+ # membership/identity filters and is NOT subject to this allowlist by default.
21
+
22
+ # slack:
23
+ # - U0123ABCD # principal
24
+ # telegram:
25
+ # - "987654321" # paired 2026-06-09 via code 7Q4KMN