multi-forge 0.2.0__py3-none-any.whl

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 (311) hide show
  1. forge/__init__.py +3 -0
  2. forge/_extensions/agents/.gitkeep +0 -0
  3. forge/_extensions/commands/.gitkeep +0 -0
  4. forge/_extensions/skills/analyze/SKILL.md +87 -0
  5. forge/_extensions/skills/challenge/SKILL.md +91 -0
  6. forge/_extensions/skills/consensus/SKILL.md +120 -0
  7. forge/_extensions/skills/consensus/resources/code_consensus_evaluation.md +94 -0
  8. forge/_extensions/skills/consensus/resources/consensus_evaluation.md +70 -0
  9. forge/_extensions/skills/consensus/resources/synthesis.md +101 -0
  10. forge/_extensions/skills/debate/SKILL.md +116 -0
  11. forge/_extensions/skills/debate/resources/code_debate_evaluation.md +101 -0
  12. forge/_extensions/skills/debate/resources/debate_evaluation.md +90 -0
  13. forge/_extensions/skills/panel/SKILL.md +141 -0
  14. forge/_extensions/skills/panel/resources/synthesis.md +103 -0
  15. forge/_extensions/skills/qa/SKILL.md +704 -0
  16. forge/_extensions/skills/qa/resources/checklist/0-enable.md +78 -0
  17. forge/_extensions/skills/qa/resources/checklist/1-preflight.md +24 -0
  18. forge/_extensions/skills/qa/resources/checklist/10-resume.md +143 -0
  19. forge/_extensions/skills/qa/resources/checklist/11-config.md +150 -0
  20. forge/_extensions/skills/qa/resources/checklist/12-search.md +58 -0
  21. forge/_extensions/skills/qa/resources/checklist/13-guard.md +237 -0
  22. forge/_extensions/skills/qa/resources/checklist/14-workflow.md +305 -0
  23. forge/_extensions/skills/qa/resources/checklist/15-skills.md +155 -0
  24. forge/_extensions/skills/qa/resources/checklist/16-handoff.md +224 -0
  25. forge/_extensions/skills/qa/resources/checklist/17-info.md +50 -0
  26. forge/_extensions/skills/qa/resources/checklist/18-disable.md +84 -0
  27. forge/_extensions/skills/qa/resources/checklist/19-uninstall.md +146 -0
  28. forge/_extensions/skills/qa/resources/checklist/2-extensions.md +188 -0
  29. forge/_extensions/skills/qa/resources/checklist/20-cleanup.md +36 -0
  30. forge/_extensions/skills/qa/resources/checklist/3-auth.md +234 -0
  31. forge/_extensions/skills/qa/resources/checklist/4-proxy.md +481 -0
  32. forge/_extensions/skills/qa/resources/checklist/5-session.md +541 -0
  33. forge/_extensions/skills/qa/resources/checklist/6-hooks.md +275 -0
  34. forge/_extensions/skills/qa/resources/checklist/7-costs.md +309 -0
  35. forge/_extensions/skills/qa/resources/checklist/8-status-line.md +174 -0
  36. forge/_extensions/skills/qa/resources/checklist/9-direct-commands.md +146 -0
  37. forge/_extensions/skills/qa/resources/checklist.md +103 -0
  38. forge/_extensions/skills/qa/resources/report-template.md +62 -0
  39. forge/_extensions/skills/qa/scripts/start-container.sh +529 -0
  40. forge/_extensions/skills/qa/scripts/walkthrough-state.py +1137 -0
  41. forge/_extensions/skills/review/SKILL.md +125 -0
  42. forge/_extensions/skills/review/references/claude-4.6.md +474 -0
  43. forge/_extensions/skills/review/references/claude-4.7.md +710 -0
  44. forge/_extensions/skills/review/references/gemini-3.1.md +546 -0
  45. forge/_extensions/skills/review/references/gpt-5.5.md +490 -0
  46. forge/_extensions/skills/review/references/skills-writing-guide.md +1588 -0
  47. forge/_extensions/skills/review/resources/code-anthropic.md +160 -0
  48. forge/_extensions/skills/review/resources/code-gemini.md +184 -0
  49. forge/_extensions/skills/review/resources/code-openai.md +203 -0
  50. forge/_extensions/skills/review/resources/code.md +160 -0
  51. forge/_extensions/skills/review-docs/SKILL.md +121 -0
  52. forge/_extensions/skills/review-docs/resources/docs-anthropic.md +170 -0
  53. forge/_extensions/skills/review-docs/resources/docs-gemini.md +204 -0
  54. forge/_extensions/skills/review-docs/resources/docs-openai.md +231 -0
  55. forge/_extensions/skills/review-docs/resources/docs.md +170 -0
  56. forge/_extensions/skills/smoke-test/SKILL.md +27 -0
  57. forge/_extensions/skills/smoke-test/scripts/smoke-test.sh +118 -0
  58. forge/_extensions/skills/understand/SKILL.md +148 -0
  59. forge/_extensions/skills/understand/resources/code-anthropic.md +163 -0
  60. forge/_extensions/skills/understand/resources/code-gemini.md +194 -0
  61. forge/_extensions/skills/understand/resources/code-openai.md +181 -0
  62. forge/_extensions/skills/understand/resources/code.md +163 -0
  63. forge/_extensions/skills/understand/resources/docs-anthropic.md +177 -0
  64. forge/_extensions/skills/understand/resources/docs-gemini.md +202 -0
  65. forge/_extensions/skills/understand/resources/docs-openai.md +191 -0
  66. forge/_extensions/skills/understand/resources/docs.md +177 -0
  67. forge/_extensions/skills/walkthrough/SKILL.md +599 -0
  68. forge/_extensions/skills/walkthrough/resources/checklist.md +765 -0
  69. forge/_extensions/skills/walkthrough/scripts/run-in-repo.sh +118 -0
  70. forge/_extensions/skills/walkthrough/scripts/setup-test-repo.sh +198 -0
  71. forge/_extensions/skills/walkthrough/scripts/walkthrough-state.py +1137 -0
  72. forge/backend/__init__.py +174 -0
  73. forge/backend/adapters/__init__.py +38 -0
  74. forge/backend/adapters/litellm.py +158 -0
  75. forge/backend/creation.py +89 -0
  76. forge/backend/registry.py +178 -0
  77. forge/cli/__init__.py +16 -0
  78. forge/cli/auth.py +483 -0
  79. forge/cli/backend.py +298 -0
  80. forge/cli/claude.py +411 -0
  81. forge/cli/config_cmd.py +303 -0
  82. forge/cli/extensions.py +1001 -0
  83. forge/cli/gc.py +165 -0
  84. forge/cli/guard.py +1018 -0
  85. forge/cli/guards.py +106 -0
  86. forge/cli/handoff.py +110 -0
  87. forge/cli/hooks/__init__.py +36 -0
  88. forge/cli/hooks/_group.py +20 -0
  89. forge/cli/hooks/_helpers.py +149 -0
  90. forge/cli/hooks/commands.py +1677 -0
  91. forge/cli/hooks/direct_commands.py +1304 -0
  92. forge/cli/hooks/install.py +232 -0
  93. forge/cli/hooks/policy.py +151 -0
  94. forge/cli/hooks/read_hygiene.py +74 -0
  95. forge/cli/hooks/verification.py +370 -0
  96. forge/cli/logs.py +406 -0
  97. forge/cli/main.py +292 -0
  98. forge/cli/proxy.py +1821 -0
  99. forge/cli/proxy_costs.py +313 -0
  100. forge/cli/search.py +416 -0
  101. forge/cli/session.py +892 -0
  102. forge/cli/session_addendum.py +81 -0
  103. forge/cli/session_fork.py +750 -0
  104. forge/cli/session_handoff.py +141 -0
  105. forge/cli/session_lifecycle.py +2053 -0
  106. forge/cli/session_manage.py +1336 -0
  107. forge/cli/session_memory.py +201 -0
  108. forge/cli/status_line.py +1398 -0
  109. forge/cli/workflow.py +1964 -0
  110. forge/config/__init__.py +110 -0
  111. forge/config/dataclass_utils.py +88 -0
  112. forge/config/defaults/__init__.py +0 -0
  113. forge/config/defaults/backends/__init__.py +0 -0
  114. forge/config/defaults/backends/litellm.yaml +196 -0
  115. forge/config/defaults/templates/__init__.py +0 -0
  116. forge/config/defaults/templates/litellm-anthropic-local.yaml +33 -0
  117. forge/config/defaults/templates/litellm-anthropic.yaml +24 -0
  118. forge/config/defaults/templates/litellm-gemini-flash-local.yaml +37 -0
  119. forge/config/defaults/templates/litellm-gemini-local.yaml +32 -0
  120. forge/config/defaults/templates/litellm-gemini-test.yaml +34 -0
  121. forge/config/defaults/templates/litellm-gemini.yaml +21 -0
  122. forge/config/defaults/templates/litellm-openai-codex-local.yaml +36 -0
  123. forge/config/defaults/templates/litellm-openai-local.yaml +38 -0
  124. forge/config/defaults/templates/litellm-openai.yaml +28 -0
  125. forge/config/defaults/templates/openrouter-anthropic.yaml +23 -0
  126. forge/config/defaults/templates/openrouter-deepseek.yaml +26 -0
  127. forge/config/defaults/templates/openrouter-gemini-flash.yaml +26 -0
  128. forge/config/defaults/templates/openrouter-gemini.yaml +23 -0
  129. forge/config/defaults/templates/openrouter-glm.yaml +23 -0
  130. forge/config/defaults/templates/openrouter-kimi.yaml +30 -0
  131. forge/config/defaults/templates/openrouter-minimax.yaml +26 -0
  132. forge/config/defaults/templates/openrouter-openai-codex.yaml +23 -0
  133. forge/config/defaults/templates/openrouter-openai.yaml +28 -0
  134. forge/config/defaults/templates/openrouter-qwen.yaml +25 -0
  135. forge/config/loader.py +675 -0
  136. forge/config/schema.py +448 -0
  137. forge/core/__init__.py +5 -0
  138. forge/core/auth/__init__.py +67 -0
  139. forge/core/auth/capabilities.py +219 -0
  140. forge/core/auth/credentials_file.py +244 -0
  141. forge/core/auth/protocols.py +18 -0
  142. forge/core/auth/secrets.py +243 -0
  143. forge/core/auth/template_secrets.py +112 -0
  144. forge/core/data/__init__.py +5 -0
  145. forge/core/data/model_catalog.yaml +1522 -0
  146. forge/core/data/pricing.yaml +140 -0
  147. forge/core/data/system_prompt_addendums/__init__.py +0 -0
  148. forge/core/data/system_prompt_addendums/gemini.md +330 -0
  149. forge/core/data/system_prompt_addendums/openai.md +328 -0
  150. forge/core/llm/__init__.py +231 -0
  151. forge/core/llm/clients/__init__.py +14 -0
  152. forge/core/llm/clients/base.py +115 -0
  153. forge/core/llm/clients/litellm.py +619 -0
  154. forge/core/llm/clients/openai_compat.py +244 -0
  155. forge/core/llm/clients/openrouter.py +234 -0
  156. forge/core/llm/credentials.py +439 -0
  157. forge/core/llm/detection.py +86 -0
  158. forge/core/llm/errors.py +44 -0
  159. forge/core/llm/protocols.py +80 -0
  160. forge/core/llm/types.py +176 -0
  161. forge/core/logging.py +146 -0
  162. forge/core/models/__init__.py +91 -0
  163. forge/core/models/catalog.py +467 -0
  164. forge/core/models/pricing.py +165 -0
  165. forge/core/models/types.py +167 -0
  166. forge/core/naming.py +212 -0
  167. forge/core/ops/__init__.py +73 -0
  168. forge/core/ops/context.py +141 -0
  169. forge/core/ops/gc.py +802 -0
  170. forge/core/ops/proxy.py +146 -0
  171. forge/core/ops/resolution.py +135 -0
  172. forge/core/ops/session.py +344 -0
  173. forge/core/ops/session_context.py +548 -0
  174. forge/core/paths.py +38 -0
  175. forge/core/process.py +54 -0
  176. forge/core/reactive/__init__.py +38 -0
  177. forge/core/reactive/cost_tracking.py +300 -0
  178. forge/core/reactive/env.py +180 -0
  179. forge/core/reactive/proxy.py +78 -0
  180. forge/core/reactive/routing.py +622 -0
  181. forge/core/reactive/session_runner.py +185 -0
  182. forge/core/reactive/structured_output.py +62 -0
  183. forge/core/reactive/tagger.py +94 -0
  184. forge/core/reactive/throttle.py +132 -0
  185. forge/core/state/__init__.py +59 -0
  186. forge/core/state/exceptions.py +59 -0
  187. forge/core/state/io.py +140 -0
  188. forge/core/state/lock.py +99 -0
  189. forge/core/state/timestamps.py +60 -0
  190. forge/core/transcript.py +78 -0
  191. forge/core/typing_helpers.py +24 -0
  192. forge/core/workqueue/__init__.py +67 -0
  193. forge/core/workqueue/queue.py +552 -0
  194. forge/core/workqueue/types.py +63 -0
  195. forge/guard/__init__.py +26 -0
  196. forge/guard/deterministic/__init__.py +26 -0
  197. forge/guard/deterministic/base.py +158 -0
  198. forge/guard/deterministic/coding_standards.py +256 -0
  199. forge/guard/deterministic/registry.py +148 -0
  200. forge/guard/deterministic/tdd.py +171 -0
  201. forge/guard/engine.py +216 -0
  202. forge/guard/protocols.py +91 -0
  203. forge/guard/queries.py +96 -0
  204. forge/guard/semantic/__init__.py +34 -0
  205. forge/guard/semantic/promotion.py +18 -0
  206. forge/guard/semantic/supervisor.py +813 -0
  207. forge/guard/semantic/verdict.py +183 -0
  208. forge/guard/store.py +124 -0
  209. forge/guard/team/__init__.py +6 -0
  210. forge/guard/team/config.py +24 -0
  211. forge/guard/team/handlers.py +209 -0
  212. forge/guard/team/prompts.py +41 -0
  213. forge/guard/types.py +125 -0
  214. forge/guard/workflow/__init__.py +17 -0
  215. forge/guard/workflow/branches.py +67 -0
  216. forge/guard/workflow/config.py +63 -0
  217. forge/guard/workflow/divergence.py +113 -0
  218. forge/guard/workflow/policy.py +87 -0
  219. forge/guard/workflow/stages.py +205 -0
  220. forge/install/__init__.py +55 -0
  221. forge/install/cli.py +281 -0
  222. forge/install/exceptions.py +163 -0
  223. forge/install/hooks.py +109 -0
  224. forge/install/installer.py +1037 -0
  225. forge/install/models.py +321 -0
  226. forge/install/preset.py +272 -0
  227. forge/install/settings_merge.py +831 -0
  228. forge/install/tracking.py +238 -0
  229. forge/install/version.py +141 -0
  230. forge/proxy/__init__.py +0 -0
  231. forge/proxy/base_client.py +181 -0
  232. forge/proxy/client_adapter.py +476 -0
  233. forge/proxy/client_factory.py +531 -0
  234. forge/proxy/converters.py +1206 -0
  235. forge/proxy/cost_logger.py +132 -0
  236. forge/proxy/cost_tracker.py +242 -0
  237. forge/proxy/data_models.py +338 -0
  238. forge/proxy/error_hints.py +92 -0
  239. forge/proxy/metrics.py +222 -0
  240. forge/proxy/model_spec.py +158 -0
  241. forge/proxy/proxies.py +333 -0
  242. forge/proxy/proxy_identity.py +134 -0
  243. forge/proxy/proxy_orchestrator.py +1018 -0
  244. forge/proxy/proxy_startup.py +54 -0
  245. forge/proxy/server.py +1561 -0
  246. forge/proxy/utils.py +537 -0
  247. forge/review/__init__.py +6 -0
  248. forge/review/adversarial.py +111 -0
  249. forge/review/consensus.py +236 -0
  250. forge/review/engine.py +356 -0
  251. forge/review/models.py +437 -0
  252. forge/review/resources/__init__.py +5 -0
  253. forge/review/resources/codereview-performance.md +85 -0
  254. forge/review/resources/codereview-quick.md +75 -0
  255. forge/review/resources/codereview-security.md +92 -0
  256. forge/review/resources/codereview.md +85 -0
  257. forge/review/resources/docreview-quick.md +75 -0
  258. forge/review/resources/docreview.md +86 -0
  259. forge/review/resources/thinkdeep.md +89 -0
  260. forge/review/routing.py +368 -0
  261. forge/review/synthesis.py +73 -0
  262. forge/runtime_config.py +438 -0
  263. forge/search/__init__.py +55 -0
  264. forge/search/bm25_store.py +264 -0
  265. forge/search/content_store.py +197 -0
  266. forge/search/engine.py +352 -0
  267. forge/search/exceptions.py +51 -0
  268. forge/search/extractor.py +234 -0
  269. forge/search/index_state.py +295 -0
  270. forge/search/store.py +215 -0
  271. forge/search/tokenizer.py +24 -0
  272. forge/session/__init__.py +130 -0
  273. forge/session/active.py +339 -0
  274. forge/session/artifacts.py +202 -0
  275. forge/session/claude/__init__.py +50 -0
  276. forge/session/claude/cleanup.py +105 -0
  277. forge/session/claude/invoke.py +236 -0
  278. forge/session/claude/paths.py +200 -0
  279. forge/session/cleanup.py +216 -0
  280. forge/session/config.py +34 -0
  281. forge/session/direct_model.py +107 -0
  282. forge/session/effective.py +169 -0
  283. forge/session/exceptions.py +255 -0
  284. forge/session/handoff.py +881 -0
  285. forge/session/handoff_agent.py +544 -0
  286. forge/session/hooks/__init__.py +35 -0
  287. forge/session/hooks/models.py +73 -0
  288. forge/session/hooks/session_start.py +507 -0
  289. forge/session/identity.py +84 -0
  290. forge/session/index.py +553 -0
  291. forge/session/manager.py +1506 -0
  292. forge/session/models.py +572 -0
  293. forge/session/overrides.py +344 -0
  294. forge/session/plan_resolution.py +286 -0
  295. forge/session/prev_sessions.py +128 -0
  296. forge/session/store.py +431 -0
  297. forge/session/validation.py +47 -0
  298. forge/session/worktree/__init__.py +65 -0
  299. forge/session/worktree/cleanup.py +262 -0
  300. forge/session/worktree/config_copy.py +203 -0
  301. forge/session/worktree/create.py +332 -0
  302. forge/sidecar/__init__.py +29 -0
  303. forge/sidecar/container.py +161 -0
  304. forge/sidecar/docker.py +86 -0
  305. forge/sidecar/secrets.py +19 -0
  306. multi_forge-0.2.0.dist-info/METADATA +242 -0
  307. multi_forge-0.2.0.dist-info/RECORD +311 -0
  308. multi_forge-0.2.0.dist-info/WHEEL +4 -0
  309. multi_forge-0.2.0.dist-info/entry_points.txt +2 -0
  310. multi_forge-0.2.0.dist-info/licenses/LICENSE +203 -0
  311. multi_forge-0.2.0.dist-info/licenses/NOTICE +14 -0
@@ -0,0 +1,242 @@
1
+ Metadata-Version: 2.4
2
+ Name: multi-forge
3
+ Version: 0.2.0
4
+ Summary: Multi-runtime agent toolkit: proxy routing, cost control, session management, policy enforcement, and workflow orchestration
5
+ Project-URL: Homepage, https://github.com/hapa1i/multi-forge
6
+ Project-URL: Repository, https://github.com/hapa1i/multi-forge
7
+ Project-URL: Issues, https://github.com/hapa1i/multi-forge/issues
8
+ Project-URL: Documentation, https://github.com/hapa1i/multi-forge/tree/main/docs
9
+ Author-email: Habib Farr <hapali@pm.me>
10
+ License-Expression: Apache-2.0
11
+ License-File: LICENSE
12
+ License-File: NOTICE
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: Apache Software License
16
+ Classifier: Operating System :: MacOS
17
+ Classifier: Operating System :: POSIX :: Linux
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Topic :: Software Development
23
+ Requires-Python: <3.14,>=3.11
24
+ Requires-Dist: click>=8.3.1
25
+ Requires-Dist: coolname<6,>=5.0.0
26
+ Requires-Dist: dacite>=1.8.0
27
+ Requires-Dist: fastapi>=0.115.11
28
+ Requires-Dist: httpx>=0.25.0
29
+ Requires-Dist: litellm[proxy]>=1.84.0
30
+ Requires-Dist: openai>=1.0.0
31
+ Requires-Dist: packaging>=21.0
32
+ Requires-Dist: pydantic>=2.0.0
33
+ Requires-Dist: python-dotenv>=1.2.2
34
+ Requires-Dist: pyyaml>=6.0.0
35
+ Requires-Dist: rich>=13.0.0
36
+ Requires-Dist: ruamel-yaml>=0.18.0
37
+ Requires-Dist: tenacity>=8.0.0
38
+ Requires-Dist: uvicorn>=0.31.1
39
+ Requires-Dist: watchfiles>=0.20
40
+ Description-Content-Type: text/markdown
41
+
42
+ # Multi-Forge
43
+
44
+ [![License](https://img.shields.io/github/license/hapa1i/multi-forge)](LICENSE)
45
+ [![Python](https://img.shields.io/badge/python-3.11--3.13-blue)](https://github.com/hapa1i/multi-forge)
46
+
47
+ > [!WARNING]
48
+ > **Research Preview** -- Forge is under active development. APIs, commands, and file formats may change without notice
49
+ > between releases. Not recommended for production use.
50
+
51
+ **Multi-runtime agent toolkit: proxy routing, cost control, session management, and policy enforcement for coding
52
+ agents.**
53
+
54
+ Forge sits between you and your coding agent (Claude Code today, Codex and Gemini next), adding persistent sessions,
55
+ multi-provider model routing, cost visibility with spend caps, and autonomous verification. You run
56
+ `forge session start` instead of `claude`, and Forge handles the rest -- routing to your chosen model provider, tracking
57
+ state across sessions, and enforcing policies.
58
+
59
+ ```bash
60
+ # Use Claude with session tracking (no proxy needed)
61
+ forge session start
62
+
63
+ # Or route through different model providers (after creating proxies -- see Quick Start)
64
+ forge session start planner --proxy openrouter-openai # GPT for planning
65
+ forge session start --proxy openrouter-gemini # Gemini for review
66
+ ```
67
+
68
+ ## Why Forge?
69
+
70
+ Claude Code talks to Anthropic and tracks conversations. Forge adds an operational layer on top:
71
+
72
+ - **Session Tracking** -- Named sessions that persist artifacts, plans, and transcripts. Works with or without a proxy.
73
+ - **Multi-Model Routing** -- Route to GPT, Gemini, or any model via OpenRouter or LiteLLM through a local proxy.
74
+ - **Cost Control** -- Proxy cost logs and spend caps keep metered API and multi-model workflow usage predictable.
75
+ - **Context Compatibility** -- When routing to models with different context windows, Forge sets the native
76
+ `CLAUDE_CODE_AUTO_COMPACT_WINDOW` so compaction timing matches the routed model.
77
+ - **Autonomous Loops** -- Verification policies that keep Claude working until tests pass.
78
+ - **Session Resume** -- When context fills up, hand off to a fresh session with structured or AI-curated history.
79
+ - **Policy Engine** -- TDD enforcement, coding standards, and semantic alignment checks.
80
+ - **Multi-Model Review** -- Fan out code reviews to multiple models, get adversarial consensus.
81
+
82
+ ### Why launch through Forge?
83
+
84
+ Running `claude` directly bypasses session tracking. When you launch through Forge (`forge session start`), you get:
85
+
86
+ | Feature | `claude` directly | `forge session start` |
87
+ | ---------------------- | ----------------- | --------------------------------------------- |
88
+ | Session tracking | No | Yes -- named sessions, artifacts, transcripts |
89
+ | Session resume | No | Yes -- editable handoff to fresh context |
90
+ | Status line | No | Yes -- proxy, session, policy info |
91
+ | Hook-driven artifacts | No | Yes -- plan snapshots, transcript capture |
92
+ | Policy enforcement | No | Yes -- TDD, coding standards, supervisor |
93
+ | Search across sessions | No | Yes -- `forge search` indexes transcripts |
94
+ | Handoff agent | No | Yes -- auto-updates project docs on exit |
95
+
96
+ Even without a proxy, `forge session start` gives you session tracking, hooks, and the status line (direct mode is the
97
+ default). The proxy adds multi-model routing on top. (`forge claude start` is also available as a bare launcher with
98
+ proxy routing only, no session state.)
99
+
100
+ ## How it Works
101
+
102
+ Forge runs a local proxy that translates Claude Code's Anthropic API calls into requests for any LLM provider. Claude
103
+ Code connects to this proxy (via `ANTHROPIC_BASE_URL`), and Forge handles model selection, session state, and policy
104
+ enforcement.
105
+
106
+ ```
107
+ Claude Code --> Forge Proxy (local) --> OpenRouter / LiteLLM --> Any LLM provider
108
+ |
109
+ Session state, policies, artifacts
110
+ ```
111
+
112
+ **OpenRouter** templates call the OpenRouter API directly -- no LiteLLM needed. One API key gives access to Anthropic,
113
+ OpenAI, Google, Meta, and other models. **LiteLLM** templates route through a
114
+ [LiteLLM](https://github.com/BerriAI/litellm) proxy (remote or local subprocess).
115
+
116
+ **Direct mode** (the default) skips the proxy and talks to Anthropic directly. `forge session start` gives you session
117
+ tracking, hooks, and all Forge features except multi-model routing. Use `--proxy` to add routing.
118
+
119
+ ## Requirements
120
+
121
+ - **Platform**: macOS or Linux
122
+ - **Python**: 3.11–3.13 (3.14 blocked on upstream `uvloop` wheels — see #1)
123
+ - **Claude Code**: installed and on PATH
124
+ - **Provider auth**: Claude Code login is enough for direct interactive sessions. Proxies and headless workflows need a
125
+ supported API or gateway credential such as `OPENROUTER_API_KEY`, `ANTHROPIC_API_KEY`, `GEMINI_API_KEY`,
126
+ `OPENAI_API_KEY`, or LiteLLM auth.
127
+
128
+ ## Quick Start
129
+
130
+ ```bash
131
+ # Install Forge
132
+ pip install multi-forge
133
+
134
+ # Or for development (editable install from local clone):
135
+ git clone https://github.com/hapa1i/multi-forge.git
136
+ cd multi-forge && pip install -e .
137
+
138
+ # Install extensions (hooks, skills, status line) into Claude Code
139
+ forge extension enable
140
+
141
+ # Launch Claude with session tracking (no proxy needed)
142
+ forge session start
143
+
144
+ # Or with multi-model routing via OpenRouter (easiest, no LiteLLM):
145
+ forge auth login -c openrouter # Store OPENROUTER_API_KEY
146
+ forge proxy create openrouter-anthropic # Create and start a Claude-family proxy
147
+ forge session start --proxy openrouter-anthropic
148
+
149
+ # Optional: create default workflow proxies for GPT/Gemini review workers
150
+ forge proxy create openrouter-openai
151
+ forge proxy create openrouter-gemini
152
+
153
+ # Alternative: LiteLLM-based routing (shared/internal or local):
154
+ # forge auth login -c litellm-remote # Store API key + base URL
155
+ # forge proxy create litellm-openai # Connects to shared/internal LiteLLM
156
+ # forge proxy create litellm-openai-local # Or start local LiteLLM
157
+ ```
158
+
159
+ Once running, try `/forge:walkthrough` inside Claude Code for a guided tour in a sandboxed test environment.
160
+
161
+ ### Upgrading from Pre-OSS Forge
162
+
163
+ Existing pre-OSS Forge installs are not supported in-place. If upgrading:
164
+
165
+ 1. If Claude Code was previously patched, run `claude update` or reinstall Claude Code for a pristine binary.
166
+ 2. Remove stale Forge state: `rm ~/.forge/installed.json`
167
+ 3. Re-enable extensions: `forge extension enable`
168
+ 4. If you had `FORGE_CONTEXT_LIMIT` in your shell config, remove it. Use `CLAUDE_CODE_AUTO_COMPACT_WINDOW` for native
169
+ Claude Code behavior, or `forge config set context_limit=N` for Forge proxy fallback.
170
+
171
+ ### Example Workflow: Plan, Execute, Review
172
+
173
+ With proxies configured, a typical feature workflow looks like:
174
+
175
+ ```bash
176
+ # 1. Start a planning session with a high-reasoning model
177
+ forge session start planner --proxy openrouter-openai
178
+ # ... Claude creates a plan, you approve it, /exit
179
+
180
+ # 2. Fork the planner into a worktree with plan supervision
181
+ forge session fork planner --name executor --worktree --supervise
182
+ # ... Claude implements the plan; supervisor auto-checks every Write/Edit
183
+
184
+ # 3. Context fills up? Resume with AI-curated history (supervisor config carries over)
185
+ forge session resume executor --fresh --strategy ai-curated
186
+ # ... keeps working with fresh context
187
+
188
+ # 4. Fork the planner into the executor's worktree to review
189
+ forge session fork planner --into ../executor-worktree # Path to executor's worktree
190
+ # ... reviews with full plan context, suggests fixes
191
+
192
+ # 5. Push and create a PR for human review
193
+ git push origin feature-branch
194
+ ```
195
+
196
+ Each step uses the best model for the job. The `--supervise` flag wires the planner as a semantic supervisor -- every
197
+ code change is checked against the approved plan. Sessions track artifacts and transcripts automatically, so context
198
+ flows across forks and resumes. See the [end-user guide](docs/end-user/) for the full tour, or run `/forge:walkthrough`
199
+ inside Claude Code for an interactive walkthrough.
200
+
201
+ ## CLI Overview
202
+
203
+ | Command Group | Purpose |
204
+ | ---------------------- | -------------------------------------------- |
205
+ | `forge claude` | Bare launch, settings preset management |
206
+ | `forge session` | Named sessions, worktrees, resume, fork |
207
+ | `forge proxy` | Model routing, templates, tier mappings |
208
+ | `forge authentication` | Credential management (`credentials.yaml`) |
209
+ | `forge guard` | Policy enforcement, plan supervision |
210
+ | `forge workflow` | Workflow runners (panel, analyze, debate) |
211
+ | `forge search` | Transcript search across sessions |
212
+ | `forge config` | Runtime preferences (`~/.forge/config.yaml`) |
213
+ | `forge extension` | Enable/sync/disable extensions |
214
+ | `forge info` | System health and installation info |
215
+
216
+ Run `forge <command> --help` for details on any command.
217
+
218
+ ## Documentation
219
+
220
+ | Audience | Location | Contents |
221
+ | ---------------- | ---------------------------------- | ------------------------------------------------- |
222
+ | **Users** | [docs/end-user/](docs/end-user/) | Tour, guides for sessions, proxies, policies, ... |
223
+ | **Developers** | [docs/developer/](docs/developer/) | Setup, coding standards, testing guidelines |
224
+ | **Architecture** | [docs/design.md](docs/design.md) | System narrative, data flow, invariants |
225
+
226
+ ## Contributing
227
+
228
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and PR guidelines.
229
+
230
+ ## Uninstall
231
+
232
+ ```bash
233
+ forge extension disable
234
+ pip uninstall multi-forge
235
+ ```
236
+
237
+ ## License
238
+
239
+ Apache 2.0 -- see [LICENSE](LICENSE).
240
+
241
+ Originally developed as Claude Forge at [Thomson Reuters](https://github.com/thomsonreuters/claude-forge) and
242
+ open-sourced under Apache 2.0. Continued as Multi-Forge by the original author.
@@ -0,0 +1,311 @@
1
+ forge/__init__.py,sha256=n2vtu71SDWpqXl3rS38QkdknrNHUtDGxVP1NMGUgdbk,72
2
+ forge/runtime_config.py,sha256=JYJ1_Njw9Ju-N0sLsvv0ITKjOs8mb7XtF9VVTFEjkoE,16612
3
+ forge/backend/__init__.py,sha256=RkXjcdPD-pHXtbCJq9VTk2i9p9mRjcULx8-kcmOJDf4,5103
4
+ forge/backend/creation.py,sha256=_FQcSQPGNGsGMyaIfIXkTREDRYRgg20jtRuh2A2CtsY,2885
5
+ forge/backend/registry.py,sha256=5qt_p9V65KPTQBmNseypgJ4L5hUUqnjngGfNeBS3Obw,5602
6
+ forge/backend/adapters/__init__.py,sha256=o1Xvu6OuWvrEgyoF9aiEt6DIuvjgBSE-bzTKfnlvC7A,1063
7
+ forge/backend/adapters/litellm.py,sha256=SQA67YNwmuzY_-MEwI9cjZxcqcIqOzbc_nOQPPeVBnc,5612
8
+ forge/cli/__init__.py,sha256=qWqxpnvquz_XqNaeKBh60ha4jJOtb_eel0fWD8cV49k,497
9
+ forge/cli/auth.py,sha256=MbUUFhfIjuSmAoE7jxGy0UZY5y2m6NkDIRkH6CMqOqY,15378
10
+ forge/cli/backend.py,sha256=8Lmh8FvGDkwA69QFTSLlp-p4rSNckPujRYLQsNkvS5E,10855
11
+ forge/cli/claude.py,sha256=eW3iiL92eL6x6sWD5O5XCNyG7WJnPWNw-ASU8aAh5vs,13205
12
+ forge/cli/config_cmd.py,sha256=p3NAAroSejOMyqgtfojSyA5VFb38f1sTbrt1iBGv9cE,9482
13
+ forge/cli/extensions.py,sha256=uQgLy8EQVQ_yCXaxbdKpDGjcN51LizQAOGq77YyT8FY,36934
14
+ forge/cli/gc.py,sha256=gOSXCmtaixzV-O7s6JPlvjiV-Upys69UenQyIZx2Bfo,5496
15
+ forge/cli/guard.py,sha256=fN7UbM4f7C_kBMSGbzHalBu-jBXQk_A07QGZsboy_s4,37540
16
+ forge/cli/guards.py,sha256=NX1Sk35afrCA3g54Hyi8hHJgG8o1y3ojOuY4mj14bHs,3499
17
+ forge/cli/handoff.py,sha256=qpNRfbepJa67Bs9lgoUm6ZHyJonipjW17Hj4d2Sn_28,3659
18
+ forge/cli/logs.py,sha256=zLsMSipPuFqM0pMSaVUbRfcjL_9MYrSn0Ek1lGLe9ZY,13872
19
+ forge/cli/main.py,sha256=x-MGuiMuXNRfB63gVbvy_azcASuTaBJzrDfy9l9A7Bk,10975
20
+ forge/cli/proxy.py,sha256=Humh6BRQfFA3Txw-DdV9jXkv9Ng3y89-1gVJXs-xhmE,65774
21
+ forge/cli/proxy_costs.py,sha256=3TO5Gf8VtJi5ZkWNJySrB2IKKigVnmPLGkoiKyd_ZfU,11038
22
+ forge/cli/search.py,sha256=3PWzGtPZGAb0olfDyet2mqD_EpLIIsZJb64kUDiqzHM,13618
23
+ forge/cli/session.py,sha256=pNOjPkl0IxbWhOkNQYSRI0q-sYnJimbGJE9OVkWUD_s,31614
24
+ forge/cli/session_addendum.py,sha256=aAwDAZcqeaSae8OKEH1AXwNXmc8RwLCZJ17TlUCPMqU,3010
25
+ forge/cli/session_fork.py,sha256=eYkQFW-Ryakz_g4Iocf6wcQc6bHS1hA0sQAu6LA3ApU,30989
26
+ forge/cli/session_handoff.py,sha256=y-gjrnthTowdP5q_AdDCldS_mHNNV5HK8AdtTVTXdY8,5619
27
+ forge/cli/session_lifecycle.py,sha256=oVCLfsIObY-3KVmiWVwbMdDlz0fWZeeyV-4NG3tUtWI,77896
28
+ forge/cli/session_manage.py,sha256=5PimYXhfhqudbxjhluLitTgCVq6g_GHja0AkACspBbY,49046
29
+ forge/cli/session_memory.py,sha256=bpftFQST4EodnRNJKjYOxRYJ_GEInzpaokK9HXFcMX4,7713
30
+ forge/cli/status_line.py,sha256=Fed-htFvHoAS5qY_UUdo9aWZ0DP4tLIbUFKy_I9DAms,49160
31
+ forge/cli/workflow.py,sha256=FhdFwGnHYts_x7lpTgfc7hIt_5IZZ7H3fH1WaU0HZk8,63979
32
+ forge/cli/hooks/__init__.py,sha256=VPayrqex7ebZhf3-gv6jtvCQs3nmRFCGE7O3aGEae6o,1159
33
+ forge/cli/hooks/_group.py,sha256=Zz5KJt6FjFaaVsBWZ5srSSF5Z6BlZIx2nIj03jW442M,602
34
+ forge/cli/hooks/_helpers.py,sha256=TDSuOUCGG2bOs7SPsbsas_22w9hJ9JL0sCrnhuIAbPE,4280
35
+ forge/cli/hooks/commands.py,sha256=xViY9Cj7BosQ7ZKvNwPK3uskQhg3WPFc2wEZlzpMELw,59240
36
+ forge/cli/hooks/direct_commands.py,sha256=8XpYC8RPbh6a7IxYlZow9S85iQ-Vznx5Wk9DBjf0EU4,45738
37
+ forge/cli/hooks/install.py,sha256=TfSXC8QFzAvk6hvTl_hqNs6V3faHXiZ2JmJDU6dxhvA,7401
38
+ forge/cli/hooks/policy.py,sha256=oRxjy3r3pbnVG_pyOpwqLYhcAOSmBuhpzeF3CVUGj3Q,4899
39
+ forge/cli/hooks/read_hygiene.py,sha256=2lgkpcU-gzLUfHivnLwonH9L1LR8FjKzdR5F9avXvJk,2376
40
+ forge/cli/hooks/verification.py,sha256=b3j3mHbFQ96b6sZRPyxIthpqwfj-EyaqfCQarftBu3k,13161
41
+ forge/config/__init__.py,sha256=qZxnXE_qVGYXKKOk6P1zyszwfR21BeAwkqNdxpmzeU8,3007
42
+ forge/config/dataclass_utils.py,sha256=UHXKpsSArqI--cLgg-XGiTIOifq7OVQzAYYbTnnJ-Rc,2728
43
+ forge/config/loader.py,sha256=ccZ44BAN3htHWCTEHMBaqNM13GmrrZKlZJEwDJ6qaMc,22874
44
+ forge/config/schema.py,sha256=GgzS0yUskmVfMFKoG2VrpaRQDVgl23jV-zBJG4ynMeg,15281
45
+ forge/config/defaults/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
+ forge/config/defaults/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
+ forge/config/defaults/backends/litellm.yaml,sha256=dlNkX5RdT37d7snxcUGKDHyQBnCUXCyNwI2qKeJmlRI,5810
48
+ forge/config/defaults/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ forge/config/defaults/templates/litellm-anthropic-local.yaml,sha256=SLTIHcHevrXN_L17nF80lhvPRvGqZqBt1wvpirYW8xs,855
50
+ forge/config/defaults/templates/litellm-anthropic.yaml,sha256=jSS1V7fB2KcNKZLOohF-FyRB2HYEMARHH1hB5A2WySI,738
51
+ forge/config/defaults/templates/litellm-gemini-flash-local.yaml,sha256=deStnQaCZc0frrH9kL1fAzyFJg7KugviF8pIPbpdLaM,998
52
+ forge/config/defaults/templates/litellm-gemini-local.yaml,sha256=SZobj_UbQFlsNjBbyXyUKBdFGjeRhcVEBQa75SM2NB8,842
53
+ forge/config/defaults/templates/litellm-gemini-test.yaml,sha256=C4AteC4wklmsmMf1_w6f6iHLSAViWBkJw1i3t96wmvw,923
54
+ forge/config/defaults/templates/litellm-gemini.yaml,sha256=XWD_prZH1RiJ9WFMiR6GPW3Ap-z7popRyVE4Rh4xLxk,557
55
+ forge/config/defaults/templates/litellm-openai-codex-local.yaml,sha256=UTm6we6rcHepgEtPVECG9F7uAIGM1OL0tgjNVqjAOAk,871
56
+ forge/config/defaults/templates/litellm-openai-local.yaml,sha256=JgpxU9hJT3txzB-uOmpBvkVbFmI9l9wGht_Zo8Asu_o,947
57
+ forge/config/defaults/templates/litellm-openai.yaml,sha256=ms1doG6TgrGnlK-Hnv9Nxh_eq8sUCU5SULry-WYC-Dc,719
58
+ forge/config/defaults/templates/openrouter-anthropic.yaml,sha256=OBNbnMLLCYG6FGwxEymd_qOIrX7gJNB-7o6Az43AZxQ,674
59
+ forge/config/defaults/templates/openrouter-deepseek.yaml,sha256=c-apeLteL-V-cXV46moZ76DFsWB0xhHJ2E4Q1FQllmI,748
60
+ forge/config/defaults/templates/openrouter-gemini-flash.yaml,sha256=Z33ZqjNED99KlZdLKFSZXFRe8DCJYAwtRzoJ631T_84,654
61
+ forge/config/defaults/templates/openrouter-gemini.yaml,sha256=9u39OSdo24Hd5AvHp1UEUSQtw09sgNQ5lPlHyMjeRkU,590
62
+ forge/config/defaults/templates/openrouter-glm.yaml,sha256=l7vN1agQwu30llz6FutsfFBo2ilk6tYoVmZh8Xg2icc,555
63
+ forge/config/defaults/templates/openrouter-kimi.yaml,sha256=FKmTEE_82y07R63o6CcCCHlq7N9shYrCtBkzMIzYbW0,858
64
+ forge/config/defaults/templates/openrouter-minimax.yaml,sha256=E7g_JxDKlEaJHJ0pMjtW_GYs9Soe-6lvlF9NTp9UBAc,756
65
+ forge/config/defaults/templates/openrouter-openai-codex.yaml,sha256=eBYog28g_cbU0CS2BtD_82Y4O4CF3DkXHOZF0GNA6aw,559
66
+ forge/config/defaults/templates/openrouter-openai.yaml,sha256=Q8lVpb2C-Fmqu6YB3v6A0Tb-rM_T0rIsIxB9vhk0Ksg,729
67
+ forge/config/defaults/templates/openrouter-qwen.yaml,sha256=oykszPwze3CSVOXyr0XnlMqHYzji4IY7yC_iq_tifQs,760
68
+ forge/core/__init__.py,sha256=QX-jy_j3HUYoe60oRObjrF69dGuDI6-99Q8pYizqsEg,139
69
+ forge/core/logging.py,sha256=CKsalUF9rjej11y_fTuraqd0ebeRDYhtAWu6JFEoi34,4653
70
+ forge/core/naming.py,sha256=GIwRAgQCAci1fIoOkPcgG1jZr-mjaZoKNHUc5G8NVMw,5262
71
+ forge/core/paths.py,sha256=_3mrwTt1Y2y4uQc4ViRPUqkValx65OZ4AjYyubAcXIY,1078
72
+ forge/core/process.py,sha256=pWwUkNznocV7s5jrExIqWt19pJkMG-WOoI06jU-VezI,1544
73
+ forge/core/transcript.py,sha256=iWa5hmfJkryuGv0_l07sz1tEmFgFW9Y_AjzW-BVnwnI,2401
74
+ forge/core/typing_helpers.py,sha256=44frx6MoPFzMAX4AceaLzmz7m51bE9dI2qhj39MPdGo,608
75
+ forge/core/auth/__init__.py,sha256=oFz_B5EC1cmQHaFLudWS7bHX58RWF0uuiGNP4Szh2D8,1846
76
+ forge/core/auth/capabilities.py,sha256=2hz43hdImOVNZVkh1kZXzjZIXegju5DMR-s50HhmAoY,7354
77
+ forge/core/auth/credentials_file.py,sha256=xNGzDrQLgXx91kPzte-ZF_zMsLQeH5ryPpfs0I0K13U,7269
78
+ forge/core/auth/protocols.py,sha256=82IwEACV-HODJKkD6SVW9sl8Dl8uAUhUXjL_N-qiLSw,542
79
+ forge/core/auth/secrets.py,sha256=DuA_NpGUMGK7rdQe1yjdqOudTPLLi-PRA0gG0lenhwA,8310
80
+ forge/core/auth/template_secrets.py,sha256=vK7psfvJUUp1hfVBdoE7a0wrDTv1f-6HST4ZhN98AAc,3880
81
+ forge/core/data/__init__.py,sha256=At62ByfaR_2CNb4UNTNl_Buh5YkOii3Pz61bgV0q3ak,159
82
+ forge/core/data/model_catalog.yaml,sha256=rzLxvI8e3VDD3UceAzZKbffQUvUG7khhxzuAJfzvMbk,47428
83
+ forge/core/data/pricing.yaml,sha256=l-3Ql5dDFZySoHzEo2-RhzsEgGkKtyecXllACNSsmIk,2766
84
+ forge/core/data/system_prompt_addendums/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
+ forge/core/data/system_prompt_addendums/gemini.md,sha256=hzlJ0i5eOEOz1kdqVB5OHawRwWfTrkAB7V9w5Dzxih0,7944
86
+ forge/core/data/system_prompt_addendums/openai.md,sha256=Rnl2DQvgdHhcus4t9y4daECv1Tra_ocXmNJgw8rCIh4,7715
87
+ forge/core/llm/__init__.py,sha256=pcCXR2TjYcQ-FyJ_eca6Cift-yqxD90auy4FeMqZ6Q0,6901
88
+ forge/core/llm/credentials.py,sha256=4c27iFyOE-ngTsIerkXarF9ufOOuo5aluqGsNh-X-SY,15045
89
+ forge/core/llm/detection.py,sha256=fnYd665e338r0yFzQChEaOgO4sMMh7wuVSAyHmjzdwY,2854
90
+ forge/core/llm/errors.py,sha256=y5SmWg0MMV_cDWxgSMw5trprO2c3GMBSkriNNpFruC0,1380
91
+ forge/core/llm/protocols.py,sha256=H9qKVYLvXQ9IZECzDRbog5v-qCudItGXzo_m1L43eBw,2480
92
+ forge/core/llm/types.py,sha256=TPzYY59PdFG9cvVF_MSf2UG9NHipWWiiov1Y20iyTbw,6859
93
+ forge/core/llm/clients/__init__.py,sha256=c-wZlCA2zQeESknwkDySXBYcRA8Ece-HMFB6YceN1mk,389
94
+ forge/core/llm/clients/base.py,sha256=bCcSrIloNJoRogI_x4J25eNPbJGMwJyud4cz35_FuP4,3567
95
+ forge/core/llm/clients/litellm.py,sha256=BIa4Yr9Eb_-VsqEvDCZzTMGulJYHXD_b8VWX1KU5iTw,24232
96
+ forge/core/llm/clients/openai_compat.py,sha256=923FOM6va_Vx9Chb5FcA4mi7gwlKjHnGYeapHFNNKxU,7757
97
+ forge/core/llm/clients/openrouter.py,sha256=XwwFRiHnFYyh3FOjv3OCJ-oqI6X17HjHsYJttFXOTqM,8451
98
+ forge/core/models/__init__.py,sha256=IyHj7TbWa08R4ppSl4elDPVESJR0thkiRgI_2NpoHsU,2234
99
+ forge/core/models/catalog.py,sha256=KvMLXJGuERkR_SZqJYtYrG9NSeVFRy-jimqNtvL8qUk,16364
100
+ forge/core/models/pricing.py,sha256=3YhvdxjNKclGx5nR-ipi9DVci5XhuBUZ6Ip6EFLgIaM,4956
101
+ forge/core/models/types.py,sha256=k5J-DTFUK7u_woIKShjzgWpv6q62Gh9Fja3FNKJGlaM,5980
102
+ forge/core/ops/__init__.py,sha256=1SEkVErwrDyeLxMFwXIvbkI_TUXpIKS46LQo0el2QXo,1577
103
+ forge/core/ops/context.py,sha256=85tI3xERUzh7DYJ2k06YYM8V5IG8D6xDW9VmYAnQ9-Y,4685
104
+ forge/core/ops/gc.py,sha256=H5avDc4iJcu4z9Qd-ux8qg-mxPhdoliTJB4DH88pVMI,28441
105
+ forge/core/ops/proxy.py,sha256=G_K_q2x7fUKkaQqXn76c44HK6gm3nLhH6KHiPj6sC6E,4261
106
+ forge/core/ops/resolution.py,sha256=ADMwGw-5Ymui40oTcMJETngcWsCgsjX8Ea58rhiJDS4,4421
107
+ forge/core/ops/session.py,sha256=-6uaX_kNsibznxzH0dYOvfTfKSOHaAbvo_WvymJBMVI,10701
108
+ forge/core/ops/session_context.py,sha256=1GhUqVmumpHUpqmMn8DuyQk30ok4GG5XV2xC5qDTW-0,18272
109
+ forge/core/reactive/__init__.py,sha256=qYbLmGj_SJfTaxo4jGBL-geFuSnk9govDkCsuWdJAbs,1170
110
+ forge/core/reactive/cost_tracking.py,sha256=hO2L2sfddFhzZkz_WxDu1cyqQaIYnCXWOBe8t7WDwDA,10119
111
+ forge/core/reactive/env.py,sha256=UExu3MNFjPEeY9h54vgX2pDOh_V8O64NDGnN0ggHJUM,6826
112
+ forge/core/reactive/proxy.py,sha256=S4Be7E87JiwyRsSNhZUZsISaxFkYoQP5tYcGoOjW4hM,2699
113
+ forge/core/reactive/routing.py,sha256=J-GLIzBzSeGQcvu2KFm49rLV5CMP8P739fQpxFuf5Mc,21953
114
+ forge/core/reactive/session_runner.py,sha256=BJlZLNRo_MuykQFjbG6WY5-6wJfbNMLHlpXimbk2u0w,6429
115
+ forge/core/reactive/structured_output.py,sha256=ia06ksVnBN-IxBf9rOQOlzBsBq5tvqoZhJuhFDVoChU,1819
116
+ forge/core/reactive/tagger.py,sha256=lCsw8wGtGCHFwHlE6M6YY_-cAGIefoxYI9bCie2J8UE,2568
117
+ forge/core/reactive/throttle.py,sha256=M1CWr0Kl-FydMKH7xZgztjP71hKBV18NZ3tfPBe-InM,4233
118
+ forge/core/state/__init__.py,sha256=b6A-JKiFxj3WWBG-ha4xoh1nbQgvUcLskVSQ8AcKqwo,1431
119
+ forge/core/state/exceptions.py,sha256=ZFleF2rZ730w6ljBrBS8rbG4E5fxG78lHZerpPUXRIg,1711
120
+ forge/core/state/io.py,sha256=2WxcMHPlnujnSvC87RLmlbjZ8lbQhFe4Fj-rQK8QMtA,4241
121
+ forge/core/state/lock.py,sha256=G_U2i02yinfyvCjzOyQPKmNfpczhZPhB1MM8kA_U2Fk,3270
122
+ forge/core/state/timestamps.py,sha256=phQmrr1BzbD8CWK3ZNwZp5KoeLE6Kpq5MRFOsMCgNAA,1587
123
+ forge/core/workqueue/__init__.py,sha256=QFm-oT_3LnJqSEs00tGg9Ww3rz0akqbU6wpAWaaoQ0A,1669
124
+ forge/core/workqueue/queue.py,sha256=lsWXSIAejYQ3vlefoHSrPG5N02JNZ-d2YYT5xkolSzk,18117
125
+ forge/core/workqueue/types.py,sha256=Da1PFy5tcyj8AdY1M_vtz2FMSPr0VPa5MeyerS9mF44,1620
126
+ forge/guard/__init__.py,sha256=lLuNf-Mb8Sdmexld7YSoQdQq-3lMmayrJCYWmb881As,539
127
+ forge/guard/engine.py,sha256=DhcrWsY4tPHyIWzo378MYl39iqbmiSi9hnii3TguGrY,7751
128
+ forge/guard/protocols.py,sha256=I34bS3pqqy8rnfjG0utVBkVontzlOIw4UwKJQgpUkF8,2982
129
+ forge/guard/queries.py,sha256=iBkwRG5l1mmjh2Zn8ooxGNyF9vY3yGBMqMDUeJfIPyk,3357
130
+ forge/guard/store.py,sha256=bdTKHHZJX5m2EsTuKRXapwYAM-C2fDxxAAgFQ0LGFcA,4318
131
+ forge/guard/types.py,sha256=PT8cKzK6KsExzAW0_HkunWEVvO6_EnIxSs9fRX8vLno,4476
132
+ forge/guard/deterministic/__init__.py,sha256=9Y-mhJDvAHEjrbLVJPrsUGPmLPKaNoYreY9pWDULhe0,727
133
+ forge/guard/deterministic/base.py,sha256=H2Zsc5iLA8fdwTxuUov6u8mpETLXZGE9iRpVHkviwCk,4995
134
+ forge/guard/deterministic/coding_standards.py,sha256=naVY0bIf-NQ04dPKkQUdWkx83-L8tLVuYTDd0acczn0,8756
135
+ forge/guard/deterministic/registry.py,sha256=DF6BXgH765djUu67rnTxH23vTfJkLXTXDd1mvZ9cesQ,4754
136
+ forge/guard/deterministic/tdd.py,sha256=e0C9ed9OMLQKHqCuZ3vaMJfe2Xm-hg_WqF5YOb7516A,5723
137
+ forge/guard/semantic/__init__.py,sha256=1y5pLk7xHo7uaHBH9AsKHYpQLuOFh6mnn2hxcnzIWCQ,1074
138
+ forge/guard/semantic/promotion.py,sha256=SjBJCrhVdvjaPpHXBFo_4RoON1NH_VRUvADmyzkCObg,826
139
+ forge/guard/semantic/supervisor.py,sha256=ovRHCjdkBB9i4TtKofiehO3eLlwR1qtzuCRjbmxRmGE,29967
140
+ forge/guard/semantic/verdict.py,sha256=rxedURpA-BAWpgHrxy-1mqrTQG9WHkXMgh5AhyUzNb4,6147
141
+ forge/guard/team/__init__.py,sha256=UICvCa-doOuvj4yC2q0uEW8Y5-Bm4L90CrTdE4qrKlk,212
142
+ forge/guard/team/config.py,sha256=YK9C1WxOzSX-W7LGPcXkgCxKQqQ1RFx75PlsK9v872w,629
143
+ forge/guard/team/handlers.py,sha256=W30ps2IuCUdfHda7EzSuQ6SufcOV26zI8p8AjSjYh7Y,6742
144
+ forge/guard/team/prompts.py,sha256=Wjyn1DGcNUroddleT39KkZ3VPXWvHuEfpWY-Dd4TPgg,1180
145
+ forge/guard/workflow/__init__.py,sha256=DV8np69vilOpbgSVZUvr5P6yHK77qQJQYGqCMUy2_gI,559
146
+ forge/guard/workflow/branches.py,sha256=gdJq6O8pmIp27-PdIIpop_TfNAHOa46-FTZ8OywvQxo,2362
147
+ forge/guard/workflow/config.py,sha256=UwrGzTk_S1HU9OR7lIAbWO5VDaz6LL5hCVflzW7WTOU,1602
148
+ forge/guard/workflow/divergence.py,sha256=DVjpMjFrjj6QoqitwBOpAVeRW1Q_x52rv6jd7W2YO1c,3558
149
+ forge/guard/workflow/policy.py,sha256=I8ecxy2f6SBCvxKLRdk3ijJoWPAr26cLegVrJdfDH_g,3020
150
+ forge/guard/workflow/stages.py,sha256=CxJ4pn5fgGgN4aYC-9VvKLu0RfpSjT0KPL87HAOLNpI,7492
151
+ forge/install/__init__.py,sha256=zieEcB9pai7e9iM28CR8ZuZgOnqbb9vhKz-Dqh5Eylk,1187
152
+ forge/install/cli.py,sha256=abewmuEhxaeHWw_M6vKhrWT5BZQfrJJTO22m7J1PNlg,8755
153
+ forge/install/exceptions.py,sha256=yF866XVjlqwCRAKhE7rqcRFaonrN6-ny-6vQwLlFw0k,5227
154
+ forge/install/hooks.py,sha256=LhQdDg5BEhCjdY-6xgfC5LwZWj0yR7dwuZdx9YuyUto,4025
155
+ forge/install/installer.py,sha256=0AE-6X5AEuK_CKUvAtuo5np8FdQ1S2cXUwZSYxepCdk,38574
156
+ forge/install/models.py,sha256=0ydJ7OppwNBBYF_J6ncVXovSQPM01b49GR23b20Bf1o,9303
157
+ forge/install/preset.py,sha256=Ve3CMSLDl2InBMSSHWwAA-qaLv0HCXcwTUNgVWIlm1k,8534
158
+ forge/install/settings_merge.py,sha256=gAouzYJiNi9rsPEGvWYVFzgwtH4hz7DDZbrPQQxu40U,25813
159
+ forge/install/tracking.py,sha256=iJvds8DuHYbgmkAqd9ThCig_r6xrIHjdf3OX1JFY0CA,8324
160
+ forge/install/version.py,sha256=97p29yvT7w5EOdRmqo_4WeyCBsLeJGvUh3eP9Hcsd4c,4367
161
+ forge/proxy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
+ forge/proxy/base_client.py,sha256=5i6rU8TZD9AtlVfNu5iugSF40KZAnJ5tsV15baMD8rg,6112
163
+ forge/proxy/client_adapter.py,sha256=U1CcWc5CVwZpBZC2F0db1RxhQQ6UZWGKGr_sIb8ykWg,19158
164
+ forge/proxy/client_factory.py,sha256=2QKWdYGMZ-p59ycEL_-abNDPEZsVbV8n94cE0xOE__w,20690
165
+ forge/proxy/converters.py,sha256=kyHN8bQUqt469yFMDp8jTEN1iXVsiQ_eMCaZOKiJ964,54264
166
+ forge/proxy/cost_logger.py,sha256=3-HBMP-2m7CdzEfn6i_NwKIfj6lHFAmbnKYeelwMTDk,3805
167
+ forge/proxy/cost_tracker.py,sha256=UyE7efLo9WZzM11kk7uqSTy2omkWTKI-qfz22z8vMbQ,8891
168
+ forge/proxy/data_models.py,sha256=1D3I089G06EghyzUfCskW0X4LLPylTmN8LhICNTgmCo,11175
169
+ forge/proxy/error_hints.py,sha256=aVc28XEFPKAt9OM2Z58k0P2YjB7hlZ86QXecvp1Bg2Y,3164
170
+ forge/proxy/metrics.py,sha256=IbgLmxQWoww6KfX-vXl7KnupBjSSZTJPkfn7vLBnE0I,8496
171
+ forge/proxy/model_spec.py,sha256=WiimU2PVUpRci7SMyYqmTpdB5rouYLwQwPVo2LNWLJQ,5138
172
+ forge/proxy/proxies.py,sha256=gTqDbhwhm-fQEB9x3rYmGqQ7GxP0x3oVkt7k2uBMFyk,11464
173
+ forge/proxy/proxy_identity.py,sha256=TV_i1cyoetJ3x0IAMGZPu2vkMFcuwAj2Nph3oVsNjQ8,4768
174
+ forge/proxy/proxy_orchestrator.py,sha256=sX3bEnOjOefmZj37LyM5ck9l2qhdhCfGDEC0aPV6nJU,35627
175
+ forge/proxy/proxy_startup.py,sha256=2FvE_wy-qM-anpk6aimIi59NpCERb584xLQ78HuHBBo,1693
176
+ forge/proxy/server.py,sha256=iaxtSuMv7ajBl8GF61U8ki2YWTou6fX26CFxfGC8Erg,62917
177
+ forge/proxy/utils.py,sha256=6aucmpUJp-T8oMQMXrjWyg9dqsOp_wi3ltUtQNgnbIM,18357
178
+ forge/review/__init__.py,sha256=E6envYu01GothyoWLtlvQAtkvNYVTfNDDp3wRBv9SXc,202
179
+ forge/review/adversarial.py,sha256=6WQmYNyHyBXnslQk3NvC-NozuKIDx1QCLN5-P1ktchc,3750
180
+ forge/review/consensus.py,sha256=GK0HQyVZKYRb1R7-4plksgfwGsuyp4TzyqLnEu_OVaU,8710
181
+ forge/review/engine.py,sha256=9gddA4wLqmcLwA08ytOGaCFZbVn9ufXSz9_zldB2qus,12505
182
+ forge/review/models.py,sha256=2eC9dcWnD2Z3VU7Y5w0Nv5wHnNkTOEFYcOa_KwT8yLQ,15886
183
+ forge/review/routing.py,sha256=wcfUezh484zf7XCfRX1SvYbswBRQRvHt6iEZeuyv6K4,12159
184
+ forge/review/synthesis.py,sha256=EwB-nJxz4bX1X2CJnmIkIKmN5O7tuzE4Jrm7Ie0S2rs,2194
185
+ forge/review/resources/__init__.py,sha256=LtIigaj-tWlQdaiuiTLjR694Y5j9sQeAazE_q_zcTDE,172
186
+ forge/review/resources/codereview-performance.md,sha256=N0OX0UkvE6jjfSB2-54B5WVPVrB6lsDU787SnM9xsmE,2524
187
+ forge/review/resources/codereview-quick.md,sha256=2zR_tJAC_8LVa9sX6EBulGQNmi_RuEK3qRzX2Rq2Lvw,1732
188
+ forge/review/resources/codereview-security.md,sha256=vCeTdO8F7CRfUiQhij8o11TEu_OyXjax2j77_MAzNcs,2800
189
+ forge/review/resources/codereview.md,sha256=1LmAGq95THqlJWiCrEtw4AZTQwRtxucWm8O6oscqnLg,2191
190
+ forge/review/resources/docreview-quick.md,sha256=GxvcNRrHsxrBa5XySj_1IQTq4NXoJ_VStBg1Xt2hyQ4,1825
191
+ forge/review/resources/docreview.md,sha256=vQZed_rBTV3CWzZ4hkoIMQU3e41c5XUNttttr4w54lQ,2559
192
+ forge/review/resources/thinkdeep.md,sha256=H2hhB75X38A4e7UdetmGFbtJYbC83Z2hZ1uWWgYwXKM,2181
193
+ forge/search/__init__.py,sha256=0Z2vaMvUthPd6vEbXrpg6FYghnK2RIHpP6TXCpNk_sk,1539
194
+ forge/search/bm25_store.py,sha256=4ecZtysahUdFh032rV-Jh0BINyzt9en5U5oHZ796e28,8542
195
+ forge/search/content_store.py,sha256=_DNBRZbwkDbrtD7K96WvA4TO6ZdlfkCDQeHQ0vSO8co,6392
196
+ forge/search/engine.py,sha256=MgGOwi_02wDPlVjdfZ0YGFYhP9z81jDlOW95i1v_ln4,11471
197
+ forge/search/exceptions.py,sha256=uovFXWwuHsgv2aH8mOYpJ_73XAt24_2fj83BjNEkXa8,1289
198
+ forge/search/extractor.py,sha256=Acw1xU1gYIDCTYVawklNaec-4lLn4YPZUXDzsEAzxXQ,7284
199
+ forge/search/index_state.py,sha256=MK-2T48kF_KM8dEmbnd-EYaENQK1tpthTxcUGjLZs_s,9566
200
+ forge/search/store.py,sha256=ABRBrsfdoWsl1SBd9Bc222NtlXnL0kjNoIz-g2Z2Fh8,7637
201
+ forge/search/tokenizer.py,sha256=fAjSFJ7AkUEcfkHfqtXDWHi9grsDrnaTrKwbZbpA5sU,720
202
+ forge/session/__init__.py,sha256=HZ--Vfr4keY7VzIQnZ4rW5vjOW38GrVkKgnlvD1DvCU,3445
203
+ forge/session/active.py,sha256=M9F_RsOI7L_KbtFgJtMTcBeGL08rOfNJGm8GciM-cAo,12246
204
+ forge/session/artifacts.py,sha256=Y0aOMCmL59dHibDHyTmWFA6x5nbGADubk8ckwNRFT3E,6002
205
+ forge/session/cleanup.py,sha256=Gs_erxRR709NI97t-5URiBFBKU4EKCnG6_aFJiQGAZA,7920
206
+ forge/session/config.py,sha256=gEuk0uqXWrETsijhK8J6-FrRGtlZJP0hLdxebnvNSQk,1147
207
+ forge/session/direct_model.py,sha256=Z-WvvZC2QQmrHsE446az5mTSyxqZ_q6wQY6DL2ZRc1o,3542
208
+ forge/session/effective.py,sha256=x_F2zfOoTf1-iiQk5bSqipm2_08ABOZn_wHiaAfBU-Y,5373
209
+ forge/session/exceptions.py,sha256=j_7Gt_aQGkPtKa7hSygKTkXX9VTiAK-h_M1NRhtfm8I,8555
210
+ forge/session/handoff.py,sha256=gVczPKTvhQhH7DGE-t-JaY1T9irfu2xl1rAvYrY0SOk,30290
211
+ forge/session/handoff_agent.py,sha256=Hz-2rsvQTBAytQf8vl5YWU04NkE3xnHl7xfw1JRHUEU,20462
212
+ forge/session/identity.py,sha256=31nWRfhUtKmeo4VFQqRDVO9e5EQYwfS0DzJhhLkJro0,2511
213
+ forge/session/index.py,sha256=ObC4-ihcSzjVG4-Djz-dPy_td0Y8VljLaJWJxoZV79c,20460
214
+ forge/session/manager.py,sha256=XGtuQLlVCOhbRAGs1fAXAH1s0S848rI6_6LVqCkjhTs,63235
215
+ forge/session/models.py,sha256=xsRZUyBsDJy4Nbo62jaUgn4nvYd2T-r9jNIDWc_UoY0,22055
216
+ forge/session/overrides.py,sha256=tgi-b0341typA_xmwiPaE_8Zji3PJbysZhUwdZ5mmTc,10384
217
+ forge/session/plan_resolution.py,sha256=s_PyCwXg9PgOB8rgoYo-ymVNa-EBTZ-V1x4fTsEcWHw,11079
218
+ forge/session/prev_sessions.py,sha256=gGuHcmJLktPKfUoZc3lU6ye2b5KRhr_8Hgcbh2huDwE,4440
219
+ forge/session/store.py,sha256=W8m2VmObHNHXuY3050IlhaPEwhgfJcyxyvMST49zCms,16006
220
+ forge/session/validation.py,sha256=QKZYm5ddp2SErVs_PxSDSUFQF-txcgD3JK6_rtA-I7Q,1427
221
+ forge/session/claude/__init__.py,sha256=bkzAs_0b1FNgmnrbR-lPxYqeKB_-szdWj5bfo3v8ngY,1051
222
+ forge/session/claude/cleanup.py,sha256=_eDI4h42kKNEHuDtsljRyR0Ea5YulG8yPKu42YEs5to,3453
223
+ forge/session/claude/invoke.py,sha256=jAh8aUEVs-SsvA5j1qh7jc0y9CYtDEzawRi6n62hnC0,6414
224
+ forge/session/claude/paths.py,sha256=ploIeEpCCu1ZRpvuLeupJxjrnXRxua6VBZSd2sbWc5c,6299
225
+ forge/session/hooks/__init__.py,sha256=ISqWG_0Y7prDqOycoz84askeLyw4B3Yw4mOXOAmTuuI,827
226
+ forge/session/hooks/models.py,sha256=8udyblzAtdgH7hAvZHhTiJawH88WYoGzwVd90-T7UP8,2432
227
+ forge/session/hooks/session_start.py,sha256=ztMN1jLWJC2vEILLgX7ZIzhGANkTTqsDJZulmdNDURU,17334
228
+ forge/session/worktree/__init__.py,sha256=nQP_gTsUN8pl-HDnYkDoEJWXW0-XBZ_SqRH5LU2XPYs,1580
229
+ forge/session/worktree/cleanup.py,sha256=lFNgVC4qiV803FGKz8SXttHQubxAExARFBAADmMz0Rg,8012
230
+ forge/session/worktree/config_copy.py,sha256=TUHUX2NKumzWWCEFplRzMYqQyWt-pQNhHcLWeTs5P38,6569
231
+ forge/session/worktree/create.py,sha256=GeFX_y0s4l4R-y9QZLPdek1mni43NUP-ZmnBpC6m9G0,10283
232
+ forge/sidecar/__init__.py,sha256=3hfWWjs9JLwTj7PXRvCK9iQQ6km0NZ4oZXkMLC8B-dg,819
233
+ forge/sidecar/container.py,sha256=5r0UN92JjM-fdULLZmgl0GVxviP1sZ8DtkYcQnZCDkM,4938
234
+ forge/sidecar/docker.py,sha256=FvEp9ooLNdjyWFR869WkAnKQei1Xpw4AKIOST2Js9Ic,2262
235
+ forge/sidecar/secrets.py,sha256=D6wX1C_bzzgYdwh_67eAdRLsOWw_FbPt_-9Q8qm-igY,602
236
+ forge/_extensions/agents/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
237
+ forge/_extensions/commands/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
238
+ forge/_extensions/skills/analyze/SKILL.md,sha256=QYzu12qhBGeRwAzzokFjvnaDhP2D7W5mRiubstl0Kgg,3433
239
+ forge/_extensions/skills/challenge/SKILL.md,sha256=FTiibn4SVgjbCeUwYy7juKt5pru7VjCCx3YJJTi9Bis,3331
240
+ forge/_extensions/skills/consensus/SKILL.md,sha256=ustxI77uZyq_TLjeBRcMcjJUM8K2aAtqLZigQ7hV_CQ,5836
241
+ forge/_extensions/skills/consensus/resources/code_consensus_evaluation.md,sha256=LJqgdVo3ZOF_uSjK-uyXvWTZOrEqMFR3Gcs0BdJh6Bk,2524
242
+ forge/_extensions/skills/consensus/resources/consensus_evaluation.md,sha256=dhQlaXlq_kBytz37UbvsHbbjtBkRvTzxL2r53ckNs1g,1604
243
+ forge/_extensions/skills/consensus/resources/synthesis.md,sha256=LBpG7uSxwwuQqDpEkuQBHL0pPuGCJGx6-iQZ9OZCyvY,3116
244
+ forge/_extensions/skills/debate/SKILL.md,sha256=Pj3uyqbb5fmqvGTGJeoeJcu5EROW9ETsKakBtQ6nnwA,5435
245
+ forge/_extensions/skills/debate/resources/code_debate_evaluation.md,sha256=MbcuIWL_2ZC83cMSbXiSeFmxGj1eVu4_MSw4CsGgwfc,2699
246
+ forge/_extensions/skills/debate/resources/debate_evaluation.md,sha256=gR9DK4yJ4KbIk_bkYzmlQzxRYCQVezUN3FhlURVxk1g,2077
247
+ forge/_extensions/skills/panel/SKILL.md,sha256=Hjl-I_YJFqMoSHlrKOFzF5KdFKgQT62I79nNzQPF09s,6121
248
+ forge/_extensions/skills/panel/resources/synthesis.md,sha256=KGHlKaU4itdTGNOblcj3gM-mygXiBzN1nFu-_s2Ul74,3143
249
+ forge/_extensions/skills/qa/SKILL.md,sha256=mxeKErrLNmXdgbySe3-lEsP1OOUAoY0J2bKPvHH1-8M,38565
250
+ forge/_extensions/skills/qa/resources/checklist.md,sha256=x45wjzPFcISlSQ4rhNOLs91oO_jw3WJUxwg97AyGhz8,2588
251
+ forge/_extensions/skills/qa/resources/report-template.md,sha256=rfle8bzzPnr-A5N0_lEPO6Wz7aCI_dkso7acTwZZZMY,3146
252
+ forge/_extensions/skills/qa/resources/checklist/0-enable.md,sha256=2XK180vY0JpnnQPDJVprmUTogEzoNAJu9PQjXLb6COU,1935
253
+ forge/_extensions/skills/qa/resources/checklist/1-preflight.md,sha256=ygwUZXtUGt8PQ9_nmwYZHk6rDvs78AeHflmEyP3vVOM,617
254
+ forge/_extensions/skills/qa/resources/checklist/10-resume.md,sha256=w2u6Zpdlkhz2sfu0BU2D3o5SJ9QrhL_L9odatep3zHg,5823
255
+ forge/_extensions/skills/qa/resources/checklist/11-config.md,sha256=9If1b9CsC24TJMZKlUsqQEi2WnRtILmmxZOpNxPOUs8,3489
256
+ forge/_extensions/skills/qa/resources/checklist/12-search.md,sha256=Yvoz0oNr8KgnX4z0pG4Ngxp4G29D3ca33Z5cvpFDMN0,1041
257
+ forge/_extensions/skills/qa/resources/checklist/13-guard.md,sha256=uGo6nWdLNY1vccLvADWGlhPTCMagkpjRTTKcB9ERvbw,5307
258
+ forge/_extensions/skills/qa/resources/checklist/14-workflow.md,sha256=qN7Q42SO5eFlX783YrekNUZsJTaig21CT3QqXLbVqCI,11249
259
+ forge/_extensions/skills/qa/resources/checklist/15-skills.md,sha256=tL6Sttj_4Ef_DGPUpvaAbUvROSqV-I-wM-LVyRGoA0g,4947
260
+ forge/_extensions/skills/qa/resources/checklist/16-handoff.md,sha256=h360KRpwA1rytIwAEqsX2YF2uC-_DLdxdGxXQFLRKuM,9257
261
+ forge/_extensions/skills/qa/resources/checklist/17-info.md,sha256=vR7LQ8ATDijNrASfn9E9l9UntjO7-u_zucxi9sK1tmo,1175
262
+ forge/_extensions/skills/qa/resources/checklist/18-disable.md,sha256=kwwbEUykOLcesMyDY65YQqyBxuce-jWpxER6wrFuCqQ,2257
263
+ forge/_extensions/skills/qa/resources/checklist/19-uninstall.md,sha256=g41M8pPOKACan-U7IiwJBISZZg_fYvZcFJ3vpf4xgJ8,4240
264
+ forge/_extensions/skills/qa/resources/checklist/2-extensions.md,sha256=wpYeSbyTv8rofb6GMesDXfx7UUyZ-8KSV8Z72rbx77A,5247
265
+ forge/_extensions/skills/qa/resources/checklist/20-cleanup.md,sha256=oqya-WumlhABy9OKka5BUVWnQHvpi01E8Y6FX5ah0pc,1223
266
+ forge/_extensions/skills/qa/resources/checklist/3-auth.md,sha256=8KEwoUPtMDVVvnIePfwLo0NNHyHyWqCQ00aHioJ1Drk,7131
267
+ forge/_extensions/skills/qa/resources/checklist/4-proxy.md,sha256=WOHj7WeZO16MDT5duySoUXcs2JVZnd_PnV-GozRHMXE,15942
268
+ forge/_extensions/skills/qa/resources/checklist/5-session.md,sha256=GNMOJd6YaJ2QqcbV1J0EMk_ye1DMeB6cG8sq0kDAvcY,21231
269
+ forge/_extensions/skills/qa/resources/checklist/6-hooks.md,sha256=uPCj7z1V5MTjydV5iJl3aTJJtIObNaE0ZMAZLMpNjl4,9904
270
+ forge/_extensions/skills/qa/resources/checklist/7-costs.md,sha256=2DkmHAp9DrepZmUNt0Nt5x9D6VQFz_Vhkpo8wTwGHxU,13375
271
+ forge/_extensions/skills/qa/resources/checklist/8-status-line.md,sha256=mAoGcdTJIAmzbRppYHY9ioJPu3l7VCxPUCrrO0vPx3c,7488
272
+ forge/_extensions/skills/qa/resources/checklist/9-direct-commands.md,sha256=1qLkk5VQMhxGna7dl5l9TXZXXa_KMZB21_M8tY3B80o,4105
273
+ forge/_extensions/skills/qa/scripts/start-container.sh,sha256=Q55iVZfSCFU-XgHAaGy9ZgNBPc7f1gb3feYqbhzc1SE,18322
274
+ forge/_extensions/skills/qa/scripts/walkthrough-state.py,sha256=kCR9kgr3tbd5muYryn69j9RAL038qitcVw0DTs8Ijas,40238
275
+ forge/_extensions/skills/review/SKILL.md,sha256=_aF5yMf55Z6sPBRArEiM4r2pOtJsgc8EKEMi5QS2F94,4967
276
+ forge/_extensions/skills/review/references/claude-4.6.md,sha256=JDUmTrHEKWYV0lIQaaLBeHT8xa0TU7ok_HEsHygGnFg,21068
277
+ forge/_extensions/skills/review/references/claude-4.7.md,sha256=Pa-0qJ9eyB_pS_PRgBLFocUUzuyP7EjbNBGatWklL0A,34513
278
+ forge/_extensions/skills/review/references/gemini-3.1.md,sha256=jWLYIWyM7n1Enif2UBejN4XoT9dhcuoPMj-bkiMkris,20400
279
+ forge/_extensions/skills/review/references/gpt-5.5.md,sha256=OdokqJrdNKai_CvoXirZgUwuHp_rpVhZHx1H5mK-e_A,21237
280
+ forge/_extensions/skills/review/references/skills-writing-guide.md,sha256=NxAd7UlvVFDysqAHufO1T0OnCoFV8GmYisxDLxUHsPo,57693
281
+ forge/_extensions/skills/review/resources/code-anthropic.md,sha256=WBXUtVI3SmBgVdIG4uSFhkOLtf97FRR9Pi43Ig0PGqU,4148
282
+ forge/_extensions/skills/review/resources/code-gemini.md,sha256=0ZkkxkCHy7mCTFBqyKK3OC054u2qAUo-p_jpkKElEhs,5178
283
+ forge/_extensions/skills/review/resources/code-openai.md,sha256=LUA5mdFaShE2nRa2zANUGwmHm7BXA-cg_bf_Ku-ktNg,5723
284
+ forge/_extensions/skills/review/resources/code.md,sha256=WBXUtVI3SmBgVdIG4uSFhkOLtf97FRR9Pi43Ig0PGqU,4148
285
+ forge/_extensions/skills/review-docs/SKILL.md,sha256=aJN3NoQeZfaP4vhbWZ9AixPKFviZbXQuxdqJn4Gqa7w,4732
286
+ forge/_extensions/skills/review-docs/resources/docs-anthropic.md,sha256=8lix19p8JKLiNPeNCuY5Gunk-QgBOlbdSpdcRCU4FN8,4343
287
+ forge/_extensions/skills/review-docs/resources/docs-gemini.md,sha256=bEU1QUQYcUm96y2C877ivYFv3Bdrn0SzU0n5s7rPJTw,5534
288
+ forge/_extensions/skills/review-docs/resources/docs-openai.md,sha256=0IyNyyCVBEMs1ELQaWr4j0EZ0B4SddIcgycFW_i-kOA,6219
289
+ forge/_extensions/skills/review-docs/resources/docs.md,sha256=8lix19p8JKLiNPeNCuY5Gunk-QgBOlbdSpdcRCU4FN8,4343
290
+ forge/_extensions/skills/smoke-test/SKILL.md,sha256=KZ73dJg5C8FY1Lfsctg2OfJegIfn6HOXQiUES5s10kA,926
291
+ forge/_extensions/skills/smoke-test/scripts/smoke-test.sh,sha256=yRgiu-AW1m4tGXfdqGw1r_-cS77ZsiSvrrIctemTna8,3656
292
+ forge/_extensions/skills/understand/SKILL.md,sha256=snXwYlI_RdxYP4VSx7oErMowWjKkwPIUTgRFVxoSMbI,6594
293
+ forge/_extensions/skills/understand/resources/code-anthropic.md,sha256=7tKPFTBOs56s2YIJkNQl4RLo4X0sgUpTAu0FA1qqI_Q,4217
294
+ forge/_extensions/skills/understand/resources/code-gemini.md,sha256=XCoK1XOlBnhCW58Lya9QL6U7zA0EPuxPK7Na_DM3F7g,4913
295
+ forge/_extensions/skills/understand/resources/code-openai.md,sha256=Gy48R6hbtqJyX40GVPPKBSWSi8YT8Jo0pGZetPgn320,4607
296
+ forge/_extensions/skills/understand/resources/code.md,sha256=7tKPFTBOs56s2YIJkNQl4RLo4X0sgUpTAu0FA1qqI_Q,4217
297
+ forge/_extensions/skills/understand/resources/docs-anthropic.md,sha256=RLic1VnATi-WKraTTB-dSGtcXNvUVEomJyNytkDPUSk,5183
298
+ forge/_extensions/skills/understand/resources/docs-gemini.md,sha256=Ky-GkCICV_OugqVQYg4LvfXunocm7lw_1rwIFfW1yyQ,5845
299
+ forge/_extensions/skills/understand/resources/docs-openai.md,sha256=KCju2VBs6p8gn_rpzB1DzElfBPkQgvzum_gCB8gpaTs,5770
300
+ forge/_extensions/skills/understand/resources/docs.md,sha256=RLic1VnATi-WKraTTB-dSGtcXNvUVEomJyNytkDPUSk,5183
301
+ forge/_extensions/skills/walkthrough/SKILL.md,sha256=8d69t9w9IlF5oK4yA2PtnzpK7vDt1W9oGBDAqMYKmwM,30780
302
+ forge/_extensions/skills/walkthrough/resources/checklist.md,sha256=w7t_Wvtojz1EB8Uu1zU6zwtodVEahJreD5e3Gj9Q9sU,18819
303
+ forge/_extensions/skills/walkthrough/scripts/run-in-repo.sh,sha256=NK6umRjB74B3_xCLCTPs-yKfg4ySukWQnD5mTwaDBsQ,4073
304
+ forge/_extensions/skills/walkthrough/scripts/setup-test-repo.sh,sha256=zNd56bVtPV2V9zgtc9tEZruIOSgS5uGP7XprdHAfwDw,6357
305
+ forge/_extensions/skills/walkthrough/scripts/walkthrough-state.py,sha256=kCR9kgr3tbd5muYryn69j9RAL038qitcVw0DTs8Ijas,40238
306
+ multi_forge-0.2.0.dist-info/METADATA,sha256=6PftBXdoM--OBWf22DRq-Bqc9nCcyy9PdpmRE7K9U9U,11634
307
+ multi_forge-0.2.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
308
+ multi_forge-0.2.0.dist-info/entry_points.txt,sha256=f2SVrl4dCWYj85Q3sy5Z5POnjyzoS-_ozjp45lEBph4,46
309
+ multi_forge-0.2.0.dist-info/licenses/LICENSE,sha256=bvuyTvIRd28PQZvFAPkRtX_rBsy2pJXGl4kq5rcbpWg,11375
310
+ multi_forge-0.2.0.dist-info/licenses/NOTICE,sha256=qoQJhfzAf-LSevXtgYQzM9NGjVl3FmHX-ruFFmRGW5w,400
311
+ multi_forge-0.2.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.29.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ forge = forge.cli.main:main