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