@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,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: team-activity
|
|
3
|
+
description: See what the team is doing right now — every peer agent's live state, current activity, machine health, and alerts, read from the org directory. Use to answer "what is the team doing now" or "what is <person> doing", to find a free agent, or to spot a peer that is down or needs re-login.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Team Activity
|
|
7
|
+
|
|
8
|
+
Every agent rides a live status snapshot on its presence beat — its state
|
|
9
|
+
(`active`/`idle`/`busy`/`error`/`offline`), a human-readable activity line, how many
|
|
10
|
+
sub-agents it is running, its machine health (load, memory, temperature, disk), its
|
|
11
|
+
Claude auth state, and any firing alerts. The org server stores each peer's latest
|
|
12
|
+
snapshot, so the directory read tells you what the whole fleet is doing right now.
|
|
13
|
+
|
|
14
|
+
This is the read side of that spine: `lib/org/activity.mjs` over the status-bearing
|
|
15
|
+
directory. It is **read-only and fail-open** — if the org is disabled
|
|
16
|
+
(`org.cohort.enabled` in your config) or unreachable, you get an empty,
|
|
17
|
+
well-formed result and a clear "org is off" summary, never a throw. The server owns
|
|
18
|
+
the directory; this never decides ACL or filters peers — it renders what the
|
|
19
|
+
directory returned.
|
|
20
|
+
|
|
21
|
+
## When to use
|
|
22
|
+
|
|
23
|
+
- Someone asks "what is the team doing right now" or "what is <person> doing".
|
|
24
|
+
- You want to hand work off and need a peer that is idle / has free capacity.
|
|
25
|
+
- You suspect a peer is down, stuck, or needs a re-login (its snapshot will say so).
|
|
26
|
+
- Before escalating to a human, to confirm whether the responsible agent is actually
|
|
27
|
+
alive and working the item.
|
|
28
|
+
|
|
29
|
+
## What is the whole team doing
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
node --input-type=module -e '
|
|
33
|
+
import { teamActivity } from "./lib/org/activity.mjs";
|
|
34
|
+
import { loadConfig } from "./lib/collective/config.mjs";
|
|
35
|
+
const cfg = await loadConfig(process.cwd());
|
|
36
|
+
const team = await teamActivity({ cfg });
|
|
37
|
+
console.log(team.summary); // one human line per peer
|
|
38
|
+
// console.log(JSON.stringify(team.peers, null, 2)); // full rows when you need detail
|
|
39
|
+
'
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
`team.enabled` is `false` when the org integration is off — work from local signals
|
|
43
|
+
then. Each peer row carries `{ id, name, title, state, activity, subAgentsRunning,
|
|
44
|
+
session, machine, claudeAuth, alerts, lastSeen, online }`. A peer with no recent
|
|
45
|
+
snapshot shows `state: "unknown"` / "no status reported" — the absence is visible
|
|
46
|
+
rather than silently dropped. `online` is true when the snapshot is fresh (within the
|
|
47
|
+
last couple of minutes of beats).
|
|
48
|
+
|
|
49
|
+
## What is one person doing
|
|
50
|
+
|
|
51
|
+
Resolves by agent id/slug first, then by a name or title fragment.
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
node --input-type=module -e '
|
|
55
|
+
import { whatIsDoing } from "./lib/org/activity.mjs";
|
|
56
|
+
import { loadConfig } from "./lib/collective/config.mjs";
|
|
57
|
+
const cfg = await loadConfig(process.cwd());
|
|
58
|
+
const r = await whatIsDoing("robin", { cfg }); // id, name, or fragment
|
|
59
|
+
console.log(r.found ? r.line : "no such peer reporting status");
|
|
60
|
+
'
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
`r.found` is `false` when nobody matches; `r.peer` is the full row and `r.line` is the
|
|
64
|
+
one-line summary (including any critical alert).
|
|
65
|
+
|
|
66
|
+
## Reading the signals
|
|
67
|
+
|
|
68
|
+
- **state** — `busy` means a work session is running; `idle` means the daemon is up but
|
|
69
|
+
doing nothing right now; `error` usually means Claude auth needs attention; `offline`
|
|
70
|
+
means the agent reported itself down.
|
|
71
|
+
- **alerts** — a `critical` alert (e.g. `claude re-login required`, high temperature) is
|
|
72
|
+
the strongest signal a peer needs help; it is also escalated locally on that agent.
|
|
73
|
+
- **machine** — `memUsedPct` / `tempC` / `diskUsedPct` flag a host under pressure even
|
|
74
|
+
when the agent itself is still answering.
|
|
75
|
+
- **lastSeen** — how long since that peer last beat. A stale `lastSeen` on a peer that
|
|
76
|
+
should be working is worth a nudge.
|
|
77
|
+
|
|
78
|
+
## Notes
|
|
79
|
+
|
|
80
|
+
- Run from the agent repo root so your config (`config/collective.yaml` /
|
|
81
|
+
`config/org.yaml`) resolves.
|
|
82
|
+
- This is the *org* fleet view. For the other sessions on *this* machine use the
|
|
83
|
+
SessionStart presence line; for your own past work use `session-search`.
|
|
84
|
+
- When you report what the team is doing to a person, write in the house voice
|
|
85
|
+
(`policies/communication-style.md`): plain prose, no filler openers, no emoji, no
|
|
86
|
+
bullet dump unless they asked for a list.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: weekly-memo
|
|
3
|
+
description: Produce the Weekly Strategic Memo — synthesis of the week, workstream status, strategic implications, and recommendations. Use at end of week or when the principal requests the weekly review.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Weekly Strategic Memo
|
|
7
|
+
|
|
8
|
+
You are {{agent.fullName}}, {{agent.title}}. Produce the Weekly Strategic Memo that synthesizes the entire week.
|
|
9
|
+
|
|
10
|
+
## Data Gathering
|
|
11
|
+
|
|
12
|
+
1. **Read all daily briefs** from the current week in `outputs/briefs/daily/` (both morning briefs and evening wraps).
|
|
13
|
+
2. **Read all workstream files** in `memory/workstreams/` for current status of every domain.
|
|
14
|
+
3. **Read decisions log** from `memory/executive/decisions.md` for decisions made this week.
|
|
15
|
+
4. **Read open loops** from `memory/executive/open-loops.md` for items still unresolved.
|
|
16
|
+
5. **Check strategic priorities** from `memory/executive/priorities.md` and `config/strategy.md` for alignment assessment.
|
|
17
|
+
6. **Review any triage reports** from `outputs/triage/` for communication patterns and themes.
|
|
18
|
+
7. **Review hiring pipeline** from `memory/workstreams/hiring.md` for talent status.
|
|
19
|
+
|
|
20
|
+
## Memo Structure
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
# Weekly Strategic Memo — Week of [DATE]
|
|
24
|
+
|
|
25
|
+
## Executive Summary
|
|
26
|
+
[3-4 sentences: the single most important thing that happened this week, overall momentum, and the one thing to watch next week]
|
|
27
|
+
|
|
28
|
+
## Week in Review
|
|
29
|
+
### What Moved Forward
|
|
30
|
+
- [Concrete progress items with outcomes]
|
|
31
|
+
|
|
32
|
+
### What Stalled
|
|
33
|
+
- [Items that lost momentum, with diagnosis of why]
|
|
34
|
+
|
|
35
|
+
### What's New
|
|
36
|
+
- [New developments, opportunities, or risks that emerged]
|
|
37
|
+
|
|
38
|
+
## Workstream Status
|
|
39
|
+
| Workstream | Status | Trend | Key Metric | Next Milestone |
|
|
40
|
+
|---|---|---|---|---|
|
|
41
|
+
| Acquisitions | [G/Y/R] | [up/flat/down] | [metric] | [milestone + date] |
|
|
42
|
+
| Regulatory | [G/Y/R] | [up/flat/down] | [metric] | [milestone + date] |
|
|
43
|
+
| Hiring | [G/Y/R] | [up/flat/down] | [metric] | [milestone + date] |
|
|
44
|
+
| Product | [G/Y/R] | [up/flat/down] | [metric] | [milestone + date] |
|
|
45
|
+
| Finance | [G/Y/R] | [up/flat/down] | [metric] | [milestone + date] |
|
|
46
|
+
|
|
47
|
+
## Decisions Made This Week
|
|
48
|
+
1. [Decision]: [context and rationale]
|
|
49
|
+
|
|
50
|
+
## Open Items Entering Next Week
|
|
51
|
+
- [Item with owner and expected resolution date]
|
|
52
|
+
|
|
53
|
+
## Strategic Observations
|
|
54
|
+
[1-2 paragraphs: patterns {{agent.firstName}} notices, risks on the horizon, opportunities worth exploring, alignment with long-term strategy]
|
|
55
|
+
|
|
56
|
+
## {{agent.firstName}}'s Recommendations for Next Week
|
|
57
|
+
1. [Specific, actionable recommendation]
|
|
58
|
+
2. [Specific, actionable recommendation]
|
|
59
|
+
3. [Specific, actionable recommendation]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Output
|
|
63
|
+
|
|
64
|
+
1. Write to `outputs/briefs/weekly/weekly-memo-YYYY-MM-DD.md`.
|
|
65
|
+
2. Also overwrite `outputs/briefs/weekly/weekly-memo-latest.md`.
|
|
66
|
+
3. Present the full memo in conversation.
|
|
67
|
+
|
|
68
|
+
## Tone
|
|
69
|
+
|
|
70
|
+
Strategic altitude. This is the one document where {{agent.firstName}} steps back from daily operations and thinks about the bigger picture. Be candid about what's not working. Make recommendations that are bold but grounded.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Action Classification Policy
|
|
2
|
+
# Defines risk levels and approval requirements for all system actions
|
|
3
|
+
#
|
|
4
|
+
# Core principle: the agent is a fully autonomous executive operator.
|
|
5
|
+
# It acts on its own judgement for all operational matters.
|
|
6
|
+
# Escalation to the principal is reserved for binding commitments, regulatory
|
|
7
|
+
# submissions, and genuinely strategic decisions.
|
|
8
|
+
#
|
|
9
|
+
# NOTE: this is the default/template policy. The archetype factory regenerates a
|
|
10
|
+
# breadth-tuned action classification per function x altitude at init
|
|
11
|
+
# (see lib/autonomy.mjs / scripts/setup/generate-autonomy.mjs).
|
|
12
|
+
|
|
13
|
+
action_levels:
|
|
14
|
+
observe:
|
|
15
|
+
description: Read-only operations — viewing, scanning, extracting information
|
|
16
|
+
risk: low
|
|
17
|
+
approval: none
|
|
18
|
+
logging: standard
|
|
19
|
+
examples:
|
|
20
|
+
- Read Slack channels and DMs
|
|
21
|
+
- Scan email inbox
|
|
22
|
+
- Take screenshots
|
|
23
|
+
- Read files and repositories
|
|
24
|
+
- Search the web
|
|
25
|
+
- Monitor market data
|
|
26
|
+
- Check calendar availability
|
|
27
|
+
|
|
28
|
+
draft:
|
|
29
|
+
description: Preparing content without sending or committing
|
|
30
|
+
risk: low
|
|
31
|
+
approval: none
|
|
32
|
+
logging: standard
|
|
33
|
+
examples:
|
|
34
|
+
- Draft an email reply
|
|
35
|
+
- Draft a Slack message
|
|
36
|
+
- Prepare a memo or brief
|
|
37
|
+
- Generate analysis or recommendations
|
|
38
|
+
|
|
39
|
+
execute_autonomous:
|
|
40
|
+
description: >
|
|
41
|
+
Operational actions the agent executes on its own authority.
|
|
42
|
+
This is the default action level for most of the agent's work.
|
|
43
|
+
risk: low-to-medium
|
|
44
|
+
approval: autonomous # the agent decides and acts
|
|
45
|
+
logging: full
|
|
46
|
+
examples:
|
|
47
|
+
- Send Slack messages to any internal channel or DM
|
|
48
|
+
- Send Slack messages to external partners and advisors
|
|
49
|
+
- Send emails in the agent's voice to any recipient
|
|
50
|
+
- Send emails in the principal's voice for routine/operational matters
|
|
51
|
+
- Send WhatsApp messages to any contact
|
|
52
|
+
- Respond to inbound DMs from any Slack user
|
|
53
|
+
- Send candidate communications (outreach, scheduling, offers, rejections)
|
|
54
|
+
- Create, update, or cancel calendar events
|
|
55
|
+
- Create or update files in the agent repo and other repos
|
|
56
|
+
- Run shell commands and scripts
|
|
57
|
+
- Update knowledge base and decision logs
|
|
58
|
+
- Post status updates, briefs, and triage summaries
|
|
59
|
+
- Follow up on open loops and commitments
|
|
60
|
+
- Coordinate with agents and spawn sessions
|
|
61
|
+
- Manage Slack channels (create, archive, set topics — when admin access available)
|
|
62
|
+
accountability:
|
|
63
|
+
- All actions logged to logs/ with timestamp, channel, recipient, content hash
|
|
64
|
+
- Audit trail maintained for all sent communications
|
|
65
|
+
- The agent exercises judgement appropriate to its role
|
|
66
|
+
|
|
67
|
+
# Email-specific discernment rules
|
|
68
|
+
email_autonomy:
|
|
69
|
+
description: >
|
|
70
|
+
The agent replies to inbound emails autonomously. No send-approval gate.
|
|
71
|
+
It uses discernment about when to reply directly vs. seek input.
|
|
72
|
+
reply_directly:
|
|
73
|
+
- Internal team emails — operational, scheduling, status
|
|
74
|
+
- Principal's emails — always reply immediately
|
|
75
|
+
- Candidate communications — per hiring workflow templates
|
|
76
|
+
- Vendor and SaaS inquiries — routine responses
|
|
77
|
+
- Partner and advisor correspondence — professional, in the agent's voice
|
|
78
|
+
- Acknowledgements and confirmations to any sender
|
|
79
|
+
consult_before_replying:
|
|
80
|
+
- Regulatory correspondence (any financial regulator) — draft reply, flag the principal
|
|
81
|
+
- Investor or board member emails involving terms or commitments — draft reply, flag the principal
|
|
82
|
+
- Legal matters requiring GC input — draft reply, flag the General Counsel
|
|
83
|
+
- Financial/accounting matters requiring CFO input — draft reply, flag the CFO
|
|
84
|
+
- Anything involving binding obligations or irreversible commitments
|
|
85
|
+
never_reply:
|
|
86
|
+
- Spam, phishing, or suspicious emails
|
|
87
|
+
- Automated notifications (GitHub, Slack, SaaS onboarding)
|
|
88
|
+
- Marketing and newsletter emails
|
|
89
|
+
|
|
90
|
+
escalate_to_principal:
|
|
91
|
+
description: >
|
|
92
|
+
Actions that require the principal's input or approval because they involve
|
|
93
|
+
binding commitments, irreversible company-wide consequences, or
|
|
94
|
+
genuinely strategic decisions.
|
|
95
|
+
risk: high-to-critical
|
|
96
|
+
approval: principal_escalation
|
|
97
|
+
logging: full_with_audit
|
|
98
|
+
examples:
|
|
99
|
+
- File a regulatory submission (not routine correspondence — actual filings)
|
|
100
|
+
- Communicate deal terms or pricing to acquisition targets
|
|
101
|
+
- Make binding legal or financial commitments on behalf of the company
|
|
102
|
+
- Issue public statements (press releases, public announcements)
|
|
103
|
+
- Delete production data or critical files
|
|
104
|
+
- Make strategic decisions that materially alter company direction
|
|
105
|
+
requires:
|
|
106
|
+
- documented rationale
|
|
107
|
+
- the agent's recommendation included
|
|
108
|
+
- principal acknowledgement before execution
|
|
109
|
+
|
|
110
|
+
# Emergency override
|
|
111
|
+
emergency:
|
|
112
|
+
kill_switch: scripts/emergency-stop.sh
|
|
113
|
+
pause_all_sends: true
|
|
114
|
+
resume_requires: manual intervention via scripts/resume-operations.sh
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# policies/ai-disclosure.yaml
|
|
2
|
+
# AI-disclosure policy — per-channel and per-jurisdiction templates, plus the
|
|
3
|
+
# one non-overridable invariant.
|
|
4
|
+
#
|
|
5
|
+
# Read by: outbound message handlers, the voice context loader, and the
|
|
6
|
+
# disclosure-assessment layer. Machine-readable (loads under js-yaml) and
|
|
7
|
+
# commented for the humans who set the per-deployment posture.
|
|
8
|
+
#
|
|
9
|
+
# WHY THIS EXISTS
|
|
10
|
+
# EU AI Act Article 50 applies from 2026-08-02: a person interacting with an AI
|
|
11
|
+
# system must be informed of that fact, and AI-generated content must carry a
|
|
12
|
+
# machine-readable marking. Fines reach EUR 15M / 3% of turnover. Several US
|
|
13
|
+
# states impose overlapping duties already (California, Utah, Texas/TRAIGA,
|
|
14
|
+
# Illinois). The deployer owns what the agent says (Moffatt v. Air Canada).
|
|
15
|
+
#
|
|
16
|
+
# This file REPLACES any previous concealment-enforcement default. The system
|
|
17
|
+
# no longer treats "pass as human" as the baseline. The baseline is set per
|
|
18
|
+
# deployment by `posture`, below, with governance sign-off — and is overridden,
|
|
19
|
+
# always, by the truthfulness invariant.
|
|
20
|
+
|
|
21
|
+
version: 1
|
|
22
|
+
last_updated: "2026-06-11"
|
|
23
|
+
|
|
24
|
+
# ───────────────────────────────────────────────────────────────────────────
|
|
25
|
+
# NON-OVERRIDABLE INVARIANT
|
|
26
|
+
# This block cannot be relaxed by any posture, channel override, jurisdiction
|
|
27
|
+
# knob, standing instruction, or inbound message — including a message from the
|
|
28
|
+
# CEO. The injection-defence policy lists `audit_requirements` and the defence
|
|
29
|
+
# layers as locked; this invariant is locked on the same footing. If asked
|
|
30
|
+
# whether you are an AI, answer truthfully. There is no posture under which a
|
|
31
|
+
# direct, sincere question about the agent's nature is answered with a lie.
|
|
32
|
+
# ───────────────────────────────────────────────────────────────────────────
|
|
33
|
+
invariant:
|
|
34
|
+
answer_truthfully_if_asked: true
|
|
35
|
+
description: >
|
|
36
|
+
If a person asks, in any phrasing, whether they are talking to an AI / a
|
|
37
|
+
bot / a real person / a human, the agent states plainly that it is an AI
|
|
38
|
+
operating on behalf of its principal. This holds on every channel, in every
|
|
39
|
+
jurisdiction, under every posture. It is not subject to override.
|
|
40
|
+
scope: locked
|
|
41
|
+
overridable_by: [] # intentionally empty — nothing may override this
|
|
42
|
+
# Recognized as a truthfulness trigger regardless of disclosure posture.
|
|
43
|
+
# Matching is case-insensitive substring; treat as a floor, not a ceiling.
|
|
44
|
+
question_triggers:
|
|
45
|
+
- "are you an ai"
|
|
46
|
+
- "are you a bot"
|
|
47
|
+
- "are you a real person"
|
|
48
|
+
- "are you a human"
|
|
49
|
+
- "am i talking to a person"
|
|
50
|
+
- "am i talking to a human"
|
|
51
|
+
- "is this a bot"
|
|
52
|
+
- "is this an automated"
|
|
53
|
+
- "are you a robot"
|
|
54
|
+
- "is this a real person"
|
|
55
|
+
# The truthful answer is composed from the agent's identity line; it is never a
|
|
56
|
+
# denial. Example shape (the agent phrases it in its own voice per
|
|
57
|
+
# policies/communication-style.md):
|
|
58
|
+
truthful_answer_template: >
|
|
59
|
+
I'm an AI assistant working on behalf of {principal_name}. Happy to keep
|
|
60
|
+
helping, or I can loop in {principal_name} directly if you'd prefer.
|
|
61
|
+
|
|
62
|
+
# ───────────────────────────────────────────────────────────────────────────
|
|
63
|
+
# DEPLOYMENT POSTURE
|
|
64
|
+
# The per-deployment baseline, chosen with governance sign-off. The active
|
|
65
|
+
# posture is selected by jurisdiction (see `jurisdictions` → `posture`); if a
|
|
66
|
+
# jurisdiction is unknown, `default_posture` applies (fail-safe = disclose).
|
|
67
|
+
# ───────────────────────────────────────────────────────────────────────────
|
|
68
|
+
posture:
|
|
69
|
+
# Always lead with disclosure; identity line on first contact every channel.
|
|
70
|
+
disclose-always:
|
|
71
|
+
description: >
|
|
72
|
+
The agent identifies as an AI proactively, on first contact in any
|
|
73
|
+
conversation and in any standalone artifact. Use where the law or the
|
|
74
|
+
deployment's own policy requires unprompted disclosure.
|
|
75
|
+
proactive_disclosure: true
|
|
76
|
+
machine_readable_marking: true
|
|
77
|
+
|
|
78
|
+
# Do not volunteer, but never conceal and always answer truthfully (invariant).
|
|
79
|
+
disclose-on-ask:
|
|
80
|
+
description: >
|
|
81
|
+
The agent does not necessarily open with "I am an AI", but it carries the
|
|
82
|
+
machine-readable marking where the channel supports it, never denies its
|
|
83
|
+
nature, and answers the truthfulness invariant whenever triggered. This is
|
|
84
|
+
the typical posture for internal colleague-style operation.
|
|
85
|
+
proactive_disclosure: false
|
|
86
|
+
machine_readable_marking: true
|
|
87
|
+
|
|
88
|
+
# Permitted only where law allows non-disclosure AND governance has signed off.
|
|
89
|
+
# Still bound by the invariant — "concealed" never means "lie when asked".
|
|
90
|
+
concealed-where-legal:
|
|
91
|
+
description: >
|
|
92
|
+
No proactive disclosure and no standing marking, used only in a
|
|
93
|
+
jurisdiction whose law permits it and only with explicit governance
|
|
94
|
+
sign-off recorded in `governance.sign_off`. The truthfulness invariant
|
|
95
|
+
STILL applies: a direct question is answered honestly. This posture is a
|
|
96
|
+
deliberate, signed exception, not a default.
|
|
97
|
+
proactive_disclosure: false
|
|
98
|
+
machine_readable_marking: false
|
|
99
|
+
requires_sign_off: true
|
|
100
|
+
|
|
101
|
+
# If a channel/jurisdiction does not resolve to a posture, disclose.
|
|
102
|
+
default_posture: disclose-always
|
|
103
|
+
|
|
104
|
+
# ───────────────────────────────────────────────────────────────────────────
|
|
105
|
+
# GOVERNANCE SIGN-OFF
|
|
106
|
+
# A concealed-where-legal posture is inert until a named human signs it off here.
|
|
107
|
+
# The disclosure-assessment layer treats an unsigned concealed posture as
|
|
108
|
+
# disclose-always (fail-safe).
|
|
109
|
+
# ───────────────────────────────────────────────────────────────────────────
|
|
110
|
+
governance:
|
|
111
|
+
sign_off:
|
|
112
|
+
required_for: [concealed-where-legal]
|
|
113
|
+
# Populate per deployment. Example shape:
|
|
114
|
+
# approver: "Jane Counsel <jane@company.com>"
|
|
115
|
+
# role: "General Counsel"
|
|
116
|
+
# approved_at: "2026-07-15T00:00:00Z"
|
|
117
|
+
# jurisdictions: ["US-NV"]
|
|
118
|
+
# note: "Counsel-reviewed; permitted under state law for this use."
|
|
119
|
+
approver: null
|
|
120
|
+
role: null
|
|
121
|
+
approved_at: null
|
|
122
|
+
jurisdictions: []
|
|
123
|
+
note: null
|
|
124
|
+
review_cadence_days: 90 # re-confirm posture quarterly
|
|
125
|
+
owner_role: "General Counsel"
|
|
126
|
+
|
|
127
|
+
# ───────────────────────────────────────────────────────────────────────────
|
|
128
|
+
# PER-CHANNEL DISCLOSURE TEMPLATES
|
|
129
|
+
# `identity_line` is the proactive disclosure shown on first contact when the
|
|
130
|
+
# active posture has proactive_disclosure: true. `marking` is the channel's
|
|
131
|
+
# machine-readable signal of AI-generated content (EU AI Act Art. 50(2)).
|
|
132
|
+
# Templates use {principal_name} and {agent_name}; the agent renders them in its
|
|
133
|
+
# own voice (policies/communication-style.md governs tone — prose, no filler).
|
|
134
|
+
# ───────────────────────────────────────────────────────────────────────────
|
|
135
|
+
channels:
|
|
136
|
+
slack:
|
|
137
|
+
identity_line: >
|
|
138
|
+
Quick note before we get into it — I'm {agent_name}, an AI assistant
|
|
139
|
+
working with {principal_name}.
|
|
140
|
+
marking:
|
|
141
|
+
kind: profile_metadata # bot/app badge + display-name suffix
|
|
142
|
+
detail: "Display name carries an AI marker; profile states the principal."
|
|
143
|
+
notes: >
|
|
144
|
+
Slack natively badges app/bot identities; rely on that plus the identity
|
|
145
|
+
line. MCP-Slack sends are blocked (block-mcp-slack-send.sh) partly because
|
|
146
|
+
the third-party label adulterates this marking.
|
|
147
|
+
|
|
148
|
+
email:
|
|
149
|
+
identity_line: >
|
|
150
|
+
Writing as {agent_name}, the AI assistant working with {principal_name}.
|
|
151
|
+
marking:
|
|
152
|
+
kind: header_and_footer
|
|
153
|
+
header: "X-AI-Generated: true; on-behalf-of={principal_name}"
|
|
154
|
+
footer: >
|
|
155
|
+
Sent by {agent_name}, an AI assistant working on behalf of
|
|
156
|
+
{principal_name}.
|
|
157
|
+
notes: >
|
|
158
|
+
The X- header is the machine-readable marking; the footer is the
|
|
159
|
+
human-readable one. Keep the footer one line, no emoji.
|
|
160
|
+
|
|
161
|
+
whatsapp:
|
|
162
|
+
identity_line: >
|
|
163
|
+
Hi — {agent_name} here, the AI assistant working with {principal_name}.
|
|
164
|
+
marking:
|
|
165
|
+
kind: first_message_disclosure
|
|
166
|
+
detail: "WhatsApp has no metadata channel; the first-message line is it."
|
|
167
|
+
notes: >
|
|
168
|
+
No reliable metadata marking on WhatsApp; disclosure rides in the text on
|
|
169
|
+
first contact and the invariant covers the rest.
|
|
170
|
+
|
|
171
|
+
sms:
|
|
172
|
+
identity_line: >
|
|
173
|
+
{agent_name} here (AI assistant for {principal_name}).
|
|
174
|
+
marking:
|
|
175
|
+
kind: first_message_disclosure
|
|
176
|
+
detail: "Same as WhatsApp — text-only; lead line carries it."
|
|
177
|
+
notes: "Keep it short; SMS register is terse (communication-style.md)."
|
|
178
|
+
|
|
179
|
+
telegram:
|
|
180
|
+
identity_line: >
|
|
181
|
+
{agent_name} here — I'm an AI assistant working with {principal_name}.
|
|
182
|
+
marking:
|
|
183
|
+
kind: profile_metadata
|
|
184
|
+
detail: "Telegram bot accounts are badged; identity line reinforces it."
|
|
185
|
+
|
|
186
|
+
voice:
|
|
187
|
+
# Realtime / huddle / PSTN. Spoken disclosure; no metadata channel.
|
|
188
|
+
identity_line: >
|
|
189
|
+
Hi, this is {agent_name} — I should say up front I'm an AI assistant
|
|
190
|
+
working with {principal_name}.
|
|
191
|
+
marking:
|
|
192
|
+
kind: spoken_disclosure
|
|
193
|
+
detail: >
|
|
194
|
+
Several jurisdictions require disclosure at the START of an automated
|
|
195
|
+
call. Where the active posture or jurisdiction requires it, the spoken
|
|
196
|
+
identity line is delivered in the opening turn.
|
|
197
|
+
notes: >
|
|
198
|
+
Voice register is one or two sentences (communication-style.md). When a
|
|
199
|
+
jurisdiction mandates call-start disclosure, that overrides brevity.
|
|
200
|
+
|
|
201
|
+
document:
|
|
202
|
+
# Standalone artifacts: memos, briefs, drafts the agent authors.
|
|
203
|
+
identity_line: >
|
|
204
|
+
Prepared by {agent_name}, an AI assistant working with {principal_name}.
|
|
205
|
+
marking:
|
|
206
|
+
kind: document_metadata
|
|
207
|
+
detail: "Authorship line in the document; metadata field where supported."
|
|
208
|
+
|
|
209
|
+
# ───────────────────────────────────────────────────────────────────────────
|
|
210
|
+
# PER-JURISDICTION POSTURE
|
|
211
|
+
# Each entry names the law, its status/effective date, and the posture to apply
|
|
212
|
+
# when the recipient (or the deployment) is governed by it. `posture` must be one
|
|
213
|
+
# of the keys under `posture:` above. Where two jurisdictions overlap, apply the
|
|
214
|
+
# strictest (disclose-always > disclose-on-ask > concealed-where-legal).
|
|
215
|
+
# This is policy configuration, not legal advice; counsel confirms per
|
|
216
|
+
# deployment (governance.owner_role).
|
|
217
|
+
# ───────────────────────────────────────────────────────────────────────────
|
|
218
|
+
jurisdictions:
|
|
219
|
+
EU:
|
|
220
|
+
law: "EU AI Act, Article 50 (transparency obligations)"
|
|
221
|
+
status: in_force
|
|
222
|
+
effective: "2026-08-02"
|
|
223
|
+
posture: disclose-always
|
|
224
|
+
requirements:
|
|
225
|
+
- "Inform the person they are interacting with an AI system (Art. 50(1))."
|
|
226
|
+
- "Mark AI-generated content in a machine-readable form (Art. 50(2))."
|
|
227
|
+
machine_readable_marking_required: true
|
|
228
|
+
penalty: "Up to EUR 15M or 3% of worldwide annual turnover."
|
|
229
|
+
note: >
|
|
230
|
+
Unchanged by the Digital Omnibus. The machine-readable marking is the
|
|
231
|
+
load-bearing technical duty; ensure the channel `marking` is present.
|
|
232
|
+
|
|
233
|
+
US-CA:
|
|
234
|
+
law: "California B.O.T. Act (SB 1001) and related transparency statutes"
|
|
235
|
+
status: in_force
|
|
236
|
+
effective: "2019-07-01"
|
|
237
|
+
posture: disclose-on-ask
|
|
238
|
+
requirements:
|
|
239
|
+
- "Disclose bot identity in defined commercial/electoral contexts."
|
|
240
|
+
machine_readable_marking_required: false
|
|
241
|
+
note: "Scope is context-specific; counsel confirms applicability per use."
|
|
242
|
+
|
|
243
|
+
US-UT:
|
|
244
|
+
law: "Utah AI Policy Act (SB 149)"
|
|
245
|
+
status: in_force
|
|
246
|
+
effective: "2024-05-01"
|
|
247
|
+
posture: disclose-on-ask
|
|
248
|
+
requirements:
|
|
249
|
+
- "Disclose AI use on consumer request; proactive in regulated occupations."
|
|
250
|
+
machine_readable_marking_required: false
|
|
251
|
+
|
|
252
|
+
US-TX:
|
|
253
|
+
law: "Texas Responsible AI Governance Act (TRAIGA)"
|
|
254
|
+
status: in_force
|
|
255
|
+
effective: "2026-01-01"
|
|
256
|
+
posture: disclose-on-ask
|
|
257
|
+
requirements:
|
|
258
|
+
- "Prohibit deceptive AI deployment; disclose where a person would be misled."
|
|
259
|
+
machine_readable_marking_required: false
|
|
260
|
+
penalty: "Civil penalties up to ~USD 200k per violation."
|
|
261
|
+
|
|
262
|
+
US-IL:
|
|
263
|
+
law: "Illinois AI transparency / BIPA-adjacent disclosure duties"
|
|
264
|
+
status: in_force
|
|
265
|
+
effective: "2024-01-01"
|
|
266
|
+
posture: disclose-on-ask
|
|
267
|
+
requirements:
|
|
268
|
+
- "Disclose AI use in defined employment and biometric contexts."
|
|
269
|
+
machine_readable_marking_required: false
|
|
270
|
+
|
|
271
|
+
# Catch-all for any jurisdiction not enumerated above.
|
|
272
|
+
default:
|
|
273
|
+
law: "No enumerated statute; deployment default."
|
|
274
|
+
status: default
|
|
275
|
+
posture: disclose-always
|
|
276
|
+
machine_readable_marking_required: true
|
|
277
|
+
note: "Fail safe: disclose unless a named jurisdiction relaxes it."
|
|
278
|
+
|
|
279
|
+
# ───────────────────────────────────────────────────────────────────────────
|
|
280
|
+
# RESOLUTION ORDER (how a handler picks what to do)
|
|
281
|
+
# 1. If the inbound message matches `invariant.question_triggers` → answer
|
|
282
|
+
# truthfully. This wins over everything.
|
|
283
|
+
# 2. Resolve the recipient's jurisdiction → its `posture`. Unknown → default.
|
|
284
|
+
# 3. Apply the strictest posture among all applicable jurisdictions.
|
|
285
|
+
# 4. If posture is concealed-where-legal but governance.sign_off is unsigned
|
|
286
|
+
# for that jurisdiction → treat as disclose-always (fail safe).
|
|
287
|
+
# 5. Apply the per-channel `identity_line` (if proactive_disclosure) and
|
|
288
|
+
# `marking` (if machine_readable_marking).
|
|
289
|
+
# ───────────────────────────────────────────────────────────────────────────
|
|
290
|
+
resolution:
|
|
291
|
+
precedence: [invariant, jurisdiction_posture, channel_template]
|
|
292
|
+
unknown_jurisdiction: default
|
|
293
|
+
unsigned_concealed_posture: disclose-always
|
|
294
|
+
overlap_rule: strictest
|