@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,141 @@
1
+ # Backlog Executor — Continuous Execution Loop
2
+ # Runs every 10 minutes via launchd
3
+ # This is the "getting shit done" engine — items move from open → resolved → closed
4
+
5
+ name: backlog-executor
6
+ type: continuous
7
+ schedule: "*/10 * * * *"
8
+ timezone: Asia/Dubai
9
+ description: >
10
+ The core execution engine. Every 10 minutes: check quota, read all queues,
11
+ select top actionable items, spawn parallel agents to execute, review results,
12
+ update queues. Items continuously move forward — not sitting in queues.
13
+
14
+ steps:
15
+ # ── Gate: Check API quota before spawning agents ──
16
+ - id: quota-gate
17
+ skill: claude-pace
18
+ action: check-quota-headroom
19
+ description: >
20
+ Check Claude API rate limit quota before spawning parallel agents.
21
+ Determines execution batch size based on pace delta zone.
22
+ timeout: 30
23
+ outputs:
24
+ pace_delta: green|yellow|red
25
+ max_parallel_agents: 5|2|1
26
+ recommendation: proceed|reduce|critical-only
27
+ on_result:
28
+ green:
29
+ max_parallel: 5
30
+ include_improvement_backlog: true
31
+ yellow:
32
+ max_parallel: 2
33
+ include_improvement_backlog: false
34
+ red:
35
+ max_parallel: 1
36
+ include_improvement_backlog: false
37
+ skip_non_critical: true
38
+
39
+ # ── Read all queues and select actionable items ──
40
+ - id: queue-scan
41
+ agent: pmo-execution
42
+ action: scan-all-queues
43
+ description: Read all 15 operational queues, select top actionable items by priority
44
+ timeout: 120
45
+ depends_on: [quota-gate]
46
+ inputs:
47
+ queues_dir: state/queues/
48
+ max_items: "{quota-gate.outputs.max_parallel_agents}"
49
+ include_improvement_backlog: "{quota-gate.outputs.on_result.include_improvement_backlog}"
50
+ status_filter: [open, in_progress, blocked]
51
+ sort_by: [priority, sla_deadline, created_at]
52
+ outputs:
53
+ selected_items: []
54
+ queue_summary: {}
55
+
56
+ # ── Spawn parallel execution agents ──
57
+ - id: parallel-execution
58
+ agent: session-spawner
59
+ action: spawn-execution-agents
60
+ description: >
61
+ Spawn one background agent per selected item. Each agent gets full context
62
+ and executes independently. Quota-gated parallelism.
63
+ timeout: 1800 # 30 minutes max for the batch
64
+ depends_on: [queue-scan]
65
+ inputs:
66
+ items: "{queue-scan.outputs.selected_items}"
67
+ max_concurrent: "{quota-gate.outputs.max_parallel_agents}"
68
+ mode: background
69
+ outputs:
70
+ agent_sessions: []
71
+ results: []
72
+
73
+ # ── Monitor running agents (if agents-observe is active) ──
74
+ - id: agent-monitoring
75
+ skill: agents-observe
76
+ action: monitor-parallel-execution
77
+ description: >
78
+ Monitor spawned agents for failures, hangs, or resource contention.
79
+ Only runs if agents-observe dashboard is active — otherwise skipped.
80
+ timeout: 60
81
+ depends_on: [parallel-execution]
82
+ optional: true # Skip if agents-observe is not running
83
+ inputs:
84
+ session_ids: "{parallel-execution.outputs.agent_sessions}"
85
+ check_for: [hung_agents, error_patterns, resource_contention]
86
+ outputs:
87
+ health_report: {}
88
+ failed_agents: []
89
+
90
+ # ── Review results and update queues ──
91
+ - id: results-review
92
+ agent: pmo-execution
93
+ action: review-execution-results
94
+ description: >
95
+ Review agent outputs, update queue item statuses, mark completed items
96
+ as resolved, flag failures for investigation.
97
+ timeout: 120
98
+ depends_on: [parallel-execution, agent-monitoring]
99
+ inputs:
100
+ results: "{parallel-execution.outputs.results}"
101
+ health_report: "{agent-monitoring.outputs.health_report}"
102
+ failed_agents: "{agent-monitoring.outputs.failed_agents}"
103
+ outputs:
104
+ items_resolved: []
105
+ items_failed: []
106
+ items_requeued: []
107
+
108
+ # ── Update executive summary ──
109
+ - id: dashboard-update
110
+ agent: pmo-execution
111
+ action: update-executive-summary
112
+ description: Refresh executive summary dashboard with cycle results
113
+ timeout: 60
114
+ depends_on: [results-review]
115
+ inputs:
116
+ resolved: "{results-review.outputs.items_resolved}"
117
+ failed: "{results-review.outputs.items_failed}"
118
+ requeued: "{results-review.outputs.items_requeued}"
119
+ dashboard: state/dashboards/executive-summary.yaml
120
+
121
+ # ── Log cycle ──
122
+ - id: cycle-log
123
+ action: log
124
+ description: Append cycle summary to backlog executor log
125
+ depends_on: [dashboard-update]
126
+ inputs:
127
+ file: logs/workflows/{date}-backlog-executor.jsonl
128
+ data:
129
+ cycle_time: "{timestamp}"
130
+ pace_delta: "{quota-gate.outputs.pace_delta}"
131
+ items_selected: "{queue-scan.outputs.selected_items.length}"
132
+ items_resolved: "{results-review.outputs.items_resolved.length}"
133
+ items_failed: "{results-review.outputs.items_failed.length}"
134
+
135
+ on_failure:
136
+ action: log-and-notify
137
+ message: "Backlog executor cycle failed at step {failed_step}"
138
+ notify: agent-self # the executing agent (operator)
139
+ severity: high
140
+ # If quota-gate fails, the entire cycle is skipped — this is by design
141
+ quota_gate_failure: skip_cycle
@@ -0,0 +1,168 @@
1
+ # Continuous Inbound Monitoring Loop
2
+ # Runs perpetually via launchd — polls all channels and dispatches responses
3
+ # This is the heartbeat of the agent's always-on executive operations
4
+
5
+ name: inbound-monitor
6
+ type: continuous # Not scheduled — runs as a persistent loop
7
+ description: >
8
+ Perpetual monitoring loop across Slack, WhatsApp, and Gmail.
9
+ Detects new inbound messages, classifies them, and routes to
10
+ the appropriate response path.
11
+
12
+ # Monitoring configuration
13
+ monitors:
14
+ slack:
15
+ agent: slack-operator
16
+ mode: observe
17
+ interval_seconds: 60
18
+ scope:
19
+ - type: mentions
20
+ description: Any @mention of the agent or the principal
21
+ - type: dms
22
+ description: All direct messages
23
+ - type: channels
24
+ source: config/slack-channels.yaml
25
+ description: Priority channels only
26
+ detection:
27
+ method: screenshot-diff # Compare screenshots to detect new messages
28
+ fallback: timestamp-check # Compare last-seen timestamp
29
+ output: outputs/inbound/queue/slack-{timestamp}.yaml
30
+
31
+ gmail:
32
+ agent: gmail-operator
33
+ mode: observe
34
+ interval_seconds: 120
35
+ scope:
36
+ - type: unread
37
+ description: All unread messages in inbox
38
+ - type: priority
39
+ source: config/contacts.yaml
40
+ description: Messages from priority senders surfaced first
41
+ detection:
42
+ method: unread-count-diff # Detect new unread messages
43
+ output: outputs/inbound/queue/gmail-{timestamp}.yaml
44
+
45
+ whatsapp:
46
+ agent: whatsapp-operator
47
+ mode: observe
48
+ interval_seconds: 120
49
+ scope:
50
+ - type: business
51
+ description: Business-tagged contacts only
52
+ source: config/contacts.yaml
53
+ - type: unread
54
+ description: Any unread messages in business chats
55
+ detection:
56
+ method: screenshot-diff
57
+ output: outputs/inbound/queue/whatsapp-{timestamp}.yaml
58
+
59
+ # Dispatch configuration
60
+ dispatch:
61
+ agent: inbound-dispatcher
62
+ interval_seconds: 30 # Check queue every 30 seconds
63
+ input: outputs/inbound/queue/
64
+ classification_output: outputs/inbound/classified/
65
+
66
+ routing:
67
+ direct-reply:
68
+ handler: agent-self # the executing agent (operator)
69
+ description: The agent handles directly — default route for most inbound
70
+ max_response_time: 120 # 2 minutes for DMs, 5 minutes for channels
71
+ priority: highest
72
+
73
+ spawn-session:
74
+ handler: session-spawner
75
+ description: Spawn dedicated Claude Code session for complex work
76
+ output: outputs/sessions/
77
+ max_concurrent: 5
78
+
79
+ escalate-to-ceo:
80
+ handler: agent-self # the executing agent (operator)
81
+ description: >
82
+ Alert the principal only for binding commitments, regulatory submissions,
83
+ deal terms, or genuinely strategic decisions. The agent decides when this applies.
84
+ method: slack-dm # DM the principal on Slack
85
+ fallback: whatsapp # If Slack unavailable, WhatsApp
86
+
87
+ defer:
88
+ handler: pmo-execution
89
+ description: Add to next scheduled triage (low-priority items only)
90
+ output: outputs/inbound/deferred/
91
+
92
+ # Autonomous response rules
93
+ # The agent is fully autonomous — she responds to all inbound communications
94
+ # using her own judgement as Chief of Staff. No per-message approval gates.
95
+ autonomous_response:
96
+ enabled: true
97
+ mode: full_autonomy # The agent decides what to send and when
98
+ categories:
99
+ - id: dm-response
100
+ description: Respond to any DM from any workspace user
101
+ channels: [slack]
102
+ scope: all_users # Not limited to known contacts
103
+ approval: autonomous
104
+ response_time_target: 120 # 2 minutes for DMs
105
+ log: true
106
+
107
+ - id: channel-response
108
+ description: Respond to mentions and relevant messages in monitored channels
109
+ channels: [slack]
110
+ scope: monitored_channels
111
+ approval: autonomous
112
+ response_time_target: 300 # 5 minutes for channel messages
113
+ log: true
114
+
115
+ - id: email-response
116
+ description: Respond to all inbound email
117
+ channels: [gmail]
118
+ scope: all_senders
119
+ approval: autonomous
120
+ response_time_target: 900 # 15 minutes for email
121
+ log: true
122
+
123
+ - id: whatsapp-response
124
+ description: Respond to WhatsApp messages from business contacts
125
+ channels: [whatsapp]
126
+ scope: business_contacts
127
+ approval: autonomous
128
+ response_time_target: 300
129
+ log: true
130
+
131
+ - id: calendar-management
132
+ description: Accept, decline, reschedule calendar invitations
133
+ channels: [gmail, google-calendar]
134
+ approval: autonomous
135
+ log: true
136
+
137
+ - id: proactive-followup
138
+ description: Initiate follow-ups on open loops without being prompted
139
+ channels: [slack, gmail, whatsapp]
140
+ source: outputs/followups/
141
+ approval: autonomous
142
+ log: true
143
+
144
+ - id: status-update
145
+ description: Provide status updates on any tracked workstream
146
+ channels: [slack, gmail]
147
+ scope: all_contacts
148
+ source: knowledge/memory/executive-memory.yaml
149
+ approval: autonomous
150
+ log: true
151
+
152
+ # Emergency stop integration
153
+ emergency_stop:
154
+ check_file: .emergency-stop
155
+ check_interval: 10 # Check every 10 seconds
156
+ on_stop: halt-all-monitors
157
+
158
+ # Health reporting
159
+ health:
160
+ report_interval: 300 # Report health every 5 minutes
161
+ output: logs/monitor-health.log
162
+ metrics:
163
+ - messages_detected
164
+ - messages_classified
165
+ - auto_responses_sent
166
+ - sessions_spawned
167
+ - escalations_triggered
168
+ - errors
@@ -0,0 +1,197 @@
1
+ # Daily Applicant Triage
2
+ # Runs daily at 09:00 GST (UTC+4)
3
+ # Checks for new applications, AI screens, classifies, and drafts responses
4
+
5
+ name: applicant-triage
6
+ schedule: "0 9 * * *" # 09:00 daily
7
+ timezone: Asia/Dubai
8
+ description: >
9
+ Daily triage of incoming job applications across all channels. AI screens
10
+ new candidates, classifies them (advance / hold / close), drafts appropriate
11
+ responses, and queues correspondence for approval.
12
+
13
+ steps:
14
+ - id: scan-linkedin-applications
15
+ agent: hiring-org-design
16
+ action: scan-channel-applications
17
+ description: Check for new applications received via LinkedIn
18
+ timeout: 300
19
+ inputs:
20
+ channel: linkedin
21
+ source: ~/hr-system/applications/linkedin/
22
+ since: last_24_hours
23
+ outputs:
24
+ file: outputs/briefs/daily/{date}/applicants-linkedin.md
25
+
26
+ - id: scan-website-applications
27
+ agent: hiring-org-design
28
+ action: scan-channel-applications
29
+ description: Check for new applications received via the company website
30
+ timeout: 300
31
+ parallel_with: scan-linkedin-applications
32
+ inputs:
33
+ channel: website
34
+ source: ~/hr-system/applications/website/
35
+ since: last_24_hours
36
+ outputs:
37
+ file: outputs/briefs/daily/{date}/applicants-website.md
38
+
39
+ - id: scan-email-applications
40
+ agent: hiring-org-design
41
+ action: scan-channel-applications
42
+ description: Check for new applications received via email
43
+ timeout: 300
44
+ parallel_with: scan-linkedin-applications
45
+ inputs:
46
+ channel: email
47
+ source: ~/hr-system/applications/email/
48
+ since: last_24_hours
49
+ outputs:
50
+ file: outputs/briefs/daily/{date}/applicants-email.md
51
+
52
+ - id: consolidate-new-applicants
53
+ agent: hiring-org-design
54
+ action: consolidate-applicants
55
+ description: Merge all new applications into a single candidate list with deduplication
56
+ timeout: 180
57
+ depends_on:
58
+ [
59
+ scan-linkedin-applications,
60
+ scan-website-applications,
61
+ scan-email-applications,
62
+ ]
63
+ inputs:
64
+ sources:
65
+ - outputs/briefs/daily/{date}/applicants-linkedin.md
66
+ - outputs/briefs/daily/{date}/applicants-website.md
67
+ - outputs/briefs/daily/{date}/applicants-email.md
68
+ outputs:
69
+ file: outputs/briefs/daily/{date}/new-applicants-consolidated.md
70
+
71
+ - id: ai-screen-candidates
72
+ agent: hiring-org-design
73
+ action: ai-screen-candidates
74
+ description: Run AI screening on all new candidates — score 0-100 on role fit
75
+ timeout: 600
76
+ depends_on: [consolidate-new-applicants]
77
+ inputs:
78
+ candidates: outputs/briefs/daily/{date}/new-applicants-consolidated.md
79
+ job_descriptions: ~/hr-system
80
+ screening_config:
81
+ advance_threshold: 75
82
+ reject_threshold: 40
83
+ outputs:
84
+ file: outputs/briefs/daily/{date}/screening-scores.md
85
+
86
+ - id: classify-candidates
87
+ agent: hiring-org-design
88
+ action: classify-screened-candidates
89
+ description: >
90
+ Classify candidates into three categories:
91
+ advance (>= 75), hold for review (40-74), close off (< 40)
92
+ timeout: 180
93
+ depends_on: [ai-screen-candidates]
94
+ inputs:
95
+ screening_results: outputs/briefs/daily/{date}/screening-scores.md
96
+ config: config/hiring.yaml
97
+ outputs:
98
+ file: outputs/briefs/daily/{date}/candidate-classification.md
99
+
100
+ - id: draft-advance-responses
101
+ agent: hiring-org-design
102
+ action: draft-suitable-candidate-responses
103
+ description: Draft warm outreach for candidates advancing to next stage
104
+ timeout: 300
105
+ depends_on: [classify-candidates]
106
+ inputs:
107
+ classification: outputs/briefs/daily/{date}/candidate-classification.md
108
+ category: advance
109
+ tone: warm_professional
110
+ voice: agent
111
+ sla: 24h
112
+ outputs:
113
+ file: outputs/comms/hiring/{date}/daily-advance-drafts.md
114
+
115
+ - id: draft-hold-responses
116
+ agent: hiring-org-design
117
+ action: draft-hold-responses
118
+ description: Draft acknowledgement messages for candidates held for hiring manager review
119
+ timeout: 300
120
+ parallel_with: draft-advance-responses
121
+ depends_on: [classify-candidates]
122
+ inputs:
123
+ classification: outputs/briefs/daily/{date}/candidate-classification.md
124
+ category: hold
125
+ tone: professional
126
+ voice: agent
127
+ outputs:
128
+ file: outputs/comms/hiring/{date}/daily-hold-drafts.md
129
+
130
+ - id: draft-rejection-responses
131
+ agent: hiring-org-design
132
+ action: draft-rejection-responses
133
+ description: Draft gentle, kind rejection messages for candidates being closed off
134
+ timeout: 300
135
+ parallel_with: draft-advance-responses
136
+ depends_on: [classify-candidates]
137
+ inputs:
138
+ classification: outputs/briefs/daily/{date}/candidate-classification.md
139
+ category: reject
140
+ tone: kind_encouraging
141
+ voice: agent
142
+ sla: 48h
143
+ outputs:
144
+ file: outputs/comms/hiring/{date}/daily-rejection-drafts.md
145
+
146
+ - id: queue-for-approval
147
+ agent: hiring-org-design
148
+ action: queue-correspondence-approval
149
+ description: Queue all drafted responses for communications approval flow
150
+ timeout: 120
151
+ depends_on:
152
+ [draft-advance-responses, draft-hold-responses, draft-rejection-responses]
153
+ inputs:
154
+ drafts:
155
+ - outputs/comms/hiring/{date}/daily-advance-drafts.md
156
+ - outputs/comms/hiring/{date}/daily-hold-drafts.md
157
+ - outputs/comms/hiring/{date}/daily-rejection-drafts.md
158
+ approval_rules:
159
+ advance: pre-approved
160
+ hold: pre-approved
161
+ reject: pre-approved
162
+ offer_discussion: requires_ceo_approval
163
+ outputs:
164
+ file: outputs/briefs/daily/{date}/approval-queue-status.md
165
+
166
+ - id: produce-triage-summary
167
+ agent: hiring-org-design
168
+ action: produce-daily-triage-summary
169
+ description: Produce the daily applicant triage summary
170
+ timeout: 300
171
+ depends_on: [queue-for-approval]
172
+ inputs:
173
+ components:
174
+ - outputs/briefs/daily/{date}/new-applicants-consolidated.md
175
+ - outputs/briefs/daily/{date}/screening-scores.md
176
+ - outputs/briefs/daily/{date}/candidate-classification.md
177
+ - outputs/briefs/daily/{date}/approval-queue-status.md
178
+ outputs:
179
+ file: outputs/briefs/daily/{date}/applicant-triage.md
180
+
181
+ - id: notify-ready
182
+ action: notify
183
+ description: Signal that daily triage is complete
184
+ depends_on: [produce-triage-summary]
185
+ inputs:
186
+ channel: slack
187
+ target: "#ceo-office"
188
+ message: "Daily Applicant Triage complete: outputs/briefs/daily/{date}/applicant-triage.md — correspondence drafts queued for approval."
189
+ approval_required: false
190
+
191
+ on_failure:
192
+ action: log-and-notify
193
+ message: "Daily applicant triage failed at step {failed_step}"
194
+ notify: agent-self # the executing agent (operator)
195
+ severity: medium
196
+
197
+ final_output: outputs/briefs/daily/{date}/applicant-triage.md
@@ -0,0 +1,80 @@
1
+ # Communications Triage Workflow
2
+ # Runs three times daily: 08:00, 12:00, 17:00
3
+
4
+ name: comms-triage
5
+ schedule: "0 8,12,17 * * *"
6
+ timezone: Asia/Dubai
7
+ description: >
8
+ Triages inbound communications across Slack, Email, and WhatsApp.
9
+ Identifies action items, flags urgencies, and routes to appropriate queues.
10
+
11
+ steps:
12
+ - id: slack-scan
13
+ agent: slack-operator
14
+ action: channel-scan
15
+ description: Scan Slack for new messages, mentions, DMs since last triage
16
+ timeout: 300
17
+ inputs:
18
+ mode: observe
19
+ last_triage: "{last_run_timestamp}"
20
+ priority_channels: [] # from config/slack-channels.yaml
21
+ scan_type: incremental
22
+ outputs:
23
+ file: outputs/followups/daily/{date}/slack-triage-{time}.md
24
+
25
+ - id: email-scan
26
+ agent: gmail-operator
27
+ action: inbox-scan
28
+ description: Scan Gmail inbox for new messages since last triage
29
+ timeout: 300
30
+ parallel_with: slack-scan
31
+ inputs:
32
+ account: "{{agent.email}}" # resolved from config/agent.json at workflow execution
33
+ mode: observe
34
+ last_triage: "{last_run_timestamp}"
35
+ outputs:
36
+ file: outputs/followups/daily/{date}/email-triage-{time}.md
37
+
38
+ - id: whatsapp-scan
39
+ agent: whatsapp-operator
40
+ action: chat-scan
41
+ description: Scan WhatsApp for new messages since last triage
42
+ timeout: 180
43
+ parallel_with: slack-scan
44
+ inputs:
45
+ mode: observe
46
+ last_triage: "{last_run_timestamp}"
47
+ outputs:
48
+ file: outputs/followups/daily/{date}/whatsapp-triage-{time}.md
49
+
50
+ - id: extract-actions
51
+ agent: pmo-execution
52
+ action: extract-action-items
53
+ description: Extract action items from all triaged communications
54
+ timeout: 180
55
+ depends_on: [slack-scan, email-scan, whatsapp-scan]
56
+ inputs:
57
+ sources:
58
+ - outputs/followups/daily/{date}/slack-triage-{time}.md
59
+ - outputs/followups/daily/{date}/email-triage-{time}.md
60
+ - outputs/followups/daily/{date}/whatsapp-triage-{time}.md
61
+ outputs:
62
+ file: outputs/followups/daily/{date}/action-items-{time}.md
63
+ update: knowledge/memory/executive-memory.yaml # add to open_loops
64
+
65
+ - id: route-actions
66
+ agent: agent-self # the executing agent (operator)
67
+ action: route-action-items
68
+ description: Route extracted action items to appropriate queues and agents
69
+ timeout: 120
70
+ depends_on: [extract-actions]
71
+ inputs:
72
+ actions: outputs/followups/daily/{date}/action-items-{time}.md
73
+ outputs:
74
+ file: outputs/followups/daily/{date}/routing-log-{time}.md
75
+
76
+ on_failure:
77
+ action: log-and-notify
78
+ message: "Communications triage failed at step {failed_step}"
79
+ notify: agent-self # the executing agent (operator)
80
+ severity: high
@@ -0,0 +1,105 @@
1
+ # Evening CEO Wrap Workflow
2
+ # Runs daily at 18:00 GST (UTC+4) on the Mac mini
3
+
4
+ name: evening-wrap
5
+ schedule: "0 18 * * *"
6
+ timezone: Asia/Dubai
7
+ description: >
8
+ Produces the CEO Evening Wrap — summarises what was completed today,
9
+ what remains open, tomorrow's priorities, and any escalations.
10
+
11
+ steps:
12
+ - id: completed-today
13
+ agent: pmo-execution
14
+ action: daily-completion-report
15
+ description: Items closed or completed today
16
+ timeout: 120
17
+ inputs:
18
+ date: "{date}"
19
+ source: knowledge/memory/executive-memory.yaml
20
+ outputs:
21
+ file: outputs/briefs/daily/{date}/completed-today.md
22
+
23
+ - id: comms-review
24
+ agent: communications
25
+ action: daily-communications-summary
26
+ description: Summary of all communications sent and received today
27
+ timeout: 120
28
+ parallel_with: completed-today
29
+ inputs:
30
+ channels: [slack, email, whatsapp]
31
+ mode: observe
32
+ outputs:
33
+ file: outputs/briefs/daily/{date}/comms-review.md
34
+
35
+ - id: still-open
36
+ agent: pmo-execution
37
+ action: eod-open-items
38
+ description: Items that were expected to close today but didn't
39
+ timeout: 120
40
+ depends_on: [completed-today]
41
+ outputs:
42
+ file: outputs/briefs/daily/{date}/still-open.md
43
+
44
+ # ── Daily agent performance summary via agents-observe ──
45
+ - id: agent-performance-summary
46
+ skill: agents-observe
47
+ action: daily-performance-summary
48
+ description: >
49
+ Summarise today's agent execution — sessions run, items completed,
50
+ failures, and total token spend. Feeds into the evening wrap so
51
+ the CEO sees system operational health alongside business outcomes.
52
+ timeout: 120
53
+ parallel_with: still-open
54
+ inputs:
55
+ time_range: today
56
+ metrics:
57
+ - sessions_count
58
+ - items_resolved
59
+ - items_failed
60
+ - total_duration
61
+ - failure_details
62
+ outputs:
63
+ file: outputs/briefs/daily/{date}/agent-performance.md
64
+ summary:
65
+ sessions_today: 0
66
+ items_resolved: 0
67
+ items_failed: 0
68
+ total_agent_hours: ""
69
+
70
+ # ── EOD quota status via claude-pace ──
71
+ - id: eod-quota-status
72
+ skill: claude-pace
73
+ action: eod-quota-check
74
+ description: Report end-of-day quota position for overnight capacity planning
75
+ timeout: 30
76
+ parallel_with: still-open
77
+ outputs:
78
+ pace_delta: green|yellow|red
79
+ overnight_capacity_note: ""
80
+
81
+ - id: synthesise-wrap
82
+ agent: ceo-briefing
83
+ action: produce-evening-wrap
84
+ description: Produce the evening wrap document
85
+ timeout: 300
86
+ depends_on: [completed-today, comms-review, still-open, agent-performance-summary, eod-quota-status]
87
+ inputs:
88
+ morning_brief: outputs/briefs/daily/{date}/ceo-morning-brief.md
89
+ agent_performance: "{agent-performance-summary.outputs.summary}"
90
+ quota_status: "{eod-quota-status.outputs}"
91
+ components:
92
+ - outputs/briefs/daily/{date}/completed-today.md
93
+ - outputs/briefs/daily/{date}/comms-review.md
94
+ - outputs/briefs/daily/{date}/still-open.md
95
+ - outputs/briefs/daily/{date}/agent-performance.md
96
+ outputs:
97
+ file: outputs/briefs/daily/{date}/ceo-evening-wrap.md
98
+
99
+ on_failure:
100
+ action: log-and-notify
101
+ message: "Evening wrap workflow failed at step {failed_step}"
102
+ notify: agent-self # the executing agent (operator)
103
+ severity: medium
104
+
105
+ final_output: outputs/briefs/daily/{date}/ceo-evening-wrap.md