@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,81 @@
1
+ ---
2
+ name: org-recall
3
+ description: Consult the shared org knowledge plane — facts, contacts, and meetings other agents have recorded, ACL-scoped to what you may see. Use to pull org-wide context into your work before answering, or to record a fact for the rest of the fleet.
4
+ ---
5
+
6
+ # Org Recall
7
+
8
+ The org knowledge plane is the fleet's shared, ACL'd memory. Where session-search and
9
+ collective recall give you a memory of *your own* work, this gives you a window into
10
+ what the *org* knows: a fact agent A records is retrievable by agent B inside the ACL,
11
+ invisible outside it. It is the org-wide RAG source to consult when building context
12
+ before you answer — alongside, not instead of, your local recall.
13
+
14
+ Backed by `lib/org/knowledge.mjs` over the Cohort knowledge plane. **Fail-open**: if
15
+ the org is off or unreachable, `recall` returns `[]` and `remember` is a no-op — never
16
+ a throw.
17
+
18
+ ## The server owns the ACL — always
19
+
20
+ This is load-bearing: the client **never** filters and never decides what you may see.
21
+ The server applies a non-bypassable floor (org/unit group membership, `barrier:<cell>`
22
+ deny-override, participant-derived ACLs) derived from your **verified** identity, and
23
+ returns only what you may read. Whatever comes back is, by construction, in-scope. The
24
+ `group` argument is a scoping *hint* that can only shrink results, never widen them.
25
+ Every `recall` is an **audited read** server-side — so consult it deliberately (one
26
+ query per context build), not in a tight loop.
27
+
28
+ ## When to use
29
+
30
+ - Before answering something that other agents likely have context on — pull the shared
31
+ facts first.
32
+ - To record a durable fact the rest of the fleet should be able to find later.
33
+ - To look up an org contact or a recorded meeting.
34
+
35
+ ## Recall (the org-RAG read)
36
+
37
+ ```bash
38
+ node --input-type=module -e '
39
+ import { recall } from "./lib/org/knowledge.mjs";
40
+ import { loadConfig } from "./lib/collective/config.mjs";
41
+ const cfg = await loadConfig(process.cwd());
42
+ const facts = await recall("DFSA licensing timeline", { cfg, limit: 8 });
43
+ console.log(JSON.stringify(facts, null, 2)); // [] if org off / nothing visible
44
+ '
45
+ ```
46
+
47
+ Use `recallDetailed` instead of `recall` when you want the provenance envelope
48
+ (`returnedIds`, `groupsConsidered`) to show where an answer came from — e.g. "from
49
+ facts X,Y across groups org, unit:eng" — without a second call.
50
+
51
+ ## Remember (record a shared fact)
52
+
53
+ ```bash
54
+ node --input-type=module -e '
55
+ import { remember } from "./lib/org/knowledge.mjs";
56
+ import { loadConfig } from "./lib/collective/config.mjs";
57
+ const cfg = await loadConfig(process.cwd());
58
+ const res = await remember("Board approved the Q3 hiring plan on 2026-06-10", { cfg });
59
+ console.log(JSON.stringify(res)); // {ok:true,...} | {ok:false,skipped:true} if org off
60
+ '
61
+ ```
62
+
63
+ Most updates should **append** (provenance-preserving) — that is the default. Pass
64
+ `{ id, expectedVersion }` for a CAS replace of an existing fact, or use `forget(id,
65
+ { reason })` to tombstone one (it is never hard-deleted). `rewrite` is
66
+ designated-owner-only — reserved for asserting authorship, not routine edits.
67
+
68
+ ## Contacts and meetings
69
+
70
+ The same module exposes the shared contact and meeting books:
71
+ `upsertContact` / `listContacts` and `recordMeeting` / `listMeetings`. Use these so
72
+ "who is X" and "did we meet Y" resolve against the org's shared record, not just your
73
+ local notes.
74
+
75
+ ## Notes
76
+
77
+ - Run from the agent repo root so `config/collective.yaml` resolves.
78
+ - This is the *org* plane. For your own past sessions use `session-search`; for this
79
+ machine's cross-session cards use collective recall. They complement each other.
80
+ - Recording a fact makes it visible to everyone in the ACL — keep it factual and
81
+ attributable, never a raw transcript.
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: pipeline-review
3
+ description: Review the rollup acquisition pipeline — target status, due diligence progress, new targets, regulatory filing status. Use for pipeline check-ins and board reporting.
4
+ ---
5
+
6
+ # Acquisition Pipeline Review
7
+
8
+ You are {{agent.fullName}}, {{agent.title}}. Produce a comprehensive review of the rollup acquisition pipeline.
9
+
10
+ ## Data Sources
11
+
12
+ 1. **Pipeline tracker** — Read `memory/workstreams/acquisitions.md` for the current state of all targets.
13
+ 2. **Due diligence files** — Check `memory/workstreams/acquisitions/dd/` for in-progress DD on active targets.
14
+ 3. **Regulatory status** — Read `memory/workstreams/regulatory.md` for any regulatory dependencies on acquisitions.
15
+ 4. **Financial models** — Check `inputs/finance/` for valuation models and deal terms.
16
+ 5. **Strategic criteria** — Read `config/acquisition-criteria.md` for target screening parameters.
17
+ 6. **Recent communications** — Check `outputs/comms/` for any correspondence with targets, advisors, or regulators.
18
+
19
+ ## Review Process
20
+
21
+ 1. **Update each target's status** — Verify the pipeline stage is current:
22
+ - Identified -> Researching -> Initial Contact -> NDA Signed -> DD In Progress -> LOI -> Negotiation -> Signed -> Closing -> Closed
23
+ 2. **Flag stalled targets** — Any target that hasn't moved stages in 2+ weeks gets flagged.
24
+ 3. **Check DD completions** — For targets in DD, assess what's done and what's outstanding.
25
+ 4. **Assess pipeline health** — Is there enough top-of-funnel? Are too many targets stuck in one stage?
26
+ 5. **Regulatory cross-check** — Ensure acquisition timeline aligns with licensing and regulatory timelines per jurisdiction.
27
+
28
+ ## Output Format
29
+
30
+ ```
31
+ # Acquisition Pipeline Review — [DATE]
32
+
33
+ ## Pipeline Summary
34
+ - **Total targets**: [n]
35
+ - **Active (in DD or beyond)**: [n]
36
+ - **Closed this quarter**: [n]
37
+ - **Pipeline value**: [estimated total]
38
+
39
+ ## Active Targets
40
+
41
+ ### [Target Name] — [Stage]
42
+ - **Jurisdiction**: [country/region]
43
+ - **Status**: [current situation in 1-2 sentences]
44
+ - **DD Progress**: [% complete, key outstanding items]
45
+ - **Timeline**: [expected close date]
46
+ - **Blockers**: [if any]
47
+ - **Next action**: [specific next step with owner]
48
+
49
+ [Repeat for each active target]
50
+
51
+ ## Pipeline Health
52
+ | Stage | Count | Avg Time in Stage | Flagged |
53
+ |---|---|---|---|
54
+ | Identified | [n] | [days] | [any flags] |
55
+ | DD In Progress | [n] | [days] | [any flags] |
56
+ | Negotiation | [n] | [days] | [any flags] |
57
+ | Closing | [n] | [days] | [any flags] |
58
+
59
+ ## Stalled / At Risk
60
+ - **[Target]**: Stalled at [stage] for [n] days — [diagnosis and recommendation]
61
+
62
+ ## New Targets to Evaluate
63
+ - [Any newly identified targets with brief rationale]
64
+
65
+ ## Regulatory Dependencies
66
+ - [Any regulatory milestones that gate acquisitions]
67
+
68
+ ## {{agent.firstName}}'s Assessment
69
+ [Overall pipeline health, velocity concerns, recommendations for acceleration or pruning]
70
+ ```
71
+
72
+ ## Output
73
+
74
+ 1. Write to `outputs/pipeline/pipeline-review-YYYY-MM-DD.md`.
75
+ 2. Update `memory/workstreams/acquisitions.md` with any status changes.
76
+ 3. Present summary in conversation.
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: regulatory-status
3
+ description: Check regulatory status across all 7 jurisdictions — the regulator gap progress, incorporation status, licensing timelines. Use for regulatory check-ins and compliance tracking.
4
+ ---
5
+
6
+ # Regulatory Status Check
7
+
8
+ You are {{agent.fullName}}, {{agent.title}}. Produce a comprehensive regulatory status report across all jurisdictions.
9
+
10
+ ## Data Sources
11
+
12
+ 1. **Regulatory tracker** — Read `memory/workstreams/regulatory.md` for the master status of all jurisdictions.
13
+ 2. **the regulator gap analysis** — Check `memory/workstreams/regulatory/dfsa/` for Dubai Financial Services Authority progress.
14
+ 3. **Incorporation files** — Check `memory/workstreams/regulatory/incorporations/` for entity setup status per jurisdiction.
15
+ 4. **Licensing applications** — Check `memory/workstreams/regulatory/licensing/` for active applications and correspondence.
16
+ 5. **Legal counsel updates** — Check `inputs/legal/` for any new advice or regulatory correspondence.
17
+ 6. **Compliance calendar** — Read `config/regulatory-calendar.md` for upcoming deadlines and filing dates.
18
+
19
+ ## Jurisdictions
20
+
21
+ Track status across all 7 jurisdictions:
22
+
23
+ 1. **DIFC (Dubai)** — the regulator licensing, gap analysis, remediation
24
+ 2. **Abu Dhabi (ADGM)** — FSRA licensing, entity setup
25
+ 3. **Saudi Arabia** — CMA licensing, local partner requirements
26
+ 4. **Bahrain** — CBB licensing framework
27
+ 5. **Qatar (QFC)** — QFCRA requirements
28
+ 6. **UK** — FCA authorization (if applicable)
29
+ 7. **Cayman Islands** — CIMA registration
30
+
31
+ ## Report Structure
32
+
33
+ ```
34
+ # Regulatory Status Report — [DATE]
35
+
36
+ ## Summary Dashboard
37
+ | Jurisdiction | Entity | Incorporation | License App | License Status | Next Deadline |
38
+ |---|---|---|---|---|---|
39
+ | DIFC | [entity name] | [done/pending] | [submitted/drafting/na] | [approved/pending/gap] | [date + item] |
40
+ | ADGM | ... | ... | ... | ... | ... |
41
+ [all 7 jurisdictions]
42
+
43
+ ## the regulator Gap Analysis Progress
44
+ - **Total gaps identified**: [n]
45
+ - **Remediated**: [n] ([%])
46
+ - **In progress**: [n]
47
+ - **Outstanding**: [n]
48
+ - **Critical gaps**: [list any blocking items]
49
+
50
+ ## Jurisdiction Details
51
+
52
+ ### [Jurisdiction Name]
53
+ - **Status**: [1-2 sentence current situation]
54
+ - **Recent progress**: [what moved since last check]
55
+ - **Blockers**: [if any]
56
+ - **Next steps**: [specific actions with owners and dates]
57
+ - **Cost to date**: [fees, legal costs if tracked]
58
+
59
+ [Repeat for each jurisdiction]
60
+
61
+ ## Upcoming Deadlines (Next 30 Days)
62
+ | Date | Jurisdiction | Item | Owner | Status |
63
+ |---|---|---|---|---|
64
+ | [date] | [jurisdiction] | [filing/meeting/deadline] | [who] | [on track/at risk] |
65
+
66
+ ## Cross-Jurisdiction Dependencies
67
+ - [Any items where one jurisdiction's progress depends on another]
68
+
69
+ ## Regulatory Risks
70
+ - [Identified risks with likelihood and impact assessment]
71
+
72
+ ## {{agent.firstName}}'s Assessment
73
+ [Overall regulatory program health, velocity, and recommendations for acceleration]
74
+ ```
75
+
76
+ ## Output
77
+
78
+ 1. Write to `outputs/regulatory/regulatory-status-YYYY-MM-DD.md`.
79
+ 2. Update `memory/workstreams/regulatory.md` with any new information.
80
+ 3. Flag any deadlines within 14 days as urgent in the conversation.
81
+ 4. Present summary in conversation.
@@ -0,0 +1,78 @@
1
+ ---
2
+ name: router-why
3
+ description: Explain a model-routing decision — which model on which harness the router would pick for a task, and why. Use when a spawn used an unexpected model, when validating a routing-config change, or to understand the cost/fallback of a task class.
4
+ ---
5
+
6
+ # Router Why
7
+
8
+ The LLM router decides which model on which harness runs each spawn — cheap/local
9
+ models for cheap work, Anthropic for the rest, and an Anthropic safety net whenever
10
+ config is missing or a provider is down. When that decision is surprising, this skill
11
+ makes it explainable. It is a **read-only** simulation: it resolves the chain for a
12
+ request without spawning anything.
13
+
14
+ Backed by `maestro router why` (which calls `lib/model-router/resolve.mjs#resolveChain`
15
+ with your real `config/model-routing.yaml` and catalog).
16
+
17
+ ## When to use
18
+
19
+ - A spawn used a model you didn't expect — find out which rule matched.
20
+ - You changed `config/model-routing.yaml` and want to confirm the new routing.
21
+ - You need the estimated cost or the fallback chain for a given task class.
22
+ - A model is being skipped — check whether its breaker is open or its credential is missing.
23
+
24
+ ## Explain a decision
25
+
26
+ By task class (the common case):
27
+
28
+ ```bash
29
+ maestro router why classify
30
+ maestro router why deep_reasoning
31
+ ```
32
+
33
+ By a full request object (when data class, harness hint, or budget band matters):
34
+
35
+ ```bash
36
+ maestro router why '{"task_class":"summarize","data_class":"internal","lane":"batch"}'
37
+ ```
38
+
39
+ The output is the resolved `RouteDecision`: the **chosen** model (provider / model /
40
+ harness / transport), the ordered **chain** it would fall through, the `tried` entries
41
+ with skip reasons (breaker open, credential missing, data-class disallowed), the
42
+ estimated cost, the resolved `lane`, and the mandatory one-line `explain` string plus
43
+ the `audit` block (which rule matched, fallback reason, config source, overlay
44
+ version).
45
+
46
+ ## Validate config before debugging
47
+
48
+ If the decision looks wrong, first confirm the config is valid:
49
+
50
+ ```bash
51
+ maestro router validate
52
+ ```
53
+
54
+ This lints `config/model-routing.yaml` against the catalog and env — unknown refs,
55
+ missing credentials, malformed rules. A warning here often explains a surprising route.
56
+
57
+ ## Reading the result
58
+
59
+ - **Which rule matched** — `audit.rule` (the `match` block, a named rule, or
60
+ `<default>`). First-match wins, top to bottom.
61
+ - **Why a model was skipped** — each `tried` entry carries a `reason`: `breaker_open`
62
+ (provider tripped — see `health.mjs` cooldowns), `missing_credential` (no
63
+ local key and no org lease available — see the `org-credential` skill),
64
+ `data_class_disallowed` (the backend isn't allowed that data class).
65
+ - **Budget pressure** — when daily spend crosses a band (75/90/100%), the budget
66
+ ladder degrades the chain to cheaper rungs; the chosen model may be lower-grade than
67
+ the rule's first choice. That is expected under load, not a fault.
68
+ - **Anthropic safety net** — if `chosen` is Anthropic and the explain says
69
+ `no_v2_config` / `kill_switch`, the router collapsed to the safe default; routing is
70
+ effectively off.
71
+
72
+ ## Notes
73
+
74
+ - Run from the agent repo root so the config and catalog resolve.
75
+ - This never spawns or spends — it only simulates the decision.
76
+ - To change routing, edit `config/model-routing.yaml` (a `routing_policy` rule or an
77
+ alias), re-run `maestro router validate`, then re-check with `maestro router why`.
78
+ Full reference: `docs/guides/model-routing.md`.
@@ -0,0 +1,91 @@
1
+ ---
2
+ name: schedule-meeting
3
+ description: Schedule a meeting using Google Calendar MCP or Calendly. Handle timezone conversion, find availability, and send invites.
4
+ ---
5
+
6
+ # Schedule Meeting
7
+
8
+ You are {{agent.fullName}}, {{agent.title}}. Schedule meetings efficiently with proper timezone handling and availability checks.
9
+
10
+ ## Required Inputs
11
+
12
+ When invoked, gather from the user (or infer from context):
13
+
14
+ - **Participants**: Who needs to attend? (names or email addresses)
15
+ - **Purpose**: What is the meeting about? (used for title and agenda)
16
+ - **Duration**: How long? (default: 30 minutes)
17
+ - **Urgency**: When does this need to happen? (today, this week, flexible)
18
+ - **Preferred times**: Any constraints from {{agent.principal.firstName}} or participants?
19
+
20
+ ## Process
21
+
22
+ ### 1. Resolve Participants
23
+
24
+ - Check `config/contacts.md` for participant email addresses, timezones, and scheduling preferences.
25
+ - Note any known scheduling constraints (e.g., "never before 10am", "Fridays off").
26
+
27
+ ### 2. Check Availability
28
+
29
+ - Use Google Calendar MCP (`mcp__google_calendar`) to check {{agent.principal.firstName}}'s calendar for open slots.
30
+ - If participant calendars are accessible, cross-reference availability.
31
+ - If not, propose 2-3 options for the organizer to share.
32
+
33
+ ### 3. Timezone Handling
34
+
35
+ - Default CEO timezone: Read from `config/settings.md` (typically Gulf Standard Time, UTC+4).
36
+ - Convert all proposed times to each participant's local timezone.
37
+ - Always display times in both the CEO's timezone and the participant's timezone.
38
+ - Use format: "2:00 PM GST / 10:00 AM GMT / 6:00 AM EST"
39
+
40
+ ### 4. Create the Event
41
+
42
+ Using Google Calendar MCP (when available):
43
+
44
+ - **Title**: Clear, specific (not just "Meeting" or "Call")
45
+ - **Description**: Include agenda, context, any prep materials needed
46
+ - **Duration**: As specified
47
+ - **Attendees**: All participants
48
+ - **Reminders**: 15 minutes before (default)
49
+ - **Video link**: Add Google Meet or Zoom as appropriate
50
+
51
+ ### 5. Send Invites
52
+
53
+ - Calendar invite goes via Google Calendar.
54
+ - For important external meetings, also draft a courtesy email: "Looking forward to our call on [date]..."
55
+
56
+ ## Output Format
57
+
58
+ ```
59
+ # Meeting Scheduled
60
+
61
+ **Title**: [Meeting title]
62
+ **Date**: [Day, Date]
63
+ **Time**: [Time with all relevant timezones]
64
+ **Duration**: [Duration]
65
+ **Participants**: [List with emails]
66
+ **Location**: [Video link or physical location]
67
+ **Agenda**:
68
+ 1. [Item]
69
+ 2. [Item]
70
+
71
+ **Calendar event created**: [Yes/No — pending MCP availability]
72
+ **Invite sent to**: [list]
73
+
74
+ **Pre-meeting prep needed**:
75
+ - [Any documents to prepare or review before the meeting]
76
+ ```
77
+
78
+ ## Output
79
+
80
+ 1. Create calendar event via MCP if available.
81
+ 2. Log to `outputs/calendar/meetings-scheduled.md` for tracking.
82
+ 3. If meeting relates to an open loop, update `memory/executive/open-loops.md`.
83
+ 4. Present confirmation in conversation.
84
+
85
+ ## Scheduling Principles
86
+
87
+ - Protect deep work blocks — avoid scheduling over focus time if marked on calendar.
88
+ - Batch meetings when possible — avoid isolated 30-min calls breaking up the day.
89
+ - Buffer time — leave 15 minutes between back-to-back meetings.
90
+ - Morning preference for high-stakes meetings (investor, board, key partner).
91
+ - Friday afternoons: avoid scheduling unless urgent.
@@ -0,0 +1,71 @@
1
+ ---
2
+ name: session-search
3
+ description: Recall your own past Claude Code sessions verbatim — full-text search across every prior session transcript, with four modes (discovery, scroll, read, browse). Use when you need the exact wording, the precise steps, or the full context of something you did before, beyond the budgeted memory digest.
4
+ ---
5
+
6
+ # Session Search
7
+
8
+ Verbatim recall of your own past sessions. The SessionStart memory digest gives
9
+ you a small, budgeted gist; this gives you the full transcript on demand. Backed
10
+ by a local FTS5 index over `logs/sessions/*.jsonl` at `state/learning/sessions.db`.
11
+
12
+ It shells `scripts/learning/session-search.mjs`. Run it from the agent repo root
13
+ (so `AGENT_ROOT` resolves). If the index looks empty, ingest first.
14
+
15
+ ## When to use
16
+
17
+ - You remember solving something but not exactly how — find and re-read it.
18
+ - A user references "what you said last week" and you need the precise wording.
19
+ - You want to reuse the concrete steps of a past procedure verbatim.
20
+ - Prefer this over re-deriving an approach you have clearly done before.
21
+
22
+ ## Modes
23
+
24
+ ### discovery (default) — FIND a session
25
+ Ranked full-text hits across all sessions. Each matched session shows a
26
+ **bookend** (its first and last turn, for orientation) plus the matching turns
27
+ with snippets.
28
+
29
+ ```bash
30
+ node scripts/learning/session-search.mjs "duplicate charge reconciliation"
31
+ ```
32
+
33
+ ### scroll — read AROUND a hit
34
+ A window of turns either side of a specific turn (from a discovery result).
35
+
36
+ ```bash
37
+ node scripts/learning/session-search.mjs --mode=scroll --session=<session_id> --seq=42 --window=6
38
+ ```
39
+
40
+ ### read — the FULL session
41
+ Every turn of one session, in order.
42
+
43
+ ```bash
44
+ node scripts/learning/session-search.mjs --mode=read --session=<session_id>
45
+ ```
46
+
47
+ ### browse — recent sessions
48
+ The most-recent sessions (metadata only), newest first.
49
+
50
+ ```bash
51
+ node scripts/learning/session-search.mjs --mode=browse --top=20
52
+ ```
53
+
54
+ ### ingest — (re)build the index
55
+ Idempotent; safe to run anytime. The Stop-hook worker and a daily catch-up keep
56
+ it warm automatically, so you rarely need this by hand.
57
+
58
+ ```bash
59
+ node scripts/learning/session-search.mjs ingest
60
+ ```
61
+
62
+ ## Output
63
+
64
+ Add `--json` to any command for machine-readable output (useful when chaining a
65
+ discovery hit into a scroll/read call).
66
+
67
+ ## Notes
68
+
69
+ - Read-only and fail-open: a missing index returns empty results, never an error.
70
+ - This indexes YOUR sessions only — it is not a replacement for `rag_search`
71
+ (the knowledge/decisions corpus) or `collective recall` (cross-session cards).
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: set-reminder
3
+ description: Create a dynamic scheduled job in natural language — "remind me Friday 9am", "every weekday 8am summarize the channel". Use to set a one-off reminder or a recurring task with a payload, list what is scheduled, or cancel a job.
4
+ ---
5
+
6
+ # Set Reminder (dynamic jobs)
7
+
8
+ The everyday-employee scheduling primitive: turn "remind X this Friday at 9am" or
9
+ "every weekday at 8am summarize the channel" into a real job the daemon fires. This is
10
+ distinct from the framework's fixed cadences (morning brief, inbox sweep) — those are
11
+ built in; this is for the ad-hoc jobs you create on demand.
12
+
13
+ Backed by `lib/scheduling/dynamic-jobs.mjs` over an atomic
14
+ `state/scheduling/jobs.json`. The daemon's `dynamic-jobs` cadence checks `dueJobs()`
15
+ on its timer and delivers each job's payload — you just create the job; firing is
16
+ automatic. Pure, fail-open, and crash-safe (a corrupt store reads as empty; a missed
17
+ window catches up once rather than replaying a burst).
18
+
19
+ ## When to use
20
+
21
+ - "Remind me / remind <person> at <time>" — a one-off nudge.
22
+ - "Every <weekday/day> at <time>, do <recurring task>" — a recurring job with a payload.
23
+ - Listing what you have scheduled, or cancelling a job you no longer need.
24
+
25
+ ## Parse the "when" first
26
+
27
+ `parseWhen(text, { tz })` turns a phrase into either `{ at }` (one-off) or `{ cron }`
28
+ (recurring). Pass the principal's timezone so "9am" lands on the right wall clock
29
+ (read it from `config/settings.md` / agent config; defaults to UTC).
30
+
31
+ It recognises: `in 2 hours` / `in 30 minutes`, `tomorrow 9am`, `today 5pm`, a bare
32
+ time (`9am` → next occurrence), `friday 9am` / `next friday 9am`, and recurring forms
33
+ `every weekday at 8am` (cron `0 8 * * 1-5`), `every day at 7am`, `every monday 9am`,
34
+ `every weekend …`. If nothing schedule-like is found it returns `null` — ask the user
35
+ to rephrase rather than guessing.
36
+
37
+ ## Creating a job
38
+
39
+ ```bash
40
+ node --input-type=module -e '
41
+ import { parseWhen, createJob } from "./lib/scheduling/dynamic-jobs.mjs";
42
+ const tz = "Asia/Dubai"; // the principal timezone
43
+ const when = parseWhen("every weekday at 8am", { tz });
44
+ if (!when) { console.error("could not parse the time — ask to rephrase"); process.exit(2); }
45
+ const job = createJob({
46
+ agentRoot: process.cwd(),
47
+ when, // {at,tz} or {cron,tz} from parseWhen
48
+ action: "channel-summary", // REQUIRED: what the trigger should do
49
+ payload: { channel: "#engineering", text: "Summarize overnight activity" },
50
+ });
51
+ console.log(JSON.stringify(job, null, 2));
52
+ '
53
+ ```
54
+
55
+ `createJob` requires `when` (the `parseWhen` descriptor) and `action` (a string the
56
+ firing trigger dispatches on); `payload` is the free-form arguments that action needs —
57
+ a reminder text, a task description, a channel id. Keep the payload small and
58
+ self-describing; the daemon hands it straight to `schedules/triggers/dynamic-jobs.md`
59
+ when the job fires. `ttlMs` overrides the default one-off staleness window.
60
+
61
+ ## Listing and cancelling
62
+
63
+ ```bash
64
+ # list
65
+ node --input-type=module -e '
66
+ import { listJobs } from "./lib/scheduling/dynamic-jobs.mjs";
67
+ console.log(JSON.stringify(listJobs(process.cwd()), null, 2));
68
+ '
69
+
70
+ # cancel by id
71
+ node --input-type=module -e '
72
+ import { cancelJob } from "./lib/scheduling/dynamic-jobs.mjs";
73
+ console.log(JSON.stringify(cancelJob(process.cwd(), "JOB_ID")));
74
+ '
75
+ ```
76
+
77
+ ## Behaviour to know
78
+
79
+ - **One-off TTL.** A one-off whose window was missed by more than ~6h (e.g. the box was
80
+ down) is skipped and cancelled rather than fired late — a "9am reminder" never
81
+ surfaces at 6pm.
82
+ - **Recurring catch-up.** A recurring job that missed several windows fires **once** on
83
+ the next check and re-targets the next window — it does not replay the backlog.
84
+ - **Crash-safe.** Writes are atomic; an unreadable store reads as empty rather than
85
+ wedging every job.
86
+
87
+ ## Notes
88
+
89
+ - Run from the agent repo root so `state/scheduling/` resolves.
90
+ - This creates the job only; the daemon does the firing. If the daemon is down, jobs
91
+ simply fire (or catch up) when it comes back.
92
+ - When the reminder is a user-facing message, write it in the house voice
93
+ (`policies/communication-style.md`) — plain, no filler, no emoji.
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: slack-followup
3
+ description: Check all pending Slack follow-ups — messages awaiting reply, commitments overdue, threads needing continuation. Use Slack MCP when available.
4
+ ---
5
+
6
+ # Slack Follow-Up Tracker
7
+
8
+ You are {{agent.fullName}}, {{agent.title}}. Track and surface all pending Slack follow-ups.
9
+
10
+ ## Data Sources
11
+
12
+ 1. **Slack MCP** — Use `mcp__slack` to query channels and DMs for:
13
+ - Messages from {{agent.principal.firstName}} that received no reply
14
+ - Messages to {{agent.principal.firstName}} awaiting his reply
15
+ - Threads where the principal was mentioned but hasn't responded
16
+ - Commitments made in Slack ("I'll send that by...", "Let me follow up on...")
17
+ 2. **If Slack MCP unavailable** — Check `inputs/slack/` for exported conversations.
18
+ 3. **Follow-up log** — Read `memory/comms/slack-followups.md` for previously tracked items.
19
+ 4. **Contacts** — Reference `config/contacts.md` to understand relationship priority.
20
+
21
+ ## Processing Rules
22
+
23
+ 1. **Scan channels** — Check all active workspace channels for threads involving the CEO or key stakeholders.
24
+ 2. **Identify commitments** — Look for language indicating promises or deadlines:
25
+ - "I'll...", "Will do...", "By [date]...", "Let me get back to you..."
26
+ - "Can you send...", "Please follow up...", "Waiting on..."
27
+ 3. **Calculate overdue status** — Compare commitment dates against today's date.
28
+ 4. **Prioritize by relationship** — Investor, board member, and partner follow-ups rank higher.
29
+
30
+ ## Output Format
31
+
32
+ ```
33
+ # Slack Follow-Up Report — [DATE]
34
+
35
+ ## Overdue (Action Required)
36
+ | Thread | Commitment | Due | Days Late | Owner |
37
+ |---|---|---|---|---|
38
+ | [#channel or DM] | [what was promised] | [date] | [n] | [who owes] |
39
+
40
+ ## Due Today
41
+ | Thread | Commitment | Owner |
42
+ |---|---|---|
43
+ | [context] | [what's due] | [who] |
44
+
45
+ ## Awaiting Replies (From Others)
46
+ - **[Person]** in [#channel]: [topic] — sent [date], no reply yet ([n] days)
47
+
48
+ ## Threads Needing Continuation
49
+ - [#channel]: [topic] — last message [date], appears unresolved
50
+
51
+ ## Recommended Actions
52
+ 1. [Specific action {{agent.firstName}} recommends, e.g., "Nudge X about Y"]
53
+ 2. [Draft nudge message if appropriate]
54
+ ```
55
+
56
+ ## Output
57
+
58
+ 1. Write report to `outputs/followups/slack-followup-YYYY-MM-DD.md`.
59
+ 2. Update `memory/comms/slack-followups.md` with current state.
60
+ 3. Present summary in conversation with recommended actions.
61
+
62
+ ## Tone
63
+
64
+ Be specific about what's owed and to whom. Don't let things slip quietly — surface them clearly so they can be addressed or consciously deprioritized.