@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,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: brand-steward
|
|
3
|
+
description: Work the org's Design section — read the brand foundation and voice, rewrite copy in that voice, render and export templates and the brand kit, regenerate stale imagery within a budget, and propose reviewable foundation changes. Use before writing anything the workspace publishes, to produce a branded asset, or when imagery/templates have gone stale.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Brand Steward
|
|
7
|
+
|
|
8
|
+
The product section is called **Design**; the wire family is `branding.*`. That
|
|
9
|
+
split is deliberate — do not "fix" it.
|
|
10
|
+
|
|
11
|
+
The workspace's brand is a versioned document. Reads are cheap. The producers
|
|
12
|
+
(render, rewrite, export, image generation) cost real money and return what they
|
|
13
|
+
spent. Foundation mutations are always human-gated: your lane is
|
|
14
|
+
`design_propose_change`, which stages a reviewable diff and writes nothing.
|
|
15
|
+
|
|
16
|
+
All of it is `executeOrgTool`; frames are fail-open.
|
|
17
|
+
|
|
18
|
+
## Read before you write
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
node --input-type=module -e '
|
|
22
|
+
import { executeOrgTool } from "./lib/org/tool-surface.mjs";
|
|
23
|
+
const v = await executeOrgTool("design_voice", {});
|
|
24
|
+
console.log(v.ok ? JSON.stringify(v.result, null, 2) : v.error);
|
|
25
|
+
'
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
- `design_voice` — the voice statement, the trait pills that are ON, the
|
|
29
|
+
SAY/AVOID lexicon, and worked in-practice examples. **Read this before drafting
|
|
30
|
+
anything the workspace publishes.** It composes with
|
|
31
|
+
`policies/communication-style.md`, which still governs the mechanics of your
|
|
32
|
+
prose; voice tells you the register, the style policy tells you what is banned.
|
|
33
|
+
- `design_foundation` — typography, colour, scale, archetype, principles, plus
|
|
34
|
+
the version-history head. `historyLimit: 0` suppresses the history block;
|
|
35
|
+
`versionId` reads a historical snapshot.
|
|
36
|
+
- `design_list_templates` — the gallery with each template's status chip. `STALE`
|
|
37
|
+
means the foundation moved underneath it.
|
|
38
|
+
|
|
39
|
+
## Producing things (these cost money)
|
|
40
|
+
|
|
41
|
+
Every producer takes `budgetCents`, clamped server-side to a hard per-run
|
|
42
|
+
ceiling, and returns what it actually spent. Report the spend, every time.
|
|
43
|
+
|
|
44
|
+
- `design_rewrite_in_voice` — rewrite one sentence in the brand voice. It
|
|
45
|
+
produces copy; it sends nothing. Whatever you do with the result is screened at
|
|
46
|
+
the send verb, as normal.
|
|
47
|
+
- `design_render_template` — HTML for any template, PNG for `GENERATED` ones.
|
|
48
|
+
- `design_export_kit` — tokens (`px` | `rem` | `em`), voice, and the mark bytes
|
|
49
|
+
unless `includeMarks: false`.
|
|
50
|
+
- `design_generate_image` — regenerate canonical image slots.
|
|
51
|
+
|
|
52
|
+
**Quote before you spend.** `budgetCents: 0` on `design_generate_image` is the
|
|
53
|
+
QUOTE call: it generates nothing, spends nothing, and still returns every slot's
|
|
54
|
+
price and staleness. Omitting `slots` regenerates every STALE slot — never a
|
|
55
|
+
silent full re-run, but still the expensive path. Quote, report the number, then
|
|
56
|
+
spend.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
node --input-type=module -e '
|
|
60
|
+
import { executeOrgTool } from "./lib/org/tool-surface.mjs";
|
|
61
|
+
const quote = await executeOrgTool("design_generate_image", { budgetCents: 0 });
|
|
62
|
+
if (!quote.ok) { console.log(quote.error); process.exit(0); }
|
|
63
|
+
const stale = (quote.result.slots ?? []).filter((s) => s.stale);
|
|
64
|
+
console.log(`${stale.length} stale slot(s), ${stale.reduce((n, s) => n + (s.priceCents ?? 0), 0)}c to refresh`);
|
|
65
|
+
'
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Proposing a foundation change
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
node --input-type=module -e '
|
|
72
|
+
import { executeOrgTool } from "./lib/org/tool-surface.mjs";
|
|
73
|
+
const head = await executeOrgTool("design_foundation", { historyLimit: 1 });
|
|
74
|
+
const res = await executeOrgTool("design_propose_change", {
|
|
75
|
+
patch: { fonts: { display: "Söhne", body: "Söhne", mono: "Söhne Mono" } },
|
|
76
|
+
note: "Unify the display and body face",
|
|
77
|
+
rationale: "Two faces at the same optical size read as an accident on the pricing page.",
|
|
78
|
+
expectedVersionId: head.ok ? head.result.headVersionId : undefined,
|
|
79
|
+
});
|
|
80
|
+
console.log(res.ok ? res.result : res.error);
|
|
81
|
+
'
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Two things will bite you:
|
|
85
|
+
|
|
86
|
+
1. **Blocks are replaced wholesale.** Send the *complete* block — the whole
|
|
87
|
+
`fonts` object, the whole `colors` array. A partial block is a silent
|
|
88
|
+
half-write that drops every key you left out.
|
|
89
|
+
2. **Pass `expectedVersionId`** from `design_foundation`. A proposal computed
|
|
90
|
+
against a head that has since moved is refused rather than staged against
|
|
91
|
+
stale ground.
|
|
92
|
+
|
|
93
|
+
The proposal writes nothing. A human applies it, and their note becomes the
|
|
94
|
+
version label.
|
|
95
|
+
|
|
96
|
+
## Human-only, by design
|
|
97
|
+
|
|
98
|
+
`branding.saveFoundation` and `branding.restoreFoundation` are `admin` scope — an
|
|
99
|
+
ordinary agent seat cannot reach them, and that is the point. When the foundation
|
|
100
|
+
genuinely needs to move, stage the diff and put it in front of the human with the
|
|
101
|
+
rationale you would give in review.
|
|
102
|
+
|
|
103
|
+
## The long tail via `org_rpc`
|
|
104
|
+
|
|
105
|
+
`branding.listVersions` and `branding.exportTemplate` (both `org.read`), plus the
|
|
106
|
+
admin Brand Studio surface: `branding.regenerate`, `branding.regenerateTemplates`,
|
|
107
|
+
`branding.regenerateTemplate`, `branding.regenerateImages`, `branding.uploadImage`,
|
|
108
|
+
`branding.amendArtifact`, `branding.amendTemplate`, `branding.cloneTemplate`,
|
|
109
|
+
`branding.deleteTemplate`, `branding.restoreVersion`, `branding.undo`,
|
|
110
|
+
`branding.redo`.
|
|
111
|
+
|
|
112
|
+
## Rules of the desk
|
|
113
|
+
|
|
114
|
+
- Voice first. Never draft published copy before reading `design_voice`;
|
|
115
|
+
`policies/communication-style.md` still governs the prose mechanics on top.
|
|
116
|
+
- Quote, then spend, then report the cost in cents. An unreported spend is a
|
|
117
|
+
surprise on someone's invoice.
|
|
118
|
+
- Stale is a fact, not a verdict — say which slots and templates are stale and
|
|
119
|
+
what refreshing them costs; let the human choose.
|
|
120
|
+
- Propose foundation changes with a rationale a reviewer can act on. "Looks
|
|
121
|
+
better" is not one.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: calendar-plan
|
|
3
|
+
description: Plan and manage workspace calendar events — scan attendees' calendars for a free slot deterministically, create typed events with real invites, answer your own invites, and reschedule with everyone notified. Use when asked to find a time, set up a meeting or focus block, respond to an invite, or move an event.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Calendar Planning
|
|
7
|
+
|
|
8
|
+
The workspace calendar is a governed surface: events are typed
|
|
9
|
+
(`MEETING / REVIEW / FOCUS / AGENT_BLOCK / ALL_HANDS / HOLD`), invites queue REAL
|
|
10
|
+
emails, an optional `channelId` posts the invite note as a real channel message, and
|
|
11
|
+
guardian reshapes are logged. Agent seats answer their own invites and COMMIT.
|
|
12
|
+
|
|
13
|
+
All of it is `executeOrgTool` over the calendar-desk tools; fail-open frames.
|
|
14
|
+
|
|
15
|
+
## Find a time first
|
|
16
|
+
|
|
17
|
+
`calendar_find_a_time` is a deterministic free-slot scan across the attendees'
|
|
18
|
+
calendars — agent blocks included, nothing persisted, no model involved:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
node --input-type=module -e '
|
|
22
|
+
import { executeOrgTool } from "./lib/org/tool-surface.mjs";
|
|
23
|
+
const res = await executeOrgTool("calendar_find_a_time", {
|
|
24
|
+
attendeeMemberIds: ["m_alex", "m_robin"], durationMinutes: 45, fromDay: "2026-07-28",
|
|
25
|
+
});
|
|
26
|
+
console.log(JSON.stringify(res, null, 2));
|
|
27
|
+
'
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Propose from its slots — never invent availability.
|
|
31
|
+
|
|
32
|
+
## Create, answer, move
|
|
33
|
+
|
|
34
|
+
- `calendar_create` — typed event with attendees; `channelId` (optional) posts the
|
|
35
|
+
invite note into that channel; invite emails queue for real. Idempotent — a
|
|
36
|
+
replayed create does not double-book.
|
|
37
|
+
- `calendar_rsvp` — the acting seat answers its OWN invite (`ACCEPTED` /
|
|
38
|
+
`DECLINED` / `TENTATIVE`). Agents commit; do not leave invites hanging.
|
|
39
|
+
- `calendar_list` `{fromDay, toDay, viewpoint?}` / `calendar_get` `{eventId}` —
|
|
40
|
+
the window read and the single-event read (attendee rows + linked records).
|
|
41
|
+
- Long tail via `org_rpc`: `calendar.update` (fields/attendees),
|
|
42
|
+
`calendar.reschedule` (move; invites update, guardian reshapes logged),
|
|
43
|
+
`calendar.delete` (release the slot; attendees notified).
|
|
44
|
+
|
|
45
|
+
## Meetings → the knowledge plane
|
|
46
|
+
|
|
47
|
+
After a held meeting, `meetings_recap_file` files the recap + transcript into the
|
|
48
|
+
workspace drive — two DOC files plus a MeetingRecord with links back to the event.
|
|
49
|
+
Use it as the notetaker's landing verb; `org_rpc` `meetings.record` records a
|
|
50
|
+
meeting into the org's knowledge plane directly.
|
|
51
|
+
|
|
52
|
+
## Rules of the desk
|
|
53
|
+
|
|
54
|
+
- Scan before you book; state whose calendars you scanned.
|
|
55
|
+
- One event per intent — rely on create's idempotency instead of re-firing blind.
|
|
56
|
+
- When you move someone else's meeting, say why in the update — the reshape is
|
|
57
|
+
logged either way.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: call-working-sessions
|
|
3
|
+
description: Turn a Cohort call into a working session — present a doc/sheet/channel/board/charter on the call stage, step through it (scroll/highlight/type), live-edit docs while talking, read what participants see on screen, and watch reactions and raised hands. Use when you are a participant in a live Cohort call and want to show rather than tell, walk people through a document, or ground "this chart / that number" talk in what is actually on screen.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Call working sessions
|
|
7
|
+
|
|
8
|
+
When you're in a Cohort call, you can do more than talk: you can PRESENT a
|
|
9
|
+
workspace surface on the call stage like a screen share, drive it with steps
|
|
10
|
+
every participant sees, and read back the room — what's on screen, who reacted,
|
|
11
|
+
whose hand is up.
|
|
12
|
+
|
|
13
|
+
All of it rides the calls-desk org tools (`executeOrgTool`, fail-open frames,
|
|
14
|
+
never a throw) or the equivalent `calling*` wrappers in `lib/org/client.mjs`.
|
|
15
|
+
You must be a participant in the (still-live) call for every verb below.
|
|
16
|
+
|
|
17
|
+
## Presenting a surface
|
|
18
|
+
|
|
19
|
+
`org_call_share_start` puts a surface on the stage. Surface kinds and refs:
|
|
20
|
+
`doc` / `sheet` (a drive fileId), `channel` (channelId), `board` (`"org"`),
|
|
21
|
+
`charter` (charter slug).
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
node --input-type=module -e '
|
|
25
|
+
import { callingAppShareStart } from "./lib/org/client.mjs";
|
|
26
|
+
import { resolveOrgToolConfig } from "./lib/org/tool-surface.mjs";
|
|
27
|
+
const { base, orgId, token } = resolveOrgToolConfig();
|
|
28
|
+
const res = await callingAppShareStart(
|
|
29
|
+
{ callId: "CALL_ID", surface: { kind: "doc", ref: "FILE_ID", title: "Q3 plan" } },
|
|
30
|
+
{ base, token, orgId },
|
|
31
|
+
);
|
|
32
|
+
console.log(JSON.stringify(res)); // {ok:true, result:{sessionId}} — keep the sessionId
|
|
33
|
+
'
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
One active session per call: starting again supersedes your own session; a
|
|
37
|
+
`CONFLICT` frame means another member is presenting — wait or ask, never fight
|
|
38
|
+
for the stage. And always narrate verbally what you're showing: the tile is a
|
|
39
|
+
visual aid, the meeting is still a conversation.
|
|
40
|
+
|
|
41
|
+
## Stepping through it
|
|
42
|
+
|
|
43
|
+
`org_call_share_step` sends a batch (≤20) of choreography steps the tiles
|
|
44
|
+
animate:
|
|
45
|
+
|
|
46
|
+
- `{k:"cursor", x, y}` — move your pointer (normalized 0..1).
|
|
47
|
+
- `{k:"scroll", anchor}` — bring an anchor into view.
|
|
48
|
+
- `{k:"highlight", anchor, note?}` — ring it, with an optional ≤200-char note.
|
|
49
|
+
- `{k:"type", anchor, text}` — a visual typing preview (≤2000 chars). This is
|
|
50
|
+
NOT a real edit — see live-editing below.
|
|
51
|
+
- `{k:"refresh"}` — every tile refetches the surface content.
|
|
52
|
+
|
|
53
|
+
Anchors: `block:3` (doc block), `msg:<id>` (channel message), `cell:B4`
|
|
54
|
+
(sheet), `task:<id>` (board), `section:<idx>` (charter), `top` / `bottom`.
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
node --input-type=module -e '
|
|
58
|
+
import { callingAppShareAct } from "./lib/org/client.mjs";
|
|
59
|
+
import { resolveOrgToolConfig } from "./lib/org/tool-surface.mjs";
|
|
60
|
+
const { base, orgId, token } = resolveOrgToolConfig();
|
|
61
|
+
const res = await callingAppShareAct(
|
|
62
|
+
{ callId: "CALL_ID", sessionId: "SESSION_ID", steps: [
|
|
63
|
+
{ k: "scroll", anchor: "block:3" },
|
|
64
|
+
{ k: "highlight", anchor: "block:3", note: "the revenue line we discussed" },
|
|
65
|
+
] },
|
|
66
|
+
{ base, token, orgId },
|
|
67
|
+
);
|
|
68
|
+
console.log(JSON.stringify(res)); // {ok:true, result:{seq}}
|
|
69
|
+
'
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Highlight notes and typed text are read by every human on the call, so the
|
|
73
|
+
send-gate screens them locally before dispatch — same as a channel message.
|
|
74
|
+
|
|
75
|
+
## Live-editing a doc while talking
|
|
76
|
+
|
|
77
|
+
Real edits ride the files desk, not the share lane. The pattern:
|
|
78
|
+
|
|
79
|
+
1. `files_doc_write` (or `org_rpc files.sheetWriteCells`) — the REAL revision.
|
|
80
|
+
2. A share step batch: `{k:"type", ...}` to animate the change being written,
|
|
81
|
+
then `{k:"refresh"}` so every tile settles on the canonical new content.
|
|
82
|
+
|
|
83
|
+
The room sees the edit happen; the drive records a real DocRevision.
|
|
84
|
+
|
|
85
|
+
## Reading the room
|
|
86
|
+
|
|
87
|
+
- `org_call_visual_context` — the narrated visual stream: `{kind: screen|
|
|
88
|
+
camera|appshare, sourceMemberId, summary, at}` rows distilled from sampled
|
|
89
|
+
frames (narration text only — frames are never persisted). Use it before
|
|
90
|
+
answering "this chart" / "that number" talk so you speak to what's actually
|
|
91
|
+
on screen.
|
|
92
|
+
- `org_call_events` — recent non-speech events: reactions, raised/lowered
|
|
93
|
+
hands, joins, share lifecycle. A raised hand you can see is an invitation to
|
|
94
|
+
bring someone in.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
node --input-type=module -e '
|
|
98
|
+
import { callingGetVisualContext, callingGetCallEvents } from "./lib/org/client.mjs";
|
|
99
|
+
import { resolveOrgToolConfig } from "./lib/org/tool-surface.mjs";
|
|
100
|
+
const { base, orgId, token } = resolveOrgToolConfig();
|
|
101
|
+
console.log(JSON.stringify(await callingGetVisualContext({ callId: "CALL_ID", limit: 20 }, { base, token, orgId })));
|
|
102
|
+
console.log(JSON.stringify(await callingGetCallEvents({ callId: "CALL_ID", limit: 30 }, { base, token, orgId })));
|
|
103
|
+
'
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
`callingGetAppShare({ callId })` returns the active session (or `null`) —
|
|
107
|
+
check it before starting your own.
|
|
108
|
+
|
|
109
|
+
## Ending
|
|
110
|
+
|
|
111
|
+
`org_call_share_end` (`callingAppShareEnd({ callId, sessionId })`) clears the
|
|
112
|
+
stage; the sharer or the call host may end a session. End your share when the
|
|
113
|
+
walkthrough is done — don't squat on the stage.
|
|
114
|
+
|
|
115
|
+
## Rules of the desk
|
|
116
|
+
|
|
117
|
+
- Participant-gated: every verb refuses when you're not in the call, or the
|
|
118
|
+
call has ended (`CONFLICT`) — surface it, don't retry blindly.
|
|
119
|
+
- The chain is redacted: share events record ids/counts only; your step text
|
|
120
|
+
reaches call participants' screens, never the org event chain.
|
|
121
|
+
- Step text is human-visible — write it like something you'd say out loud, and
|
|
122
|
+
keep the policies/communication-style.md register.
|
|
123
|
+
- Show AND tell: pair every share step with spoken narration; a silent moving
|
|
124
|
+
cursor is confusing, not helpful.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ccxray-diagnostics
|
|
3
|
+
description: Run token/cost X-ray diagnostics on Claude API sessions — per-turn breakdown, context window heatmaps, system prompt diffs. Use for debugging expensive sessions or comparing sub-agent efficiency.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Token/Cost X-Ray Diagnostics (ccxray)
|
|
7
|
+
|
|
8
|
+
You are a Maestro agent. Use ccxray to diagnose token usage, cost, and context window utilization across agent sessions.
|
|
9
|
+
|
|
10
|
+
## When to Invoke
|
|
11
|
+
|
|
12
|
+
- **Debugging expensive sessions** — a backlog cycle consumed unexpectedly high tokens
|
|
13
|
+
- **Sub-agent efficiency comparison** — comparing token cost across parallel agents doing similar work
|
|
14
|
+
- **Context window analysis** — investigating whether agents are hitting context limits or carrying stale context
|
|
15
|
+
- **System prompt auditing** — diffing system prompts across agents to find bloat
|
|
16
|
+
- **Post-incident analysis** — understanding what went wrong in a failed or degraded session
|
|
17
|
+
|
|
18
|
+
## Background
|
|
19
|
+
|
|
20
|
+
ccxray is a transparent HTTP proxy that intercepts all Claude API calls and provides a live dashboard with per-turn token/cost breakdowns. It is an on-demand diagnostic tool, not always-on infrastructure.
|
|
21
|
+
|
|
22
|
+
- Proxy + dashboard: `npx ccxray claude`
|
|
23
|
+
- Logs stored at: `~/.ccxray/logs/`
|
|
24
|
+
- Dashboard shows live data during the session
|
|
25
|
+
|
|
26
|
+
## Steps
|
|
27
|
+
|
|
28
|
+
1. **Launch a diagnostic session** — run the target agent through ccxray:
|
|
29
|
+
```bash
|
|
30
|
+
npx ccxray claude
|
|
31
|
+
```
|
|
32
|
+
This wraps the Claude Code session in the ccxray proxy. All API calls are intercepted and logged.
|
|
33
|
+
|
|
34
|
+
2. **Open the dashboard** — ccxray serves a local dashboard showing:
|
|
35
|
+
- Per-turn input/output token counts
|
|
36
|
+
- Cumulative cost tracking
|
|
37
|
+
- Context window heatmap (what is filling the window)
|
|
38
|
+
- System prompt content and diffs between turns
|
|
39
|
+
|
|
40
|
+
3. **Analyze token distribution** — identify where tokens are being spent:
|
|
41
|
+
- Large system prompts eating context budget
|
|
42
|
+
- Repeated tool outputs inflating input tokens
|
|
43
|
+
- Verbose agent responses consuming output tokens
|
|
44
|
+
- Context window near capacity causing cache misses
|
|
45
|
+
|
|
46
|
+
4. **Compare sub-agents** — if multiple agents ran in parallel, compare their ccxray logs:
|
|
47
|
+
- Which agent consumed the most tokens per unit of work?
|
|
48
|
+
- Are any agents carrying unnecessary context?
|
|
49
|
+
- Are system prompts appropriately sized for each agent's role?
|
|
50
|
+
|
|
51
|
+
5. **Review historical logs** — check `~/.ccxray/logs/` for past session data:
|
|
52
|
+
```bash
|
|
53
|
+
ls -lt ~/.ccxray/logs/
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
6. **Produce findings** — summarize token/cost insights and recommend optimizations.
|
|
57
|
+
|
|
58
|
+
## Output
|
|
59
|
+
|
|
60
|
+
Report the following:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
## Token/Cost X-Ray Report
|
|
64
|
+
|
|
65
|
+
### Session Summary
|
|
66
|
+
- Total input tokens: [N]
|
|
67
|
+
- Total output tokens: [N]
|
|
68
|
+
- Estimated cost: $[X.XX]
|
|
69
|
+
- Turns: [N]
|
|
70
|
+
- Context window peak: [N]% utilization
|
|
71
|
+
|
|
72
|
+
### Top Token Consumers
|
|
73
|
+
1. [Turn/phase] — [N] tokens ([reason])
|
|
74
|
+
2. [Turn/phase] — [N] tokens ([reason])
|
|
75
|
+
|
|
76
|
+
### Optimization Recommendations
|
|
77
|
+
- [Specific recommendation, e.g., "Reduce system prompt by removing unused policy sections"]
|
|
78
|
+
- [Specific recommendation, e.g., "Cache tool outputs instead of re-reading files"]
|
|
79
|
+
|
|
80
|
+
### Sub-Agent Comparison (if applicable)
|
|
81
|
+
| Agent | Input Tokens | Output Tokens | Cost | Efficiency |
|
|
82
|
+
|---|---|---|---|---|
|
|
83
|
+
| [name] | [N] | [N] | $[X] | [notes] |
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Integration Notes
|
|
87
|
+
|
|
88
|
+
- This is an on-demand tool — do NOT run ccxray on every session, only when diagnosing issues
|
|
89
|
+
- ccxray adds minimal overhead (~5ms per request) but writes logs to disk
|
|
90
|
+
- Use for periodic token budget audits per backlog cycle (e.g., weekly)
|
|
91
|
+
- Pair with claude-pace to correlate token usage with quota consumption
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: claude-pace
|
|
3
|
+
description: Check Claude API rate limit quota — 5-hour/7-day usage, reset countdowns, pace delta. Use before heavy backlog cycles, when quota warnings appear, or to decide whether to defer non-urgent work.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Rate Limit Monitoring (claude-pace)
|
|
7
|
+
|
|
8
|
+
You are a Maestro agent. Use the claude-pace status line plugin to monitor API quota and make informed scheduling decisions.
|
|
9
|
+
|
|
10
|
+
## When to Invoke
|
|
11
|
+
|
|
12
|
+
- **Before heavy backlog cycles** — check headroom before spawning parallel agents
|
|
13
|
+
- **When quota warnings appear** — "hit your limit" or rate-limit errors in logs
|
|
14
|
+
- **Capacity planning** — deciding whether to defer improvement-backlog or non-urgent items
|
|
15
|
+
- **Post-incident** — confirming quota has recovered after a rate-limit outage
|
|
16
|
+
|
|
17
|
+
## Background
|
|
18
|
+
|
|
19
|
+
claude-pace is a Claude Code status line plugin (Bash + jq, ~10ms latency). It is auto-installed by `init-agent.sh` via `claude plugin marketplace add Astro-Han/claude-pace`. It displays real-time quota data in the Claude Code status bar.
|
|
20
|
+
|
|
21
|
+
The key signal is **pace delta**:
|
|
22
|
+
- **Green** — headroom available, safe to proceed with full parallelism
|
|
23
|
+
- **Yellow** — approaching limits, reduce parallel agent count
|
|
24
|
+
- **Red** — near or at limit, defer all non-urgent work immediately
|
|
25
|
+
|
|
26
|
+
## Steps
|
|
27
|
+
|
|
28
|
+
1. **Read the status line** — claude-pace displays 5-hour window usage, 7-day rolling usage, and time until next reset directly in the Claude Code status bar.
|
|
29
|
+
|
|
30
|
+
2. **Evaluate pace delta** — determine current capacity:
|
|
31
|
+
- **Green (>40% remaining)**: Proceed normally. Full parallel agent spawning is safe.
|
|
32
|
+
- **Yellow (15-40% remaining)**: Reduce to 2 parallel agents max. Defer improvement-backlog items.
|
|
33
|
+
- **Red (<15% remaining)**: Critical items only. No parallel spawning. Defer all non-urgent work.
|
|
34
|
+
|
|
35
|
+
3. **Check reset countdown** — if quota is constrained, note when the 5-hour window resets. Schedule deferred work for after reset.
|
|
36
|
+
|
|
37
|
+
4. **Adjust execution plan** based on findings:
|
|
38
|
+
- Prioritize critical/high-priority queue items only when constrained
|
|
39
|
+
- Move improvement-backlog and low-priority items to next cycle
|
|
40
|
+
- Reduce `parallel_with` fan-out in workflow steps
|
|
41
|
+
- Log the capacity decision in the session audit
|
|
42
|
+
|
|
43
|
+
5. **If rate-limit outage is suspected**, check workflow logs for the pattern: `"started"` entry without a matching `"completed"` entry, and inspect `.log` files for `"hit your limit"` strings.
|
|
44
|
+
|
|
45
|
+
## Output
|
|
46
|
+
|
|
47
|
+
Report the following to the calling agent or session:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
## Quota Status
|
|
51
|
+
- 5-hour window: [X]% used — resets in [T]
|
|
52
|
+
- 7-day rolling: [X]% used
|
|
53
|
+
- Pace delta: [green/yellow/red]
|
|
54
|
+
- Recommendation: [proceed normally / reduce parallelism / critical-only mode]
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Integration Notes
|
|
58
|
+
|
|
59
|
+
- Complements Maestro's reactive rate-limit detection (checking logs post-facto) with proactive visibility
|
|
60
|
+
- Does NOT require launching a separate process — data is in the status bar
|
|
61
|
+
- When pace delta is red, the backlog executor should automatically shrink its batch size from 3-5 items to 1-2
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-review-graph
|
|
3
|
+
description: Structural code analysis via tree-sitter knowledge graph — blast radius, review context, architecture overview, semantic search. Use for PR reviews, refactoring, and engineering health checks.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Structural Code Analysis (code-review-graph)
|
|
7
|
+
|
|
8
|
+
You are a Maestro agent. Use code-review-graph to build and query a tree-sitter-based knowledge graph of any codebase for structural analysis.
|
|
9
|
+
|
|
10
|
+
## When to Invoke
|
|
11
|
+
|
|
12
|
+
- **PR reviews** — assess blast radius of changes before approving
|
|
13
|
+
- **Refactoring** — understand call chains, import graphs, and dependencies before making changes
|
|
14
|
+
- **Engineering health checks** — generate architecture overviews for repos in the portfolio
|
|
15
|
+
- **Pre-change analysis** — determine what will break if a function/class is modified
|
|
16
|
+
- **Semantic code search** — find functions, patterns, or relationships across a codebase
|
|
17
|
+
|
|
18
|
+
## Background
|
|
19
|
+
|
|
20
|
+
code-review-graph uses tree-sitter to parse source code and build a knowledge graph mapping functions, classes, imports, and call relationships. It provides both CLI tools and an MCP server with specialized analysis tools.
|
|
21
|
+
|
|
22
|
+
## Steps
|
|
23
|
+
|
|
24
|
+
### One-Time Setup
|
|
25
|
+
|
|
26
|
+
1. **Index the target repository**:
|
|
27
|
+
```bash
|
|
28
|
+
npx code-review-graph index /path/to/repo
|
|
29
|
+
```
|
|
30
|
+
This parses all source files and builds the knowledge graph. Re-run after significant changes.
|
|
31
|
+
|
|
32
|
+
2. **Configure as MCP server** (optional, for persistent access):
|
|
33
|
+
Add to `.claude/settings.json` under `mcpServers`:
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"code-review-graph": {
|
|
37
|
+
"command": "npx",
|
|
38
|
+
"args": ["code-review-graph", "serve", "--port", "3848"]
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Analysis Workflows
|
|
44
|
+
|
|
45
|
+
3. **Blast radius analysis** — before approving a PR or making a change:
|
|
46
|
+
- Query which functions/modules depend on the changed code
|
|
47
|
+
- Identify downstream consumers that may break
|
|
48
|
+
- Map the full call chain from changed function to entry points
|
|
49
|
+
- Tool: `blast_radius` (via MCP) or CLI equivalent
|
|
50
|
+
|
|
51
|
+
4. **Review context** — when reviewing a PR:
|
|
52
|
+
- Pull structural context for changed files (what calls them, what they call)
|
|
53
|
+
- Identify if changes touch hot paths or critical modules
|
|
54
|
+
- Surface related functions that should have been changed but were not
|
|
55
|
+
- Tool: `review_context` (via MCP)
|
|
56
|
+
|
|
57
|
+
5. **Architecture overview** — for engineering health checks:
|
|
58
|
+
- Generate module dependency graph
|
|
59
|
+
- Identify circular dependencies
|
|
60
|
+
- Map public API surface vs internal implementation
|
|
61
|
+
- Surface orphaned code (defined but never called)
|
|
62
|
+
- Tool: `architecture_overview` (via MCP)
|
|
63
|
+
|
|
64
|
+
6. **Semantic search** — finding code by intent:
|
|
65
|
+
- Search for functions matching a description or pattern
|
|
66
|
+
- Find all implementations of a given interface
|
|
67
|
+
- Locate similar code patterns across the codebase
|
|
68
|
+
- Tool: `semantic_search` (via MCP)
|
|
69
|
+
|
|
70
|
+
## Output
|
|
71
|
+
|
|
72
|
+
Report findings appropriate to the workflow:
|
|
73
|
+
|
|
74
|
+
**For blast radius:**
|
|
75
|
+
```
|
|
76
|
+
## Blast Radius: [function/file]
|
|
77
|
+
- Direct dependents: [N] functions in [N] files
|
|
78
|
+
- Transitive impact: [N] modules
|
|
79
|
+
- Risk level: [low/medium/high]
|
|
80
|
+
- Affected entry points: [list]
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**For architecture overview:**
|
|
84
|
+
```
|
|
85
|
+
## Architecture: [repo]
|
|
86
|
+
- Modules: [N]
|
|
87
|
+
- Key dependency chains: [list top 3]
|
|
88
|
+
- Circular dependencies: [list or "none"]
|
|
89
|
+
- Orphaned exports: [count]
|
|
90
|
+
- Hottest module (most dependents): [name]
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Integration Notes
|
|
94
|
+
|
|
95
|
+
- Recommended for coding-oriented agents (engineering, platform, product)
|
|
96
|
+
- Optional for operational agents (comms, hiring, strategy) — they rarely need code-level analysis
|
|
97
|
+
- Re-index after merging significant PRs to keep the graph current
|
|
98
|
+
- The MCP server runs on port 3848 by default — ensure no conflicts
|
|
99
|
+
- Graph build time scales with repo size; large monorepos may take 30-60 seconds
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: crm-pipeline
|
|
3
|
+
description: Work the org's CRM desk — pipeline and deal reads, stage moves, attributed interaction logging, next-best-action inside playbook lines, and the escalation lane where humans sign held work. Use when asked about pipeline state, to progress or hand over a deal, to log a touch, or to run the next step on a deal.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# CRM Pipeline
|
|
7
|
+
|
|
8
|
+
The CRM desk is playbook-governed: agents run inside compiled playbook lines,
|
|
9
|
+
manual holds gate the next outbound step, and the verbs that commit the org —
|
|
10
|
+
signing held work, setting the quarter's target — are HUMAN-ONLY in the domain
|
|
11
|
+
layer. An agent call to those fails exactly as the UI would never allow it; that
|
|
12
|
+
refusal is correct behaviour, not an error to work around. Money is integer cents
|
|
13
|
+
everywhere.
|
|
14
|
+
|
|
15
|
+
All of it is `executeOrgTool` over the crm-desk tools; fail-open frames.
|
|
16
|
+
|
|
17
|
+
## Reading the pipeline
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
node --input-type=module -e '
|
|
21
|
+
import { executeOrgTool } from "./lib/org/tool-surface.mjs";
|
|
22
|
+
const res = await executeOrgTool("crm_list_deals", { openOnly: true });
|
|
23
|
+
for (const d of res.ok ? res.result.deals ?? res.result : []) console.log(d.id, d.stage, d.name, d.valueCents);
|
|
24
|
+
'
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- `crm_get_deal` — one deal + its attributed trail.
|
|
28
|
+
- `crm_list_escalations` — deals holding for a human signature (the guardian
|
|
29
|
+
queue). Surface these; never "resolve" them yourself.
|
|
30
|
+
- Long-tail reads via `org_rpc`: `crm.listAccounts` (health + ARR),
|
|
31
|
+
`crm.listContacts`, `crm.listInteractions`, `crm.listPlaybooks`,
|
|
32
|
+
`crm.getTargets` (target + live committed/best-case), `crm.compilePlaybook`
|
|
33
|
+
(PURE preview, nothing persisted).
|
|
34
|
+
|
|
35
|
+
## Progressing a deal
|
|
36
|
+
|
|
37
|
+
- `crm_create_deal` — open at INBOUND.
|
|
38
|
+
- `crm_move_stage` — stage/board move, logged.
|
|
39
|
+
- `crm_log_interaction` — an attributed touch on the deal/contact trail. Log every
|
|
40
|
+
real touch; the trail is the deal's story.
|
|
41
|
+
- `crm_next_best_action` — start the playbook's proposed step. Holds gate NBA: a
|
|
42
|
+
deal holding for signature will not run — report the hold.
|
|
43
|
+
- Long tail via `org_rpc`: `crm.updateDeal` (term edits re-evaluate playbooks),
|
|
44
|
+
`crm.closeDeal` (won → a REAL Books draft invoice), `crm.delegate` (owner
|
|
45
|
+
reassign + a real handover board task), `crm.taskFollowThrough` (a real
|
|
46
|
+
work-board task), `crm.shareDeal` (people grants; a channelId posts a real
|
|
47
|
+
system line), `crm.linkContact` / `crm.linkFiles`, `crm.holdNextStep` (manual
|
|
48
|
+
signature gate), `crm.returnEscalation` (return held work with a posture note),
|
|
49
|
+
`crm.updateHeldTerms` (re-price held terms), `crm.logDealDecision` (a real
|
|
50
|
+
Decision row in the registry), `crm.pinNote`, `crm.redactInteraction` (SOFT —
|
|
51
|
+
the ledger record remains), accounts/contacts CRUD, playbook save/toggle/delete
|
|
52
|
+
(locked playbooks refuse), `crm.setTarget`.
|
|
53
|
+
|
|
54
|
+
## Human-only, by design
|
|
55
|
+
|
|
56
|
+
`crm.signEscalation` and `crm.setTarget`'s `targetCents` refuse non-human actors in
|
|
57
|
+
the domain. When a deal needs a signature: put it in front of the human
|
|
58
|
+
(`crm.listEscalations` + a channel note), do not attempt the sign.
|
|
59
|
+
|
|
60
|
+
## Rules of the desk
|
|
61
|
+
|
|
62
|
+
- Attribute everything — an unlogged touch did not happen.
|
|
63
|
+
- Report holds and escalations verbatim (stage, amount in cents, what tripped).
|
|
64
|
+
- Won deals hand off to Books automatically; check `books_invoices` before
|
|
65
|
+
drafting a duplicate.
|