@moretea-labs/forge 1.5.0-rc.1 → 1.5.0

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 (259) hide show
  1. package/AGENTS.md +9 -11
  2. package/CHANGELOG.md +19 -0
  3. package/CLAUDE.md +8 -10
  4. package/DESIGN.md +278 -0
  5. package/README.md +70 -90
  6. package/README.zh-CN.md +50 -55
  7. package/SKILL.md +8 -11
  8. package/THIRD_PARTY_NOTICES.md +9 -3
  9. package/assets/branding/README.md +4 -2
  10. package/assets/hooks/lib/workflow-state.sh +19 -18
  11. package/assets/hooks/post-edit-guard.sh +6 -75
  12. package/assets/hooks/prompt-guard.sh +24 -12
  13. package/assets/hooks/session-start-context.sh +17 -17
  14. package/assets/hooks/stop-orchestrator.sh +2 -2
  15. package/assets/partials/04-project-structure.partial.md +6 -6
  16. package/assets/partials/05-workflow.partial.md +6 -6
  17. package/assets/partials/07-footer.partial.md +1 -1
  18. package/assets/partials/08-orchestration.partial.md +2 -2
  19. package/assets/partials-agents/02-operating-mode.partial.md +5 -5
  20. package/assets/partials-agents/03-orchestration.partial.md +3 -3
  21. package/assets/partials-agents/04-task-protocol.partial.md +3 -3
  22. package/assets/partials-agents/08-deep-docs.partial.md +1 -1
  23. package/assets/reference-configs/agentic-development-flow.md +49 -86
  24. package/assets/reference-configs/external-tooling.md +21 -61
  25. package/assets/reference-configs/handoff-protocol.md +25 -20
  26. package/assets/reference-configs/harness-overview.md +8 -8
  27. package/assets/templates/helpers/archive-workflow.sh +0 -1
  28. package/assets/templates/helpers/capture-plan.sh +3 -3
  29. package/assets/templates/helpers/check-task-workflow.sh +2 -2
  30. package/assets/templates/helpers/codex-handoff-resume.sh +5 -5
  31. package/assets/templates/helpers/ensure-task-workflow.sh +37 -35
  32. package/assets/templates/helpers/new-plan.sh +1 -1
  33. package/assets/templates/helpers/plan-to-todo.sh +2 -2
  34. package/assets/templates/helpers/prepare-codex-handoff.sh +2 -2
  35. package/assets/templates/helpers/prepare-handoff.sh +9 -9
  36. package/assets/templates/helpers/refresh-current-status.sh +2 -2
  37. package/assets/templates/helpers/ship-worktrees.sh +1 -1
  38. package/assets/templates/helpers/sprint-backlog.sh +1 -1
  39. package/assets/templates/helpers/verify-sprint.sh +7 -7
  40. package/assets/templates/helpers/workstream-sync.sh +1 -1
  41. package/assets/templates/plan.template.md +1 -1
  42. package/assets/workflow-contract.v1.json +6 -3
  43. package/docs/architecture/current/README.md +10 -9
  44. package/docs/architecture/current/approved-target-architecture.zh-CN.md +2 -2
  45. package/docs/architecture/current/architecture-invariants.md +2 -2
  46. package/docs/architecture/current/automation-and-schedule-engine.md +15 -15
  47. package/docs/architecture/current/codegraph-context-provider.md +2 -2
  48. package/docs/architecture/current/control-plane-authority-inventory.md +12 -0
  49. package/docs/architecture/current/dispatch-and-agent-strategy.md +11 -11
  50. package/docs/architecture/current/entity-model.md +0 -27
  51. package/docs/architecture/current/failure-recovery.md +0 -24
  52. package/docs/architecture/current/governance.md +1 -1
  53. package/docs/architecture/current/implementation-status.md +1 -1
  54. package/docs/architecture/current/legacy-governance.md +58 -0
  55. package/docs/architecture/current/multi-repository-execution.md +1 -1
  56. package/docs/architecture/current/peer-supercontroller-runtime.md +1 -1
  57. package/docs/architecture/current/personal-assistant-plugin-baseline.md +4 -5
  58. package/docs/architecture/current/scheduler-and-resource-claims.md +0 -10
  59. package/docs/architecture/current/target-requirements-traceability.md +2 -2
  60. package/docs/architecture/current/thin-harness-governance-policy.md +1 -1
  61. package/docs/architecture/current/thin-harness-v1.md +9 -11
  62. package/docs/architecture/domains/runtime-harness.md +1 -1
  63. package/docs/forge-autonomous-goal-loop.md +3 -1
  64. package/docs/forge-chatgpt-mcp-setup.md +51 -184
  65. package/docs/images/forge-banner-cn.svg +26 -1
  66. package/docs/images/forge-banner.svg +26 -1
  67. package/docs/operations/features.md +1 -1
  68. package/docs/operations/homebrew.md +3 -3
  69. package/docs/operations/mcp-tool-exposure.md +5 -5
  70. package/docs/operations/platform-support.md +45 -37
  71. package/docs/operations/platform-support.zh-CN.md +40 -38
  72. package/docs/operations/releasing.md +3 -3
  73. package/docs/operations/releasing.zh-CN.md +3 -3
  74. package/docs/operations/troubleshooting.md +11 -6
  75. package/docs/operations/troubleshooting.zh-CN.md +11 -6
  76. package/docs/public-usage-guide.md +28 -21
  77. package/docs/public-usage-guide.zh-CN.md +28 -21
  78. package/docs/tutorials/01-install-and-start.md +56 -35
  79. package/docs/tutorials/01-install-and-start.zh-CN.md +56 -35
  80. package/docs/tutorials/02-connect-chatgpt.md +112 -46
  81. package/docs/tutorials/02-connect-chatgpt.zh-CN.md +113 -45
  82. package/docs/wiki/Architecture.md +1 -1
  83. package/docs/wiki/Installation.md +2 -2
  84. package/docs/wiki/Quick-Start.md +1 -1
  85. package/docs/wiki/Work-Lifecycle.md +1 -1
  86. package/install.ps1 +4 -5
  87. package/install.sh +4 -6
  88. package/package.json +15 -5
  89. package/scripts/archive-workflow.sh +0 -1
  90. package/scripts/benchmark-thin-harness-mcp-e2e.ts +27 -14
  91. package/scripts/build-controller-ui.ts +28 -0
  92. package/scripts/capture-plan.sh +4 -4
  93. package/scripts/check-agent-tooling.sh +12 -1
  94. package/scripts/check-platform-support.mjs +2 -2
  95. package/scripts/check-public-docs.sh +16 -5
  96. package/scripts/check-release-readiness.sh +5 -11
  97. package/scripts/check-runtime-architecture.mjs +14 -22
  98. package/scripts/check-tarball-install-smoke.sh +3 -2
  99. package/scripts/check-task-workflow.sh +2 -2
  100. package/scripts/codex-handoff-resume.sh +5 -5
  101. package/scripts/create-project-dirs.sh +3 -3
  102. package/scripts/ensure-task-workflow.sh +45 -35
  103. package/scripts/init-project.sh +4 -4
  104. package/scripts/install-desktop-operator-registration.ts +2 -2
  105. package/scripts/lib/project-init-lib.sh +46 -44
  106. package/scripts/migrate-project-template.sh +7 -4
  107. package/scripts/new-plan.sh +1 -1
  108. package/scripts/plan-to-todo.sh +2 -2
  109. package/scripts/prepare-codex-handoff.sh +2 -2
  110. package/scripts/prepare-handoff.sh +9 -9
  111. package/scripts/refresh-current-status.sh +2 -2
  112. package/scripts/setup-plugins.sh +3 -3
  113. package/scripts/ship-worktrees.sh +1 -1
  114. package/scripts/sprint-backlog.sh +5 -5
  115. package/scripts/sync-codex-installed-copies.sh +2 -3
  116. package/scripts/verify-sprint.sh +7 -7
  117. package/scripts/workstream-sync.sh +1 -1
  118. package/src/cli/chatgpt-browser/bridge-extension.ts +1 -1
  119. package/src/cli/chatgpt-browser/bridge-provider.ts +29 -0
  120. package/src/cli/chatgpt-browser/file-policy.ts +3 -1
  121. package/src/cli/commands/chatgpt.ts +51 -0
  122. package/src/cli/commands/doctor.ts +1 -1
  123. package/src/cli/commands/init-hook.ts +211 -70
  124. package/src/cli/commands/init.ts +5 -6
  125. package/src/cli/commands/mcp.ts +29 -5
  126. package/src/cli/commands/runtime.ts +60 -8
  127. package/src/cli/commands/setup-profile.ts +441 -0
  128. package/src/cli/controller/check-runner.ts +20 -3
  129. package/src/cli/controller/codex-continuation.ts +4 -7
  130. package/src/cli/controller/context-pack.ts +118 -14
  131. package/src/cli/controller/operational-plan.ts +4 -4
  132. package/src/cli/controller/task-ledger.ts +10 -10
  133. package/src/cli/controller/work-mode.ts +6 -13
  134. package/src/cli/index.ts +14 -35
  135. package/src/cli/local-bridge/connector-freshness.ts +1 -1
  136. package/src/cli/local-bridge/console-automations.ts +160 -0
  137. package/src/cli/local-bridge/dashboard.ts +8 -1303
  138. package/src/cli/local-bridge/facade-api.ts +16 -7
  139. package/src/cli/local-bridge/frontend/src/App.tsx +10 -0
  140. package/src/cli/local-bridge/frontend/src/components/Button.tsx +1 -0
  141. package/src/cli/local-bridge/frontend/src/components/DetailPane.tsx +3 -0
  142. package/src/cli/local-bridge/frontend/src/components/SearchField.tsx +1 -0
  143. package/src/cli/local-bridge/frontend/src/components/SectionHeader.tsx +1 -0
  144. package/src/cli/local-bridge/frontend/src/components/Segmented.tsx +1 -0
  145. package/src/cli/local-bridge/frontend/src/components/StatusText.tsx +3 -0
  146. package/src/cli/local-bridge/frontend/src/design/icons.tsx +11 -0
  147. package/src/cli/local-bridge/frontend/src/design/tokens.css +8 -0
  148. package/src/cli/local-bridge/frontend/src/features/automations/AutomationsView.tsx +3 -0
  149. package/src/cli/local-bridge/frontend/src/features/capabilities/CapabilitiesView.tsx +4 -0
  150. package/src/cli/local-bridge/frontend/src/features/overview/OverviewView.tsx +3 -0
  151. package/src/cli/local-bridge/frontend/src/features/repositories/RepositoriesView.tsx +2 -0
  152. package/src/cli/local-bridge/frontend/src/features/settings/SettingsView.tsx +2 -0
  153. package/src/cli/local-bridge/frontend/src/features/system/SystemView.tsx +2 -0
  154. package/src/cli/local-bridge/frontend/src/features/work/WorkView.tsx +3 -0
  155. package/src/cli/local-bridge/frontend/src/lib/api.ts +23 -0
  156. package/src/cli/local-bridge/frontend/src/lib/format.ts +4 -0
  157. package/src/cli/local-bridge/frontend/src/lib/routes.ts +7 -0
  158. package/src/cli/local-bridge/frontend/src/main.tsx +1 -0
  159. package/src/cli/local-bridge/frontend/src/shell/AppShell.tsx +1 -0
  160. package/src/cli/local-bridge/frontend/src/shell/CommandBar.tsx +2 -0
  161. package/src/cli/local-bridge/frontend/src/shell/Sidebar.tsx +3 -0
  162. package/src/cli/local-bridge/frontend/src/styles.css +12 -0
  163. package/src/cli/local-bridge/frontend/src/types.ts +14 -0
  164. package/src/cli/local-bridge/frontend/src/vite-env.d.ts +1 -0
  165. package/src/cli/local-bridge/frontend/vite.config.ts +27 -0
  166. package/src/cli/local-bridge/server.ts +44 -0
  167. package/src/cli/local-bridge/ui-dist/app.css +1 -0
  168. package/src/cli/local-bridge/ui-dist/app.js +11094 -0
  169. package/src/cli/mcp/instructions.ts +3 -3
  170. package/src/cli/mcp/legacy-tool-service.ts +27 -23
  171. package/src/cli/mcp/multi-repository.ts +2 -0
  172. package/src/cli/mcp/policy.ts +7 -5
  173. package/src/cli/mcp/repository-tools.ts +53 -14
  174. package/src/cli/mcp/server.ts +5 -10
  175. package/src/cli/mcp/setup.ts +211 -275
  176. package/src/cli/mcp/tool-capability-cache.ts +1 -1
  177. package/src/cli/mcp/toolset-names.ts +1 -1
  178. package/src/cli/mcp/toolset.ts +0 -1
  179. package/src/cli/mcp/transports/http.ts +24 -4
  180. package/src/cli/repositories/branch-name-policy.ts +0 -7
  181. package/src/cli/repositories/controller-home.ts +110 -3
  182. package/src/cli/repositories/safe-patch.ts +1 -1
  183. package/src/cli/repositories/selected-path-actions.ts +26 -24
  184. package/src/core/adoption/gitignore-plan.ts +2 -3
  185. package/src/core/adoption/plan.ts +4 -1
  186. package/src/runtime/control-plane/execution/edit-validation-coordinator.ts +556 -0
  187. package/src/runtime/control-plane/execution/work-handle-store.ts +128 -1
  188. package/src/runtime/control-plane/execution/work-validation-reconciler.ts +277 -0
  189. package/src/runtime/control-plane/execution/work-verification-snapshot.ts +169 -0
  190. package/src/runtime/control-plane/facade/capability-registry.ts +0 -10
  191. package/src/runtime/control-plane/facade/handoff-inbox-store.ts +44 -25
  192. package/src/runtime/control-plane/facade/suggested-actions.ts +7 -1
  193. package/src/runtime/control-plane/facade/types.ts +0 -1
  194. package/src/runtime/control-plane/global-scheduler/scheduler.ts +30 -8
  195. package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +114 -0
  196. package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +175 -0
  197. package/src/runtime/control-plane/launcher/launch-reservation-store.ts +161 -0
  198. package/src/runtime/control-plane/launcher/provider-mcp-bootstrap.ts +64 -0
  199. package/src/runtime/control-plane/launcher/thin-launcher.ts +117 -24
  200. package/src/runtime/control-plane/routing/route-policy.ts +14 -14
  201. package/src/runtime/control-plane/runtime-cleanup.ts +0 -1
  202. package/src/runtime/evidence/event-ledger.ts +1 -1
  203. package/src/runtime/{workflow/campaigns/workspace.ts → execution/managed-workspace.ts} +41 -43
  204. package/src/runtime/execution/process-runtime/check-facade.ts +6 -0
  205. package/src/runtime/execution/process-runtime/check-result.ts +45 -0
  206. package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +42 -16
  207. package/src/runtime/execution/process-runtime/command-facade.ts +4 -2
  208. package/src/runtime/execution/process-runtime/gc.ts +1 -1
  209. package/src/runtime/execution/process-runtime/index.ts +3 -0
  210. package/src/runtime/execution/process-runtime/interactive-admission.ts +14 -5
  211. package/src/runtime/execution/process-runtime/persisted-check.ts +285 -0
  212. package/src/runtime/execution/process-runtime/resource-claims.ts +30 -0
  213. package/src/runtime/execution/process-runtime/runtime.ts +18 -1
  214. package/src/runtime/execution/process-runtime/store.ts +1 -19
  215. package/src/runtime/execution/process-runtime/types.ts +4 -0
  216. package/src/runtime/execution/thin-harness/execution-router.ts +0 -1
  217. package/src/runtime/execution/thin-harness/fast-executor.ts +1 -1
  218. package/src/runtime/execution/thin-harness/lightweight-lanes.ts +1 -2
  219. package/src/runtime/execution/thin-harness/types.ts +0 -1
  220. package/src/runtime/execution/workers/executor.ts +1 -1
  221. package/src/runtime/gateway/mcp/execution-tools.ts +1 -1
  222. package/src/runtime/gateway/mcp/persisted-check-process.ts +3 -255
  223. package/src/runtime/gateway/mcp/process-tools.ts +16 -3
  224. package/src/runtime/gateway/mcp/resource-policy.ts +0 -9
  225. package/src/runtime/gateway/mcp/router.ts +117 -182
  226. package/src/runtime/gateway/mcp/runtime-tools.ts +331 -409
  227. package/src/runtime/gateway/mcp/work-validation-reconciler.ts +1 -219
  228. package/src/runtime/plugins/browser-adapter.ts +5 -0
  229. package/src/runtime/plugins/desktop-operator-registration.ts +1 -1
  230. package/src/runtime/plugins/store.ts +14 -6
  231. package/src/runtime/plugins/types.ts +1 -1
  232. package/src/runtime/projections/materialized-view.ts +1 -23
  233. package/src/runtime/recovery/maintenance-executor.ts +9 -0
  234. package/src/runtime/resources/ownership.ts +0 -1
  235. package/src/runtime/root/gateway-adapter.ts +2 -0
  236. package/src/runtime/root/mcp-transport.ts +10 -2
  237. package/src/runtime/root/package-runtime-release.ts +161 -0
  238. package/src/runtime/root/package-runtime-service.ts +172 -0
  239. package/src/runtime/root/runtime.ts +2 -1
  240. package/src/runtime/root/scheduler.ts +5 -0
  241. package/src/runtime/root/service.ts +18 -5
  242. package/src/runtime/standalone-recovery/core.ts +65 -16
  243. package/src/runtime/workflow/findings/store.ts +145 -106
  244. package/src/runtime/workflow/findings/types.ts +22 -0
  245. package/src/runtime/workflow/schedules/engine.ts +132 -2
  246. package/src/runtime/workflow/schedules/pending-activation.ts +139 -0
  247. package/src/runtime/workflow/schedules/work-continuation.ts +218 -0
  248. package/docs/CHANGELOG.md +0 -978
  249. package/docs/README.zh-CN.md +0 -58
  250. package/scripts/smoke-chatgpt-supervised-automation.ts +0 -208
  251. package/src/cli/commands/controller.ts +0 -680
  252. package/src/runtime/workflow/campaigns/cleanup.ts +0 -263
  253. package/src/runtime/workflow/campaigns/engine.ts +0 -112
  254. package/src/runtime/workflow/campaigns/normalize.ts +0 -100
  255. package/src/runtime/workflow/campaigns/review.ts +0 -315
  256. package/src/runtime/workflow/campaigns/store.ts +0 -526
  257. package/src/runtime/workflow/campaigns/supervisor.ts +0 -112
  258. package/src/runtime/workflow/campaigns/types.ts +0 -290
  259. /package/src/runtime/{workflow/campaigns → execution}/workspace-agent.ts +0 -0
@@ -1,239 +1,106 @@
1
- # forge ChatGPT Controller Setup
1
+ # Forge ChatGPT Controller — Low-level Reference
2
2
 
3
- ## Purpose
3
+ > For normal onboarding, start with `forge setup` and [Tutorial 2](tutorials/02-connect-chatgpt.md). This file is the lower-level MCP reference and may also be regenerated by repository-scoped compatibility setup.
4
4
 
5
- The `controller` profile makes ChatGPT the project control plane. ChatGPT can inspect code and documents, maintain durable Issues and dependency-aware Tasks, apply bounded direct edits, publish Issues to GitHub Projects, dispatch short local Codex/Claude runs or visible GitHub Copilot cloud sessions, and review the resulting state. Repository files remain the source of truth; chat history is not required for recovery.
5
+ ## Product model
6
6
 
7
- ## Prerequisites
7
+ Forge has no internal AI brain. ChatGPT is one external controller option: ChatGPT decides semantic next steps, while Forge owns bounded execution, durable state, authorization, Runtime lifecycle, and evidence. Codex/Claude are optional and are not enabled merely because they are installed.
8
8
 
9
- - A forge adopted repository.
10
- - Bun and the `forge` CLI on PATH.
11
- - Codex and/or Claude CLI installed for delegated local execution.
12
- - GitHub CLI `gh` authenticated when GitHub Issues, Projects, or Copilot cloud sessions are used.
13
- - ChatGPT workspace access to Developer Mode and custom MCP Connectors.
14
- - A public HTTPS `/mcp` endpoint for ChatGPT.
9
+ ## Normal package path
15
10
 
16
- For a shared editable installation, keep the forge checkout at a stable path such as `~/DevProjects/forge`, run `bun install`, and reinstall the CLI after pulling updates.
17
-
18
- ## One-time setup
19
-
20
- ```bash
21
- forge mcp setup chatgpt --repo .
22
- forge runtime service install --controller-home <absolute-controller-home> --repo <absolute-repo-root> --host 127.0.0.1 --port 8765
23
- ```
24
-
25
- The `controller` profile writes the service-level MCP configuration consumed by the single `forge-runtime`. The macOS launchd service starts and restarts that one root process; Gateway, Controller Services, Scheduler, and MCP Transport share the same Runtime lifecycle owner. There is no MCP KeepAlive wrapper or component-level lifecycle command.
26
-
27
- The Runtime endpoint is loopback-only at `http://127.0.0.1:8765/`. The local visual controller surface is part of the same Runtime configuration; do not expose it directly.
28
-
29
- Health check:
11
+ A repository is not required for the user-level ChatGPT connection:
30
12
 
31
13
  ```bash
32
- curl http://127.0.0.1:8765/ready
33
- forge runtime status --controller-home <absolute-controller-home>
34
- forge mcp doctor --repo .
14
+ forge setup configure --controller chatgpt --tunnel auto
15
+ forge setup next
35
16
  ```
36
17
 
37
- For a fixed Cloudflare domain, verify both local and public discovery without leaking tokens:
18
+ The corresponding low-level commands are:
38
19
 
39
20
  ```bash
40
- curl http://127.0.0.1:8765/ready
41
- curl https://<named-tunnel-host>/.well-known/oauth-protected-resource/mcp
42
- env | grep -Ei 'proxy|no_proxy'
43
- HTTPS_PROXY= HTTP_PROXY= ALL_PROXY= curl -v https://<named-tunnel-host>/mcp
21
+ forge mcp setup chatgpt --user-level
22
+ forge runtime service install-package
23
+ forge runtime status --json
44
24
  ```
45
25
 
46
- If a local HTTP proxy interferes with endpoint checks, add the fixed domain, `*.trycloudflare.com`, `*.ts.net`, and `100.64.0.0/10` to `NO_PROXY` instead of disabling proxies globally.
47
-
48
- The controller profile stores service-level MCP config under `controllerHome/mcp/mcp.local.json`, including allowed local agents, timeout, endpoint, and `chatgpt.serverName`. OAuth credentials live in `controllerHome/mcp/mcp.oauth.json`; the bearer fallback lives in `controllerHome/mcp/mcp.tokens.json`. Existing repo-local `.forge/mcp.*` files remain a legacy fallback.
26
+ The Package Runtime does not require a Forge Git checkout, Bun compilation, CodeGraph, or Standalone Recovery. The older `forge runtime service install --repo ...` command is an advanced source/immutable-release path.
49
27
 
50
- Repository-specific MCP access rules may be added in `.forge/mcp.policy.json`. Repository policy can narrow access, but immutable secret, credential, Git-internal, and build-output denies remain enforced.
28
+ ## Local boundaries
51
29
 
52
- ## Stable endpoint
53
-
54
- Use this Connector URL:
30
+ Forge MCP remains loopback-only, normally at:
55
31
 
56
32
  ```text
57
- <https-tunnel-url>/mcp
33
+ http://127.0.0.1:8765/mcp
58
34
  ```
59
35
 
60
- Quick tunnels are useful for one-off smoke tests, but their URL may change. For routine use, prefer a fixed Cloudflare domain. Forge never owns the tunnel process: publish the loopback Runtime endpoint through your own stable HTTPS tunnel. With Cloudflare, create and route a named tunnel:
36
+ Fresh user-level setup keeps the repository-centric Utility Console disabled until a repository/workbench target is configured. When enabled later it uses a separate loopback port (normally 8766). Never expose it to the internet.
61
37
 
62
- ```bash
63
- cloudflared tunnel login
64
- cloudflared tunnel create forge-mcp
65
- cloudflared tunnel route dns forge-mcp <named-tunnel-host>
66
- cloudflared tunnel run forge-mcp
67
- ```
38
+ Service-level MCP configuration lives below `Controller Home/mcp/`. OAuth credentials and bearer fallback tokens are local secrets and must not be pasted into chat or committed. Repository-specific `.forge/mcp.policy.json` can narrow access when a repository is later adopted.
68
39
 
69
- Keep forge on the fixed public origin without owning the tunnel process:
40
+ ## Remote controller connection
70
41
 
71
- ```bash
72
- forge mcp setup chatgpt --repo . --endpoint https://<named-tunnel-host>/mcp
73
- forge runtime service install --controller-home <absolute-controller-home> --repo <absolute-repo-root> --host 127.0.0.1 --port 8765
74
- ```
42
+ The setup profile owns the connection choice. Supported paths are:
75
43
 
76
- Regenerate this guide with the stable endpoint:
44
+ 1. **OpenAI Secure MCP Tunnel** — preferred when the OpenAI organization/workspace has tunnel permission; no public inbound Forge endpoint is required. Forge stores only the non-secret `tunnel_id`. The runtime API key remains an `env:`/file reference owned by the official `tunnel-client`.
45
+ 2. **Cloudflare Tunnel** — stable public/internet-reachable HTTPS endpoint.
46
+ 3. **Tailscale Funnel** — HTTPS endpoint for compatible Tailscale environments.
47
+ 4. **Existing HTTPS** — user-managed reverse proxy/tunnel ending in `/mcp`.
48
+ 5. **None** — local setup only; remote connectivity can be configured later.
77
49
 
78
- ```bash
79
- forge mcp setup chatgpt --repo . --endpoint <https-url>/mcp
80
- ```
81
-
82
- The real endpoint stays in ignored local config; the tracked guide stays placeholder-only. The OAuth discovery endpoint includes `oauth-protected-resource` metadata.
83
-
84
- ## Create the ChatGPT Connector
85
-
86
- 1. Open ChatGPT Settings and enable Developer Mode.
87
- 2. Create a custom Connector using the server name from `controllerHome/mcp/mcp.local.json` under `chatgpt.serverName`.
88
- 3. Paste the public HTTPS URL ending in `/mcp`.
89
- 4. Configure Connector authentication as OAuth. ChatGPT must use the `/mcp` OAuth URL; do not point ChatGPT at `/mcp-bearer`.
90
- 5. Scan tools and authorize with the passphrase from `controllerHome/mcp/mcp.oauth.json`.
91
- 6. Keep write confirmations enabled.
92
- 7. Re-scan tools after updating forge tool schemas.
50
+ For OpenAI Secure MCP Tunnel, setup uses the official supervised runtime surface and considers it ready only when `tunnel-client runtimes status forge --json` reports the runtime running, healthy, and ready.
93
51
 
94
- ### Grok and other OAuth MCP clients
95
-
96
- Current Grok custom connectors support OAuth dynamic client registration + PKCE. Use the same canonical endpoint as ChatGPT:
52
+ For public HTTPS paths, the configured connector URL is:
97
53
 
98
54
  ```text
99
55
  <https-tunnel-url>/mcp
100
56
  ```
101
57
 
102
- Do not use the legacy /mcp-grok route for new connectors. Grok's current OAuth callback is /connectors-oauth-exchange-code/ on grok.com; forge accepts that callback through dynamic registration or its public-client fallback.
103
-
104
- ### Non-OAuth MCP clients
105
-
106
- Clients that cannot complete OAuth dynamic client registration + PKCE should use the dedicated bearer endpoint instead of `/mcp` or `/authorize`:
107
-
108
- ```text
109
- <https-tunnel-url>/mcp-bearer
110
- ```
111
-
112
- Authenticate with `Authorization: Bearer <token>` using the token stored under `controllerHome/mcp/mcp.tokens.json` (or `FORGE_MCP_TOKEN`). Do not paste the raw token into chat or docs. `/health` advertises both `mcpEndpoint` and `bearerEndpoint`. Incomplete OAuth hits on `/authorize` return HTTP 400 and point clients to `/mcp-bearer`.
113
-
114
- ## Verify the loaded tool surface
115
-
116
- Default `--toolset core` exposes the five-tool ChatGPT facade (`rh_access`, `rh_status`, `rh_inbox`, `rh_context`, `rh_work`) plus bounded repository discovery/edit escape hatches. Use `--toolset advanced` for the supervised typed controller menu or `--toolset full` for exhaustive legacy compatibility. Confirm all five `rh_*` tools appear after connect. If only legacy planning tools are visible, refresh or recreate the Connector so ChatGPT reloads the MCP tool schema.
117
-
118
- ## Refresh newly added repository tools
119
-
120
- For the current repository only, prefer a bounded local restart:
58
+ Record a stable endpoint with:
121
59
 
122
60
  ```bash
123
- forge recovery restart-runtime --controller-home <absolute-controller-home>
61
+ forge setup configure --controller chatgpt --tunnel existing --endpoint https://forge.example.com/mcp
124
62
  ```
125
63
 
126
- The single Runtime restart also refreshes repository tools. There is no per-repository rollout or component restart surface, and you never need to compute the launchd label or hand-write `launchctl kickstart` for routine maintenance.
127
-
128
- After the restart, rescan or recreate the ChatGPT Connector, then call `controller_capabilities` again and verify `expectedTools` still includes `repository_latest_source_diagnose` and `repository_bootstrap_local_project`.
64
+ Forge synchronizes an explicitly recorded endpoint into the user-level ChatGPT MCP configuration. A configured URL is not proof of live end-to-end connectivity; verify from ChatGPT with a real tool call.
129
65
 
130
- ## Daily workflow
66
+ ## ChatGPT-side setup
131
67
 
132
- Start a new ChatGPT conversation with:
68
+ ChatGPT developer-mode/MCP availability is controlled by the current ChatGPT plan and workspace policy. Follow OpenAI's current developer-mode documentation; Forge cannot bypass plan, administrator, RBAC, or tool-action restrictions.
133
69
 
134
- ```text
135
- Use forge as the project controller. Read project_snapshot, current Issues, active Runs, and relevant code before deciding the next action. Keep work in small dependency-aware Tasks. Do not dispatch one large Issue as one agent run.
136
- ```
70
+ - With **Secure MCP Tunnel**, create the ChatGPT app/connector using the Tunnel connection and the tunnel ID.
71
+ - With **HTTPS**, use the stable URL ending in `/mcp` and Forge's OAuth flow.
72
+ - Refresh/scan tools after Forge tool definitions change.
137
73
 
138
- Typical requests:
74
+ The bounded default surface intentionally exposes the preferred `rh_*` facade plus repository/source/check/process/plugin escape hatches. Do not switch to exhaustive compatibility mode merely to see more tool names.
139
75
 
140
- ```text
141
- Analyze this requirement and the current implementation. Create or update an Issue and split it into executable Tasks. Do not execute yet.
142
- ```
76
+ ## Verify
143
77
 
144
- ```text
145
- Inspect readiness for this Issue, publish it to GitHub when collaboration is useful, and launch at most two independent Tasks. Review every local diff or GitHub pull request and record verification evidence before accepting it.
146
- ```
78
+ Local Runtime:
147
79
 
148
- ```text
149
- Read the project board and failed Runs. Retry only the smallest failed Task, or re-plan the Issue when the original split is wrong.
150
- ```
151
-
152
- ```text
153
- This is a small local fix. Open a bounded edit session, modify only the named files, inspect the Git diff, run focused checks, and finalize or rollback the edit.
80
+ ```bash
81
+ forge runtime status --json
82
+ forge mcp doctor
154
83
  ```
155
84
 
156
- ## Persistent model
85
+ Then verify from the selected external controller:
157
86
 
158
87
  ```text
159
- Issue
160
- -> Task T1
161
- -> Run 1
162
- -> Run 2 (retry)
163
- -> Task T2
164
- -> Task T3
88
+ Use Forge. Call rh_status and report whether the Runtime is ready. Do not modify anything yet.
165
89
  ```
166
90
 
167
- - Issues and Tasks are stored under `tasks/issues/` as JSON plus readable Markdown.
168
- - Agent jobs, logs, edit backups, and worktrees are stored under ignored `.ai/harness/` runtime directories.
169
- - A completed isolated agent Run moves its Task to review. ChatGPT must inspect it with `get_task_diff`, integrate it with `integrate_task_run`, record named-check and criterion evidence through `verify_task`, then explicitly accept it or request changes.
170
- - Dependency completion unlocks later Tasks automatically.
171
- - Any new ChatGPT conversation can recover state through `project_snapshot` and `get_project_board`.
172
-
173
- ## Capability boundaries
174
-
175
- - `observe`: inspect repository state, search code, and read bounded file ranges.
176
- - `manage`: create Issues, dynamically split Tasks, inspect launch readiness, publish to GitHub Issues/Projects, update status, and maintain project documents.
177
- - `edit`: use a bounded edit session with allowed paths, SHA preconditions, change limits, backups, and rollback.
178
- - `execute`: dispatch a ready Task to an allowed local agent in an isolated worktree or to a visible GitHub Copilot cloud session.
179
- - Protected operations such as secrets, Git internals, package lockfiles, CI workflow changes, commits, merges, and pushes are not default controller actions.
91
+ A successful controller-to-Forge tool call is the meaningful end-to-end setup milestone.
180
92
 
181
- Kernel-managed Agent goals and persistent Task Runs are retired. New work uses
182
- `rh_work` to create or continue a WorkContract, `rh_work.controller_claim` to
183
- establish ownership, and `rh_work.launcher_start` to begin an external
184
- SuperController session.
93
+ ## Optional controller entries
185
94
 
186
- ## Dev Mode Agent Runner
187
-
188
- Local Agent execution is opt-in. GitHub cloud sessions use authenticated `gh` and do not require the local dev runner:
189
-
190
- The runner is enabled through the service-level MCP configuration written by `forge mcp setup chatgpt` (`devMode.agentRunner` and `devMode.allowedAgents`). It executes inside the single Forge Runtime's bounded worker processes; there is no separate `forge mcp serve` lifecycle to supervise.
191
-
192
- The runner defaults to 60 minutes per local Task and supports explicit values up to 12 hours. Requested values are validated and persisted unchanged; an invalid value fails instead of silently falling back to 120 seconds.
193
-
194
- The runner:
195
-
196
- - accepts only configured `codex` or `claude` agents;
197
- - creates one persistent Run per Task;
198
- - normally creates an isolated Git worktree;
199
- - records prompt, process metadata, streaming stdout/stderr, structured events, and result under `.ai/harness/jobs/`;
200
- - never exposes arbitrary shell input through MCP;
201
- - does not commit, merge, or push automatically.
202
-
203
- Watch local or GitHub execution from a terminal:
204
-
205
- ```bash
206
- forge controller runs --repo .
207
- forge controller watch <RUN-ID> --repo . --log
208
- ```
209
-
210
- The `--log` view streams local Codex/Claude output while the process is running and polls GitHub cloud-session logs when available.
211
-
212
- ## Local Codex MCP
213
-
214
- Configure Codex to read forge state:
95
+ Codex and Claude are configured only when explicitly selected:
215
96
 
216
97
  ```bash
217
- forge mcp setup codex --repo . --scope project
98
+ forge mcp setup codex --scope user --profile controller
99
+ forge mcp setup claude --scope user --profile controller
218
100
  ```
219
101
 
220
- The executor profile remains read-oriented. Controller-dispatched Codex work is scoped by the generated Task prompt and worktree.
221
-
222
- ## Security
223
-
224
- - Keep OAuth passphrases, bearer tokens, tunnel tokens, `~/.codex/auth.json`, and other credentials out of chat and Git.
225
- - Keep the MCP server bound to loopback; expose it only through the authenticated tunnel.
226
- - Do not remove immutable hard-deny patterns in order to make a Task pass.
227
- - Review every completed local diff or GitHub pull request and record passing Verification Gate evidence before accepting a Task.
228
- - Use the smallest allowed path set and focused checks for direct edits.
102
+ Multiple controller entries may coexist, while one external controller remains the semantic owner at a time.
229
103
 
230
- ## Troubleshooting
104
+ ## Advanced source/Recovery path
231
105
 
232
- - ChatGPT cannot connect: verify the HTTPS tunnel ends in `/mcp` and local `/ready` responds.
233
- - Grok cannot connect: recreate it with the canonical `…/mcp` URL. The legacy `…/mcp-grok` URL is compatibility-only.
234
- - A genuinely non-OAuth client loops on `/authorize`: use `…/mcp-bearer` with a bearer token from `controllerHome/mcp/mcp.tokens.json`.
235
- - ChatGPT auth loops: retry authorization and inspect `controllerHome/mcp/mcp.oauth.json` first, then legacy `.forge/mcp.oauth.json` only when using fallback; do not paste the passphrase into chat.
236
- - Tool scan misses tools: restart the Forge Runtime service with `launchctl kickstart -k gui/$(id -u)/com.moretea.forge.runtime.<controller-home-suffix>`, then rescan or recreate the versioned Connector and verify `controller_capabilities.expectedTools` includes `repository_latest_source_diagnose` and `repository_bootstrap_local_project`.
237
- - Codex cannot see the MCP server: rerun `forge mcp setup codex --repo . --scope project`.
238
- - A quick tunnel URL changed: update the Connector URL or switch to a named tunnel.
239
- - A Task is blocked: inspect `get_task_run`, shrink or re-plan the Task, then retry that Task rather than redispatching the full Issue.
106
+ Maintainers who intentionally need immutable Git/source releases and independent disaster recovery may use the source Runtime and Standalone Recovery documentation. Those mechanisms are not required by ordinary npm/package users and are deliberately excluded from normal setup.
@@ -1 +1,26 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1280" height="320" viewBox="0 0 1280 320" role="img" aria-labelledby="title desc"><title id="title">Forge</title><desc id="desc">Forge 本地优先行动运行时</desc><rect width="1280" height="320" rx="36" fill="#111827"/><path d="M136 224V96h190v38H180v22h126v36H180v32h146v38H136Z" fill="#f9fafb"/><text x="376" y="190" fill="#f9fafb" font-family="system-ui, sans-serif" font-size="112" font-weight="700">Forge</text><text x="382" y="238" fill="#d1d5db" font-family="system-ui, sans-serif" font-size="28">本地优先行动运行时</text></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1280" height="420" viewBox="0 0 1280 420" role="img" aria-labelledby="title desc">
2
+ <title id="title">Forge</title><desc id="desc">Forge 让 ChatGPT 在明确权限边界内操作本机文件、命令、代码、浏览器、Apple 工作流与插件。</desc>
3
+ <defs>
4
+ <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#0b0d12"/><stop offset="1" stop-color="#171b24"/></linearGradient>
5
+ <linearGradient id="forge" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#ffb15c"/><stop offset="1" stop-color="#ff6b35"/></linearGradient>
6
+ <radialGradient id="glow" cx="0.18" cy="0.5" r="0.55"><stop offset="0" stop-color="#ff7a3d" stop-opacity="0.22"/><stop offset="1" stop-color="#ff7a3d" stop-opacity="0"/></radialGradient>
7
+ </defs>
8
+ <rect width="1280" height="420" rx="38" fill="url(#bg)"/><rect width="1280" height="420" rx="38" fill="url(#glow)"/>
9
+ <g opacity="0.12" stroke="#ffffff"><path d="M0 70H1280M0 140H1280M0 210H1280M0 280H1280M0 350H1280"/><path d="M160 0V420M320 0V420M480 0V420M640 0V420M800 0V420M960 0V420M1120 0V420"/></g>
10
+ <rect x="74" y="75" width="126" height="126" rx="28" fill="url(#forge)"/>
11
+ <path d="M108 170V106h67v18h-46v10h39v17h-39v19z" fill="#111318"/>
12
+ <text x="74" y="258" fill="#f8fafc" font-family="ui-sans-serif,system-ui,sans-serif" font-size="72" font-weight="760">Forge</text>
13
+ <text x="74" y="305" fill="#ff9b55" font-family="ui-sans-serif,system-ui,sans-serif" font-size="24" font-weight="700" letter-spacing="1">CHATGPT 决策,FORGE 执行</text>
14
+ <text x="74" y="344" fill="#b8c0cc" font-family="ui-sans-serif,system-ui,sans-serif" font-size="22">连接你的电脑、代码、浏览器与外部服务。</text>
15
+ <g font-family="ui-sans-serif,system-ui,sans-serif">
16
+ <rect x="700" y="78" width="190" height="72" rx="18" fill="#202631" stroke="#3b4556"/><text x="795" y="107" text-anchor="middle" fill="#9ba7b8" font-size="13" font-weight="700" letter-spacing="1.5">主控</text><text x="795" y="134" text-anchor="middle" fill="#f8fafc" font-size="22" font-weight="700">ChatGPT</text>
17
+ <path d="M895 114H945" stroke="#ff8a45" stroke-width="3"/><path d="M936 106l12 8-12 8" fill="none" stroke="#ff8a45" stroke-width="3"/>
18
+ <rect x="955" y="78" width="250" height="72" rx="18" fill="#27251f" stroke="#a65c2c"/><text x="1080" y="107" text-anchor="middle" fill="#ff9b55" font-size="13" font-weight="700" letter-spacing="1.5">行动层</text><text x="1080" y="134" text-anchor="middle" fill="#f8fafc" font-size="22" font-weight="700">Forge</text>
19
+ <g fill="#151a22" stroke="#343d4c">
20
+ <rect x="700" y="188" width="150" height="58" rx="16"/><rect x="866" y="188" width="150" height="58" rx="16"/><rect x="1032" y="188" width="173" height="58" rx="16"/>
21
+ <rect x="700" y="262" width="150" height="58" rx="16"/><rect x="866" y="262" width="150" height="58" rx="16"/><rect x="1032" y="262" width="173" height="58" rx="16"/>
22
+ </g>
23
+ <g fill="#e7ebf0" font-size="17" font-weight="650" text-anchor="middle"><text x="775" y="224">本机文件</text><text x="941" y="224">执行命令</text><text x="1118" y="224">Git 与代码</text><text x="775" y="298">浏览器</text><text x="941" y="298">Apple</text><text x="1118" y="298">插件</text></g>
24
+ <text x="700" y="363" fill="#8e99aa" font-size="15">明确权限 · 可恢复执行 · 可审查证据</text>
25
+ </g>
26
+ </svg>
@@ -1 +1,26 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1280" height="320" viewBox="0 0 1280 320" role="img" aria-labelledby="title desc"><title id="title">Forge</title><desc id="desc">Forge local-first action runtime</desc><rect width="1280" height="320" rx="36" fill="#111827"/><path d="M136 224V96h190v38H180v22h126v36H180v32h146v38H136Z" fill="#f9fafb"/><text x="376" y="190" fill="#f9fafb" font-family="system-ui, sans-serif" font-size="112" font-weight="700">Forge</text><text x="382" y="238" fill="#d1d5db" font-family="system-ui, sans-serif" font-size="28">local-first action runtime</text></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1280" height="420" viewBox="0 0 1280 420" role="img" aria-labelledby="title desc">
2
+ <title id="title">Forge</title><desc id="desc">Forge gives ChatGPT a controlled action layer for local files, commands, code, browsers, Apple workflows, and plugins.</desc>
3
+ <defs>
4
+ <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#0b0d12"/><stop offset="1" stop-color="#171b24"/></linearGradient>
5
+ <linearGradient id="forge" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#ffb15c"/><stop offset="1" stop-color="#ff6b35"/></linearGradient>
6
+ <radialGradient id="glow" cx="0.18" cy="0.5" r="0.55"><stop offset="0" stop-color="#ff7a3d" stop-opacity="0.22"/><stop offset="1" stop-color="#ff7a3d" stop-opacity="0"/></radialGradient>
7
+ </defs>
8
+ <rect width="1280" height="420" rx="38" fill="url(#bg)"/><rect width="1280" height="420" rx="38" fill="url(#glow)"/>
9
+ <g opacity="0.12" stroke="#ffffff"><path d="M0 70H1280M0 140H1280M0 210H1280M0 280H1280M0 350H1280"/><path d="M160 0V420M320 0V420M480 0V420M640 0V420M800 0V420M960 0V420M1120 0V420"/></g>
10
+ <rect x="74" y="75" width="126" height="126" rx="28" fill="url(#forge)"/>
11
+ <path d="M108 170V106h67v18h-46v10h39v17h-39v19z" fill="#111318"/>
12
+ <text x="74" y="258" fill="#f8fafc" font-family="ui-sans-serif,system-ui,sans-serif" font-size="72" font-weight="760">Forge</text>
13
+ <text x="74" y="305" fill="#ff9b55" font-family="ui-sans-serif,system-ui,sans-serif" font-size="24" font-weight="700" letter-spacing="1">CHATGPT DECIDES. FORGE ACTS.</text>
14
+ <text x="74" y="344" fill="#b8c0cc" font-family="ui-sans-serif,system-ui,sans-serif" font-size="22">A local-first action layer for your computer, code &amp; services.</text>
15
+ <g font-family="ui-sans-serif,system-ui,sans-serif">
16
+ <rect x="700" y="78" width="190" height="72" rx="18" fill="#202631" stroke="#3b4556"/><text x="795" y="107" text-anchor="middle" fill="#9ba7b8" font-size="13" font-weight="700" letter-spacing="1.5">CONTROLLER</text><text x="795" y="134" text-anchor="middle" fill="#f8fafc" font-size="22" font-weight="700">ChatGPT</text>
17
+ <path d="M895 114H945" stroke="#ff8a45" stroke-width="3"/><path d="M936 106l12 8-12 8" fill="none" stroke="#ff8a45" stroke-width="3"/>
18
+ <rect x="955" y="78" width="250" height="72" rx="18" fill="#27251f" stroke="#a65c2c"/><text x="1080" y="107" text-anchor="middle" fill="#ff9b55" font-size="13" font-weight="700" letter-spacing="1.5">ACTION LAYER</text><text x="1080" y="134" text-anchor="middle" fill="#f8fafc" font-size="22" font-weight="700">Forge</text>
19
+ <g fill="#151a22" stroke="#343d4c">
20
+ <rect x="700" y="188" width="150" height="58" rx="16"/><rect x="866" y="188" width="150" height="58" rx="16"/><rect x="1032" y="188" width="173" height="58" rx="16"/>
21
+ <rect x="700" y="262" width="150" height="58" rx="16"/><rect x="866" y="262" width="150" height="58" rx="16"/><rect x="1032" y="262" width="173" height="58" rx="16"/>
22
+ </g>
23
+ <g fill="#e7ebf0" font-size="17" font-weight="650" text-anchor="middle"><text x="775" y="224">LOCAL FILES</text><text x="941" y="224">COMMANDS</text><text x="1118" y="224">GIT &amp; CODE</text><text x="775" y="298">BROWSER</text><text x="941" y="298">APPLE</text><text x="1118" y="298">PLUGINS</text></g>
24
+ <text x="700" y="363" fill="#8e99aa" font-size="15">Bounded permissions · durable execution · reviewable evidence</text>
25
+ </g>
26
+ </svg>
@@ -31,7 +31,7 @@ These features are part of the default local setup:
31
31
 
32
32
  ## Tool exposure
33
33
 
34
- The default `core` / `advanced` toolset exposes one bounded ChatGPT-facing schema of 20 tools: the five `rh_*` workflow facades (with code retrieval routed through `rh_context.search`), repository selection, `repository_command_execute`, exact source read, `repository_safe_patch_apply`, `run_check`, one typed `plugin_action_execute` dispatcher with plugin schemas routed through `rh_context`, managed process lifecycle, result retrieval, and approval resolution. Git / issue-task / campaign / edit-session / other plugin / browser / iOS / maintenance atomics remain registered as internal handlers and are reachable through the `full` compatibility profile, which exposes every historical definition. The MCP transport does not dynamically load domain schemas; hiding from the default surface is a static exposure decision, never a handler deletion.
34
+ The default `core` / `advanced` toolset exposes one bounded ChatGPT-facing schema of 19 tools: the five `rh_*` workflow facades (with code retrieval routed through `rh_context.search`), repository selection, `repository_command_execute`, exact source read, `repository_safe_patch_apply`, `run_check`, one typed `plugin_action_execute` dispatcher with plugin schemas routed through `rh_context`, managed process lifecycle, result retrieval, and approval resolution. Git / issue-task / edit-session / other plugin / browser / iOS / maintenance atomics remain registered as internal handlers and are reachable through the `full` compatibility profile when still supported. Retired lifecycles are removed rather than kept as dormant compatibility handlers. The MCP transport does not dynamically load domain schemas.
35
35
 
36
36
  ## Execution choices
37
37
 
@@ -1,13 +1,13 @@
1
1
  # Homebrew distribution plan
2
2
 
3
- Homebrew is planned as a convenience layer after the first stable release. It is not a separate implementation or version line.
3
+ Homebrew is planned as a convenience layer after the first stable npm/GitHub release is published and verified. It is not a separate implementation or version line.
4
4
 
5
5
  ## Gate before creating a tap
6
6
 
7
7
  Do not publish a formula until all of the following are true:
8
8
 
9
- - `@moretea-labs/forge@1.4.0` exists on npm;
10
- - Git tag and GitHub Release `v1.4.0` exist and point to the tested commit;
9
+ - `@moretea-labs/forge@1.5.0` exists on npm;
10
+ - Git tag and GitHub Release `v1.5.0` exist and point to the tested commit;
11
11
  - the npm tarball has an immutable checksum;
12
12
  - macOS installation and `forge --version` / `forge doctor` tests pass;
13
13
  - upgrade and uninstall behavior is documented.
@@ -1,12 +1,12 @@
1
1
  # MCP tool exposure profiles
2
2
 
3
- Controller MCP uses one stable default schema so ChatGPT can reliably read, edit, run checks, use Git, delegate to local Agents, operate Campaigns, capture iOS evidence, and recover from failures without a permission switch hiding tools.
3
+ Controller MCP uses one stable default schema so ChatGPT can reliably read, edit, run checks, use Git, delegate to local Agents, coordinate durable Goal/Work, capture iOS evidence, and recover from failures without a permission switch hiding tools.
4
4
 
5
5
  ## Profiles
6
6
 
7
7
  | Toolset | CLI | Behavior |
8
8
  | --- | --- | --- |
9
- | **advanced** (default) | `--toolset advanced` | Stable repair-capable surface, capped at 128 tools. Includes the five `rh_*` facades plus high-value repository, Direct Edit, command, Git, Work/Job, Agent, Campaign, plugin, browser, iOS, artifact, and recovery tools. |
9
+ | **advanced** (default) | `--toolset advanced` | Stable repair-capable surface, capped at 128 tools. Includes the five `rh_*` facades plus high-value repository, Direct Edit, command, Git, Work/Job, Agent, Goal/Work, plugin, browser, iOS, artifact, and recovery tools. |
10
10
  | **core** | `--toolset core` | Compatibility label for the same stable default schema. It does not reduce capability or require reconnecting. |
11
11
  | **full** | `--toolset full` | Every historical legacy and runtime definition. Use only for old integrations or deep compatibility diagnosis because the much larger schema can reduce tool-selection quality. |
12
12
 
@@ -28,8 +28,8 @@ MCP `tools/list`, call validation, `/health`, `controller_ready`, `rh_status`, C
28
28
  The current implementation separates orchestration from capability without deleting product functions:
29
29
 
30
30
  1. **Workflow facade:** `rh_status`, `rh_access`, `rh_inbox`, `rh_context`, and `rh_work` are the preferred ChatGPT control-plane entry points.
31
- 2. **Typed atomic tools:** repository inspection, Direct Edit, command, Git, Work/Job, Issue/Task, Campaign, plugin, browser, iOS, artifact, and recovery handlers remain public because their schemas preserve operation-specific validation and evidence.
32
- 3. **Internal handlers and capability registry:** capabilities are grouped as `controller`, `repository-core`, `git`, `issue-task`, `campaign`, `browser`, `ios`, `plugin`, `evidence`, and `runtime-maintenance`. `rh_status`, `rh_context`, and `controller_capabilities` expose this metadata.
31
+ 2. **Typed atomic tools:** repository inspection, Direct Edit, command, Git, Work/Job, Issue/Task, Goal/Work, plugin, browser, iOS, artifact, and recovery handlers remain public because their schemas preserve operation-specific validation and evidence.
32
+ 3. **Internal handlers and capability registry:** capabilities are grouped as `controller`, `repository-core`, `git`, `issue-task`, `browser`, `ios`, `plugin`, `evidence`, and `runtime-maintenance`. `rh_status`, `rh_context`, and `controller_capabilities` expose this metadata.
33
33
 
34
34
  The MCP transport currently publishes a static stable schema. It does **not** support loading a domain schema only after ChatGPT selects that domain. Therefore capability grouping improves selection and documentation, but it must not be described as dynamic tool loading. A future transport-level implementation may reduce the discovered schema while retaining the same internal handlers.
35
35
 
@@ -44,7 +44,7 @@ Remote writes, destructive actions, outside-repository paths, and secret access
44
44
  ## Guidance
45
45
 
46
46
  - Prefer `rh_status`, `rh_access`, `rh_context`, `rh_work`, and `rh_inbox` for normal orchestration.
47
- - Use first-class Direct Edit, command, Git, `quick_agent_session`, Campaign, iOS, plugin, and artifact tools when the facade is not the shortest reliable path.
47
+ - Use first-class Direct Edit, command, Git, `quick_agent_session`, Goal/Work, iOS, plugin, and artifact tools when the facade is not the shortest reliable path.
48
48
  - Keep the stable surface unique and at or below 128 tools.
49
49
  - Add new public tools only when they unlock a real end-to-end workflow; otherwise route capabilities through an existing facade or plugin action.
50
50
 
@@ -1,62 +1,70 @@
1
1
  # Platform Support
2
2
 
3
- This document defines what the project currently supports. It is intentionally narrower than “the code contains Windows branches.” A platform is called supported only when the installation path, primary workflow, and release checks are covered.
3
+ This document defines the currently claimed Forge user experience. It distinguishes the **normal packaged setup path** from source/maintainer infrastructure so users are not required to install development-only dependencies.
4
4
 
5
5
  ## Support matrix
6
6
 
7
- | Platform | Status | Recommended use |
7
+ | Platform | Status | Normal user path |
8
8
  | --- | --- | --- |
9
- | macOS | Supported | Full local Controller, repository adoption, MCP, Direct Edit, agents, browser tooling, and release checks. |
10
- | Modern Linux | Supported | Full local Controller workflow. A system with Bash, Git, Node.js, and standard process tools is expected. |
11
- | WSL2 on Windows | Supported and recommended for Windows | Run the Linux workflow inside WSL2. Keep the repository inside the WSL filesystem for predictable permissions and performance. |
12
- | Native Windows | Preview | PowerShell installation, CLI loading, doctor, repository registration/inspection, and the portable runtime paths are supported. Shell-heavy workflow helpers remain limited. |
9
+ | macOS | Supported | Package install, controller-first setup, Package Runtime via launchd, repositories, local files, MCP, browser/desktop providers, and plugins. |
10
+ | Modern Linux | Supported | Package install, controller-first setup, Package Runtime via `systemd --user` when available, repositories, local files, MCP, and portable providers. |
11
+ | WSL2 on Windows | Supported and recommended for Windows | Run the Linux Forge Runtime inside WSL2; Windows can still host ChatGPT/browser clients. |
12
+ | Native Windows | Preview | Package install, setup, portable Runtime/MCP, repository registration/inspection, and portable capabilities. Automatic reboot-persistent Runtime ownership and every external provider combination are not yet claimed. |
13
13
 
14
- ## Required environment
14
+ ## Base installation requirements
15
15
 
16
- All installations require:
16
+ All normal installations require:
17
17
 
18
- - Git available on `PATH`;
19
- - Node.js 20.10 or newer, because the published `forge` launcher is a Node executable;
20
- - either npm, which ships with Node.js, or Bun 1.0 or newer as the package installer;
18
+ - Node.js 20.10 or newer;
19
+ - npm (bundled with Node.js) or Bun as package installer;
21
20
  - a writable user home directory.
22
21
 
23
- Bun is recommended for development and the full test suite, but it is not the only supported package installer.
22
+ **Git is optional until repository/software-work capabilities are enabled.** Bun is optional for ordinary package users. A Forge source checkout, CodeGraph, Codex, Claude, Standalone Recovery, Cloudflare, Tailscale, or OpenAI tunnel-client is not a base dependency.
24
23
 
25
- The following dependencies are optional and enable additional capabilities:
24
+ Capability-specific dependencies include:
26
25
 
27
- - Codex or Claude CLI for delegated implementation;
28
- - GitHub CLI (`gh`) for GitHub Issue, Project, and cloud-agent operations;
29
- - Tailscale Funnel or `cloudflared` for a stable public HTTPS `/mcp` endpoint;
30
- - Playwright browser dependencies for browser automation;
31
- - CodeGraph for additional repository navigation;
32
- - Google Workspace credentials for Gmail or Calendar plugins.
26
+ - Git for repository adoption, Git operations, worktrees, commits, and source development;
27
+ - Codex or Claude only when explicitly configured as an external controller/execution entry;
28
+ - GitHub CLI for GitHub workflows that require it;
29
+ - browser/OS provider prerequisites for browser or desktop automation;
30
+ - Google/Apple/service credentials for their respective plugins;
31
+ - one remote connection provider when a hosted controller must reach the loopback MCP endpoint.
33
32
 
34
- ## Native Windows scope
33
+ ## Runtime ownership by platform
34
+
35
+ Normal package users use:
36
+
37
+ ```bash
38
+ forge runtime service install-package
39
+ ```
35
40
 
36
- The native PowerShell path is release-tested for:
41
+ This path fingerprints the installed `@moretea-labs/forge` runtime surface and refuses to launch if that package content drifts from the recorded release identity.
37
42
 
38
- - prerequisite checks and CLI package installation;
39
- - `forge --version` and command loading;
40
- - `forge doctor`;
41
- - repository registry operations;
42
- - Windows path, process, junction, and command handling covered by the portable test suite;
43
- - the default MCP facade and bounded repository operations that do not depend on Bash helpers.
43
+ - **macOS:** launchd user service.
44
+ - **Linux / WSL2 with user systemd:** `systemd --user` service with restart-on-failure.
45
+ - **Linux without user systemd:** explicit portable detached-session fallback with a persistence warning.
46
+ - **Native Windows:** portable user-process mode is preview. Forge does not currently claim automatic reboot persistence there.
44
47
 
45
- The following are not yet claimed as complete native Windows workflows:
48
+ The source-oriented `forge runtime service install --repo ...` immutable-release command and Standalone Recovery remain advanced maintainer operations. They are not normal installation prerequisites.
46
49
 
47
- - Bash-owned repository migration and hook scripts;
48
- - the full source-release Bash gate;
49
- - automatic CodeGraph configuration;
50
- - every external agent CLI and tunnel combination.
50
+ ## Remote ChatGPT/MCP connection providers
51
51
 
52
- For those workflows, use WSL2. The native installer intentionally skips Bash skill synchronization and automatic CodeGraph setup instead of failing the whole installation.
52
+ Forge keeps its MCP listener on loopback. A remote controller chooses one of these explicit connection methods:
53
53
 
54
- ## WSL2 guidance
54
+ | Provider | Inbound public exposure | Typical use |
55
+ | --- | --- | --- |
56
+ | OpenAI Secure MCP Tunnel | No | Preferred for ChatGPT/OpenAI-hosted clients when the organization has tunnel permission. Uses official `tunnel-client`; Forge stores only the non-secret tunnel ID. |
57
+ | Cloudflare Tunnel | Yes / internet-reachable HTTPS | Stable named HTTPS endpoint when the user manages Cloudflare account/domain. |
58
+ | Tailscale Funnel | Yes / internet-reachable HTTPS | Convenient when the user already operates a compatible Tailscale setup. |
59
+ | Existing HTTPS `/mcp` | Depends on user infrastructure | Reverse proxy or tunnel already owned by the user. |
60
+ | None | No | Local controller only, or remote connectivity configured later. |
61
+
62
+ Setup detects the OS and available provider CLI. It does not assume Homebrew or macOS. Third-party authentication remains explicit and is never completed with credentials pasted into Forge setup.
55
63
 
56
- Install Git, Node.js, and optionally Bun inside WSL2, then clone repositories under the Linux home directory, for example `~/src/project`. Avoid running one checkout alternately from Windows and WSL because file modes, symlinks, line endings, and runtime paths can diverge.
64
+ ## Native Windows scope
57
65
 
58
- The Windows host can still provide the browser and ChatGPT client. The Controller and MCP process run inside WSL2; expose only the MCP endpoint through a controlled HTTPS tunnel.
66
+ The native PowerShell path is release-tested for installer/CLI loading, doctor, setup/profile persistence, repository registry operations, Windows path/process behavior, and portable Node tests. Shell-heavy repository migration, every browser/provider integration, and persistent Windows service ownership remain outside the full-support claim; use WSL2 when those workflows are required.
59
67
 
60
68
  ## Verification boundary
61
69
 
62
- The repository contains a `windows-latest` smoke workflow covering the PowerShell dry run, installer contracts, native-Windows policy behavior, and portable Node tests. That smoke workflow is evidence for the bounded native scope above; it is not evidence that every Bash- or provider-dependent integration works natively.
70
+ The repository has platform/public-doc checks and a Windows smoke workflow. A platform claim means its named path is tested; it does not imply that every optional third-party provider is installed or available on every machine.