codeframe-ai 0.9.3__tar.gz → 0.9.5__tar.gz

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 (233) hide show
  1. {codeframe_ai-0.9.3/codeframe_ai.egg-info → codeframe_ai-0.9.5}/PKG-INFO +126 -37
  2. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/README.md +111 -26
  3. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/adapters/llm/anthropic.py +109 -67
  4. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/adapters/llm/base.py +22 -7
  5. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/adapters/llm/errors.py +68 -4
  6. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/adapters/llm/openai.py +67 -25
  7. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/auth/api_key_router.py +3 -8
  8. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/auth/dependencies.py +18 -3
  9. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/auth/manager.py +61 -5
  10. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/auth/router.py +57 -41
  11. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/auth/schemas.py +3 -0
  12. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/auth/scopes.py +0 -10
  13. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/auth/stream_tickets.py +17 -4
  14. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/__init__.py +2 -2
  15. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/app.py +583 -516
  16. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/auth_commands.py +108 -23
  17. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/config_commands.py +2 -1
  18. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/dashboard_commands.py +3 -1
  19. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/engines_commands.py +7 -5
  20. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/env_commands.py +9 -8
  21. codeframe_ai-0.9.5/codeframe/cli/helpers.py +41 -0
  22. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/hooks_commands.py +46 -23
  23. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/import_commands.py +9 -6
  24. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/pr_commands.py +203 -52
  25. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/proof_commands.py +87 -34
  26. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/stats_commands.py +5 -4
  27. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/telemetry_runtime.py +7 -4
  28. codeframe_ai-0.9.5/codeframe/cli/validators.py +194 -0
  29. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/config/rate_limits.py +16 -17
  30. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/adapters/builtin.py +18 -2
  31. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/adapters/codex.py +206 -60
  32. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/adapters/git_utils.py +33 -0
  33. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/adapters/kilocode.py +50 -8
  34. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/adapters/opencode.py +53 -32
  35. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/adapters/streaming_chat.py +136 -86
  36. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/adapters/subprocess_adapter.py +103 -87
  37. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/adapters/verification_wrapper.py +16 -1
  38. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/agent.py +58 -11
  39. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/agent_env.py +45 -2
  40. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/blockers.py +26 -4
  41. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/checkpoints.py +52 -7
  42. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/conductor.py +487 -139
  43. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/config.py +10 -12
  44. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/config_watcher.py +51 -28
  45. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/cost_tracker.py +24 -4
  46. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/credentials.py +150 -7
  47. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/dangerous_commands.py +8 -2
  48. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/engine_registry.py +36 -2
  49. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/events.py +13 -4
  50. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/gates.py +255 -138
  51. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/github_integration_config.py +154 -7
  52. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/github_issues_service.py +11 -4
  53. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/importers/ralph.py +32 -2
  54. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/installer.py +2 -13
  55. codeframe_ai-0.9.5/codeframe/core/llm_json.py +113 -0
  56. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/llm_resolution.py +141 -4
  57. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/models.py +10 -0
  58. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/prd.py +6 -3
  59. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/prd_discovery.py +694 -97
  60. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/prd_stress_test.py +32 -2
  61. codeframe_ai-0.9.5/codeframe/core/proof/capture.py +92 -0
  62. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/proof/evidence.py +42 -3
  63. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/proof/ledger.py +191 -102
  64. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/proof/models.py +6 -0
  65. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/proof/obligations.py +21 -0
  66. codeframe_ai-0.9.5/codeframe/core/proof/report.py +54 -0
  67. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/proof/runner.py +18 -1
  68. codeframe_ai-0.9.5/codeframe/core/proof/scope.py +345 -0
  69. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/proof/stubs.py +76 -56
  70. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/react_agent.py +35 -4
  71. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/reconciliation.py +18 -9
  72. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/replay.py +23 -2
  73. codeframe_ai-0.9.5/codeframe/core/run_control.py +435 -0
  74. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/runtime.py +123 -13
  75. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/sandbox/context.py +133 -25
  76. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/schedule.py +3 -3
  77. codeframe_ai-0.9.5/codeframe/core/spend_limit.py +228 -0
  78. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/streaming.py +32 -6
  79. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/task_tree.py +45 -43
  80. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/tasks.py +67 -34
  81. codeframe_ai-0.9.5/codeframe/core/tech_stack.py +135 -0
  82. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/telemetry.py +1 -1
  83. codeframe_ai-0.9.5/codeframe/core/usage_recording.py +249 -0
  84. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/workspace.py +59 -0
  85. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/git/github_integration.py +57 -2
  86. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/lib/audit_logger.py +6 -107
  87. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/lib/metrics_tracker.py +14 -288
  88. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/lib/quality/security_scanner.py +10 -2
  89. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/lib/rate_limiter.py +64 -48
  90. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/notifications/webhook.py +119 -53
  91. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/platform_store/database.py +247 -6
  92. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/platform_store/repositories/base.py +0 -131
  93. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/platform_store/repositories/interactive_sessions.py +3 -1
  94. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/platform_store/repositories/workspace_registry_repository.py +22 -0
  95. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/platform_store/schema_manager.py +12 -0
  96. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/dependencies.py +201 -1
  97. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/models.py +5 -20
  98. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/response_models.py +60 -0
  99. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/batches_v2.py +23 -6
  100. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/checkpoints_v2.py +4 -1
  101. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/costs_v2.py +5 -6
  102. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/discovery_v2.py +160 -13
  103. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/environment_v2.py +2 -2
  104. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/events_v2.py +7 -1
  105. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/gates_v2.py +2 -2
  106. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/github_integrations_v2.py +60 -76
  107. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/interactive_sessions_v2.py +3 -2
  108. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/pr_v2.py +89 -11
  109. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/prd_v2.py +92 -14
  110. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/proof_v2.py +56 -5
  111. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/session_chat_ws.py +120 -7
  112. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/settings_v2.py +52 -92
  113. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/tasks_v2.py +116 -24
  114. codeframe_ai-0.9.5/codeframe/ui/routers/terminal_ws.py +376 -0
  115. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/workspace_v2.py +57 -94
  116. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/server.py +30 -29
  117. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/streaming_utils.py +19 -1
  118. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5/codeframe_ai.egg-info}/PKG-INFO +126 -37
  119. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe_ai.egg-info/SOURCES.txt +8 -1
  120. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe_ai.egg-info/requires.txt +15 -10
  121. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/pyproject.toml +40 -18
  122. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/tests/test_claude_review_workflow_1011.py +2 -1
  123. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/tests/test_deploy_config.py +76 -0
  124. codeframe_ai-0.9.5/tests/test_design_partners_619.py +91 -0
  125. codeframe_ai-0.9.5/tests/test_ops_hygiene_969.py +212 -0
  126. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/tests/test_pm2_scoping_912.py +6 -3
  127. codeframe_ai-0.9.5/tests/test_roadmap_status_1246.py +136 -0
  128. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/tests/test_root_docs_950.py +1 -0
  129. codeframe_ai-0.9.3/codeframe/cli/commands/__init__.py +0 -5
  130. codeframe_ai-0.9.3/codeframe/cli/helpers.py +0 -56
  131. codeframe_ai-0.9.3/codeframe/cli/validators.py +0 -153
  132. codeframe_ai-0.9.3/codeframe/core/llm_json.py +0 -62
  133. codeframe_ai-0.9.3/codeframe/core/proof/capture.py +0 -84
  134. codeframe_ai-0.9.3/codeframe/core/proof/scope.py +0 -113
  135. codeframe_ai-0.9.3/codeframe/ui/routers/terminal_ws.py +0 -265
  136. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/LICENSE +0 -0
  137. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/__init__.py +0 -0
  138. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/__main__.py +0 -0
  139. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/adapters/__init__.py +0 -0
  140. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/adapters/e2b/__init__.py +0 -0
  141. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/adapters/e2b/adapter.py +0 -0
  142. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/adapters/e2b/budget.py +0 -0
  143. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/adapters/e2b/credential_scanner.py +0 -0
  144. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/adapters/llm/__init__.py +0 -0
  145. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/adapters/llm/mock.py +0 -0
  146. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/agents/__init__.py +0 -0
  147. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/agents/dependency_resolver.py +0 -0
  148. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/auth/__init__.py +0 -0
  149. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/auth/api_keys.py +0 -0
  150. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/auth/models.py +0 -0
  151. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/__main__.py +0 -0
  152. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/api_client.py +0 -0
  153. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/cli/auth.py +0 -0
  154. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/__init__.py +0 -0
  155. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/adapters/__init__.py +0 -0
  156. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/adapters/agent_adapter.py +0 -0
  157. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/adapters/claude_code.py +0 -0
  158. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/agents_config.py +0 -0
  159. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/api_key_service.py +0 -0
  160. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/artifacts.py +0 -0
  161. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/atomic_io.py +0 -0
  162. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/blocker_detection.py +0 -0
  163. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/claude_code_guard.py +0 -0
  164. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/context.py +0 -0
  165. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/context_packager.py +0 -0
  166. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/dependency_analyzer.py +0 -0
  167. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/dependency_graph.py +0 -0
  168. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/diagnostic_agent.py +0 -0
  169. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/diagnostics.py +0 -0
  170. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/editor.py +0 -0
  171. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/engine_stats.py +0 -0
  172. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/env_provenance.py +0 -0
  173. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/environment.py +0 -0
  174. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/executor.py +0 -0
  175. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/fix_tracker.py +0 -0
  176. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/git.py +0 -0
  177. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/github_connect_service.py +0 -0
  178. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/hook_trust.py +0 -0
  179. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/hooks.py +0 -0
  180. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/importers/__init__.py +0 -0
  181. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/notifications_config.py +0 -0
  182. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/path_safety.py +0 -0
  183. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/planner.py +0 -0
  184. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/progress.py +0 -0
  185. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/proof/__init__.py +0 -0
  186. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/quick_fixes.py +0 -0
  187. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/review.py +0 -0
  188. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/sandbox/__init__.py +0 -0
  189. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/sandbox/worktree.py +0 -0
  190. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/stall_detector.py +0 -0
  191. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/stall_monitor.py +0 -0
  192. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/state_machine.py +0 -0
  193. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/templates.py +0 -0
  194. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/tools.py +0 -0
  195. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/core/worktrees.py +0 -0
  196. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/git/__init__.py +0 -0
  197. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/lib/__init__.py +0 -0
  198. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/lib/quality/__init__.py +0 -0
  199. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/lib/quality/complexity_analyzer.py +0 -0
  200. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/lib/quality/owasp_patterns.py +0 -0
  201. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/notifications/__init__.py +0 -0
  202. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/planning/__init__.py +0 -0
  203. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/planning/prd_templates.py +0 -0
  204. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/planning/task_scheduler.py +0 -0
  205. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/planning/task_templates.py +0 -0
  206. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/platform_store/__init__.py +0 -0
  207. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/platform_store/repositories/__init__.py +0 -0
  208. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/platform_store/repositories/api_key_repository.py +0 -0
  209. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/platform_store/repositories/audit_repository.py +0 -0
  210. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/platform_store/repositories/token_repository.py +0 -0
  211. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/templates/AGENTS.md.default +0 -0
  212. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/tui/__init__.py +0 -0
  213. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/tui/app.py +0 -0
  214. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/tui/data_service.py +0 -0
  215. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/__init__.py +0 -0
  216. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/__init__.py +0 -0
  217. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/_helpers.py +0 -0
  218. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/blockers_v2.py +0 -0
  219. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/diagnose_v2.py +0 -0
  220. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/git_v2.py +0 -0
  221. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/review_v2.py +0 -0
  222. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/schedule_v2.py +0 -0
  223. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/routers/templates_v2.py +0 -0
  224. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe/ui/shared.py +0 -0
  225. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe_ai.egg-info/dependency_links.txt +0 -0
  226. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe_ai.egg-info/entry_points.txt +0 -0
  227. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/codeframe_ai.egg-info/top_level.txt +0 -0
  228. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/setup.cfg +0 -0
  229. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/tests/test_ambient_workspace_guard.py +0 -0
  230. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/tests/test_deploy_audit_gate_1131.py +0 -0
  231. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/tests/test_lifecycle_gates_948.py +0 -0
  232. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/tests/test_offline_default_946.py +0 -0
  233. {codeframe_ai-0.9.3 → codeframe_ai-0.9.5}/tests/test_workflow_lint_wiring_1122.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codeframe-ai
3
- Version: 0.9.3
3
+ Version: 0.9.5
4
4
  Summary: A project delivery system that orchestrates frontier coding agents: Think, Build, Prove, Ship.
5
5
  Author-email: Frank Bria <hello@codeframe.sh>
6
6
  License: AGPL-3.0-or-later
@@ -17,10 +17,10 @@ Classifier: Programming Language :: Python :: 3.13
17
17
  Requires-Python: >=3.11
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: anthropic<1.0,>=0.18.0
20
+ Requires-Dist: anthropic<2,>=1.0
21
21
  Requires-Dist: bandit>=1.8.6
22
22
  Requires-Dist: tenacity>=8.2.0
23
- Requires-Dist: openai>=1.12.0
23
+ Requires-Dist: openai<3,>=1.12.0
24
24
  Requires-Dist: fastapi>=0.109.0
25
25
  Requires-Dist: uvicorn[standard]>=0.27.0
26
26
  Requires-Dist: websockets>=12.0
@@ -30,12 +30,13 @@ Requires-Dist: python-dotenv>=1.2.2
30
30
  Requires-Dist: sqlalchemy>=2.0.0
31
31
  Requires-Dist: aiosqlite>=0.19.0
32
32
  Requires-Dist: aiohttp>=3.14.0
33
+ Requires-Dist: yarl<2,>=1.22
33
34
  Requires-Dist: httpx>=0.27.0
34
- Requires-Dist: typer>=0.9.0
35
+ Requires-Dist: typer<0.28,>=0.27
35
36
  Requires-Dist: rich>=13.7.0
36
37
  Requires-Dist: textual>=0.86.0
37
38
  Requires-Dist: requests>=2.33.0
38
- Requires-Dist: gitpython>=3.1.50
39
+ Requires-Dist: gitpython<4,>=3.1.60
39
40
  Requires-Dist: pyyaml>=6.0.0
40
41
  Requires-Dist: tree-sitter>=0.20.4
41
42
  Requires-Dist: tree-sitter-python>=0.20.4
@@ -43,9 +44,9 @@ Requires-Dist: tree-sitter-javascript>=0.20.3
43
44
  Requires-Dist: tree-sitter-typescript>=0.20.3
44
45
  Requires-Dist: tiktoken>=0.12.0
45
46
  Requires-Dist: radon>=6.0.1
46
- Requires-Dist: pytest>=8.4.2
47
+ Requires-Dist: pytest<10,>=9.0.3
47
48
  Requires-Dist: ruff>=0.14.0
48
- Requires-Dist: pytest-asyncio>=1.2.0
49
+ Requires-Dist: pytest-asyncio>=1.4.0
49
50
  Requires-Dist: pytest-json-report>=1.5.0
50
51
  Requires-Dist: hypothesis>=6.148.0
51
52
  Requires-Dist: fastapi-users[sqlalchemy]>=15.0.2
@@ -57,16 +58,18 @@ Requires-Dist: slowapi>=0.1.9
57
58
  Requires-Dist: rapidfuzz>=3.0.0
58
59
  Requires-Dist: starlette>=1.0.1
59
60
  Requires-Dist: python-multipart>=0.0.27
60
- Requires-Dist: pyjwt>=2.12.0
61
+ Requires-Dist: pyjwt>=2.15.0
61
62
  Requires-Dist: cryptography>=46.0.7
62
- Requires-Dist: urllib3>=2.7.0
63
+ Requires-Dist: urllib3>=2.8.0
63
64
  Requires-Dist: mcp>=1.23.0
64
65
  Requires-Dist: idna>=3.15
65
66
  Provides-Extra: cloud
66
67
  Requires-Dist: e2b>=2.0.0; extra == "cloud"
68
+ Provides-Extra: redis
69
+ Requires-Dist: limits[redis]; extra == "redis"
67
70
  Provides-Extra: dev
68
- Requires-Dist: pytest>=8.0.0; extra == "dev"
69
- Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
71
+ Requires-Dist: pytest<10,>=9.0.3; extra == "dev"
72
+ Requires-Dist: pytest-asyncio>=1.4.0; extra == "dev"
70
73
  Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
71
74
  Requires-Dist: pytest-json-report>=1.5.0; extra == "dev"
72
75
  Requires-Dist: pytest-timeout>=2.3.0; extra == "dev"
@@ -77,6 +80,7 @@ Requires-Dist: pre-commit>=3.5.0; extra == "dev"
77
80
  Requires-Dist: hypothesis>=6.0.0; extra == "dev"
78
81
  Requires-Dist: e2b>=2.0.0; extra == "dev"
79
82
  Requires-Dist: jsonschema>=4.0.0; extra == "dev"
83
+ Requires-Dist: limits[redis]; extra == "dev"
80
84
  Dynamic: license-file
81
85
 
82
86
  ![CodeFRAME Header](./codeframe_github_header_1600x500.png)
@@ -117,7 +121,7 @@ THINK What are you building? How should it be broken down?
117
121
  cf tasks generate Atomic tasks with dependency graphs
118
122
 
119
123
  BUILD Delegate to the best coding agent for the job
120
- cf work start --engine Claude Code, Codex, OpenCode, Kilocode, or built-in
124
+ cf work start <task> --engine Claude Code, Codex, OpenCode, Kilocode, or built-in
121
125
  CodeFRAME owns: verification gates, self-correction, stall detection
122
126
 
123
127
  PROVE Is the output any good?
@@ -130,7 +134,7 @@ PROVE Is the output any good?
130
134
 
131
135
  SHIP Deploy with confidence
132
136
  cf pr create PR with proof report attached
133
- cf pr merge Only merges if proof passes
137
+ cf pr merge <number> Only merges if proof passes
134
138
 
135
139
  THE CLOSED LOOP
136
140
  Glitch in production
@@ -155,7 +159,7 @@ THE CLOSED LOOP
155
159
  ---
156
160
 
157
161
  > [!NOTE]
158
- > **CodeFRAME is in public beta (`0.9.3`).** The vision and the Golden Path CLI
162
+ > **CodeFRAME is in public beta (`0.9.5`).** The vision and the Golden Path CLI
159
163
  > (`cf init/prd/tasks/work/proof/pr`) and v2 API are stable enough to build on;
160
164
  > the web UI and anything marked "in progress" in
161
165
  > [`docs/PRODUCT_ROADMAP.md`](docs/PRODUCT_ROADMAP.md) are still moving, and
@@ -191,6 +195,7 @@ When working from source, prefix the commands below with `uv run`.
191
195
 
192
196
  ```bash
193
197
  export ANTHROPIC_API_KEY="sk-ant-..." # get yours at https://console.anthropic.com/
198
+ # or store it once instead: cf auth setup --provider anthropic
194
199
  ```
195
200
 
196
201
  **Step 3 — Initialize your project**
@@ -207,28 +212,111 @@ cf tasks generate # Decompose PRD into atomic tasks with dependencies
207
212
  cf tasks list # Review what was generated
208
213
  ```
209
214
 
210
- **Step 5 — Promote the tasks you want to run**
215
+ **Step 5 — Promote one task**
211
216
 
212
217
  `cf tasks generate` creates tasks in `BACKLOG` so you can review them before an
213
- agent touches your code. Move the ones you approve to `READY`:
218
+ agent touches your code. Pick one and move it to `READY` — `cf tasks list` prints
219
+ an 8-character ID for each task, and that prefix is all you need:
214
220
 
215
221
  ```bash
216
- cf tasks set status READY --all --from BACKLOG # every BACKLOG task
217
- cf tasks set status <task-id> READY # one task (note: id before status)
222
+ cf tasks list # copy the ID of the task you want
223
+ cf tasks set status <task-id> READY # note: id before status
224
+ ```
225
+
226
+ Start with one. A generated backlog is typically 20+ tasks, and your first run
227
+ should show you the loop, not build the whole project in one sitting.
228
+
229
+ **Step 6 — Build: hand the task to an agent**
230
+
231
+ ```bash
232
+ cf work start <task-id> --execute
233
+ ```
234
+
235
+ **Step 7 — Prove: capture a requirement, then verify it**
236
+
237
+ PROOF9 verifies *obligations*, and a new workspace has none — so verifying it
238
+ first would report that nothing was checked and exit `2`. That is deliberate: a
239
+ run that checked nothing is not a pass. Give it something to check.
240
+
241
+ ```bash
242
+ cf proof capture \
243
+ --title "add() returns the wrong sum for negative numbers" \
244
+ --description "Calculation is wrong: add(-1, -1) returned 0 instead of -2" \
245
+ --where src/calc.py --severity high --source qa
246
+ ```
247
+
248
+ That creates a requirement, picks the gates that would have caught it, and
249
+ writes a **draft** test stub per gate under `tests/proof/<REQ-ID>/`. The stubs
250
+ are named `draft_*.py` so pytest does not collect them yet, and each one is a
251
+ placeholder `assert False`. Turn them into real tests — drop the `draft_`
252
+ prefix from each filename, and replace the placeholder with an assertion that
253
+ actually proves the bug is fixed:
254
+
255
+ ```bash
256
+ ls tests/proof/REQ-0001/ # draft_test_..._unit.py, draft_test_..._contract.py
257
+ # rename each to test_*.py and write the real assertion
258
+ ```
259
+
260
+ Now the gates have evidence to collect:
261
+
262
+ ```bash
263
+ cf proof run --full # -> All obligations satisfied. (exit 0)
218
264
  ```
219
265
 
220
- Skipping this step is why `--all-ready` below would otherwise report
221
- `No READY tasks found` and do nothing.
266
+ `--full` checks every open requirement; plain `cf proof run` checks only the
267
+ ones your current diff touches. The `unit` and `contract` gates run **your
268
+ project's** pytest, so the project needs pytest available (`uv add --dev
269
+ pytest`) — a gate with no way to run is reported as unverified, never as a pass.
270
+
271
+ This is the loop that compounds: every glitch you capture stays a permanent
272
+ check, and `cf pr merge` refuses to merge while any of them is open.
273
+
274
+ **Step 8 — Ship**
275
+
276
+ `cf pr` talks to GitHub, so it needs a token and the repository: connect them in
277
+ the web UI (Settings → Integrations), or export `GITHUB_TOKEN` (a PAT with
278
+ `repo` scope) and `GITHUB_REPO=owner/repo`.
279
+
280
+ ```bash
281
+ cf pr create # Open a PR with proof report attached
282
+ ```
283
+
284
+ The title defaults to the branch's newest commit (`--title` overrides it), and
285
+ the body ends with the workspace's PROOF9 status: requirement counts, the open
286
+ ones by name, and the latest `cf proof run` verdict.
287
+
288
+ That is the entire workflow. An empty directory through a green `cf proof run`
289
+ is **5m59s** of wall clock on a clean machine — measured, not estimated, in
290
+ [this walkthrough](docs/demos/quickstart-cleanroom.md) — most of it in
291
+ `cf prd generate` and the agent run; Step 7 costs 7 seconds of it. `cf pr create`
292
+ needs a GitHub remote, so it is outside that measurement.
222
293
 
223
- **Step 6 — Build, Prove, and Ship**
294
+ If the agent needs a decision it cannot make, it stops and files a blocker
295
+ rather than guessing — `cf blocker list` shows it and `cf blocker answer <id>
296
+ "..."` unblocks the task.
297
+
298
+ <details>
299
+ <summary>Running the whole backlog</summary>
300
+
301
+ Once you trust the loop, promote everything and let it run:
224
302
 
225
303
  ```bash
226
- cf work batch run --all-ready # Execute all READY tasks (delegates to agent)
227
- cf proof run # Run PROOF9 quality gates
228
- cf pr create # Open a PR with proof report attached
304
+ cf tasks set status READY --all --from BACKLOG # every BACKLOG task
305
+ cf work batch run --all-ready # execute them
229
306
  ```
230
307
 
231
- That is the entire workflow. Everything else is optional.
308
+ This is **long-running** — each task is a full agent run, and serial is the
309
+ default strategy — so start it and watch it from another terminal rather than
310
+ waiting on the prompt:
311
+
312
+ ```bash
313
+ cf work batch status # lists recent batches and their IDs
314
+ cf work batch follow <batch-id> # live progress for one of them
315
+ ```
316
+
317
+ `--strategy parallel --max-parallel 4` and `--retry 2` are worth knowing about
318
+ before you kick off a large batch; see [`docs/QUICKSTART.md`](docs/QUICKSTART.md).
319
+ </details>
232
320
 
233
321
  > **See it run from scratch.** [Cold start on a clean machine](docs/demos/quickstart-cleanroom.md)
234
322
  > is a narrated walkthrough of exactly these steps in a throwaway container —
@@ -250,7 +338,7 @@ That is the entire workflow. Everything else is optional.
250
338
  |
251
339
  v
252
340
  +-BUILD---------------------------------------------+
253
- | cf work start --engine <agent> |
341
+ | cf work start <task> --engine <agent> |
254
342
  | |
255
343
  | +-- Claude Code / Codex / OpenCode / Kilocode / ReAct |
256
344
  | | |
@@ -268,7 +356,7 @@ That is the entire workflow. Everything else is optional.
268
356
  v
269
357
  +-SHIP----------------------------------------------+
270
358
  | cf pr create PR with proof report |
271
- | cf pr merge Merge if proof passes |
359
+ | cf pr merge <n> Merge if proof passes |
272
360
  +---------------------------------------------------+
273
361
  |
274
362
  Glitch in production?
@@ -297,6 +385,7 @@ cf status # Workspace status
297
385
  # Requirements
298
386
  cf prd generate # AI-guided Socratic PRD creation
299
387
  cf prd generate --template lean # Use a specific template
388
+ cf prd generate --max-questions 6 # Cap discovery (default 10; /done finishes early)
300
389
  cf prd add <file.md> # Import existing PRD
301
390
  cf prd show # Display current PRD
302
391
 
@@ -347,7 +436,7 @@ cf blocker show <id> # Blocker details
347
436
  cf blocker answer <id> "answer" # Unblock the agent
348
437
 
349
438
  # Diagnostics
350
- cf work diagnose <id> # AI-powered failure analysis
439
+ cf work diagnose <id> # Pattern-based failure analysis
351
440
  cf env check # Validate environment
352
441
  cf env doctor # Comprehensive health check
353
442
  ```
@@ -382,23 +471,23 @@ resolved by waiving it with a justification.
382
471
  cf review # Run verification gates
383
472
  cf checkpoint create "milestone" # Snapshot project state
384
473
  cf checkpoint list # List checkpoints
385
- cf checkpoint restore <id> # Roll back to checkpoint
474
+ cf checkpoint restore <id> # Restore task statuses (files untouched)
386
475
 
387
476
  # Debugging
388
- cf work replay <id> # Replay and debug a past execution
477
+ cf work replay <run-id> # Replay and debug a past run (built-in react engine)
389
478
  cf dashboard # Launch TUI dashboard
390
479
  ```
391
480
 
392
481
  ### SHIP -- Delivery
393
482
 
394
483
  ```bash
395
- cf pr create # Create PR from current branch
484
+ cf pr create --title "Add search" # PR from the current branch, PROOF9 report appended
396
485
  cf pr list # List open PRs
397
486
  cf pr status # PR status, review state and CI checks
398
487
  cf pr get <number> # Details for one PR
399
- cf pr merge # Merge approved PR
488
+ cf pr merge <number> # Merge it (refused while a requirement is open)
400
489
  cf pr close <number> # Close a PR without merging
401
- cf commit # Commit verified changes
490
+ cf commit create -m "feat: search" # Commit verified changes
402
491
  cf patch export # Export changes as patch
403
492
  ```
404
493
 
@@ -409,7 +498,7 @@ cf patch export # Export changes as patch
409
498
  CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser:
410
499
 
411
500
  - **THINK**: Socratic PRD generation with recursive stress-testing, LLM-powered task decomposition with dependency graphs, 5 PRD templates, 7 task templates, CPM-based scheduling
412
- - **BUILD**: ReAct agent with 7 tools, self-correction with loop prevention, verification gates (ruff/pytest/BUILD), stall detection with configurable recovery (retry/blocker/fail), batch execution (serial/parallel/auto), human-in-the-loop blockers, checkpointing, state persistence, replay/debug mode (`cf work replay`), dynamic config reload, TUI dashboard (`cf dashboard`)
501
+ - **BUILD**: ReAct agent with 7 tools, self-correction with loop prevention, verification gates (ruff/pytest/BUILD), stall detection with configurable recovery (retry/blocker/fail), batch execution (serial/parallel/auto), human-in-the-loop blockers, checkpointing, state persistence, replay/debug mode for built-in react runs (`cf work replay`), dynamic config reload, TUI dashboard (`cf dashboard`)
413
502
  - **PROVE**: PROOF9 quality memory system — 9-gate evidence-based verification (`cf proof run/capture/list/status/show/waive`), every glitch becomes a permanent proof obligation
414
503
  - **SHIP**: GitHub PR workflow, environment validation, task self-diagnosis
415
504
  - **Engine adapters**: Claude Code, Codex, OpenCode, Kilocode, and built-in ReAct — all via `--engine` flag
@@ -431,7 +520,7 @@ CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser
431
520
  - [x] Agent adapter architecture -- delegate to Claude Code, Codex, OpenCode, Kilocode via workspace hooks
432
521
  - [x] Worktree isolation for parallel agent execution
433
522
  - [x] Reconciliation layer for multi-agent output
434
- - [x] Replay/debug mode (`cf work replay`)
523
+ - [x] Replay/debug mode (`cf work replay`, built-in react engine)
435
524
  - [x] TUI dashboard (`cf dashboard`)
436
525
  - [x] Dynamic config reload during batch execution
437
526
  - [x] Multi-provider LLM -- Anthropic, OpenAI, or any OpenAI-compatible endpoint
@@ -477,7 +566,7 @@ export OPENAI_BASE_URL=http://localhost:11434/v1 # for Ollama, vLLM, LM Studio,
477
566
  # Per-workspace: .codeframe/config.yaml supports an `llm:` block for the same options
478
567
 
479
568
  # Optional
480
- export DATABASE_PATH=./codeframe.db # Default: ./.codeframe/state.db
569
+ export DATABASE_PATH=./codeframe.db # Server accounts/keys; default ./.codeframe/platform.db
481
570
  export RATE_LIMIT_ENABLED=true # API rate limiting
482
571
  export RATE_LIMIT_DEFAULT=100/minute # Default limit
483
572
  ```
@@ -545,7 +634,7 @@ CodeFRAME is in **public beta**.
545
634
  - **Security:** found a vulnerability? Report it privately via [GitHub private vulnerability reporting](https://github.com/frankbria/codeframe/security/advisories/new) (or `security@codeframe.sh`) -- never a public issue. See [SECURITY.md](SECURITY.md) for scope and response expectations.
546
635
  - **Licensing:** CodeFRAME is [AGPL-3.0](LICENSE), an open-core stance. [LICENSING.md](LICENSING.md) explains what that means for individuals, internal company use, and embedding -- and how to reach us about **commercial licensing or a hosted offering** (both planned). Commercial inquiries: `licensing@codeframe.sh`.
547
636
  - **Trademark:** the code is AGPL-3.0, but the **CodeFRAME name and logo are trademarks** and are *not* covered by the code license. See [TRADEMARKS.md](TRADEMARKS.md) before using the name for a fork or product.
548
- - **Early access / design partners:** email `hello@codeframe.sh` or reply to the pinned [Discussion](https://github.com/frankbria/codeframe/discussions) to be included.
637
+ - **Early access / design partners:** we are recruiting 5-10 teams for the beta design-partner cohort -- see [DESIGN_PARTNERS.md](DESIGN_PARTNERS.md) for what partners get and commit. To be included, email `hello@codeframe.sh` or reply to the pinned [Discussion](https://github.com/frankbria/codeframe/discussions).
549
638
  - **Help & community:** [Discussions -> Q&A](https://github.com/frankbria/codeframe/discussions/categories/q-a) for questions, [Ideas](https://github.com/frankbria/codeframe/discussions/categories/ideas) for feature requests, and [bug reports](https://github.com/frankbria/codeframe/issues/new/choose) for confirmed bugs.
550
639
 
551
640
  ---
@@ -36,7 +36,7 @@ THINK What are you building? How should it be broken down?
36
36
  cf tasks generate Atomic tasks with dependency graphs
37
37
 
38
38
  BUILD Delegate to the best coding agent for the job
39
- cf work start --engine Claude Code, Codex, OpenCode, Kilocode, or built-in
39
+ cf work start <task> --engine Claude Code, Codex, OpenCode, Kilocode, or built-in
40
40
  CodeFRAME owns: verification gates, self-correction, stall detection
41
41
 
42
42
  PROVE Is the output any good?
@@ -49,7 +49,7 @@ PROVE Is the output any good?
49
49
 
50
50
  SHIP Deploy with confidence
51
51
  cf pr create PR with proof report attached
52
- cf pr merge Only merges if proof passes
52
+ cf pr merge <number> Only merges if proof passes
53
53
 
54
54
  THE CLOSED LOOP
55
55
  Glitch in production
@@ -74,7 +74,7 @@ THE CLOSED LOOP
74
74
  ---
75
75
 
76
76
  > [!NOTE]
77
- > **CodeFRAME is in public beta (`0.9.3`).** The vision and the Golden Path CLI
77
+ > **CodeFRAME is in public beta (`0.9.5`).** The vision and the Golden Path CLI
78
78
  > (`cf init/prd/tasks/work/proof/pr`) and v2 API are stable enough to build on;
79
79
  > the web UI and anything marked "in progress" in
80
80
  > [`docs/PRODUCT_ROADMAP.md`](docs/PRODUCT_ROADMAP.md) are still moving, and
@@ -110,6 +110,7 @@ When working from source, prefix the commands below with `uv run`.
110
110
 
111
111
  ```bash
112
112
  export ANTHROPIC_API_KEY="sk-ant-..." # get yours at https://console.anthropic.com/
113
+ # or store it once instead: cf auth setup --provider anthropic
113
114
  ```
114
115
 
115
116
  **Step 3 — Initialize your project**
@@ -126,28 +127,111 @@ cf tasks generate # Decompose PRD into atomic tasks with dependencies
126
127
  cf tasks list # Review what was generated
127
128
  ```
128
129
 
129
- **Step 5 — Promote the tasks you want to run**
130
+ **Step 5 — Promote one task**
130
131
 
131
132
  `cf tasks generate` creates tasks in `BACKLOG` so you can review them before an
132
- agent touches your code. Move the ones you approve to `READY`:
133
+ agent touches your code. Pick one and move it to `READY` — `cf tasks list` prints
134
+ an 8-character ID for each task, and that prefix is all you need:
133
135
 
134
136
  ```bash
135
- cf tasks set status READY --all --from BACKLOG # every BACKLOG task
136
- cf tasks set status <task-id> READY # one task (note: id before status)
137
+ cf tasks list # copy the ID of the task you want
138
+ cf tasks set status <task-id> READY # note: id before status
139
+ ```
140
+
141
+ Start with one. A generated backlog is typically 20+ tasks, and your first run
142
+ should show you the loop, not build the whole project in one sitting.
143
+
144
+ **Step 6 — Build: hand the task to an agent**
145
+
146
+ ```bash
147
+ cf work start <task-id> --execute
148
+ ```
149
+
150
+ **Step 7 — Prove: capture a requirement, then verify it**
151
+
152
+ PROOF9 verifies *obligations*, and a new workspace has none — so verifying it
153
+ first would report that nothing was checked and exit `2`. That is deliberate: a
154
+ run that checked nothing is not a pass. Give it something to check.
155
+
156
+ ```bash
157
+ cf proof capture \
158
+ --title "add() returns the wrong sum for negative numbers" \
159
+ --description "Calculation is wrong: add(-1, -1) returned 0 instead of -2" \
160
+ --where src/calc.py --severity high --source qa
161
+ ```
162
+
163
+ That creates a requirement, picks the gates that would have caught it, and
164
+ writes a **draft** test stub per gate under `tests/proof/<REQ-ID>/`. The stubs
165
+ are named `draft_*.py` so pytest does not collect them yet, and each one is a
166
+ placeholder `assert False`. Turn them into real tests — drop the `draft_`
167
+ prefix from each filename, and replace the placeholder with an assertion that
168
+ actually proves the bug is fixed:
169
+
170
+ ```bash
171
+ ls tests/proof/REQ-0001/ # draft_test_..._unit.py, draft_test_..._contract.py
172
+ # rename each to test_*.py and write the real assertion
173
+ ```
174
+
175
+ Now the gates have evidence to collect:
176
+
177
+ ```bash
178
+ cf proof run --full # -> All obligations satisfied. (exit 0)
137
179
  ```
138
180
 
139
- Skipping this step is why `--all-ready` below would otherwise report
140
- `No READY tasks found` and do nothing.
181
+ `--full` checks every open requirement; plain `cf proof run` checks only the
182
+ ones your current diff touches. The `unit` and `contract` gates run **your
183
+ project's** pytest, so the project needs pytest available (`uv add --dev
184
+ pytest`) — a gate with no way to run is reported as unverified, never as a pass.
185
+
186
+ This is the loop that compounds: every glitch you capture stays a permanent
187
+ check, and `cf pr merge` refuses to merge while any of them is open.
188
+
189
+ **Step 8 — Ship**
190
+
191
+ `cf pr` talks to GitHub, so it needs a token and the repository: connect them in
192
+ the web UI (Settings → Integrations), or export `GITHUB_TOKEN` (a PAT with
193
+ `repo` scope) and `GITHUB_REPO=owner/repo`.
194
+
195
+ ```bash
196
+ cf pr create # Open a PR with proof report attached
197
+ ```
198
+
199
+ The title defaults to the branch's newest commit (`--title` overrides it), and
200
+ the body ends with the workspace's PROOF9 status: requirement counts, the open
201
+ ones by name, and the latest `cf proof run` verdict.
202
+
203
+ That is the entire workflow. An empty directory through a green `cf proof run`
204
+ is **5m59s** of wall clock on a clean machine — measured, not estimated, in
205
+ [this walkthrough](docs/demos/quickstart-cleanroom.md) — most of it in
206
+ `cf prd generate` and the agent run; Step 7 costs 7 seconds of it. `cf pr create`
207
+ needs a GitHub remote, so it is outside that measurement.
141
208
 
142
- **Step 6 — Build, Prove, and Ship**
209
+ If the agent needs a decision it cannot make, it stops and files a blocker
210
+ rather than guessing — `cf blocker list` shows it and `cf blocker answer <id>
211
+ "..."` unblocks the task.
212
+
213
+ <details>
214
+ <summary>Running the whole backlog</summary>
215
+
216
+ Once you trust the loop, promote everything and let it run:
143
217
 
144
218
  ```bash
145
- cf work batch run --all-ready # Execute all READY tasks (delegates to agent)
146
- cf proof run # Run PROOF9 quality gates
147
- cf pr create # Open a PR with proof report attached
219
+ cf tasks set status READY --all --from BACKLOG # every BACKLOG task
220
+ cf work batch run --all-ready # execute them
148
221
  ```
149
222
 
150
- That is the entire workflow. Everything else is optional.
223
+ This is **long-running** — each task is a full agent run, and serial is the
224
+ default strategy — so start it and watch it from another terminal rather than
225
+ waiting on the prompt:
226
+
227
+ ```bash
228
+ cf work batch status # lists recent batches and their IDs
229
+ cf work batch follow <batch-id> # live progress for one of them
230
+ ```
231
+
232
+ `--strategy parallel --max-parallel 4` and `--retry 2` are worth knowing about
233
+ before you kick off a large batch; see [`docs/QUICKSTART.md`](docs/QUICKSTART.md).
234
+ </details>
151
235
 
152
236
  > **See it run from scratch.** [Cold start on a clean machine](docs/demos/quickstart-cleanroom.md)
153
237
  > is a narrated walkthrough of exactly these steps in a throwaway container —
@@ -169,7 +253,7 @@ That is the entire workflow. Everything else is optional.
169
253
  |
170
254
  v
171
255
  +-BUILD---------------------------------------------+
172
- | cf work start --engine <agent> |
256
+ | cf work start <task> --engine <agent> |
173
257
  | |
174
258
  | +-- Claude Code / Codex / OpenCode / Kilocode / ReAct |
175
259
  | | |
@@ -187,7 +271,7 @@ That is the entire workflow. Everything else is optional.
187
271
  v
188
272
  +-SHIP----------------------------------------------+
189
273
  | cf pr create PR with proof report |
190
- | cf pr merge Merge if proof passes |
274
+ | cf pr merge <n> Merge if proof passes |
191
275
  +---------------------------------------------------+
192
276
  |
193
277
  Glitch in production?
@@ -216,6 +300,7 @@ cf status # Workspace status
216
300
  # Requirements
217
301
  cf prd generate # AI-guided Socratic PRD creation
218
302
  cf prd generate --template lean # Use a specific template
303
+ cf prd generate --max-questions 6 # Cap discovery (default 10; /done finishes early)
219
304
  cf prd add <file.md> # Import existing PRD
220
305
  cf prd show # Display current PRD
221
306
 
@@ -266,7 +351,7 @@ cf blocker show <id> # Blocker details
266
351
  cf blocker answer <id> "answer" # Unblock the agent
267
352
 
268
353
  # Diagnostics
269
- cf work diagnose <id> # AI-powered failure analysis
354
+ cf work diagnose <id> # Pattern-based failure analysis
270
355
  cf env check # Validate environment
271
356
  cf env doctor # Comprehensive health check
272
357
  ```
@@ -301,23 +386,23 @@ resolved by waiving it with a justification.
301
386
  cf review # Run verification gates
302
387
  cf checkpoint create "milestone" # Snapshot project state
303
388
  cf checkpoint list # List checkpoints
304
- cf checkpoint restore <id> # Roll back to checkpoint
389
+ cf checkpoint restore <id> # Restore task statuses (files untouched)
305
390
 
306
391
  # Debugging
307
- cf work replay <id> # Replay and debug a past execution
392
+ cf work replay <run-id> # Replay and debug a past run (built-in react engine)
308
393
  cf dashboard # Launch TUI dashboard
309
394
  ```
310
395
 
311
396
  ### SHIP -- Delivery
312
397
 
313
398
  ```bash
314
- cf pr create # Create PR from current branch
399
+ cf pr create --title "Add search" # PR from the current branch, PROOF9 report appended
315
400
  cf pr list # List open PRs
316
401
  cf pr status # PR status, review state and CI checks
317
402
  cf pr get <number> # Details for one PR
318
- cf pr merge # Merge approved PR
403
+ cf pr merge <number> # Merge it (refused while a requirement is open)
319
404
  cf pr close <number> # Close a PR without merging
320
- cf commit # Commit verified changes
405
+ cf commit create -m "feat: search" # Commit verified changes
321
406
  cf patch export # Export changes as patch
322
407
  ```
323
408
 
@@ -328,7 +413,7 @@ cf patch export # Export changes as patch
328
413
  CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser:
329
414
 
330
415
  - **THINK**: Socratic PRD generation with recursive stress-testing, LLM-powered task decomposition with dependency graphs, 5 PRD templates, 7 task templates, CPM-based scheduling
331
- - **BUILD**: ReAct agent with 7 tools, self-correction with loop prevention, verification gates (ruff/pytest/BUILD), stall detection with configurable recovery (retry/blocker/fail), batch execution (serial/parallel/auto), human-in-the-loop blockers, checkpointing, state persistence, replay/debug mode (`cf work replay`), dynamic config reload, TUI dashboard (`cf dashboard`)
416
+ - **BUILD**: ReAct agent with 7 tools, self-correction with loop prevention, verification gates (ruff/pytest/BUILD), stall detection with configurable recovery (retry/blocker/fail), batch execution (serial/parallel/auto), human-in-the-loop blockers, checkpointing, state persistence, replay/debug mode for built-in react runs (`cf work replay`), dynamic config reload, TUI dashboard (`cf dashboard`)
332
417
  - **PROVE**: PROOF9 quality memory system — 9-gate evidence-based verification (`cf proof run/capture/list/status/show/waive`), every glitch becomes a permanent proof obligation
333
418
  - **SHIP**: GitHub PR workflow, environment validation, task self-diagnosis
334
419
  - **Engine adapters**: Claude Code, Codex, OpenCode, Kilocode, and built-in ReAct — all via `--engine` flag
@@ -350,7 +435,7 @@ CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser
350
435
  - [x] Agent adapter architecture -- delegate to Claude Code, Codex, OpenCode, Kilocode via workspace hooks
351
436
  - [x] Worktree isolation for parallel agent execution
352
437
  - [x] Reconciliation layer for multi-agent output
353
- - [x] Replay/debug mode (`cf work replay`)
438
+ - [x] Replay/debug mode (`cf work replay`, built-in react engine)
354
439
  - [x] TUI dashboard (`cf dashboard`)
355
440
  - [x] Dynamic config reload during batch execution
356
441
  - [x] Multi-provider LLM -- Anthropic, OpenAI, or any OpenAI-compatible endpoint
@@ -396,7 +481,7 @@ export OPENAI_BASE_URL=http://localhost:11434/v1 # for Ollama, vLLM, LM Studio,
396
481
  # Per-workspace: .codeframe/config.yaml supports an `llm:` block for the same options
397
482
 
398
483
  # Optional
399
- export DATABASE_PATH=./codeframe.db # Default: ./.codeframe/state.db
484
+ export DATABASE_PATH=./codeframe.db # Server accounts/keys; default ./.codeframe/platform.db
400
485
  export RATE_LIMIT_ENABLED=true # API rate limiting
401
486
  export RATE_LIMIT_DEFAULT=100/minute # Default limit
402
487
  ```
@@ -464,7 +549,7 @@ CodeFRAME is in **public beta**.
464
549
  - **Security:** found a vulnerability? Report it privately via [GitHub private vulnerability reporting](https://github.com/frankbria/codeframe/security/advisories/new) (or `security@codeframe.sh`) -- never a public issue. See [SECURITY.md](SECURITY.md) for scope and response expectations.
465
550
  - **Licensing:** CodeFRAME is [AGPL-3.0](LICENSE), an open-core stance. [LICENSING.md](LICENSING.md) explains what that means for individuals, internal company use, and embedding -- and how to reach us about **commercial licensing or a hosted offering** (both planned). Commercial inquiries: `licensing@codeframe.sh`.
466
551
  - **Trademark:** the code is AGPL-3.0, but the **CodeFRAME name and logo are trademarks** and are *not* covered by the code license. See [TRADEMARKS.md](TRADEMARKS.md) before using the name for a fork or product.
467
- - **Early access / design partners:** email `hello@codeframe.sh` or reply to the pinned [Discussion](https://github.com/frankbria/codeframe/discussions) to be included.
552
+ - **Early access / design partners:** we are recruiting 5-10 teams for the beta design-partner cohort -- see [DESIGN_PARTNERS.md](DESIGN_PARTNERS.md) for what partners get and commit. To be included, email `hello@codeframe.sh` or reply to the pinned [Discussion](https://github.com/frankbria/codeframe/discussions).
468
553
  - **Help & community:** [Discussions -> Q&A](https://github.com/frankbria/codeframe/discussions/categories/q-a) for questions, [Ideas](https://github.com/frankbria/codeframe/discussions/categories/ideas) for feature requests, and [bug reports](https://github.com/frankbria/codeframe/issues/new/choose) for confirmed bugs.
469
554
 
470
555
  ---