@paradigma-inc/flywheel 0.1.26 → 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.
- package/package.json +1 -1
- package/skills/flywheel/example-workflows/organizing-exploring-and-iterating-on-a-research-topic.md +11 -11
- package/skills/flywheel/example-workflows/reproducing-papers-on-a-budget.md +8 -8
- package/skills/flywheel/references/ARTIFACTS.md +48 -0
- package/skills/flywheel/references/INTERFACES.md +206 -0
- package/skills/flywheel/references/experiment-design-protocol.md +5 -5
- package/skills/flywheel/references/flywheel-mcp-tool-map.md +72 -60
- package/skills/flywheel-auto/SKILL.md +4 -4
- package/skills/flywheel-auto/references/ARTIFACTS.md +1 -1
- package/skills/flywheel-auto/references/INTERFACES.md +59 -59
- package/skills/flywheel-auto/references/experiment-design-protocol.md +5 -5
- package/skills/flywheel-auto/references/flywheel-mcp-tool-map.md +72 -60
- package/skills/flywheel-lookahead/references/ARTIFACTS.md +1 -1
- package/skills/flywheel-lookahead/references/INTERFACES.md +59 -59
- package/skills/flywheel-lookahead/references/flywheel-mcp-tool-map.md +72 -60
- package/skills/flywheel-prove/SKILL.md +8 -0
- package/skills/flywheel-reproduce/SKILL.md +4 -4
- package/skills/flywheel-reproduce/references/ARTIFACTS.md +1 -1
- package/skills/flywheel-reproduce/references/INTERFACES.md +59 -59
- package/skills/flywheel-reproduce/references/experiment-design-protocol.md +5 -5
- package/skills/flywheel-reproduce/references/flywheel-mcp-tool-map.md +72 -60
- package/skills/flywheel-to-graph/SKILL.md +4 -4
- package/skills/flywheel-to-graph/references/ARTIFACTS.md +1 -1
- package/skills/flywheel-to-graph/references/INTERFACES.md +59 -59
- package/skills/flywheel-to-graph/references/flywheel-mcp-tool-map.md +72 -60
- package/skills/flywheel-tree/SKILL.md +61 -0
- package/skills/flywheel-tree/agents/interface.yaml +4 -0
- package/skills/flywheel-tree/assets/ansi_palette.json +29 -0
- package/skills/flywheel-tree/references/workflow.md +108 -0
- package/skills/flywheel-tree/scripts/render_tree.py +407 -0
- package/skills/flywheel-tree/scripts/render_tree_via_mcp.py +694 -0
package/package.json
CHANGED
package/skills/flywheel/example-workflows/organizing-exploring-and-iterating-on-a-research-topic.md
CHANGED
|
@@ -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
|
-
- `
|
|
38
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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. `
|
|
132
|
-
2. `
|
|
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 `
|
|
142
|
-
2. `
|
|
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
|