@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.
- package/.claude/commands/init-agent.md +104 -0
- package/.claude/commands/init-maestro.md +1187 -0
- package/.claude/settings.json +161 -0
- package/.env.example +216 -0
- package/README.md +632 -0
- package/agents/browser-operator/agent.md +52 -0
- package/agents/calendar-ops/agent.md +50 -0
- package/agents/communications/agent.md +96 -0
- package/agents/decision-log/agent.md +65 -0
- package/agents/desktop-operator/agent.md +59 -0
- package/agents/gmail-operator/agent.md +62 -0
- package/agents/inbound-dispatcher/agent.md +66 -0
- package/agents/inbox-processor/agent.md +39 -0
- package/agents/pmo-execution/agent.md +60 -0
- package/agents/session-spawner/agent.md +64 -0
- package/agents/slack-operator/agent.md +60 -0
- package/agents/whatsapp-operator/agent.md +60 -0
- package/agents/workflow-automation/agent.md +61 -0
- package/archetypes/altitudes/c-suite.yaml +58 -0
- package/archetypes/altitudes/founder.yaml +68 -0
- package/archetypes/altitudes/senior-manager.yaml +63 -0
- package/archetypes/altitudes/svp.yaml +60 -0
- package/archetypes/altitudes/vp.yaml +50 -0
- package/archetypes/archetype.schema.json +77 -0
- package/archetypes/base.yaml +47 -0
- package/archetypes/capabilities/commercial-leader.yaml +159 -0
- package/archetypes/capabilities/compliance-officer.yaml +159 -0
- package/archetypes/capabilities/executive-operator.yaml +169 -0
- package/archetypes/capabilities/finance-leader.yaml +162 -0
- package/archetypes/capabilities/operations-leader.yaml +154 -0
- package/archetypes/capabilities/product-leader.yaml +148 -0
- package/archetypes/capabilities/technical-leader.yaml +146 -0
- package/archetypes/functions/commercial-leader.yaml +62 -0
- package/archetypes/functions/compliance-officer.yaml +64 -0
- package/archetypes/functions/executive-operator.yaml +70 -0
- package/archetypes/functions/finance-leader.yaml +70 -0
- package/archetypes/functions/operations-leader.yaml +62 -0
- package/archetypes/functions/product-leader.yaml +61 -0
- package/archetypes/functions/technical-leader.yaml +57 -0
- package/bin/cohort-mcp.mjs +81 -0
- package/bin/maestro.mjs +3516 -0
- package/bin/maestro.test.mjs +1015 -0
- package/desktop-control/README.md +56 -0
- package/desktop-control/app-profiles/gmail.yaml +120 -0
- package/desktop-control/app-profiles/slack.yaml +315 -0
- package/desktop-control/app-profiles/whatsapp.yaml +107 -0
- package/docs/architecture/agent-topology.md +2239 -0
- package/docs/architecture/archetype-agent-factory.md +110 -0
- package/docs/architecture/collective-memory-and-org-mesh.md +115 -0
- package/docs/architecture/continuous-monitoring.md +221 -0
- package/docs/architecture/mcp-capability-map.md +585 -0
- package/docs/architecture/system-architecture.md +1272 -0
- package/docs/company-context/README.md +40 -0
- package/docs/guides/agent-persona-setup.md +600 -0
- package/docs/guides/agents-observe-setup.md +64 -0
- package/docs/guides/billing-console-keys.md +88 -0
- package/docs/guides/ccxray-diagnostics.md +65 -0
- package/docs/guides/channel-bus.md +127 -0
- package/docs/guides/claude-mem-setup.md +79 -0
- package/docs/guides/claude-pace-setup.md +56 -0
- package/docs/guides/claudraband-sessions.md +98 -0
- package/docs/guides/clawteam-swarm.md +116 -0
- package/docs/guides/code-review-graph-setup.md +86 -0
- package/docs/guides/email-setup.md +431 -0
- package/docs/guides/mac-mini.md +119 -0
- package/docs/guides/media-generation-setup.md +349 -0
- package/docs/guides/model-routing.md +162 -0
- package/docs/guides/observability-otel.md +265 -0
- package/docs/guides/org-onboarding.md +132 -0
- package/docs/guides/outbound-governance-setup.md +437 -0
- package/docs/guides/pdf-generation-setup.md +315 -0
- package/docs/guides/poller-daemon-setup.md +563 -0
- package/docs/guides/rag-context-setup.md +459 -0
- package/docs/guides/self-optimization-pattern.md +82 -0
- package/docs/guides/setup-wizard.md +178 -0
- package/docs/guides/slack-setup.md +350 -0
- package/docs/guides/telegram-setup.md +227 -0
- package/docs/guides/twilio-subaccounts-setup.md +223 -0
- package/docs/guides/verification.md +128 -0
- package/docs/guides/voice-mode.md +188 -0
- package/docs/guides/voice-sms-setup.md +698 -0
- package/docs/guides/webhook-relay-setup.md +349 -0
- package/docs/guides/whatsapp-setup.md +288 -0
- package/docs/prompts/board-pack-cover-template.md +36 -0
- package/docs/prompts/decision-recommendation-template.md +88 -0
- package/docs/prompts/followup-message-template.md +141 -0
- package/docs/prompts/investor-letter-template.md +52 -0
- package/docs/prompts/morning-brief-template.md +82 -0
- package/docs/prompts/presentation-template.md +58 -0
- package/docs/prompts/weekly-strategic-memo-template.md +104 -0
- package/docs/research/hallucinated-tool-output-investigation.md +151 -0
- package/docs/runbooks/backup-restore.md +205 -0
- package/docs/runbooks/cohort-cutover.md +129 -0
- package/docs/runbooks/fleet-operations.md +200 -0
- package/docs/runbooks/incident-response.md +226 -0
- package/docs/runbooks/mac-mini-bootstrap.md +431 -0
- package/docs/runbooks/perpetual-operations.md +509 -0
- package/docs/runbooks/recovery-and-failover.md +260 -0
- package/framework-features.json +267 -0
- package/ingest/README.md +87 -0
- package/lib/action-executor.js +689 -0
- package/lib/action-executor.test.mjs +871 -0
- package/lib/agent-root.mjs +37 -0
- package/lib/archetype.mjs +236 -0
- package/lib/archetype.test.mjs +132 -0
- package/lib/autonomy.mjs +114 -0
- package/lib/autonomy.test.mjs +66 -0
- package/lib/backlog.mjs +358 -0
- package/lib/backlog.test.mjs +266 -0
- package/lib/budget-guard.mjs +279 -0
- package/lib/budget-guard.test.mjs +291 -0
- package/lib/cadence-bus-schedule.test.mjs +194 -0
- package/lib/cadence-bus.mjs +1120 -0
- package/lib/cadence-bus.test.mjs +720 -0
- package/lib/cadences.mjs +205 -0
- package/lib/cadences.test.mjs +125 -0
- package/lib/capability.mjs +154 -0
- package/lib/capability.test.mjs +78 -0
- package/lib/channels/base-adapter.mjs +719 -0
- package/lib/channels/base-adapter.test.mjs +590 -0
- package/lib/channels/channel.mjs +128 -0
- package/lib/channels/channels.test.mjs +371 -0
- package/lib/channels/contract.mjs +215 -0
- package/lib/channels/contract.test.mjs +137 -0
- package/lib/channels/conversation-resolver.mjs +95 -0
- package/lib/channels/gmail/adapter.mjs +87 -0
- package/lib/channels/inbox-item.mjs +255 -0
- package/lib/channels/inbox-item.test.mjs +335 -0
- package/lib/channels/index.mjs +94 -0
- package/lib/channels/orgmail/adapter.mjs +353 -0
- package/lib/channels/orgmail/adapter.test.mjs +311 -0
- package/lib/channels/pairing.mjs +363 -0
- package/lib/channels/pairing.test.mjs +270 -0
- package/lib/channels/registry.mjs +164 -0
- package/lib/channels/slack/adapter.mjs +317 -0
- package/lib/channels/slack-adapter.test.mjs +212 -0
- package/lib/channels/sms/adapter.mjs +43 -0
- package/lib/channels/telegram/adapter.mjs +432 -0
- package/lib/channels/telegram-adapter.test.mjs +306 -0
- package/lib/channels/voice/adapter.mjs +301 -0
- package/lib/channels/voice/adapter.test.mjs +278 -0
- package/lib/channels/whatsapp/adapter-baileys.mjs +587 -0
- package/lib/channels/whatsapp/adapter-baileys.test.mjs +359 -0
- package/lib/channels/whatsapp/adapter-twilio.mjs +65 -0
- package/lib/channels/whatsapp/baileys-typing.test.mjs +154 -0
- package/lib/charter.mjs +256 -0
- package/lib/charter.test.mjs +89 -0
- package/lib/claude-bin.mjs +134 -0
- package/lib/claude-bin.test.mjs +75 -0
- package/lib/collective/capture.mjs +185 -0
- package/lib/collective/capture.test.mjs +121 -0
- package/lib/collective/cards.mjs +201 -0
- package/lib/collective/cards.test.mjs +114 -0
- package/lib/collective/config.mjs +186 -0
- package/lib/collective/config.test.mjs +123 -0
- package/lib/collective/global-config.mjs +113 -0
- package/lib/collective/global-config.test.mjs +75 -0
- package/lib/collective/presence.mjs +201 -0
- package/lib/collective/presence.test.mjs +95 -0
- package/lib/collective/recall.mjs +215 -0
- package/lib/collective/recall.test.mjs +116 -0
- package/lib/comms/send-gate.mjs +554 -0
- package/lib/comms/send-gate.test.mjs +577 -0
- package/lib/comms.mjs +67 -0
- package/lib/comms.test.mjs +41 -0
- package/lib/diagnostics/alerts.mjs +424 -0
- package/lib/diagnostics/alerts.test.mjs +318 -0
- package/lib/diagnostics/backup-freshness.mjs +188 -0
- package/lib/diagnostics/backup-freshness.test.mjs +185 -0
- package/lib/diagnostics/counters.mjs +269 -0
- package/lib/diagnostics/counters.test.mjs +206 -0
- package/lib/diagnostics/events.mjs +188 -0
- package/lib/diagnostics/events.test.mjs +290 -0
- package/lib/diagnostics/otel.mjs +237 -0
- package/lib/diagnostics/otel.test.mjs +196 -0
- package/lib/diagnostics/trace.mjs +216 -0
- package/lib/diagnostics/trace.test.mjs +251 -0
- package/lib/env-compat.mjs +74 -0
- package/lib/env-compat.test.mjs +104 -0
- package/lib/feature-init.mjs +331 -0
- package/lib/fs-atomic.mjs +112 -0
- package/lib/fs-atomic.test.mjs +72 -0
- package/lib/fs-ownership.mjs +111 -0
- package/lib/fs-ownership.test.mjs +158 -0
- package/lib/hooks/bus.mjs +347 -0
- package/lib/hooks/bus.test.mjs +387 -0
- package/lib/index.js +16 -0
- package/lib/learning/config.mjs +106 -0
- package/lib/learning/config.test.mjs +75 -0
- package/lib/learning/counters.mjs +156 -0
- package/lib/learning/counters.test.mjs +69 -0
- package/lib/learning/curator-consolidate.test.mjs +238 -0
- package/lib/learning/curator.mjs +453 -0
- package/lib/learning/curator.test.mjs +106 -0
- package/lib/learning/log.mjs +40 -0
- package/lib/learning/reflect.mjs +534 -0
- package/lib/learning/reflect.test.mjs +0 -0
- package/lib/learning/session-index.mjs +352 -0
- package/lib/learning/session-index.test.mjs +125 -0
- package/lib/learning/skill-writer.mjs +474 -0
- package/lib/learning/skill-writer.test.mjs +210 -0
- package/lib/mcp/server.mjs +328 -0
- package/lib/mcp/server.test.mjs +400 -0
- package/lib/model-router/auth-profiles.mjs +758 -0
- package/lib/model-router/auth-profiles.test.mjs +580 -0
- package/lib/model-router/catalog/anthropic.yaml +153 -0
- package/lib/model-router/catalog/deepseek.yaml +86 -0
- package/lib/model-router/catalog/moonshot.yaml +81 -0
- package/lib/model-router/catalog/qwen.yaml +114 -0
- package/lib/model-router/catalog.mjs +925 -0
- package/lib/model-router/catalog.test.mjs +385 -0
- package/lib/model-router/economics.mjs +564 -0
- package/lib/model-router/economics.test.mjs +344 -0
- package/lib/model-router/failover.mjs +298 -0
- package/lib/model-router/failover.test.mjs +439 -0
- package/lib/model-router/health.mjs +453 -0
- package/lib/model-router/health.test.mjs +338 -0
- package/lib/model-router/integration-coverage.test.mjs +829 -0
- package/lib/model-router/integration.test.mjs +564 -0
- package/lib/model-router/ledger.mjs +402 -0
- package/lib/model-router/ledger.test.mjs +382 -0
- package/lib/model-router/llm-task.mjs +515 -0
- package/lib/model-router/llm-task.test.mjs +392 -0
- package/lib/model-router/org-credentials.mjs +260 -0
- package/lib/model-router/org-credentials.test.mjs +265 -0
- package/lib/model-router/pricing-refresh.mjs +463 -0
- package/lib/model-router/pricing-refresh.test.mjs +286 -0
- package/lib/model-router/reconcile.mjs +429 -0
- package/lib/model-router/reconcile.test.mjs +316 -0
- package/lib/model-router/repair.mjs +471 -0
- package/lib/model-router/repair.test.mjs +180 -0
- package/lib/model-router/resolve.mjs +1206 -0
- package/lib/model-router/spawn.mjs +497 -0
- package/lib/model-router/spawn.test.mjs +425 -0
- package/lib/model-router/taxonomy.mjs +893 -0
- package/lib/model-router/taxonomy.test.mjs +410 -0
- package/lib/model-router.mjs +677 -0
- package/lib/model-router.test.mjs +907 -0
- package/lib/org/activity.mjs +211 -0
- package/lib/org/activity.test.mjs +134 -0
- package/lib/org/approvals.mjs +448 -0
- package/lib/org/approvals.test.mjs +216 -0
- package/lib/org/awareness.mjs +222 -0
- package/lib/org/awareness.test.mjs +159 -0
- package/lib/org/board.mjs +229 -0
- package/lib/org/board.test.mjs +177 -0
- package/lib/org/bootstrap-context.mjs +169 -0
- package/lib/org/bootstrap-context.test.mjs +153 -0
- package/lib/org/client.mjs +1628 -0
- package/lib/org/client.test.mjs +1107 -0
- package/lib/org/cohort-client.mjs +67 -0
- package/lib/org/cohort-client.test.mjs +126 -0
- package/lib/org/cost-sync.mjs +227 -0
- package/lib/org/cost-sync.test.mjs +153 -0
- package/lib/org/doctor.mjs +212 -0
- package/lib/org/doctor.test.mjs +212 -0
- package/lib/org/handoff.mjs +293 -0
- package/lib/org/handoff.test.mjs +269 -0
- package/lib/org/integration-tools.mjs +182 -0
- package/lib/org/integration-tools.test.mjs +160 -0
- package/lib/org/keys.mjs +131 -0
- package/lib/org/keys.test.mjs +92 -0
- package/lib/org/knowledge.mjs +463 -0
- package/lib/org/knowledge.test.mjs +319 -0
- package/lib/org/leases.mjs +335 -0
- package/lib/org/leases.test.mjs +235 -0
- package/lib/org/mesh-integration.test.mjs +127 -0
- package/lib/org/mesh.mjs +459 -0
- package/lib/org/mesh.test.mjs +345 -0
- package/lib/org/messaging.mjs +503 -0
- package/lib/org/messaging.test.mjs +238 -0
- package/lib/org/policy.mjs +345 -0
- package/lib/org/policy.test.mjs +237 -0
- package/lib/org/protocol.checksum +1 -0
- package/lib/org/protocol.checksum.test.mjs +90 -0
- package/lib/org/protocol.mjs +967 -0
- package/lib/org/protocol.test.mjs +264 -0
- package/lib/org/registry.mjs +194 -0
- package/lib/org/registry.test.mjs +100 -0
- package/lib/org/tool-surface-integration.test.mjs +120 -0
- package/lib/org/tool-surface.mjs +2535 -0
- package/lib/org/tool-surface.test.mjs +589 -0
- package/lib/org/ui-parity.mjs +3236 -0
- package/lib/org/ui-parity.test.mjs +348 -0
- package/lib/org/verify.mjs +176 -0
- package/lib/org/verify.test.mjs +194 -0
- package/lib/rag/embed.mjs +188 -0
- package/lib/rag/indexer.mjs +425 -0
- package/lib/rag/rag.test.mjs +505 -0
- package/lib/rag/search.mjs +475 -0
- package/lib/rate-guard.mjs +246 -0
- package/lib/rate-guard.test.mjs +201 -0
- package/lib/render.mjs +112 -0
- package/lib/render.test.mjs +68 -0
- package/lib/resource-governor.mjs +297 -0
- package/lib/resource-governor.test.mjs +262 -0
- package/lib/scheduling/dynamic-jobs.mjs +675 -0
- package/lib/scheduling/dynamic-jobs.test.mjs +344 -0
- package/lib/scheduling/jitter.mjs +0 -0
- package/lib/scheduling/jitter.test.mjs +140 -0
- package/lib/secrets/broker.mjs +315 -0
- package/lib/secrets/broker.test.mjs +280 -0
- package/lib/secrets/providers.mjs +461 -0
- package/lib/secrets/providers.test.mjs +274 -0
- package/lib/security/audit-engine.mjs +684 -0
- package/lib/security/audit-engine.test.mjs +389 -0
- package/lib/security/coerce-args.mjs +552 -0
- package/lib/security/coerce-args.test.mjs +281 -0
- package/lib/security/dangerous-tools.mjs +97 -0
- package/lib/security/dangerous-tools.test.mjs +68 -0
- package/lib/security/external-content.mjs +145 -0
- package/lib/security/external-content.test.mjs +67 -0
- package/lib/security/redact.mjs +592 -0
- package/lib/security/redact.test.mjs +441 -0
- package/lib/security/secret-equal.mjs +73 -0
- package/lib/security/secret-equal.test.mjs +55 -0
- package/lib/session-permissions.mjs +101 -0
- package/lib/session-permissions.test.mjs +100 -0
- package/lib/setup/claude-probe.mjs +74 -0
- package/lib/setup/completeness.mjs +175 -0
- package/lib/setup/completeness.test.mjs +110 -0
- package/lib/setup/context-pack.mjs +173 -0
- package/lib/setup/context-pack.test.mjs +89 -0
- package/lib/setup/enrich.mjs +277 -0
- package/lib/setup/enrich.test.mjs +115 -0
- package/lib/setup/enroll-from-cohort.mjs +441 -0
- package/lib/setup/enroll-from-cohort.test.mjs +233 -0
- package/lib/setup/integration.test.mjs +162 -0
- package/lib/setup/io.mjs +360 -0
- package/lib/setup/io.test.mjs +77 -0
- package/lib/setup/run-generator.mjs +81 -0
- package/lib/setup/runner.mjs +244 -0
- package/lib/setup/runner.test.mjs +132 -0
- package/lib/setup/sections/comms.mjs +173 -0
- package/lib/setup/sections/company.mjs +120 -0
- package/lib/setup/sections/enrich.mjs +138 -0
- package/lib/setup/sections/identity.mjs +182 -0
- package/lib/setup/sections/identity.test.mjs +140 -0
- package/lib/setup/sections/learning.mjs +153 -0
- package/lib/setup/sections/learning.test.mjs +81 -0
- package/lib/setup/sections/messaging.mjs +219 -0
- package/lib/setup/sections/messaging.test.mjs +127 -0
- package/lib/setup/sections/model.mjs +102 -0
- package/lib/setup/sections/operating-model.mjs +78 -0
- package/lib/setup/sections/org.mjs +475 -0
- package/lib/setup/sections/org.test.mjs +313 -0
- package/lib/setup/sections/orgmail.mjs +173 -0
- package/lib/setup/sections/orgmail.test.mjs +118 -0
- package/lib/setup/sections/recovery.mjs +159 -0
- package/lib/setup/sections/recovery.test.mjs +98 -0
- package/lib/setup/sections/tools.mjs +132 -0
- package/lib/setup/sections/verify.mjs +97 -0
- package/lib/setup/sot.mjs +205 -0
- package/lib/setup/sot.test.mjs +81 -0
- package/lib/setup/state.mjs +151 -0
- package/lib/setup/state.test.mjs +92 -0
- package/lib/singleton.js +229 -0
- package/lib/singleton.test.mjs +135 -0
- package/lib/telemetry/alerts.mjs +216 -0
- package/lib/telemetry/alerts.test.mjs +109 -0
- package/lib/telemetry/collect.mjs +512 -0
- package/lib/telemetry/collect.test.mjs +202 -0
- package/lib/tool-definitions-integration.test.mjs +83 -0
- package/lib/tool-definitions.js +738 -0
- package/lib/tool-definitions.test.mjs +437 -0
- package/lib/util/fetch-timeout.mjs +136 -0
- package/lib/util/fetch-timeout.test.mjs +202 -0
- package/lib/util/reconnect.mjs +343 -0
- package/lib/util/reconnect.test.mjs +369 -0
- package/lib/util/unhandled.mjs +205 -0
- package/lib/util/unhandled.test.mjs +216 -0
- package/lib/voice/context-loader.mjs +466 -0
- package/lib/voice/index.mjs +100 -0
- package/lib/voice/openai-realtime.mjs +510 -0
- package/lib/voice/outbound.mjs +542 -0
- package/lib/voice/outbound.test.mjs +69 -0
- package/lib/voice/post-call-brief.mjs +428 -0
- package/lib/voice/provider.mjs +52 -0
- package/lib/voice/session-rotation.mjs +257 -0
- package/lib/voice/stt.mjs +161 -0
- package/lib/voice/stt.test.mjs +226 -0
- package/lib/voice/tool-bridge.mjs +370 -0
- package/lib/voice/tts.mjs +104 -0
- package/lib/voice/twilio-sip-bridge.mjs +288 -0
- package/lib/voice/voice.test.mjs +990 -0
- package/mcp/README.md +80 -0
- package/package.json +151 -0
- package/plugins/maestro-skills/plugin.json +139 -0
- package/plugins/maestro-skills/skills/agents-observe.md +110 -0
- package/plugins/maestro-skills/skills/board-deck.md +68 -0
- package/plugins/maestro-skills/skills/books-close.md +77 -0
- package/plugins/maestro-skills/skills/brand-steward.md +121 -0
- package/plugins/maestro-skills/skills/calendar-plan.md +57 -0
- package/plugins/maestro-skills/skills/call-working-sessions.md +124 -0
- package/plugins/maestro-skills/skills/ccxray-diagnostics.md +91 -0
- package/plugins/maestro-skills/skills/claude-pace.md +61 -0
- package/plugins/maestro-skills/skills/code-review-graph.md +99 -0
- package/plugins/maestro-skills/skills/crm-pipeline.md +65 -0
- package/plugins/maestro-skills/skills/decision-brief.md +89 -0
- package/plugins/maestro-skills/skills/directory-hygiene.md +125 -0
- package/plugins/maestro-skills/skills/draft-comms.md +84 -0
- package/plugins/maestro-skills/skills/evening-wrap.md +53 -0
- package/plugins/maestro-skills/skills/files-find.md +65 -0
- package/plugins/maestro-skills/skills/generative-ui.md +228 -0
- package/plugins/maestro-skills/skills/hiring-triage.md +74 -0
- package/plugins/maestro-skills/skills/inbox-triage.md +61 -0
- package/plugins/maestro-skills/skills/mail-triage.md +86 -0
- package/plugins/maestro-skills/skills/morning-brief.md +54 -0
- package/plugins/maestro-skills/skills/native-artifacts.md +157 -0
- package/plugins/maestro-skills/skills/org-board.md +133 -0
- package/plugins/maestro-skills/skills/org-credential.md +68 -0
- package/plugins/maestro-skills/skills/org-recall.md +81 -0
- package/plugins/maestro-skills/skills/pipeline-review.md +76 -0
- package/plugins/maestro-skills/skills/regulatory-status.md +81 -0
- package/plugins/maestro-skills/skills/router-why.md +78 -0
- package/plugins/maestro-skills/skills/schedule-meeting.md +91 -0
- package/plugins/maestro-skills/skills/session-search.md +71 -0
- package/plugins/maestro-skills/skills/set-reminder.md +93 -0
- package/plugins/maestro-skills/skills/slack-followup.md +64 -0
- package/plugins/maestro-skills/skills/team-activity.md +86 -0
- package/plugins/maestro-skills/skills/weekly-memo.md +70 -0
- package/policies/action-classification.yaml +114 -0
- package/policies/ai-disclosure.yaml +294 -0
- package/policies/communication-style.md +139 -0
- package/policies/information-barriers.yaml +118 -0
- package/policies/prompt-injection-defence.yaml +138 -0
- package/public/assets/icon-dark.png +0 -0
- package/public/assets/icon-dark.svg +9 -0
- package/public/assets/icon-light.svg +9 -0
- package/public/assets/logo-dark.svg +15 -0
- package/public/assets/logo-light.svg +15 -0
- package/scaffold/.mcp.json +7 -0
- package/scaffold/CLAUDE.md +368 -0
- package/scaffold/config/agent.json +55 -0
- package/scaffold/config/agent.ts +76 -0
- package/scaffold/config/agent.ts.example +89 -0
- package/scaffold/config/alerts.yaml +23 -0
- package/scaffold/config/allowlist.yaml.example +25 -0
- package/scaffold/config/caller-id-map.yaml +46 -0
- package/scaffold/config/collective.yaml +49 -0
- package/scaffold/config/company.json +20 -0
- package/scaffold/config/known-agents.json +6 -0
- package/scaffold/config/learning.yaml +55 -0
- package/scaffold/config/model-routing.yaml.example +104 -0
- package/scaffold/config/org.yaml +25 -0
- package/scaffold/config/orgmail.yaml.example +19 -0
- package/scaffold/config/recovery.yaml +72 -0
- package/scaffold/config/secrets.yaml +27 -0
- package/scaffold/config/slack.yaml.example +35 -0
- package/scaffold/config/telegram.yaml.example +38 -0
- package/scaffold/config/voice.yaml.example +89 -0
- package/scaffold/config/whatsapp.yaml.example +39 -0
- package/schedules/README.md +49 -0
- package/schedules/triggers/backlog-executor.md +102 -0
- package/schedules/triggers/brand-steward.md +72 -0
- package/schedules/triggers/daily-evening-wrap.md +159 -0
- package/schedules/triggers/daily-midday-sweep.md +58 -0
- package/schedules/triggers/daily-morning-brief.md +55 -0
- package/schedules/triggers/directory-hygiene.md +81 -0
- package/schedules/triggers/dynamic-jobs.md +40 -0
- package/schedules/triggers/inbox-processor.md +115 -0
- package/schedules/triggers/meeting-action-capture.md +60 -0
- package/schedules/triggers/meeting-prep.md +69 -0
- package/schedules/triggers/messaging-inbound.md +50 -0
- package/schedules/triggers/org-pulse.md +24 -0
- package/schedules/triggers/quarterly-self-assessment.md +54 -0
- package/schedules/triggers/weekly-engineering-health.md +37 -0
- package/schedules/triggers/weekly-execution.md +65 -0
- package/schedules/triggers/weekly-hiring.md +53 -0
- package/schedules/triggers/weekly-priorities.md +38 -0
- package/schedules/triggers/weekly-strategic-memo.md +124 -0
- package/scripts/archive-email.sh +55 -0
- package/scripts/cadence/cadence-status.mjs +36 -0
- package/scripts/cadence/enqueue-cadence-tick.mjs +174 -0
- package/scripts/cadence/enqueue-cadence-tick.test.mjs +187 -0
- package/scripts/cadence/launchd-cadence-wrapper.sh +85 -0
- package/scripts/cadence/launchd-cloud-relay-wrapper.sh +95 -0
- package/scripts/cadence/launchd-socket-mode-wrapper.sh +95 -0
- package/scripts/ci/check-docs-accuracy.mjs +493 -0
- package/scripts/ci/check-docs-accuracy.test.mjs +409 -0
- package/scripts/ci/check-exports-exist.mjs +140 -0
- package/scripts/ci/check-files-exist.mjs +107 -0
- package/scripts/ci/check-no-build-artifacts.mjs +111 -0
- package/scripts/ci/check-no-build-artifacts.test.mjs +71 -0
- package/scripts/ci/check-no-confidential.mjs +198 -0
- package/scripts/ci/check-no-conflict-markers.mjs +169 -0
- package/scripts/ci/check-no-residual-identity.mjs +163 -0
- package/scripts/ci/check-no-residual-identity.test.mjs +89 -0
- package/scripts/ci/check-tarball-fidelity.mjs +205 -0
- package/scripts/ci/check-unresolved-tokens.mjs +83 -0
- package/scripts/ci/check.mjs +109 -0
- package/scripts/ci/check.test.mjs +194 -0
- package/scripts/ci/run-coverage.mjs +82 -0
- package/scripts/ci/run-tests.mjs +71 -0
- package/scripts/cloud-relay/README.md +59 -0
- package/scripts/cloud-relay/index.mjs +233 -0
- package/scripts/cloud-relay/package.json +15 -0
- package/scripts/cloud-relay/railway.json +13 -0
- package/scripts/cloud-relay/voice/README.md +94 -0
- package/scripts/cloud-relay/voice/package-lock.json +39 -0
- package/scripts/cloud-relay/voice/package.json +16 -0
- package/scripts/cloud-relay/voice/railway.json +13 -0
- package/scripts/cloud-relay/voice/server.mjs +532 -0
- package/scripts/collective/hook-runner.mjs +211 -0
- package/scripts/collective/hook-runner.test.mjs +90 -0
- package/scripts/collective/org-pulse.mjs +72 -0
- package/scripts/collective/org-sync.mjs +61 -0
- package/scripts/collective/recall.mjs +45 -0
- package/scripts/collective/who.mjs +30 -0
- package/scripts/comms-monitor.sh +288 -0
- package/scripts/configure-whatsapp-sandbox.sh +201 -0
- package/scripts/continuous-monitor.sh +91 -0
- package/scripts/cost/fleet-digest.mjs +407 -0
- package/scripts/cost/fleet-digest.test.mjs +207 -0
- package/scripts/cost/track-claude-usage.mjs +169 -0
- package/scripts/daemon/agent-daemon.mjs +989 -0
- package/scripts/daemon/agent-daemon.test.mjs +525 -0
- package/scripts/daemon/cadence-consumer-governance.test.mjs +220 -0
- package/scripts/daemon/cadence-consumer.mjs +1080 -0
- package/scripts/daemon/cadence-consumer.test.mjs +770 -0
- package/scripts/daemon/cadence-handlers.mjs +1121 -0
- package/scripts/daemon/cadence-handlers.test.mjs +617 -0
- package/scripts/daemon/classifier.mjs +704 -0
- package/scripts/daemon/classifier.test.mjs +238 -0
- package/scripts/daemon/classify-kind.mjs +54 -0
- package/scripts/daemon/classify-kind.test.mjs +40 -0
- package/scripts/daemon/context-compiler.mjs +605 -0
- package/scripts/daemon/context-compiler.test.mjs +300 -0
- package/scripts/daemon/dispatcher-cooldown.test.mjs +122 -0
- package/scripts/daemon/dispatcher-governance.test.mjs +886 -0
- package/scripts/daemon/dispatcher.mjs +1516 -0
- package/scripts/daemon/health.mjs +72 -0
- package/scripts/daemon/inbox-deferral.mjs +210 -0
- package/scripts/daemon/inbox-deferral.test.mjs +242 -0
- package/scripts/daemon/integration.test.mjs +149 -0
- package/scripts/daemon/launchd-wrapper-generic.sh +96 -0
- package/scripts/daemon/launchd-wrapper-slack-events.sh +37 -0
- package/scripts/daemon/launchd-wrapper.sh +91 -0
- package/scripts/daemon/lib/session-router.mjs +274 -0
- package/scripts/daemon/lib/session-router.test.mjs +295 -0
- package/scripts/daemon/maestro-daemon.mjs +275 -0
- package/scripts/daemon/prompt-builder.mjs +685 -0
- package/scripts/daemon/prompt-builder.test.mjs +213 -0
- package/scripts/daemon/responder.mjs +854 -0
- package/scripts/daemon/session-lock.mjs +721 -0
- package/scripts/daemon/session-lock.test.mjs +252 -0
- package/scripts/daemon/session-outcomes.mjs +640 -0
- package/scripts/daemon/session-outcomes.test.mjs +533 -0
- package/scripts/daemon/typing-registry.mjs +90 -0
- package/scripts/daemon/typing-registry.test.mjs +77 -0
- package/scripts/daemon/voice-webhook-server.mjs +804 -0
- package/scripts/decisions/capture-decision.mjs +116 -0
- package/scripts/disclosure_assessment.py +873 -0
- package/scripts/disclosure_boundaries.py +562 -0
- package/scripts/email-signature-principal.html +52 -0
- package/scripts/email-signature.html +60 -0
- package/scripts/email_quote_thread.py +167 -0
- package/scripts/email_thread_dedup.py +362 -0
- package/scripts/emergency-stop.sh +81 -0
- package/scripts/healthcheck.sh +116 -0
- package/scripts/hooks/block-mcp-cohort-send.sh +15 -0
- package/scripts/hooks/block-mcp-slack-send.sh +7 -0
- package/scripts/hooks/post-action-log.sh +126 -0
- package/scripts/hooks/pre-send-audit.sh +174 -0
- package/scripts/hooks/pre-send-audit.test.mjs +215 -0
- package/scripts/hooks/session-end-log.sh +27 -0
- package/scripts/hooks/session-start-banner.sh +115 -0
- package/scripts/huddle/audio-bridge.mjs +664 -0
- package/scripts/huddle/boot-slack-cdp.sh +102 -0
- package/scripts/huddle/huddle-controller.mjs +942 -0
- package/scripts/huddle/huddle-server.mjs +1229 -0
- package/scripts/huddle/launch-slack.sh +232 -0
- package/scripts/huddle/openai-realtime-bridge.mjs +462 -0
- package/scripts/huddle/package-lock.json +62 -0
- package/scripts/huddle/package.json +22 -0
- package/scripts/huddle/setup-audio.sh +239 -0
- package/scripts/huddle/start-call.mjs +318 -0
- package/scripts/huddle/test-pipeline.mjs +263 -0
- package/scripts/learning/consolidate-skills.mjs +72 -0
- package/scripts/learning/session-search.mjs +125 -0
- package/scripts/llm_email_dedup.py +442 -0
- package/scripts/local-triggers/generate-plists.sh +432 -0
- package/scripts/local-triggers/generate-plists.test.mjs +413 -0
- package/scripts/local-triggers/install-all.sh +49 -0
- package/scripts/local-triggers/plists/.gitkeep +0 -0
- package/scripts/local-triggers/run-trigger.sh +63 -0
- package/scripts/local-triggers/templates/rag-reindex.plist.template +47 -0
- package/scripts/local-triggers/templates/voice-relay-poller.plist.template +54 -0
- package/scripts/local-triggers/templates/voice-tunnel.plist.template +55 -0
- package/scripts/local-triggers/templates/voice-webhook.plist.template +51 -0
- package/scripts/maintenance/backup-to-cloud.sh +124 -0
- package/scripts/maintenance/health-check.sh +377 -0
- package/scripts/media-generation/README.md +105 -0
- package/scripts/media-generation/gemini-image-client.mjs +173 -0
- package/scripts/media-generation/generate-assets.mjs +289 -0
- package/scripts/media-generation/veo-video-client.mjs +219 -0
- package/scripts/org/send-orgmail.mjs +227 -0
- package/scripts/outbound-dedup-cleanup.sh +43 -0
- package/scripts/outbound-dedup.sh +477 -0
- package/scripts/outbound_dedup.py +115 -0
- package/scripts/parse-voice-transcript.mjs +481 -0
- package/scripts/pdf-generation/README.md +63 -0
- package/scripts/pdf-generation/build-document.mjs +247 -0
- package/scripts/pdf-generation/templates/board-pack.latex +136 -0
- package/scripts/pdf-generation/templates/corporate-letter.latex +126 -0
- package/scripts/pdf-generation/templates/memo.latex +114 -0
- package/scripts/poll-slack-events.sh +35 -0
- package/scripts/poller/calendar-poller.mjs +12 -0
- package/scripts/poller/gmail-poller.mjs +192 -0
- package/scripts/poller/imap-client.mjs +289 -0
- package/scripts/poller/inbox-scan-poller.mjs +156 -0
- package/scripts/poller/inbox-scan-poller.test.mjs +231 -0
- package/scripts/poller/index.mjs +73 -0
- package/scripts/poller/intra-session-check.mjs +285 -0
- package/scripts/poller/lib/cloud-relay-dedup.mjs +88 -0
- package/scripts/poller/lib/cloud-relay-dedup.test.mjs +133 -0
- package/scripts/poller/lib/slash-command-handlers.mjs +177 -0
- package/scripts/poller/secondary-gmail-poller.mjs +132 -0
- package/scripts/poller/slack-cloud-relay-client.mjs +368 -0
- package/scripts/poller/slack-poller.mjs +854 -0
- package/scripts/poller/slack-socket-mode.mjs +917 -0
- package/scripts/poller/slack-socket-mode.test.mjs +753 -0
- package/scripts/poller/trigger.mjs +75 -0
- package/scripts/poller/utils.mjs +371 -0
- package/scripts/poller/voice-cloud-relay-client.mjs +179 -0
- package/scripts/poller/voice-poller.mjs +236 -0
- package/scripts/poller-launchd/install.sh +66 -0
- package/scripts/poller-launchd/poller.plist.template +40 -0
- package/scripts/poller-launchd/whatsapp-handler.plist.template +39 -0
- package/scripts/post-interaction-indexer.py +1598 -0
- package/scripts/pre-draft-context.py +994 -0
- package/scripts/pre_draft_lookup.py +258 -0
- package/scripts/rag/build-index.mjs +47 -0
- package/scripts/rag/ingest.mjs +111 -0
- package/scripts/rag/search.mjs +119 -0
- package/scripts/rag-indexer.py +629 -0
- package/scripts/restore-from-backup.sh +248 -0
- package/scripts/restore-from-backup.test.mjs +178 -0
- package/scripts/resume-operations.sh +80 -0
- package/scripts/search-secondary-inbox.py +181 -0
- package/scripts/secondary-inbox-poller.py +437 -0
- package/scripts/self-optimization/compute-metrics.py +398 -0
- package/scripts/send-email-as-principal.py +369 -0
- package/scripts/send-email-threaded.py +392 -0
- package/scripts/send-email-with-attachment.py +377 -0
- package/scripts/send-email.sh +131 -0
- package/scripts/send-sms.sh +175 -0
- package/scripts/send-whatsapp.sh +292 -0
- package/scripts/session-start.sh +106 -0
- package/scripts/setup/boot-claude-session.sh +94 -0
- package/scripts/setup/configure-macos.sh +674 -0
- package/scripts/setup/configure-twilio-sip-trunk.mjs +207 -0
- package/scripts/setup/configure-voice-tunnel.mjs +182 -0
- package/scripts/setup/generate-agent-env.mjs +92 -0
- package/scripts/setup/generate-agent-package-json.mjs +222 -0
- package/scripts/setup/generate-agent-package-json.test.mjs +143 -0
- package/scripts/setup/generate-autonomy.mjs +60 -0
- package/scripts/setup/generate-backlog.mjs +101 -0
- package/scripts/setup/generate-cadences.mjs +92 -0
- package/scripts/setup/generate-capability.mjs +162 -0
- package/scripts/setup/generate-charter.mjs +76 -0
- package/scripts/setup/generate-comms.mjs +59 -0
- package/scripts/setup/generate-company.mjs +92 -0
- package/scripts/setup/init-agent.sh +547 -0
- package/scripts/setup/init-agent.test.mjs +151 -0
- package/scripts/setup/init-archetype.mjs +74 -0
- package/scripts/setup/init-backup.mjs +54 -0
- package/scripts/setup/init-cadence-bus.mjs +60 -0
- package/scripts/setup/init-channel-bus.mjs +46 -0
- package/scripts/setup/init-cost-tracking.mjs +45 -0
- package/scripts/setup/init-decision-capture.mjs +66 -0
- package/scripts/setup/init-known-agents.mjs +57 -0
- package/scripts/setup/init-learning.mjs +70 -0
- package/scripts/setup/init-memory-executive.mjs +45 -0
- package/scripts/setup/init-model-router.mjs +124 -0
- package/scripts/setup/init-rag.mjs +174 -0
- package/scripts/setup/init-session-router.mjs +38 -0
- package/scripts/setup/init-slack-socket-mode.mjs +260 -0
- package/scripts/setup/init-telegram.mjs +165 -0
- package/scripts/setup/init-voice-realtime.mjs +204 -0
- package/scripts/setup/init-whatsapp-baileys.mjs +77 -0
- package/scripts/setup/install-dev-tools.sh +150 -0
- package/scripts/setup/lib/install-plist.mjs +95 -0
- package/scripts/setup/migrate-agent-to-sot.mjs +192 -0
- package/scripts/setup/render-environment-yaml.mjs +133 -0
- package/scripts/slack-events-ctl.sh +177 -0
- package/scripts/slack-events-server.mjs +1045 -0
- package/scripts/slack-react.mjs +89 -0
- package/scripts/slack-responded.sh +232 -0
- package/scripts/slack-send.sh +287 -0
- package/scripts/slack-typing.mjs +196 -0
- package/scripts/slack-upload-v2.py +95 -0
- package/scripts/sms-handler.mjs +450 -0
- package/scripts/spawn-session.sh +120 -0
- package/scripts/sync-protocol.mjs +217 -0
- package/scripts/system-verify.sh +184 -0
- package/scripts/test-email-thread-dedup.py +239 -0
- package/scripts/test-information-barriers.py +484 -0
- package/scripts/test-llm-email-dedup.py +251 -0
- package/scripts/test-pre-draft-integration.py +203 -0
- package/scripts/test-rag-phase2.sh +442 -0
- package/scripts/test-rag-search.sh +251 -0
- package/scripts/test-voice-parser.mjs +316 -0
- package/scripts/user-context-search.py +659 -0
- package/scripts/validate_outbound.py +1504 -0
- package/scripts/watchdog/ai.maestro.memory-watchdog.plist +41 -0
- package/scripts/watchdog/force-reboot.sh +157 -0
- package/scripts/watchdog/memory-watchdog.sh +473 -0
- package/scripts/whatsapp-handler.mjs +538 -0
- package/teams/desktop-operations.yaml +34 -0
- package/teams/executive-office.yaml +27 -0
- package/teams/legal-and-regulatory.yaml +24 -0
- package/teams/platform-and-engineering.yaml +23 -0
- package/teams/strategy-and-growth.yaml +29 -0
- package/workflows/continuous/backlog-executor.yaml +141 -0
- package/workflows/continuous/inbound-monitor.yaml +168 -0
- package/workflows/daily/applicant-triage.yaml +197 -0
- package/workflows/daily/comms-triage.yaml +80 -0
- package/workflows/daily/evening-wrap.yaml +105 -0
- package/workflows/daily/morning-brief.yaml +164 -0
- package/workflows/daily/slack-followup-sweep.yaml +87 -0
- package/workflows/event-driven/README.md +50 -0
- package/workflows/event-driven/agent-failure-investigation.yaml +137 -0
- package/workflows/event-driven/pr-review.yaml +107 -0
- package/workflows/monthly/board-readiness.yaml +76 -0
- package/workflows/quarterly/strategic-scenario-analysis.yaml +85 -0
- package/workflows/session-protocol.md +171 -0
- package/workflows/weekly/engineering-health.yaml +154 -0
- package/workflows/weekly/hiring-review.yaml +169 -0
- package/workflows/weekly/rollup-pipeline-review.yaml +76 -0
- package/workflows/weekly/strategic-memo.yaml +79 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# The Archetype Agent Factory
|
|
2
|
+
|
|
3
|
+
> How Maestro turns a chosen archetype into a complete, ready-to-operate
|
|
4
|
+
> autonomous agent — McKinsey/Goldman-grade, generated from data, busy from
|
|
5
|
+
> minute one. Persona-agnostic: every example below is illustrative.
|
|
6
|
+
|
|
7
|
+
## 1. The model: Function × Altitude
|
|
8
|
+
|
|
9
|
+
An agent's operating model is composed from **two orthogonal axes**, not one:
|
|
10
|
+
|
|
11
|
+
- **Function** — *what the agent owns*: control towers, KPI categories,
|
|
12
|
+
stakeholders, backlog streams, tool/skill/workflow packs, and the MCP servers
|
|
13
|
+
the role needs. Six functions: `executive-operator`, `technical-leader`,
|
|
14
|
+
`commercial-leader`, `compliance-officer`, `product-leader`, `operations-leader`.
|
|
15
|
+
- **Altitude** — *how the agent operates*: autonomy bands, decision-rights
|
|
16
|
+
authority, escalation thresholds, KPI altitude, backlog granularity, delegation
|
|
17
|
+
breadth, and communication formality. Five altitudes: `founder`, `c-suite`,
|
|
18
|
+
`svp`, `vp`, `senior-manager`.
|
|
19
|
+
|
|
20
|
+
Seniority roles decompose into cells: a **CTO** = `technical-leader × c-suite`; a
|
|
21
|
+
**VP of Engineering** = `technical-leader × vp`; a **Head of Operations** =
|
|
22
|
+
`operations-leader × svp`; a **Startup Founder** = `executive-operator × founder`.
|
|
23
|
+
The same function at two altitudes shares skills and towers but has radically
|
|
24
|
+
different decision rights and autonomy — which a single-axis model cannot express.
|
|
25
|
+
|
|
26
|
+
## 2. The data spine
|
|
27
|
+
|
|
28
|
+
The operating model is **data, not prose** — versioned, validatable, diffable:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
archetypes/
|
|
32
|
+
├── base.yaml shared defaults (voice modes, principles, universal reds)
|
|
33
|
+
├── functions/<function>.yaml towers, KPIs, stakeholders, backlog streams, packs
|
|
34
|
+
├── altitudes/<altitude>.yaml autonomy bands, decision-rights, escalation, granularity
|
|
35
|
+
├── capabilities/<function>.yaml the role's sub-agent org (teams of roles), skills,
|
|
36
|
+
│ workflows, MCP servers
|
|
37
|
+
└── archetype.schema.json the resolved-profile contract
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Resolved by small, tested, dependency-light modules:
|
|
41
|
+
|
|
42
|
+
| Module | Resolves |
|
|
43
|
+
| --- | --- |
|
|
44
|
+
| `lib/archetype.mjs` | `base ⊕ function ⊕ altitude` → validated operating profile |
|
|
45
|
+
| `lib/capability.mjs` | standard defaults + altitude-scaled role roster + skills/workflows/MCP |
|
|
46
|
+
| `lib/cadences.mjs` | standard ⊕ function recurring workflows ⊕ altitude cadences |
|
|
47
|
+
| `lib/autonomy.mjs` | the action-classification policy (human bands + enforced per-action map) |
|
|
48
|
+
| `lib/comms.mjs` | tone/register/voice-modes/channel-strategy/templates |
|
|
49
|
+
| `lib/charter.mjs`, `lib/backlog.mjs` | the operating charter + the WBS backlog |
|
|
50
|
+
| `lib/render.mjs` | `{{agent.*}}` token substitution (framework prompts stay generic) |
|
|
51
|
+
|
|
52
|
+
## 3. The generation pipeline (init Phase 2.5)
|
|
53
|
+
|
|
54
|
+
A chosen `{ function, altitude }` + a hybrid **context pack** (a short interview for
|
|
55
|
+
what only the principal knows + autonomous research) drives the generators:
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
config/agent.json {function, altitude}
|
|
59
|
+
│ resolveArchetype → operating profile
|
|
60
|
+
▼
|
|
61
|
+
init-archetype → validate + normalise
|
|
62
|
+
generate-charter → config/operating-charter.md (towers, RACI/decision-rights,
|
|
63
|
+
autonomy, KPI tree, stakeholders, 30/60/90)
|
|
64
|
+
generate-backlog → state/backlog/wbs.yaml + seeded state/queues/* + config/priorities.yaml
|
|
65
|
+
generate-capability→ agents/*/agent.md (40–60 role + 13 standard), plugins/agent-skills/,
|
|
66
|
+
workflows/*, config/{agent-roster,event-routing,mcp-servers}.yaml
|
|
67
|
+
generate-cadences → config/cadences.yaml + launchd plists (archetype-specific schedule)
|
|
68
|
+
generate-autonomy → policies/action-classification.yaml (archetype-derived + gate-enforced)
|
|
69
|
+
generate-comms → policies/communication-profile.yaml (tone/register/channels)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Skeletons are deterministic from the data spine; the wizard LLM-enriches the
|
|
73
|
+
company-specific content from the context pack. Every artifact is reviewed before
|
|
74
|
+
it goes live, and a **doctor acceptance gate** refuses to call init "done" until
|
|
75
|
+
the agent can actually work (charter present & placeholder-free, priorities
|
|
76
|
+
populated, backlog seeded, capability surface generated).
|
|
77
|
+
|
|
78
|
+
## 4. What a freshly-initialised agent gets
|
|
79
|
+
|
|
80
|
+
Worked example — a fresh **VP, Regulatory & Licensing** (`compliance-officer × vp`):
|
|
81
|
+
|
|
82
|
+
- a 150-line **operating charter** (purpose, 8 control towers, a VP-calibrated
|
|
83
|
+
decision-rights matrix, Green/Amber/Red autonomy, escalation, KPI tree,
|
|
84
|
+
stakeholder map, first-90-days);
|
|
85
|
+
- a **seeded backlog** — streams → 30/60/90 phases → epics → tasks, with the
|
|
86
|
+
first-30-day tasks materialised as `open` queue items the backlog-executor
|
|
87
|
+
works on the first tick;
|
|
88
|
+
- a **capability surface** — ~45 sub-agents (13 standard infrastructure + ~32
|
|
89
|
+
role-tailored, altitude-scaled), 8 skills, 7 workflows, 6 MCP servers, and an
|
|
90
|
+
event→capability routing table;
|
|
91
|
+
- **archetype-specific cadences** (a compliance rhythm, not an engineering one);
|
|
92
|
+
- an **enforced autonomy policy** calibrated to the altitude (a VP escalates
|
|
93
|
+
binding external commitments; a founder owns them);
|
|
94
|
+
- a **communication profile** (register, formality, channel strategy, voice modes).
|
|
95
|
+
|
|
96
|
+
A C-suite altitude scales the same function up to ~65 sub-agents and broader
|
|
97
|
+
autonomy; a senior-manager scales it down to a hands-on core. The agent gets
|
|
98
|
+
straight to work — on role-true, company-specific work — the moment the daemon starts.
|
|
99
|
+
|
|
100
|
+
## 5. Why it's enterprise-grade
|
|
101
|
+
|
|
102
|
+
- **Reproducible & auditable** — two same-archetype agents get byte-identical
|
|
103
|
+
skeletons; the operating model is data a risk committee can read and diff.
|
|
104
|
+
- **Versioned** — the archetype library is registered in `framework-features.json`;
|
|
105
|
+
`upgrade` re-renders charters/backlogs/cadences when it revs.
|
|
106
|
+
- **Enforced, not decorative** — autonomy bands compile to the per-action map the
|
|
107
|
+
comms/voice gate reads; CI guards keep confidential data and residual identity
|
|
108
|
+
out of the published framework.
|
|
109
|
+
- **Persona-agnostic** — framework prompts carry `{{agent.*}}` tokens rendered at
|
|
110
|
+
load time; only generated per-agent artifacts carry a name.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Collective Memory & Org Mesh
|
|
2
|
+
|
|
3
|
+
> Cross-session global memory, concurrent-session presence, and inter-agent org
|
|
4
|
+
> coordination for Maestro. Status: implemented (file-backed, cohort-ready).
|
|
5
|
+
|
|
6
|
+
## Why
|
|
7
|
+
|
|
8
|
+
A senior operator — human or AI — arriving at work needs, within seconds:
|
|
9
|
+
|
|
10
|
+
1. **"What do I already know / what happened while I was away?"** → collective memory
|
|
11
|
+
2. **"Who else is working right now, and on what?"** → presence
|
|
12
|
+
3. **"Who's who in the org, what do they own, what are they heads-down on, and how
|
|
13
|
+
do I reach them or hand work off?"** → org mesh
|
|
14
|
+
|
|
15
|
+
…and every AI action must stay **observable by the responsible humans**.
|
|
16
|
+
|
|
17
|
+
Maestro already had the raw materials (per-agent FTS5 RAG, atomic session locks,
|
|
18
|
+
a channel bus, and charter/backlog/archetype data) but no layer that made any of
|
|
19
|
+
it *collective* across sessions or *legible* across agents. This feature adds that
|
|
20
|
+
layer. **Anti-bloat is the spine**: nothing here is allowed to balloon a session's
|
|
21
|
+
context — capture is distilled and async, recall is hard token-budgeted.
|
|
22
|
+
|
|
23
|
+
## Three pillars
|
|
24
|
+
|
|
25
|
+
### Pillar 1 — Collective memory (`lib/collective/`)
|
|
26
|
+
|
|
27
|
+
Every Claude Code session **on the machine** (not just daemon sessions — also the
|
|
28
|
+
operator's ad-hoc `claude` runs in any repo) contributes to, and recalls from, the
|
|
29
|
+
agent's long-term memory.
|
|
30
|
+
|
|
31
|
+
- **Capture (write).** A global `Stop`/`PreCompact` hook distills the finished
|
|
32
|
+
session (cheap model, async, time-boxed, **fail-open**) into small structured
|
|
33
|
+
**memory cards** — `decision | fact | artifact | openloop | entity` — and appends
|
|
34
|
+
them to `memory/collective/cards/<date>.jsonl`. **Never raw transcripts.** Trivial
|
|
35
|
+
sessions (no tool use / too short) are skipped. Honors a repo **denylist** and the
|
|
36
|
+
information-barrier policy.
|
|
37
|
+
- **Store.** `memory/collective/` is registered as a source for the *existing*
|
|
38
|
+
`lib/rag` FTS5 (+ optional embedding) index — reused, not rebuilt.
|
|
39
|
+
- **Recall (read).** A global `SessionStart` hook injects a **hard token-budgeted
|
|
40
|
+
digest** (`digestBudgetTokens`, default 1500): a one-line presence summary + the
|
|
41
|
+
top cards ranked by **relevance × recency-decay × salience**, MMR-deduped, plus a
|
|
42
|
+
pointer to `rag_search` / `collective recall` for more. The budget is the
|
|
43
|
+
anti-bloat control.
|
|
44
|
+
- **Cross-repo reach.** `~/.claude/maestro-agent.json` (written at `global-setup`)
|
|
45
|
+
names the agent repo so sessions in *any* directory find the store; absent → the
|
|
46
|
+
hooks no-op silently (safe on non-agent machines).
|
|
47
|
+
|
|
48
|
+
### Pillar 2 — Presence (`lib/collective/presence.mjs`)
|
|
49
|
+
|
|
50
|
+
A file-backed session registry under `state/collective/presence/<sessionId>.json`,
|
|
51
|
+
using the same atomic-`wx` + fail-open idiom as `session-lock.mjs`. Each session
|
|
52
|
+
`register()`s on start, `heartbeat()`s on PostToolUse, and `deregister()`s on stop;
|
|
53
|
+
stale entries (no beat past `staleSec`) are reaped on read. Surfaced as the one-line
|
|
54
|
+
summary in the SessionStart digest ("2 other sessions active — daemon: inbox triage
|
|
55
|
+
(4m); ~/openclaw: interactive (just now)"), and via `scripts/collective/who.mjs`.
|
|
56
|
+
|
|
57
|
+
### Pillar 3 — Org mesh (`lib/org/`)
|
|
58
|
+
|
|
59
|
+
- **Registry SoT.** `buildSelfEntry()` assembles this agent's directory entry from
|
|
60
|
+
data that already exists: identity (`config/agent.json`) + archetype
|
|
61
|
+
(function×altitude) + charter towers/decision-rights/autonomy + live backlog focus
|
|
62
|
+
(`state/queues`) + presence + comms coordinates. Published **file-backed**
|
|
63
|
+
(`state/org/self.json` + a merged `state/org/directory.json`) — works today, zero
|
|
64
|
+
infra — with a **cohort API client behind a flag** (`org.cohort.enabled`) that
|
|
65
|
+
publishes status + fetches the directory from `api.cohortapp.com/{org}/agents`,
|
|
66
|
+
aligned to the contract wundr's orchestrator-daemon already speaks. The human org
|
|
67
|
+
chart is a **pluggable directory source** (`file` | `google` | `slack`) wired when
|
|
68
|
+
credentials exist.
|
|
69
|
+
- **A2A handoff.** `sendHandoff()` emits a structured ` ```maestro-handoff ` JSON
|
|
70
|
+
envelope over the **existing Slack/email channel bus** to the target agent's
|
|
71
|
+
coordinates; the receiving daemon's classifier recognizes the envelope and enqueues
|
|
72
|
+
a provenance-tagged task. Because handoffs ride Slack/email, **humans see every
|
|
73
|
+
one** — observability by construction. Each is mirrored to `state/org/handoffs.jsonl`
|
|
74
|
+
and (optionally) a human channel.
|
|
75
|
+
- **Observability.** An `org-pulse` cadence posts "what every agent is focused on"
|
|
76
|
+
to a human channel daily; all collective/org actions are logged under
|
|
77
|
+
`logs/collective/` and `state/org/`.
|
|
78
|
+
|
|
79
|
+
## Plumbing
|
|
80
|
+
|
|
81
|
+
- **`maestro global-setup`** (new, idempotent): deep-merges the three collective
|
|
82
|
+
hooks into `~/.claude/settings.json` (**never clobbering** existing hooks/plugins —
|
|
83
|
+
same deepMerge+timestamped-backup discipline wundr uses), writes a delimited,
|
|
84
|
+
idempotent block into `~/.claude/CLAUDE.md`, and writes the `~/.claude/maestro-agent.json`
|
|
85
|
+
pointer. Run automatically at the end of `init-agent.sh`, by `wundr install` (which
|
|
86
|
+
already detects + defers to maestro), and standalone. Verified by `maestro doctor`.
|
|
87
|
+
- **Config:** `config/collective.yaml` — `enabled`, `captureModel`, `digestBudgetTokens`,
|
|
88
|
+
`recencyHalfLifeDays`, `captureOn`, `repoDenylist`, `presence.{heartbeatSec,staleSec}`,
|
|
89
|
+
`org.{cohort,directorySource}`.
|
|
90
|
+
|
|
91
|
+
## Anti-bloat invariants (enforced, not aspirational)
|
|
92
|
+
|
|
93
|
+
1. SessionStart digest is hard-capped at `digestBudgetTokens` (default 1500).
|
|
94
|
+
2. Capture is async, distilled (cheap model), time-boxed, and **fail-open** — it
|
|
95
|
+
never blocks or slows a session, and never stores raw transcripts.
|
|
96
|
+
3. Recall ranks by relevance × recency-decay × salience and MMR-dedupes before the
|
|
97
|
+
budget cut.
|
|
98
|
+
4. Presence is one summary line, never a dump.
|
|
99
|
+
5. Everything is opt-out (`enabled: false`) and scoped (repo denylist + info-barriers).
|
|
100
|
+
|
|
101
|
+
## Module map
|
|
102
|
+
|
|
103
|
+
| Module | Responsibility |
|
|
104
|
+
|---|---|
|
|
105
|
+
| `lib/collective/config.mjs` | Load `config/collective.yaml` + defaults; agent-root + pointer resolution; denylist check |
|
|
106
|
+
| `lib/collective/cards.mjs` | Memory-card schema, append/read JSONL, salience |
|
|
107
|
+
| `lib/collective/capture.mjs` | Distill a session → cards (pluggable distiller; Haiku default) |
|
|
108
|
+
| `lib/collective/presence.mjs` | Session registry: register/heartbeat/deregister/list/summary/reap |
|
|
109
|
+
| `lib/collective/recall.mjs` | Ranking (relevance×recency×salience), MMR, budgeted digest builder |
|
|
110
|
+
| `lib/org/registry.mjs` | Build/publish self entry; read merged directory |
|
|
111
|
+
| `lib/org/handoff.mjs` | Envelope build/parse, target resolution, send, record |
|
|
112
|
+
| `lib/org/cohort-client.mjs` | Optional cohort API client (publish status / fetch directory) |
|
|
113
|
+
| `scripts/collective/hook-runner.mjs` | Dispatch for the global prime/beat/capture hooks |
|
|
114
|
+
| `scripts/collective/{who,recall}.mjs` | Operator CLIs |
|
|
115
|
+
| `bin/maestro.mjs global-setup` | Idempotent global-config wiring |
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# Continuous Inbound Monitoring & Autonomous Response Architecture
|
|
2
|
+
|
|
3
|
+
> How the agent watches Slack, WhatsApp, and Gmail continuously and responds autonomously.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
The the agent operating system operates a **continuous monitoring loop** across all communication channels. Unlike the scheduled workflows (morning brief, comms triage) which run at fixed times, the continuous monitor runs **perpetually** — polling channels every 30-120 seconds and dispatching responses based on urgency, classification, and approval rules.
|
|
10
|
+
|
|
11
|
+
### Two Response Modes
|
|
12
|
+
|
|
13
|
+
1. **Direct Response** — the agent's main orchestrating Claude Code session handles simple/routine inbound items directly (acknowledgements, status updates, scheduling, routine follow-ups)
|
|
14
|
+
2. **Spawned Session** — For complex inbound tasks that require deep work (research, analysis, document preparation, multi-step coordination), the agent spawns a dedicated Claude Code sub-session that works independently and reports back
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
┌─────────────────────────────────────────────────────────┐
|
|
18
|
+
│ CONTINUOUS MONITORING LOOP │
|
|
19
|
+
│ │
|
|
20
|
+
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
|
|
21
|
+
│ │ Slack │ │ WhatsApp │ │ Gmail │ │
|
|
22
|
+
│ │ Monitor │ │ Monitor │ │ Monitor │ │
|
|
23
|
+
│ └────┬─────┘ └────┬─────┘ └──────┬───────┘ │
|
|
24
|
+
│ │ │ │ │
|
|
25
|
+
│ └──────────────┼───────────────┘ │
|
|
26
|
+
│ ▼ │
|
|
27
|
+
│ ┌──────────────────┐ │
|
|
28
|
+
│ │ Inbound │ │
|
|
29
|
+
│ │ Dispatcher │ │
|
|
30
|
+
│ └────────┬─────────┘ │
|
|
31
|
+
│ │ │
|
|
32
|
+
│ ┌──────────┼──────────┐ │
|
|
33
|
+
│ ▼ ▼ ▼ │
|
|
34
|
+
│ ┌─────────┐ ┌────────┐ ┌─────────┐ │
|
|
35
|
+
│ │ Simple │ │ Queue │ │ Complex │ │
|
|
36
|
+
│ │ Direct │ │ for │ │ Spawn │ │
|
|
37
|
+
│ │ Reply │ │ Review │ │ Session │ │
|
|
38
|
+
│ └─────────┘ └────────┘ └─────────┘ │
|
|
39
|
+
│ │
|
|
40
|
+
└─────────────────────────────────────────────────────────┘
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Monitoring Loop Intervals
|
|
46
|
+
|
|
47
|
+
| Channel | Poll Interval | Method | Scope |
|
|
48
|
+
| -------- | ------------- | ----------------------- | ---------------------------------- |
|
|
49
|
+
| Slack | 60 seconds | Desktop app observation | Priority channels + DMs + mentions |
|
|
50
|
+
| Gmail | 120 seconds | Browser observation | Unread inbox, priority senders |
|
|
51
|
+
| WhatsApp | 120 seconds | Desktop app observation | Business-tagged contacts only |
|
|
52
|
+
|
|
53
|
+
These run as **persistent background processes** via launchd, independent of the main Claude Code session.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Inbound Classification
|
|
58
|
+
|
|
59
|
+
Every inbound message is classified along three dimensions:
|
|
60
|
+
|
|
61
|
+
### 1. Urgency
|
|
62
|
+
|
|
63
|
+
| Level | Criteria | Response SLA |
|
|
64
|
+
| ------------ | ------------------------------------------------------------ | ----------------------------- |
|
|
65
|
+
| **Critical** | From the principal, regulator, or flagged-urgent contact | < 5 minutes (immediate alert) |
|
|
66
|
+
| **High** | From investor, board member, acquisition target, senior team | < 30 minutes |
|
|
67
|
+
| **Normal** | From team member, known contact, routine business | < 2 hours |
|
|
68
|
+
| **Low** | Newsletter, notification, non-actionable | Next scheduled triage |
|
|
69
|
+
|
|
70
|
+
### 2. Complexity
|
|
71
|
+
|
|
72
|
+
| Level | Criteria | Response Mode |
|
|
73
|
+
| ------------ | ------------------------------------------------------------- | ----------------------------------- |
|
|
74
|
+
| **Simple** | Acknowledgement, yes/no, scheduling, status update | Direct reply from main session |
|
|
75
|
+
| **Moderate** | Requires context lookup, short analysis, or coordination | Direct reply with research |
|
|
76
|
+
| **Complex** | Requires deep analysis, document preparation, multi-step work | Spawn dedicated Claude Code session |
|
|
77
|
+
|
|
78
|
+
### 3. Risk
|
|
79
|
+
|
|
80
|
+
| Level | Criteria | Approval |
|
|
81
|
+
| ---------- | -------------------------------------------------------- | ------------------------- |
|
|
82
|
+
| **Low** | Internal team, routine content | Auto-send (pre-approved) |
|
|
83
|
+
| **Medium** | External known contact, substantive content | Draft + queue for review |
|
|
84
|
+
| **High** | Investor, regulator, board, M&A, financial/legal content | Draft + explicit approval |
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Autonomous Response Rules
|
|
89
|
+
|
|
90
|
+
the agent can respond autonomously (without the principal's approval) to:
|
|
91
|
+
|
|
92
|
+
### Auto-Respond (Send Immediately, Log All)
|
|
93
|
+
|
|
94
|
+
- Internal team messages requesting status updates
|
|
95
|
+
- Acknowledgements to known contacts ("Thanks, received — reviewing now")
|
|
96
|
+
- Calendar confirmations and scheduling responses
|
|
97
|
+
- Follow-up chasers for items already approved
|
|
98
|
+
- Internal Slack thread replies continuing approved conversation threads
|
|
99
|
+
|
|
100
|
+
### Draft-and-Hold (Send After Review)
|
|
101
|
+
|
|
102
|
+
- First-contact replies to external parties
|
|
103
|
+
- Substantive responses containing analysis or recommendations
|
|
104
|
+
- Any reply that creates a commitment or deadline
|
|
105
|
+
- Messages to contacts classified as investor/board/regulator
|
|
106
|
+
|
|
107
|
+
### Escalate Immediately (Alert the principal)
|
|
108
|
+
|
|
109
|
+
- Messages from regulators (the regulator, MAS, FCA, SEC, etc.)
|
|
110
|
+
- Messages flagged as urgent from any channel
|
|
111
|
+
- Messages containing legal threats or compliance issues
|
|
112
|
+
- Messages from acquisition targets or their advisors
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Session Spawning
|
|
117
|
+
|
|
118
|
+
When an inbound item requires complex work, the agent spawns a dedicated Claude Code session:
|
|
119
|
+
|
|
120
|
+
### When to Spawn
|
|
121
|
+
|
|
122
|
+
- Research request requiring web searches and analysis (> 5 minutes of work)
|
|
123
|
+
- Document preparation (memo, brief, analysis, board material)
|
|
124
|
+
- Multi-repo investigation (checking code, regulatory docs, strategy docs)
|
|
125
|
+
- Due diligence task on a rollup target
|
|
126
|
+
- Complex email requiring context assembly from multiple sources
|
|
127
|
+
- Any task that would block the main monitoring loop for > 3 minutes
|
|
128
|
+
|
|
129
|
+
### Spawn Mechanism
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
# the agent spawns a sub-session with a specific task
|
|
133
|
+
claude --dangerously-skip-permissions \
|
|
134
|
+
-p "You are working for a Maestro agent
|
|
135
|
+
Task: {task_description}
|
|
136
|
+
Context: {assembled_context}
|
|
137
|
+
Deliver output to: {output_path}
|
|
138
|
+
When complete, write a summary to: {completion_signal_path}" \
|
|
139
|
+
--output-format text \
|
|
140
|
+
> logs/sessions/{session_id}.log 2>&1 &
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Session Contract
|
|
144
|
+
|
|
145
|
+
Each spawned session receives:
|
|
146
|
+
|
|
147
|
+
- **Task description** — What needs to be done
|
|
148
|
+
- **Context** — Relevant knowledge, conversation history, source material
|
|
149
|
+
- **Output path** — Where to write the deliverable
|
|
150
|
+
- **Completion signal** — File path to write when done (monitored by main session)
|
|
151
|
+
- **Time budget** — Maximum runtime before auto-termination
|
|
152
|
+
- **Scope boundary** — What repos/files the session may access
|
|
153
|
+
|
|
154
|
+
### Session Types
|
|
155
|
+
|
|
156
|
+
| Type | Use Case | Time Budget | Example |
|
|
157
|
+
| --------------- | ------------------------------- | ----------- | ---------------------------------------------------------------- |
|
|
158
|
+
| Quick Research | Look something up, summarise | 5 min | "What's the latest on the regulator AI governance guidelines?" |
|
|
159
|
+
| Draft Response | Prepare a reply needing context | 10 min | Complex email reply needing rollup strategy context |
|
|
160
|
+
| Analysis | Deep dive on a topic | 30 min | Competitive intelligence report on a new entrant |
|
|
161
|
+
| Document Prep | Create a deliverable | 60 min | Board readiness assessment, target briefing |
|
|
162
|
+
| Multi-Repo Task | Cross-codebase investigation | 30 min | Check the regulator gap status across the regulatory-submission and platform repos |
|
|
163
|
+
|
|
164
|
+
### Session Lifecycle
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
Spawn → Execute → Write Output → Signal Completion → Main Session Reviews → Route Output
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
1. **Spawn**: Main session creates the task with full context
|
|
171
|
+
2. **Execute**: Sub-session works independently
|
|
172
|
+
3. **Output**: Sub-session writes deliverable to `outputs/sessions/{id}/`
|
|
173
|
+
4. **Signal**: Sub-session writes completion marker
|
|
174
|
+
5. **Review**: Main session reads output, verifies quality
|
|
175
|
+
6. **Route**: Main session delivers output (send reply, file memo, update memory, etc.)
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Monitoring Process Architecture
|
|
180
|
+
|
|
181
|
+
### launchd Services
|
|
182
|
+
|
|
183
|
+
Three persistent monitoring services, each as a launchd daemon:
|
|
184
|
+
|
|
185
|
+
1. **ai.maestro.monitor.slack** — Slack observation loop
|
|
186
|
+
2. **ai.maestro.monitor.gmail** — Gmail observation loop
|
|
187
|
+
3. **ai.maestro.monitor.whatsapp** — WhatsApp observation loop
|
|
188
|
+
|
|
189
|
+
Plus one dispatcher:
|
|
190
|
+
|
|
191
|
+
4. **ai.maestro.dispatcher** — Classifies and routes inbound items
|
|
192
|
+
|
|
193
|
+
### Main Session Role
|
|
194
|
+
|
|
195
|
+
The main Claude Code session (the agent) runs continuously and:
|
|
196
|
+
|
|
197
|
+
- Reads the inbound queue populated by monitors
|
|
198
|
+
- Classifies items by urgency/complexity/risk
|
|
199
|
+
- Handles simple items directly
|
|
200
|
+
- Spawns sessions for complex items
|
|
201
|
+
- Reviews outputs from spawned sessions
|
|
202
|
+
- Manages the response queue
|
|
203
|
+
- Maintains executive memory and state
|
|
204
|
+
|
|
205
|
+
### Failure Handling
|
|
206
|
+
|
|
207
|
+
- If a monitor crashes, launchd restarts it automatically
|
|
208
|
+
- If the main session crashes, monitors continue queueing — items are processed on restart
|
|
209
|
+
- Spawned sessions have time budgets — they are killed if they exceed them
|
|
210
|
+
- All inbound items are persisted to disk before processing (no data loss on crash)
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Security Considerations
|
|
215
|
+
|
|
216
|
+
- Monitors are **observe-only** — they cannot send messages
|
|
217
|
+
- Only the main session (or approved spawned sessions) can send
|
|
218
|
+
- All autonomous sends are logged with full content and recipient
|
|
219
|
+
- Rate limits apply even to autonomous responses
|
|
220
|
+
- The emergency stop halts all monitoring and response
|
|
221
|
+
- Session spawning is logged with task description and scope
|