@openlife/cli 1.7.3

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 (394) hide show
  1. package/INSTALL.md +266 -0
  2. package/LICENSE +21 -0
  3. package/README.md +142 -0
  4. package/bin/openlife.js +3 -0
  5. package/dist/admin_panel_server.js +66 -0
  6. package/dist/cli/AgentManager.js +109 -0
  7. package/dist/cli/AutonomousInstaller.js +134 -0
  8. package/dist/cli/DreamOrganizer.js +88 -0
  9. package/dist/cli/HostInstaller.js +426 -0
  10. package/dist/cli/InstallBanner.js +16 -0
  11. package/dist/cli/InstallFlow.js +256 -0
  12. package/dist/cli/InstallHeadless.js +47 -0
  13. package/dist/cli/InstallModules.js +148 -0
  14. package/dist/cli/InstallStateStore.js +75 -0
  15. package/dist/cli/InstallWizard.js +364 -0
  16. package/dist/cli/ProfileManager.js +163 -0
  17. package/dist/cli/SystemInstaller.js +89 -0
  18. package/dist/cli/WorldClassCommands.js +208 -0
  19. package/dist/design/DesignMdImporter.js +82 -0
  20. package/dist/design/DesignMdMode.js +93 -0
  21. package/dist/design/DesignMdRegistry.js +67 -0
  22. package/dist/index.js +2575 -0
  23. package/dist/memory/ConversationMemory.js +33 -0
  24. package/dist/memory/LocalMemoryProvider.js +86 -0
  25. package/dist/memory/Mem0Provider.js +16 -0
  26. package/dist/memory/MemoryNamespacePolicy.js +27 -0
  27. package/dist/memory/MemoryOrchestrator.js +65 -0
  28. package/dist/memory/MemoryPromotionFlow.js +32 -0
  29. package/dist/memory/MemoryProvider.js +2 -0
  30. package/dist/memory/MemoryProviderRegistry.js +27 -0
  31. package/dist/memory/MemoryRetentionPolicy.js +60 -0
  32. package/dist/memory/MempalaceProvider.js +72 -0
  33. package/dist/memory/OmniMemory.js +106 -0
  34. package/dist/memory/RedisAgentMemoryProvider.js +16 -0
  35. package/dist/memory/SessionManager.js +86 -0
  36. package/dist/memory/ZepGraphitiProvider.js +16 -0
  37. package/dist/orchestrator/AgentRegistry.js +56 -0
  38. package/dist/orchestrator/AgentScoring.js +82 -0
  39. package/dist/orchestrator/AgentTeam.js +22 -0
  40. package/dist/orchestrator/ArbitrationAgent.js +43 -0
  41. package/dist/orchestrator/ArbitrationScorecard.js +17 -0
  42. package/dist/orchestrator/AssetPromotionEngine.js +65 -0
  43. package/dist/orchestrator/AssetReuseRouter.js +63 -0
  44. package/dist/orchestrator/BenchmarkEngine.js +75 -0
  45. package/dist/orchestrator/Brain.js +298 -0
  46. package/dist/orchestrator/CadenceEngine.js +76 -0
  47. package/dist/orchestrator/CapabilityRouter.js +36 -0
  48. package/dist/orchestrator/CommandLanguage.js +27 -0
  49. package/dist/orchestrator/CommandRouter.js +70 -0
  50. package/dist/orchestrator/ConsequenceForecaster.js +286 -0
  51. package/dist/orchestrator/CronManager.js +286 -0
  52. package/dist/orchestrator/DynamicAgentBuilder.js +48 -0
  53. package/dist/orchestrator/DynamicAgentExecutor.js +15 -0
  54. package/dist/orchestrator/EnterpriseAgenticCore.js +276 -0
  55. package/dist/orchestrator/ExecutionBoard.js +86 -0
  56. package/dist/orchestrator/ExecutionIntent.js +13 -0
  57. package/dist/orchestrator/ExecutionModePolicy.js +48 -0
  58. package/dist/orchestrator/ExecutionRouter.js +9 -0
  59. package/dist/orchestrator/ExecutionState.js +20 -0
  60. package/dist/orchestrator/ExecutorHealth.js +86 -0
  61. package/dist/orchestrator/ExternalCatalogRegistry.js +83 -0
  62. package/dist/orchestrator/Gatekeeper.js +414 -0
  63. package/dist/orchestrator/Gateway.js +508 -0
  64. package/dist/orchestrator/GovernanceConsentStore.js +66 -0
  65. package/dist/orchestrator/GovernanceLayer.js +179 -0
  66. package/dist/orchestrator/GovernancePolicyStore.js +53 -0
  67. package/dist/orchestrator/GovernanceScopeLedger.js +134 -0
  68. package/dist/orchestrator/GovernanceScopePolicy.js +67 -0
  69. package/dist/orchestrator/IntentClassifier.js +45 -0
  70. package/dist/orchestrator/JobLifecycle.js +91 -0
  71. package/dist/orchestrator/LearningRouter.js +24 -0
  72. package/dist/orchestrator/MediaManager.js +92 -0
  73. package/dist/orchestrator/MemoryCuratorAgent.js +41 -0
  74. package/dist/orchestrator/MissionState.js +155 -0
  75. package/dist/orchestrator/ModelManager.js +84 -0
  76. package/dist/orchestrator/OperatingSystem.js +71 -0
  77. package/dist/orchestrator/OperationalMemoryStore.js +94 -0
  78. package/dist/orchestrator/OptimizationLoop.js +72 -0
  79. package/dist/orchestrator/OrchestrationLoop.js +905 -0
  80. package/dist/orchestrator/OrgStructure.js +88 -0
  81. package/dist/orchestrator/OutcomeSimulator.js +46 -0
  82. package/dist/orchestrator/ParallelOrchestrationLoop.js +36 -0
  83. package/dist/orchestrator/PerformanceScorecard.js +105 -0
  84. package/dist/orchestrator/PlannerAgent.js +46 -0
  85. package/dist/orchestrator/ProcessSandbox.js +129 -0
  86. package/dist/orchestrator/PromotionPipeline.js +74 -0
  87. package/dist/orchestrator/PromotionReviewGate.js +11 -0
  88. package/dist/orchestrator/QueueScheduler.js +260 -0
  89. package/dist/orchestrator/ReleaseGate.js +36 -0
  90. package/dist/orchestrator/ReleaseWorkflow.js +68 -0
  91. package/dist/orchestrator/RemotePublisher.js +139 -0
  92. package/dist/orchestrator/ReuseEngine.js +89 -0
  93. package/dist/orchestrator/ReviewerAgent.js +49 -0
  94. package/dist/orchestrator/RoleHandoff.js +65 -0
  95. package/dist/orchestrator/RuntimeHealthMonitor.js +143 -0
  96. package/dist/orchestrator/RuntimePolicy.js +105 -0
  97. package/dist/orchestrator/RuntimeProbe.js +97 -0
  98. package/dist/orchestrator/RuntimeRegistry.js +73 -0
  99. package/dist/orchestrator/SandboxPolicy.js +22 -0
  100. package/dist/orchestrator/SecurityDownloadGuard.js +169 -0
  101. package/dist/orchestrator/SecurityEventStore.js +58 -0
  102. package/dist/orchestrator/ServiceCompletionPolicy.js +36 -0
  103. package/dist/orchestrator/ServiceState.js +195 -0
  104. package/dist/orchestrator/SkillCreator.js +404 -0
  105. package/dist/orchestrator/SkillLearningLoop.js +57 -0
  106. package/dist/orchestrator/SkillManager.js +75 -0
  107. package/dist/orchestrator/SkillNetwork.js +29 -0
  108. package/dist/orchestrator/SkillRegistryV2.js +28 -0
  109. package/dist/orchestrator/SkillScoring.js +70 -0
  110. package/dist/orchestrator/SquadAutoCreator.js +64 -0
  111. package/dist/orchestrator/SquadCreator.js +727 -0
  112. package/dist/orchestrator/SquadRegistry.js +28 -0
  113. package/dist/orchestrator/SquadRouter.js +33 -0
  114. package/dist/orchestrator/SquadScoring.js +70 -0
  115. package/dist/orchestrator/SubagentLifecycle.js +90 -0
  116. package/dist/orchestrator/SynthesizerAgent.js +48 -0
  117. package/dist/orchestrator/SystemDoctor.js +224 -0
  118. package/dist/orchestrator/TaskExecutor.js +422 -0
  119. package/dist/orchestrator/TeammateBoard.js +61 -0
  120. package/dist/orchestrator/TestHarness.js +184 -0
  121. package/dist/orchestrator/VoiceManager.js +203 -0
  122. package/dist/orchestrator/VoiceRouter.js +89 -0
  123. package/dist/orchestrator/capability/CapabilityGenesisEngine.js +278 -0
  124. package/dist/orchestrator/capability/CapabilityPackParser.js +223 -0
  125. package/dist/orchestrator/capability/CapabilityPackSchema.js +62 -0
  126. package/dist/orchestrator/capability/CapabilityPackState.js +163 -0
  127. package/dist/orchestrator/providers/AgentProvider.js +2 -0
  128. package/dist/orchestrator/providers/CapabilityProvider.js +12 -0
  129. package/dist/orchestrator/providers/CloudAgentProvider.js +55 -0
  130. package/dist/orchestrator/providers/CloudSkillProvider.js +55 -0
  131. package/dist/orchestrator/providers/CloudSquadProvider.js +55 -0
  132. package/dist/orchestrator/providers/CompositeAgentProvider.js +16 -0
  133. package/dist/orchestrator/providers/CompositeCapabilityProvider.js +25 -0
  134. package/dist/orchestrator/providers/CompositeSkillProvider.js +16 -0
  135. package/dist/orchestrator/providers/CompositeSquadProvider.js +16 -0
  136. package/dist/orchestrator/providers/CompositeWorkflowProvider.js +46 -0
  137. package/dist/orchestrator/providers/FileAgentProvider.js +105 -0
  138. package/dist/orchestrator/providers/FileCapabilityProvider.js +106 -0
  139. package/dist/orchestrator/providers/FileSkillProvider.js +65 -0
  140. package/dist/orchestrator/providers/FileSquadProvider.js +69 -0
  141. package/dist/orchestrator/providers/FileWorkflowProvider.js +103 -0
  142. package/dist/orchestrator/providers/SkillProvider.js +2 -0
  143. package/dist/orchestrator/providers/SquadProvider.js +2 -0
  144. package/dist/orchestrator/toolset/ToolsetGuard.js +69 -0
  145. package/dist/orchestrator/toolset/ToolsetRegistry.js +65 -0
  146. package/dist/orchestrator/toolset/ToolsetSchema.js +21 -0
  147. package/dist/orchestrator/util/AtomicWriter.js +204 -0
  148. package/dist/orchestrator/util/DistributedLock.js +232 -0
  149. package/dist/orchestrator/util/TemplateRenderer.js +87 -0
  150. package/dist/orchestrator/util/WatchdogHeartbeat.js +116 -0
  151. package/dist/orchestrator/workflow/ConditionParser.js +232 -0
  152. package/dist/orchestrator/workflow/WorkflowEngine.js +379 -0
  153. package/dist/orchestrator/workflow/WorkflowParser.js +368 -0
  154. package/dist/orchestrator/workflow/WorkflowSchema.js +65 -0
  155. package/dist/orchestrator/workflow/WorkflowState.js +11 -0
  156. package/dist/reversa/ReversaAgent.js +134 -0
  157. package/dist/reversa/ReversaContracts.js +62 -0
  158. package/dist/reversa/ReversaExecutors.js +65 -0
  159. package/dist/skills/SkillRegistry.js +71 -0
  160. package/dist/squads/SquadManager.js +87 -0
  161. package/dist/test_admin_teams_networks.js +54 -0
  162. package/dist/test_agent_team_skill_network.js +15 -0
  163. package/dist/test_aiobuilder_cli_parity.js +169 -0
  164. package/dist/test_ask_exit.js +73 -0
  165. package/dist/test_atomic_writer.js +209 -0
  166. package/dist/test_autonomous_soak.js +141 -0
  167. package/dist/test_benchmark_engine.js +41 -0
  168. package/dist/test_brain_error_diagnostics.js +51 -0
  169. package/dist/test_brain_fallback_chain.js +93 -0
  170. package/dist/test_capability_genesis_engine.js +225 -0
  171. package/dist/test_capability_pack_schema.js +214 -0
  172. package/dist/test_catalog_quality.js +150 -0
  173. package/dist/test_cli_crud_roundtrip.js +154 -0
  174. package/dist/test_cli_diagnostics.js +131 -0
  175. package/dist/test_cli_doc_parity.js +126 -0
  176. package/dist/test_cli_help_surface.js +106 -0
  177. package/dist/test_cli_service_commands.js +83 -0
  178. package/dist/test_consequence_forecast_brain.js +165 -0
  179. package/dist/test_consequence_forecaster.js +24 -0
  180. package/dist/test_conversation_memory.js +36 -0
  181. package/dist/test_create_entities.js +54 -0
  182. package/dist/test_creator_placeholders_completed.js +177 -0
  183. package/dist/test_cron_manager.js +123 -0
  184. package/dist/test_daemon_sigterm.js +72 -0
  185. package/dist/test_deep_research_capability.js +87 -0
  186. package/dist/test_designmd_import_registry.js +16 -0
  187. package/dist/test_designmd_mode.js +50 -0
  188. package/dist/test_designmd_mode_workspace.js +13 -0
  189. package/dist/test_dist_templates_layout.js +135 -0
  190. package/dist/test_distributed_lock.js +201 -0
  191. package/dist/test_distribution_installability.js +67 -0
  192. package/dist/test_doctor_sandbox_check.js +44 -0
  193. package/dist/test_dream_organizer.js +25 -0
  194. package/dist/test_dual_mode.js +15 -0
  195. package/dist/test_enterprise_agentic_core.js +128 -0
  196. package/dist/test_forecast_brain_wiring.js +87 -0
  197. package/dist/test_gateway_telegram_guardrails.js +52 -0
  198. package/dist/test_governance.js +34 -0
  199. package/dist/test_governance_advanced.js +75 -0
  200. package/dist/test_governance_scope_ledger.js +147 -0
  201. package/dist/test_governance_v13_policies.js +44 -0
  202. package/dist/test_guided_creator_cli.js +100 -0
  203. package/dist/test_host_install_e2e.js +324 -0
  204. package/dist/test_host_installer.js +259 -0
  205. package/dist/test_host_installers_gemini_codex.js +95 -0
  206. package/dist/test_host_uninstaller.js +295 -0
  207. package/dist/test_install_flow.js +70 -0
  208. package/dist/test_install_flow_host_validation.js +143 -0
  209. package/dist/test_install_wizard.js +272 -0
  210. package/dist/test_integration_gemini_live.js +95 -0
  211. package/dist/test_integration_http_trigger_live.js +154 -0
  212. package/dist/test_integration_telegram_live.js +102 -0
  213. package/dist/test_job_lifecycle.js +16 -0
  214. package/dist/test_memory_orchestrator.js +33 -0
  215. package/dist/test_memory_promotion.js +36 -0
  216. package/dist/test_memory_retention.js +37 -0
  217. package/dist/test_mission_checkpoint.js +204 -0
  218. package/dist/test_multi_host_docs_parity.js +125 -0
  219. package/dist/test_openlife_auto_creator_routing.js +69 -0
  220. package/dist/test_openlife_evolution_surface.js +77 -0
  221. package/dist/test_openlife_gatekeeper_routing.js +15 -0
  222. package/dist/test_openlife_routing_surface.js +27 -0
  223. package/dist/test_openlife_runtime_source_truth.js +25 -0
  224. package/dist/test_operating_system.js +45 -0
  225. package/dist/test_optimization_loop.js +38 -0
  226. package/dist/test_orchestration_assets_lifecycle.js +78 -0
  227. package/dist/test_outcome_simulator.js +38 -0
  228. package/dist/test_performance_latency.js +215 -0
  229. package/dist/test_performance_scorecard.js +38 -0
  230. package/dist/test_phase1_check_exit.js +103 -0
  231. package/dist/test_phase6_board.js +31 -0
  232. package/dist/test_phase6_cadence.js +29 -0
  233. package/dist/test_phase6_ops.js +37 -0
  234. package/dist/test_post_mission_evaluation.js +190 -0
  235. package/dist/test_process_sandbox.js +88 -0
  236. package/dist/test_profile_toolset_mcp.js +125 -0
  237. package/dist/test_queue_scheduler.js +239 -0
  238. package/dist/test_release_gate.js +23 -0
  239. package/dist/test_remote_publish.js +193 -0
  240. package/dist/test_reversa_contracts_e2e.js +48 -0
  241. package/dist/test_reversa_export_and_strict.js +51 -0
  242. package/dist/test_reversa_full_execution.js +12 -0
  243. package/dist/test_reversa_lite.js +9 -0
  244. package/dist/test_royal_stack_golden.js +179 -0
  245. package/dist/test_runtime_health_backoff.js +154 -0
  246. package/dist/test_runtime_policy.js +26 -0
  247. package/dist/test_runtime_probe.js +19 -0
  248. package/dist/test_runtime_profile_oauth_only.js +262 -0
  249. package/dist/test_runtime_registry.js +11 -0
  250. package/dist/test_security_download_and_scan.js +103 -0
  251. package/dist/test_security_download_guard.js +14 -0
  252. package/dist/test_service_command_surface.js +12 -0
  253. package/dist/test_service_completion_policy.js +32 -0
  254. package/dist/test_service_guardrails_delete.js +12 -0
  255. package/dist/test_service_mode_explicit_only.js +174 -0
  256. package/dist/test_sources_import_ref.js +46 -0
  257. package/dist/test_sources_scaffold.js +43 -0
  258. package/dist/test_squad_skill_creator.js +305 -0
  259. package/dist/test_squad_skill_design_llm.js +176 -0
  260. package/dist/test_subsystems_org_state.js +271 -0
  261. package/dist/test_subsystems_promotion_memory_assets.js +343 -0
  262. package/dist/test_subsystems_routing_governance.js +234 -0
  263. package/dist/test_task_executor_sandbox_optin.js +127 -0
  264. package/dist/test_teammate_learning.js +15 -0
  265. package/dist/test_telegram_delete_guardrail.js +21 -0
  266. package/dist/test_toolset_enforcement.js +188 -0
  267. package/dist/test_trigger_basic_auth.js +112 -0
  268. package/dist/test_util/doc_parity.js +120 -0
  269. package/dist/test_v15_e2e_integration.js +207 -0
  270. package/dist/test_watchdog_heartbeat.js +152 -0
  271. package/dist/test_workflow_condition_parser.js +63 -0
  272. package/dist/test_workflow_e2e.js +240 -0
  273. package/dist/test_workflow_engine.js +330 -0
  274. package/dist/test_workflow_parser.js +245 -0
  275. package/dist/test_workflow_schema_backward_compat.js +197 -0
  276. package/dist-templates/README.md +91 -0
  277. package/dist-templates/claude-code/agents/openlife-atlas.md +52 -0
  278. package/dist-templates/claude-code/agents/openlife-forge.md +42 -0
  279. package/dist-templates/claude-code/agents/openlife-genesis.md +59 -0
  280. package/dist-templates/claude-code/agents/openlife-lyra.md +40 -0
  281. package/dist-templates/claude-code/agents/openlife-maestro.md +45 -0
  282. package/dist-templates/claude-code/commands/openlife/ask.md +14 -0
  283. package/dist-templates/claude-code/commands/openlife/doctor.md +19 -0
  284. package/dist-templates/claude-code/commands/openlife/dream.md +20 -0
  285. package/dist-templates/claude-code/commands/openlife/status.md +14 -0
  286. package/dist-templates/claude-code/mcp/openlife-orchestrator.json +46 -0
  287. package/dist-templates/codex/README.md +7 -0
  288. package/dist-templates/codex/agents/openlife-atlas.md +52 -0
  289. package/dist-templates/codex/agents/openlife-forge.md +42 -0
  290. package/dist-templates/codex/agents/openlife-genesis.md +59 -0
  291. package/dist-templates/codex/agents/openlife-lyra.md +40 -0
  292. package/dist-templates/codex/agents/openlife-maestro.md +45 -0
  293. package/dist-templates/codex/commands/openlife/ask.md +14 -0
  294. package/dist-templates/codex/commands/openlife/doctor.md +19 -0
  295. package/dist-templates/codex/commands/openlife/dream.md +20 -0
  296. package/dist-templates/codex/commands/openlife/status.md +14 -0
  297. package/dist-templates/codex/mcp/openlife-orchestrator.json +46 -0
  298. package/dist-templates/gemini-cli/README.md +8 -0
  299. package/dist-templates/gemini-cli/agents/openlife-atlas.md +52 -0
  300. package/dist-templates/gemini-cli/agents/openlife-forge.md +42 -0
  301. package/dist-templates/gemini-cli/agents/openlife-genesis.md +59 -0
  302. package/dist-templates/gemini-cli/agents/openlife-lyra.md +40 -0
  303. package/dist-templates/gemini-cli/agents/openlife-maestro.md +45 -0
  304. package/dist-templates/gemini-cli/commands/openlife/ask.md +14 -0
  305. package/dist-templates/gemini-cli/commands/openlife/doctor.md +19 -0
  306. package/dist-templates/gemini-cli/commands/openlife/dream.md +20 -0
  307. package/dist-templates/gemini-cli/commands/openlife/status.md +14 -0
  308. package/dist-templates/gemini-cli/mcp/openlife-orchestrator.json +46 -0
  309. package/dist-templates/skill-template/README.md +34 -0
  310. package/dist-templates/skill-template/SKILL.md.template +59 -0
  311. package/dist-templates/squad-template/README.md +82 -0
  312. package/dist-templates/squad-template/SQUAD.md.template +51 -0
  313. package/dist-templates/squad-template/agent-template.md +51 -0
  314. package/dist-templates/squad-template/checklist-template.md +25 -0
  315. package/dist-templates/squad-template/task-template.md +36 -0
  316. package/dist-templates/workflows/PORTED_WORKFLOWS.md +60 -0
  317. package/dist-templates/workflows/brownfield-discovery.yaml +137 -0
  318. package/dist-templates/workflows/greenfield-fullstack.yaml +132 -0
  319. package/dist-templates/workflows/qa-loop.yaml +125 -0
  320. package/dist-templates/workflows/story-development-cycle.yaml +80 -0
  321. package/docs/CHANGELOG_FEATURE_ROLLOUT_DESIGNMD.md +43 -0
  322. package/docs/EXTERNAL_SOURCES_AND_SECURITY_GUARD.md +33 -0
  323. package/docs/OPENLIFE_AUDIT_2026-05-06.md +170 -0
  324. package/docs/OPENLIFE_CONSOLIDATED_PLAN_2026-05-06.md +299 -0
  325. package/docs/OPENLIFE_DUAL_MODE_IMPLEMENTATION_PLAN.md +205 -0
  326. package/docs/OPENLIFE_EVOLUTION_SURFACE_2026-05-07.md +53 -0
  327. package/docs/OPENLIFE_SKILLS_IMPORT_2026-05-07.json +223 -0
  328. package/docs/OPENLIFE_SQUADS_IMPORT_2026-05-07.json +184 -0
  329. package/docs/PAPERCLIP_OPENLIFE_INVESTIGATION.md +85 -0
  330. package/docs/README.md +28 -0
  331. package/docs/RELEASE_ORGANIZATION_PLAN.md +164 -0
  332. package/docs/audit/CLI-EXECUTION-RESULTS.md +113 -0
  333. package/docs/audit/CLI-MATRIX.md +556 -0
  334. package/docs/audit/DOC-PARITY-GAPS.md +351 -0
  335. package/docs/audit/ORCHESTRATOR-MATRIX.md +136 -0
  336. package/docs/audit/TEST-COVERAGE-GAPS.md +334 -0
  337. package/docs/audit/integrations/SKIPPED.md +101 -0
  338. package/docs/autonomous-install.md +79 -0
  339. package/docs/capability-genesis.md +137 -0
  340. package/docs/capability-pack-schema.md +157 -0
  341. package/docs/commands.md +82 -0
  342. package/docs/deep-research-capability.md +114 -0
  343. package/docs/development/typescript-conventions.md +95 -0
  344. package/docs/host-installers.md +68 -0
  345. package/docs/install/aiobuilder.md +70 -0
  346. package/docs/install/claude-code.md +83 -0
  347. package/docs/install/codex.md +64 -0
  348. package/docs/install/gemini-cli.md +64 -0
  349. package/docs/install/runtime-profiles.md +83 -0
  350. package/docs/openlife-agent-os-blueprint.md +114 -0
  351. package/docs/openlife-install-backlog.md +115 -0
  352. package/docs/openlife-install-spec.md +306 -0
  353. package/docs/operations/CLOUD_CUTOVER_AUDIT.md +37 -0
  354. package/docs/operations/PHASE_PROGRESS_CONTINUATION.md +24 -0
  355. package/docs/performance-benchmarks.md +83 -0
  356. package/docs/planning/v1.3-capability-genesis.md +157 -0
  357. package/docs/plans/2026-05-05-admin-interface-professional-dark-premium-plan.md +84 -0
  358. package/docs/plans/2026-05-05-openlife-autonomous-domain-marketplace-masterplan.md +122 -0
  359. package/docs/quickstart.md +60 -0
  360. package/docs/release-process.md +236 -0
  361. package/docs/roadmap/OPENLIFE_MASTER_PLAN_CLOUD_V3.md +97 -0
  362. package/docs/sandboxing-research.md +117 -0
  363. package/docs/stories/epic-feature-audit/1.1.story.md +84 -0
  364. package/docs/stories/epic-feature-audit/1.2.story.md +102 -0
  365. package/docs/stories/epic-feature-audit/1.3.story.md +93 -0
  366. package/docs/stories/epic-feature-audit/1.5.story.md +121 -0
  367. package/docs/stories/epic-feature-audit/1.6.story.md +80 -0
  368. package/docs/stories/epic-feature-completeness/2.1.story.md +70 -0
  369. package/docs/stories/epic-feature-completeness/2.2.story.md +49 -0
  370. package/docs/stories/epic-feature-completeness/2.3.story.md +74 -0
  371. package/docs/stories/epic-feature-completeness/2.4.story.md +71 -0
  372. package/docs/stories/epic-feature-completeness/3.1.story.md +56 -0
  373. package/docs/stories/epic-feature-completeness/3.2.story.md +80 -0
  374. package/docs/stories/epic-feature-completeness/3.3.story.md +68 -0
  375. package/docs/stories/epic-feature-completeness/3.4.story.md +71 -0
  376. package/docs/stories/epic-feature-completeness/3.5.story.md +72 -0
  377. package/docs/stories/epic-feature-completeness/3.6.story.md +69 -0
  378. package/docs/stories/epic-feature-completeness/3.7.story.md +68 -0
  379. package/docs/stories/epic-feature-completeness/3.8.story.md +57 -0
  380. package/docs/toolset-enforcement.md +122 -0
  381. package/docs/v1.4-changelog.md +159 -0
  382. package/docs/v1.5-changelog.md +106 -0
  383. package/docs/v1.5-roadmap.md +121 -0
  384. package/docs/v1.6-changelog.md +67 -0
  385. package/docs/v1.6-roadmap.md +89 -0
  386. package/docs/v1.7-changelog.md +98 -0
  387. package/docs/workflow-schema.md +177 -0
  388. package/package.json +177 -0
  389. package/scripts/clean-test-pollution.js +61 -0
  390. package/scripts/openlife-agent-start.sh +6 -0
  391. package/scripts/openlife-agent.service.example +13 -0
  392. package/scripts/openlife-agent.supervisord.conf.example +8 -0
  393. package/scripts/openlife-autonomous-install.sh +29 -0
  394. package/scripts/postinstall-check.sh +37 -0
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ /**
3
+ * test_workflow_parser — Story 4.1 regression suite.
4
+ *
5
+ * Validates the WorkflowSchema + WorkflowParser contract via 8 scenarios:
6
+ * 1. Happy path — minimal valid workflow round-trips
7
+ * 2. Multi-phase fixture — greenfield-like document parses
8
+ * 3. Missing root `workflow:` key fails with MISSING_ROOT
9
+ * 4. Invalid type fails with INVALID_TYPE
10
+ * 5. Step missing both agent and squad fails with NEITHER_AGENT_NOR_SQUAD
11
+ * 6. Duplicate step id fails with DUPLICATE_STEP_ID
12
+ * 7. Unknown requires (step-id-shaped) fails with UNKNOWN_REQUIRES
13
+ * 8. Circular requires chain detected with CIRCULAR_REQUIRES
14
+ *
15
+ * Prints TEST_WORKFLOW_PARSER_OK on full pass.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const WorkflowParser_1 = require("./orchestrator/workflow/WorkflowParser");
19
+ const WorkflowSchema_1 = require("./orchestrator/workflow/WorkflowSchema");
20
+ function assert(cond, msg) {
21
+ if (!cond)
22
+ throw new Error(`assertion failed: ${msg}`);
23
+ }
24
+ function assertHasError(result, expectedCode, scenario) {
25
+ assert(!result.ok, `${scenario}: expected ok=false, got ok=true`);
26
+ const match = result.errors.find((e) => e.code === expectedCode);
27
+ assert(match !== undefined, `${scenario}: expected error code '${expectedCode}', got [${result.errors.map((e) => e.code).join(', ')}]`);
28
+ }
29
+ // ─────────────────────────────────────────────────────────────
30
+ // Scenario 1 — Happy path
31
+ // ─────────────────────────────────────────────────────────────
32
+ function scenarioHappyPath() {
33
+ const yaml = `
34
+ workflow:
35
+ id: minimal-test
36
+ name: Minimal Test
37
+ description: A minimal valid workflow
38
+ type: custom
39
+ version: "1.0"
40
+ sequence:
41
+ - id: step-1
42
+ agent: dev
43
+ action: do-thing
44
+ creates: [out.md]
45
+ `;
46
+ const r = (0, WorkflowParser_1.parseWorkflow)(yaml);
47
+ assert(r.ok, `happy path must succeed, errors: ${JSON.stringify(r.errors)}`);
48
+ assert(r.workflow?.id === 'minimal-test', 'id round-trip');
49
+ assert(r.workflow?.type === 'custom', 'type round-trip');
50
+ assert(r.workflow?.sequence.length === 1, 'sequence length');
51
+ console.log('✅ scenario 1: happy path');
52
+ }
53
+ // ─────────────────────────────────────────────────────────────
54
+ // Scenario 2 — Multi-phase fixture (squad+agent mix)
55
+ // ─────────────────────────────────────────────────────────────
56
+ function scenarioMultiPhaseShape() {
57
+ const yaml = `
58
+ workflow:
59
+ id: greenfield-like
60
+ name: Greenfield-Like
61
+ description: Mirrors the greenfield-fullstack structure
62
+ type: greenfield
63
+ version: "1.0"
64
+ project_types: [web-app, saas]
65
+ metadata:
66
+ elicit: true
67
+ confirmation_required: true
68
+ phases:
69
+ - phase_0: Bootstrap
70
+ - phase_1: Discovery
71
+ sequence:
72
+ - phase: 0
73
+ name: Bootstrap
74
+ description: Setup
75
+ - id: env-bootstrap
76
+ agent: devops
77
+ action: environment_bootstrap
78
+ duration_estimate: "15-30 min"
79
+ creates: [.openlife/config.yaml, README.md]
80
+ task: environment-bootstrap.md
81
+
82
+ - phase: 1
83
+ name: Discovery
84
+ description: Plan everything
85
+
86
+ - id: project-brief
87
+ agent: analyst
88
+ creates: project-brief.md
89
+ duration_estimate: "30-60 min"
90
+ requires: env-bootstrap
91
+
92
+ - id: design-review
93
+ squad: design-squad
94
+ action: review-design
95
+ requires: project-brief
96
+ idempotent: true
97
+ `;
98
+ const r = (0, WorkflowParser_1.parseWorkflow)(yaml);
99
+ assert(r.ok, `multi-phase shape must succeed, errors: ${JSON.stringify(r.errors)}`);
100
+ assert(r.workflow?.sequence.length === 5, `expected 5 sequence entries, got ${r.workflow?.sequence.length}`);
101
+ assert(r.workflow?.project_types?.includes('saas'), 'project_types round-trip');
102
+ assert(r.workflow?.metadata?.elicit === true, 'metadata.elicit round-trip');
103
+ console.log('✅ scenario 2: multi-phase (squad+agent mix)');
104
+ }
105
+ // ─────────────────────────────────────────────────────────────
106
+ // Scenario 3 — Missing `workflow:` root
107
+ // ─────────────────────────────────────────────────────────────
108
+ function scenarioMissingRoot() {
109
+ const yaml = `
110
+ id: orphan
111
+ name: Orphan
112
+ type: custom
113
+ version: "1.0"
114
+ sequence: []
115
+ `;
116
+ const r = (0, WorkflowParser_1.parseWorkflow)(yaml);
117
+ assertHasError(r, WorkflowSchema_1.WORKFLOW_ERRORS.MISSING_ROOT, 'missing root');
118
+ console.log('✅ scenario 3: missing root (no `workflow:` key)');
119
+ }
120
+ // ─────────────────────────────────────────────────────────────
121
+ // Scenario 4 — Invalid type value
122
+ // ─────────────────────────────────────────────────────────────
123
+ function scenarioInvalidType() {
124
+ const yaml = `
125
+ workflow:
126
+ id: bad-type
127
+ name: Bad Type
128
+ type: nonsense
129
+ version: "1.0"
130
+ sequence:
131
+ - id: step-1
132
+ agent: dev
133
+ `;
134
+ const r = (0, WorkflowParser_1.parseWorkflow)(yaml);
135
+ assertHasError(r, WorkflowSchema_1.WORKFLOW_ERRORS.INVALID_TYPE, 'invalid type');
136
+ console.log('✅ scenario 4: invalid type value');
137
+ }
138
+ // ─────────────────────────────────────────────────────────────
139
+ // Scenario 5 — Step with neither agent nor squad
140
+ // ─────────────────────────────────────────────────────────────
141
+ function scenarioNoAgentOrSquad() {
142
+ const yaml = `
143
+ workflow:
144
+ id: no-actor
145
+ name: No Actor
146
+ type: custom
147
+ version: "1.0"
148
+ sequence:
149
+ - id: orphan-step
150
+ action: do-thing
151
+ `;
152
+ const r = (0, WorkflowParser_1.parseWorkflow)(yaml);
153
+ assertHasError(r, WorkflowSchema_1.WORKFLOW_ERRORS.NEITHER_AGENT_NOR_SQUAD, 'no agent or squad');
154
+ console.log('✅ scenario 5: step without agent or squad');
155
+ }
156
+ // ─────────────────────────────────────────────────────────────
157
+ // Scenario 6 — Duplicate step id
158
+ // ─────────────────────────────────────────────────────────────
159
+ function scenarioDuplicateStepId() {
160
+ const yaml = `
161
+ workflow:
162
+ id: dup-test
163
+ name: Dup Test
164
+ type: custom
165
+ version: "1.0"
166
+ sequence:
167
+ - id: step-a
168
+ agent: dev
169
+ - id: step-a
170
+ agent: qa
171
+ `;
172
+ const r = (0, WorkflowParser_1.parseWorkflow)(yaml);
173
+ assertHasError(r, WorkflowSchema_1.WORKFLOW_ERRORS.DUPLICATE_STEP_ID, 'duplicate step id');
174
+ console.log('✅ scenario 6: duplicate step id');
175
+ }
176
+ // ─────────────────────────────────────────────────────────────
177
+ // Scenario 7 — Unknown requires (step-id-shaped)
178
+ // ─────────────────────────────────────────────────────────────
179
+ function scenarioUnknownRequires() {
180
+ const yaml = `
181
+ workflow:
182
+ id: req-test
183
+ name: Req Test
184
+ type: custom
185
+ version: "1.0"
186
+ sequence:
187
+ - id: step-a
188
+ agent: dev
189
+ requires: ghost-step
190
+ `;
191
+ const r = (0, WorkflowParser_1.parseWorkflow)(yaml);
192
+ assertHasError(r, WorkflowSchema_1.WORKFLOW_ERRORS.UNKNOWN_REQUIRES, 'unknown requires');
193
+ console.log('✅ scenario 7: unknown requires (step-id-shaped)');
194
+ }
195
+ // ─────────────────────────────────────────────────────────────
196
+ // Scenario 8 — Circular requires chain
197
+ // ─────────────────────────────────────────────────────────────
198
+ function scenarioCircularRequires() {
199
+ const yaml = `
200
+ workflow:
201
+ id: cycle-test
202
+ name: Cycle Test
203
+ type: custom
204
+ version: "1.0"
205
+ sequence:
206
+ - id: step-a
207
+ agent: dev
208
+ requires: step-b
209
+ - id: step-b
210
+ agent: dev
211
+ requires: step-c
212
+ - id: step-c
213
+ agent: dev
214
+ requires: step-a
215
+ `;
216
+ const r = (0, WorkflowParser_1.parseWorkflow)(yaml);
217
+ assertHasError(r, WorkflowSchema_1.WORKFLOW_ERRORS.CIRCULAR_REQUIRES, 'circular requires');
218
+ console.log('✅ scenario 8: circular requires chain');
219
+ }
220
+ // ─────────────────────────────────────────────────────────────
221
+ // Driver
222
+ // ─────────────────────────────────────────────────────────────
223
+ function main() {
224
+ console.log('🧪 test_workflow_parser — Story 4.1 regression suite');
225
+ scenarioHappyPath();
226
+ scenarioMultiPhaseShape();
227
+ scenarioMissingRoot();
228
+ scenarioInvalidType();
229
+ scenarioNoAgentOrSquad();
230
+ scenarioDuplicateStepId();
231
+ scenarioUnknownRequires();
232
+ scenarioCircularRequires();
233
+ // Smoke-check the file loader exists and reports missing files cleanly
234
+ const r = (0, WorkflowParser_1.parseWorkflowFile)('/nonexistent/path/to/workflow.yaml');
235
+ assert(!r.ok, 'parseWorkflowFile must return ok=false for missing path');
236
+ console.log('');
237
+ console.log('TEST_WORKFLOW_PARSER_OK');
238
+ }
239
+ try {
240
+ main();
241
+ }
242
+ catch (err) {
243
+ console.error('❌ test_workflow_parser FAILED:', err instanceof Error ? err.message : err);
244
+ process.exit(1);
245
+ }
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ /**
3
+ * test_workflow_schema_backward_compat.ts — Stories 2.1 + 2.2
4
+ *
5
+ * The Workflow schema gained 15 new optional fields in v1.3. This test
6
+ * proves the v1.2 fixtures (the 4 ported workflows shipped in
7
+ * dist-templates/workflows/) still parse cleanly with the v2 parser.
8
+ *
9
+ * Also asserts the new v1.3 error codes fire on invalid values for
10
+ * mode / status / triggers / tools / success_criteria.
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ const path = __importStar(require("path"));
47
+ const fs = __importStar(require("fs"));
48
+ const WorkflowParser_1 = require("./orchestrator/workflow/WorkflowParser");
49
+ const WorkflowSchema_1 = require("./orchestrator/workflow/WorkflowSchema");
50
+ function assertTrue(cond, label) {
51
+ if (!cond)
52
+ throw new Error(`ASSERT_FAILED[${label}]`);
53
+ }
54
+ function assertErrorCode(errors, code, label) {
55
+ if (!errors.some((e) => e.code === code)) {
56
+ throw new Error(`ASSERT_FAILED[${label}]: expected ${code}, got ${JSON.stringify(errors.map((e) => e.code))}`);
57
+ }
58
+ }
59
+ // ─── v1.2 backward-compat: all 4 ported workflows must still parse ───
60
+ const wfDir = path.join(process.cwd(), 'dist-templates', 'workflows');
61
+ const yamls = fs.readdirSync(wfDir).filter((f) => f.endsWith('.yaml'));
62
+ assertTrue(yamls.length >= 4, `at least 4 fixtures present (found ${yamls.length})`);
63
+ for (const f of yamls) {
64
+ const r = (0, WorkflowParser_1.parseWorkflowFile)(path.join(wfDir, f));
65
+ assertTrue(r.ok, `v1.2 fixture parses: ${f}`);
66
+ }
67
+ console.log(`[2.1/2.2] backward-compat: ${yamls.length}/${yamls.length} v1.2 fixtures parse cleanly ✓`);
68
+ // ─── v1.3 minimum field set still works ──────────────────────────────
69
+ const minimalV2 = `
70
+ workflow:
71
+ id: v2-minimal
72
+ name: v2 Minimal
73
+ type: custom
74
+ version: "1.0"
75
+ sequence:
76
+ - id: only-step
77
+ agent: dev
78
+ action: do-the-thing
79
+ `;
80
+ const m = (0, WorkflowParser_1.parseWorkflow)(minimalV2);
81
+ assertTrue(m.ok, 'minimal v2 parses');
82
+ assertTrue(m.workflow?.mode === undefined, 'mode defaults to undefined (engine reads as task)');
83
+ console.log('[2.1] minimal v2 parses ✓');
84
+ // ─── v1.3 full field set parses ──────────────────────────────────────
85
+ const fullV2 = `
86
+ workflow:
87
+ id: v2-full
88
+ name: Full v2
89
+ type: custom
90
+ version: "1.0"
91
+ status: tested
92
+ mode: service
93
+ triggers: [manual, cron]
94
+ objective: "demonstrate every v1.3 field round-trip"
95
+ success_criteria:
96
+ - { id: complete-no-error, description: "all steps reach completion" }
97
+ inputs:
98
+ - { id: brief, type: string, required: true, description: "the brief" }
99
+ outputs:
100
+ - { id: report, type: string, description: "final report path" }
101
+ required_context: ["docs/research-policy.md"]
102
+ squads: ["design-squad"]
103
+ skills: ["analysis"]
104
+ tools:
105
+ allowed: [file, web]
106
+ forbidden: [terminal]
107
+ policies: ["no-uncited-claims"]
108
+ validation:
109
+ - { id: report-exists, description: "report must exist", kind: artifact_exists }
110
+ evidence: ["report.md"]
111
+ failure_handling:
112
+ on_step_failure: retry
113
+ max_retries: 2
114
+ audit_events: ["workflow.completed"]
115
+ learning_rules:
116
+ - { id: store-success, trigger: on_success, description: "remember this pattern" }
117
+ sequence:
118
+ - id: step-1
119
+ agent: dev
120
+ action: build
121
+ `;
122
+ const f2 = (0, WorkflowParser_1.parseWorkflow)(fullV2);
123
+ assertTrue(f2.ok, `full v2 parses (errors=${JSON.stringify(f2.errors)})`);
124
+ assertTrue(f2.workflow?.mode === 'service', 'mode round-trip');
125
+ assertTrue(f2.workflow?.status === 'tested', 'status round-trip');
126
+ assertTrue(f2.workflow?.triggers?.length === 2, 'triggers round-trip');
127
+ assertTrue(f2.workflow?.tools?.forbidden?.[0] === 'terminal', 'tools.forbidden round-trip');
128
+ assertTrue(f2.workflow?.success_criteria?.[0].id === 'complete-no-error', 'success_criteria round-trip');
129
+ console.log('[2.1] full v2 round-trip ✓');
130
+ // ─── v1.3 error codes ────────────────────────────────────────────────
131
+ const badMode = `
132
+ workflow:
133
+ id: bad
134
+ name: Bad
135
+ type: custom
136
+ version: "1.0"
137
+ mode: forever
138
+ sequence:
139
+ - id: x
140
+ agent: y
141
+ action: z
142
+ `;
143
+ const bm = (0, WorkflowParser_1.parseWorkflow)(badMode);
144
+ assertTrue(!bm.ok, 'invalid mode fails');
145
+ assertErrorCode(bm.errors, WorkflowSchema_1.WORKFLOW_ERRORS.INVALID_MODE, 'INVALID_MODE');
146
+ console.log('[2.2] INVALID_MODE ✓');
147
+ const badTrig = `
148
+ workflow:
149
+ id: bad
150
+ name: Bad
151
+ type: custom
152
+ version: "1.0"
153
+ triggers: [supernova]
154
+ sequence:
155
+ - id: x
156
+ agent: y
157
+ action: z
158
+ `;
159
+ const bt = (0, WorkflowParser_1.parseWorkflow)(badTrig);
160
+ assertTrue(!bt.ok, 'invalid trigger fails');
161
+ assertErrorCode(bt.errors, WorkflowSchema_1.WORKFLOW_ERRORS.INVALID_TRIGGERS, 'INVALID_TRIGGERS');
162
+ console.log('[2.2] INVALID_TRIGGERS ✓');
163
+ const badTools = `
164
+ workflow:
165
+ id: bad
166
+ name: Bad
167
+ type: custom
168
+ version: "1.0"
169
+ tools:
170
+ forbidden: "everything"
171
+ sequence:
172
+ - id: x
173
+ agent: y
174
+ action: z
175
+ `;
176
+ const btools = (0, WorkflowParser_1.parseWorkflow)(badTools);
177
+ assertTrue(!btools.ok, 'invalid tools.forbidden fails');
178
+ assertErrorCode(btools.errors, WorkflowSchema_1.WORKFLOW_ERRORS.INVALID_TOOLS_POLICY, 'INVALID_TOOLS_POLICY');
179
+ console.log('[2.2] INVALID_TOOLS_POLICY ✓');
180
+ const badCrit = `
181
+ workflow:
182
+ id: bad
183
+ name: Bad
184
+ type: custom
185
+ version: "1.0"
186
+ success_criteria:
187
+ - "just a string, not an object"
188
+ sequence:
189
+ - id: x
190
+ agent: y
191
+ action: z
192
+ `;
193
+ const bc = (0, WorkflowParser_1.parseWorkflow)(badCrit);
194
+ assertTrue(!bc.ok, 'invalid success_criteria fails');
195
+ assertErrorCode(bc.errors, WorkflowSchema_1.WORKFLOW_ERRORS.INVALID_SUCCESS_CRITERIA, 'INVALID_SUCCESS_CRITERIA');
196
+ console.log('[2.2] INVALID_SUCCESS_CRITERIA ✓');
197
+ console.log('TEST_WORKFLOW_SCHEMA_BACKWARD_COMPAT_OK');
@@ -0,0 +1,91 @@
1
+ # dist-templates/
2
+
3
+ Templates that OpenLife installs into a host CLI when the user runs `openlife system setup --host <host>`.
4
+
5
+ This directory is **part of the npm distribution** (see the `files` array in `package.json`) — it ships to consumers of `@open-life/cli` so the installer can copy artifacts into the host without needing network access.
6
+
7
+ ## Layout
8
+
9
+ ```
10
+ dist-templates/
11
+ └── claude-code/ # Host: claude-code (Story 3.2 — Claude Code first)
12
+ ├── agents/ # Copied to <project>/.claude/agents/
13
+ ├── commands/ # Copied to <project>/.claude/commands/
14
+ └── mcp/ # Merged into ~/.claude.json mcpServers section
15
+ ```
16
+
17
+ Future hosts (Story 3.3+):
18
+
19
+ ```
20
+ dist-templates/
21
+ ├── claude-code/ # ← shipped now
22
+ ├── gemini-cli/ # ← Story 3.3
23
+ └── codex/ # ← Story 3.3
24
+ ```
25
+
26
+ ## Claude Code starter roster (5 of 21 named vault agents)
27
+
28
+ | Agent | Role | File |
29
+ |-----------|-----------------------------------------------------------------|-----------------------------|
30
+ | MAESTRO | Meta-orchestrator — routes work to the right specialist | `openlife-maestro.md` |
31
+ | LYRA | Research synthesis + narrative writing | `openlife-lyra.md` |
32
+ | FORGE | Artifact creation (agents, skills, slash commands, MCP configs) | `openlife-forge.md` |
33
+ | ATLAS | Codebase mapping + architectural analysis | `openlife-atlas.md` |
34
+ | GENESIS | New-project bootstrap + install/scaffold | `openlife-genesis.md` |
35
+
36
+ Remaining 16 (VEIN, FLUX, VECTOR, PRISM, AXIOM, TEMPO, AURA, JONHY, HORMOZI, DARIO, PANTHEON, LOKI, QUILL, VISION, PEPPER, VOID) are scheduled for population in v1.1+ stories once each role has a verified runtime catalog counterpart in `.catalog/agents/`.
37
+
38
+ ## Starter slash commands
39
+
40
+ | Command | Purpose |
41
+ |--------------------|------------------------------------------------------------|
42
+ | `/openlife:status` | Show profile, host, catalog counts, daemon state |
43
+ | `/openlife:ask` | Run a question through the OpenLife Brain |
44
+ | `/openlife:doctor` | Health checks (API keys, model chain, catalogs) |
45
+ | `/openlife:dream` | Run the Dream Organizer over accumulated context |
46
+
47
+ ## MCP
48
+
49
+ `dist-templates/claude-code/mcp/openlife-orchestrator.json` is the MCP manifest the installer merges into `~/.claude.json`. The actual MCP server (`bin/openlife-mcp.js`) is **stubbed** in Story 3.2 — Story 3.3+ wires it up. The manifest ships now so install is a single atomic operation.
50
+
51
+ ## Format notes
52
+
53
+ **Claude Code subagent format** (lean):
54
+
55
+ ```yaml
56
+ ---
57
+ name: <kebab-case>
58
+ description: <when-to-use this agent>
59
+ tools: <comma-separated tools, or omit for default>
60
+ model: sonnet
61
+ ---
62
+
63
+ <system prompt body>
64
+ ```
65
+
66
+ **Claude Code slash command format**:
67
+
68
+ ```yaml
69
+ ---
70
+ description: <one-line summary>
71
+ argument-hint: <optional ARG description>
72
+ allowed-tools: <restricted tool list, optional>
73
+ ---
74
+
75
+ <command instructions>
76
+ ```
77
+
78
+ These formats are stable per Claude Code's published spec — **do not invent extra frontmatter fields**.
79
+
80
+ ## Why these aren't in `.catalog/`
81
+
82
+ `.catalog/` is the OpenLife **runtime** catalog (rich YAML with `commands:`, `dependencies:`, `persona_profile:` — loaded by `AgentRegistry`, `SkillRegistryV2`, `SquadRegistry`).
83
+
84
+ `dist-templates/` is what gets **installed into a host CLI** so the host can invoke OpenLife capabilities natively. Lean Claude Code format ≠ heavy runtime catalog format. Both can co-exist for the same logical agent.
85
+
86
+ ## Adding a new agent to dist-templates
87
+
88
+ 1. Create `dist-templates/claude-code/agents/openlife-<name>.md` with the format above.
89
+ 2. Add the matching runtime entry under `.catalog/agents/<name>/AGENT.md` (heavy format) — FORGE owns this.
90
+ 3. Update this README's roster table.
91
+ 4. Add the regression test (see `src/test_dist_templates_layout.ts`).
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: openlife-atlas
3
+ description: Codebase mapping and architectural analysis specialist. Use for dependency tracing, identifying which files/classes own a behavior, mapping subsystems, surfacing architectural drift, or producing the architecture section of a planning doc. Not for writing new code — that's the default flow. Not for prose writeups — that's LYRA.
4
+ tools: Read, Grep, Glob, Bash
5
+ model: sonnet
6
+ ---
7
+
8
+ You are **ATLAS**, the codebase mapping specialist for OpenLife.
9
+
10
+ ## What you own
11
+
12
+ - **Subsystem mapping**: Given a feature, identify every file/class involved
13
+ - **Dependency tracing**: Where is X imported? What does Y depend on?
14
+ - **Drift detection**: Compare current code structure to documented architecture (`.planning/codebase/ARCHITECTURE.md`, CLAUDE.md)
15
+ - **Impact analysis**: If we change file A, what else breaks?
16
+
17
+ ## What you don't own
18
+
19
+ - Writing application code → default Claude Code flow
20
+ - Prose synthesis or PRDs → LYRA
21
+ - Creating new agents/skills → FORGE
22
+ - Project scaffolding → GENESIS
23
+
24
+ ## OpenLife architecture map (memorize)
25
+
26
+ - **Entry**: `bin/openlife.js` → `dist/index.js` ← compiled from `src/index.ts` (lazy imports!)
27
+ - **Orchestrator (80+ classes)**: `src/orchestrator/` — Brain, Gateway, IntentClassifier, GovernanceLayer, ...
28
+ - **CLI/install**: `src/cli/` — SystemInstaller, InstallFlow (host-aware), AutonomousInstaller
29
+ - **Memory**: `src/memory/` — multi-provider chain (LocalMemoryProvider SQLite/FTS5 + mempalace + mem0 + ...)
30
+ - **Reversa**: `src/reversa/` — autonomous sub-agent with contract/strict modes
31
+ - **Design**: `src/design/` — DesignMd mode (NL UI generation)
32
+ - **Runtime catalogs**: `.catalog/agents/`, `.catalog/skills/`, `.catalog/squads/`, `.catalog/mcps/`
33
+ - **Runtime state**: `.openlife/` (overridable via `OPENLIFE_STATE_DIR`)
34
+
35
+ ## How you work
36
+
37
+ 1. **Start with a hypothesis.** "I think feature X lives in Brain + Gateway." Then verify with `grep`.
38
+ 2. **Read entry points first.** `src/index.ts` is the command registry — find the handler before tracing deeper.
39
+ 3. **Map, don't narrate.** Output: a table or tree, not paragraphs. The user can re-read code; they can't re-read your prose easily.
40
+ 4. **Cite `file:line` for every claim.** "Brain.think() at `src/orchestrator/Brain.ts:142` calls ModelManager.runChain()."
41
+
42
+ ## Principles
43
+
44
+ - **No fabrication.** If you didn't read it, don't claim it exists. Grep first.
45
+ - **Architectural decisions need evidence.** Don't say "this violates separation of concerns" without showing the violation.
46
+ - **Recognize lazy imports.** OpenLife uses lazy `require()` inside command handlers — module-scope imports would hang `--help`. Don't propose moves that break this.
47
+
48
+ ## Anti-patterns
49
+
50
+ - Recommending a refactor you can't justify from the code
51
+ - Stopping at the first match — `grep` shows 1, but there might be 5
52
+ - Confusing the runtime catalog (`.catalog/`) with documentation (`docs/`)
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: openlife-forge
3
+ description: Artifact creation specialist. Use when creating new OpenLife agents, skills, slash commands, MCP configurations, or catalog entries. Knows the OpenLife `.catalog/` layout, the `dist-templates/` distribution format, and the Claude Code subagent format. Not for editing existing code — that's the default flow.
4
+ tools: Read, Write, Edit, Grep, Glob, Bash
5
+ model: sonnet
6
+ ---
7
+
8
+ You are **FORGE**, the artifact creation specialist for OpenLife.
9
+
10
+ ## What you create
11
+
12
+ - **OpenLife runtime agents** in `.catalog/agents/<name>/AGENT.md` (rich YAML format)
13
+ - **Claude Code subagents** in `dist-templates/claude-code/agents/openlife-*.md` (lean frontmatter)
14
+ - **Slash commands** in `dist-templates/claude-code/commands/openlife/*.md`
15
+ - **MCP manifests** in `dist-templates/claude-code/mcp/*.json`
16
+ - **Skills** in `.catalog/skills/<name>/SKILL.md`
17
+ - **Squads** in `.catalog/squads/<name>/SQUAD.md`
18
+
19
+ ## What you don't create
20
+
21
+ - Application logic (`src/orchestrator/*`, `src/cli/*`) — that's normal dev work
22
+ - New host integrations (gemini-cli, codex) — that's a story-level decision, not an artifact
23
+ - Documentation outside catalog/templates — that's LYRA
24
+
25
+ ## How you work
26
+
27
+ 1. **Find the closest analog first.** Grep `.catalog/` for an existing artifact of the same kind. Read it. Copy the structure exactly.
28
+ 2. **Respect the format.** OpenLife runtime catalog = heavy YAML with `agent:`, `persona:`, `commands:`, `dependencies:`. Claude Code dist-templates = lean frontmatter + system prompt. Don't mix.
29
+ 3. **Single file per artifact.** Don't split an agent across multiple files.
30
+ 4. **Register on creation.** New runtime catalog entries must appear in the right registry (AgentRegistry, SkillRegistryV2, SquadRegistry) — verify the loader picks them up.
31
+
32
+ ## Principles
33
+
34
+ - **REUSE > ADAPT > CREATE.** If a 90% match exists, suggest reusing it instead.
35
+ - **Format conformance is non-negotiable.** A new agent that breaks the registry parser is a regression.
36
+ - **Atomic changes.** One PR = one new artifact + its registration + its test.
37
+
38
+ ## Anti-patterns
39
+
40
+ - Inventing new YAML fields not present in sibling artifacts
41
+ - Creating an "openlife-X" Claude Code agent without an underlying `.catalog/agents/X/` runtime entry (unless explicitly host-only)
42
+ - Skipping the regression test