@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,40 @@
1
+ # Company context
2
+
3
+ Drop documents here that describe **your company**. During `/init-maestro` (and
4
+ whenever you re-run the generators), the agent reads everything in this folder
5
+ and folds it into the generated **operating charter, seeded backlog,
6
+ communication profile**, and the company brief (`config/company.json` +
7
+ `docs/company/overview.md`). This is how the agent's output becomes *role- and
8
+ company-true* instead of generic.
9
+
10
+ Markdown is ideal — the agent reads it directly. PDFs/decks work too if you also
11
+ add a short `.md` summary alongside. The more concrete and current the material,
12
+ the better the output.
13
+
14
+ ## What to add (add whichever you have)
15
+
16
+ | File | What to put in it |
17
+ | --- | --- |
18
+ | `company-overview.md` | What the company does, mission, history, business model, stage/size |
19
+ | `strategy.md` | Current strategy, top priorities / OKRs, the next 1–4 quarters |
20
+ | `products.md` | Products / services, positioning, roadmap themes |
21
+ | `org-chart.md` | Leadership, teams, who owns what — and **this agent's principal + key stakeholders** |
22
+ | `market-and-competitors.md` | Market, segments, main competitors, differentiation |
23
+ | `customers.md` | Key customers / segments, ideal-customer profile, notable accounts |
24
+ | `regulatory.md` | Jurisdictions, regulators, licences, compliance obligations |
25
+ | `brand-and-voice.md` | Tone, do's/don'ts, terminology, approved messaging |
26
+ | `key-relationships.md` | Investors, board, advisors, partners, vendors |
27
+ | `systems.md` | Tools / systems (Slack, GitHub, a CRM, Google Workspace, …) the agent should know |
28
+
29
+ You can also point init at **GitHub repos on the machine** — it will read each
30
+ repo's README, manifest, structure, and recent commits for product/technical
31
+ context. Have the paths ready when the wizard asks.
32
+
33
+ ## Tips
34
+
35
+ - Be factual and specific — names, numbers, dates, ownership, jurisdictions.
36
+ - Keep it current; stale context produces stale output. Re-run init or the
37
+ generators (`scripts/setup/generate-company.mjs`, then the charter/backlog/comms
38
+ generators) after material changes.
39
+ - Treat this as the agent's **private brief** — keep sensitive material to what
40
+ the agent genuinely needs, and do not commit secrets.
@@ -0,0 +1,600 @@
1
+ # Agent Persona Setup Guide
2
+
3
+ How to customise a Maestro agent's identity, operating charter, and behavioural policies when deploying a new autonomous agent on a dedicated Mac mini.
4
+
5
+ ## 1. Overview
6
+
7
+ A Maestro agent's persona is defined across roughly a dozen files. Each serves a distinct purpose:
8
+
9
+ | File | Purpose |
10
+ |------|---------|
11
+ | `config/agent.ts` | Structured identity data: name, title, email, phone, archetype, schedule |
12
+ | `CLAUDE.md` | Behavioural charter: who the agent IS, how it thinks, what it can do |
13
+ | `config/contacts.yaml` | Key relationships and communication permissions |
14
+ | `config/priorities.yaml` | Strategic focus areas and milestones |
15
+ | `config/environment.yaml` | System-level settings: paths, scheduling, secrets |
16
+ | `agents/` | Specialist sub-agents the orchestrator can delegate to |
17
+ | `workflows/` | Cadence definitions (daily, weekly, monthly) |
18
+ | `schedules/triggers/` | Prompt templates for each scheduled execution |
19
+ | `memory/profiles/` | Relationship memory for people and channels |
20
+ | `policies/` | Action classification, information barriers, prompt injection defence |
21
+
22
+ **The relationship between `config/agent.ts` and `CLAUDE.md`**: `agent.ts` holds the structured data (name, email, archetype, schedule). `CLAUDE.md` is the prose charter that tells the LLM who it is and how to behave. They must stay in sync. When the `/init-maestro` command runs, it reads `agent.ts` and generates much of `CLAUDE.md` automatically. Manual fine-tuning of `CLAUDE.md` is where the real persona crafting happens.
23
+
24
+ ## 2. config/agent.ts -- The Identity Source of Truth
25
+
26
+ This TypeScript file is the single import point for every script, trigger, and workflow that needs the agent's name, email, or operational parameters.
27
+
28
+ ### Field Reference
29
+
30
+ **Identity fields:**
31
+
32
+ - `firstName` / `lastName` / `fullName` -- Used in greetings, signatures, Slack profile, and all outbound communications.
33
+ - `title` -- The agent's job title. Appears in email signatures, the CLAUDE.md identity section, and document headers.
34
+ - `archetype` -- Determines default operating principles, communication style, and which Control Towers are most relevant. See the archetype table below.
35
+ - `email` -- The agent's primary email address. Must be a real mailbox the agent can send from.
36
+ - `phone` -- E.164 format. Used for Twilio SMS, voice, and WhatsApp integration.
37
+ - `slackMemberId` -- The agent's Slack user ID (not username). Required for DM routing and mentions.
38
+
39
+ **Organisation fields:**
40
+
41
+ - `company` / `companyDomain` / `companyDescription` -- Appear in CLAUDE.md, email signatures, and document branding.
42
+
43
+ **Reporting line:**
44
+
45
+ - `principal` -- The person this agent reports to and acts on behalf of. Contains their name, title, email, and Slack ID. This person receives escalations and morning briefs.
46
+
47
+ **Machine and deployment:**
48
+
49
+ - `machineName` -- Hostname of the dedicated Mac mini (e.g. `jordan-mini`).
50
+ - `repoSlug` -- The basename of the repo directory. Used to compute `~/maestro` or `~/jordan-ai`.
51
+ - `launchdLabelPrefix` -- Prefix for all launchd daemon labels (e.g. `ai.adaptic.jordan`).
52
+
53
+ **Operational parameters:**
54
+
55
+ - `timezone` -- IANA timezone. All scheduled triggers use this.
56
+ - `locale` -- For date/number formatting in documents and messages.
57
+ - `schedule` -- Daily execution times for morning brief, comms triage, evening wrap, and overnight monitoring. Adjust these to the principal's working day.
58
+
59
+ **Communication style:**
60
+
61
+ - `communication.defaultTone` -- `'formal'`, `'warm-professional'`, or `'casual'`. Affects Slack messages and internal emails.
62
+ - `communication.externalTone` -- Tone for partners, candidates, regulators. Usually `'formal'`.
63
+ - `communication.voiceModes` -- The voices available to this agent (agent's own voice, principal's voice, internal notes, institutional).
64
+
65
+ **Responsibilities and principles:**
66
+
67
+ - `responsibilities` -- 3-7 bullet points describing what this agent does. Injected into CLAUDE.md.
68
+ - `operatingPrinciples` -- Behavioural rules that guide all decision-making.
69
+
70
+ ### Archetype Defaults
71
+
72
+ The `archetype` field affects which defaults `/init-maestro` selects:
73
+
74
+ | Archetype | Example Role | Default Tone | Key Control Towers |
75
+ |-----------|-------------|--------------|-------------------|
76
+ | `executive-operator` | Chief of Staff, COO | warm-professional | All 12 |
77
+ | `technical-leader` | CTO, Head of Engineering | casual | 1, 3, 6, 11, 12 |
78
+ | `commercial-leader` | Head of Sales, IR, BD | formal | 1, 7, 8, 9, 12 |
79
+ | `compliance-officer` | Head of Compliance | formal | 1, 5, 10, 12 |
80
+ | `product-leader` | Head of Product | warm-professional | 1, 3, 6, 7, 12 |
81
+ | `operations-leader` | Head of Ops, HR | warm-professional | 1, 2, 4, 5, 12 |
82
+
83
+ ### Derived Values
84
+
85
+ The file exports computed values that scripts consume:
86
+
87
+ - `AGENT_UPPER` -- Uppercase first name for shell variable prefixes (e.g. `JORDAN`).
88
+ - `AGENT_LOWER` -- Lowercase first name for file paths (e.g. `jordan`).
89
+ - `REPO_DIR` -- Full repo path (e.g. `~/maestro`).
90
+ - `EMAIL_SIGNATURE` -- Formatted signature line.
91
+
92
+ ### Generating agent.json for Shell Scripts
93
+
94
+ Shell scripts cannot import TypeScript. Run the following to generate a JSON snapshot:
95
+
96
+ ```bash
97
+ npx tsx -e "import { agent } from './config/agent.ts'; console.log(JSON.stringify(agent, null, 2))" > config/agent.json
98
+ ```
99
+
100
+ Scripts then read values with `jq`:
101
+
102
+ ```bash
103
+ AGENT_NAME=$(jq -r '.firstName' config/agent.json)
104
+ ```
105
+
106
+ ## 3. CLAUDE.md -- The Agent's Operating Charter
107
+
108
+ CLAUDE.md is the most important file in the repo. It is loaded into every Claude session as the system prompt. Every section must be tailored to the agent's role.
109
+
110
+ ### Identity Section
111
+
112
+ The opening paragraph establishes who the agent is. It must be specific, not generic.
113
+
114
+ **Executive operator (Chief of Staff):**
115
+ ```markdown
116
+ You are **Jordan Lee**, Chief of Staff to Alex Chen, CEO of Northwind.
117
+ You operate as the autonomous executive command layer -- perpetually running on a
118
+ dedicated Mac mini as the institutional executive office for the company.
119
+ ```
120
+
121
+ **Technical leader (Head of Engineering):**
122
+ ```markdown
123
+ You are **Jordan Lee**, Head of Engineering at Northwind. You operate as the
124
+ autonomous engineering leadership layer -- perpetually running on a dedicated Mac
125
+ mini, maintaining code quality, delivery velocity, and technical architecture
126
+ across all platform repositories.
127
+ ```
128
+
129
+ **Compliance officer (Head of Compliance):**
130
+ ```markdown
131
+ You are **Jordan Lee**, Head of Compliance at Northwind. You operate as the
132
+ autonomous regulatory and compliance layer -- perpetually running on a dedicated
133
+ Mac mini, monitoring regulatory obligations across 7 jurisdictions and ensuring
134
+ the firm meets every licensing condition and filing deadline.
135
+ ```
136
+
137
+ ### Company Context Section
138
+
139
+ This section contains business facts. It does not change between agents unless the agent serves a different entity (e.g. an agent for a subsidiary or sister company would have different company context). Keep the corporate structure, jurisdictions, and key business facts identical across all of your organisation's agents.
140
+
141
+ ### Operating Principles Section
142
+
143
+ Principles must reflect the agent's domain. A chief of staff prioritises follow-through; an engineer prioritises correctness; a compliance officer prioritises risk avoidance.
144
+
145
+ **Executive operator:**
146
+ 1. Follow-through over brilliance -- Track every commitment until it closes
147
+ 2. Concise over comprehensive -- Sharp recommendations, not exhaustive reports
148
+ 3. Bias to action -- Act decisively on operational matters
149
+ 4. Audit everything -- Every action is logged
150
+
151
+ **Technical leader:**
152
+ 1. Correctness over speed -- Never ship code that has not been tested
153
+ 2. Simplicity over cleverness -- Prefer readable, maintainable solutions
154
+ 3. Measure before optimising -- Profile first, then act on data
155
+ 4. Document decisions -- Every architectural choice gets an ADR
156
+
157
+ **Commercial leader:**
158
+ 1. Relationship first -- Maintain warmth and trust in every interaction
159
+ 2. Pipeline over perfection -- Keep deals moving; iterate proposals live
160
+ 3. Data-driven positioning -- Back every pitch with evidence
161
+ 4. Protect the brand -- Every communication reflects institutional quality
162
+
163
+ ### Communication Rules Section
164
+
165
+ This section defines voice modes, the autonomy model, and escalation rules. The structure is consistent across agents, but the specifics change significantly.
166
+
167
+ **Voice modes** -- Most agents have four: their own voice, the principal's voice, internal notes, and institutional. A compliance officer may add a fifth `regulatory` voice for regulator correspondence.
168
+
169
+ **Autonomy model** -- Define exactly what the agent can send without approval and what must be escalated. A Chief of Staff has broad autonomy. A Head of Engineering has narrower communication scope (mostly internal). A compliance officer may need approval for any external regulatory correspondence.
170
+
171
+ **Escalation rules** -- Always define these as two lists: what the agent handles autonomously, and what gets escalated to the principal.
172
+
173
+ ### Repository Layout and Key Config Files
174
+
175
+ These sections are structural references. They stay the same across agents unless the agent has unique config files (e.g. `config/trading-parameters.yaml` for a quant engineer).
176
+
177
+ ### People Section
178
+
179
+ Update the "That's you" line to reference the new agent:
180
+
181
+ ```markdown
182
+ - **Jordan Lee** -- That's you. Head of Engineering (AI-operated)
183
+ ```
184
+
185
+ Keep all other leadership entries. Every agent needs awareness of the org chart.
186
+
187
+ ### Operational Infrastructure (Control Towers)
188
+
189
+ The 12 Control Towers are the monitoring and governance framework. Not all are relevant to every agent.
190
+
191
+ **Universal (keep for all agents):**
192
+ - CT1: Strategy and Decisions
193
+ - CT2: Executive Office and Follow-Through
194
+ - CT3: Operating Cadence and PMO
195
+ - CT11: Systems, Automation, and Institutional Memory
196
+ - CT12: Self-Governance
197
+
198
+ **Role-specific:**
199
+ - CT4 (People/Hiring) -- Keep for executive-operator, operations-leader
200
+ - CT5 (Culture/Standards) -- Keep for executive-operator, operations-leader
201
+ - CT6 (Product/Engineering) -- Keep for technical-leader, product-leader
202
+ - CT7 (Commercial/Market) -- Keep for commercial-leader
203
+ - CT8 (Board/Advisors) -- Keep for executive-operator, commercial-leader
204
+ - CT9 (Capital/Finance) -- Keep for executive-operator, commercial-leader
205
+ - CT10 (Legal/Compliance) -- Keep for compliance-officer, executive-operator
206
+
207
+ To remove a Control Tower, delete its section from CLAUDE.md and remove or disable its corresponding dashboard in `state/dashboards/`. To add a custom tower, follow the same format: name, dashboards it reads, metrics it tracks, and cadence.
208
+
209
+ ### Operating Modes Section
210
+
211
+ The three modes (Reactive, Scheduled, Proactive) are universal. Every agent polls for events, runs scheduled workflows, and executes backlog items. Adjust the specific cadence:
212
+
213
+ - A Chief of Staff runs morning briefs at 06:00 and evening wraps at 18:00.
214
+ - A Head of Engineering might run a build-health check at 08:00 and a PR review sweep at 14:00.
215
+ - A compliance officer might run a regulatory-calendar check at 07:00 and an obligation-status sweep at 16:00.
216
+
217
+ ## 4. config/contacts.yaml -- Key Relationships
218
+
219
+ This file defines who the agent communicates with and what approval level each contact requires.
220
+
221
+ ### Contact Structure
222
+
223
+ Each contact entry includes:
224
+
225
+ ```yaml
226
+ - name: Alex Chen
227
+ role: CEO / Founder
228
+ organisation: Northwind
229
+ classification: internal-ceo
230
+ channels:
231
+ slack: true
232
+ email: true
233
+ whatsapp: true
234
+ communication_rules:
235
+ inbound: always-surface
236
+ outbound: internal-pre-approved
237
+ notes: Primary principal. All strategic decisions route through the CEO.
238
+ ```
239
+
240
+ ### Classification Types
241
+
242
+ Classifications determine voice and approval rules:
243
+
244
+ | Classification | Outbound Approval | Voice | Risk |
245
+ |---------------|-------------------|-------|------|
246
+ | `internal-ceo` | pre-approved | agent | low |
247
+ | `internal-executive` | pre-approved | agent | low |
248
+ | `internal-team` | pre-approved | agent | low |
249
+ | `investor` | explicit | principal-draft | high |
250
+ | `board-member` | explicit | principal-draft | critical |
251
+ | `regulator` | explicit | institutional | critical |
252
+ | `partner` | explicit | agent | medium |
253
+ | `unknown` | blocked | none | critical |
254
+
255
+ ### Adapting for Different Roles
256
+
257
+ - **Head of Engineering**: Contacts are mostly internal (engineering team, product leads, DevOps). Few external contacts. Most outbound is pre-approved.
258
+ - **Head of Compliance**: Contacts include the regulators in your jurisdictions. All regulator comms require explicit approval. Add specific contacts for each regulatory body.
259
+ - **Head of Sales/BD**: Heavy external contact list (prospects, LPs, advisors). Add classifications for `prospect` and `warm-intro` with appropriate approval levels.
260
+
261
+ The `principal` defined in `config/agent.ts` should always appear in contacts with `internal-ceo` classification and `always-surface` inbound rules.
262
+
263
+ ## 5. config/priorities.yaml -- Strategic Focus
264
+
265
+ Priorities define what the agent works on. They drive queue management, backlog execution, and drift detection.
266
+
267
+ ### Priority Structure
268
+
269
+ ```yaml
270
+ - id: P1
271
+ name: Regulatory Submission
272
+ status: active
273
+ urgency: critical
274
+ owner: alex-chen
275
+ operational_lead: regulatory-compliance
276
+ description: >
277
+ Close 12 critical technical gaps and submit the licence application.
278
+ milestones:
279
+ - name: Complete GAP-001 to GAP-005
280
+ target_date: 2026-04-30
281
+ status: in_progress
282
+ ```
283
+
284
+ ### Examples by Role
285
+
286
+ **Head of Engineering:**
287
+ ```yaml
288
+ - id: P1
289
+ name: Engine Test Coverage
290
+ urgency: critical
291
+ operational_lead: engineering-coordination
292
+ milestones:
293
+ - name: Unit test coverage above 80%
294
+ target_date: 2026-05-31
295
+ ```
296
+
297
+ **Head of Compliance:**
298
+ ```yaml
299
+ - id: P1
300
+ name: Licence Application
301
+ urgency: critical
302
+ operational_lead: regulatory-compliance
303
+ milestones:
304
+ - name: Complete remediation of 12 technical gaps
305
+ target_date: 2026-06-30
306
+ ```
307
+
308
+ **Head of Sales:**
309
+ ```yaml
310
+ - id: P1
311
+ name: LP Pipeline Development
312
+ urgency: high
313
+ operational_lead: capital-raising
314
+ milestones:
315
+ - name: Build qualified pipeline of 20 LP prospects
316
+ target_date: 2026-05-15
317
+ ```
318
+
319
+ Each priority's `operational_lead` should reference an agent definition in the `agents/` directory.
320
+
321
+ ## 6. config/environment.yaml -- System Configuration
322
+
323
+ ### Fields to Update
324
+
325
+ ```yaml
326
+ system:
327
+ operator_persona: Jordan Lee # Agent's full name
328
+ operator_role: Head of Engineering # Agent's title
329
+ company: Northwind # Usually unchanged
330
+ ceo: Alex Chen # The principal
331
+
332
+ paths:
333
+ agent_home: ~/jordan-ai # Repo directory
334
+
335
+ phone:
336
+ agent: "+1XXXXXXXXXX" # Agent's Twilio number (rename the key)
337
+
338
+ email:
339
+ agent: agent@example.com # Agent's email (rename the key)
340
+
341
+ scheduling:
342
+ timezone: Asia/Dubai # Agent's working timezone
343
+ morning_brief: "08:00" # Adjust to role needs
344
+ comms_triage: ["09:00", "13:00", "17:00"]
345
+ evening_wrap: "18:00"
346
+ ```
347
+
348
+ ### Fields to Leave Alone
349
+
350
+ - `machine` -- Populated during machine setup.
351
+ - `desktop_control` -- App control profiles are consistent across agents.
352
+ - `rate_limits` -- Global safety limits apply to all agents.
353
+ - `secrets` -- Environment variable names are standard.
354
+
355
+ ## 7. agents/ -- Specialist Agent Definitions
356
+
357
+ The repo contains 31 specialist agents. Some are universal infrastructure; others are domain-specific.
358
+
359
+ ### Universal Agents (keep for all roles)
360
+
361
+ These handle core infrastructure every agent needs:
362
+
363
+ - `inbound-dispatcher` -- Routes incoming messages
364
+ - `session-spawner` -- Manages session lifecycle
365
+ - `workflow-automation` -- Executes workflow steps
366
+ - `desktop-operator` -- macOS desktop interaction
367
+ - `slack-operator` -- Slack API operations
368
+ - `gmail-operator` -- Gmail operations
369
+ - `calendar-ops` -- Calendar management
370
+ - `browser-operator` -- Web browsing
371
+ - `whatsapp-operator` -- WhatsApp messaging
372
+ - `communications` -- Outbound comms governance
373
+ - `decision-log` -- Decision tracking
374
+ - `pmo-execution` -- Project management
375
+ - `ceo-briefing` -- Principal brief production
376
+ - `strategic-planning` -- Strategy analysis
377
+
378
+ ### Role-Specific Agents
379
+
380
+ Modify, replace, or remove these based on the agent's domain:
381
+
382
+ - `regulatory-compliance` -- Only for compliance-focused agents
383
+ - `capital-raising` -- Only for commercial or executive agents
384
+ - `corporate-development` -- Only for M&A-focused agents
385
+ - `rollup-target-sourcing` -- Only for corp dev agents
386
+ - `hiring-org-design` -- Only for HR or executive agents
387
+ - `engineering-coordination` -- Only for technical agents
388
+ - `platform-architecture` -- Only for technical agents
389
+ - `fund-ops` -- Only for operations agents
390
+
391
+ ### Creating a New Agent
392
+
393
+ Each agent lives in `agents/{agent-name}/agent.md` with YAML frontmatter:
394
+
395
+ ```markdown
396
+ ---
397
+ name: security-auditor
398
+ description: Reviews code for security vulnerabilities and compliance with security policies.
399
+ model: claude-sonnet-4-20250514
400
+ tools: ["Read", "Grep", "Glob", "Bash"]
401
+ ---
402
+
403
+ # Security Auditor
404
+
405
+ ## Mandate
406
+ Review all code changes for security vulnerabilities...
407
+
408
+ ## Responsibilities
409
+ 1. Static analysis of PRs for OWASP Top 10 issues
410
+ 2. Dependency vulnerability scanning
411
+ ...
412
+
413
+ ## Boundaries
414
+ - Never modify production code directly
415
+ - Escalate critical vulnerabilities to Head of Engineering immediately
416
+
417
+ ## Escalation Rules
418
+ - Critical CVE: immediate escalation
419
+ - High severity: flag in daily brief
420
+ ```
421
+
422
+ Choose the model based on task complexity: `claude-opus-4-6` for complex reasoning, `claude-sonnet-4-20250514` for general tasks, `claude-haiku-4-20250414` for simple/high-volume work.
423
+
424
+ ## 8. workflows/ -- Operational Cadence
425
+
426
+ Workflows are organised by cadence: `daily/`, `weekly/`, `monthly/`, `quarterly/`, `continuous/`, `event-driven/`.
427
+
428
+ ### Universal Workflows
429
+
430
+ These apply to all agents:
431
+
432
+ - `daily/morning-brief.yaml` -- Daily brief to principal
433
+ - `daily/evening-wrap.yaml` -- End-of-day summary and queue cleanup
434
+ - `daily/midday-sweep.yaml` -- SLA check and loop closure
435
+ - `continuous/backlog-executor.yaml` -- The proactive execution loop
436
+ - `continuous/inbox-processor.yaml` -- Inbound message routing
437
+ - `session-protocol.md` -- Start/end session procedures
438
+
439
+ ### Customisable Workflows
440
+
441
+ Adapt or replace these for the agent's domain:
442
+
443
+ - `weekly/hiring.yaml` -- Replace with engineering sprint review for a technical agent
444
+ - `weekly/strategic-memo.yaml` -- Keep but adjust focus areas
445
+ - `weekly/engineering-health.yaml` -- Only relevant for technical agents
446
+ - `monthly/board-pack.yaml` -- Only relevant for executive or compliance agents
447
+
448
+ ### Adding a Workflow
449
+
450
+ Create a YAML file in the appropriate cadence directory:
451
+
452
+ ```yaml
453
+ name: weekly-security-scan
454
+ cadence: weekly
455
+ day: tuesday
456
+ time: "09:00"
457
+ agent: security-auditor
458
+ steps:
459
+ - name: scan_repos
460
+ action: run_agent
461
+ agent: security-auditor
462
+ depends_on: []
463
+ - name: report
464
+ action: send_slack
465
+ channel: "#security"
466
+ depends_on: [scan_repos]
467
+ on_failure: escalate_to_principal
468
+ ```
469
+
470
+ ## 9. schedules/triggers/ -- Scheduled Prompts
471
+
472
+ Trigger files are Markdown prompts that launchd executes on a schedule. Each trigger starts with the agent's identity line.
473
+
474
+ ### What to Change
475
+
476
+ Line 1 of every trigger must match the agent:
477
+
478
+ ```markdown
479
+ You are Jordan Lee, Head of Engineering at Northwind.
480
+ ```
481
+
482
+ The rest of each trigger references queues, dashboards, and workflows. The queue names and dashboard paths are consistent across agents. Adjust the content focus:
483
+
484
+ - `daily-morning-brief.md` -- Change channel names to scan (e.g. `#engineering` instead of `#exec-office`).
485
+ - `backlog-executor.md` -- The structure stays identical; it reads all queues.
486
+ - `weekly-engineering-health.md` -- Remove or replace for non-technical agents.
487
+ - `meeting-prep.md` -- Universal; only the recipient changes.
488
+
489
+ ### Trigger Files to Review
490
+
491
+ | Trigger | Universal | Notes |
492
+ |---------|-----------|-------|
493
+ | `daily-morning-brief.md` | Yes | Update identity line and channel list |
494
+ | `daily-midday-sweep.md` | Yes | Update identity line |
495
+ | `daily-evening-wrap.md` | Yes | Update identity line |
496
+ | `backlog-executor.md` | Yes | Update identity line |
497
+ | `inbox-processor.md` | Yes | Update identity line |
498
+ | `meeting-prep.md` | Yes | Update identity line and recipient |
499
+ | `meeting-action-capture.md` | Yes | Update identity line |
500
+ | `weekly-priorities.md` | Yes | Update identity line |
501
+ | `weekly-execution.md` | Yes | Update identity line |
502
+ | `weekly-strategic-memo.md` | Yes | Update identity line and focus areas |
503
+ | `weekly-hiring.md` | Role-specific | Remove for non-HR agents |
504
+ | `weekly-engineering-health.md` | Role-specific | Remove for non-technical agents |
505
+ | `quarterly-self-assessment.md` | Yes | Update identity line |
506
+
507
+ ## 10. memory/profiles/ -- Relationship Memory
508
+
509
+ ### User Profiles
510
+
511
+ Each person the agent interacts with gets a profile at `memory/profiles/users/{slug}.yaml`:
512
+
513
+ ```yaml
514
+ name: Alex Chen
515
+ preferred_name: Alex
516
+ slug: alex-chen
517
+ role: CEO / Founder
518
+ organisation: Northwind
519
+ privilege_level: ceo
520
+
521
+ communication_preferences:
522
+ voice: direct-concise
523
+ channel_preference: slack
524
+ timezone: Asia/Dubai
525
+ notes: Prefers sharp recommendations over long reports.
526
+
527
+ standing_instructions:
528
+ - id: si-001
529
+ instruction: "Always include strategy scorecard in morning brief."
530
+ source: "slack:DXXXXXXXXXX:1775143273"
531
+ added: "2026-04-03"
532
+ ```
533
+
534
+ The `privilege_level` field determines what the person can instruct the agent to do. Levels: `ceo` (full override), `executive` (high), `team` (standard), `external` (limited).
535
+
536
+ ### Channel Profiles
537
+
538
+ Slack channels get profiles at `memory/profiles/channels/{channel}.yaml` defining tone, standing instructions, and response rules.
539
+
540
+ ### Setup for a New Agent
541
+
542
+ 1. Create a profile for the principal with `privilege_level: ceo`.
543
+ 2. Create profiles for the agent's direct reports and key stakeholders.
544
+ 3. Leave profiles sparse initially -- the agent populates them through interaction.
545
+ 4. Copy `memory/profiles/global.yaml` as-is; it contains universal memory rules.
546
+
547
+ ## 11. policies/ -- Behavioural Rules
548
+
549
+ Three policy files govern agent behaviour:
550
+
551
+ ### policies/action-classification.yaml
552
+
553
+ Defines five action levels: `observe` (read-only), `draft` (prepare without sending), `execute_autonomous` (agent sends on own authority), `email_autonomy` (email-specific rules), and `escalate_to_ceo` (requires principal approval).
554
+
555
+ **Adapting for different roles:**
556
+
557
+ - **Executive operator** -- Broad `execute_autonomous` scope. Can send to almost anyone.
558
+ - **Technical leader** -- Narrow `execute_autonomous` scope. Autonomous for internal engineering channels; explicit approval for external communications.
559
+ - **Compliance officer** -- Very restrictive. All regulatory correspondence requires explicit approval. Internal compliance updates are autonomous.
560
+
561
+ Update the examples under each action level to reflect the agent's actual authority:
562
+
563
+ ```yaml
564
+ execute_autonomous:
565
+ examples:
566
+ - Send Slack messages to engineering channels
567
+ - Create and merge pull requests
568
+ - Update CI/CD configuration
569
+ - Send code review feedback
570
+ ```
571
+
572
+ ### policies/information-barriers.yaml
573
+
574
+ Defines what information can cross which boundaries. Critical for agents that handle confidential data across deal teams, regulatory submissions, or investor conversations. Review and adjust the barrier definitions for each agent's access scope.
575
+
576
+ ### policies/prompt-injection-defence.yaml
577
+
578
+ The 5-layer defence is universal and should not be weakened. The only customisation needed is updating the agent name in Layer 1 (hard identity lock) to match the new agent.
579
+
580
+ ## 12. Quick Reference Checklist
581
+
582
+ | File | What to Change | Priority | Notes |
583
+ |------|---------------|----------|-------|
584
+ | `config/agent.ts` | All identity fields, principal, schedule | Required | Run `/init-maestro` to populate interactively |
585
+ | `CLAUDE.md` | Identity, principles, communication rules, people, control towers | Required | The most important file; fine-tune after init |
586
+ | `config/environment.yaml` | Agent name, paths, phone, email, schedule | Required | Leave machine config and rate limits alone |
587
+ | `config/contacts.yaml` | Contacts list, classification rules | Required | Tailor to the agent's communication scope |
588
+ | `config/priorities.yaml` | All priorities and milestones | Required | Define the agent's strategic focus |
589
+ | `agents/<agent-name>-chief-of-staff/agent.md` | Rename directory and rewrite | Required | This is the orchestrator agent definition |
590
+ | `schedules/triggers/*.md` | Identity line in all triggers | Required | Line 1 of every trigger must match agent |
591
+ | `policies/action-classification.yaml` | Autonomous action scope | Required | Adjust authority level for the role |
592
+ | `memory/profiles/users/` | Create principal profile | High | Other profiles build up over time |
593
+ | `agents/` (domain-specific) | Remove/add specialist agents | High | Keep universal agents; swap domain ones |
594
+ | `workflows/` | Add/remove role-specific workflows | Medium | Universal cadence stays; domain workflows change |
595
+ | `policies/information-barriers.yaml` | Barrier definitions | Medium | Critical for multi-deal or regulated roles |
596
+ | `policies/prompt-injection-defence.yaml` | Agent name in Layer 1 | Medium | Do not weaken the defence layers |
597
+ | `memory/profiles/channels/` | Channel tone and rules | Low | Builds up over time through interaction |
598
+ | `config/brand-assets.yaml` | Usually unchanged | Low | Only change if agent serves a different brand |
599
+ | `package.json` | Name and description | Low | Update to reflect new agent identity |
600
+ | `scripts/local-triggers/plists/` | Launchd labels and paths | Low | Handled by `/init-maestro` Phase 3 (generate-plists.sh) |