arkaos 2.0.0-alpha.1
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/CONSTITUTION.md +81 -0
- package/LICENSE +21 -0
- package/README.md +154 -0
- package/VERSION +1 -0
- package/arka/SKILL.md +134 -0
- package/bin/arkaos +107 -0
- package/config/constitution.yaml +168 -0
- package/config/hooks/post-tool-use-v2.sh +116 -0
- package/config/hooks/post-tool-use.sh +188 -0
- package/config/hooks/pre-compact-v2.sh +43 -0
- package/config/hooks/pre-compact.sh +99 -0
- package/config/hooks/user-prompt-submit-v2.sh +119 -0
- package/config/hooks/user-prompt-submit.sh +312 -0
- package/core/__init__.py +3 -0
- package/core/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/agents/__init__.py +14 -0
- package/core/agents/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/agents/__pycache__/loader.cpython-313.pyc +0 -0
- package/core/agents/__pycache__/registry_gen.cpython-313.pyc +0 -0
- package/core/agents/__pycache__/schema.cpython-313.pyc +0 -0
- package/core/agents/__pycache__/validator.cpython-313.pyc +0 -0
- package/core/agents/loader.py +88 -0
- package/core/agents/registry_gen.py +118 -0
- package/core/agents/schema.py +265 -0
- package/core/agents/validator.py +141 -0
- package/core/conclave/__init__.py +12 -0
- package/core/conclave/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/conclave/__pycache__/advisor_db.cpython-313.pyc +0 -0
- package/core/conclave/__pycache__/display.cpython-313.pyc +0 -0
- package/core/conclave/__pycache__/matcher.cpython-313.pyc +0 -0
- package/core/conclave/__pycache__/persistence.cpython-313.pyc +0 -0
- package/core/conclave/__pycache__/profiler.cpython-313.pyc +0 -0
- package/core/conclave/__pycache__/prompts.cpython-313.pyc +0 -0
- package/core/conclave/__pycache__/schema.cpython-313.pyc +0 -0
- package/core/conclave/advisor_db.py +373 -0
- package/core/conclave/display.py +104 -0
- package/core/conclave/matcher.py +104 -0
- package/core/conclave/persistence.py +61 -0
- package/core/conclave/profiler.py +298 -0
- package/core/conclave/prompts.py +77 -0
- package/core/conclave/schema.py +132 -0
- package/core/governance/__init__.py +5 -0
- package/core/governance/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/governance/__pycache__/constitution.cpython-313.pyc +0 -0
- package/core/governance/constitution.py +152 -0
- package/core/registry/__init__.py +1 -0
- package/core/registry/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/registry/__pycache__/generator.cpython-313.pyc +0 -0
- package/core/registry/generator.py +199 -0
- package/core/runtime/__init__.py +6 -0
- package/core/runtime/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/runtime/__pycache__/base.cpython-313.pyc +0 -0
- package/core/runtime/__pycache__/claude_code.cpython-313.pyc +0 -0
- package/core/runtime/__pycache__/codex_cli.cpython-313.pyc +0 -0
- package/core/runtime/__pycache__/cursor.cpython-313.pyc +0 -0
- package/core/runtime/__pycache__/gemini_cli.cpython-313.pyc +0 -0
- package/core/runtime/__pycache__/registry.cpython-313.pyc +0 -0
- package/core/runtime/__pycache__/subagent.cpython-313.pyc +0 -0
- package/core/runtime/base.py +143 -0
- package/core/runtime/claude_code.py +104 -0
- package/core/runtime/codex_cli.py +71 -0
- package/core/runtime/cursor.py +71 -0
- package/core/runtime/gemini_cli.py +68 -0
- package/core/runtime/registry.py +86 -0
- package/core/runtime/subagent.py +201 -0
- package/core/specs/__init__.py +10 -0
- package/core/specs/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/specs/__pycache__/manager.cpython-313.pyc +0 -0
- package/core/specs/__pycache__/schema.cpython-313.pyc +0 -0
- package/core/specs/manager.py +164 -0
- package/core/specs/schema.py +199 -0
- package/core/squads/__init__.py +7 -0
- package/core/squads/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/squads/__pycache__/loader.cpython-313.pyc +0 -0
- package/core/squads/__pycache__/registry.cpython-313.pyc +0 -0
- package/core/squads/__pycache__/schema.cpython-313.pyc +0 -0
- package/core/squads/loader.py +40 -0
- package/core/squads/registry.py +145 -0
- package/core/squads/schema.py +93 -0
- package/core/synapse/__init__.py +11 -0
- package/core/synapse/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/synapse/__pycache__/cache.cpython-313.pyc +0 -0
- package/core/synapse/__pycache__/engine.cpython-313.pyc +0 -0
- package/core/synapse/__pycache__/layers.cpython-313.pyc +0 -0
- package/core/synapse/cache.py +82 -0
- package/core/synapse/engine.py +184 -0
- package/core/synapse/layers.py +441 -0
- package/core/tasks/__init__.py +6 -0
- package/core/tasks/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/tasks/__pycache__/manager.cpython-313.pyc +0 -0
- package/core/tasks/__pycache__/schema.cpython-313.pyc +0 -0
- package/core/tasks/manager.py +150 -0
- package/core/tasks/schema.py +108 -0
- package/core/workflow/__init__.py +10 -0
- package/core/workflow/__pycache__/__init__.cpython-313.pyc +0 -0
- package/core/workflow/__pycache__/engine.cpython-313.pyc +0 -0
- package/core/workflow/__pycache__/loader.cpython-313.pyc +0 -0
- package/core/workflow/__pycache__/schema.cpython-313.pyc +0 -0
- package/core/workflow/engine.py +216 -0
- package/core/workflow/loader.py +28 -0
- package/core/workflow/schema.py +129 -0
- package/departments/brand/SKILL.md +85 -0
- package/departments/brand/agents/brand-director.yaml +77 -0
- package/departments/brand/agents/brand-strategist.md +182 -0
- package/departments/brand/agents/brand-strategist.yaml +58 -0
- package/departments/brand/agents/creative-director.md +149 -0
- package/departments/brand/agents/motion-designer.md +113 -0
- package/departments/brand/agents/ux-designer.yaml +60 -0
- package/departments/brand/agents/visual-designer.md +187 -0
- package/departments/brand/agents/visual-designer.yaml +58 -0
- package/departments/brand/references/brand-creation-guide.md +559 -0
- package/departments/brand/scripts/provider-call.sh +262 -0
- package/departments/brand/skills/archetype-finder/SKILL.md +18 -0
- package/departments/brand/skills/colors/SKILL.md +18 -0
- package/departments/brand/skills/design-system/SKILL.md +18 -0
- package/departments/brand/skills/identity-system/SKILL.md +18 -0
- package/departments/brand/skills/logo-brief/SKILL.md +18 -0
- package/departments/brand/skills/mockup-generate/SKILL.md +18 -0
- package/departments/brand/skills/naming-evaluate/SKILL.md +50 -0
- package/departments/brand/skills/positioning-statement/SKILL.md +18 -0
- package/departments/brand/skills/primal-audit/SKILL.md +43 -0
- package/departments/brand/skills/ux-audit/SKILL.md +18 -0
- package/departments/brand/skills/voice-guide/SKILL.md +18 -0
- package/departments/brand/skills/wireframe/SKILL.md +18 -0
- package/departments/brand/squad.yaml +39 -0
- package/departments/brand/workflows/identity.yaml +113 -0
- package/departments/brand/workflows/naming.yaml +58 -0
- package/departments/community/SKILL.md +62 -0
- package/departments/community/agents/community-manager.yaml +57 -0
- package/departments/community/agents/community-strategist.yaml +74 -0
- package/departments/community/agents/engagement-designer.yaml +56 -0
- package/departments/community/skills/ai-community/SKILL.md +18 -0
- package/departments/community/skills/betting-setup/SKILL.md +18 -0
- package/departments/community/skills/business-model/SKILL.md +53 -0
- package/departments/community/skills/content-calendar/SKILL.md +18 -0
- package/departments/community/skills/events-plan/SKILL.md +18 -0
- package/departments/community/skills/gamification-design/SKILL.md +18 -0
- package/departments/community/skills/growth-plan/SKILL.md +18 -0
- package/departments/community/skills/metrics-track/SKILL.md +18 -0
- package/departments/community/skills/moderation/SKILL.md +18 -0
- package/departments/community/skills/monetize-plan/SKILL.md +18 -0
- package/departments/community/skills/niche-setup/SKILL.md +18 -0
- package/departments/community/skills/onboarding-flow/SKILL.md +18 -0
- package/departments/community/skills/platform-select/SKILL.md +18 -0
- package/departments/community/skills/retention-system/SKILL.md +48 -0
- package/departments/community/squad.yaml +32 -0
- package/departments/community/workflows/setup.yaml +62 -0
- package/departments/content/SKILL.md +65 -0
- package/departments/content/agents/content-strategist.yaml +74 -0
- package/departments/content/agents/repurpose-distributor.yaml +57 -0
- package/departments/content/agents/scriptwriter.yaml +56 -0
- package/departments/content/agents/viral-engineer.yaml +56 -0
- package/departments/content/skills/ai-workflow/SKILL.md +18 -0
- package/departments/content/skills/analytics/SKILL.md +18 -0
- package/departments/content/skills/calendar/SKILL.md +18 -0
- package/departments/content/skills/content-system/SKILL.md +75 -0
- package/departments/content/skills/hook-write/SKILL.md +43 -0
- package/departments/content/skills/monetization-plan/SKILL.md +18 -0
- package/departments/content/skills/newsletter-write/SKILL.md +18 -0
- package/departments/content/skills/platform-optimize/SKILL.md +18 -0
- package/departments/content/skills/repurpose-plan/SKILL.md +18 -0
- package/departments/content/skills/script-structure/SKILL.md +18 -0
- package/departments/content/skills/short-form/SKILL.md +18 -0
- package/departments/content/skills/thumbnail-package/SKILL.md +18 -0
- package/departments/content/skills/viral-design/SKILL.md +45 -0
- package/departments/content/skills/youtube-strategy/SKILL.md +18 -0
- package/departments/content/squad.yaml +39 -0
- package/departments/content/workflows/viral.yaml +99 -0
- package/departments/dev/SKILL.md +135 -0
- package/departments/dev/agents/analyst.md +184 -0
- package/departments/dev/agents/architect.md +184 -0
- package/departments/dev/agents/architect.yaml +74 -0
- package/departments/dev/agents/backend-dev.yaml +70 -0
- package/departments/dev/agents/cto.md +140 -0
- package/departments/dev/agents/cto.yaml +77 -0
- package/departments/dev/agents/dba.yaml +72 -0
- package/departments/dev/agents/devops-eng.yaml +72 -0
- package/departments/dev/agents/devops.md +204 -0
- package/departments/dev/agents/frontend-dev.md +213 -0
- package/departments/dev/agents/frontend-dev.yaml +71 -0
- package/departments/dev/agents/qa-eng.yaml +72 -0
- package/departments/dev/agents/qa.md +231 -0
- package/departments/dev/agents/security-eng.yaml +72 -0
- package/departments/dev/agents/security.md +174 -0
- package/departments/dev/agents/senior-dev.md +177 -0
- package/departments/dev/agents/tech-lead.md +188 -0
- package/departments/dev/agents/tech-lead.yaml +72 -0
- package/departments/dev/skills/adversarial-review/SKILL.md +117 -0
- package/departments/dev/skills/agent-design/SKILL.md +127 -0
- package/departments/dev/skills/agent-workflow/SKILL.md +116 -0
- package/departments/dev/skills/ai-assisted-dev/SKILL.md +18 -0
- package/departments/dev/skills/ai-security/SKILL.md +112 -0
- package/departments/dev/skills/api-design/SKILL.md +59 -0
- package/departments/dev/skills/architecture-design/SKILL.md +89 -0
- package/departments/dev/skills/changelog/SKILL.md +110 -0
- package/departments/dev/skills/ci-cd-pipeline/SKILL.md +130 -0
- package/departments/dev/skills/clean-code-review/SKILL.md +65 -0
- package/departments/dev/skills/code-review/SKILL.md +18 -0
- package/departments/dev/skills/codebase-onboard/SKILL.md +109 -0
- package/departments/dev/skills/db-design/SKILL.md +18 -0
- package/departments/dev/skills/db-schema/SKILL.md +130 -0
- package/departments/dev/skills/ddd-model/SKILL.md +18 -0
- package/departments/dev/skills/dependency-audit/SKILL.md +118 -0
- package/departments/dev/skills/deploy/SKILL.md +18 -0
- package/departments/dev/skills/devops-pipeline/SKILL.md +18 -0
- package/departments/dev/skills/docs/SKILL.md +18 -0
- package/departments/dev/skills/env-secrets/SKILL.md +89 -0
- package/departments/dev/skills/incident/SKILL.md +125 -0
- package/departments/dev/skills/mcp/SKILL.md +106 -0
- package/departments/dev/skills/mcp-builder/SKILL.md +121 -0
- package/departments/dev/skills/observability/SKILL.md +119 -0
- package/departments/dev/skills/onboard/SKILL.md +389 -0
- package/departments/dev/skills/onboard/scripts/detect-stack.py +472 -0
- package/departments/dev/skills/performance-audit/SKILL.md +49 -0
- package/departments/dev/skills/performance-profiler/SKILL.md +128 -0
- package/departments/dev/skills/rag-architect/SKILL.md +125 -0
- package/departments/dev/skills/red-team/SKILL.md +112 -0
- package/departments/dev/skills/refactor-plan/SKILL.md +18 -0
- package/departments/dev/skills/release/SKILL.md +130 -0
- package/departments/dev/skills/research/SKILL.md +18 -0
- package/departments/dev/skills/runbook/SKILL.md +103 -0
- package/departments/dev/skills/scaffold/SKILL.md +249 -0
- package/departments/dev/skills/security-audit/SKILL.md +68 -0
- package/departments/dev/skills/skill-audit/SKILL.md +96 -0
- package/departments/dev/skills/spec/SKILL.md +218 -0
- package/departments/dev/skills/stack-check/SKILL.md +18 -0
- package/departments/dev/skills/tdd-cycle/SKILL.md +56 -0
- package/departments/dev/skills/tech-debt/SKILL.md +100 -0
- package/departments/dev/squad.yaml +62 -0
- package/departments/dev/workflows/debug.yaml +63 -0
- package/departments/dev/workflows/feature.yaml +129 -0
- package/departments/dev/workflows/refactor.yaml +64 -0
- package/departments/ecom/SKILL.md +39 -0
- package/departments/ecom/agents/commerce-engineer.yaml +58 -0
- package/departments/ecom/agents/cro-specialist.yaml +56 -0
- package/departments/ecom/agents/ecom-director.yaml +73 -0
- package/departments/ecom/agents/retention-manager.yaml +59 -0
- package/departments/ecom/skills/analytics/SKILL.md +18 -0
- package/departments/ecom/skills/cart-recovery/SKILL.md +18 -0
- package/departments/ecom/skills/cro-optimize/SKILL.md +58 -0
- package/departments/ecom/skills/customer-journey/SKILL.md +18 -0
- package/departments/ecom/skills/fulfillment-plan/SKILL.md +18 -0
- package/departments/ecom/skills/marketplace-manage/SKILL.md +18 -0
- package/departments/ecom/skills/pricing-strategy/SKILL.md +18 -0
- package/departments/ecom/skills/product-launch/SKILL.md +18 -0
- package/departments/ecom/skills/rfm-segment/SKILL.md +44 -0
- package/departments/ecom/skills/social-commerce/SKILL.md +18 -0
- package/departments/ecom/skills/store-audit/SKILL.md +18 -0
- package/departments/ecom/skills/subscription-model/SKILL.md +18 -0
- package/departments/ecom/squad.yaml +39 -0
- package/departments/ecom/workflows/product-page.yaml +62 -0
- package/departments/ecommerce/SKILL.md +363 -0
- package/departments/ecommerce/agents/ecommerce-manager.md +91 -0
- package/departments/finance/SKILL.md +37 -0
- package/departments/finance/agents/cfo.md +85 -0
- package/departments/finance/agents/cfo.yaml +77 -0
- package/departments/finance/agents/financial-analyst.yaml +57 -0
- package/departments/finance/agents/investment-strategist.yaml +58 -0
- package/departments/finance/skills/budget-plan/SKILL.md +18 -0
- package/departments/finance/skills/cashflow-forecast/SKILL.md +18 -0
- package/departments/finance/skills/ciso-advisor/SKILL.md +113 -0
- package/departments/finance/skills/financial-model/SKILL.md +70 -0
- package/departments/finance/skills/pitch-deck/SKILL.md +18 -0
- package/departments/finance/skills/scenario-analysis/SKILL.md +18 -0
- package/departments/finance/skills/unit-economics/SKILL.md +44 -0
- package/departments/finance/skills/valuation-model/SKILL.md +18 -0
- package/departments/finance/squad.yaml +37 -0
- package/departments/finance/workflows/cashflow.yaml +47 -0
- package/departments/finance/workflows/model.yaml +83 -0
- package/departments/kb/SKILL.md +38 -0
- package/departments/kb/agents/knowledge-curator.yaml +60 -0
- package/departments/kb/agents/knowledge-director.yaml +72 -0
- package/departments/kb/agents/research-analyst.yaml +58 -0
- package/departments/kb/skills/ai-research/SKILL.md +18 -0
- package/departments/kb/skills/competitive-intel/SKILL.md +18 -0
- package/departments/kb/skills/knowledge-review/SKILL.md +18 -0
- package/departments/kb/skills/learn-content/SKILL.md +18 -0
- package/departments/kb/skills/moc-create/SKILL.md +18 -0
- package/departments/kb/skills/persona-build/SKILL.md +18 -0
- package/departments/kb/skills/research-plan/SKILL.md +51 -0
- package/departments/kb/skills/search-kb/SKILL.md +18 -0
- package/departments/kb/skills/source-evaluate/SKILL.md +18 -0
- package/departments/kb/skills/taxonomy-manage/SKILL.md +18 -0
- package/departments/kb/skills/write-as-persona/SKILL.md +18 -0
- package/departments/kb/skills/zettelkasten-process/SKILL.md +56 -0
- package/departments/kb/squad.yaml +34 -0
- package/departments/kb/workflows/learn.yaml +63 -0
- package/departments/knowledge/SKILL.md +474 -0
- package/departments/knowledge/agents/knowledge-curator.md +89 -0
- package/departments/knowledge/scripts/kb-check-capabilities.sh +143 -0
- package/departments/knowledge/scripts/kb-cleanup.sh +135 -0
- package/departments/knowledge/scripts/kb-queue.sh +156 -0
- package/departments/knowledge/scripts/kb-status.sh +195 -0
- package/departments/knowledge/scripts/kb-worker.sh +217 -0
- package/departments/landing/SKILL.md +65 -0
- package/departments/landing/agents/affiliate-manager.yaml +57 -0
- package/departments/landing/agents/conversion-strategist.yaml +74 -0
- package/departments/landing/agents/cro-specialist.yaml +58 -0
- package/departments/landing/agents/sales-copywriter.yaml +61 -0
- package/departments/landing/skills/ab-test/SKILL.md +18 -0
- package/departments/landing/skills/affiliate-bridge/SKILL.md +18 -0
- package/departments/landing/skills/awareness-diagnose/SKILL.md +18 -0
- package/departments/landing/skills/copy-framework/SKILL.md +55 -0
- package/departments/landing/skills/email-sequence/SKILL.md +18 -0
- package/departments/landing/skills/funnel-design/SKILL.md +49 -0
- package/departments/landing/skills/funnel-metrics/SKILL.md +18 -0
- package/departments/landing/skills/headline-write/SKILL.md +18 -0
- package/departments/landing/skills/landing-gen/SKILL.md +124 -0
- package/departments/landing/skills/launch-sequence/SKILL.md +18 -0
- package/departments/landing/skills/offer-create/SKILL.md +62 -0
- package/departments/landing/skills/optimize-page/SKILL.md +18 -0
- package/departments/landing/skills/page-architect/SKILL.md +18 -0
- package/departments/landing/skills/persuasion-apply/SKILL.md +18 -0
- package/departments/landing/skills/webinar-funnel/SKILL.md +18 -0
- package/departments/landing/squad.yaml +39 -0
- package/departments/landing/workflows/launch.yaml +72 -0
- package/departments/landing/workflows/offer.yaml +99 -0
- package/departments/leadership/SKILL.md +35 -0
- package/departments/leadership/agents/culture-coach.yaml +59 -0
- package/departments/leadership/agents/hr-specialist.yaml +57 -0
- package/departments/leadership/agents/leadership-director.yaml +72 -0
- package/departments/leadership/skills/change-manage/SKILL.md +18 -0
- package/departments/leadership/skills/conflict-resolve/SKILL.md +18 -0
- package/departments/leadership/skills/culture-audit/SKILL.md +18 -0
- package/departments/leadership/skills/delegation-matrix/SKILL.md +18 -0
- package/departments/leadership/skills/disc-assess/SKILL.md +18 -0
- package/departments/leadership/skills/feedback-give/SKILL.md +18 -0
- package/departments/leadership/skills/hiring-plan/SKILL.md +18 -0
- package/departments/leadership/skills/okr-define/SKILL.md +69 -0
- package/departments/leadership/skills/performance-review/SKILL.md +18 -0
- package/departments/leadership/skills/team-health/SKILL.md +56 -0
- package/departments/leadership/squad.yaml +35 -0
- package/departments/leadership/workflows/team-build.yaml +55 -0
- package/departments/marketing/SKILL.md +61 -0
- package/departments/marketing/agents/content-creator.md +85 -0
- package/departments/marketing/agents/content-marketer.yaml +58 -0
- package/departments/marketing/agents/marketing-director.yaml +75 -0
- package/departments/marketing/agents/paid-specialist.yaml +58 -0
- package/departments/marketing/agents/seo-specialist.yaml +57 -0
- package/departments/marketing/skills/ab-test/SKILL.md +18 -0
- package/departments/marketing/skills/analytics-report/SKILL.md +18 -0
- package/departments/marketing/skills/audience-segment/SKILL.md +18 -0
- package/departments/marketing/skills/calendar-plan/SKILL.md +18 -0
- package/departments/marketing/skills/cold-email/SKILL.md +128 -0
- package/departments/marketing/skills/competitor-analysis/SKILL.md +18 -0
- package/departments/marketing/skills/content-audit/SKILL.md +18 -0
- package/departments/marketing/skills/email-sequence/SKILL.md +18 -0
- package/departments/marketing/skills/growth-loop/SKILL.md +50 -0
- package/departments/marketing/skills/marketing-automation/SKILL.md +18 -0
- package/departments/marketing/skills/paid-campaign/SKILL.md +18 -0
- package/departments/marketing/skills/programmatic-seo/SKILL.md +123 -0
- package/departments/marketing/skills/seo-audit/SKILL.md +48 -0
- package/departments/marketing/skills/social-strategy/SKILL.md +18 -0
- package/departments/marketing/squad.yaml +39 -0
- package/departments/marketing/workflows/campaign.yaml +112 -0
- package/departments/marketing/workflows/social.yaml +56 -0
- package/departments/operations/SKILL.md +422 -0
- package/departments/operations/agents/coo.md +88 -0
- package/departments/ops/SKILL.md +37 -0
- package/departments/ops/agents/automation-engineer.yaml +58 -0
- package/departments/ops/agents/ops-lead.yaml +71 -0
- package/departments/ops/skills/bottleneck-find/SKILL.md +49 -0
- package/departments/ops/skills/dashboard-build/SKILL.md +18 -0
- package/departments/ops/skills/gtd-setup/SKILL.md +18 -0
- package/departments/ops/skills/integration-design/SKILL.md +18 -0
- package/departments/ops/skills/lean-audit/SKILL.md +18 -0
- package/departments/ops/skills/metrics-dashboard/SKILL.md +18 -0
- package/departments/ops/skills/n8n-flow/SKILL.md +18 -0
- package/departments/ops/skills/sop-create/SKILL.md +18 -0
- package/departments/ops/skills/workflow-automate/SKILL.md +39 -0
- package/departments/ops/skills/zapier-flow/SKILL.md +18 -0
- package/departments/ops/squad.yaml +35 -0
- package/departments/ops/workflows/lean-audit.yaml +69 -0
- package/departments/org/SKILL.md +34 -0
- package/departments/org/agents/coo.yaml +80 -0
- package/departments/org/agents/org-designer.yaml +56 -0
- package/departments/org/agents/people-ops.yaml +56 -0
- package/departments/org/skills/compensation-plan/SKILL.md +18 -0
- package/departments/org/skills/culture-define/SKILL.md +18 -0
- package/departments/org/skills/decision-framework/SKILL.md +18 -0
- package/departments/org/skills/hiring-plan/SKILL.md +18 -0
- package/departments/org/skills/meeting-optimize/SKILL.md +18 -0
- package/departments/org/skills/onboarding-design/SKILL.md +18 -0
- package/departments/org/skills/org-design/SKILL.md +18 -0
- package/departments/org/skills/remote-setup/SKILL.md +18 -0
- package/departments/org/skills/sop-process/SKILL.md +18 -0
- package/departments/org/skills/team-assess/SKILL.md +18 -0
- package/departments/org/squad.yaml +33 -0
- package/departments/org/workflows/design.yaml +55 -0
- package/departments/pm/SKILL.md +39 -0
- package/departments/pm/agents/pm-director.yaml +75 -0
- package/departments/pm/agents/product-owner.yaml +59 -0
- package/departments/pm/agents/scrum-master.yaml +59 -0
- package/departments/pm/skills/agile-po/SKILL.md +118 -0
- package/departments/pm/skills/backlog-groom/SKILL.md +18 -0
- package/departments/pm/skills/discovery-plan/SKILL.md +48 -0
- package/departments/pm/skills/estimate-forecast/SKILL.md +18 -0
- package/departments/pm/skills/impact-map/SKILL.md +18 -0
- package/departments/pm/skills/kanban-setup/SKILL.md +18 -0
- package/departments/pm/skills/risk-register/SKILL.md +18 -0
- package/departments/pm/skills/roadmap-build/SKILL.md +18 -0
- package/departments/pm/skills/shape-pitch/SKILL.md +55 -0
- package/departments/pm/skills/sprint-plan/SKILL.md +18 -0
- package/departments/pm/skills/stakeholder-map/SKILL.md +18 -0
- package/departments/pm/skills/standup-run/SKILL.md +18 -0
- package/departments/pm/skills/story-write/SKILL.md +18 -0
- package/departments/pm/squad.yaml +37 -0
- package/departments/pm/workflows/retro.yaml +33 -0
- package/departments/quality/SKILL.md +66 -0
- package/departments/quality/agents/copy-director.md +134 -0
- package/departments/quality/agents/copy-director.yaml +73 -0
- package/departments/quality/agents/cqo.md +134 -0
- package/departments/quality/agents/cqo.yaml +76 -0
- package/departments/quality/agents/tech-director.yaml +79 -0
- package/departments/quality/agents/tech-ux-director.md +193 -0
- package/departments/quality/squad.yaml +25 -0
- package/departments/saas/SKILL.md +64 -0
- package/departments/saas/agents/cs-manager.yaml +57 -0
- package/departments/saas/agents/growth-engineer.yaml +57 -0
- package/departments/saas/agents/metrics-analyst.yaml +57 -0
- package/departments/saas/agents/saas-strategist.yaml +74 -0
- package/departments/saas/skills/benchmark-compare/SKILL.md +18 -0
- package/departments/saas/skills/churn-analysis/SKILL.md +18 -0
- package/departments/saas/skills/customer-success/SKILL.md +18 -0
- package/departments/saas/skills/growth-plan/SKILL.md +18 -0
- package/departments/saas/skills/gtm-strategy/SKILL.md +18 -0
- package/departments/saas/skills/launch-execute/SKILL.md +18 -0
- package/departments/saas/skills/metrics-dashboard/SKILL.md +18 -0
- package/departments/saas/skills/micro-saas-stack/SKILL.md +18 -0
- package/departments/saas/skills/mvp-build/SKILL.md +18 -0
- package/departments/saas/skills/niche-evaluate/SKILL.md +18 -0
- package/departments/saas/skills/onboarding-optimize/SKILL.md +18 -0
- package/departments/saas/skills/plg-setup/SKILL.md +53 -0
- package/departments/saas/skills/pricing-strategy/SKILL.md +48 -0
- package/departments/saas/skills/saas-scaffold/SKILL.md +127 -0
- package/departments/saas/skills/validate-idea/SKILL.md +55 -0
- package/departments/saas/squad.yaml +37 -0
- package/departments/saas/workflows/metrics.yaml +58 -0
- package/departments/saas/workflows/validate.yaml +103 -0
- package/departments/sales/SKILL.md +35 -0
- package/departments/sales/agents/sales-closer.yaml +58 -0
- package/departments/sales/agents/sales-director.yaml +72 -0
- package/departments/sales/agents/sales-ops.yaml +55 -0
- package/departments/sales/skills/challenger-sell/SKILL.md +18 -0
- package/departments/sales/skills/deal-qualify/SKILL.md +18 -0
- package/departments/sales/skills/discovery-call/SKILL.md +18 -0
- package/departments/sales/skills/forecast-revenue/SKILL.md +18 -0
- package/departments/sales/skills/negotiate-plan/SKILL.md +18 -0
- package/departments/sales/skills/objection-handle/SKILL.md +18 -0
- package/departments/sales/skills/pipeline-manage/SKILL.md +18 -0
- package/departments/sales/skills/pricing-negotiate/SKILL.md +18 -0
- package/departments/sales/skills/proposal-write/SKILL.md +54 -0
- package/departments/sales/skills/spin-sell/SKILL.md +50 -0
- package/departments/sales/squad.yaml +35 -0
- package/departments/sales/workflows/pipeline.yaml +49 -0
- package/departments/strategy/SKILL.md +37 -0
- package/departments/strategy/agents/business-model-designer.yaml +58 -0
- package/departments/strategy/agents/market-analyst.yaml +58 -0
- package/departments/strategy/agents/strategist.md +79 -0
- package/departments/strategy/agents/strategy-director.yaml +75 -0
- package/departments/strategy/skills/blue-ocean/SKILL.md +56 -0
- package/departments/strategy/skills/bmc/SKILL.md +18 -0
- package/departments/strategy/skills/board-advisor/SKILL.md +121 -0
- package/departments/strategy/skills/cto-advisor/SKILL.md +113 -0
- package/departments/strategy/skills/five-forces/SKILL.md +74 -0
- package/departments/strategy/skills/growth-strategy/SKILL.md +18 -0
- package/departments/strategy/skills/moat-analysis/SKILL.md +18 -0
- package/departments/strategy/skills/position/SKILL.md +18 -0
- package/departments/strategy/skills/scenario-plan/SKILL.md +18 -0
- package/departments/strategy/squad.yaml +37 -0
- package/departments/strategy/workflows/analysis.yaml +90 -0
- package/departments/strategy/workflows/swot.yaml +47 -0
- package/installer/adapters/claude-code.js +73 -0
- package/installer/adapters/codex-cli.js +34 -0
- package/installer/adapters/cursor.js +34 -0
- package/installer/adapters/gemini-cli.js +37 -0
- package/installer/cli.js +91 -0
- package/installer/detect-runtime.js +122 -0
- package/installer/doctor.js +105 -0
- package/installer/index.js +199 -0
- package/installer/uninstall.js +46 -0
- package/installer/update.js +39 -0
- package/knowledge/agents-registry-v2.json +2702 -0
- package/knowledge/commands-registry-v2.json +3827 -0
- package/package.json +58 -0
- package/pyproject.toml +64 -0
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
"""Conclave Profiler — Extract user behavioral DNA via structured questions.
|
|
2
|
+
|
|
3
|
+
Uses targeted questions to determine the user's DISC, Enneagram, Big Five,
|
|
4
|
+
and MBTI profiles. The profiler produces a UserProfile that the matcher
|
|
5
|
+
uses to assemble a personalized Conclave board.
|
|
6
|
+
|
|
7
|
+
Design: Each framework has 4-6 questions. Total profiling takes ~20 questions.
|
|
8
|
+
Questions are multiple-choice to make scoring deterministic.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from dataclasses import dataclass, field
|
|
12
|
+
from core.agents.schema import (
|
|
13
|
+
BehavioralDNA, DISCProfile, DISCType,
|
|
14
|
+
EnneagramProfile, EnneagramType,
|
|
15
|
+
BigFiveProfile, MBTIProfile, MBTIType,
|
|
16
|
+
)
|
|
17
|
+
from core.conclave.schema import UserProfile
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class ProfileQuestion:
|
|
22
|
+
"""A single profiling question with scored options."""
|
|
23
|
+
id: str
|
|
24
|
+
framework: str # disc, enneagram, big_five, mbti
|
|
25
|
+
question: str
|
|
26
|
+
options: list[dict] # [{label, scores: {dimension: value}}]
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class ProfilingSession:
|
|
31
|
+
"""Tracks answers during a profiling session."""
|
|
32
|
+
answers: dict[str, str] = field(default_factory=dict)
|
|
33
|
+
scores: dict[str, float] = field(default_factory=dict)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# --- DISC Questions (4 questions) ---
|
|
37
|
+
|
|
38
|
+
DISC_QUESTIONS = [
|
|
39
|
+
ProfileQuestion(
|
|
40
|
+
id="disc-1", framework="disc",
|
|
41
|
+
question="When facing a new challenge at work, you tend to:",
|
|
42
|
+
options=[
|
|
43
|
+
{"label": "Take charge immediately and push for quick results", "scores": {"D": 3}},
|
|
44
|
+
{"label": "Rally the team with enthusiasm and brainstorm together", "scores": {"I": 3}},
|
|
45
|
+
{"label": "Carefully plan your approach before acting", "scores": {"C": 3}},
|
|
46
|
+
{"label": "Consider how it affects the team and build consensus", "scores": {"S": 3}},
|
|
47
|
+
],
|
|
48
|
+
),
|
|
49
|
+
ProfileQuestion(
|
|
50
|
+
id="disc-2", framework="disc",
|
|
51
|
+
question="In meetings, you are most likely to:",
|
|
52
|
+
options=[
|
|
53
|
+
{"label": "Drive the agenda and make decisions quickly", "scores": {"D": 3}},
|
|
54
|
+
{"label": "Energize the room with ideas and stories", "scores": {"I": 3}},
|
|
55
|
+
{"label": "Listen carefully and ensure everyone's input is heard", "scores": {"S": 3}},
|
|
56
|
+
{"label": "Focus on data, details, and logical analysis", "scores": {"C": 3}},
|
|
57
|
+
],
|
|
58
|
+
),
|
|
59
|
+
ProfileQuestion(
|
|
60
|
+
id="disc-3", framework="disc",
|
|
61
|
+
question="When someone disagrees with you, you typically:",
|
|
62
|
+
options=[
|
|
63
|
+
{"label": "State your position firmly and defend it with facts", "scores": {"D": 2, "C": 1}},
|
|
64
|
+
{"label": "Use persuasion and charm to bring them around", "scores": {"I": 2, "D": 1}},
|
|
65
|
+
{"label": "Seek compromise and try to maintain harmony", "scores": {"S": 2, "I": 1}},
|
|
66
|
+
{"label": "Analyze both sides objectively before responding", "scores": {"C": 2, "S": 1}},
|
|
67
|
+
],
|
|
68
|
+
),
|
|
69
|
+
ProfileQuestion(
|
|
70
|
+
id="disc-4", framework="disc",
|
|
71
|
+
question="Your biggest fear at work is:",
|
|
72
|
+
options=[
|
|
73
|
+
{"label": "Losing control or being taken advantage of", "scores": {"D": 3}},
|
|
74
|
+
{"label": "Being rejected or losing social approval", "scores": {"I": 3}},
|
|
75
|
+
{"label": "Sudden change or losing stability", "scores": {"S": 3}},
|
|
76
|
+
{"label": "Being wrong or producing low-quality work", "scores": {"C": 3}},
|
|
77
|
+
],
|
|
78
|
+
),
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
# --- Enneagram Questions (6 questions — triads first, then type) ---
|
|
82
|
+
|
|
83
|
+
ENNEAGRAM_QUESTIONS = [
|
|
84
|
+
ProfileQuestion(
|
|
85
|
+
id="enn-1", framework="enneagram",
|
|
86
|
+
question="Which statement resonates most with you?",
|
|
87
|
+
options=[
|
|
88
|
+
{"label": "I need to be competent and knowledgeable", "scores": {"e5": 3, "e6": 1}},
|
|
89
|
+
{"label": "I need to be successful and admired", "scores": {"e3": 3, "e2": 1}},
|
|
90
|
+
{"label": "I need to be in control and strong", "scores": {"e8": 3, "e1": 1}},
|
|
91
|
+
],
|
|
92
|
+
),
|
|
93
|
+
ProfileQuestion(
|
|
94
|
+
id="enn-2", framework="enneagram",
|
|
95
|
+
question="Under stress, you tend to:",
|
|
96
|
+
options=[
|
|
97
|
+
{"label": "Withdraw and analyze the situation alone", "scores": {"e5": 3, "e4": 1}},
|
|
98
|
+
{"label": "Become more busy and action-oriented", "scores": {"e3": 2, "e7": 2}},
|
|
99
|
+
{"label": "Worry more and seek reassurance from trusted people", "scores": {"e6": 3}},
|
|
100
|
+
{"label": "Become more controlling or confrontational", "scores": {"e8": 2, "e1": 2}},
|
|
101
|
+
],
|
|
102
|
+
),
|
|
103
|
+
ProfileQuestion(
|
|
104
|
+
id="enn-3", framework="enneagram",
|
|
105
|
+
question="What drives your decisions most?",
|
|
106
|
+
options=[
|
|
107
|
+
{"label": "Doing what's right and maintaining high standards", "scores": {"e1": 3}},
|
|
108
|
+
{"label": "Helping others and building relationships", "scores": {"e2": 3}},
|
|
109
|
+
{"label": "Achieving goals and being the best", "scores": {"e3": 3}},
|
|
110
|
+
{"label": "Understanding deeply and mastering my domain", "scores": {"e5": 3}},
|
|
111
|
+
],
|
|
112
|
+
),
|
|
113
|
+
ProfileQuestion(
|
|
114
|
+
id="enn-4", framework="enneagram",
|
|
115
|
+
question="Which describes your inner world?",
|
|
116
|
+
options=[
|
|
117
|
+
{"label": "I seek freedom, variety, and new experiences", "scores": {"e7": 3}},
|
|
118
|
+
{"label": "I seek authenticity and deep self-expression", "scores": {"e4": 3}},
|
|
119
|
+
{"label": "I seek peace, harmony, and avoiding conflict", "scores": {"e9": 3}},
|
|
120
|
+
{"label": "I seek security, loyalty, and preparedness", "scores": {"e6": 3}},
|
|
121
|
+
],
|
|
122
|
+
),
|
|
123
|
+
]
|
|
124
|
+
|
|
125
|
+
# --- Big Five Questions (5 questions, one per trait) ---
|
|
126
|
+
|
|
127
|
+
BIG_FIVE_QUESTIONS = [
|
|
128
|
+
ProfileQuestion(
|
|
129
|
+
id="bf-o", framework="big_five",
|
|
130
|
+
question="When it comes to new ideas and experiences:",
|
|
131
|
+
options=[
|
|
132
|
+
{"label": "I actively seek novel approaches and creative solutions", "scores": {"openness": 85}},
|
|
133
|
+
{"label": "I'm open to new things but prefer some familiarity", "scores": {"openness": 60}},
|
|
134
|
+
{"label": "I prefer proven methods and practical approaches", "scores": {"openness": 35}},
|
|
135
|
+
],
|
|
136
|
+
),
|
|
137
|
+
ProfileQuestion(
|
|
138
|
+
id="bf-c", framework="big_five",
|
|
139
|
+
question="How would you describe your work style?",
|
|
140
|
+
options=[
|
|
141
|
+
{"label": "Highly organized, disciplined, and detail-oriented", "scores": {"conscientiousness": 85}},
|
|
142
|
+
{"label": "Reasonably organized with some flexibility", "scores": {"conscientiousness": 60}},
|
|
143
|
+
{"label": "Spontaneous and adaptable, I figure things out as I go", "scores": {"conscientiousness": 35}},
|
|
144
|
+
],
|
|
145
|
+
),
|
|
146
|
+
ProfileQuestion(
|
|
147
|
+
id="bf-e", framework="big_five",
|
|
148
|
+
question="In social situations:",
|
|
149
|
+
options=[
|
|
150
|
+
{"label": "I'm energized by people and love being the center of conversation", "scores": {"extraversion": 85}},
|
|
151
|
+
{"label": "I enjoy socializing but also value alone time", "scores": {"extraversion": 55}},
|
|
152
|
+
{"label": "I prefer small groups or working alone, large groups drain me", "scores": {"extraversion": 25}},
|
|
153
|
+
],
|
|
154
|
+
),
|
|
155
|
+
ProfileQuestion(
|
|
156
|
+
id="bf-a", framework="big_five",
|
|
157
|
+
question="When making business decisions:",
|
|
158
|
+
options=[
|
|
159
|
+
{"label": "I prioritize people's feelings and building consensus", "scores": {"agreeableness": 80}},
|
|
160
|
+
{"label": "I balance people's needs with practical outcomes", "scores": {"agreeableness": 55}},
|
|
161
|
+
{"label": "I focus on results even if it means tough conversations", "scores": {"agreeableness": 30}},
|
|
162
|
+
],
|
|
163
|
+
),
|
|
164
|
+
ProfileQuestion(
|
|
165
|
+
id="bf-n", framework="big_five",
|
|
166
|
+
question="How do you handle pressure and setbacks?",
|
|
167
|
+
options=[
|
|
168
|
+
{"label": "I stay calm and composed, rarely rattled", "scores": {"neuroticism": 20}},
|
|
169
|
+
{"label": "I feel the pressure but manage it well", "scores": {"neuroticism": 45}},
|
|
170
|
+
{"label": "I feel things intensely and it takes time to rebalance", "scores": {"neuroticism": 75}},
|
|
171
|
+
],
|
|
172
|
+
),
|
|
173
|
+
]
|
|
174
|
+
|
|
175
|
+
# --- MBTI Questions (4 questions, one per dichotomy) ---
|
|
176
|
+
|
|
177
|
+
MBTI_QUESTIONS = [
|
|
178
|
+
ProfileQuestion(
|
|
179
|
+
id="mbti-ei", framework="mbti",
|
|
180
|
+
question="You recharge your energy by:",
|
|
181
|
+
options=[
|
|
182
|
+
{"label": "Spending time with others, discussing ideas and socializing", "scores": {"E": 3}},
|
|
183
|
+
{"label": "Spending time alone, reflecting and processing internally", "scores": {"I": 3}},
|
|
184
|
+
],
|
|
185
|
+
),
|
|
186
|
+
ProfileQuestion(
|
|
187
|
+
id="mbti-sn", framework="mbti",
|
|
188
|
+
question="You prefer to focus on:",
|
|
189
|
+
options=[
|
|
190
|
+
{"label": "Concrete facts, details, and what's real right now", "scores": {"S": 3}},
|
|
191
|
+
{"label": "Patterns, possibilities, and what could be in the future", "scores": {"N": 3}},
|
|
192
|
+
],
|
|
193
|
+
),
|
|
194
|
+
ProfileQuestion(
|
|
195
|
+
id="mbti-tf", framework="mbti",
|
|
196
|
+
question="When making important decisions, you rely more on:",
|
|
197
|
+
options=[
|
|
198
|
+
{"label": "Logic, analysis, and objective criteria", "scores": {"T": 3}},
|
|
199
|
+
{"label": "Values, impact on people, and what feels right", "scores": {"F": 3}},
|
|
200
|
+
],
|
|
201
|
+
),
|
|
202
|
+
ProfileQuestion(
|
|
203
|
+
id="mbti-jp", framework="mbti",
|
|
204
|
+
question="You prefer your work environment to be:",
|
|
205
|
+
options=[
|
|
206
|
+
{"label": "Structured, planned, and decisive — I like closure", "scores": {"J": 3}},
|
|
207
|
+
{"label": "Flexible, open-ended, and adaptable — I like options", "scores": {"P": 3}},
|
|
208
|
+
],
|
|
209
|
+
),
|
|
210
|
+
]
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
def get_all_questions() -> list[ProfileQuestion]:
|
|
214
|
+
"""Get all profiling questions in order."""
|
|
215
|
+
return DISC_QUESTIONS + ENNEAGRAM_QUESTIONS + BIG_FIVE_QUESTIONS + MBTI_QUESTIONS
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
def score_disc(session: ProfilingSession) -> tuple[DISCType, DISCType]:
|
|
219
|
+
"""Score DISC from session answers. Returns (primary, secondary)."""
|
|
220
|
+
totals = {"D": 0, "I": 0, "S": 0, "C": 0}
|
|
221
|
+
for key, val in session.scores.items():
|
|
222
|
+
if key in totals:
|
|
223
|
+
totals[key] += val
|
|
224
|
+
ranked = sorted(totals.items(), key=lambda x: x[1], reverse=True)
|
|
225
|
+
primary = DISCType(ranked[0][0])
|
|
226
|
+
secondary = DISCType(ranked[1][0]) if ranked[1][0] != ranked[0][0] else DISCType(ranked[2][0])
|
|
227
|
+
return primary, secondary
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
def score_enneagram(session: ProfilingSession) -> tuple[int, int]:
|
|
231
|
+
"""Score Enneagram from session. Returns (type, wing)."""
|
|
232
|
+
totals = {i: 0 for i in range(1, 10)}
|
|
233
|
+
for key, val in session.scores.items():
|
|
234
|
+
if key.startswith("e") and key[1:].isdigit():
|
|
235
|
+
totals[int(key[1:])] += val
|
|
236
|
+
ranked = sorted(totals.items(), key=lambda x: x[1], reverse=True)
|
|
237
|
+
enn_type = ranked[0][0]
|
|
238
|
+
# Wing must be adjacent
|
|
239
|
+
wing_a = enn_type - 1 if enn_type > 1 else 9
|
|
240
|
+
wing_b = enn_type + 1 if enn_type < 9 else 1
|
|
241
|
+
wing = wing_a if totals.get(wing_a, 0) >= totals.get(wing_b, 0) else wing_b
|
|
242
|
+
return enn_type, wing
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def score_big_five(session: ProfilingSession) -> BigFiveProfile:
|
|
246
|
+
"""Score Big Five from session."""
|
|
247
|
+
return BigFiveProfile(
|
|
248
|
+
openness=int(session.scores.get("openness", 50)),
|
|
249
|
+
conscientiousness=int(session.scores.get("conscientiousness", 50)),
|
|
250
|
+
extraversion=int(session.scores.get("extraversion", 50)),
|
|
251
|
+
agreeableness=int(session.scores.get("agreeableness", 50)),
|
|
252
|
+
neuroticism=int(session.scores.get("neuroticism", 50)),
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def score_mbti(session: ProfilingSession) -> MBTIType:
|
|
257
|
+
"""Score MBTI from session."""
|
|
258
|
+
ei = "E" if session.scores.get("E", 0) >= session.scores.get("I", 0) else "I"
|
|
259
|
+
sn = "S" if session.scores.get("S", 0) >= session.scores.get("N", 0) else "N"
|
|
260
|
+
tf = "T" if session.scores.get("T", 0) >= session.scores.get("F", 0) else "F"
|
|
261
|
+
jp = "J" if session.scores.get("J", 0) >= session.scores.get("P", 0) else "P"
|
|
262
|
+
return MBTIType(f"{ei}{sn}{tf}{jp}")
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
def process_answer(session: ProfilingSession, question: ProfileQuestion, option_index: int) -> None:
|
|
266
|
+
"""Process a single answer and accumulate scores."""
|
|
267
|
+
if 0 <= option_index < len(question.options):
|
|
268
|
+
option = question.options[option_index]
|
|
269
|
+
session.answers[question.id] = option["label"]
|
|
270
|
+
for dimension, value in option.get("scores", {}).items():
|
|
271
|
+
session.scores[dimension] = session.scores.get(dimension, 0) + value
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
def build_profile_from_session(
|
|
275
|
+
session: ProfilingSession,
|
|
276
|
+
name: str = "",
|
|
277
|
+
company: str = "",
|
|
278
|
+
role: str = "",
|
|
279
|
+
) -> UserProfile:
|
|
280
|
+
"""Build a complete UserProfile from a scoring session."""
|
|
281
|
+
disc_primary, disc_secondary = score_disc(session)
|
|
282
|
+
enn_type, enn_wing = score_enneagram(session)
|
|
283
|
+
big_five = score_big_five(session)
|
|
284
|
+
mbti_type = score_mbti(session)
|
|
285
|
+
|
|
286
|
+
dna = BehavioralDNA(
|
|
287
|
+
disc=DISCProfile(primary=disc_primary, secondary=disc_secondary),
|
|
288
|
+
enneagram=EnneagramProfile(type=EnneagramType(enn_type), wing=enn_wing),
|
|
289
|
+
big_five=big_five,
|
|
290
|
+
mbti=MBTIProfile(type=mbti_type),
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
return UserProfile(
|
|
294
|
+
name=name,
|
|
295
|
+
company=company,
|
|
296
|
+
role=role,
|
|
297
|
+
behavioral_dna=dna,
|
|
298
|
+
)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"""Conclave prompts — system prompts that make advisors respond in character."""
|
|
2
|
+
|
|
3
|
+
from core.conclave.schema import Advisor
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def build_advisor_prompt(advisor: Advisor, question: str) -> str:
|
|
7
|
+
"""Build a system prompt that makes an AI respond as this advisor.
|
|
8
|
+
|
|
9
|
+
The prompt channels the advisor's thinking style, mental models,
|
|
10
|
+
and communication patterns.
|
|
11
|
+
"""
|
|
12
|
+
models_text = "\n".join(
|
|
13
|
+
f"- {m.name}: {m.question}" for m in advisor.mental_models
|
|
14
|
+
)
|
|
15
|
+
questions_text = "\n".join(f'- "{q}"' for q in advisor.key_questions)
|
|
16
|
+
|
|
17
|
+
return f"""You are {advisor.name}, {advisor.title}.
|
|
18
|
+
|
|
19
|
+
Your mental models:
|
|
20
|
+
{models_text}
|
|
21
|
+
|
|
22
|
+
Your key questions:
|
|
23
|
+
{questions_text}
|
|
24
|
+
|
|
25
|
+
Communication style: {advisor.communication_style}
|
|
26
|
+
Decision framework: {advisor.decision_framework}
|
|
27
|
+
|
|
28
|
+
Respond to the following question as {advisor.name} would. Use your mental models.
|
|
29
|
+
Be specific to THIS situation, not generic. 3-5 sentences maximum.
|
|
30
|
+
Channel {advisor.name}'s actual thinking and vocabulary.
|
|
31
|
+
|
|
32
|
+
Question: {question}"""
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def build_debate_prompt(advisors: list[Advisor], topic: str) -> str:
|
|
36
|
+
"""Build a prompt for an advisor debate on a topic."""
|
|
37
|
+
advisor_list = "\n".join(
|
|
38
|
+
f"- {a.name} ({a.title}): {a.communication_style}" for a in advisors
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
return f"""You are moderating a debate between these advisors:
|
|
42
|
+
|
|
43
|
+
{advisor_list}
|
|
44
|
+
|
|
45
|
+
Topic: {topic}
|
|
46
|
+
|
|
47
|
+
For EACH advisor, write 2-3 sentences from their perspective using their known
|
|
48
|
+
mental models and communication style. Then identify:
|
|
49
|
+
1. Where the aligned advisors agree
|
|
50
|
+
2. Where the contrarian advisors push back
|
|
51
|
+
3. The key tension the user should consider
|
|
52
|
+
|
|
53
|
+
Keep each advisor's voice distinct and authentic."""
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def build_ask_all_prompt(advisors: list[Advisor], question: str) -> str:
|
|
57
|
+
"""Build a prompt that channels all advisors responding to one question."""
|
|
58
|
+
sections = []
|
|
59
|
+
|
|
60
|
+
for advisor in advisors:
|
|
61
|
+
models = ", ".join(m.name for m in advisor.mental_models[:2])
|
|
62
|
+
sections.append(
|
|
63
|
+
f"**{advisor.name}** ({advisor.advisor_type.value}) — "
|
|
64
|
+
f"Uses: {models}. Style: {advisor.communication_style}"
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
advisor_context = "\n".join(sections)
|
|
68
|
+
|
|
69
|
+
return f"""The user asked their Conclave advisory board: "{question}"
|
|
70
|
+
|
|
71
|
+
Advisors on the board:
|
|
72
|
+
{advisor_context}
|
|
73
|
+
|
|
74
|
+
For each advisor, write a 2-3 sentence response that channels their specific
|
|
75
|
+
thinking style and mental models. Use their actual vocabulary and frameworks.
|
|
76
|
+
Make each response distinct. End with a brief synthesis of where they agree
|
|
77
|
+
and where they diverge."""
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"""Conclave schema — User profiles, advisors, and the board.
|
|
2
|
+
|
|
3
|
+
The Conclave creates a personalized advisory board by:
|
|
4
|
+
1. Profiling the user's behavioral DNA (DISC + Enneagram + Big5 + MBTI)
|
|
5
|
+
2. Matching 5 aligned advisors (same cognitive profile)
|
|
6
|
+
3. Matching 5 contrarian advisors (opposite profile)
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from enum import Enum
|
|
10
|
+
from typing import Optional
|
|
11
|
+
from pydantic import BaseModel, Field
|
|
12
|
+
|
|
13
|
+
from core.agents.schema import (
|
|
14
|
+
DISCProfile, DISCType,
|
|
15
|
+
EnneagramProfile, EnneagramType,
|
|
16
|
+
BigFiveProfile,
|
|
17
|
+
MBTIProfile, MBTIType,
|
|
18
|
+
BehavioralDNA,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class AdvisorType(str, Enum):
|
|
23
|
+
ALIGNED = "aligned"
|
|
24
|
+
CONTRARIAN = "contrarian"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class MentalModel(BaseModel):
|
|
28
|
+
"""A codified mental model used by an advisor."""
|
|
29
|
+
name: str
|
|
30
|
+
description: str = ""
|
|
31
|
+
question: str = "" # The key question this model asks
|
|
32
|
+
example: str = "" # Example of applying this model
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class Advisor(BaseModel):
|
|
36
|
+
"""A real-world person serving as an AI advisor.
|
|
37
|
+
|
|
38
|
+
Each advisor has a behavioral DNA profile, mental models,
|
|
39
|
+
and a specific communication style based on the real person.
|
|
40
|
+
"""
|
|
41
|
+
id: str
|
|
42
|
+
name: str
|
|
43
|
+
title: str = "" # e.g., "Investor, Berkshire Hathaway"
|
|
44
|
+
why_selected: str = "" # Why this advisor was matched
|
|
45
|
+
advisor_type: AdvisorType = AdvisorType.ALIGNED
|
|
46
|
+
|
|
47
|
+
behavioral_dna: BehavioralDNA
|
|
48
|
+
mental_models: list[MentalModel] = Field(default_factory=list)
|
|
49
|
+
|
|
50
|
+
key_questions: list[str] = Field(default_factory=list)
|
|
51
|
+
communication_style: str = ""
|
|
52
|
+
decision_framework: str = ""
|
|
53
|
+
sources: list[str] = Field(default_factory=list) # Books, talks, etc.
|
|
54
|
+
|
|
55
|
+
def match_score_to(self, user_dna: BehavioralDNA) -> float:
|
|
56
|
+
"""Calculate how well this advisor's DNA matches a user's DNA.
|
|
57
|
+
|
|
58
|
+
Higher score = more similar (for aligned advisors).
|
|
59
|
+
Lower score = more different (for contrarian advisors).
|
|
60
|
+
"""
|
|
61
|
+
score = 0.0
|
|
62
|
+
total = 4.0
|
|
63
|
+
|
|
64
|
+
# DISC match (same primary = +1)
|
|
65
|
+
if self.behavioral_dna.disc.primary == user_dna.disc.primary:
|
|
66
|
+
score += 1.0
|
|
67
|
+
elif self.behavioral_dna.disc.secondary == user_dna.disc.primary:
|
|
68
|
+
score += 0.5
|
|
69
|
+
|
|
70
|
+
# Enneagram match (same center = +1, same type = +1)
|
|
71
|
+
if self.behavioral_dna.enneagram.center == user_dna.enneagram.center:
|
|
72
|
+
score += 0.5
|
|
73
|
+
if self.behavioral_dna.enneagram.type == user_dna.enneagram.type:
|
|
74
|
+
score += 0.5
|
|
75
|
+
|
|
76
|
+
# Big Five match (average distance, inverted)
|
|
77
|
+
user_bf = user_dna.big_five
|
|
78
|
+
adv_bf = self.behavioral_dna.big_five
|
|
79
|
+
diffs = [
|
|
80
|
+
abs(user_bf.openness - adv_bf.openness),
|
|
81
|
+
abs(user_bf.conscientiousness - adv_bf.conscientiousness),
|
|
82
|
+
abs(user_bf.extraversion - adv_bf.extraversion),
|
|
83
|
+
abs(user_bf.agreeableness - adv_bf.agreeableness),
|
|
84
|
+
abs(user_bf.neuroticism - adv_bf.neuroticism),
|
|
85
|
+
]
|
|
86
|
+
avg_diff = sum(diffs) / len(diffs)
|
|
87
|
+
score += 1.0 - (avg_diff / 100.0)
|
|
88
|
+
|
|
89
|
+
# MBTI match (same dominant function = +1)
|
|
90
|
+
if self.behavioral_dna.mbti.dominant == user_dna.mbti.dominant:
|
|
91
|
+
score += 1.0
|
|
92
|
+
elif self.behavioral_dna.mbti.auxiliary == user_dna.mbti.dominant:
|
|
93
|
+
score += 0.5
|
|
94
|
+
|
|
95
|
+
return round(score / total, 2)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class UserProfile(BaseModel):
|
|
99
|
+
"""The user's behavioral DNA profile for Conclave matching."""
|
|
100
|
+
name: str = ""
|
|
101
|
+
company: str = ""
|
|
102
|
+
role: str = ""
|
|
103
|
+
behavioral_dna: BehavioralDNA
|
|
104
|
+
objectives: list[str] = Field(default_factory=list)
|
|
105
|
+
industries: list[str] = Field(default_factory=list)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class ConclaveBoard(BaseModel):
|
|
109
|
+
"""The complete Conclave board: 5 aligned + 5 contrarian advisors."""
|
|
110
|
+
user: UserProfile
|
|
111
|
+
aligned: list[Advisor] = Field(default_factory=list, max_length=5)
|
|
112
|
+
contrarian: list[Advisor] = Field(default_factory=list, max_length=5)
|
|
113
|
+
|
|
114
|
+
@property
|
|
115
|
+
def all_advisors(self) -> list[Advisor]:
|
|
116
|
+
return self.aligned + self.contrarian
|
|
117
|
+
|
|
118
|
+
@property
|
|
119
|
+
def size(self) -> int:
|
|
120
|
+
return len(self.aligned) + len(self.contrarian)
|
|
121
|
+
|
|
122
|
+
def get_advisor(self, advisor_id: str) -> Optional[Advisor]:
|
|
123
|
+
for a in self.all_advisors:
|
|
124
|
+
if a.id == advisor_id:
|
|
125
|
+
return a
|
|
126
|
+
return None
|
|
127
|
+
|
|
128
|
+
def advisor_names(self) -> dict[str, list[str]]:
|
|
129
|
+
return {
|
|
130
|
+
"aligned": [a.name for a in self.aligned],
|
|
131
|
+
"contrarian": [a.name for a in self.contrarian],
|
|
132
|
+
}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"""Constitution schema and loader.
|
|
2
|
+
|
|
3
|
+
The Constitution defines governance rules at 4 enforcement levels:
|
|
4
|
+
- NON-NEGOTIABLE: Violations abort operations
|
|
5
|
+
- QUALITY_GATE: Mandatory pre-delivery review
|
|
6
|
+
- MUST: Mandatory, violations logged
|
|
7
|
+
- SHOULD: Best practices, encouraged
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Optional
|
|
12
|
+
|
|
13
|
+
import yaml
|
|
14
|
+
from pydantic import BaseModel, Field
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Rule(BaseModel):
|
|
18
|
+
"""A single governance rule."""
|
|
19
|
+
id: str
|
|
20
|
+
rule: str
|
|
21
|
+
enforcement: str = ""
|
|
22
|
+
pattern: str = ""
|
|
23
|
+
metric: str = ""
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class QualityAgent(BaseModel):
|
|
27
|
+
"""A quality gate agent."""
|
|
28
|
+
id: str
|
|
29
|
+
role: str = ""
|
|
30
|
+
scope: str = ""
|
|
31
|
+
authority: str = ""
|
|
32
|
+
veto_power: bool = False
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class QualityGateConfig(BaseModel):
|
|
36
|
+
"""Quality Gate configuration."""
|
|
37
|
+
description: str = ""
|
|
38
|
+
agents: dict = Field(default_factory=dict)
|
|
39
|
+
process: list[str] = Field(default_factory=list)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class EnforcementLevel(BaseModel):
|
|
43
|
+
"""A group of rules at the same enforcement level."""
|
|
44
|
+
description: str = ""
|
|
45
|
+
rules: list[Rule] = Field(default_factory=list)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class TierConfig(BaseModel):
|
|
49
|
+
"""Configuration for an agent tier."""
|
|
50
|
+
name: str
|
|
51
|
+
description: str = ""
|
|
52
|
+
max_agents: int = 0
|
|
53
|
+
authorities: list[str] = Field(default_factory=list)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class ConflictRule(BaseModel):
|
|
57
|
+
"""A conflict resolution pattern."""
|
|
58
|
+
pattern: str
|
|
59
|
+
resolution: str
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class ConflictResolution(BaseModel):
|
|
63
|
+
"""Conflict resolution rules."""
|
|
64
|
+
description: str = ""
|
|
65
|
+
rules: list[ConflictRule] = Field(default_factory=list)
|
|
66
|
+
escalation: dict[str, str] = Field(default_factory=dict)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class Constitution(BaseModel):
|
|
70
|
+
"""The ArkaOS Constitution — governance for the entire system."""
|
|
71
|
+
version: str
|
|
72
|
+
name: str
|
|
73
|
+
description: str = ""
|
|
74
|
+
|
|
75
|
+
enforcement_levels: dict = Field(default_factory=dict)
|
|
76
|
+
tier_hierarchy: dict = Field(default_factory=dict)
|
|
77
|
+
conflict_resolution: ConflictResolution = Field(default_factory=ConflictResolution)
|
|
78
|
+
amendments: dict = Field(default_factory=dict)
|
|
79
|
+
|
|
80
|
+
def get_non_negotiable_rules(self) -> list[Rule]:
|
|
81
|
+
"""Get all NON-NEGOTIABLE rules."""
|
|
82
|
+
nn = self.enforcement_levels.get("non_negotiable", {})
|
|
83
|
+
raw_rules = nn.get("rules", [])
|
|
84
|
+
return [Rule.model_validate(r) for r in raw_rules]
|
|
85
|
+
|
|
86
|
+
def get_must_rules(self) -> list[Rule]:
|
|
87
|
+
"""Get all MUST rules."""
|
|
88
|
+
must = self.enforcement_levels.get("must", {})
|
|
89
|
+
raw_rules = must.get("rules", [])
|
|
90
|
+
return [Rule.model_validate(r) for r in raw_rules]
|
|
91
|
+
|
|
92
|
+
def get_should_rules(self) -> list[Rule]:
|
|
93
|
+
"""Get all SHOULD rules."""
|
|
94
|
+
should = self.enforcement_levels.get("should", {})
|
|
95
|
+
raw_rules = should.get("rules", [])
|
|
96
|
+
return [Rule.model_validate(r) for r in raw_rules]
|
|
97
|
+
|
|
98
|
+
def get_rule_ids(self) -> list[str]:
|
|
99
|
+
"""Get all rule IDs across all enforcement levels."""
|
|
100
|
+
ids = []
|
|
101
|
+
for rules in [self.get_non_negotiable_rules(), self.get_must_rules(), self.get_should_rules()]:
|
|
102
|
+
ids.extend(r.id for r in rules)
|
|
103
|
+
return ids
|
|
104
|
+
|
|
105
|
+
def is_rule_non_negotiable(self, rule_id: str) -> bool:
|
|
106
|
+
"""Check if a rule is NON-NEGOTIABLE."""
|
|
107
|
+
return rule_id in [r.id for r in self.get_non_negotiable_rules()]
|
|
108
|
+
|
|
109
|
+
def compress_for_context(self) -> str:
|
|
110
|
+
"""Compress Constitution to a compact string for context injection.
|
|
111
|
+
|
|
112
|
+
This creates the L0 context layer that Synapse injects into every prompt.
|
|
113
|
+
"""
|
|
114
|
+
nn_ids = [r.id for r in self.get_non_negotiable_rules()]
|
|
115
|
+
must_ids = [r.id for r in self.get_must_rules()]
|
|
116
|
+
|
|
117
|
+
qg = self.enforcement_levels.get("quality_gate", {})
|
|
118
|
+
qg_agents = qg.get("agents", {})
|
|
119
|
+
orchestrator = qg_agents.get("orchestrator", {})
|
|
120
|
+
reviewers = qg_agents.get("reviewers", [])
|
|
121
|
+
|
|
122
|
+
qg_parts = []
|
|
123
|
+
if orchestrator:
|
|
124
|
+
qg_parts.append(orchestrator.get("id", ""))
|
|
125
|
+
for r in reviewers:
|
|
126
|
+
qg_parts.append(r.get("id", ""))
|
|
127
|
+
|
|
128
|
+
parts = [
|
|
129
|
+
f"[Constitution] NON-NEGOTIABLE: {', '.join(nn_ids)}",
|
|
130
|
+
f"QUALITY-GATE: {', '.join(qg_parts)}",
|
|
131
|
+
f"MUST: {', '.join(must_ids)}",
|
|
132
|
+
]
|
|
133
|
+
return " | ".join(parts)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def load_constitution(path: str | Path) -> Constitution:
|
|
137
|
+
"""Load Constitution from YAML file.
|
|
138
|
+
|
|
139
|
+
Args:
|
|
140
|
+
path: Path to constitution.yaml
|
|
141
|
+
|
|
142
|
+
Returns:
|
|
143
|
+
Validated Constitution instance.
|
|
144
|
+
"""
|
|
145
|
+
path = Path(path)
|
|
146
|
+
if not path.exists():
|
|
147
|
+
raise FileNotFoundError(f"Constitution file not found: {path}")
|
|
148
|
+
|
|
149
|
+
with open(path) as f:
|
|
150
|
+
data = yaml.safe_load(f)
|
|
151
|
+
|
|
152
|
+
return Constitution.model_validate(data)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Command registry — auto-generated from SKILL.md files."""
|
|
Binary file
|
|
Binary file
|