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,373 @@
|
|
|
1
|
+
"""Database of real-world advisor personas for The Conclave.
|
|
2
|
+
|
|
3
|
+
Each advisor has a complete behavioral DNA profile and codified mental models.
|
|
4
|
+
The database is used by the matcher to find aligned and contrarian advisors.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from core.agents.schema import (
|
|
8
|
+
BehavioralDNA, DISCProfile, DISCType,
|
|
9
|
+
EnneagramProfile, EnneagramType,
|
|
10
|
+
BigFiveProfile, MBTIProfile, MBTIType,
|
|
11
|
+
)
|
|
12
|
+
from core.conclave.schema import Advisor, AdvisorType, MentalModel
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _dna(disc_p: str, disc_s: str, enn_type: int, enn_wing: int,
|
|
16
|
+
o: int, c: int, e: int, a: int, n: int, mbti: str) -> BehavioralDNA:
|
|
17
|
+
"""Helper to create BehavioralDNA concisely."""
|
|
18
|
+
return BehavioralDNA(
|
|
19
|
+
disc=DISCProfile(primary=DISCType(disc_p), secondary=DISCType(disc_s)),
|
|
20
|
+
enneagram=EnneagramProfile(type=EnneagramType(enn_type), wing=enn_wing),
|
|
21
|
+
big_five=BigFiveProfile(openness=o, conscientiousness=c, extraversion=e, agreeableness=a, neuroticism=n),
|
|
22
|
+
mbti=MBTIProfile(type=MBTIType(mbti)),
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# --- The Advisor Database ---
|
|
27
|
+
|
|
28
|
+
ADVISORS: list[Advisor] = [
|
|
29
|
+
# === ANALYTICAL / STRATEGIC (C+D, D+C profiles) ===
|
|
30
|
+
|
|
31
|
+
Advisor(
|
|
32
|
+
id="charlie-munger",
|
|
33
|
+
name="Charlie Munger",
|
|
34
|
+
title="Vice Chairman, Berkshire Hathaway",
|
|
35
|
+
behavioral_dna=_dna("C", "D", 5, 6, 65, 90, 20, 30, 15, "ISTJ"),
|
|
36
|
+
mental_models=[
|
|
37
|
+
MentalModel(name="Inversion", question="How could this fail? What would guarantee failure?"),
|
|
38
|
+
MentalModel(name="Latticework of Mental Models", question="What models from other disciplines apply here?"),
|
|
39
|
+
MentalModel(name="Circle of Competence", question="Do I actually know enough about this to decide?"),
|
|
40
|
+
],
|
|
41
|
+
key_questions=["What's the downside?", "Am I treating the symptom or the disease?", "What would a smart person do?"],
|
|
42
|
+
communication_style="Blunt, witty, uses analogies from history and other fields",
|
|
43
|
+
decision_framework="Invert, always invert. Avoid stupidity rather than seeking brilliance.",
|
|
44
|
+
sources=["Poor Charlie's Almanack", "The Psychology of Human Misjudgment"],
|
|
45
|
+
),
|
|
46
|
+
|
|
47
|
+
Advisor(
|
|
48
|
+
id="ray-dalio",
|
|
49
|
+
name="Ray Dalio",
|
|
50
|
+
title="Founder, Bridgewater Associates",
|
|
51
|
+
behavioral_dna=_dna("D", "C", 5, 6, 75, 88, 45, 35, 20, "INTJ"),
|
|
52
|
+
mental_models=[
|
|
53
|
+
MentalModel(name="Principles-Based Decision", question="What principle applies to this situation?"),
|
|
54
|
+
MentalModel(name="Radical Transparency", question="Is everyone seeing the same reality?"),
|
|
55
|
+
MentalModel(name="Believability-Weighted Decisions", question="Who has the most relevant track record here?"),
|
|
56
|
+
],
|
|
57
|
+
key_questions=["What is the principle?", "Is this based on data or opinion?", "What does the machine look like?"],
|
|
58
|
+
communication_style="Systematic, principles-based, uses diagrams and frameworks",
|
|
59
|
+
decision_framework="Pain + Reflection = Progress. Diagnose root cause before designing solutions.",
|
|
60
|
+
sources=["Principles", "Principles for Dealing with the Changing World Order"],
|
|
61
|
+
),
|
|
62
|
+
|
|
63
|
+
Advisor(
|
|
64
|
+
id="naval-ravikant",
|
|
65
|
+
name="Naval Ravikant",
|
|
66
|
+
title="Co-founder, AngelList",
|
|
67
|
+
behavioral_dna=_dna("C", "D", 5, 6, 92, 60, 30, 45, 15, "INTP"),
|
|
68
|
+
mental_models=[
|
|
69
|
+
MentalModel(name="Leverage", question="Am I using code, media, or capital as leverage?"),
|
|
70
|
+
MentalModel(name="Specific Knowledge", question="What do I know that can't be easily taught?"),
|
|
71
|
+
MentalModel(name="First Principles", question="What is actually true here vs assumed?"),
|
|
72
|
+
],
|
|
73
|
+
key_questions=["Is this leveraged?", "Am I building equity or renting my time?", "What's the long game?"],
|
|
74
|
+
communication_style="Concise, philosophical, aphoristic, first-principles thinking",
|
|
75
|
+
decision_framework="Seek wealth (assets that earn while you sleep), not status (zero-sum game).",
|
|
76
|
+
sources=["The Almanack of Naval Ravikant", "How to Get Rich (tweetstorm)"],
|
|
77
|
+
),
|
|
78
|
+
|
|
79
|
+
# === VISIONARY / AMBITIOUS (D+I, I+D profiles) ===
|
|
80
|
+
|
|
81
|
+
Advisor(
|
|
82
|
+
id="elon-musk",
|
|
83
|
+
name="Elon Musk",
|
|
84
|
+
title="CEO, Tesla & SpaceX",
|
|
85
|
+
behavioral_dna=_dna("D", "C", 8, 7, 90, 70, 45, 25, 30, "INTJ"),
|
|
86
|
+
mental_models=[
|
|
87
|
+
MentalModel(name="First Principles (Physics)", question="What are the fundamental truths? Reason up from there."),
|
|
88
|
+
MentalModel(name="10x Thinking", question="How do we make this 10x better, not 10% better?"),
|
|
89
|
+
MentalModel(name="Manufacturing is the Product", question="Can we improve the process of making it?"),
|
|
90
|
+
],
|
|
91
|
+
key_questions=["What would the physics say?", "Why can't this be 10x better?", "What's the critical path?"],
|
|
92
|
+
communication_style="Direct, engineering-minded, ambitious scope, impatient with bureaucracy",
|
|
93
|
+
decision_framework="First principles reasoning. Question every requirement. Simplify, then optimize.",
|
|
94
|
+
sources=["Elon Musk biography (Isaacson)", "SpaceX/Tesla public talks"],
|
|
95
|
+
),
|
|
96
|
+
|
|
97
|
+
Advisor(
|
|
98
|
+
id="steve-jobs",
|
|
99
|
+
name="Steve Jobs",
|
|
100
|
+
title="Co-founder, Apple",
|
|
101
|
+
behavioral_dna=_dna("D", "I", 3, 4, 95, 72, 55, 20, 35, "ENTJ"),
|
|
102
|
+
mental_models=[
|
|
103
|
+
MentalModel(name="Intersection of Technology + Liberal Arts", question="Where does technology meet humanity?"),
|
|
104
|
+
MentalModel(name="Simplicity is Sophistication", question="What can we remove?"),
|
|
105
|
+
MentalModel(name="A-Players Hire A-Players", question="Is this person insanely great?"),
|
|
106
|
+
],
|
|
107
|
+
key_questions=["Is this insanely great?", "What would we remove?", "Does this make the user feel something?"],
|
|
108
|
+
communication_style="Passionate, demanding, reality distortion field, obsessed with craft",
|
|
109
|
+
decision_framework="Focus means saying no to 100 good ideas. Taste is the filter.",
|
|
110
|
+
sources=["Steve Jobs biography (Isaacson)", "Stanford commencement speech"],
|
|
111
|
+
),
|
|
112
|
+
|
|
113
|
+
# === PEOPLE-FOCUSED / EMPATHETIC (I+S, S+I profiles) ===
|
|
114
|
+
|
|
115
|
+
Advisor(
|
|
116
|
+
id="simon-sinek",
|
|
117
|
+
name="Simon Sinek",
|
|
118
|
+
title="Author, Start With Why",
|
|
119
|
+
behavioral_dna=_dna("I", "S", 2, 1, 82, 68, 75, 80, 25, "ENFJ"),
|
|
120
|
+
mental_models=[
|
|
121
|
+
MentalModel(name="Golden Circle", question="WHY are we doing this? (not what or how)"),
|
|
122
|
+
MentalModel(name="Infinite Game", question="Are we playing to win or playing to keep playing?"),
|
|
123
|
+
MentalModel(name="Leaders Eat Last", question="Am I putting my people first?"),
|
|
124
|
+
],
|
|
125
|
+
key_questions=["What's the WHY?", "Will people follow because they want to, or because they have to?"],
|
|
126
|
+
communication_style="Warm, purpose-driven, storytelling, asks 'why' repeatedly",
|
|
127
|
+
decision_framework="Start with why. People don't buy what you do, they buy why you do it.",
|
|
128
|
+
sources=["Start With Why", "The Infinite Game", "Leaders Eat Last"],
|
|
129
|
+
),
|
|
130
|
+
|
|
131
|
+
Advisor(
|
|
132
|
+
id="brene-brown",
|
|
133
|
+
name="Brene Brown",
|
|
134
|
+
title="Research Professor, University of Houston",
|
|
135
|
+
behavioral_dna=_dna("I", "S", 4, 3, 85, 72, 68, 82, 35, "ENFP"),
|
|
136
|
+
mental_models=[
|
|
137
|
+
MentalModel(name="Vulnerability as Strength", question="Am I being brave enough to be vulnerable?"),
|
|
138
|
+
MentalModel(name="Shame Resilience", question="Is shame driving this decision?"),
|
|
139
|
+
MentalModel(name="Courage over Comfort", question="Am I choosing courage or comfort?"),
|
|
140
|
+
],
|
|
141
|
+
key_questions=["Am I showing up authentically?", "What would I do if I weren't afraid?"],
|
|
142
|
+
communication_style="Empathetic, research-backed, storytelling, challenges ego-driven decisions",
|
|
143
|
+
decision_framework="Dare greatly. The credit belongs to the person in the arena.",
|
|
144
|
+
sources=["Dare to Lead", "Daring Greatly", "The Power of Vulnerability (TED)"],
|
|
145
|
+
),
|
|
146
|
+
|
|
147
|
+
# === PRACTICAL / EXECUTION (S+C, C+S profiles) ===
|
|
148
|
+
|
|
149
|
+
Advisor(
|
|
150
|
+
id="peter-drucker",
|
|
151
|
+
name="Peter Drucker",
|
|
152
|
+
title="Father of Modern Management",
|
|
153
|
+
behavioral_dna=_dna("C", "S", 1, 9, 78, 90, 40, 55, 15, "INTJ"),
|
|
154
|
+
mental_models=[
|
|
155
|
+
MentalModel(name="Effectiveness over Efficiency", question="Am I doing the right things, not just doing things right?"),
|
|
156
|
+
MentalModel(name="Management by Objectives", question="What are the measurable results we're after?"),
|
|
157
|
+
MentalModel(name="Knowledge Worker Productivity", question="What is the task? What should it be?"),
|
|
158
|
+
],
|
|
159
|
+
key_questions=["What needs to be done?", "What is right for the enterprise?", "What are the results?"],
|
|
160
|
+
communication_style="Thoughtful, Socratic, asks questions that reframe the problem",
|
|
161
|
+
decision_framework="The most important thing in communication is hearing what isn't said.",
|
|
162
|
+
sources=["The Effective Executive", "Management: Tasks, Responsibilities, Practices"],
|
|
163
|
+
),
|
|
164
|
+
|
|
165
|
+
Advisor(
|
|
166
|
+
id="jeff-bezos",
|
|
167
|
+
name="Jeff Bezos",
|
|
168
|
+
title="Founder, Amazon",
|
|
169
|
+
behavioral_dna=_dna("D", "C", 3, 2, 82, 85, 55, 30, 20, "ENTJ"),
|
|
170
|
+
mental_models=[
|
|
171
|
+
MentalModel(name="Day 1 Mentality", question="Are we acting like a startup or a bureaucracy?"),
|
|
172
|
+
MentalModel(name="Working Backwards (PR/FAQ)", question="Start from the customer and work backwards."),
|
|
173
|
+
MentalModel(name="Two-Way Door Decisions", question="Is this reversible? If yes, decide fast."),
|
|
174
|
+
],
|
|
175
|
+
key_questions=["What does the customer want?", "Is this a one-way or two-way door?", "What won't change in 10 years?"],
|
|
176
|
+
communication_style="Customer-obsessed, data-driven, long-term thinking, memo-based decisions",
|
|
177
|
+
decision_framework="High-velocity decisions. Most decisions are reversible — act fast. Few are irreversible — be careful.",
|
|
178
|
+
sources=["Bezos annual letters", "Invent and Wander", "Working Backwards"],
|
|
179
|
+
),
|
|
180
|
+
|
|
181
|
+
# === CREATIVE / UNCONVENTIONAL (Ne-dominant, high Openness) ===
|
|
182
|
+
|
|
183
|
+
Advisor(
|
|
184
|
+
id="derek-sivers",
|
|
185
|
+
name="Derek Sivers",
|
|
186
|
+
title="Founder, CD Baby",
|
|
187
|
+
behavioral_dna=_dna("S", "C", 9, 1, 95, 70, 25, 72, 20, "INFP"),
|
|
188
|
+
mental_models=[
|
|
189
|
+
MentalModel(name="Hell Yeah or No", question="Does this excite me enough to say 'hell yeah'? If not, say no."),
|
|
190
|
+
MentalModel(name="Useful Not True", question="Is this belief useful, even if I can't prove it's true?"),
|
|
191
|
+
MentalModel(name="Opposite May Also Be True", question="What if the opposite of this advice is equally valid?"),
|
|
192
|
+
],
|
|
193
|
+
key_questions=["Is this a 'hell yeah'?", "What would happen if I did the opposite?", "Am I overcomplicating this?"],
|
|
194
|
+
communication_style="Minimalist, contrarian, zen-like, challenges conventional wisdom gently",
|
|
195
|
+
decision_framework="If it's not a clear yes, it's a clear no. Do less, but do it fully.",
|
|
196
|
+
sources=["Anything You Want", "Hell Yeah or No", "How to Live", "sive.rs"],
|
|
197
|
+
),
|
|
198
|
+
|
|
199
|
+
Advisor(
|
|
200
|
+
id="nassim-taleb",
|
|
201
|
+
name="Nassim Nicholas Taleb",
|
|
202
|
+
title="Author, Incerto Series",
|
|
203
|
+
behavioral_dna=_dna("D", "C", 8, 7, 90, 65, 40, 22, 30, "INTJ"),
|
|
204
|
+
mental_models=[
|
|
205
|
+
MentalModel(name="Antifragility", question="Does this get stronger from volatility, or does it break?"),
|
|
206
|
+
MentalModel(name="Barbell Strategy", question="Am I combining extreme safety with small, high-upside bets?"),
|
|
207
|
+
MentalModel(name="Skin in the Game", question="Does the decision-maker bear the consequences?"),
|
|
208
|
+
],
|
|
209
|
+
key_questions=["What's the asymmetry?", "Is there skin in the game?", "Would this survive a Black Swan?"],
|
|
210
|
+
communication_style="Provocative, intellectual, disdains 'fragilistas' and central planners",
|
|
211
|
+
decision_framework="Via negativa: know what to avoid. Antifragile: gain from disorder.",
|
|
212
|
+
sources=["Antifragile", "The Black Swan", "Skin in the Game"],
|
|
213
|
+
),
|
|
214
|
+
|
|
215
|
+
Advisor(
|
|
216
|
+
id="seth-godin",
|
|
217
|
+
name="Seth Godin",
|
|
218
|
+
title="Author, Marketing Guru",
|
|
219
|
+
behavioral_dna=_dna("I", "C", 7, 6, 92, 75, 65, 65, 20, "ENFP"),
|
|
220
|
+
mental_models=[
|
|
221
|
+
MentalModel(name="Purple Cow", question="Is this remarkable enough that someone would remark on it?"),
|
|
222
|
+
MentalModel(name="Permission Marketing", question="Did they ask to hear from us?"),
|
|
223
|
+
MentalModel(name="Smallest Viable Audience", question="Who is this specifically for? (not everyone)"),
|
|
224
|
+
],
|
|
225
|
+
key_questions=["Is this remarkable?", "Who is it for?", "What change are we trying to make?"],
|
|
226
|
+
communication_style="Generous, provocative, short sentences, blog-post thinking",
|
|
227
|
+
decision_framework="Marketing is about the change you want to make in the world. Be missed if you were gone.",
|
|
228
|
+
sources=["Purple Cow", "This Is Marketing", "Tribes", "seths.blog"],
|
|
229
|
+
),
|
|
230
|
+
|
|
231
|
+
Advisor(
|
|
232
|
+
id="patrick-lencioni",
|
|
233
|
+
name="Patrick Lencioni",
|
|
234
|
+
title="Author, The Five Dysfunctions of a Team",
|
|
235
|
+
behavioral_dna=_dna("I", "S", 2, 1, 70, 78, 72, 80, 25, "ENFJ"),
|
|
236
|
+
mental_models=[
|
|
237
|
+
MentalModel(name="Vulnerability-Based Trust", question="Can people on this team admit mistakes and weaknesses?"),
|
|
238
|
+
MentalModel(name="Healthy Conflict", question="Are we having the debates we need to have?"),
|
|
239
|
+
MentalModel(name="Organizational Health > Smarts", question="Is the team healthy or just smart?"),
|
|
240
|
+
],
|
|
241
|
+
key_questions=["Do they trust each other?", "Can they disagree openly?", "Are results shared or individual?"],
|
|
242
|
+
communication_style="Warm, story-driven, uses fables to teach, accessible leadership advice",
|
|
243
|
+
decision_framework="The single greatest advantage is organizational health. It's free and available to anyone.",
|
|
244
|
+
sources=["The Five Dysfunctions of a Team", "The Advantage", "The Ideal Team Player"],
|
|
245
|
+
),
|
|
246
|
+
|
|
247
|
+
# === ADDITIONAL ADVISORS (expanding to 20) ===
|
|
248
|
+
|
|
249
|
+
Advisor(
|
|
250
|
+
id="warren-buffett",
|
|
251
|
+
name="Warren Buffett",
|
|
252
|
+
title="Chairman, Berkshire Hathaway",
|
|
253
|
+
behavioral_dna=_dna("S", "C", 5, 6, 55, 88, 40, 65, 15, "ISTJ"),
|
|
254
|
+
mental_models=[
|
|
255
|
+
MentalModel(name="Circle of Competence", question="Am I operating within what I truly understand?"),
|
|
256
|
+
MentalModel(name="Margin of Safety", question="What's the downside protection?"),
|
|
257
|
+
MentalModel(name="Economic Moat", question="What prevents competitors from eroding this advantage?"),
|
|
258
|
+
],
|
|
259
|
+
key_questions=["Would I buy the whole company?", "Can a fool run it?", "What's it worth in 10 years?"],
|
|
260
|
+
communication_style="Folksy, storytelling, uses simple metaphors for complex ideas",
|
|
261
|
+
decision_framework="Be fearful when others are greedy, greedy when others are fearful.",
|
|
262
|
+
sources=["Berkshire annual letters", "The Essays of Warren Buffett"],
|
|
263
|
+
),
|
|
264
|
+
|
|
265
|
+
Advisor(
|
|
266
|
+
id="reed-hastings",
|
|
267
|
+
name="Reed Hastings",
|
|
268
|
+
title="Co-founder, Netflix",
|
|
269
|
+
behavioral_dna=_dna("D", "I", 7, 8, 82, 70, 65, 45, 22, "ENTJ"),
|
|
270
|
+
mental_models=[
|
|
271
|
+
MentalModel(name="Talent Density", question="Is every person on this team a top performer?"),
|
|
272
|
+
MentalModel(name="Freedom & Responsibility", question="Can we remove a control and trust people instead?"),
|
|
273
|
+
MentalModel(name="Lead with Context Not Control", question="Am I giving context or giving orders?"),
|
|
274
|
+
],
|
|
275
|
+
key_questions=["Would I fight to keep this person?", "Is this rule necessary or just comfortable?"],
|
|
276
|
+
communication_style="Direct, culture-focused, challenges bureaucracy",
|
|
277
|
+
decision_framework="Increase talent density → increase candor → remove controls → repeat.",
|
|
278
|
+
sources=["No Rules Rules", "Netflix Culture Deck"],
|
|
279
|
+
),
|
|
280
|
+
|
|
281
|
+
Advisor(
|
|
282
|
+
id="marty-cagan",
|
|
283
|
+
name="Marty Cagan",
|
|
284
|
+
title="Founder, Silicon Valley Product Group",
|
|
285
|
+
behavioral_dna=_dna("C", "I", 1, 2, 80, 82, 55, 55, 20, "INTJ"),
|
|
286
|
+
mental_models=[
|
|
287
|
+
MentalModel(name="Empowered Teams", question="Does the team decide what to build, or just how?"),
|
|
288
|
+
MentalModel(name="Discovery Before Delivery", question="Have we validated this is worth building?"),
|
|
289
|
+
MentalModel(name="Product Trio", question="Are PM, design, and engineering working together?"),
|
|
290
|
+
],
|
|
291
|
+
key_questions=["Is this a feature team or an empowered team?", "What's the evidence customers want this?"],
|
|
292
|
+
communication_style="Authoritative, evidence-based, challenges roadmap-driven culture",
|
|
293
|
+
decision_framework="Fall in love with the problem, not the solution.",
|
|
294
|
+
sources=["Inspired", "Empowered", "Transformed"],
|
|
295
|
+
),
|
|
296
|
+
|
|
297
|
+
Advisor(
|
|
298
|
+
id="alex-hormozi",
|
|
299
|
+
name="Alex Hormozi",
|
|
300
|
+
title="Founder, Acquisition.com",
|
|
301
|
+
behavioral_dna=_dna("D", "C", 8, 7, 70, 80, 65, 35, 18, "ENTJ"),
|
|
302
|
+
mental_models=[
|
|
303
|
+
MentalModel(name="Value Equation", question="High dream outcome x high likelihood / low time x low effort?"),
|
|
304
|
+
MentalModel(name="Core Four Lead Gen", question="Am I using warm, cold, content, AND paid?"),
|
|
305
|
+
MentalModel(name="Grand Slam Offer", question="Is this offer so good people feel stupid saying no?"),
|
|
306
|
+
],
|
|
307
|
+
key_questions=["What would make this offer irresistible?", "What's the math per lead?"],
|
|
308
|
+
communication_style="Blunt, metric-driven, no-BS, teaches through frameworks and math",
|
|
309
|
+
decision_framework="Volume x leverage x skill x time = results. Do more, get better.",
|
|
310
|
+
sources=["$100M Offers", "$100M Leads"],
|
|
311
|
+
),
|
|
312
|
+
|
|
313
|
+
Advisor(
|
|
314
|
+
id="april-dunford",
|
|
315
|
+
name="April Dunford",
|
|
316
|
+
title="Positioning Expert",
|
|
317
|
+
behavioral_dna=_dna("C", "I", 5, 6, 78, 80, 55, 58, 20, "INTP"),
|
|
318
|
+
mental_models=[
|
|
319
|
+
MentalModel(name="5 Components of Positioning", question="Competitive alternatives, unique capabilities, value, target, category?"),
|
|
320
|
+
MentalModel(name="Obviously Awesome Test", question="Is it obvious what this is, who it's for, and why it's better?"),
|
|
321
|
+
MentalModel(name="Market Category Choice", question="What frame of reference makes our strengths most relevant?"),
|
|
322
|
+
],
|
|
323
|
+
key_questions=["What would they use if we didn't exist?", "What can we do that nobody else can?"],
|
|
324
|
+
communication_style="Precise, B2B-focused, cuts through vague positioning quickly",
|
|
325
|
+
decision_framework="Positioning is not what you say. It's the context that makes your value obvious.",
|
|
326
|
+
sources=["Obviously Awesome", "Sales Pitch"],
|
|
327
|
+
),
|
|
328
|
+
|
|
329
|
+
Advisor(
|
|
330
|
+
id="james-clear",
|
|
331
|
+
name="James Clear",
|
|
332
|
+
title="Author, Atomic Habits",
|
|
333
|
+
behavioral_dna=_dna("S", "C", 1, 9, 75, 85, 40, 70, 20, "INFJ"),
|
|
334
|
+
mental_models=[
|
|
335
|
+
MentalModel(name="1% Better Every Day", question="What's the smallest improvement I can make right now?"),
|
|
336
|
+
MentalModel(name="Systems Over Goals", question="Am I building a system or just chasing a goal?"),
|
|
337
|
+
MentalModel(name="Habit Stacking", question="What existing habit can I attach this new behavior to?"),
|
|
338
|
+
],
|
|
339
|
+
key_questions=["What system would produce this result automatically?", "Am I optimizing for the outcome or the identity?"],
|
|
340
|
+
communication_style="Clear, patient, uses concrete examples, builds from small to big",
|
|
341
|
+
decision_framework="You don't rise to the level of your goals. You fall to the level of your systems.",
|
|
342
|
+
sources=["Atomic Habits", "jamesclear.com"],
|
|
343
|
+
),
|
|
344
|
+
|
|
345
|
+
Advisor(
|
|
346
|
+
id="tim-ferriss",
|
|
347
|
+
name="Tim Ferriss",
|
|
348
|
+
title="Author, The 4-Hour Workweek",
|
|
349
|
+
behavioral_dna=_dna("D", "I", 7, 8, 90, 65, 60, 42, 30, "ENTP"),
|
|
350
|
+
mental_models=[
|
|
351
|
+
MentalModel(name="Fear-Setting", question="What's the worst that could happen? Can I recover?"),
|
|
352
|
+
MentalModel(name="Pareto Principle (80/20)", question="Which 20% of inputs produce 80% of results?"),
|
|
353
|
+
MentalModel(name="Minimum Effective Dose", question="What's the least I can do to get the desired result?"),
|
|
354
|
+
],
|
|
355
|
+
key_questions=["What would this look like if it were easy?", "Which tasks can I eliminate entirely?"],
|
|
356
|
+
communication_style="Experimental, frameworks-obsessed, challenges conventional wisdom with self-experiments",
|
|
357
|
+
decision_framework="What we fear doing most is usually what we most need to do.",
|
|
358
|
+
sources=["The 4-Hour Workweek", "Tools of Titans", "Tribe of Mentors"],
|
|
359
|
+
),
|
|
360
|
+
]
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
def get_all_advisors() -> list[Advisor]:
|
|
364
|
+
"""Get all available advisor personas."""
|
|
365
|
+
return ADVISORS.copy()
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
def get_advisor_by_id(advisor_id: str) -> Advisor | None:
|
|
369
|
+
"""Find an advisor by ID."""
|
|
370
|
+
for a in ADVISORS:
|
|
371
|
+
if a.id == advisor_id:
|
|
372
|
+
return a
|
|
373
|
+
return None
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"""Conclave display — format boards and profiles for output."""
|
|
2
|
+
|
|
3
|
+
from core.conclave.schema import UserProfile, Advisor, ConclaveBoard
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def format_dna_summary(user: UserProfile) -> str:
|
|
7
|
+
"""Format the user's behavioral DNA as a markdown table."""
|
|
8
|
+
dna = user.behavioral_dna
|
|
9
|
+
disc = f"{dna.disc.primary.value}+{dna.disc.secondary.value} ({dna.disc.label})"
|
|
10
|
+
enn = dna.enneagram.label
|
|
11
|
+
bf = (f"O:{dna.big_five.openness} C:{dna.big_five.conscientiousness} "
|
|
12
|
+
f"E:{dna.big_five.extraversion} A:{dna.big_five.agreeableness} "
|
|
13
|
+
f"N:{dna.big_five.neuroticism}")
|
|
14
|
+
mbti = dna.mbti.type.value
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
"## Your Behavioral DNA\n\n"
|
|
18
|
+
"| Framework | Result |\n"
|
|
19
|
+
"|-----------|--------|\n"
|
|
20
|
+
f"| DISC | {disc} |\n"
|
|
21
|
+
f"| Enneagram | {enn} |\n"
|
|
22
|
+
f"| Big Five | {bf} |\n"
|
|
23
|
+
f"| MBTI | {mbti} |\n"
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def format_advisor_card(advisor: Advisor, rank: int) -> str:
|
|
28
|
+
"""Format a single advisor as a card."""
|
|
29
|
+
disc = f"{advisor.behavioral_dna.disc.primary.value}+{advisor.behavioral_dna.disc.secondary.value}"
|
|
30
|
+
enn = advisor.behavioral_dna.enneagram.label
|
|
31
|
+
mbti = advisor.behavioral_dna.mbti.type.value
|
|
32
|
+
|
|
33
|
+
models = ", ".join(m.name for m in advisor.mental_models[:3])
|
|
34
|
+
questions = advisor.key_questions[0] if advisor.key_questions else ""
|
|
35
|
+
|
|
36
|
+
lines = [
|
|
37
|
+
f"**{rank}. {advisor.name}** — {advisor.title}",
|
|
38
|
+
f" {advisor.why_selected}",
|
|
39
|
+
f" DNA: {disc}, {enn}, {mbti}",
|
|
40
|
+
f" Models: {models}",
|
|
41
|
+
]
|
|
42
|
+
if questions:
|
|
43
|
+
lines.append(f' "{questions}"')
|
|
44
|
+
return "\n".join(lines)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def format_board(board: ConclaveBoard) -> str:
|
|
48
|
+
"""Format the complete Conclave board as markdown."""
|
|
49
|
+
parts = [format_dna_summary(board.user)]
|
|
50
|
+
|
|
51
|
+
parts.append("\n## Your Advisory Board\n")
|
|
52
|
+
|
|
53
|
+
parts.append("### ALIGNED — Think Like You\n")
|
|
54
|
+
for i, advisor in enumerate(board.aligned, 1):
|
|
55
|
+
parts.append(format_advisor_card(advisor, i))
|
|
56
|
+
parts.append("")
|
|
57
|
+
|
|
58
|
+
parts.append("\n### CONTRARIAN — Challenge Your Blind Spots\n")
|
|
59
|
+
for i, advisor in enumerate(board.contrarian, 1):
|
|
60
|
+
parts.append(format_advisor_card(advisor, i))
|
|
61
|
+
parts.append("")
|
|
62
|
+
|
|
63
|
+
return "\n".join(parts)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def format_advisor_detail(advisor: Advisor) -> str:
|
|
67
|
+
"""Format a deep dive on a single advisor."""
|
|
68
|
+
dna = advisor.behavioral_dna
|
|
69
|
+
disc = f"{dna.disc.primary.value}+{dna.disc.secondary.value} ({dna.disc.label})"
|
|
70
|
+
|
|
71
|
+
lines = [
|
|
72
|
+
f"# {advisor.name} — {advisor.title}\n",
|
|
73
|
+
f"**Type:** {advisor.advisor_type.value}",
|
|
74
|
+
f"**Match reason:** {advisor.why_selected}\n",
|
|
75
|
+
"## Behavioral DNA\n",
|
|
76
|
+
f"- DISC: {disc}",
|
|
77
|
+
f"- Enneagram: {dna.enneagram.label}",
|
|
78
|
+
f"- MBTI: {dna.mbti.type.value}",
|
|
79
|
+
f"- Big Five: O:{dna.big_five.openness} C:{dna.big_five.conscientiousness} "
|
|
80
|
+
f"E:{dna.big_five.extraversion} A:{dna.big_five.agreeableness} N:{dna.big_five.neuroticism}\n",
|
|
81
|
+
"## Mental Models\n",
|
|
82
|
+
]
|
|
83
|
+
|
|
84
|
+
for m in advisor.mental_models:
|
|
85
|
+
lines.append(f"**{m.name}**")
|
|
86
|
+
if m.question:
|
|
87
|
+
lines.append(f" Question: {m.question}")
|
|
88
|
+
lines.append("")
|
|
89
|
+
|
|
90
|
+
if advisor.key_questions:
|
|
91
|
+
lines.append("## Key Questions\n")
|
|
92
|
+
for q in advisor.key_questions:
|
|
93
|
+
lines.append(f'- "{q}"')
|
|
94
|
+
lines.append("")
|
|
95
|
+
|
|
96
|
+
lines.append(f"**Communication style:** {advisor.communication_style}")
|
|
97
|
+
lines.append(f"**Decision framework:** {advisor.decision_framework}\n")
|
|
98
|
+
|
|
99
|
+
if advisor.sources:
|
|
100
|
+
lines.append("## Sources\n")
|
|
101
|
+
for s in advisor.sources:
|
|
102
|
+
lines.append(f"- {s}")
|
|
103
|
+
|
|
104
|
+
return "\n".join(lines)
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"""Conclave matcher — selects 5 aligned + 5 contrarian advisors for a user.
|
|
2
|
+
|
|
3
|
+
The algorithm:
|
|
4
|
+
1. Score every advisor against the user's behavioral DNA
|
|
5
|
+
2. Sort by match score (high = similar, low = different)
|
|
6
|
+
3. Top 5 scores = aligned advisors (think like the user)
|
|
7
|
+
4. Bottom 5 scores = contrarian advisors (challenge the user)
|
|
8
|
+
5. Ensure at least 2 of 4 DNA frameworks differ for contrarians
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from core.conclave.schema import UserProfile, Advisor, AdvisorType, ConclaveBoard
|
|
12
|
+
from core.conclave.advisor_db import get_all_advisors
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def match_advisors(
|
|
16
|
+
user: UserProfile,
|
|
17
|
+
advisor_pool: list[Advisor] | None = None,
|
|
18
|
+
aligned_count: int = 5,
|
|
19
|
+
contrarian_count: int = 5,
|
|
20
|
+
) -> ConclaveBoard:
|
|
21
|
+
"""Match advisors to a user's behavioral DNA.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
user: The user's profile with behavioral DNA.
|
|
25
|
+
advisor_pool: Custom advisor pool (defaults to built-in database).
|
|
26
|
+
aligned_count: Number of aligned advisors (default 5).
|
|
27
|
+
contrarian_count: Number of contrarian advisors (default 5).
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
A ConclaveBoard with aligned and contrarian advisors.
|
|
31
|
+
"""
|
|
32
|
+
pool = advisor_pool or get_all_advisors()
|
|
33
|
+
|
|
34
|
+
# Score each advisor
|
|
35
|
+
scored = []
|
|
36
|
+
for advisor in pool:
|
|
37
|
+
score = advisor.match_score_to(user.behavioral_dna)
|
|
38
|
+
scored.append((score, advisor))
|
|
39
|
+
|
|
40
|
+
# Sort by score: highest first
|
|
41
|
+
scored.sort(key=lambda x: x[0], reverse=True)
|
|
42
|
+
|
|
43
|
+
# Top N = aligned (most similar to user)
|
|
44
|
+
aligned = []
|
|
45
|
+
for score, advisor in scored[:aligned_count]:
|
|
46
|
+
advisor = advisor.model_copy()
|
|
47
|
+
advisor.advisor_type = AdvisorType.ALIGNED
|
|
48
|
+
advisor.why_selected = (
|
|
49
|
+
f"Match score {score:.0%} — similar thinking style to yours"
|
|
50
|
+
)
|
|
51
|
+
aligned.append(advisor)
|
|
52
|
+
|
|
53
|
+
# Bottom N = contrarian (most different from user)
|
|
54
|
+
contrarian = []
|
|
55
|
+
for score, advisor in scored[-contrarian_count:]:
|
|
56
|
+
advisor = advisor.model_copy()
|
|
57
|
+
advisor.advisor_type = AdvisorType.CONTRARIAN
|
|
58
|
+
advisor.why_selected = (
|
|
59
|
+
f"Match score {score:.0%} — challenges your blind spots"
|
|
60
|
+
)
|
|
61
|
+
contrarian.append(advisor)
|
|
62
|
+
|
|
63
|
+
return ConclaveBoard(
|
|
64
|
+
user=user,
|
|
65
|
+
aligned=aligned,
|
|
66
|
+
contrarian=contrarian,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def explain_match(user: UserProfile, advisor: Advisor) -> dict:
|
|
71
|
+
"""Explain why a specific advisor was matched.
|
|
72
|
+
|
|
73
|
+
Returns a dict with dimension-by-dimension comparison.
|
|
74
|
+
"""
|
|
75
|
+
u = user.behavioral_dna
|
|
76
|
+
a = advisor.behavioral_dna
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
"advisor": advisor.name,
|
|
80
|
+
"type": advisor.advisor_type.value,
|
|
81
|
+
"overall_score": advisor.match_score_to(u),
|
|
82
|
+
"disc": {
|
|
83
|
+
"user": f"{u.disc.primary.value}+{u.disc.secondary.value}",
|
|
84
|
+
"advisor": f"{a.disc.primary.value}+{a.disc.secondary.value}",
|
|
85
|
+
"match": u.disc.primary == a.disc.primary,
|
|
86
|
+
},
|
|
87
|
+
"enneagram": {
|
|
88
|
+
"user": f"{u.enneagram.type.value}w{u.enneagram.wing}",
|
|
89
|
+
"advisor": f"{a.enneagram.type.value}w{a.enneagram.wing}",
|
|
90
|
+
"same_center": u.enneagram.center == a.enneagram.center,
|
|
91
|
+
},
|
|
92
|
+
"big_five_diff": {
|
|
93
|
+
"openness": abs(u.big_five.openness - a.big_five.openness),
|
|
94
|
+
"conscientiousness": abs(u.big_five.conscientiousness - a.big_five.conscientiousness),
|
|
95
|
+
"extraversion": abs(u.big_five.extraversion - a.big_five.extraversion),
|
|
96
|
+
"agreeableness": abs(u.big_five.agreeableness - a.big_five.agreeableness),
|
|
97
|
+
"neuroticism": abs(u.big_five.neuroticism - a.big_five.neuroticism),
|
|
98
|
+
},
|
|
99
|
+
"mbti": {
|
|
100
|
+
"user": u.mbti.type.value,
|
|
101
|
+
"advisor": a.mbti.type.value,
|
|
102
|
+
"same_dominant": u.mbti.dominant == a.mbti.dominant,
|
|
103
|
+
},
|
|
104
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""Conclave persistence — save/load user profiles and boards."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Optional
|
|
6
|
+
|
|
7
|
+
from core.conclave.schema import UserProfile, ConclaveBoard, Advisor
|
|
8
|
+
from core.conclave.matcher import match_advisors
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
DEFAULT_PROFILE_PATH = Path.home() / ".arkaos" / "conclave-profile.json"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def save_profile(board: ConclaveBoard, path: str | Path = "") -> None:
|
|
15
|
+
"""Save a ConclaveBoard (user profile + matched advisors) to JSON."""
|
|
16
|
+
path = Path(path) if path else DEFAULT_PROFILE_PATH
|
|
17
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
18
|
+
|
|
19
|
+
data = {
|
|
20
|
+
"user": board.user.model_dump(mode="json"),
|
|
21
|
+
"aligned": [a.model_dump(mode="json") for a in board.aligned],
|
|
22
|
+
"contrarian": [a.model_dump(mode="json") for a in board.contrarian],
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
with open(path, "w") as f:
|
|
26
|
+
json.dump(data, f, indent=2, ensure_ascii=False)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def load_profile(path: str | Path = "") -> Optional[ConclaveBoard]:
|
|
30
|
+
"""Load a saved ConclaveBoard from JSON. Returns None if not found."""
|
|
31
|
+
path = Path(path) if path else DEFAULT_PROFILE_PATH
|
|
32
|
+
|
|
33
|
+
if not path.exists():
|
|
34
|
+
return None
|
|
35
|
+
|
|
36
|
+
content = path.read_text().strip()
|
|
37
|
+
if not content:
|
|
38
|
+
return None
|
|
39
|
+
|
|
40
|
+
data = json.loads(content)
|
|
41
|
+
|
|
42
|
+
user = UserProfile.model_validate(data["user"])
|
|
43
|
+
aligned = [Advisor.model_validate(a) for a in data.get("aligned", [])]
|
|
44
|
+
contrarian = [Advisor.model_validate(a) for a in data.get("contrarian", [])]
|
|
45
|
+
|
|
46
|
+
return ConclaveBoard(user=user, aligned=aligned, contrarian=contrarian)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def profile_exists(path: str | Path = "") -> bool:
|
|
50
|
+
"""Check if a saved profile exists."""
|
|
51
|
+
path = Path(path) if path else DEFAULT_PROFILE_PATH
|
|
52
|
+
return path.exists() and path.stat().st_size > 0
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def delete_profile(path: str | Path = "") -> bool:
|
|
56
|
+
"""Delete a saved profile."""
|
|
57
|
+
path = Path(path) if path else DEFAULT_PROFILE_PATH
|
|
58
|
+
if path.exists():
|
|
59
|
+
path.unlink()
|
|
60
|
+
return True
|
|
61
|
+
return False
|