@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,64 @@
|
|
|
1
|
+
# Agents Observe — Multi-Agent Observability Dashboard
|
|
2
|
+
|
|
3
|
+
Real-time dashboard for monitoring Claude Code agent teams. Captures tool calls, agent hierarchy, and session state via background hooks with SQLite storage.
|
|
4
|
+
|
|
5
|
+
## Why It Matters
|
|
6
|
+
|
|
7
|
+
Maestro agents run parallel backlog execution with multiple subagents. Currently debugging relies on post-hoc JSONL log scanning. Agents Observe provides real-time visibility into:
|
|
8
|
+
|
|
9
|
+
- **Live tool calls** across all active agents
|
|
10
|
+
- **Agent hierarchy trees** showing parent/child relationships
|
|
11
|
+
- **Search and filter** across sessions and tool invocations
|
|
12
|
+
- **WebSocket-streamed UI** with 3-5ms latency
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
### Via install-dev-tools (recommended)
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
./scripts/setup/install-dev-tools.sh --tool agents-observe
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Manual
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# As Claude Code plugin
|
|
26
|
+
claude plugin install agents-observe
|
|
27
|
+
|
|
28
|
+
# Or global npm
|
|
29
|
+
npm install -g agents-observe
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Usage
|
|
33
|
+
|
|
34
|
+
### Start the dashboard
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
agents-observe serve
|
|
38
|
+
# Opens dashboard at http://localhost:3847
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### View active agent sessions
|
|
42
|
+
|
|
43
|
+
Navigate to the dashboard URL. Active sessions appear automatically when Claude Code agents run with the plugin enabled.
|
|
44
|
+
|
|
45
|
+
### Query session history
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
agents-observe query --session <id>
|
|
49
|
+
agents-observe query --tool Write --last 1h
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Integration with Maestro
|
|
53
|
+
|
|
54
|
+
Best used during:
|
|
55
|
+
- **Backlog executor cycles** — monitor parallel agent performance
|
|
56
|
+
- **Debugging agent failures** — trace tool call sequences leading to errors
|
|
57
|
+
- **Performance profiling** — identify slow or redundant tool calls
|
|
58
|
+
|
|
59
|
+
Not recommended as always-on in production (SQLite write overhead). Enable on-demand for debugging and profiling sessions.
|
|
60
|
+
|
|
61
|
+
## Repository
|
|
62
|
+
|
|
63
|
+
- GitHub: https://github.com/simple10/agents-observe
|
|
64
|
+
- License: MIT
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Billing: per-agent Console API keys in capped workspaces
|
|
2
|
+
|
|
3
|
+
Status: **action required by 2026-06-15** — verify against the current Anthropic
|
|
4
|
+
support article before acting (see step 0). This guide is the Phase-0 (item 0.1)
|
|
5
|
+
operator runbook pulled forward from Router Phase 1 of the enterprise roadmap.
|
|
6
|
+
|
|
7
|
+
## Why this exists
|
|
8
|
+
|
|
9
|
+
A maestro fleet runs one headless Claude Code instance per agent. Two billing
|
|
10
|
+
rails are possible today (`.env.example`):
|
|
11
|
+
|
|
12
|
+
- **API key** — `ANTHROPIC_API_KEY` set; pay-per-token, billed to the org's
|
|
13
|
+
Console account.
|
|
14
|
+
- **Subscription OAuth** — `MAESTRO_PREFER_SUBSCRIPTION_AUTH=1` with the key left
|
|
15
|
+
empty; each Mac mini's Claude Code Pro/Max seat authorizes its sessions via the
|
|
16
|
+
Keychain OAuth token.
|
|
17
|
+
|
|
18
|
+
The subscription rail is attractive at a few agents but does not scale to a
|
|
19
|
+
40–60-agent fleet: it ties spend to per-seat plans with no per-agent ceiling, no
|
|
20
|
+
central spend visibility, and no programmatic budget enforcement — and an
|
|
21
|
+
Anthropic Agent-SDK credit change (the "June 15 cutover") removes its economic
|
|
22
|
+
advantage for headless traffic. The enterprise rail is **per-agent Console API
|
|
23
|
+
keys, each scoped to a workspace with a hard spend cap**, which gives the org a
|
|
24
|
+
spend ceiling per agent that survives local-state corruption or a budget-guard
|
|
25
|
+
bug, plus a single place (the Admin Cost API) to reconcile fleet spend.
|
|
26
|
+
|
|
27
|
+
## Step 0 — verify the cutover (do this first)
|
|
28
|
+
|
|
29
|
+
The exact terms and date of the Agent-SDK credit change are sourced from a single
|
|
30
|
+
Anthropic support article and must be re-confirmed before you migrate:
|
|
31
|
+
<https://support.anthropic.com/> (search "Agent SDK credits" / "Claude Code
|
|
32
|
+
billing"). If the article's terms differ from the assumptions here, adjust the
|
|
33
|
+
plan — do not migrate blind. Record what you confirmed and when.
|
|
34
|
+
|
|
35
|
+
## Step 1 — workspaces with spend caps (Console, human-only)
|
|
36
|
+
|
|
37
|
+
In the Anthropic Console (<https://console.anthropic.com/>), for each agent (or
|
|
38
|
+
each cost-center grouping of agents):
|
|
39
|
+
|
|
40
|
+
1. Create a **workspace** named for the agent or team.
|
|
41
|
+
2. Set a **monthly spend limit** on the workspace (this is the hard ceiling that
|
|
42
|
+
does not depend on any maestro-side guard).
|
|
43
|
+
3. Create an **API key inside that workspace** — this key's usage counts against
|
|
44
|
+
the workspace cap.
|
|
45
|
+
|
|
46
|
+
Keep a separate, low-cap **break-glass workspace** holding each agent's
|
|
47
|
+
terminal-fallback key (≈$25/day), so the safety-net path can never run away.
|
|
48
|
+
|
|
49
|
+
## Step 2 — put the key on the agent's Mac mini
|
|
50
|
+
|
|
51
|
+
On each agent machine, set the workspace key and turn the subscription rail off:
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
# ~/<agent>-ai/.env
|
|
55
|
+
ANTHROPIC_API_KEY=sk-ant-api03-<this-agent's-workspace-key>
|
|
56
|
+
# remove or unset the subscription preference:
|
|
57
|
+
# MAESTRO_PREFER_SUBSCRIPTION_AUTH=
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
`.env` must be `chmod 600` (doctor enforces this — see roadmap item 0.11). Never
|
|
61
|
+
commit keys; never reuse one workspace key across agents (per-agent keys are what
|
|
62
|
+
make per-agent spend attribution and revocation possible).
|
|
63
|
+
|
|
64
|
+
## Step 3 — verify
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
maestro doctor # validates ANTHROPIC_API_KEY against api.anthropic.com
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
After the cost-telemetry work (roadmap item 0.3) lands, `maestro doctor` also
|
|
71
|
+
turns RED when sessions have run but recorded spend is $0, and a nightly digest
|
|
72
|
+
reconciles the local ledger against the Admin Cost API. Until then, confirm spend
|
|
73
|
+
is accruing in the Console workspace view for a canary agent.
|
|
74
|
+
|
|
75
|
+
## What is automated vs human
|
|
76
|
+
|
|
77
|
+
maestro cannot create Console workspaces or keys for you — that requires a human
|
|
78
|
+
with Console access (steps 0–1). maestro's side of this rail is: reading
|
|
79
|
+
`ANTHROPIC_API_KEY` per agent (already wired), the doctor key/`.env`-mode checks,
|
|
80
|
+
and the cost ledger + reconcile that make the workspace caps observable. Those
|
|
81
|
+
land in Router Phases 1–4; this runbook is the credential rail they sit on.
|
|
82
|
+
|
|
83
|
+
## Related
|
|
84
|
+
|
|
85
|
+
- `docs/guides/model-routing.md` — how sessions choose a backend.
|
|
86
|
+
- `docs/audit/2026-06-10-enterprise/synthesis/SPEC-llm-router.md` — full router
|
|
87
|
+
spec; §11 Phase 1 covers billing, ledger v2, and the break-glass workspace.
|
|
88
|
+
- `docs/audit/2026-06-10-enterprise/synthesis/ROADMAP.md` — item 0.1 and WS-R.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# ccxray Diagnostics Guide
|
|
2
|
+
|
|
3
|
+
ccxray provides X-ray vision into Claude Code sessions via a transparent HTTP proxy and live dashboard. It intercepts all API calls between Claude Code and Anthropic, giving you detailed token/cost analysis, timing breakdowns, and system prompt visibility.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- Debugging expensive sessions (high token burn, unexpectedly long runs)
|
|
8
|
+
- Understanding which tool calls consumed the most tokens
|
|
9
|
+
- Comparing system prompts across main agent and sub-agents
|
|
10
|
+
- Investigating context window utilisation and heatmaps
|
|
11
|
+
- Post-incident analysis of failed or timed-out sessions
|
|
12
|
+
|
|
13
|
+
## What It Shows
|
|
14
|
+
|
|
15
|
+
- Real-time timeline of agent turns with thinking durations
|
|
16
|
+
- Per-turn token and cost breakdown with burn rate tracking
|
|
17
|
+
- Context window heatmaps showing what's consuming space
|
|
18
|
+
- System prompt diffs across main agent and sub-agents
|
|
19
|
+
- Multi-project hub: multiple terminals share one dashboard
|
|
20
|
+
- Full JSON logging of every request/response to `~/.ccxray/logs/`
|
|
21
|
+
|
|
22
|
+
## Technical Details
|
|
23
|
+
|
|
24
|
+
- Zero-config transparent HTTP proxy
|
|
25
|
+
- Launches Claude Code through the proxy automatically
|
|
26
|
+
- Web dashboard for live monitoring
|
|
27
|
+
- JSON log files for post-hoc analysis
|
|
28
|
+
- npx-based — no permanent installation required
|
|
29
|
+
|
|
30
|
+
## Usage
|
|
31
|
+
|
|
32
|
+
### Quick start
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Launch Claude Code through the ccxray proxy
|
|
36
|
+
npx ccxray claude
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
This starts the proxy, opens the dashboard, and launches Claude Code. All API traffic flows through ccxray for inspection.
|
|
40
|
+
|
|
41
|
+
### With an existing session
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Start the proxy on a specific port
|
|
45
|
+
npx ccxray --port 8080
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Viewing logs
|
|
49
|
+
|
|
50
|
+
Logs are stored at `~/.ccxray/logs/` as JSON files, one per session. These can be analysed post-hoc for cost attribution.
|
|
51
|
+
|
|
52
|
+
## Repository
|
|
53
|
+
|
|
54
|
+
- GitHub: https://github.com/lis186/ccxray
|
|
55
|
+
- License: MIT
|
|
56
|
+
|
|
57
|
+
## Integration with Maestro
|
|
58
|
+
|
|
59
|
+
ccxray is a diagnostic tool, not a runtime dependency. It is not installed by default via `init-agent.sh` but is available on-demand via npx.
|
|
60
|
+
|
|
61
|
+
Use cases for Maestro operators:
|
|
62
|
+
- **Token budget audit**: Run a backlog cycle through ccxray to see per-task token costs
|
|
63
|
+
- **Sub-agent analysis**: Compare token usage across spawned background agents
|
|
64
|
+
- **Prompt debugging**: Inspect what system prompts sub-agents actually receive
|
|
65
|
+
- **Cost optimisation**: Identify which tool calls are disproportionately expensive
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Channel bus — unified Slack / Gmail / WhatsApp / SMS / Voice abstraction
|
|
2
|
+
|
|
3
|
+
The channel bus lets every communication channel speak through one
|
|
4
|
+
interface. It's **additive** — existing pollers and senders continue to
|
|
5
|
+
work; the bus sits alongside them and is the recommended entry point
|
|
6
|
+
for new channels (voice, future iMessage/Telegram/Discord plugins).
|
|
7
|
+
|
|
8
|
+
## When to use it
|
|
9
|
+
|
|
10
|
+
- You want to send to channel X but don't want to hard-code which
|
|
11
|
+
script handles channel X.
|
|
12
|
+
- You're adding a new channel and need it to slot into the existing
|
|
13
|
+
inbox / classifier / dispatcher flow without modifying them.
|
|
14
|
+
- You need cross-channel conversation tracking — e.g. a Gmail thread
|
|
15
|
+
and a Slack DM that are really the same conversation should share
|
|
16
|
+
a session lock.
|
|
17
|
+
|
|
18
|
+
## Pieces
|
|
19
|
+
|
|
20
|
+
| File | Role |
|
|
21
|
+
|------|------|
|
|
22
|
+
| `lib/channels/channel.mjs` | Interface definition + capability constants |
|
|
23
|
+
| `lib/channels/conversation-resolver.mjs` | Pure mapper from inbound message → conversation key |
|
|
24
|
+
| `lib/channels/registry.mjs` | In-process channel registry |
|
|
25
|
+
| `lib/channels/<service>/adapter.mjs` | Concrete adapter per channel |
|
|
26
|
+
| `lib/channels/index.mjs` | `createChannel(name, opts)` lazy factory |
|
|
27
|
+
|
|
28
|
+
## The Channel interface
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
interface Channel {
|
|
32
|
+
name: string;
|
|
33
|
+
capabilities: CHANNEL_CAPABILITIES[];
|
|
34
|
+
start(opts: { onInbound: (msg: ChannelMessage) => void, signal?: AbortSignal }): Promise<void>;
|
|
35
|
+
send(msg: OutboundMessage): Promise<{ message_id: string }>;
|
|
36
|
+
react?(opts: { messageRef: string, emoji: string }): Promise<void>;
|
|
37
|
+
fetchAttachment?(opts: { url: string }): Promise<Buffer>;
|
|
38
|
+
healthCheck(): Promise<{ ok: boolean, detail?: string }>;
|
|
39
|
+
stop(): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Capabilities are advertised so callers can ask, "which channel can
|
|
44
|
+
send a voice note?" via
|
|
45
|
+
`findChannelsWithCapability(CHANNEL_CAPABILITIES.VOICE_NOTE)`.
|
|
46
|
+
|
|
47
|
+
## Adapters today
|
|
48
|
+
|
|
49
|
+
| Channel | Adapter | Transport options |
|
|
50
|
+
|---------|---------|--------------------|
|
|
51
|
+
| Slack | `lib/channels/slack/adapter.mjs` | Socket Mode (reactions, thread context, opt-in channel CC) + state/inbox/slack/ |
|
|
52
|
+
| Gmail | `lib/channels/gmail/adapter.mjs` | Wraps `scripts/send-email.sh` + threaded Python helper |
|
|
53
|
+
| WhatsApp| `lib/channels/whatsapp/adapter-twilio.mjs` | Twilio API (production) |
|
|
54
|
+
| | `lib/channels/whatsapp/adapter-baileys.mjs` | Baileys / WhatsApp Web (personal, full media) |
|
|
55
|
+
| SMS | `lib/channels/sms/adapter.mjs` | Twilio |
|
|
56
|
+
| Voice | `lib/channels/voice/adapter.mjs` | OpenAI Realtime + Twilio SIP |
|
|
57
|
+
| Telegram| `lib/channels/telegram/adapter.mjs` | grammY long-poll, **in-daemon** (no relay/tunnel); gated by `config/telegram.yaml` |
|
|
58
|
+
|
|
59
|
+
**WS2 unified contract.** Every adapter now speaks one type — `MessageEvent`
|
|
60
|
+
(`lib/channels/contract.mjs`, with `kind = message|reaction|channel_cc|
|
|
61
|
+
voice_note|call`, `source`, and `thread_context`) — serialized to/from the
|
|
62
|
+
legacy poller inbox-item by `lib/channels/inbox-item.mjs`, so the daemon,
|
|
63
|
+
classifier, and dispatcher are unchanged. Cross-cutting logic (session-keying,
|
|
64
|
+
concurrency guard, typing heartbeat, and **default-deny DM pairing/allowlist**
|
|
65
|
+
via `lib/channels/pairing.mjs` + `config/allowlist.yaml`) lives in
|
|
66
|
+
`lib/channels/base-adapter.mjs`; a concrete adapter implements only
|
|
67
|
+
`_connect/_toEvent/_send/_react/_setTyping`.
|
|
68
|
+
|
|
69
|
+
Future plugins: Discord, iMessage, Matrix, Signal — drop in
|
|
70
|
+
`lib/channels/<service>/adapter.mjs` extending `BaseAdapter` and
|
|
71
|
+
register it via `definePlatform(...)`.
|
|
72
|
+
|
|
73
|
+
## Conversation resolver
|
|
74
|
+
|
|
75
|
+
`resolveConversation(msg)` returns `{ channel, sessionKey, threadId,
|
|
76
|
+
peerId }`. The `sessionKey` is the canonical handle the daemon's
|
|
77
|
+
session-lock layer uses to deduplicate concurrent work on the same
|
|
78
|
+
conversation. Resolution per channel:
|
|
79
|
+
|
|
80
|
+
| Channel | threadId |
|
|
81
|
+
|---------|----------|
|
|
82
|
+
| Slack | `thread_ts` if present, else `dm:<channel_id>` |
|
|
83
|
+
| Gmail | `thread_id` → `in_reply_to` → `message_id` |
|
|
84
|
+
| WhatsApp| `thread_id` → `in_reply_to` → `peer:<phone>` |
|
|
85
|
+
| SMS | `peer:<phone>` |
|
|
86
|
+
| Voice | `call:<call_id>` |
|
|
87
|
+
| Calendar| `event:<event_id>` |
|
|
88
|
+
|
|
89
|
+
## Code example
|
|
90
|
+
|
|
91
|
+
```js
|
|
92
|
+
import { createChannel, registerChannel, startAllChannels } from "@cohortapp/agent-sdk/channels";
|
|
93
|
+
|
|
94
|
+
const slack = await createChannel("slack");
|
|
95
|
+
const gmail = await createChannel("gmail");
|
|
96
|
+
const wa = await createChannel("whatsapp-baileys", { agentRoot: process.env.AGENT_DIR });
|
|
97
|
+
|
|
98
|
+
registerChannel("slack", slack);
|
|
99
|
+
registerChannel("gmail", gmail);
|
|
100
|
+
registerChannel("whatsapp", wa);
|
|
101
|
+
|
|
102
|
+
const stopAll = await startAllChannels((msg) => {
|
|
103
|
+
// msg is a ChannelMessage — normalise + push into the cadence bus
|
|
104
|
+
enqueueInbox(msg);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Sending — uniform across channels:
|
|
108
|
+
await wa.send({ to: "+1555...", text: "Alex, your 2pm is moved to 4pm." });
|
|
109
|
+
await slack.send({ to: "D099...", text: "Standup at 11.", thread_ref: "1700.100" });
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Roadmap
|
|
113
|
+
|
|
114
|
+
- `scripts/daemon/channel-bus.mjs` worker that mounts every registered
|
|
115
|
+
channel's inbound listener and routes through cadence-bus instead of
|
|
116
|
+
state/inbox/<service>/ files. Backward-compatible: existing pollers
|
|
117
|
+
keep working; the bus is an additional path.
|
|
118
|
+
- Channel-level rate limits and circuit breakers in the registry.
|
|
119
|
+
- Conversation merging across channels (Slack ↔ Gmail) via fuzzy peer
|
|
120
|
+
identification (email ↔ Slack user_id ↔ phone).
|
|
121
|
+
|
|
122
|
+
## See also
|
|
123
|
+
|
|
124
|
+
- `lib/channels/channel.mjs` — interface
|
|
125
|
+
- `lib/channels/channels.test.mjs` — behaviour reference
|
|
126
|
+
- `scripts/setup/init-channel-bus.mjs` — wizard
|
|
127
|
+
- `docs/guides/voice-mode.md` — voice channel deep-dive
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Claude-Mem Setup Guide
|
|
2
|
+
|
|
3
|
+
Claude-Mem is a persistent session memory plugin for Claude Code. It automatically captures tool usage, generates semantic summaries, and injects relevant context into future sessions — giving your agent continuity of knowledge across session boundaries.
|
|
4
|
+
|
|
5
|
+
## What Claude-Mem Does
|
|
6
|
+
|
|
7
|
+
- **Automatic capture**: 6 lifecycle hooks (SessionStart, UserPromptSubmit, PostToolUse, Stop, SessionEnd, PreCompact) record agent activity without manual intervention
|
|
8
|
+
- **AI-powered compression**: Captured actions are summarised via Claude's agent-sdk into semantic memory
|
|
9
|
+
- **Vector search**: Relevant past context is retrieved and injected at session start using Chroma vector search
|
|
10
|
+
- **Local storage**: All data stays on-machine in `~/.claude-mem/` (SQLite + Chroma)
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
### Via init-agent (recommended)
|
|
15
|
+
|
|
16
|
+
If you ran `scripts/setup/init-agent.sh`, Claude-Mem was installed automatically. Verify:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npx claude-mem status
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Manual installation
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npx claude-mem install
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
This registers the plugin hooks and starts the worker service (port 37777).
|
|
29
|
+
|
|
30
|
+
### Via Claude Code plugin commands
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
claude plugin marketplace add thedotmack/claude-mem
|
|
34
|
+
claude plugin install claude-mem
|
|
35
|
+
# Restart Claude Code
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Configuration
|
|
39
|
+
|
|
40
|
+
Settings live at `~/.claude-mem/settings.json` (auto-created with defaults on first run):
|
|
41
|
+
|
|
42
|
+
- **AI model**: Which model compresses captured data
|
|
43
|
+
- **Worker port**: Default 37777
|
|
44
|
+
- **Data directory**: Where SQLite and vector indices are stored
|
|
45
|
+
- **Context injection**: How much past context to inject per session
|
|
46
|
+
- **Log level**: Verbosity of worker logs
|
|
47
|
+
|
|
48
|
+
## Verification
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# Check worker is running
|
|
52
|
+
npx claude-mem status
|
|
53
|
+
|
|
54
|
+
# View captured sessions
|
|
55
|
+
npx claude-mem sessions list
|
|
56
|
+
|
|
57
|
+
# View memory stats
|
|
58
|
+
npx claude-mem stats
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## How It Complements Maestro's Memory
|
|
62
|
+
|
|
63
|
+
Maestro already has:
|
|
64
|
+
- **Interaction memory** (`memory/interactions/`) — conversation transcripts by channel/date
|
|
65
|
+
- **User profiles** (`memory/profiles/`) — per-person preferences and standing instructions
|
|
66
|
+
- **Knowledge base** (`knowledge/`) — entities, decisions, syntheses
|
|
67
|
+
|
|
68
|
+
Claude-Mem adds:
|
|
69
|
+
- **Session-level recall** — what tools were used, what worked, what failed
|
|
70
|
+
- **Semantic search across sessions** — find past sessions where similar tasks were done
|
|
71
|
+
- **Automatic context injection** — no manual "read the last session" needed
|
|
72
|
+
|
|
73
|
+
Together they provide comprehensive memory: Maestro handles *what was communicated*, Claude-Mem handles *what was done*.
|
|
74
|
+
|
|
75
|
+
## Troubleshooting
|
|
76
|
+
|
|
77
|
+
- **Worker not starting**: Check `~/.claude-mem/logs/` for errors. Ensure port 37777 is free.
|
|
78
|
+
- **No context injected**: Verify hooks are registered: check `~/.claude/settings.json` for claude-mem entries
|
|
79
|
+
- **High memory usage**: Claude-Mem's Chroma index grows over time. Run `npx claude-mem compact` to optimise.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Claude-Pace Setup Guide
|
|
2
|
+
|
|
3
|
+
Claude-Pace is a real-time rate limit tracker for Claude Code. It displays a status line showing your 5-hour and 7-day quota usage, reset countdowns, and a pace delta indicator (green = headroom, red = burning too fast).
|
|
4
|
+
|
|
5
|
+
## Why It Matters
|
|
6
|
+
|
|
7
|
+
Maestro agents run continuously on 10-minute backlog cycles. Without rate limit visibility, sessions hit quota walls mid-task — the backlog executor stalls, scheduled workflows fail silently, and recovery requires manual intervention. Claude-Pace makes quota state visible so agents (and operators) can pace work intelligently.
|
|
8
|
+
|
|
9
|
+
## What It Shows
|
|
10
|
+
|
|
11
|
+
- 5-hour and 7-day quota usage percentages
|
|
12
|
+
- Reset countdown timers
|
|
13
|
+
- Pace delta: whether current burn rate will exhaust quota before reset
|
|
14
|
+
- Current model, effort level, git branch, diff stats
|
|
15
|
+
|
|
16
|
+
## Technical Details
|
|
17
|
+
|
|
18
|
+
- Pure Bash + jq — no npm, no Node, no network calls
|
|
19
|
+
- ~10ms runtime per status line refresh
|
|
20
|
+
- Single file: `claude-pace.sh`
|
|
21
|
+
- Reads Claude Code's local quota cache
|
|
22
|
+
|
|
23
|
+
## Installation
|
|
24
|
+
|
|
25
|
+
### Via init-agent (recommended)
|
|
26
|
+
|
|
27
|
+
If you ran `scripts/setup/init-agent.sh`, Claude-Pace was installed automatically. Verify:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# Check if the plugin is installed
|
|
31
|
+
claude plugin list | grep claude-pace
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Via Claude Code plugin system
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
claude plugin marketplace add Astro-Han/claude-pace
|
|
38
|
+
claude plugin install claude-pace
|
|
39
|
+
# Restart Claude Code or run /reload-plugins
|
|
40
|
+
claude-pace:setup
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Manual installation
|
|
44
|
+
|
|
45
|
+
Download `claude-pace.sh` from the repository and add to `~/.claude/settings.json` under `statusLine`.
|
|
46
|
+
|
|
47
|
+
## Repository
|
|
48
|
+
|
|
49
|
+
- GitHub: https://github.com/Astro-Han/claude-pace
|
|
50
|
+
- License: MIT
|
|
51
|
+
|
|
52
|
+
## Integration with Maestro
|
|
53
|
+
|
|
54
|
+
Claude-Pace complements Maestro's existing rate-limit detection (see `project_rate_limit_detection` memory). While Maestro detects rate limits reactively via workflow log analysis ("started" without "completed"), Claude-Pace provides proactive visibility — operators see quota state before it becomes a problem.
|
|
55
|
+
|
|
56
|
+
For agents running heavy backlog cycles, the pace delta indicator is the key signal: if it's red, defer non-urgent queue items to the next cycle rather than risk a mid-task stall.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Claudraband Persistent Sessions Guide
|
|
2
|
+
|
|
3
|
+
Claudraband wraps Claude Code to add persistent sessions, daemon mode with an HTTP API, and programmatic session control. It turns Claude Code from an interactive TUI into a controllable backend service.
|
|
4
|
+
|
|
5
|
+
## Why It Matters
|
|
6
|
+
|
|
7
|
+
Maestro agents spawn background sessions via `scripts/spawn-session.sh` for complex tasks. The current spawner uses `claude -p` with a timeout — fire-and-forget, no resumption, no mid-flight control. Claudraband adds:
|
|
8
|
+
|
|
9
|
+
- **Persistent sessions**: Run headless, disconnect, reconnect later
|
|
10
|
+
- **Daemon mode**: HTTP API for spawning and managing sessions programmatically
|
|
11
|
+
- **Prompt injection**: Send follow-up prompts to running sessions without restarting
|
|
12
|
+
- **Session lifecycle management**: List, pause, resume, and terminate sessions
|
|
13
|
+
|
|
14
|
+
This is particularly valuable for the backlog executor pattern, where long-running tasks may need mid-flight adjustments.
|
|
15
|
+
|
|
16
|
+
## Technical Details
|
|
17
|
+
|
|
18
|
+
- TypeScript wrapper around Claude Code
|
|
19
|
+
- HTTP API in daemon mode (default port 7842)
|
|
20
|
+
- ACP server for editor integration
|
|
21
|
+
- Exposes a TypeScript library for custom tooling
|
|
22
|
+
- npx-based — zero permanent installation
|
|
23
|
+
|
|
24
|
+
## Installation
|
|
25
|
+
|
|
26
|
+
### Via init-agent (recommended)
|
|
27
|
+
|
|
28
|
+
If you ran `scripts/setup/init-agent.sh`, claudraband is pre-installed globally. Verify:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npx @halfwhey/claudraband --version
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Manual
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# One-shot usage
|
|
38
|
+
npx @halfwhey/claudraband "your prompt here"
|
|
39
|
+
|
|
40
|
+
# Start daemon
|
|
41
|
+
npx @halfwhey/claudraband serve --port 7842
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Usage Patterns
|
|
45
|
+
|
|
46
|
+
### Daemon mode (recommended for Maestro)
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Start the daemon
|
|
50
|
+
npx @halfwhey/claudraband serve --port 7842
|
|
51
|
+
|
|
52
|
+
# Create a session
|
|
53
|
+
curl -X POST http://localhost:7842/sessions \
|
|
54
|
+
-H "Content-Type: application/json" \
|
|
55
|
+
-d '{"prompt": "Research competitor X and write a brief"}'
|
|
56
|
+
|
|
57
|
+
# List active sessions
|
|
58
|
+
curl http://localhost:7842/sessions
|
|
59
|
+
|
|
60
|
+
# Inject a follow-up prompt
|
|
61
|
+
npx @halfwhey/claudraband prompt --session <id> "also check their latest SEC filing"
|
|
62
|
+
|
|
63
|
+
# Terminate a session
|
|
64
|
+
curl -X DELETE http://localhost:7842/sessions/<id>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Direct usage (quick tasks)
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npx @halfwhey/claudraband "Draft an email to the board about Q1 results"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Integration with spawn-session.sh
|
|
74
|
+
|
|
75
|
+
`scripts/spawn-session.sh` supports an optional `MAESTRO_SESSION_BACKEND` environment variable:
|
|
76
|
+
|
|
77
|
+
- `MAESTRO_SESSION_BACKEND=claude` (default) — uses `claude -p` directly
|
|
78
|
+
- `MAESTRO_SESSION_BACKEND=claudraband` — uses claudraband for persistent, resumable sessions
|
|
79
|
+
|
|
80
|
+
When using the claudraband backend, sessions are registered with the daemon and can be listed, inspected, and controlled via the HTTP API.
|
|
81
|
+
|
|
82
|
+
## Repository
|
|
83
|
+
|
|
84
|
+
- GitHub: https://github.com/halfwhey/claudraband
|
|
85
|
+
- License: MIT
|
|
86
|
+
|
|
87
|
+
## Integration with Maestro
|
|
88
|
+
|
|
89
|
+
Claudraband is installed as an optional session backend. The default behaviour (`claude -p`) is unchanged. To enable claudraband:
|
|
90
|
+
|
|
91
|
+
1. Set `MAESTRO_SESSION_BACKEND=claudraband` in your `.env`
|
|
92
|
+
2. Ensure the claudraband daemon is running (started automatically by launchd if configured via init-agent)
|
|
93
|
+
3. Sessions spawned by the backlog executor will use claudraband automatically
|
|
94
|
+
|
|
95
|
+
Benefits for the backlog executor:
|
|
96
|
+
- **Resumable tasks**: If a session times out, it can be resumed rather than restarted
|
|
97
|
+
- **Mid-flight control**: The orchestrator can inject follow-up prompts into running sessions
|
|
98
|
+
- **Session inventory**: HTTP API provides visibility into all active sessions
|