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.
Files changed (486) hide show
  1. package/CONSTITUTION.md +81 -0
  2. package/LICENSE +21 -0
  3. package/README.md +154 -0
  4. package/VERSION +1 -0
  5. package/arka/SKILL.md +134 -0
  6. package/bin/arkaos +107 -0
  7. package/config/constitution.yaml +168 -0
  8. package/config/hooks/post-tool-use-v2.sh +116 -0
  9. package/config/hooks/post-tool-use.sh +188 -0
  10. package/config/hooks/pre-compact-v2.sh +43 -0
  11. package/config/hooks/pre-compact.sh +99 -0
  12. package/config/hooks/user-prompt-submit-v2.sh +119 -0
  13. package/config/hooks/user-prompt-submit.sh +312 -0
  14. package/core/__init__.py +3 -0
  15. package/core/__pycache__/__init__.cpython-313.pyc +0 -0
  16. package/core/agents/__init__.py +14 -0
  17. package/core/agents/__pycache__/__init__.cpython-313.pyc +0 -0
  18. package/core/agents/__pycache__/loader.cpython-313.pyc +0 -0
  19. package/core/agents/__pycache__/registry_gen.cpython-313.pyc +0 -0
  20. package/core/agents/__pycache__/schema.cpython-313.pyc +0 -0
  21. package/core/agents/__pycache__/validator.cpython-313.pyc +0 -0
  22. package/core/agents/loader.py +88 -0
  23. package/core/agents/registry_gen.py +118 -0
  24. package/core/agents/schema.py +265 -0
  25. package/core/agents/validator.py +141 -0
  26. package/core/conclave/__init__.py +12 -0
  27. package/core/conclave/__pycache__/__init__.cpython-313.pyc +0 -0
  28. package/core/conclave/__pycache__/advisor_db.cpython-313.pyc +0 -0
  29. package/core/conclave/__pycache__/display.cpython-313.pyc +0 -0
  30. package/core/conclave/__pycache__/matcher.cpython-313.pyc +0 -0
  31. package/core/conclave/__pycache__/persistence.cpython-313.pyc +0 -0
  32. package/core/conclave/__pycache__/profiler.cpython-313.pyc +0 -0
  33. package/core/conclave/__pycache__/prompts.cpython-313.pyc +0 -0
  34. package/core/conclave/__pycache__/schema.cpython-313.pyc +0 -0
  35. package/core/conclave/advisor_db.py +373 -0
  36. package/core/conclave/display.py +104 -0
  37. package/core/conclave/matcher.py +104 -0
  38. package/core/conclave/persistence.py +61 -0
  39. package/core/conclave/profiler.py +298 -0
  40. package/core/conclave/prompts.py +77 -0
  41. package/core/conclave/schema.py +132 -0
  42. package/core/governance/__init__.py +5 -0
  43. package/core/governance/__pycache__/__init__.cpython-313.pyc +0 -0
  44. package/core/governance/__pycache__/constitution.cpython-313.pyc +0 -0
  45. package/core/governance/constitution.py +152 -0
  46. package/core/registry/__init__.py +1 -0
  47. package/core/registry/__pycache__/__init__.cpython-313.pyc +0 -0
  48. package/core/registry/__pycache__/generator.cpython-313.pyc +0 -0
  49. package/core/registry/generator.py +199 -0
  50. package/core/runtime/__init__.py +6 -0
  51. package/core/runtime/__pycache__/__init__.cpython-313.pyc +0 -0
  52. package/core/runtime/__pycache__/base.cpython-313.pyc +0 -0
  53. package/core/runtime/__pycache__/claude_code.cpython-313.pyc +0 -0
  54. package/core/runtime/__pycache__/codex_cli.cpython-313.pyc +0 -0
  55. package/core/runtime/__pycache__/cursor.cpython-313.pyc +0 -0
  56. package/core/runtime/__pycache__/gemini_cli.cpython-313.pyc +0 -0
  57. package/core/runtime/__pycache__/registry.cpython-313.pyc +0 -0
  58. package/core/runtime/__pycache__/subagent.cpython-313.pyc +0 -0
  59. package/core/runtime/base.py +143 -0
  60. package/core/runtime/claude_code.py +104 -0
  61. package/core/runtime/codex_cli.py +71 -0
  62. package/core/runtime/cursor.py +71 -0
  63. package/core/runtime/gemini_cli.py +68 -0
  64. package/core/runtime/registry.py +86 -0
  65. package/core/runtime/subagent.py +201 -0
  66. package/core/specs/__init__.py +10 -0
  67. package/core/specs/__pycache__/__init__.cpython-313.pyc +0 -0
  68. package/core/specs/__pycache__/manager.cpython-313.pyc +0 -0
  69. package/core/specs/__pycache__/schema.cpython-313.pyc +0 -0
  70. package/core/specs/manager.py +164 -0
  71. package/core/specs/schema.py +199 -0
  72. package/core/squads/__init__.py +7 -0
  73. package/core/squads/__pycache__/__init__.cpython-313.pyc +0 -0
  74. package/core/squads/__pycache__/loader.cpython-313.pyc +0 -0
  75. package/core/squads/__pycache__/registry.cpython-313.pyc +0 -0
  76. package/core/squads/__pycache__/schema.cpython-313.pyc +0 -0
  77. package/core/squads/loader.py +40 -0
  78. package/core/squads/registry.py +145 -0
  79. package/core/squads/schema.py +93 -0
  80. package/core/synapse/__init__.py +11 -0
  81. package/core/synapse/__pycache__/__init__.cpython-313.pyc +0 -0
  82. package/core/synapse/__pycache__/cache.cpython-313.pyc +0 -0
  83. package/core/synapse/__pycache__/engine.cpython-313.pyc +0 -0
  84. package/core/synapse/__pycache__/layers.cpython-313.pyc +0 -0
  85. package/core/synapse/cache.py +82 -0
  86. package/core/synapse/engine.py +184 -0
  87. package/core/synapse/layers.py +441 -0
  88. package/core/tasks/__init__.py +6 -0
  89. package/core/tasks/__pycache__/__init__.cpython-313.pyc +0 -0
  90. package/core/tasks/__pycache__/manager.cpython-313.pyc +0 -0
  91. package/core/tasks/__pycache__/schema.cpython-313.pyc +0 -0
  92. package/core/tasks/manager.py +150 -0
  93. package/core/tasks/schema.py +108 -0
  94. package/core/workflow/__init__.py +10 -0
  95. package/core/workflow/__pycache__/__init__.cpython-313.pyc +0 -0
  96. package/core/workflow/__pycache__/engine.cpython-313.pyc +0 -0
  97. package/core/workflow/__pycache__/loader.cpython-313.pyc +0 -0
  98. package/core/workflow/__pycache__/schema.cpython-313.pyc +0 -0
  99. package/core/workflow/engine.py +216 -0
  100. package/core/workflow/loader.py +28 -0
  101. package/core/workflow/schema.py +129 -0
  102. package/departments/brand/SKILL.md +85 -0
  103. package/departments/brand/agents/brand-director.yaml +77 -0
  104. package/departments/brand/agents/brand-strategist.md +182 -0
  105. package/departments/brand/agents/brand-strategist.yaml +58 -0
  106. package/departments/brand/agents/creative-director.md +149 -0
  107. package/departments/brand/agents/motion-designer.md +113 -0
  108. package/departments/brand/agents/ux-designer.yaml +60 -0
  109. package/departments/brand/agents/visual-designer.md +187 -0
  110. package/departments/brand/agents/visual-designer.yaml +58 -0
  111. package/departments/brand/references/brand-creation-guide.md +559 -0
  112. package/departments/brand/scripts/provider-call.sh +262 -0
  113. package/departments/brand/skills/archetype-finder/SKILL.md +18 -0
  114. package/departments/brand/skills/colors/SKILL.md +18 -0
  115. package/departments/brand/skills/design-system/SKILL.md +18 -0
  116. package/departments/brand/skills/identity-system/SKILL.md +18 -0
  117. package/departments/brand/skills/logo-brief/SKILL.md +18 -0
  118. package/departments/brand/skills/mockup-generate/SKILL.md +18 -0
  119. package/departments/brand/skills/naming-evaluate/SKILL.md +50 -0
  120. package/departments/brand/skills/positioning-statement/SKILL.md +18 -0
  121. package/departments/brand/skills/primal-audit/SKILL.md +43 -0
  122. package/departments/brand/skills/ux-audit/SKILL.md +18 -0
  123. package/departments/brand/skills/voice-guide/SKILL.md +18 -0
  124. package/departments/brand/skills/wireframe/SKILL.md +18 -0
  125. package/departments/brand/squad.yaml +39 -0
  126. package/departments/brand/workflows/identity.yaml +113 -0
  127. package/departments/brand/workflows/naming.yaml +58 -0
  128. package/departments/community/SKILL.md +62 -0
  129. package/departments/community/agents/community-manager.yaml +57 -0
  130. package/departments/community/agents/community-strategist.yaml +74 -0
  131. package/departments/community/agents/engagement-designer.yaml +56 -0
  132. package/departments/community/skills/ai-community/SKILL.md +18 -0
  133. package/departments/community/skills/betting-setup/SKILL.md +18 -0
  134. package/departments/community/skills/business-model/SKILL.md +53 -0
  135. package/departments/community/skills/content-calendar/SKILL.md +18 -0
  136. package/departments/community/skills/events-plan/SKILL.md +18 -0
  137. package/departments/community/skills/gamification-design/SKILL.md +18 -0
  138. package/departments/community/skills/growth-plan/SKILL.md +18 -0
  139. package/departments/community/skills/metrics-track/SKILL.md +18 -0
  140. package/departments/community/skills/moderation/SKILL.md +18 -0
  141. package/departments/community/skills/monetize-plan/SKILL.md +18 -0
  142. package/departments/community/skills/niche-setup/SKILL.md +18 -0
  143. package/departments/community/skills/onboarding-flow/SKILL.md +18 -0
  144. package/departments/community/skills/platform-select/SKILL.md +18 -0
  145. package/departments/community/skills/retention-system/SKILL.md +48 -0
  146. package/departments/community/squad.yaml +32 -0
  147. package/departments/community/workflows/setup.yaml +62 -0
  148. package/departments/content/SKILL.md +65 -0
  149. package/departments/content/agents/content-strategist.yaml +74 -0
  150. package/departments/content/agents/repurpose-distributor.yaml +57 -0
  151. package/departments/content/agents/scriptwriter.yaml +56 -0
  152. package/departments/content/agents/viral-engineer.yaml +56 -0
  153. package/departments/content/skills/ai-workflow/SKILL.md +18 -0
  154. package/departments/content/skills/analytics/SKILL.md +18 -0
  155. package/departments/content/skills/calendar/SKILL.md +18 -0
  156. package/departments/content/skills/content-system/SKILL.md +75 -0
  157. package/departments/content/skills/hook-write/SKILL.md +43 -0
  158. package/departments/content/skills/monetization-plan/SKILL.md +18 -0
  159. package/departments/content/skills/newsletter-write/SKILL.md +18 -0
  160. package/departments/content/skills/platform-optimize/SKILL.md +18 -0
  161. package/departments/content/skills/repurpose-plan/SKILL.md +18 -0
  162. package/departments/content/skills/script-structure/SKILL.md +18 -0
  163. package/departments/content/skills/short-form/SKILL.md +18 -0
  164. package/departments/content/skills/thumbnail-package/SKILL.md +18 -0
  165. package/departments/content/skills/viral-design/SKILL.md +45 -0
  166. package/departments/content/skills/youtube-strategy/SKILL.md +18 -0
  167. package/departments/content/squad.yaml +39 -0
  168. package/departments/content/workflows/viral.yaml +99 -0
  169. package/departments/dev/SKILL.md +135 -0
  170. package/departments/dev/agents/analyst.md +184 -0
  171. package/departments/dev/agents/architect.md +184 -0
  172. package/departments/dev/agents/architect.yaml +74 -0
  173. package/departments/dev/agents/backend-dev.yaml +70 -0
  174. package/departments/dev/agents/cto.md +140 -0
  175. package/departments/dev/agents/cto.yaml +77 -0
  176. package/departments/dev/agents/dba.yaml +72 -0
  177. package/departments/dev/agents/devops-eng.yaml +72 -0
  178. package/departments/dev/agents/devops.md +204 -0
  179. package/departments/dev/agents/frontend-dev.md +213 -0
  180. package/departments/dev/agents/frontend-dev.yaml +71 -0
  181. package/departments/dev/agents/qa-eng.yaml +72 -0
  182. package/departments/dev/agents/qa.md +231 -0
  183. package/departments/dev/agents/security-eng.yaml +72 -0
  184. package/departments/dev/agents/security.md +174 -0
  185. package/departments/dev/agents/senior-dev.md +177 -0
  186. package/departments/dev/agents/tech-lead.md +188 -0
  187. package/departments/dev/agents/tech-lead.yaml +72 -0
  188. package/departments/dev/skills/adversarial-review/SKILL.md +117 -0
  189. package/departments/dev/skills/agent-design/SKILL.md +127 -0
  190. package/departments/dev/skills/agent-workflow/SKILL.md +116 -0
  191. package/departments/dev/skills/ai-assisted-dev/SKILL.md +18 -0
  192. package/departments/dev/skills/ai-security/SKILL.md +112 -0
  193. package/departments/dev/skills/api-design/SKILL.md +59 -0
  194. package/departments/dev/skills/architecture-design/SKILL.md +89 -0
  195. package/departments/dev/skills/changelog/SKILL.md +110 -0
  196. package/departments/dev/skills/ci-cd-pipeline/SKILL.md +130 -0
  197. package/departments/dev/skills/clean-code-review/SKILL.md +65 -0
  198. package/departments/dev/skills/code-review/SKILL.md +18 -0
  199. package/departments/dev/skills/codebase-onboard/SKILL.md +109 -0
  200. package/departments/dev/skills/db-design/SKILL.md +18 -0
  201. package/departments/dev/skills/db-schema/SKILL.md +130 -0
  202. package/departments/dev/skills/ddd-model/SKILL.md +18 -0
  203. package/departments/dev/skills/dependency-audit/SKILL.md +118 -0
  204. package/departments/dev/skills/deploy/SKILL.md +18 -0
  205. package/departments/dev/skills/devops-pipeline/SKILL.md +18 -0
  206. package/departments/dev/skills/docs/SKILL.md +18 -0
  207. package/departments/dev/skills/env-secrets/SKILL.md +89 -0
  208. package/departments/dev/skills/incident/SKILL.md +125 -0
  209. package/departments/dev/skills/mcp/SKILL.md +106 -0
  210. package/departments/dev/skills/mcp-builder/SKILL.md +121 -0
  211. package/departments/dev/skills/observability/SKILL.md +119 -0
  212. package/departments/dev/skills/onboard/SKILL.md +389 -0
  213. package/departments/dev/skills/onboard/scripts/detect-stack.py +472 -0
  214. package/departments/dev/skills/performance-audit/SKILL.md +49 -0
  215. package/departments/dev/skills/performance-profiler/SKILL.md +128 -0
  216. package/departments/dev/skills/rag-architect/SKILL.md +125 -0
  217. package/departments/dev/skills/red-team/SKILL.md +112 -0
  218. package/departments/dev/skills/refactor-plan/SKILL.md +18 -0
  219. package/departments/dev/skills/release/SKILL.md +130 -0
  220. package/departments/dev/skills/research/SKILL.md +18 -0
  221. package/departments/dev/skills/runbook/SKILL.md +103 -0
  222. package/departments/dev/skills/scaffold/SKILL.md +249 -0
  223. package/departments/dev/skills/security-audit/SKILL.md +68 -0
  224. package/departments/dev/skills/skill-audit/SKILL.md +96 -0
  225. package/departments/dev/skills/spec/SKILL.md +218 -0
  226. package/departments/dev/skills/stack-check/SKILL.md +18 -0
  227. package/departments/dev/skills/tdd-cycle/SKILL.md +56 -0
  228. package/departments/dev/skills/tech-debt/SKILL.md +100 -0
  229. package/departments/dev/squad.yaml +62 -0
  230. package/departments/dev/workflows/debug.yaml +63 -0
  231. package/departments/dev/workflows/feature.yaml +129 -0
  232. package/departments/dev/workflows/refactor.yaml +64 -0
  233. package/departments/ecom/SKILL.md +39 -0
  234. package/departments/ecom/agents/commerce-engineer.yaml +58 -0
  235. package/departments/ecom/agents/cro-specialist.yaml +56 -0
  236. package/departments/ecom/agents/ecom-director.yaml +73 -0
  237. package/departments/ecom/agents/retention-manager.yaml +59 -0
  238. package/departments/ecom/skills/analytics/SKILL.md +18 -0
  239. package/departments/ecom/skills/cart-recovery/SKILL.md +18 -0
  240. package/departments/ecom/skills/cro-optimize/SKILL.md +58 -0
  241. package/departments/ecom/skills/customer-journey/SKILL.md +18 -0
  242. package/departments/ecom/skills/fulfillment-plan/SKILL.md +18 -0
  243. package/departments/ecom/skills/marketplace-manage/SKILL.md +18 -0
  244. package/departments/ecom/skills/pricing-strategy/SKILL.md +18 -0
  245. package/departments/ecom/skills/product-launch/SKILL.md +18 -0
  246. package/departments/ecom/skills/rfm-segment/SKILL.md +44 -0
  247. package/departments/ecom/skills/social-commerce/SKILL.md +18 -0
  248. package/departments/ecom/skills/store-audit/SKILL.md +18 -0
  249. package/departments/ecom/skills/subscription-model/SKILL.md +18 -0
  250. package/departments/ecom/squad.yaml +39 -0
  251. package/departments/ecom/workflows/product-page.yaml +62 -0
  252. package/departments/ecommerce/SKILL.md +363 -0
  253. package/departments/ecommerce/agents/ecommerce-manager.md +91 -0
  254. package/departments/finance/SKILL.md +37 -0
  255. package/departments/finance/agents/cfo.md +85 -0
  256. package/departments/finance/agents/cfo.yaml +77 -0
  257. package/departments/finance/agents/financial-analyst.yaml +57 -0
  258. package/departments/finance/agents/investment-strategist.yaml +58 -0
  259. package/departments/finance/skills/budget-plan/SKILL.md +18 -0
  260. package/departments/finance/skills/cashflow-forecast/SKILL.md +18 -0
  261. package/departments/finance/skills/ciso-advisor/SKILL.md +113 -0
  262. package/departments/finance/skills/financial-model/SKILL.md +70 -0
  263. package/departments/finance/skills/pitch-deck/SKILL.md +18 -0
  264. package/departments/finance/skills/scenario-analysis/SKILL.md +18 -0
  265. package/departments/finance/skills/unit-economics/SKILL.md +44 -0
  266. package/departments/finance/skills/valuation-model/SKILL.md +18 -0
  267. package/departments/finance/squad.yaml +37 -0
  268. package/departments/finance/workflows/cashflow.yaml +47 -0
  269. package/departments/finance/workflows/model.yaml +83 -0
  270. package/departments/kb/SKILL.md +38 -0
  271. package/departments/kb/agents/knowledge-curator.yaml +60 -0
  272. package/departments/kb/agents/knowledge-director.yaml +72 -0
  273. package/departments/kb/agents/research-analyst.yaml +58 -0
  274. package/departments/kb/skills/ai-research/SKILL.md +18 -0
  275. package/departments/kb/skills/competitive-intel/SKILL.md +18 -0
  276. package/departments/kb/skills/knowledge-review/SKILL.md +18 -0
  277. package/departments/kb/skills/learn-content/SKILL.md +18 -0
  278. package/departments/kb/skills/moc-create/SKILL.md +18 -0
  279. package/departments/kb/skills/persona-build/SKILL.md +18 -0
  280. package/departments/kb/skills/research-plan/SKILL.md +51 -0
  281. package/departments/kb/skills/search-kb/SKILL.md +18 -0
  282. package/departments/kb/skills/source-evaluate/SKILL.md +18 -0
  283. package/departments/kb/skills/taxonomy-manage/SKILL.md +18 -0
  284. package/departments/kb/skills/write-as-persona/SKILL.md +18 -0
  285. package/departments/kb/skills/zettelkasten-process/SKILL.md +56 -0
  286. package/departments/kb/squad.yaml +34 -0
  287. package/departments/kb/workflows/learn.yaml +63 -0
  288. package/departments/knowledge/SKILL.md +474 -0
  289. package/departments/knowledge/agents/knowledge-curator.md +89 -0
  290. package/departments/knowledge/scripts/kb-check-capabilities.sh +143 -0
  291. package/departments/knowledge/scripts/kb-cleanup.sh +135 -0
  292. package/departments/knowledge/scripts/kb-queue.sh +156 -0
  293. package/departments/knowledge/scripts/kb-status.sh +195 -0
  294. package/departments/knowledge/scripts/kb-worker.sh +217 -0
  295. package/departments/landing/SKILL.md +65 -0
  296. package/departments/landing/agents/affiliate-manager.yaml +57 -0
  297. package/departments/landing/agents/conversion-strategist.yaml +74 -0
  298. package/departments/landing/agents/cro-specialist.yaml +58 -0
  299. package/departments/landing/agents/sales-copywriter.yaml +61 -0
  300. package/departments/landing/skills/ab-test/SKILL.md +18 -0
  301. package/departments/landing/skills/affiliate-bridge/SKILL.md +18 -0
  302. package/departments/landing/skills/awareness-diagnose/SKILL.md +18 -0
  303. package/departments/landing/skills/copy-framework/SKILL.md +55 -0
  304. package/departments/landing/skills/email-sequence/SKILL.md +18 -0
  305. package/departments/landing/skills/funnel-design/SKILL.md +49 -0
  306. package/departments/landing/skills/funnel-metrics/SKILL.md +18 -0
  307. package/departments/landing/skills/headline-write/SKILL.md +18 -0
  308. package/departments/landing/skills/landing-gen/SKILL.md +124 -0
  309. package/departments/landing/skills/launch-sequence/SKILL.md +18 -0
  310. package/departments/landing/skills/offer-create/SKILL.md +62 -0
  311. package/departments/landing/skills/optimize-page/SKILL.md +18 -0
  312. package/departments/landing/skills/page-architect/SKILL.md +18 -0
  313. package/departments/landing/skills/persuasion-apply/SKILL.md +18 -0
  314. package/departments/landing/skills/webinar-funnel/SKILL.md +18 -0
  315. package/departments/landing/squad.yaml +39 -0
  316. package/departments/landing/workflows/launch.yaml +72 -0
  317. package/departments/landing/workflows/offer.yaml +99 -0
  318. package/departments/leadership/SKILL.md +35 -0
  319. package/departments/leadership/agents/culture-coach.yaml +59 -0
  320. package/departments/leadership/agents/hr-specialist.yaml +57 -0
  321. package/departments/leadership/agents/leadership-director.yaml +72 -0
  322. package/departments/leadership/skills/change-manage/SKILL.md +18 -0
  323. package/departments/leadership/skills/conflict-resolve/SKILL.md +18 -0
  324. package/departments/leadership/skills/culture-audit/SKILL.md +18 -0
  325. package/departments/leadership/skills/delegation-matrix/SKILL.md +18 -0
  326. package/departments/leadership/skills/disc-assess/SKILL.md +18 -0
  327. package/departments/leadership/skills/feedback-give/SKILL.md +18 -0
  328. package/departments/leadership/skills/hiring-plan/SKILL.md +18 -0
  329. package/departments/leadership/skills/okr-define/SKILL.md +69 -0
  330. package/departments/leadership/skills/performance-review/SKILL.md +18 -0
  331. package/departments/leadership/skills/team-health/SKILL.md +56 -0
  332. package/departments/leadership/squad.yaml +35 -0
  333. package/departments/leadership/workflows/team-build.yaml +55 -0
  334. package/departments/marketing/SKILL.md +61 -0
  335. package/departments/marketing/agents/content-creator.md +85 -0
  336. package/departments/marketing/agents/content-marketer.yaml +58 -0
  337. package/departments/marketing/agents/marketing-director.yaml +75 -0
  338. package/departments/marketing/agents/paid-specialist.yaml +58 -0
  339. package/departments/marketing/agents/seo-specialist.yaml +57 -0
  340. package/departments/marketing/skills/ab-test/SKILL.md +18 -0
  341. package/departments/marketing/skills/analytics-report/SKILL.md +18 -0
  342. package/departments/marketing/skills/audience-segment/SKILL.md +18 -0
  343. package/departments/marketing/skills/calendar-plan/SKILL.md +18 -0
  344. package/departments/marketing/skills/cold-email/SKILL.md +128 -0
  345. package/departments/marketing/skills/competitor-analysis/SKILL.md +18 -0
  346. package/departments/marketing/skills/content-audit/SKILL.md +18 -0
  347. package/departments/marketing/skills/email-sequence/SKILL.md +18 -0
  348. package/departments/marketing/skills/growth-loop/SKILL.md +50 -0
  349. package/departments/marketing/skills/marketing-automation/SKILL.md +18 -0
  350. package/departments/marketing/skills/paid-campaign/SKILL.md +18 -0
  351. package/departments/marketing/skills/programmatic-seo/SKILL.md +123 -0
  352. package/departments/marketing/skills/seo-audit/SKILL.md +48 -0
  353. package/departments/marketing/skills/social-strategy/SKILL.md +18 -0
  354. package/departments/marketing/squad.yaml +39 -0
  355. package/departments/marketing/workflows/campaign.yaml +112 -0
  356. package/departments/marketing/workflows/social.yaml +56 -0
  357. package/departments/operations/SKILL.md +422 -0
  358. package/departments/operations/agents/coo.md +88 -0
  359. package/departments/ops/SKILL.md +37 -0
  360. package/departments/ops/agents/automation-engineer.yaml +58 -0
  361. package/departments/ops/agents/ops-lead.yaml +71 -0
  362. package/departments/ops/skills/bottleneck-find/SKILL.md +49 -0
  363. package/departments/ops/skills/dashboard-build/SKILL.md +18 -0
  364. package/departments/ops/skills/gtd-setup/SKILL.md +18 -0
  365. package/departments/ops/skills/integration-design/SKILL.md +18 -0
  366. package/departments/ops/skills/lean-audit/SKILL.md +18 -0
  367. package/departments/ops/skills/metrics-dashboard/SKILL.md +18 -0
  368. package/departments/ops/skills/n8n-flow/SKILL.md +18 -0
  369. package/departments/ops/skills/sop-create/SKILL.md +18 -0
  370. package/departments/ops/skills/workflow-automate/SKILL.md +39 -0
  371. package/departments/ops/skills/zapier-flow/SKILL.md +18 -0
  372. package/departments/ops/squad.yaml +35 -0
  373. package/departments/ops/workflows/lean-audit.yaml +69 -0
  374. package/departments/org/SKILL.md +34 -0
  375. package/departments/org/agents/coo.yaml +80 -0
  376. package/departments/org/agents/org-designer.yaml +56 -0
  377. package/departments/org/agents/people-ops.yaml +56 -0
  378. package/departments/org/skills/compensation-plan/SKILL.md +18 -0
  379. package/departments/org/skills/culture-define/SKILL.md +18 -0
  380. package/departments/org/skills/decision-framework/SKILL.md +18 -0
  381. package/departments/org/skills/hiring-plan/SKILL.md +18 -0
  382. package/departments/org/skills/meeting-optimize/SKILL.md +18 -0
  383. package/departments/org/skills/onboarding-design/SKILL.md +18 -0
  384. package/departments/org/skills/org-design/SKILL.md +18 -0
  385. package/departments/org/skills/remote-setup/SKILL.md +18 -0
  386. package/departments/org/skills/sop-process/SKILL.md +18 -0
  387. package/departments/org/skills/team-assess/SKILL.md +18 -0
  388. package/departments/org/squad.yaml +33 -0
  389. package/departments/org/workflows/design.yaml +55 -0
  390. package/departments/pm/SKILL.md +39 -0
  391. package/departments/pm/agents/pm-director.yaml +75 -0
  392. package/departments/pm/agents/product-owner.yaml +59 -0
  393. package/departments/pm/agents/scrum-master.yaml +59 -0
  394. package/departments/pm/skills/agile-po/SKILL.md +118 -0
  395. package/departments/pm/skills/backlog-groom/SKILL.md +18 -0
  396. package/departments/pm/skills/discovery-plan/SKILL.md +48 -0
  397. package/departments/pm/skills/estimate-forecast/SKILL.md +18 -0
  398. package/departments/pm/skills/impact-map/SKILL.md +18 -0
  399. package/departments/pm/skills/kanban-setup/SKILL.md +18 -0
  400. package/departments/pm/skills/risk-register/SKILL.md +18 -0
  401. package/departments/pm/skills/roadmap-build/SKILL.md +18 -0
  402. package/departments/pm/skills/shape-pitch/SKILL.md +55 -0
  403. package/departments/pm/skills/sprint-plan/SKILL.md +18 -0
  404. package/departments/pm/skills/stakeholder-map/SKILL.md +18 -0
  405. package/departments/pm/skills/standup-run/SKILL.md +18 -0
  406. package/departments/pm/skills/story-write/SKILL.md +18 -0
  407. package/departments/pm/squad.yaml +37 -0
  408. package/departments/pm/workflows/retro.yaml +33 -0
  409. package/departments/quality/SKILL.md +66 -0
  410. package/departments/quality/agents/copy-director.md +134 -0
  411. package/departments/quality/agents/copy-director.yaml +73 -0
  412. package/departments/quality/agents/cqo.md +134 -0
  413. package/departments/quality/agents/cqo.yaml +76 -0
  414. package/departments/quality/agents/tech-director.yaml +79 -0
  415. package/departments/quality/agents/tech-ux-director.md +193 -0
  416. package/departments/quality/squad.yaml +25 -0
  417. package/departments/saas/SKILL.md +64 -0
  418. package/departments/saas/agents/cs-manager.yaml +57 -0
  419. package/departments/saas/agents/growth-engineer.yaml +57 -0
  420. package/departments/saas/agents/metrics-analyst.yaml +57 -0
  421. package/departments/saas/agents/saas-strategist.yaml +74 -0
  422. package/departments/saas/skills/benchmark-compare/SKILL.md +18 -0
  423. package/departments/saas/skills/churn-analysis/SKILL.md +18 -0
  424. package/departments/saas/skills/customer-success/SKILL.md +18 -0
  425. package/departments/saas/skills/growth-plan/SKILL.md +18 -0
  426. package/departments/saas/skills/gtm-strategy/SKILL.md +18 -0
  427. package/departments/saas/skills/launch-execute/SKILL.md +18 -0
  428. package/departments/saas/skills/metrics-dashboard/SKILL.md +18 -0
  429. package/departments/saas/skills/micro-saas-stack/SKILL.md +18 -0
  430. package/departments/saas/skills/mvp-build/SKILL.md +18 -0
  431. package/departments/saas/skills/niche-evaluate/SKILL.md +18 -0
  432. package/departments/saas/skills/onboarding-optimize/SKILL.md +18 -0
  433. package/departments/saas/skills/plg-setup/SKILL.md +53 -0
  434. package/departments/saas/skills/pricing-strategy/SKILL.md +48 -0
  435. package/departments/saas/skills/saas-scaffold/SKILL.md +127 -0
  436. package/departments/saas/skills/validate-idea/SKILL.md +55 -0
  437. package/departments/saas/squad.yaml +37 -0
  438. package/departments/saas/workflows/metrics.yaml +58 -0
  439. package/departments/saas/workflows/validate.yaml +103 -0
  440. package/departments/sales/SKILL.md +35 -0
  441. package/departments/sales/agents/sales-closer.yaml +58 -0
  442. package/departments/sales/agents/sales-director.yaml +72 -0
  443. package/departments/sales/agents/sales-ops.yaml +55 -0
  444. package/departments/sales/skills/challenger-sell/SKILL.md +18 -0
  445. package/departments/sales/skills/deal-qualify/SKILL.md +18 -0
  446. package/departments/sales/skills/discovery-call/SKILL.md +18 -0
  447. package/departments/sales/skills/forecast-revenue/SKILL.md +18 -0
  448. package/departments/sales/skills/negotiate-plan/SKILL.md +18 -0
  449. package/departments/sales/skills/objection-handle/SKILL.md +18 -0
  450. package/departments/sales/skills/pipeline-manage/SKILL.md +18 -0
  451. package/departments/sales/skills/pricing-negotiate/SKILL.md +18 -0
  452. package/departments/sales/skills/proposal-write/SKILL.md +54 -0
  453. package/departments/sales/skills/spin-sell/SKILL.md +50 -0
  454. package/departments/sales/squad.yaml +35 -0
  455. package/departments/sales/workflows/pipeline.yaml +49 -0
  456. package/departments/strategy/SKILL.md +37 -0
  457. package/departments/strategy/agents/business-model-designer.yaml +58 -0
  458. package/departments/strategy/agents/market-analyst.yaml +58 -0
  459. package/departments/strategy/agents/strategist.md +79 -0
  460. package/departments/strategy/agents/strategy-director.yaml +75 -0
  461. package/departments/strategy/skills/blue-ocean/SKILL.md +56 -0
  462. package/departments/strategy/skills/bmc/SKILL.md +18 -0
  463. package/departments/strategy/skills/board-advisor/SKILL.md +121 -0
  464. package/departments/strategy/skills/cto-advisor/SKILL.md +113 -0
  465. package/departments/strategy/skills/five-forces/SKILL.md +74 -0
  466. package/departments/strategy/skills/growth-strategy/SKILL.md +18 -0
  467. package/departments/strategy/skills/moat-analysis/SKILL.md +18 -0
  468. package/departments/strategy/skills/position/SKILL.md +18 -0
  469. package/departments/strategy/skills/scenario-plan/SKILL.md +18 -0
  470. package/departments/strategy/squad.yaml +37 -0
  471. package/departments/strategy/workflows/analysis.yaml +90 -0
  472. package/departments/strategy/workflows/swot.yaml +47 -0
  473. package/installer/adapters/claude-code.js +73 -0
  474. package/installer/adapters/codex-cli.js +34 -0
  475. package/installer/adapters/cursor.js +34 -0
  476. package/installer/adapters/gemini-cli.js +37 -0
  477. package/installer/cli.js +91 -0
  478. package/installer/detect-runtime.js +122 -0
  479. package/installer/doctor.js +105 -0
  480. package/installer/index.js +199 -0
  481. package/installer/uninstall.js +46 -0
  482. package/installer/update.js +39 -0
  483. package/knowledge/agents-registry-v2.json +2702 -0
  484. package/knowledge/commands-registry-v2.json +3827 -0
  485. package/package.json +58 -0
  486. 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
+ }
@@ -0,0 +1,5 @@
1
+ """Governance engine — Constitution, quality gates, audit trails."""
2
+
3
+ from core.governance.constitution import Constitution, load_constitution
4
+
5
+ __all__ = ["Constitution", "load_constitution"]
@@ -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."""