@ckanner/flywheel 0.31.0 → 0.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/CHANGELOG.md +48 -5
  2. package/CONTRIBUTING.md +19 -0
  3. package/LICENSE +21 -0
  4. package/README.en.md +4 -171
  5. package/README.md +152 -269
  6. package/README.zh-CN.md +116 -0
  7. package/bin/flywheel-claude-code-pro-worker.js +1 -1
  8. package/bin/flywheel-codex-pro-worker.js +1 -1
  9. package/bin/flywheel-dsh-worker.js +1 -1
  10. package/bin/flywheel.js +1 -1
  11. package/bin/runtime.js +1 -1
  12. package/docs/README.md +84 -0
  13. package/docs/README.zh-CN.md +64 -0
  14. package/docs/archive/README.md +13 -0
  15. package/docs/archive/codex-pro-adapter-handoff.md +197 -0
  16. package/docs/archive/design-v0.24.md +540 -0
  17. package/docs/design.md +681 -0
  18. package/docs/en/claude-code-pro.md +25 -16
  19. package/docs/en/configuration.md +306 -141
  20. package/docs/en/contributing.md +303 -0
  21. package/docs/en/flow-console.md +67 -13
  22. package/docs/en/getting-started.md +232 -126
  23. package/docs/en/investigation.md +219 -0
  24. package/docs/en/jev-shadow.md +67 -0
  25. package/docs/en/model-policy.md +147 -62
  26. package/docs/en/releasing.md +207 -0
  27. package/docs/en/session-evaluation.md +4 -2
  28. package/docs/en/session-recovery.md +49 -6
  29. package/docs/en/workflow.md +222 -114
  30. package/docs/evaluation/README.md +12 -0
  31. package/docs/evaluation/jev-historical-provisional.json +138 -0
  32. package/docs/evaluation/jev-historical-result-2026-11-10.json +174 -0
  33. package/docs/plans/2026-11-01-dsh-integration.md +67 -0
  34. package/docs/plans/2026-11-01-model-profiles-preflight.md +29 -0
  35. package/docs/plans/2026-11-01-npm-installation.md +19 -0
  36. package/docs/plans/2026-11-03-codex-pro-default.md +28 -0
  37. package/docs/plans/2026-11-06-adaptive-workflow.md +365 -0
  38. package/docs/plans/2026-11-07-session-lifecycle.en.md +424 -0
  39. package/docs/plans/2026-11-07-session-lifecycle.md +337 -0
  40. package/docs/plans/2026-11-08-flow-console.md +271 -0
  41. package/docs/plans/2026-11-10-jev-shadow.md +32 -0
  42. package/docs/plans/2026-11-10-task-discovery.md +17 -0
  43. package/docs/plans/2026-11-10-workbench-redesign.md +19 -0
  44. package/docs/plans/2026-11-12-feedback-driven-workflows.md +739 -0
  45. package/docs/plans/README.md +22 -0
  46. package/docs/reviews/2026-08-24-v0.18-review-fixplan.md +265 -0
  47. package/docs/reviews/2026-09-12-pr4-pr5-review.md +70 -0
  48. package/docs/reviews/README.md +12 -0
  49. package/docs/validation/2026-11-01-npm-installation.md +105 -0
  50. package/docs/validation/2026-11-01-profiles-preflight.md +67 -0
  51. package/docs/validation/2026-11-01-results.md +114 -0
  52. package/docs/validation/2026-11-03-codex-pro-default.md +90 -0
  53. package/docs/validation/2026-11-04-dsh-native-view.md +85 -0
  54. package/docs/validation/2026-11-04-release-0.28.1.md +33 -0
  55. package/docs/validation/2026-11-04-release-0.28.2.md +35 -0
  56. package/docs/validation/2026-11-05-dsh-0.2.2-compatibility.md +26 -0
  57. package/docs/validation/2026-11-05-registry-smoke-recovery.md +26 -0
  58. package/docs/validation/2026-11-05-release-0.28.3.md +32 -0
  59. package/docs/validation/2026-11-05-subscription-model-access.md +60 -0
  60. package/docs/validation/2026-11-05-view-order.md +14 -0
  61. package/docs/validation/2026-11-07-adaptive-workflow.md +79 -0
  62. package/docs/validation/2026-11-07-claude-code-pro.md +144 -0
  63. package/docs/validation/2026-11-07-session-lifecycle.md +136 -0
  64. package/docs/validation/2026-11-08-session-p3-p4.md +99 -0
  65. package/docs/validation/2026-11-09-flow-console.md +81 -0
  66. package/docs/validation/2026-11-10-jev-shadow.md +50 -0
  67. package/docs/validation/2026-11-10-task-discovery.md +45 -0
  68. package/docs/validation/2026-11-10-workbench-redesign.md +54 -0
  69. package/docs/validation/2026-11-11-release-0.30.2.md +65 -0
  70. package/docs/validation/2026-11-11-release-0.31.0.md +46 -0
  71. package/docs/validation/2026-11-12-dsh-0.2.2-rc.2.md +58 -0
  72. package/docs/validation/2026-11-12-feedback-driven-workflows.md +187 -0
  73. package/docs/validation/README.md +41 -0
  74. package/docs/validation/evidence/2026-11-08-session-p3-p4.json +5430 -0
  75. package/docs/validation/evidence/claude-node-bridges.txt +118 -0
  76. package/docs/validation/evidence/claude-npm-build.txt +15 -0
  77. package/docs/validation/evidence/claude-npm-candidate.json +54 -0
  78. package/docs/validation/evidence/claude-npm-install.txt +21 -0
  79. package/docs/validation/evidence/claude-npm-tests.txt +145 -0
  80. package/docs/validation/evidence/claude-plugin-tests.txt +205 -0
  81. package/docs/validation/evidence/claude-quality-gate.txt +29 -0
  82. package/docs/validation/evidence/claude-race.txt +7 -0
  83. package/docs/validation/evidence/codex-pro-070-probes.txt +4 -0
  84. package/docs/validation/evidence/dsh-bridge.txt +4 -0
  85. package/docs/validation/evidence/dsh-native-view-bridge-tests.txt +1 -0
  86. package/docs/validation/evidence/dsh-native-view-build.txt +15 -0
  87. package/docs/validation/evidence/dsh-native-view-candidate.json +54 -0
  88. package/docs/validation/evidence/dsh-native-view-inspect.txt +27 -0
  89. package/docs/validation/evidence/dsh-native-view-install-tests.txt +19 -0
  90. package/docs/validation/evidence/dsh-native-view-npm-tests.txt +143 -0
  91. package/docs/validation/evidence/dsh-native-view-plugin-tests.txt +99 -0
  92. package/docs/validation/evidence/dsh-native-view-quality-gate.txt +29 -0
  93. package/docs/validation/evidence/dsh-plugin-tests.txt +48 -0
  94. package/docs/validation/evidence/function-coverage.txt +378 -0
  95. package/docs/validation/evidence/npm-build.txt +13 -0
  96. package/docs/validation/evidence/npm-contract-tests.txt +65 -0
  97. package/docs/validation/evidence/npm-dsh-bridge.txt +18 -0
  98. package/docs/validation/evidence/npm-dsh-plugin-tests.txt +62 -0
  99. package/docs/validation/evidence/npm-function-coverage.txt +420 -0
  100. package/docs/validation/evidence/npm-install-tests.txt +20 -0
  101. package/docs/validation/evidence/npm-quality-gate.txt +29 -0
  102. package/docs/validation/evidence/npm-race.txt +7 -0
  103. package/docs/validation/evidence/pr-dsh-bridge.txt +4 -0
  104. package/docs/validation/evidence/pr-dsh-plugin-tests.txt +48 -0
  105. package/docs/validation/evidence/pr-function-coverage.txt +379 -0
  106. package/docs/validation/evidence/pr-quality-gate.txt +28 -0
  107. package/docs/validation/evidence/pr-race.txt +6 -0
  108. package/docs/validation/evidence/profiles-control-smoke.json +1 -0
  109. package/docs/validation/evidence/profiles-dsh-bridge.txt +18 -0
  110. package/docs/validation/evidence/profiles-dsh-plugin-tests.txt +59 -0
  111. package/docs/validation/evidence/profiles-function-coverage.txt +411 -0
  112. package/docs/validation/evidence/profiles-quality-gate.txt +29 -0
  113. package/docs/validation/evidence/profiles-race.txt +7 -0
  114. package/docs/validation/evidence/quality-gate.txt +28 -0
  115. package/docs/validation/evidence/race.txt +6 -0
  116. package/docs/validation/evidence/watchdog-startup-after.txt +2 -0
  117. package/docs/validation/evidence/watchdog-startup-before.txt +6 -0
  118. package/docs/validation/evidence/watchdog-startup-quality-gate.txt +29 -0
  119. package/docs/validation/evidence/watchdog-startup-race.txt +7 -0
  120. package/docs/{claude-code-pro.md → zh-CN/claude-code-pro.md} +23 -17
  121. package/docs/{configuration.md → zh-CN/configuration.md} +323 -139
  122. package/docs/zh-CN/contributing.md +240 -0
  123. package/docs/{flow-console.md → zh-CN/flow-console.md} +55 -12
  124. package/docs/zh-CN/getting-started.md +352 -0
  125. package/docs/zh-CN/investigation.md +182 -0
  126. package/docs/zh-CN/jev-shadow.md +79 -0
  127. package/docs/zh-CN/model-policy.md +123 -0
  128. package/docs/zh-CN/releasing.md +120 -0
  129. package/docs/{session-evaluation.md → zh-CN/session-evaluation.md} +4 -2
  130. package/docs/{session-recovery.md → zh-CN/session-recovery.md} +46 -12
  131. package/docs/zh-CN/workflow.md +270 -0
  132. package/npm/install.js +1 -1
  133. package/package.json +12 -25
  134. package/docs/getting-started.md +0 -418
  135. package/docs/model-policy.md +0 -65
  136. package/docs/workflow.md +0 -314
@@ -1,67 +1,89 @@
1
- # Install and run your first Flywheel task
1
+ # Getting started
2
2
 
3
- [English README](../../README.en.md) · [中文](../getting-started.md) · [Workflow](workflow.md) · [Configuration](configuration.md)
3
+ [Documentation](../README.md) · English · [简体中文](../zh-CN/getting-started.md)
4
4
 
5
- This guide covers **Flywheel 0.28.5**: npm installation, the DSH desktop and workers, configuration, preflight, a small task, and recovery. The checked desktop interfaces are **DSH Mac 0.2.1-rc.5 and 0.2.2-rc.1**, both declared from Flywheel 0.28.4. DSH 0.2.2 itself requires Node 24.9 or later; use its official desktop-supplied CLI. Real desktop UI, macOS permissions, authentication, and model inference still need testing on the intended machine.
5
+ Install Flywheel, connect the backends you intend to use, then run a small task.
6
+ This guide follows the current repository. Check the installed version and the npm
7
+ version you choose; a merged change does not update an existing installation.
8
+ Keep the CLI, platform packages, and DSH plugin at one version.
6
9
 
7
- Before installing, check `npm view @ckanner/flywheel version`. Continue with these instructions once the registry has the version you intend to use. A merged source change or GitHub Release does not establish npm publication, and an older installed release may not include these interfaces.
8
-
9
- **Adaptive workflow in current source:** `/flywheel-task`, `control launch`, Auto/Quick/Full, and automatic DSH task association require a CLI, plugin, and skills containing this implementation. Check `flywheel control launch --help`; the earlier 0.28.5 version label alone does not establish that these additions are installed.
10
-
11
- The top-level **Flywheel conversation view** below is available from `0.28.1`. Version `0.28.0` uses the composer popup; upgrade the CLI and desktop plugin to the same new version. Merging source or reloading the old version does not change that layout. CLI and task-directory interfaces remain the same.
12
-
13
- Subscription preset migration and `permissions.mode` are available from **0.28.2**. Upgrades preserve existing configuration; preview `flywheel config migrate --preset subscriptions`, review the model bindings and full-access policy, then explicitly apply it with `--apply` and a backup.
14
-
15
- **Ordering from 0.28.5:** the external Flywheel conversation view follows the built-in Statistics view. DSH still owns view selection and overflow navigation.
16
-
17
- **Fixes in 0.28.3:** the `deepseek-account` default and the current session directory when the project path is omitted. Version 0.28.2 still uses `deepseek-official` and the original directory. Check the registry version before installing. Upgrades preserve configuration; adopting the account preset requires explicit migration.
18
-
19
- **Optional Claude backend:** the default installation does not require Claude. Selecting `claude-code-pro` requires the companion 0.4.0 plugin in the worker's dependency tree and an installed/authenticated Claude CLI. See [Claude Code Pro](claude-code-pro.md) for configuration and source-candidate boundaries.
20
-
21
- The reviewed Codex Pro 0.9.0 source package is bundled with this Flywheel candidate; installation does not assume an unpublished registry version exists. See [provenance](../../plugins/dsh/vendor/README.md), [recovery](session-recovery.md), and [paired evaluation](session-evaluation.md).
10
+ For the complete path through task branches and PR review, see [Workflow](workflow.md).
22
11
 
23
12
  ## 1. Prepare the environment
24
13
 
25
- | Requirement | Why it is needed |
14
+ | Requirement | Purpose |
26
15
  |---|---|
27
- | Git with your commit identity | Worktrees and local delivery commits |
16
+ | Git with a configured commit identity | Worktrees and local delivery commits |
28
17
  | Node.js 22.18.0 or later and npm | Installer, launchers, and JavaScript workers |
29
18
  | DSH Mac and its desktop-supplied `dsh` command | Desktop plugin management and DSH SDK execution |
30
- | Authenticated Kimi CLI | Default Plan, frontend execution, and optional Garden |
31
- | Codex executable and existing login | The hard route's Codex Pro plugin runs Codex app-server |
19
+ | Authenticated Kimi CLI | Default Full Plan, frontend execution, and optional Garden |
20
+ | Codex executable and existing login | The hard execution route uses Codex Pro and Codex app-server |
32
21
  | DeepSeek and ChatGPT providers in the DSH SDK profile | Default execution, independent Review, and Judge |
33
- | Go 1.27 or later | Only the Go example below and source builds; not npm binary installation |
22
+ | Go 1.27 or later | Only the disposable Go example and source builds; not npm binary installation |
23
+
24
+ The plugin declares DSH `0.2.1-rc.5`, `0.2.2-rc.1` and `0.2.2-rc.2` compatibility. DSH 0.2.2 has
25
+ its own Node 24.9 minimum; use the official desktop-supplied CLI. Check actual command
26
+ locations and versions before setup:
27
+
28
+ ```sh
29
+ git --version
30
+ node --version
31
+ npm --version
32
+ command -v dsh
33
+ dsh --version
34
+ kimi --version
35
+ codex --version
36
+ ```
34
37
 
35
- Check command locations and versions with `git --version`, `node --version`, `npm --version`, `command -v dsh`, `dsh --version`, `kimi --version`, and `codex --version`. Check the desktop version in About as well. Use the respective tools' documented installation and login flows.
38
+ Use each backend's normal installation and login flow. Flywheel does not sign in,
39
+ copy credentials, or replace the desktop application. Full needs its configured
40
+ Plan/Execute/Review/Judge backends. A qualified Quick task needs its actual execution
41
+ route and independent final Review; an upgrade to Full requires the additional stages.
42
+ Unused execution routes do not become task runtime requirements.
36
43
 
37
- The defaults reuse the Kimi subscription, ChatGPT subscription, and existing signed-in, funded DeepSeek account. DeepSeek API access is an explicitly configured alternative. Flywheel does not log in, copy credentials, or replace the desktop application. Full needs its configured Plan, Execute, Review, and Judge backends. A qualified Quick task needs its actual execution route and independent Review; Plan and Judge are recorded as inapplicable. Unused execution routes do not become runtime requirements.
44
+ Claude is optional. Selecting `claude-code-pro` additionally requires the matching
45
+ 0.4.0 companion package in the worker's dependency tree and an installed,
46
+ authenticated Claude CLI. See [Claude Code Pro](claude-code-pro.md).
38
47
 
39
48
  ## 2. Install
40
49
 
41
50
  From a terminal that can find the desktop's `dsh` command:
42
51
 
43
52
  ```sh
53
+ npm view @ckanner/flywheel version
44
54
  npx -y @ckanner/flywheel@latest install
55
+ flywheel version
45
56
  ```
46
57
 
47
- For an agent consuming a single JSON result, use the same command with `--json`. The installer installs its exact version globally, resolves the platform binary and workers, installs that version's bundled skills (eleven in current source), creates global configuration only if absent, records a GUI launcher, registers the matching DSH plugin, and runs local diagnostics.
58
+ Use a published exact version in place of `@latest` when pinning an installation.
59
+ Add `--json` to the install command when an agent needs one structured result.
60
+ The installer:
61
+
62
+ 1. Installs its exact version globally and resolves the matching platform binary and workers.
63
+ 2. Installs the bundled skills and creates global configuration only when absent.
64
+ 3. Records an absolute GUI launcher and the installation-time tool paths.
65
+ 4. Registers the same Flywheel plugin version with the selected DSH profile.
66
+ 5. Runs local diagnostics and reports completed steps and blockers.
48
67
 
49
- `ok:true` means the installation steps completed. `ready:true` means that local doctor found no blocker. For example, missing Kimi can produce `ok:true, ready:false` with the reason in `diagnostic.checks`. Neither result proves real authentication or inference. A failed step retains its partial results so the actual cause can be corrected before retrying.
68
+ `ok:true` means installation completed; `ready:true` means that local diagnostics
69
+ found no blocker. Missing tools can produce `ok:true, ready:false`; inspect
70
+ `diagnostic.checks`. Neither value proves account access or real model inference.
71
+ An installation failure preserves partial results for diagnosis and retry.
50
72
 
51
- ### Useful options
73
+ ### Installation options
52
74
 
53
75
  | Option | Effect |
54
76
  |---|---|
55
77
  | `--prefix PATH` | Choose the npm global prefix |
56
- | `--project PATH` | Install skills into an existing project's `.agents/skills` and diagnose that project; CLI installation remains global |
57
- | `--dsh-bin PATH` | Use the verified desktop DSH command at an explicit path |
58
- | `--profile NAME` | Desktop plugin target profile, default `desktop`; unrelated to the worker's SDK profile |
78
+ | `--project PATH` | Install project skills in `.agents/skills` and diagnose that existing project; CLI installation remains global |
79
+ | `--dsh-bin PATH` | Select the verified desktop DSH command |
80
+ | `--profile NAME` | Desktop plugin target profile, default `desktop`; separate from the worker's SDK profile |
59
81
  | `--no-dsh` | Skip desktop plugin registration |
60
- | `--no-global` | Set up the current persistent installation without another global install |
61
- | `--timeout-ms N` | External install-step timeout; default 600000 ms, range 100–1800000 |
82
+ | `--no-global` | Set up an existing persistent installation without another global install |
83
+ | `--timeout-ms N` | Per-step timeout, default 600000 ms, range 100–1800000 |
62
84
  | `--json` | Emit one structured installation result |
63
85
 
64
- For a user-owned global prefix:
86
+ For a user-owned prefix:
65
87
 
66
88
  ```sh
67
89
  npx -y @ckanner/flywheel@latest install --prefix "$HOME/.local"
@@ -69,53 +91,70 @@ export PATH="$HOME/.local/bin:$PATH"
69
91
  flywheel version
70
92
  ```
71
93
 
72
- Add the actual prefix's `bin` directory to your shell configuration for later terminals. Supply `--dsh-bin /absolute/path/to/dsh` if necessary. Do not guess an executable path inside a macOS app bundle.
94
+ Keep the actual prefix's `bin` in your shell configuration. If needed, pass
95
+ `--dsh-bin /absolute/path/to/dsh`; verify that path rather than guessing an app-bundle
96
+ location. Plain `npm install --global @ckanner/flywheel` only places files. Complete
97
+ setup explicitly afterward with `flywheel setup --no-global`. Do not use
98
+ `--no-global` to make a temporary npx cache the permanent GUI entry.
73
99
 
74
- Plain `npm install --global @ckanner/flywheel` only places package files. Complete user setup explicitly afterward:
100
+ ## 3. Connect desktop and SDK backends
75
101
 
76
- ```sh
77
- flywheel setup --no-global
78
- ```
102
+ Reload the desktop as directed by DSH, open an existing conversation, and select
103
+ **Flywheel** beside the built-in views. It follows Statistics; check the overflow
104
+ menu if necessary. The blank new-session landing page does not show conversation
105
+ views. The console provides a canvas, configuration, and run history while DSH keeps
106
+ its conversation, trajectory, composer, and sidebar.
79
107
 
80
- `install` and `setup` share options. Do not use `--no-global` to turn a temporary npx cache into the permanent GUI entry.
108
+ Desktop plugin registration uses the desktop-supplied command and the `desktop`
109
+ profile by default. An independent npm DSH CLI cannot manage that reserved profile.
110
+ The worker normally runs in a separate **`sdk` profile** and does not inherit the
111
+ conversation's selected model or every desktop plugin.
81
112
 
82
- ## 3. Distinguish desktop and SDK setup
113
+ ### Account selection
83
114
 
84
- The installer uses the official desktop plugin interface with exact version selection:
115
+ The default DeepSeek route explicitly selects `deepseek-account` / `deepseek-flash`.
116
+ The standard SDK `base` profile includes the account adapter. With the same
117
+ `DSH_HOME`, standard desktop and SDK setups share the existing account credential
118
+ store. Custom homes, profiles, or credential stores need separate checking.
119
+ `deepseek-official` is an explicitly configured API-key alternative, with no automatic
120
+ paid fallback from the account preset.
85
121
 
86
- ```text
87
- dsh plugin --profile desktop add --save-exact --ignore-scripts @ckanner/dsh-plugin-flywheel@<installed-version>
88
- ```
89
-
90
- This is the command shape used internally, not a placeholder to paste literally. An independent npm DSH CLI cannot manage the reserved `desktop` profile. Reload according to the host's instructions and select **Flywheel** in the native view bar alongside Chat and Trajectory. Check that bar's More menu if the entry is not directly visible.
91
-
92
- This view controls and observes an already prepared task: progress, intervention, effective models, environment checks, and explicit start/refresh/stop. DSH keeps its chat, trajectory, composer, model selector, and right sidebar. Discuss requirements and prepare contracts through the original chat and skills. A launch or start through the DSH tools associates the exact task with that conversation. The view does not scan for tasks started elsewhere; select the same task directory to observe one.
93
-
94
- The worker defaults to a separate **`sdk` profile**. The standard SDK layers on `base`, which already includes DeepSeek's account and API adapters. Current source explicitly selects `provider: "deepseek-account"` and `model: "deepseek-flash"` to reuse the signed-in, funded account. `deepseek-official` is only for an explicitly chosen API-key configuration; there is no automatic paid-channel fallback.
95
-
96
- With the same `DSH_HOME`, the standard desktop and SDK can share the existing login in the default `<DSH_HOME>/.credentials.yaml`, independently of the profile. No token copying or switch to the `desktop` profile is needed. Check custom home, profile, or credential-store choices separately. The SDK does not inherit the desktop's selected conversation model; Flywheel uses its own effective bindings, visible through `config inspect` or the view's model-configuration action. Native GPT routing needs the ChatGPT adapter in the SDK profile. The checked adapter baseline can be installed with:
122
+ Native GPT Review/Judge need the ChatGPT adapter in the SDK profile. The repository's
123
+ checked adapter baseline can be installed with:
97
124
 
98
125
  ```sh
99
126
  dsh plugin --profile sdk add dsh-plugin-chatgpt@0.1.17
100
127
  ```
101
128
 
102
- That is a checked compatibility version, not a claim about the latest adapter. Follow its authorization documentation for the chosen profile and keep `DSH_HOME` consistent. Do not copy tokens into task files or Git.
129
+ This is a compatibility baseline, not a latest-version claim. Follow that adapter's
130
+ normal authorization flow; keep `DSH_HOME` consistent and credentials out of task
131
+ files and Git.
103
132
 
104
- The SDK worker's temporary permission and tool policy applies only to its child process. It does not edit the desktop profile or remove desktop capabilities. Worker-owned delegation, auxiliary model compaction, and currently the entire web tool are disabled. A native view does not make the worker inherit desktop plugins or merge its history. See the [plugin's lifecycle boundaries](https://github.com/ckanner/flywheel/blob/main/plugins/dsh/README.en.md#permissions-and-lifecycle-boundaries) for the capability limits and separate work needed to restore retrieval safely.
133
+ The hard route directly imports the pinned Codex Pro 0.9.0 public machine API.
134
+ It needs the local Codex command/login, not a parent model delegating through the
135
+ `subagent_codex_pro` tool. Optional Claude has its own dependency and login.
105
136
 
106
- The hard route uses the installed `dsh-subagent-codex-pro@0.9.0` dependency's public machine API directly. It does not use `subagent_codex_pro` as a native LLM provider or require a parent model to delegate. Its underlying Codex app-server still needs the local Codex command and login.
137
+ The DSH worker's child-only policy disables delegation, auxiliary model compaction,
138
+ and the current web tool. A native conversation view does not restore those worker
139
+ capabilities or merge full worker histories into the parent trajectory. See the
140
+ [plugin documentation](https://github.com/ckanner/flywheel/blob/main/plugins/dsh/README.md) for lifecycle and capability boundaries.
107
141
 
108
142
  ### Desktop launcher
109
143
 
110
- Setup creates `~/.config/flywheel/npm-launcher` and an installation record with absolute Node/CLI paths, the checked DSH entry, and the installation-time tool PATH. The desktop plugin verifies the managed launcher before using it. A user-specified `flywheelBinary` takes precedence. Missing records can use the legacy PATH lookup; damaged records or modified managed launchers fail visibly.
144
+ Setup writes `~/.config/flywheel/npm-launcher` and an installation record containing
145
+ absolute Node/CLI paths and the checked DSH entry. An explicit `flywheelBinary`
146
+ overrides the managed launcher. Missing records can use legacy PATH lookup;
147
+ invalid records or modified launchers fail visibly.
111
148
 
112
- After moving Node or the npm prefix, or installing previously missing tools, run `flywheel setup --no-global` in a terminal where all required tools are available, preserving your original options. Save custom launcher changes before resolving a conflict. A shell export alone does not update an already running desktop process; recheck from the panel.
149
+ After moving Node/the npm prefix or installing missing tools, rerun
150
+ `flywheel setup --no-global` from a terminal that can find them, preserving original
151
+ options. Save custom launcher changes before resolving a conflict. A terminal export
152
+ does not update an already running desktop process.
113
153
 
114
154
  ## 4. Select configuration and skills
115
155
 
116
- If the view still shows Z.AI/GLM or Kimi K3, inspect its configuration source: upgrades preserve that file. A version containing this change can back up and migrate it with `flywheel config migrate --preset subscriptions --cwd /repo --apply --json`; omit `--apply` to preview, and add `--task-dir` for task overrides. This selects ChatGPT/Kimi Code/DeepSeek Flash, the agreed efforts, and full access for every stage. See [migration and permissions](configuration.md#apply-the-subscription-preset-to-existing-configuration). Published 0.28.1 does not contain this command.
117
-
118
- Configuration precedence is task directory, project root, global file, then embedded defaults. The first complete file wins; files do not merge. Existing configuration is preserved during upgrades. Inspect the actual source:
156
+ Configuration discovery selects the first complete file in this order: task,
157
+ project, global, embedded defaults. Files do not merge. Inspect the selected source:
119
158
 
120
159
  ```sh
121
160
  flywheel config inspect --cwd /absolute/path/to/repo --json
@@ -123,9 +162,23 @@ flywheel template flywheel.config.example.json
123
162
  flywheel template flywheel.profiles.example.json
124
163
  ```
125
164
 
126
- Use either complete template as a starting point and review it before writing a configuration file. The [configuration guide](configuration.md) covers safe export, fields, profile overrides, channel identity, and migration to `codex-pro`. `loops.plan` controls Full engine planning; the host's selected conversation model controls initial preparation through `flywheel-task` or `flywheel-new`.
165
+ Upgrades preserve existing configuration, including old model, permission, history,
166
+ and scheduling choices. To adopt the subscription model preset, preview first and
167
+ then apply if it matches the intended accounts and full-access policy:
127
168
 
128
- Current source includes eleven skills. Skills are optional host entry points; the desktop panel and CLI also work independently. To inspect or install them for an existing project:
169
+ ```sh
170
+ flywheel config migrate --preset subscriptions --cwd /absolute/path/to/repo --json
171
+ flywheel config migrate --preset subscriptions --cwd /absolute/path/to/repo --apply --json
172
+ ```
173
+
174
+ Add `--task-dir` for a task-level override. Migration backs up the selected file and
175
+ preserves unrelated settings. It does not automatically opt an old configuration
176
+ into scoped history or parallel scheduling. To adopt a full installed template, use
177
+ the console's global/project configuration editor, load defaults, review, and save.
178
+ [Configuration](configuration.md) explains precedence, permissions, and migration.
179
+
180
+ The current source bundles eleven skills. They are optional host entry points; the
181
+ CLI and console work independently. Inspect or install project skills with:
129
182
 
130
183
  ```sh
131
184
  flywheel skills list
@@ -133,9 +186,10 @@ flywheel skills read flywheel-task
133
186
  flywheel install-skills --project /absolute/path/to/repo --json
134
187
  ```
135
188
 
136
- Follow the host's skill-discovery rules. Copying files does not prove the host loaded them. Installer-owned unchanged snapshots can update; modified files, unowned directories, and invalid manifests are preserved and reported as conflicts.
137
-
138
- In DSH Chat, use `/flywheel-task <goal>` for research, preparation, and validated launch; Auto is the default. Use `/flywheel-new` for a proposal without launching, `/flywheel-run` for an existing task, and `/flywheel-status` for its state. Kimi uses `/skill:flywheel-task` and corresponding prefixed names. **No initial Flywheel-view form is required.** The view is an alternative way to open an already prepared task. See the [copyable workflow](workflow.md#0-normal-entry-describe-a-goal-and-launch).
189
+ Follow the host's discovery rules. Installer-owned unchanged snapshots can update;
190
+ modified or unowned files are preserved and reported as conflicts. In DSH, use
191
+ `/flywheel-task <goal>` to prepare and launch, `/flywheel-new <goal>` for a proposal,
192
+ and `/flywheel-run <task-path>` for an existing task. Kimi uses the `/skill:` prefix.
139
193
 
140
194
  ## 5. Run preflight without inference
141
195
 
@@ -146,39 +200,57 @@ flywheel doctor --cwd "$PWD" --json
146
200
  flywheel doctor --cwd "$PWD" --probe --json
147
201
  ```
148
202
 
149
- Local checks cover configuration, directories, command availability/version, and declared environment variables. `--probe` also initializes DSH SDK sessions, checks accepted configuration, working directory, permissions, and shutdown. It sends no inference prompt and runs no acceptance command. Provider initialization may query a model catalog and create SDK-owned cache/session files.
150
-
151
- Codex Pro additionally verifies that the exact public machine API can be imported and that Node/Codex commands are available. It does not run a model task, prove account entitlement, or pre-check the complete policy. Its full-policy limitation remains a warning; model/effort/authorization remain unknown.
203
+ Local checks cover configuration, directories, commands/versions, and declared
204
+ environment variables. `--probe` initializes DSH SDK sessions and checks accepted
205
+ configuration, directories, permissions, and shutdown. It sends no inference prompt
206
+ and runs no acceptance command. Provider initialization may query catalogs or write
207
+ caches; probe sessions use temporary persistence rather than the user session list.
152
208
 
153
- Results use `pass`, `fail`, `warn`, `unknown`, and `skipped`. A fail produces exit code 1. A successful aggregate result only covers the checks performed. No preflight creates Flywheel state, worktrees, or global configuration. Check again in the desktop panel because GUI environment and profile selection may differ.
209
+ Codex Pro diagnostics import the pinned API and check its lifecycle/recovery exports
210
+ and local commands. They do not prove model entitlement, a particular saved thread's
211
+ recovery, or effective reasoning effort. Runtime Codex calls separately validate the
212
+ full policy at `thread-ready` before Go acknowledges dispatch. This does not turn a
213
+ no-inference diagnostic into real account validation.
154
214
 
155
- After contracts exist, narrow the checks to the selected task:
215
+ Results are `pass`, `fail`, `warn`, `unknown`, or `skipped`; a fail gives exit code 1.
216
+ A task-specific preflight checks the Spec or persisted policy and only applicable
217
+ bindings. It does not apply a later runtime `--mode` override:
156
218
 
157
219
  ```sh
158
220
  flywheel doctor --cwd "$PWD" --task-dir "$PWD/docs/my-feature" --probe --json
159
221
  ```
160
222
 
161
- Task preflight uses a fresh Spec's qualification or the saved workflow policy. For qualified Quick it skips Plan, Judge, and the Judge panel; legacy tasks remain Full. It does not consume a later launch/run `--mode` override. A malformed saved policy blocks probes rather than being silently reclassified. Configuration inspection still lists all configured bindings.
162
-
163
- A task without packets can be inspected during preparation, but a real launch still needs at least one legal packet within the authorized scope. Fix schema, directory, provider, or permission failures at their source.
164
-
165
- The view's optional configuration and troubleshooting section offers “Inspect model configuration,” “Check installation and configuration,” and “Check DSH integration.” Use these for setup, configuration changes, or troubleshooting; they are not buttons that must be pressed for every task. Neither diagnostic performs model inference.
223
+ No preflight creates Flywheel state or worktrees. Recheck from the desktop if its
224
+ PATH/profile/environment differs. Diagnostics are useful after setup or changes;
225
+ they are not a mandatory sequence of buttons for every task.
166
226
 
167
227
  ## 6. Prepare a task
168
228
 
169
229
  ### Existing repository
170
230
 
171
- The normal DSH entry is `/flywheel-task` followed by the actual requirement. The assistant researches the repository, creates or deliberately reuses a task integration branch and independent worktree, prepares compact contracts and real verification evidence, then launches within the existing authorization. Auto chooses Quick only when the contracts qualify; uncertain or complex tasks use Full. The [workflow guide](workflow.md) gives the branch commands, model bindings, delivery boundaries, and working directory for each stage.
231
+ In DSH Chat:
172
232
 
173
- Use `/flywheel-new` when you want to review a proposal before execution. Both preparation entries report two actual absolute paths: the **project directory** is the code worktree; the **task files directory** is its `docs/<slug>` holding this task's contracts and later state/reports. You do not need to invent an empty directory or fill in the UI first. Keep both paths for observation and recovery.
233
+ ```text
234
+ /flywheel-task Fix the identified issue, add regression coverage, and verify the result. mode=auto
235
+ ```
174
236
 
175
- Use the bundled templates to prepare a real Spec and packets with actual acceptance commands, protected oracles, and recorded dry-run results. Persist authorized contracts before starting so packet worktrees can read them from Git. Preparation and loop scheduling are separate: skills never write `state.json` or orchestrate stage retries themselves.
237
+ The assistant researches the repository, chooses or reuses the task integration
238
+ directory under the effective worktree policy, prepares contracts and baseline
239
+ evidence, then launches within the authorized scope. Use `/flywheel-new` to stop at
240
+ preparation. No initial console form is required.
176
241
 
177
- ### Disposable first-run example
242
+ Keep the **project workspace**, **task execution root**, and **task files directory**
243
+ separate. The project is the stable repository identity; task execution may use a
244
+ linked worktree, with its contracts at `docs/<slug>`. Preparation reports actual
245
+ paths. The engine later manages or registers packet execution directories, and owns
246
+ `state.json`. See [Workflow](workflow.md#2-choose-the-task-execution-directory).
178
247
 
179
- For a first installation check, the packaged scaffold creates a separate Go addition task. The initial implementation is intentionally wrong; the executor must fix it and add ordinary tests without changing the frozen acceptance test. This example needs Go 1.27 or later and an unused destination directory.
248
+ ### Disposable first-run example
180
249
 
181
- The scaffold intentionally has no `workflow` assessment and therefore follows legacy Full behavior. To try Quick, ask `flywheel-task` to inspect and qualify an actual small task; changing a mode flag alone does not supply the missing evidence.
250
+ The packaged scaffold creates a separate Go addition task with an intentionally
251
+ wrong implementation and protected acceptance test. It needs Go 1.27 or later and
252
+ an unused destination. Its contracts have no workflow assessment and therefore use
253
+ Full; a mode flag alone does not qualify them for Quick.
182
254
 
183
255
  ```sh
184
256
  FLYWHEEL_PACKAGE="$(npm root --global)/@ckanner/flywheel"
@@ -187,9 +259,12 @@ cd "$HOME/flywheel-demo"
187
259
  git init -b main
188
260
  ```
189
261
 
190
- For a custom prefix, resolve the package with `npm root --global --prefix "$HOME/.local"` instead. If the CLI is not on PATH, set `FLYWHEEL_BIN` to its absolute path when invoking the script. The scaffold writes files and reads installed templates; it does not invoke models or commit anything.
262
+ For a custom prefix, resolve the package using `npm root --global --prefix
263
+ "$HOME/.local"`. If the CLI is not on PATH, set `FLYWHEEL_BIN` to its absolute path
264
+ when running the scaffold. It writes files and reads templates; it does not call
265
+ models or commit.
191
266
 
192
- The scaffold includes `sum.go`, frozen `acceptance/sum_test.go`, `docs/add/spec.md`, a packet, a complete project configuration, and ignore rules for generated/volatile files. Run every L1 command from the packet. For the shipped example:
267
+ Run every acceptance command from the generated packet. The supplied checks are:
193
268
 
194
269
  ```sh
195
270
  go test ./...
@@ -198,7 +273,8 @@ go test -coverprofile=coverage.out . &&
198
273
  awk '$NF != "100.0%" && $NF != "100%" { bad=1 } END { exit bad }'
199
274
  ```
200
275
 
201
- The initial failures are expected. Record the actual exit codes and summaries in the Spec's dry-run evidence. Review the contracts and frozen boundaries, then commit the scaffold in this new demonstration repository:
276
+ Initial failures are expected. Record actual results in the Spec, review the frozen
277
+ boundaries, then commit the scaffold and create the task branch:
202
278
 
203
279
  ```sh
204
280
  git add go.mod sum.go acceptance .gitignore flywheel.config.json docs/add
@@ -208,11 +284,13 @@ git worktree add -b task/add ../flywheel-demo-add
208
284
  cd ../flywheel-demo-add
209
285
  ```
210
286
 
211
- This disposable scaffold generates contracts before the task worktree is created; for an existing repository, use the preparation order in the preceding section. The real run below uses the new task worktree and its own `docs/add`, so local packet delivery stays on `task/add`.
287
+ This demonstration generates contracts before creating its task worktree. In an
288
+ existing repository, follow the preparation order in [Workflow](workflow.md).
212
289
 
213
290
  ## 7. Start, observe, stop, and recover
214
291
 
215
- The following commands invoke the real configured backends. Run them from the demo task worktree, or substitute your actual task name:
292
+ These commands invoke the configured real backends. Run them from the demo task
293
+ checkout, or substitute your actual task name:
216
294
 
217
295
  ```sh
218
296
  flywheel config inspect --cwd "$PWD" --task-dir "$PWD/docs/add" --json
@@ -221,71 +299,99 @@ flywheel control start --cwd "$PWD" --task-dir "$PWD/docs/add"
221
299
  flywheel control status --cwd "$PWD" --task-dir "$PWD/docs/add"
222
300
  ```
223
301
 
224
- In DSH Chat, the equivalent entries are `/flywheel-run <absolute-task-path>` and `/flywheel-status <same-path>`, with `/flywheel-stop <same-path>` when stopping is needed. Replace the placeholders with the real path returned during preparation. These skills resolve the project root without requiring an initial view selection.
225
-
226
- Launch/start through flywheel_launch or flywheel_control associates the task with this DSH conversation. Terminal runs record the host session ID; older runs are selectable from recent tasks. There are no editable path fields: known locations supplied by the assistant/engine appear read-only. Prepared tasks can also be associated through a read-only status query.
227
-
228
- The UI separates the last stage from overall delivery and refreshes running state plus registered discovery. It does not scan directories. Public session projections restore explicit associations; forks do not inherit the parent task. Selection and status snapshots are separate, late replies cannot replace another task, and unconfirmed operations require reconciliation against their original target.
302
+ In DSH, `/flywheel-run <absolute-task-path>` and `/flywheel-status <same-path>` are
303
+ equivalent entry points. Launch/start and read-only status association make the task
304
+ selectable in the console. It reads registered tasks rather than scanning folders;
305
+ known project/execution/file locations are read-only details. One current-session
306
+ task can open automatically; multiple or unassociated tasks require selection.
229
307
 
230
- After a launch/start/stop timeout or disconnect, the background task's outcome may be unconfirmed. Keep the original task and project paths, refresh that task's status, and inspect logs before deciding how to recover. The view disables further mutations until that task is successfully reconciled and never retries them automatically. A prior snapshot, closing a page, or switching sessions cannot prove the engine stopped. The native trajectory retains its parent-session records; full worker histories are not merged into it.
308
+ The UI distinguishes this stage's result from overall delivery. Running state and
309
+ registered discovery refresh automatically. A timeout or disconnect can leave an
310
+ operation unconfirmed: keep its original paths and reconcile that task before
311
+ another mutation. Old snapshots, page closure, or session switching cannot prove
312
+ it stopped. Structured host evidence of rejection before control-process start is
313
+ different from an unknown outcome.
231
314
 
232
- If the host explicitly confirms rejection before the control process started, such as a missing directory, correct the path or environment and submit again. This requires structured host evidence; error-message text alone cannot establish that a lost request was never executed.
233
-
234
- For a foreground run that pauses before Review, use this instead of background start:
315
+ For a foreground run that pauses before Review, use this **instead of** background
316
+ start:
235
317
 
236
318
  ```sh
237
319
  flywheel run docs/add --pause-before review
238
320
  ```
239
321
 
240
- `control launch` and `control start` do not accept `--pause-before`, and pause mode cannot be combined with `--only`. `--only execute` runs the bounded execution/L1 loop; it is neither Quick nor a single model call. For Quick, `--only review` uses the task-final review contract and saves any required one-way Full upgrade without continuing into Plan or local merge; `--only verify` includes applicable candidate L2/L3, even with a selected packet. Running Plan on Quick requires an explicit `--mode full` upgrade. See the individual skills for partial-loop recovery.
322
+ `control launch`/`start` do not accept `--pause-before`, which also cannot combine
323
+ with `--only`. Partial-loop commands do not imply whole-task completion; see
324
+ [Partial stages](workflow.md#partial-stages-and-permissions).
241
325
 
242
- Inspect progress:
326
+ Inspect and stop with:
243
327
 
244
328
  ```sh
245
329
  flywheel status docs/add
246
330
  tail -n 80 docs/add/orchestrator.log
247
- git log -5 --oneline
248
- ```
249
-
250
- Stop with:
251
-
252
- ```sh
253
331
  flywheel control stop --cwd "$PWD" --task-dir "$PWD/docs/add"
254
332
  ```
255
333
 
256
- Only resume with `control start` after confirming the previous run ended and addressing its actual error. Retain the original task/worktree paths, reports, and state. A stop result concerns engine lifetime; recorded cleanup uncertainty still needs investigation, especially for Codex Pro's separately managed processes. See [recovery](workflow.md#7-stop-and-recover-without-losing-evidence).
334
+ Resume from the same paths only after reconciling the previous run and addressing
335
+ the actual failure. Keep state, reports, and worktrees. Unknown dispatch, outcome,
336
+ or cleanup cannot be bypassed by switching to fresh history or another backend.
337
+ See [Recovery](session-recovery.md).
257
338
 
258
- For the first real run, record whether the task reached `completed`, all requirements were covered, frozen acceptance remained unchanged, independent review and reports exist, and the implementation was delivered in local Git. Record actual model identity, latency, and usage separately from preflight. No check in this guide claims those results on your behalf.
339
+ For the first real run, inspect `completed`, requirement coverage, unchanged frozen
340
+ acceptance, independent review, reports, and local Git delivery. Real model identity,
341
+ latency, and usage are separate observations from preflight. PR creation/merge is a
342
+ separately authorized [console operation](flow-console.md#pr-and-merge).
259
343
 
260
- ## 8. Upgrade and troubleshoot
344
+ ## 8. Upgrade, troubleshoot, or uninstall
261
345
 
262
- Stop active tasks and confirm their state, preserve configuration/customizations, then rerun the installation command with the original prefix/project/DSH options. To pin 0.28.0, first confirm that exact version exists in the registry and replace `@latest` with `@0.28.0`. `flywheel setup --no-global` repairs setup for the installed version without selecting a different CLI release.
346
+ ### Upgrade and repair
263
347
 
264
- Inside Flywheel's own source checkout, npm may consider the matching local package satisfied and then resolve an older global executable from PATH. If the installation report shows a different version, retry outside the checkout, or run `npm install --global --ignore-scripts --include=optional @ckanner/flywheel@0.30.0` followed by `flywheel setup --no-global` from that exact prefix. Preserve a custom prefix in both steps. Check the CLI version, installation report, and desktop-profile plugin version. Reload the running desktop as directed by the host so it loads the newly installed modules.
348
+ Stop active tasks and reconcile their state. Preserve configuration/customizations,
349
+ then repeat installation with the original prefix/project/DSH options. Confirm
350
+ `flywheel version`, the installation report, and the desktop plugin version, then
351
+ reload DSH as directed. `flywheel setup --no-global` repairs the installed version.
265
352
 
266
- From 0.30.0, adopting the complete packaged preset is explicit: choose the global or project scope in the configuration editor, read it, load this version's defaults, review, and save. Saving backs up and replaces the selected configuration. Higher-priority task/project files still take precedence.
353
+ Run npx installation outside Flywheel's own source checkout so npm does not satisfy
354
+ the request with that local package. If needed, explicitly install the chosen
355
+ published version globally, then run setup from that exact prefix. Existing
356
+ configuration stays in place; inspect higher-priority task files before assuming a
357
+ project/global edit took effect.
267
358
 
268
- Existing hard-route configuration remains unchanged after upgrade. To adopt the new plugin route, change the effective hard binding or profile to `harness: "codex-pro"`, preserve model/channel/thinking, inspect it, and restart. Do not use `subagent_codex_pro` as a provider.
359
+ ### Troubleshooting
269
360
 
270
361
  | Symptom | First check |
271
362
  |---|---|
272
- | Missing `install` or `control` command | Published version, `flywheel version`, PATH, and any explicit desktop `flywheelBinary` |
273
- | The large composer popup is still present | Published `0.28.0` has the old layout; verify a build containing the conversation-view fix is installed, then reload as directed by DSH |
274
- | Flywheel is not directly visible in the top bar | Check More, plugin enablement, and the actual installed version; `/flywheel` and CLI remain diagnostic entry points |
275
- | Install succeeds but `ready:false` | Resolve the specific `diagnostic.checks` blockers |
276
- | Terminal works but the desktop does not | Managed launcher, explicit override, GUI PATH/profile/environment; rerun setup and check the panel |
277
- | A configuration edit has no effect | `config inspect` source and higher-priority task/project files; restart the engine |
278
- | Skill or launcher conflict | Preserve customizations, compare the specific files, and resolve the reported conflict without altering ownership hashes |
279
- | Worktree creation falls back in-place | Stop if isolation is required; inspect persisted mode and preserve work before recovery |
280
- | Cleanup is unconfirmed | Inspect task-owned processes and receipts before retrying; elapsed time alone is not proof |
281
- | Start/stop outcome is unconfirmed | Refresh the same task and inspect logs; timeout/disconnection proves neither no start nor a completed stop, and mutations are not retried automatically |
282
-
283
- Installation is not one atomic transaction across npm, DSH, and all skills. Correct the reported cause and retry; preserve completed steps and user files. Do not delete whole configuration directories or modify integrity manifests to bypass conflicts.
284
-
285
- To uninstall, first stop running tasks, remove the desktop Flywheel plugin through the desktop's supported plugin-management interface, then uninstall the global CLI using the same prefix:
363
+ | A command or new layout is missing | Installed CLI/plugin versions, PATH, and explicit `flywheelBinary` overrides |
364
+ | Flywheel is absent from the view bar | Existing conversation, overflow menu, plugin enablement, and host reload |
365
+ | `ok:true`, `ready:false` after install | Specific blockers in `diagnostic.checks` |
366
+ | Global prefix is unwritable | Use a user-owned `--prefix` and its `bin` directory |
367
+ | The desktop profile is rejected | Use the desktop-supplied DSH command, not an independent npm CLI |
368
+ | Terminal works but desktop does not | Managed launcher, tool paths, SDK profile, and `DSH_HOME`; rerun setup after tool changes |
369
+ | Provider is unregistered or unauthorized | The worker's SDK profile and that provider's normal login flow |
370
+ | Model changes have no effect | Effective configuration source and engine restart |
371
+ | A channel rename does not change accounts | Channel is a configuration/accounting label; actual authorization belongs to the backend |
372
+ | Doctor shows unknown or skipped | Read the individual reason; neither means real inference passed |
373
+ | Cost is missing | Usage/cost was not reported; unknown is not zero |
374
+ | Acceptance fails despite exit 0 | Candidate drift, timeout, cancellation, truncation, or cleanup failure |
375
+ | Isolation is unavailable | Recorded execution mode; parallel automatic worktree management fails instead of falling back |
376
+ | Start/stop or cleanup is unconfirmed | Original task status, logs, owned processes, and trusted receipts before retrying |
377
+ | Git delivery fails | Preserved worktree, hooks, and diff; resolve the cause without forced cleanup |
378
+ | Skill or launcher ownership conflicts | Back up the specific customization and compare it; do not rewrite integrity manifests |
379
+
380
+ Install is not one atomic transaction across npm, DSH, and skills. Correct the
381
+ reported cause and retry without deleting unrelated user files. Acceptance commands
382
+ may need additional named variables in `verify.env-allowlist`; do not inject all
383
+ model credentials into tests.
384
+
385
+ ### Uninstall
386
+
387
+ Stop and reconcile active tasks, remove the desktop Flywheel plugin through DSH's
388
+ supported plugin manager, then uninstall the global CLI using the same prefix:
286
389
 
287
390
  ```sh
288
391
  npm uninstall --global @ckanner/flywheel
289
392
  ```
290
393
 
291
- Configuration, task ledgers, modified skills, and worktrees require deliberate separate handling; do not remove them as an incidental cleanup step. Maintainer build and publication procedures are in the [release guide](https://github.com/ckanner/flywheel/blob/main/docs/en/releasing.md). Normal users do not need npm publishing credentials or GitHub OIDC to install Flywheel.
394
+ Configuration, task ledgers, skills, installation records, and worktrees are retained
395
+ for deliberate separate handling. This does not uninstall DSH/Kimi/Codex or remove
396
+ account credentials. Source builds and contribution checks are in
397
+ [Contributing](contributing.md); maintainer publication is in [Releasing](releasing.md).