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