@paradigma-inc/flywheel 0.1.25 → 0.1.35

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 (31) hide show
  1. package/package.json +1 -1
  2. package/skills/flywheel/example-workflows/organizing-exploring-and-iterating-on-a-research-topic.md +11 -11
  3. package/skills/flywheel/example-workflows/reproducing-papers-on-a-budget.md +8 -8
  4. package/skills/flywheel/references/ARTIFACTS.md +48 -0
  5. package/skills/flywheel/references/INTERFACES.md +206 -0
  6. package/skills/flywheel/references/experiment-design-protocol.md +5 -5
  7. package/skills/flywheel/references/flywheel-mcp-tool-map.md +73 -59
  8. package/skills/flywheel-auto/SKILL.md +4 -4
  9. package/skills/flywheel-auto/references/ARTIFACTS.md +1 -1
  10. package/skills/flywheel-auto/references/INTERFACES.md +60 -58
  11. package/skills/flywheel-auto/references/experiment-design-protocol.md +5 -5
  12. package/skills/flywheel-auto/references/flywheel-mcp-tool-map.md +73 -59
  13. package/skills/flywheel-lookahead/references/ARTIFACTS.md +1 -1
  14. package/skills/flywheel-lookahead/references/INTERFACES.md +60 -58
  15. package/skills/flywheel-lookahead/references/flywheel-mcp-tool-map.md +73 -59
  16. package/skills/flywheel-prove/SKILL.md +8 -0
  17. package/skills/flywheel-reproduce/SKILL.md +4 -4
  18. package/skills/flywheel-reproduce/references/ARTIFACTS.md +1 -1
  19. package/skills/flywheel-reproduce/references/INTERFACES.md +60 -58
  20. package/skills/flywheel-reproduce/references/experiment-design-protocol.md +5 -5
  21. package/skills/flywheel-reproduce/references/flywheel-mcp-tool-map.md +73 -59
  22. package/skills/flywheel-to-graph/SKILL.md +4 -4
  23. package/skills/flywheel-to-graph/references/ARTIFACTS.md +1 -1
  24. package/skills/flywheel-to-graph/references/INTERFACES.md +60 -58
  25. package/skills/flywheel-to-graph/references/flywheel-mcp-tool-map.md +73 -59
  26. package/skills/flywheel-tree/SKILL.md +61 -0
  27. package/skills/flywheel-tree/agents/interface.yaml +4 -0
  28. package/skills/flywheel-tree/assets/ansi_palette.json +29 -0
  29. package/skills/flywheel-tree/references/workflow.md +108 -0
  30. package/skills/flywheel-tree/scripts/render_tree.py +407 -0
  31. package/skills/flywheel-tree/scripts/render_tree_via_mcp.py +694 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paradigma-inc/flywheel",
3
- "version": "0.1.25",
3
+ "version": "0.1.35",
4
4
  "description": "One-command setup for Flywheel MCP hosts",
5
5
  "type": "module",
6
6
  "files": [
@@ -34,8 +34,8 @@ A clean Flywheel graph screenshot on a white canvas. Near the upper-right is a b
34
34
 
35
35
  ### Likely Flywheel MCP tools for this step
36
36
 
37
- - `mcp__flywheel__flywheel_stage_node_create` to create the root `scheduled muon` graph.
38
- - `mcp__flywheel__flywheel_stage_node_update` to describe the overall research question and first branch.
37
+ - `mcp__flywheel__flywheel_commit_new_node` to create the root `scheduled muon` graph.
38
+ - `mcp__flywheel__flywheel_commit_node` to describe the overall research question and first branch.
39
39
  - `mcp__flywheel__flywheel_branch_node` to split the root into experiment branches.
40
40
  - `mcp__flywheel__flywheel_get_node_tree` to inspect the DAG as it starts to fill out.
41
41
  - `mcp__flywheel__flywheel_commit_node` to persist the initial structure.
@@ -55,7 +55,7 @@ as you all know, liches are known for obsessing over muon. i make no exception.
55
55
  ### Likely Flywheel MCP tools for this step
56
56
 
57
57
  - `mcp__flywheel__flywheel_branch_node` to open an insight branch for the core muon observation.
58
- - `mcp__flywheel__flywheel_stage_node_update` to record the singular-value flattening concern as an explicit insight or hypothesis.
58
+ - `mcp__flywheel__flywheel_commit_node` to record the singular-value flattening concern as an explicit insight or hypothesis.
59
59
  - `mcp__flywheel__flywheel_commit_node` to preserve that observation as a traceable node.
60
60
 
61
61
  ---
@@ -73,7 +73,7 @@ in my mind, there must have been a "softer" way to interpolate between nesterov
73
73
  ### Likely Flywheel MCP tools for this step
74
74
 
75
75
  - `mcp__flywheel__flywheel_branch_node` to fork a new hypothesis branch from the original muon observation.
76
- - `mcp__flywheel__flywheel_stage_node_update` to capture the "softer interpolation" idea between SGD and muon.
76
+ - `mcp__flywheel__flywheel_commit_node` to capture the "softer interpolation" idea between SGD and muon.
77
77
  - `mcp__flywheel__flywheel_commit_node` to save the refined hypothesis before experimenting.
78
78
 
79
79
  ---
@@ -90,7 +90,7 @@ so, i decided to spin up my MCP host and do a bunch of experiments. as usual, it
90
90
 
91
91
  ### Likely Flywheel MCP tools for this step
92
92
 
93
- - `mcp__flywheel__flywheel_stage_node_create` or `mcp__flywheel__flywheel_branch_node` to turn scattered runs into explicit branches instead of an untracked run log.
93
+ - `mcp__flywheel__flywheel_commit_new_node` or `mcp__flywheel__flywheel_branch_node` to turn scattered runs into explicit branches instead of an untracked run log.
94
94
  - `mcp__flywheel__flywheel_list_nodes` to enumerate existing branches and runs.
95
95
  - `mcp__flywheel__flywheel_get_node_tree` to inspect the structure of the experiment graph.
96
96
  - `mcp__flywheel__flywheel_commit_node` to keep the graph auditable as new work is added.
@@ -109,7 +109,7 @@ then, [@thelokasiffers](https://x.com/thelokasiffers) released an early version
109
109
 
110
110
  ### Likely Flywheel MCP tools for this step
111
111
 
112
- - `mcp__flywheel__flywheel_stage_node_create` to create the root node if it did not already exist.
112
+ - `mcp__flywheel__flywheel_commit_new_node` to create the root node if it did not already exist.
113
113
  - `mcp__flywheel__flywheel_branch_node` to fan the work into separate experiment branches.
114
114
  - `mcp__flywheel__flywheel_get_node_tree` to inspect the resulting DAG layout.
115
115
  - `mcp__flywheel__flywheel_summarize_node_tree` to quickly understand branch progress and outcomes.
@@ -136,7 +136,7 @@ what i did was pretty simple: i started discussing with the models my intuition:
136
136
  ### Likely Flywheel MCP tools for this step
137
137
 
138
138
  - `mcp__flywheel__flywheel_branch_node` to create an insight branch for the `US^pV^T` intuition.
139
- - `mcp__flywheel__flywheel_stage_node_update` to store the proposed fractional-power formulation.
139
+ - `mcp__flywheel__flywheel_commit_node` to store the proposed fractional-power formulation.
140
140
  - `mcp__flywheel__flywheel_commit_node` to save the idea before turning it into experiments.
141
141
 
142
142
  ---
@@ -154,7 +154,7 @@ then i realized: if we use NS to have an iteration that approximates powers of -
154
154
  ### Likely Flywheel MCP tools for this step
155
155
 
156
156
  - `mcp__flywheel__flywheel_branch_node` to open a follow-up hypothesis branch around polynomial approximations.
157
- - `mcp__flywheel__flywheel_stage_node_update` to record the new approximation strategy.
157
+ - `mcp__flywheel__flywheel_commit_node` to record the new approximation strategy.
158
158
  - `mcp__flywheel__flywheel_commit_node` to preserve the new line of attack.
159
159
 
160
160
  ---
@@ -172,7 +172,7 @@ at this point i started testing this out, would i get really the right spectra?
172
172
  ### Likely Flywheel MCP tools for this step
173
173
 
174
174
  - `mcp__flywheel__flywheel_branch_node` to create the empirical branch for the spectra sanity check.
175
- - `mcp__flywheel__flywheel_stage_node_update` to record the hypothesis and evaluation criteria.
175
+ - `mcp__flywheel__flywheel_commit_node` to record the hypothesis and evaluation criteria.
176
176
  - `mcp__flywheel__flywheel_request_compute_grant_approval`, `mcp__flywheel__flywheel_compute_acquire`, `mcp__flywheel__flywheel_compute_status`, and `mcp__flywheel__flywheel_compute_connection` to run the experiments on managed compute.
177
177
  - `mcp__flywheel__flywheel_prepare_artifact_uploads`, raw upload to the returned signed URLs, and `mcp__flywheel__flywheel_finalize_artifact_uploads` to attach the singular-value plot as an artifact.
178
178
  - `mcp__flywheel__flywheel_commit_node` to mark the empirical step as completed.
@@ -198,7 +198,7 @@ at this point, quite a few things were in question, what would happen if i train
198
198
  ### Likely Flywheel MCP tools for this step
199
199
 
200
200
  - `mcp__flywheel__flywheel_branch_node` to fork a new investigation around schedule design.
201
- - `mcp__flywheel__flywheel_stage_node_update` to record the competing schedule hypotheses.
201
+ - `mcp__flywheel__flywheel_commit_node` to record the competing schedule hypotheses.
202
202
  - `mcp__flywheel__flywheel_commit_node` to preserve the question before launching more runs.
203
203
 
204
204
  ---
@@ -216,7 +216,7 @@ but which way should we schedule? not clear. is it sgd first or muon first? how
216
216
  ### Likely Flywheel MCP tools for this step
217
217
 
218
218
  - `mcp__flywheel__flywheel_branch_node` to split the root into separate schedule and learning-rate branches.
219
- - `mcp__flywheel__flywheel_stage_node_update` to encode the hypotheses and sweep definitions.
219
+ - `mcp__flywheel__flywheel_commit_node` to encode the hypotheses and sweep definitions.
220
220
  - `mcp__flywheel__flywheel_request_compute_grant_approval` and `mcp__flywheel__flywheel_list_compute_grants` to secure spend before launch.
221
221
  - `mcp__flywheel__flywheel_compute_acquire`, `mcp__flywheel__flywheel_compute_status`, and `mcp__flywheel__flywheel_compute_connection` to provision GPUs and keep them available to the agent.
222
222
  - `mcp__flywheel__flywheel_prepare_artifact_uploads`, raw upload to the returned signed URLs, and `mcp__flywheel__flywheel_finalize_artifact_uploads` to attach result plots and cards as branches finish.
@@ -8,9 +8,9 @@ A really interesting way of using Flywheel is to reproduce papers on a budget: I
8
8
 
9
9
  ### Likely Flywheel MCP tools for this step
10
10
 
11
- - `mcp__flywheel__flywheel_stage_node_create` to create the root reproduction graph or first node for the paper.
11
+ - `mcp__flywheel__flywheel_commit_new_node` to create the root reproduction graph or first node for the paper.
12
12
  - `mcp__flywheel__flywheel_branch_node` to split the paper into parallel validation branches.
13
- - `mcp__flywheel__flywheel_stage_node_update` to capture the paper claim, reproduction plan, and budget constraint.
13
+ - `mcp__flywheel__flywheel_commit_node` to capture the paper claim, reproduction plan, and budget constraint.
14
14
  - `mcp__flywheel__flywheel_request_compute_grant_approval` to enforce the "$10 max" spend before managed compute starts.
15
15
  - `mcp__flywheel__flywheel_commit_node` to persist the planned graph structure.
16
16
 
@@ -39,7 +39,7 @@ The model decides to play it safe: it starts by showing self-attention correlati
39
39
  ### Likely Flywheel MCP tools for this step
40
40
 
41
41
  - `mcp__flywheel__flywheel_branch_node` to open the first empirical branch for the baseline correlation check.
42
- - `mcp__flywheel__flywheel_stage_node_update` to record the hypothesis and experiment setup.
42
+ - `mcp__flywheel__flywheel_commit_node` to record the hypothesis and experiment setup.
43
43
  - `mcp__flywheel__flywheel_compute_acquire`, `mcp__flywheel__flywheel_compute_status`, and `mcp__flywheel__flywheel_compute_connection` to provision and use the small A10 GPU.
44
44
  - `mcp__flywheel__flywheel_prepare_artifact_uploads`, raw upload to the returned signed URLs, and `mcp__flywheel__flywheel_finalize_artifact_uploads` to attach `attn_similarity_by_layer.png`.
45
45
  - `mcp__flywheel__flywheel_commit_node` to mark the step as a completed empirical result.
@@ -59,7 +59,7 @@ Step two is analogous: orthogonality before and after XSA.
59
59
  ### Likely Flywheel MCP tools for this step
60
60
 
61
61
  - `mcp__flywheel__flywheel_branch_node` to create the next experimental branch.
62
- - `mcp__flywheel__flywheel_stage_node_update` to record the orthogonality hypothesis for XSA.
62
+ - `mcp__flywheel__flywheel_commit_node` to record the orthogonality hypothesis for XSA.
63
63
  - `mcp__flywheel__flywheel_compute_acquire`, `mcp__flywheel__flywheel_compute_status`, and `mcp__flywheel__flywheel_compute_connection` to run the projection check.
64
64
  - `mcp__flywheel__flywheel_prepare_artifact_uploads`, raw upload to the returned signed URLs, and `mcp__flywheel__flywheel_finalize_artifact_uploads` to attach `orthogonality_by_layer.png`.
65
65
  - `mcp__flywheel__flywheel_commit_node` to finalize the branch.
@@ -79,7 +79,7 @@ Then, it moves to overhead of the orthogonal projection.
79
79
  ### Likely Flywheel MCP tools for this step
80
80
 
81
81
  - `mcp__flywheel__flywheel_branch_node` to fork an efficiency-comparison branch.
82
- - `mcp__flywheel__flywheel_stage_node_update` to define the runtime and VRAM hypothesis.
82
+ - `mcp__flywheel__flywheel_commit_node` to define the runtime and VRAM hypothesis.
83
83
  - `mcp__flywheel__flywheel_compute_acquire`, `mcp__flywheel__flywheel_compute_status`, and `mcp__flywheel__flywheel_compute_connection` to run the matched SA vs XSA benchmark.
84
84
  - `mcp__flywheel__flywheel_prepare_artifact_uploads`, raw upload to the returned signed URLs, and `mcp__flywheel__flywheel_finalize_artifact_uploads` to attach `efficiency_comparison.png`.
85
85
  - `mcp__flywheel__flywheel_commit_node` to finalize the overhead measurement.
@@ -99,7 +99,7 @@ Up to now, no trouble. The agent then decides to train a 50M parameter model wit
99
99
  ### Likely Flywheel MCP tools for this step
100
100
 
101
101
  - `mcp__flywheel__flywheel_branch_node` to create the larger training branch.
102
- - `mcp__flywheel__flywheel_stage_node_update` to record the 50M-parameter comparison and evaluation criteria.
102
+ - `mcp__flywheel__flywheel_commit_node` to record the 50M-parameter comparison and evaluation criteria.
103
103
  - `mcp__flywheel__flywheel_compute_acquire`, `mcp__flywheel__flywheel_compute_status`, and `mcp__flywheel__flywheel_compute_connection` to run the longer training jobs.
104
104
  - `mcp__flywheel__flywheel_prepare_artifact_uploads`, raw upload to the returned signed URLs, and `mcp__flywheel__flywheel_finalize_artifact_uploads` to attach `run_metrics.csv` and `quality_pairs.csv`.
105
105
  - `mcp__flywheel__flywheel_commit_node` to record that the empirical result did not reproduce the expected gain.
@@ -120,7 +120,7 @@ Also, across sequence length, the trend seems to worsen.
120
120
 
121
121
  - `mcp__flywheel__flywheel_branch_node` to spin off an analysis branch for context length.
122
122
  - `mcp__flywheel__flywheel_get_node` and `mcp__flywheel__flywheel_list_artifacts` to gather results from the completed training branches.
123
- - `mcp__flywheel__flywheel_stage_node_update` to record the interpretation that the delta worsens at longer context.
123
+ - `mcp__flywheel__flywheel_commit_node` to record the interpretation that the delta worsens at longer context.
124
124
  - `mcp__flywheel__flywheel_prepare_artifact_uploads`, raw upload to the returned signed URLs, and `mcp__flywheel__flywheel_finalize_artifact_uploads` to attach `length_trend.png`.
125
125
  - `mcp__flywheel__flywheel_commit_node` to persist the analysis.
126
126
 
@@ -139,7 +139,7 @@ At the same time, baseline seems to also win the LR sweeps.
139
139
  ### Likely Flywheel MCP tools for this step
140
140
 
141
141
  - `mcp__flywheel__flywheel_branch_node` to create a robustness branch for LR sweeps and sink-style perturbations.
142
- - `mcp__flywheel__flywheel_stage_node_update` to capture the robustness hypothesis.
142
+ - `mcp__flywheel__flywheel_commit_node` to capture the robustness hypothesis.
143
143
  - `mcp__flywheel__flywheel_compute_acquire`, `mcp__flywheel__flywheel_compute_status`, and `mcp__flywheel__flywheel_compute_connection` to run the compact sweep experiments.
144
144
  - `mcp__flywheel__flywheel_prepare_artifact_uploads`, raw upload to the returned signed URLs, and `mcp__flywheel__flywheel_finalize_artifact_uploads` to attach `robustness_deltas.png`.
145
145
  - `mcp__flywheel__flywheel_commit_node` to finalize the robustness verdict.
@@ -0,0 +1,48 @@
1
+ # Flywheel Artifacts
2
+
3
+ Canonical artifact upload/finalize contract derived from `mcp_contract.py`.
4
+
5
+ ## Upload Contract
6
+
7
+ - Prepare tool: `flywheel_prepare_artifact_uploads`.
8
+ - Finalize tool: `flywheel_finalize_artifact_uploads`.
9
+ - Raw file upload required between prepare/finalize: `True`.
10
+ - Upload transport step: `PUT` to `prepare.items[].upload_url`.
11
+ - Required headers source: `prepare.items[].upload_headers`.
12
+ - Upload body contract: `raw_file_bytes`.
13
+ - Prepare item required fields: `artifact_type`, `filename`, `media_type`.
14
+ - Prepare item optional fields: `title`, `execution_id`, `metadata`, `note`.
15
+ - Prepare item note: prepare.items[] is structured object input. The transport layer may tolerate stringified JSON as a compatibility measure; this tolerance is not contractual and may be removed.
16
+ - Raw upload stage success code: `202`.
17
+ - Stage semantics: `accepted_and_staged`.
18
+ - Finalize appends the batch with a single revision bump: `True`.
19
+ - Forbidden upload payload kinds: `json_metadata_wrapper`.
20
+ - Optional note field `note` applies to `artifact_metadata_record` (markdown allowed: `True`).
21
+
22
+ ## Supported Artifact Types
23
+
24
+ - `text`, `table`, `json`, `image`, `banner`, `html`, `plotly_html`, `vega`, `checkpoint`, `binary`, `diff_carousel`
25
+
26
+ ## Metadata Contract
27
+
28
+ - `title` required non-empty: `True`.
29
+ - Display label field: `title`.
30
+ - Title normalization priority: `explicit_title` -> `payload.title` -> `payload.name` -> `basename(payload.path|payload.filename|payload.file)` -> `basename(filename)` -> `basename(storage_path)` -> `artifact_type` -> `artifact`.
31
+ - Title must not derive from: `storage_url`.
32
+ - `storage_url` purpose: `raw_artifact_byte_read_url`.
33
+ - `storage_url` cannot be used as display label: `True`.
34
+
35
+ ## Preview and Read Contract
36
+
37
+ - `flywheel_list_artifacts`: List node artifacts.
38
+ - `flywheel_get_artifact`: Get one artifact by id.
39
+ - No dedicated artifact preview tool exists in the current MCP operation catalog.
40
+ - Guidance: use flywheel_prepare_artifact_uploads, raw-file upload, and flywheel_finalize_artifact_uploads to publish experiment evidence before empirical completed commits
41
+
42
+ ## Failure Causes to Handle Explicitly
43
+
44
+ - Stale `expected_revision` on mutating calls returns `409` and requires explicit reconciliation.
45
+ - Reusing an idempotency key with a different payload hash causes `409_conflict`.
46
+ - Prepare item payloads must be structured objects; stringified JSON item payloads are invalid.
47
+ - Uploading metadata wrappers instead of raw file bytes violates the upload contract.
48
+ - Finalize requires a valid prepared batch token and staged uploads from that batch.
@@ -0,0 +1,206 @@
1
+ # Interfaces
2
+
3
+ Canonical reference for Flywheel MCP public interfaces and contract pointers.
4
+
5
+ ## Canonical Contract References
6
+
7
+ - `flywheel_get_contract` is the top-level contract entry point.
8
+ - `flywheel_get_contract_section(section_id)` returns section-scoped payloads.
9
+ - Section order:
10
+ - `quickstart` (Quickstart): Recommended first calls and section read order for onboarding.
11
+ - `graph` (Graph): Node model, graph topology guidance, and durable behavior rules.
12
+ - `stage_commit` (Stage and commit): Stage/commit operations, commit-time validation requirements, and reproducibility guidance.
13
+ - `sharing` (Sharing): Sharing modes, derived visibility, collaborator roles, and query translation.
14
+ - `artifacts` (Artifacts): Prepare/upload/finalize requirements and artifact type rules.
15
+ - `compute` (Compute): Lease ownership, token-scoped control, approval session, and budget source semantics.
16
+ - `compute/troubleshooting_v1` (Compute Troubleshooting v1): Provider-specific acquire/retry hints for launch kwargs and request tuning.
17
+ - `campaign` (Campaign Contract): Campaign projection and budget contracts plus template section pointers.
18
+
19
+ ## Canonical Entity Model
20
+
21
+ - Canonical durable entity: `node`.
22
+ - Node kind values: `untyped`, `empirical`, `insight`.
23
+ - Node references: `node_id`, `slug_name`.
24
+ - `slug_name` format: `adjective-noun-####` (immutable when present).
25
+ - Approval sessions and compute grants are distinct entities; approvals are session-scoped bindings.
26
+ - Campaign projections are derived from root config and attempt submission JSON artifacts.
27
+
28
+ ## MCP Tool Surface
29
+
30
+ ### Discovery and sharing
31
+
32
+ - `flywheel_auth_status` (read; scopes: `read`; core surface; binding: `operation`)
33
+ - `flywheel_get_credits_balance` (read; scopes: `read`; core surface; binding: `operation`)
34
+ - `flywheel_updates_list` (read; scopes: `read`; core surface; binding: `operation`)
35
+ - `flywheel_updates_hide` (mutating; scopes: `write`; core surface; binding: `operation`)
36
+ - `flywheel_updates_hide_all_active` (mutating; scopes: `write`; core surface; binding: `operation`)
37
+ - `flywheel_updates_unhide` (mutating; scopes: `write`; core surface; binding: `operation`)
38
+ - `flywheel_list_nodes` (read; scopes: `read`; full-surface only; binding: `operation`)
39
+ - `flywheel_resolve_node_slug` (read; scopes: `read`; core surface; binding: `operation`)
40
+ - `flywheel_get_node_sharing` (read; scopes: `read`; full-surface only; binding: `operation`)
41
+ - `flywheel_set_sharing_for_node` (mutating; scopes: `write`; full-surface only; binding: `operation`)
42
+ - `flywheel_set_sharing_for_nodes` (mutating; scopes: `write`; full-surface only; binding: `operation`)
43
+ - `flywheel_get_node` (read; scopes: `read`; core surface; binding: `operation`)
44
+ - `flywheel_create_node_tag` (mutating; scopes: `write`; full-surface only; binding: `operation`)
45
+ - `flywheel_update_node_tag` (mutating; scopes: `write`; full-surface only; binding: `operation`)
46
+ - `flywheel_delete_node_tag` (mutating; scopes: `write`; full-surface only; binding: `operation`)
47
+ - `flywheel_set_node_tag_assignments` (mutating; scopes: `write`; full-surface only; binding: `operation`)
48
+ - `flywheel_get_node_tree` (read; scopes: `read`; full-surface only; binding: `operation`)
49
+ - `flywheel_get_node_ancestry` (read; scopes: `read`; full-surface only; binding: `operation`)
50
+ - `flywheel_get_campaign_snapshot` (read; scopes: `read`; core surface; binding: `operation`)
51
+ - `flywheel_list_audit` (read; scopes: `read`; full-surface only; binding: `operation`)
52
+
53
+ ### Node stage and commit
54
+
55
+ - `flywheel_commit_new_node` (mutating; scopes: `write`; full-surface only; binding: `operation`)
56
+ - `flywheel_acquire_stage_lease` (mutating; scopes: `write`; full-surface only; binding: `operation`)
57
+ - `flywheel_heartbeat_stage_lease` (mutating; scopes: `write`; full-surface only; binding: `operation`)
58
+ - `flywheel_release_stage_lease` (mutating; scopes: `write`; full-surface only; binding: `operation`)
59
+ - `flywheel_commit_node` (mutating; scopes: `write`; core surface; binding: `operation`)
60
+ - `flywheel_branch_node` (mutating; scopes: `write`; full-surface only; binding: `operation`)
61
+ - `flywheel_merge_nodes` (mutating; scopes: `write`; full-surface only; binding: `operation`)
62
+ - `flywheel_add_parent` (mutating; scopes: `write`; full-surface only; binding: `operation`)
63
+ - `flywheel_remove_parent` (mutating; scopes: `write`; full-surface only; binding: `operation`)
64
+ - `flywheel_delete_node` (mutating; scopes: `write`; full-surface only; binding: `operation`)
65
+ - `flywheel_bulk_delete_nodes` (mutating; scopes: `write`; full-surface only; binding: `operation`)
66
+
67
+ ### Artifacts
68
+
69
+ - `flywheel_prepare_artifact_uploads` (mutating; scopes: `write`; core surface; binding: `binding_helper`)
70
+ - `flywheel_finalize_artifact_uploads` (mutating; scopes: `write`; core surface; binding: `binding_helper`)
71
+ - `flywheel_list_artifacts` (read; scopes: `read`; core surface; binding: `operation`)
72
+ - `flywheel_get_artifact` (read; scopes: `read`; core surface; binding: `operation`)
73
+ - `flywheel_delete_artifact` (mutating; scopes: `write`; core surface; binding: `operation`)
74
+ - `flywheel_set_artifact_note` (mutating; scopes: `write`; core surface; binding: `operation`)
75
+
76
+ ### Executions
77
+
78
+ - `flywheel_launch_execution` (mutating; scopes: `write`; core surface; binding: `operation`)
79
+ - `flywheel_list_executions` (read; scopes: `read`; core surface; binding: `operation`)
80
+ - `flywheel_terminate_execution` (mutating; scopes: `write`; core surface; binding: `operation`)
81
+
82
+ ### Compute and budgets
83
+
84
+ - `flywheel_compute_list_options` (read; scopes: `compute`; core surface; binding: `operation`)
85
+ - `flywheel_compute_funding` (read; scopes: `compute`; core surface; binding: `operation`)
86
+ - `flywheel_compute_status` (read; scopes: `compute`; core surface; binding: `operation`)
87
+ - `flywheel_compute_connection` (read; scopes: `compute`; core surface; binding: `operation`)
88
+ - `flywheel_approval_session_heartbeat` (read; scopes: `compute`; core surface; binding: `operation`)
89
+ - `flywheel_list_approval_sessions` (read; scopes: `compute`; core surface; binding: `operation`)
90
+ - `flywheel_expire_approval_session` (mutating; scopes: `compute`; core surface; binding: `operation`)
91
+ - `flywheel_request_compute_grant_approval` (mutating; scopes: `compute`; core surface; binding: `operation`)
92
+ - `flywheel_list_compute_grants` (read; scopes: `compute`; core surface; binding: `operation`)
93
+ - `flywheel_list_campaign_budgets` (read; scopes: `compute`; full-surface only; binding: `operation`)
94
+ - `flywheel_create_campaign_budget` (mutating; scopes: `compute`; full-surface only; binding: `operation`)
95
+ - `flywheel_update_campaign_budget` (mutating; scopes: `compute`; full-surface only; binding: `operation`)
96
+ - `flywheel_revoke_campaign_budget` (mutating; scopes: `compute`; full-surface only; binding: `operation`)
97
+ - `flywheel_compute_acquire` (mutating; scopes: `compute`; core surface; binding: `operation`)
98
+ - `flywheel_compute_release` (mutating; scopes: `compute`; core surface; binding: `operation`)
99
+ - `flywheel_compute_release_all` (mutating; scopes: `compute`; core surface; binding: `operation`)
100
+
101
+ ### Contract, audit, and export
102
+
103
+ - `flywheel_get_contract` (read; scopes: `read`; core surface; binding: `operation`)
104
+ - `flywheel_get_contract_section` (read; scopes: `read`; core surface; binding: `operation`)
105
+ - `flywheel_export_subgraph` (read; scopes: `read`; full-surface only; binding: `operation`)
106
+ - `flywheel_import_subgraph` (mutating; scopes: `write`; full-surface only; binding: `operation`)
107
+ - `flywheel_summarize_node_tree` (read; scopes: `read`; full-surface only; binding: `operation`)
108
+ - `flywheel_export_summary` (read; scopes: `read`; full-surface only; binding: `operation`)
109
+ - `flywheel_export_summary_stream` (read; scopes: `read`; full-surface only; binding: `operation`)
110
+ - `flywheel_export_summary_pdf` (read; scopes: `read`; full-surface only; binding: `operation`)
111
+ - `flywheel_export_summary_render_pdf` (read; scopes: `read`; full-surface only; binding: `operation`)
112
+
113
+ ## HTTP Surface
114
+
115
+ ### Discovery and sharing
116
+
117
+ - `GET /auth/status` -> `flywheel_auth_status`
118
+ - `GET /credits` -> `flywheel_get_credits_balance`
119
+ - `tool-mediated` -> `flywheel_updates_list`
120
+ - `POST /updates/{announcement_id}/hide` -> `flywheel_updates_hide`
121
+ - `POST /updates/hide-all-active` -> `flywheel_updates_hide_all_active`
122
+ - `DELETE /updates/{announcement_id}/hide` -> `flywheel_updates_unhide`
123
+ - `GET /nodes` -> `flywheel_list_nodes`
124
+ - `GET /nodes/resolve-by-slug` -> `flywheel_resolve_node_slug`
125
+ - `tool-mediated` -> `flywheel_get_node_sharing`
126
+ - `tool-mediated` -> `flywheel_set_sharing_for_node`
127
+ - `POST /nodes/access-policy/bulk` -> `flywheel_set_sharing_for_nodes`
128
+ - `tool-mediated` -> `flywheel_get_node`
129
+ - `POST /nodes/{root_node_id}/tags` -> `flywheel_create_node_tag`
130
+ - `PATCH /nodes/{root_node_id}/tags/{tag_id}` -> `flywheel_update_node_tag`
131
+ - `DELETE /nodes/{root_node_id}/tags/{tag_id}` -> `flywheel_delete_node_tag`
132
+ - `PUT /nodes/{node_id}/tags` -> `flywheel_set_node_tag_assignments`
133
+ - `GET /nodes/{node_id}/tree` -> `flywheel_get_node_tree`
134
+ - `GET /nodes/{node_id}/ancestry` -> `flywheel_get_node_ancestry`
135
+ - `GET /nodes/{node_id}/campaign/snapshot` -> `flywheel_get_campaign_snapshot`
136
+ - `GET /nodes/{node_id}/audit` -> `flywheel_list_audit`
137
+
138
+ ### Node stage and commit
139
+
140
+ - `POST /nodes/commit-new` -> `flywheel_commit_new_node`
141
+ - `POST /nodes/{node_id}/stage/lease/acquire` -> `flywheel_acquire_stage_lease`
142
+ - `POST /nodes/{node_id}/stage/lease/heartbeat` -> `flywheel_heartbeat_stage_lease`
143
+ - `POST /nodes/{node_id}/stage/lease/release` -> `flywheel_release_stage_lease`
144
+ - `POST /nodes/{node_id}/commit` -> `flywheel_commit_node`
145
+ - `POST /nodes/{node_id}/branch` -> `flywheel_branch_node`
146
+ - `POST /nodes/merge` -> `flywheel_merge_nodes`
147
+ - `POST /nodes/{node_id}/parents/add` -> `flywheel_add_parent`
148
+ - `POST /nodes/{node_id}/parents/remove` -> `flywheel_remove_parent`
149
+ - `DELETE /nodes/{node_id}` -> `flywheel_delete_node`
150
+ - `POST /nodes/bulk-delete` -> `flywheel_bulk_delete_nodes`
151
+
152
+ ### Artifacts
153
+
154
+ - `POST /nodes/{node_id}/artifacts/uploads/prepare` -> `flywheel_prepare_artifact_uploads`
155
+ - `POST /nodes/{node_id}/artifacts/uploads/finalize` -> `flywheel_finalize_artifact_uploads`
156
+ - `tool-mediated` -> `flywheel_list_artifacts`
157
+ - `tool-mediated` -> `flywheel_get_artifact`
158
+ - `DELETE /nodes/{node_id}/artifacts/{artifact_id}` -> `flywheel_delete_artifact`
159
+ - `PATCH /nodes/{node_id}/artifacts/{artifact_id}/note` -> `flywheel_set_artifact_note`
160
+
161
+ ### Executions
162
+
163
+ - `POST /nodes/{node_id}/executions` -> `flywheel_launch_execution`
164
+ - `GET /nodes/{node_id}/executions` -> `flywheel_list_executions`
165
+ - `POST /nodes/{node_id}/executions/{execution_id}/terminate` -> `flywheel_terminate_execution`
166
+
167
+ ### Compute and budgets
168
+
169
+ - `GET /compute/catalog` -> `flywheel_compute_list_options`
170
+ - `GET /compute/funding` -> `flywheel_compute_funding`
171
+ - `GET /compute/status` -> `flywheel_compute_status`
172
+ - `GET /compute/connection` -> `flywheel_compute_connection`
173
+ - `POST /approval-sessions/heartbeat` -> `flywheel_approval_session_heartbeat`
174
+ - `GET /approval-sessions` -> `flywheel_list_approval_sessions`
175
+ - `POST /approval-sessions/expire` -> `flywheel_expire_approval_session`
176
+ - `tool-mediated` -> `flywheel_request_compute_grant_approval`
177
+ - `GET /compute/grants` -> `flywheel_list_compute_grants`
178
+ - `GET /nodes/{root_node_id}/campaign-budgets` -> `flywheel_list_campaign_budgets`
179
+ - `POST /nodes/{root_node_id}/campaign-budgets` -> `flywheel_create_campaign_budget`
180
+ - `PATCH /nodes/{root_node_id}/campaign-budgets/{compute_budget_id}` -> `flywheel_update_campaign_budget`
181
+ - `DELETE /nodes/{root_node_id}/campaign-budgets/{compute_budget_id}` -> `flywheel_revoke_campaign_budget`
182
+ - `tool-mediated` -> `flywheel_compute_acquire`
183
+ - `tool-mediated` -> `flywheel_compute_release`
184
+ - `tool-mediated` -> `flywheel_compute_release_all`
185
+
186
+ ### Contract, audit, and export
187
+
188
+ - `GET /mcp/contract` -> `flywheel_get_contract`
189
+ - `GET /mcp/contract/sections/{section_id}` -> `flywheel_get_contract_section`
190
+ - `POST /export` -> `flywheel_export_subgraph`
191
+ - `POST /import` -> `flywheel_import_subgraph`
192
+ - `GET /nodes/{node_id}/summary` -> `flywheel_summarize_node_tree`
193
+ - `POST /export-summary` -> `flywheel_export_summary`
194
+ - `POST /export-summary-stream` -> `flywheel_export_summary_stream`
195
+ - `POST /export-summary-pdf` -> `flywheel_export_summary_pdf`
196
+ - `POST /export-summary-render-pdf` -> `flywheel_export_summary_render_pdf`
197
+
198
+ ## Auth and Write Safety
199
+
200
+ - Available scopes: `read`, `write`, `compute`.
201
+ - Default grant scopes: `read`, `write`, `compute`.
202
+ - Transport-required scopes: `read`.
203
+ - Optimistic locking field: `expected_revision`.
204
+ - Conflict status code: `409`.
205
+ - Mutating HTTP calls require `Idempotency-Key`: `True`.
206
+ - MCP tool transport manages idempotency keys for mutating calls: `True`.
@@ -128,9 +128,9 @@ Use an `insight` node to capture rationale, open questions, experiment shape, an
128
128
 
129
129
  Typical flow:
130
130
 
131
- 1. `mcp__flywheel__flywheel_stage_node_create`
132
- 2. `mcp__flywheel__flywheel_stage_node_update`
133
- 3. `mcp__flywheel__flywheel_commit_node`
131
+ 1. `mcp__flywheel__flywheel_commit_new_node`
132
+ 2. `mcp__flywheel__flywheel_acquire_stage_lease` when refining an existing design node
133
+ 3. `mcp__flywheel__flywheel_commit_node` once the design brief is coherent
134
134
 
135
135
  ### Execution layer
136
136
 
@@ -138,8 +138,8 @@ Only after the design gate passes, create or branch the `empirical` node for the
138
138
 
139
139
  Typical flow:
140
140
 
141
- 1. `mcp__flywheel__flywheel_branch_node` or `mcp__flywheel__flywheel_stage_node_create`
142
- 2. `mcp__flywheel__flywheel_stage_node_update` with the explicit run summary and the local question or hypothesis for that branch
141
+ 1. `mcp__flywheel__flywheel_branch_node` or `mcp__flywheel__flywheel_commit_new_node`
142
+ 2. `mcp__flywheel__flywheel_acquire_stage_lease` + `mcp__flywheel__flywheel_commit_node` with the explicit run summary and the local question or hypothesis for that branch
143
143
  3. `mcp__flywheel__flywheel_request_compute_grant_approval` only after the user accepts the design
144
144
  4. `mcp__flywheel__flywheel_list_compute_grants(status=active, approval_session_id=<session_id>)` when you need to resolve the approved `compute_grant_id`
145
145
  5. `mcp__flywheel__flywheel_compute_acquire` and related compute tools only when execution is actually needed