@paradigma-inc/flywheel 0.1.19 → 0.1.26

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 (56) hide show
  1. package/README.md +8 -0
  2. package/package.json +1 -1
  3. package/skills/flywheel/references/experiment-design-protocol.md +1 -1
  4. package/skills/flywheel/references/flywheel-mcp-tool-map.md +32 -35
  5. package/skills/flywheel/setting-up-flywheel/updating-flywheel-mcp.md +8 -0
  6. package/skills/flywheel-auto/SKILL.md +1 -1
  7. package/skills/flywheel-auto/references/ARTIFACTS.md +0 -1
  8. package/skills/flywheel-auto/references/INTERFACES.md +16 -10
  9. package/skills/flywheel-auto/references/experiment-design-protocol.md +1 -1
  10. package/skills/flywheel-auto/references/flywheel-mcp-tool-map.md +32 -35
  11. package/skills/flywheel-lookahead/SKILL.md +22 -15
  12. package/skills/flywheel-lookahead/agents/openai.yaml +3 -3
  13. package/skills/flywheel-lookahead/evals/evals.json +13 -1
  14. package/skills/flywheel-lookahead/references/ARTIFACTS.md +0 -1
  15. package/skills/flywheel-lookahead/references/INTERFACES.md +16 -10
  16. package/skills/flywheel-lookahead/references/flywheel-mcp-tool-map.md +32 -35
  17. package/skills/flywheel-prove/SKILL.md +163 -0
  18. package/skills/flywheel-prove/agents/interface.yaml +4 -0
  19. package/skills/flywheel-prove/assets/pipeline_template/bin/tproof +3 -0
  20. package/skills/flywheel-prove/assets/pipeline_template/bin/tproof.cmd +2 -0
  21. package/skills/flywheel-prove/assets/pipeline_template/logs/.gitkeep +1 -0
  22. package/skills/flywheel-prove/assets/pipeline_template/pyproject.toml +23 -0
  23. package/skills/flywheel-prove/assets/pipeline_template/scripts/smoke_test.cmd +2 -0
  24. package/skills/flywheel-prove/assets/pipeline_template/scripts/smoke_test.sh +3 -0
  25. package/skills/flywheel-prove/assets/pipeline_template/src/tproof/__init__.py +1 -0
  26. package/skills/flywheel-prove/assets/pipeline_template/src/tproof/cli.py +298 -0
  27. package/skills/flywheel-prove/assets/pipeline_template/src/tproof/constants.py +10 -0
  28. package/skills/flywheel-prove/assets/pipeline_template/src/tproof/layout.py +51 -0
  29. package/skills/flywheel-prove/assets/pipeline_template/src/tproof/leanops.py +116 -0
  30. package/skills/flywheel-prove/assets/pipeline_template/src/tproof/runstore.py +58 -0
  31. package/skills/flywheel-prove/assets/pipeline_template/src/tproof/tasking.py +94 -0
  32. package/skills/flywheel-prove/assets/pipeline_template/workspace/prompts/fill_sorries.txt +3 -0
  33. package/skills/flywheel-prove/references/workflow.md +193 -0
  34. package/skills/flywheel-prove/scripts/scaffold_pipeline.py +111 -0
  35. package/skills/flywheel-reproduce/SKILL.md +28 -23
  36. package/skills/flywheel-reproduce/evals/evals.json +7 -1
  37. package/skills/flywheel-reproduce/references/ARTIFACTS.md +0 -1
  38. package/skills/flywheel-reproduce/references/INTERFACES.md +16 -10
  39. package/skills/flywheel-reproduce/references/experiment-design-protocol.md +1 -1
  40. package/skills/flywheel-reproduce/references/flywheel-mcp-tool-map.md +32 -35
  41. package/skills/flywheel-reproduce/references/source-blog.md +35 -0
  42. package/skills/flywheel-reproduce/references/source-generic.md +30 -0
  43. package/skills/flywheel-reproduce/references/source-notes.md +35 -0
  44. package/skills/flywheel-reproduce/references/source-paper.md +89 -0
  45. package/skills/flywheel-reproduce/references/source-wiki.md +36 -0
  46. package/skills/flywheel-to-graph/SKILL.md +26 -21
  47. package/skills/flywheel-to-graph/evals/evals.json +7 -1
  48. package/skills/flywheel-to-graph/references/ARTIFACTS.md +0 -1
  49. package/skills/flywheel-to-graph/references/INTERFACES.md +16 -10
  50. package/skills/flywheel-to-graph/references/flywheel-mcp-tool-map.md +32 -35
  51. package/skills/flywheel-to-graph/references/source-blog.md +34 -0
  52. package/skills/flywheel-to-graph/references/source-generic.md +29 -0
  53. package/skills/flywheel-to-graph/references/source-notes.md +34 -0
  54. package/skills/flywheel-to-graph/references/source-paper.md +85 -0
  55. package/skills/flywheel-to-graph/references/source-wiki.md +35 -0
  56. package/src/cli.mjs +69 -3
@@ -9,10 +9,10 @@ Canonical reference for Flywheel MCP public interfaces and contract pointers.
9
9
  - Section order:
10
10
  - `quickstart` (Quickstart): Recommended first calls and section read order for onboarding.
11
11
  - `graph` (Graph): Node model, graph topology guidance, and durable behavior rules.
12
- - `lifecycle` (Lifecycle): Lifecycle operations, commit-time validation requirements, and reproducibility guidance.
12
+ - `stage_commit` (Stage and commit): Stage/commit operations, commit-time validation requirements, and reproducibility guidance.
13
13
  - `sharing` (Sharing): Sharing modes, derived visibility, collaborator roles, and query translation.
14
14
  - `artifacts` (Artifacts): Prepare/upload/finalize requirements and artifact type rules.
15
- - `compute` (Compute): Lease ownership, approval session, and budget source semantics.
15
+ - `compute` (Compute): Lease ownership, token-scoped control, approval session, and budget source semantics.
16
16
  - `compute/troubleshooting_v1` (Compute Troubleshooting v1): Provider-specific acquire/retry hints for launch kwargs and request tuning.
17
17
  - `campaign` (Campaign Contract): Campaign projection and budget contracts plus template section pointers.
18
18
 
@@ -50,10 +50,12 @@ Canonical reference for Flywheel MCP public interfaces and contract pointers.
50
50
  - `flywheel_get_campaign_snapshot` (read; scopes: `read`; core surface; binding: `operation`)
51
51
  - `flywheel_list_audit` (read; scopes: `read`; full-surface only; binding: `operation`)
52
52
 
53
- ### Node lifecycle
53
+ ### Node stage and commit
54
54
 
55
- - `flywheel_stage_node_create` (mutating; scopes: `write`; full-surface only; binding: `operation`)
56
- - `flywheel_stage_node_update` (mutating; scopes: `write`; core surface; binding: `operation`)
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`)
57
59
  - `flywheel_commit_node` (mutating; scopes: `write`; core surface; binding: `operation`)
58
60
  - `flywheel_branch_node` (mutating; scopes: `write`; full-surface only; binding: `operation`)
59
61
  - `flywheel_merge_nodes` (mutating; scopes: `write`; full-surface only; binding: `operation`)
@@ -80,6 +82,7 @@ Canonical reference for Flywheel MCP public interfaces and contract pointers.
80
82
  ### Compute and budgets
81
83
 
82
84
  - `flywheel_compute_list_options` (read; scopes: `compute`; core surface; binding: `operation`)
85
+ - `flywheel_compute_funding` (read; scopes: `compute`; core surface; binding: `operation`)
83
86
  - `flywheel_compute_status` (read; scopes: `compute`; core surface; binding: `operation`)
84
87
  - `flywheel_compute_connection` (read; scopes: `compute`; core surface; binding: `operation`)
85
88
  - `flywheel_approval_session_heartbeat` (read; scopes: `compute`; core surface; binding: `operation`)
@@ -132,10 +135,12 @@ Canonical reference for Flywheel MCP public interfaces and contract pointers.
132
135
  - `GET /mcp/nodes/{node_id}/campaign/snapshot` -> `flywheel_get_campaign_snapshot`
133
136
  - `GET /mcp/nodes/{node_id}/audit` -> `flywheel_list_audit`
134
137
 
135
- ### Node lifecycle
138
+ ### Node stage and commit
136
139
 
137
- - `POST /mcp/nodes/stage/create` -> `flywheel_stage_node_create`
138
- - `PATCH /mcp/nodes/{node_id}/stage/update` -> `flywheel_stage_node_update`
140
+ - `POST /mcp/nodes/commit-new` -> `flywheel_commit_new_node`
141
+ - `POST /mcp/nodes/{node_id}/stage/lease/acquire` -> `flywheel_acquire_stage_lease`
142
+ - `POST /mcp/nodes/{node_id}/stage/lease/heartbeat` -> `flywheel_heartbeat_stage_lease`
143
+ - `POST /mcp/nodes/{node_id}/stage/lease/release` -> `flywheel_release_stage_lease`
139
144
  - `POST /mcp/nodes/{node_id}/commit` -> `flywheel_commit_node`
140
145
  - `POST /mcp/nodes/{node_id}/branch` -> `flywheel_branch_node`
141
146
  - `POST /mcp/nodes/merge` -> `flywheel_merge_nodes`
@@ -161,7 +166,8 @@ Canonical reference for Flywheel MCP public interfaces and contract pointers.
161
166
 
162
167
  ### Compute and budgets
163
168
 
164
- - `GET /mcp/nodes/{node_id}/compute/options` -> `flywheel_compute_list_options`
169
+ - `GET /mcp/compute/catalog` -> `flywheel_compute_list_options`
170
+ - `GET /mcp/compute/funding` -> `flywheel_compute_funding`
165
171
  - `GET /mcp/compute/status` -> `flywheel_compute_status`
166
172
  - `GET /mcp/compute/connection` -> `flywheel_compute_connection`
167
173
  - `POST /mcp/approval-sessions/heartbeat` -> `flywheel_approval_session_heartbeat`
@@ -173,7 +179,7 @@ Canonical reference for Flywheel MCP public interfaces and contract pointers.
173
179
  - `POST /mcp/nodes/{root_node_id}/campaign-budgets` -> `flywheel_create_campaign_budget`
174
180
  - `PATCH /mcp/nodes/{root_node_id}/campaign-budgets/{compute_budget_id}` -> `flywheel_update_campaign_budget`
175
181
  - `DELETE /mcp/nodes/{root_node_id}/campaign-budgets/{compute_budget_id}` -> `flywheel_revoke_campaign_budget`
176
- - `POST /mcp/nodes/{node_id}/compute/acquire` -> `flywheel_compute_acquire`
182
+ - `tool-mediated` -> `flywheel_compute_acquire`
177
183
  - `POST /mcp/compute/release` -> `flywheel_compute_release`
178
184
  - `POST /mcp/compute/release-all` -> `flywheel_compute_release_all`
179
185
 
@@ -12,13 +12,6 @@ Flywheel is a graph-based system for tracking research work, decisions, and evid
12
12
  - Node references include immutable `node_id` and optional immutable `slug_name`; prefer communicating both together for human clarity and disambiguation.
13
13
  - Insight nodes should represent conceptual observations (theoretical insights, intuitions, motivations, decision-relevant framing); empirical nodes should represent experiments with explicit hypotheses and measured outcomes.
14
14
  - Graph topology should encode logical/causal relations between concepts and experiments. Avoid defaulting to shallow root-only branching unless work items are truly independent.
15
- - Node lifecycle semantics are interface-agnostic (`stage_node_create`, `stage_node_update`, `commit_node`); MCP tools are one projection of this shared contract.
16
- - Mutating node writes are optimistic-locking operations: read latest state, pass `expected_revision`, and handle `409 conflict` with explicit reconciliation.
17
- - Mutating operations are idempotent; MCP tool transport auto-manages `Idempotency-Key` on mutating tool calls.
18
- - Commit is finalize-only: commit requests require `expected_revision` and may optionally override `summary`; committed node state must still satisfy strict contract (`summary`/`outcome`, `empirical+completed` requires artifacts or `no_artifacts_reason`, `insight` requires non-empty insights).
19
- - When code is involved, pass `repo_url`/`branch_name`/`head_commit_sha` and align git structure with graph topology where practical (without forcing one-to-one mapping).
20
- - Summaries, hypotheses, and artifacts should be reproduction-grade: enough setup, method, evidence, and interpretation for another reader to reproduce or audit results.
21
- - Empirical workflow is hypothesis-driven: launch execution, inspect outcomes, publish evidence artifacts, and commit only after terminal status.
22
15
  - For empirical work, publish evidence with `flywheel_prepare_artifact_uploads`, upload raw file bytes, then `flywheel_finalize_artifact_uploads` before commit.
23
16
  - Artifact metadata records expose a non-empty `title` suitable for display labels; title normalization must never derive from `storage_url`.
24
17
 
@@ -47,11 +40,13 @@ Flywheel is a graph-based system for tracking research work, decisions, and evid
47
40
  - `flywheel_get_campaign_snapshot` (read; scopes: `read`; HTTP: `GET /mcp/nodes/{node_id}/campaign/snapshot`; core surface): Read the current campaign snapshot for a node's root campaign, including configured views and derived records.
48
41
  - `flywheel_list_audit` (read; scopes: `read`; HTTP: `GET /mcp/nodes/{node_id}/audit`; full-surface only): List node MCP audit events.
49
42
 
50
- ### Node lifecycle
43
+ ### Node stage and commit
51
44
 
52
- - `flywheel_stage_node_create` (mutating; scopes: `write`; HTTP: `POST /mcp/nodes/stage/create`; full-surface only): Stage creation of a new Flywheel node.
53
- - `flywheel_stage_node_update` (mutating; scopes: `write`; HTTP: `PATCH /mcp/nodes/{node_id}/stage/update`; core surface): Stage mutable node fields, including content/readme text, with optimistic locking; use `no_artifacts_reason` when empirical completed nodes intentionally have no artifacts.
54
- - `flywheel_commit_node` (mutating; scopes: `write`; HTTP: `POST /mcp/nodes/{node_id}/commit`; core surface): Commit a node with contract validation.
45
+ - `flywheel_commit_new_node` (mutating; scopes: `write`; HTTP: `POST /mcp/nodes/commit-new`; full-surface only): Commit a locally staged new node into canonical storage and return the persisted node.
46
+ - `flywheel_acquire_stage_lease` (mutating; scopes: `write`; HTTP: `POST /mcp/nodes/{node_id}/stage/lease/acquire`; full-surface only): Acquire a session-scoped stage lease for an existing node before local staged edits.
47
+ - `flywheel_heartbeat_stage_lease` (mutating; scopes: `write`; HTTP: `POST /mcp/nodes/{node_id}/stage/lease/heartbeat`; full-surface only): Refresh the active stage lease for the current editing session.
48
+ - `flywheel_release_stage_lease` (mutating; scopes: `write`; HTTP: `POST /mcp/nodes/{node_id}/stage/lease/release`; full-surface only): Release the active stage lease for the current editing session.
49
+ - `flywheel_commit_node` (mutating; scopes: `write`; HTTP: `POST /mcp/nodes/{node_id}/commit`; core surface): Commit an existing node by publishing the caller's staged payload under an active stage lease.
55
50
  - `flywheel_branch_node` (mutating; scopes: `write`; HTTP: `POST /mcp/nodes/{node_id}/branch`; full-surface only): Create a child branch node.
56
51
  - `flywheel_merge_nodes` (mutating; scopes: `write`; HTTP: `POST /mcp/nodes/merge`; full-surface only): Merge nodes with caller-resolved node payload.
57
52
  - `flywheel_add_parent` (mutating; scopes: `write`; HTTP: `POST /mcp/nodes/{node_id}/parents/add`; full-surface only): Attach an additional parent edge to an existing node (keeps node identity, validates against cycles).
@@ -76,21 +71,22 @@ Flywheel is a graph-based system for tracking research work, decisions, and evid
76
71
 
77
72
  ### Compute and budgets
78
73
 
79
- - `flywheel_compute_list_options` (read; scopes: `compute`; HTTP: `GET /mcp/nodes/{node_id}/compute/options`; core surface): List managed compute options allowed for a node. When using grant-backed compute, pass the same compute_grant_id you will use for acquire.
80
- - `flywheel_compute_status` (read; scopes: `compute`; HTTP: `GET /mcp/compute/status`; core surface): Read managed compute lease status for the current user. Lease rows include ownership flags so hosts can distinguish user-owned leases from sponsor-visible campaign leases. When checking a grant-backed lease, reuse the same compute_grant_id passed to acquire.
81
- - `flywheel_compute_connection` (read; scopes: `compute`; HTTP: `GET /mcp/compute/connection`; core surface): Read SSH connection material for an active managed compute lease once flywheel_compute_status indicates the lease is usable. Only leases owned by the current user are connectable. Pass lease_id or node_id to disambiguate when needed.
74
+ - `flywheel_compute_list_options` (read; scopes: `compute`; HTTP: `GET /mcp/compute/catalog`; core surface): List managed compute catalog options. This endpoint is catalog-only and excludes grant/budget funding fields.
75
+ - `flywheel_compute_funding` (read; scopes: `compute`; HTTP: `GET /mcp/compute/funding`; core surface): Read grant-scoped compute funding context for a specific compute_grant_id.
76
+ - `flywheel_compute_status` (read; scopes: `compute`; HTTP: `GET /mcp/compute/status`; core surface): Read managed compute lease status for the current user and current lease_control_token scope. Lease rows include ownership flags so hosts can distinguish user-owned leases from sponsor-visible campaign leases. When checking a grant-backed lease, reuse the same compute_grant_id passed to acquire.
77
+ - `flywheel_compute_connection` (read; scopes: `compute`; HTTP: `GET /mcp/compute/connection`; core surface): Read SSH connection material for an active managed compute lease once flywheel_compute_status indicates the lease is usable. This tool is token-scoped to lease_control_token and only leases owned by the current user are connectable. Pass lease_id or node_id to disambiguate when needed.
82
78
  - `flywheel_approval_session_heartbeat` (read; scopes: `compute`; HTTP: `POST /mcp/approval-sessions/heartbeat`; core surface): Create or refresh a compute-grant approval session for the current MCP host session.
83
- - `flywheel_list_approval_sessions` (read; scopes: `compute`; HTTP: `GET /mcp/approval-sessions`; core surface): List approval sessions visible to the current user. Optionally include grant approval bindings for each session.
84
- - `flywheel_expire_approval_session` (mutating; scopes: `compute`; HTTP: `POST /mcp/approval-sessions/expire`; core surface): Expire the current compute-grant approval session and release its active leases.
85
- - `flywheel_request_compute_grant_approval` (mutating; scopes: `compute`; HTTP: `tool-mediated`; core surface): Request budget approval and return approval_url + request_id for user confirmation before managed compute acquisition.
79
+ - `flywheel_list_approval_sessions` (read; scopes: `compute`; HTTP: `GET /mcp/approval-sessions`; core surface): List approval sessions visible to the current user.
80
+ - `flywheel_expire_approval_session` (mutating; scopes: `compute`; HTTP: `POST /mcp/approval-sessions/expire`; core surface): Expire the current compute-grant approval session context without releasing active leases.
81
+ - `flywheel_request_compute_grant_approval` (mutating; scopes: `compute`; HTTP: `tool-mediated`; core surface): Request budget approval context before managed compute acquisition; branch on response status.
86
82
  - `flywheel_list_compute_grants` (read; scopes: `compute`; HTTP: `GET /mcp/compute/grants`; core surface): List active/exhausted compute grants available to the current user.
87
83
  - `flywheel_list_campaign_budgets` (read; scopes: `compute`; HTTP: `GET /mcp/nodes/{root_node_id}/campaign-budgets`; full-surface only): List campaign compute budgets for a campaign root. Organizer-only management view.
88
84
  - `flywheel_create_campaign_budget` (mutating; scopes: `compute`; HTTP: `POST /mcp/nodes/{root_node_id}/campaign-budgets`; full-surface only): Create an organizer-funded campaign compute budget shared with participants.
89
85
  - `flywheel_update_campaign_budget` (mutating; scopes: `compute`; HTTP: `PATCH /mcp/nodes/{root_node_id}/campaign-budgets/{compute_budget_id}`; full-surface only): Update hard caps or metadata for an organizer-funded campaign compute budget.
90
86
  - `flywheel_revoke_campaign_budget` (mutating; scopes: `compute`; HTTP: `DELETE /mcp/nodes/{root_node_id}/campaign-budgets/{compute_budget_id}`; full-surface only): Revoke an organizer-funded campaign compute budget.
91
- - `flywheel_compute_acquire` (mutating; scopes: `compute`; HTTP: `POST /mcp/nodes/{node_id}/compute/acquire`; core surface): Acquire managed compute for a node with explicit SKU + region and required compute_grant_id (returns accepted/completed lease state only; poll flywheel_compute_status for readiness, not SSH key material). This tool heartbeats and forwards approval_session_id.
92
- - `flywheel_compute_release` (mutating; scopes: `compute`; HTTP: `POST /mcp/compute/release`; core surface): Asynchronously release one managed compute lease by lease_id.
93
- - `flywheel_compute_release_all` (mutating; scopes: `compute`; HTTP: `POST /mcp/compute/release-all`; core surface): Asynchronously release all active managed compute leases for the current user.
87
+ - `flywheel_compute_acquire` (mutating; scopes: `compute`; HTTP: `tool-mediated`; core surface): Acquire managed compute with explicit SKU + region and required compute_grant_id (returns accepted/completed lease state only; poll flywheel_compute_status for readiness, not SSH key material). This tool forwards approval_session_id and optional context_node_id.
88
+ - `flywheel_compute_release` (mutating; scopes: `compute`; HTTP: `POST /mcp/compute/release`; core surface): Asynchronously release one managed compute lease by lease_id within the current lease_control_token scope.
89
+ - `flywheel_compute_release_all` (mutating; scopes: `compute`; HTTP: `POST /mcp/compute/release-all`; core surface): Asynchronously release active managed compute leases in the current lease_control_token scope; set force=true for explicit account-wide cleanup for the current user.
94
90
 
95
91
  ### Contract, audit, and export
96
92
 
@@ -113,15 +109,15 @@ Flywheel is a graph-based system for tracking research work, decisions, and evid
113
109
  ### Safe Node Update
114
110
 
115
111
  1. `flywheel_get_node`: Read latest node state before mutating fields.
116
- 2. `flywheel_stage_node_update`: Stage changes with fresh expected_revision and resolve 409 conflicts explicitly.
117
- 3. `flywheel_commit_node`: Commit once terminal and contract-complete.
112
+ 2. `flywheel_acquire_stage_lease`: Acquire a session-scoped stage lease before editing an existing node locally.
113
+ 3. `flywheel_commit_node`: Commit with `stage_session_id`, `base_committed_revision`, and full `staged_payload` once terminal and contract-complete.
118
114
 
119
115
  ### Empirical Workflow
120
116
 
121
- 1. `flywheel_stage_node_create`: Create a staged node, then set empirical fields before execution.
122
- 2. `flywheel_stage_node_update`: Set `kind=empirical`, `hypothesis`, and summary fields with fresh `expected_revision`.
123
- 3. `flywheel_request_compute_grant_approval`: If compute is needed, request budget approval first. Response status is `approval_required`.
124
- 4. Branch on `flywheel_request_compute_grant_approval.status`: Branch by response status. `approval_required` is a response state, not a request parameter.. if `approval_required` then `present_approval_url_to_user`: Present `approval_url` to the user; the user opens it and confirms budget approval.; `flywheel_list_approval_sessions`: After approval, list approval sessions with include_approvals=true and use the active `compute_grant_id` for the current approval_session_id.
117
+ 1. `flywheel_commit_new_node`: Commit a local staged new node to canonical storage as the first persistence boundary.
118
+ 2. `flywheel_commit_node`: Commit staged empirical fields with `stage_session_id`, `base_committed_revision`, and a full `staged_payload` once the working state is ready to publish.
119
+ 3. `flywheel_request_compute_grant_approval`: If compute is needed, request budget approval context first. Branch on response status.
120
+ 4. Branch on `flywheel_request_compute_grant_approval.status`: Branch by response status (`already_approved`, `approval_required`, `insufficient_credits`).. if `already_approved` then `reuse_compute_grant_id`: Use returned `compute_grant_id` directly for flywheel_compute_acquire.. if `approval_required` then `present_approval_url_to_user`: Present `approval_url` to the user; the user opens it and confirms budget approval.; `flywheel_list_compute_grants`: After approval, list active grants for the current `approval_session_id` and use the returned `compute_grant_id` for acquire.. if `insufficient_credits` then `request_user_credit_top_up`: No `approval_url` is returned. Ask the user to add credits, then retry flywheel_request_compute_grant_approval.
125
121
  5. `flywheel_compute_acquire`: Acquire lease with `compute_grant_id`; include `approval_session_id` from approval response.
126
122
  6. `flywheel_compute_status`: Poll until the active lease is ready; follow `recommended_next_action`.
127
123
  7. `flywheel_launch_execution`: Launch execution once compute and inputs are ready.
@@ -135,19 +131,20 @@ Flywheel is a graph-based system for tracking research work, decisions, and evid
135
131
 
136
132
  - `flywheel_resolve_node_slug`: resolve human-facing slug references. If response status is `ambiguous`, ask the user to confirm the intended node_id before mutating anything.
137
133
  - `flywheel_get_node`: read the current node state before writes.
138
- - `flywheel_stage_node_update`: update in-progress node fields (title/content/summary, kind/outcome/hypothesis/insights/no_artifacts_reason), always with fresh `expected_revision`.
134
+ - `flywheel_acquire_stage_lease`, `flywheel_heartbeat_stage_lease`, `flywheel_release_stage_lease`: coordinate session-scoped local staged edits for an existing node before commit.
139
135
  - `flywheel_get_campaign_snapshot`: read the current derived campaign state for this node's root campaign instead of inferring standings from freeform text.
140
136
  - `flywheel_get_node_sharing`: after sharing writes, verify with flywheel_get_node_sharing before reporting private/shared/public state.
141
- - `flywheel_compute_status`: check first when work may need managed compute (GPU), to detect any active user lease state.
137
+ - `flywheel_compute_status`: check first when work may need managed compute (GPU), using the active lease_control_token from host context (or pass it explicitly).
142
138
  - `flywheel_list_compute_grants`: list active compute grants (funded by user/root budgets) and select one `compute_grant_id` for acquisition.
143
- - `flywheel_request_compute_grant_approval`: request/confirm budget before acquire and choose a budget source (`user` or `root`); this returns `approval_url` + `request_id` when interactive approval is needed.
144
- - `flywheel_compute_connection`: read SSH connection material for the active user lease once status indicates the lease is usable.
145
- - `flywheel_compute_list_options`: use when a lease is needed and no suitable active lease exists, then select explicit provider-qualified `offer_id` (`provider::offer_id`) and `region`. Consider each option's `availability_mode`: `live_capacity` means provider-reported capacity, `allocation_time` means capacity is confirmed only when `flywheel_compute_acquire` attempts provisioning.
146
- - `flywheel_compute_acquire`: provision compute once requirements are clear. This requires a valid `compute_grant_id` and returns lease/provisioning state only (not SSH key material).
147
- - `flywheel_compute_release`: release compute when no longer needed.
148
- - `flywheel_launch_execution`, `flywheel_list_executions`, `flywheel_terminate_execution`: manage execution lifecycle.
139
+ - `flywheel_request_compute_grant_approval`: request/confirm budget before acquire and choose a budget source (`user` or `root`); branch on status (`already_approved`, `approval_required`, `insufficient_credits`).
140
+ - `flywheel_compute_connection`: read SSH connection material for the active user lease once status indicates the lease is usable, scoped by lease_control_token.
141
+ - `flywheel_compute_list_options`: use when a lease is needed and no suitable active lease exists, then select explicit provider-qualified `offer_id` (`provider::offer_id`) and `region`. This is a catalog-only read and excludes grant/budget money fields.
142
+ - `flywheel_compute_funding`: read grant-scoped funding context (`grant_cents`, `remaining_cents`, backing budget fields) for the selected `compute_grant_id` before acquire.
143
+ - `flywheel_compute_acquire`: provision compute once requirements are clear. This requires a valid `compute_grant_id` and returns lease/provisioning state only (not SSH key material). Capture `compute.lease_control_token` from the response for follow-up lease control tools.
144
+ - `flywheel_compute_release`: release compute when no longer needed, scoped by lease_control_token.
145
+ - `flywheel_launch_execution`, `flywheel_list_executions`, `flywheel_terminate_execution`: manage execution status transitions.
149
146
  - `flywheel_prepare_artifact_uploads`: prepare one or more signed raw-file upload requests for concrete deliverables/evidence produced by the work.
150
147
  - `flywheel_finalize_artifact_uploads`: finalize a staged artifact batch and append all uploaded artifacts in one revision bump.
151
148
  - `flywheel_delete_artifact`: remove an accidental/obsolete node artifact.
152
149
  - `flywheel_list_artifacts`, `flywheel_get_artifact`: inspect node artifact metadata (`title` is the display label) and consume `storage_url` for raw artifact bytes only.
153
- - `flywheel_commit_node`: finalize staged node state once terminal and contract-complete (optional summary override only).
150
+ - `flywheel_commit_new_node`, `flywheel_commit_node`: publish the caller's full staged payload for an existing node once terminal and contract-complete; requires an active stage lease and explicit `base_committed_revision`.
@@ -0,0 +1,163 @@
1
+ ---
2
+ name: flywheel-prove
3
+ description: Local Lean theorem proving and formalization pipeline.
4
+ ---
5
+
6
+ # flywheel-prove
7
+
8
+ ## When To Use
9
+
10
+ Use this skill when you need to scaffold or run a local Lean theorem proving pipeline in a repo.
11
+ Use it for formalization tasks that require filling `sorry` placeholders and proving statements in Lean.
12
+ Use it when converting theorem-heavy source material into Lean modules, iterating on failed verification, or producing reproducible proof artifacts for review.
13
+
14
+ ## Prerequisite (Required)
15
+
16
+ Before running the pipeline, ensure both `uv` and the Lean toolchain manager `elan` are installed on the local machine.
17
+
18
+ - If `uv` is missing, bootstrap it by OS:
19
+ - macOS/Linux:
20
+ ```bash
21
+ curl -LsSf https://astral.sh/uv/install.sh | sh
22
+ ```
23
+ - Windows (PowerShell):
24
+ ```powershell
25
+ irm https://astral.sh/uv/install.ps1 | iex
26
+ ```
27
+
28
+ - If `elan` is missing, bootstrap it by OS:
29
+ - macOS/Linux:
30
+ ```bash
31
+ curl https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh -sSf | sh -s -- -y
32
+ ```
33
+ - Windows (PowerShell):
34
+ ```powershell
35
+ Invoke-WebRequest -Uri https://raw.githubusercontent.com/leanprover/elan/master/elan-init.ps1 -OutFile elan-init.ps1
36
+ powershell -ExecutionPolicy Bypass -File .\elan-init.ps1
37
+ ```
38
+
39
+ Then verify:
40
+
41
+ ```bash
42
+ uv --version
43
+ elan --version
44
+ lean --version
45
+ lake --version
46
+ ```
47
+
48
+ ## Workflow
49
+
50
+ 1. Scaffold pipeline into the current repository:
51
+
52
+ ```bash
53
+ python <skill-root>/scripts/scaffold_pipeline.py --repo-root <repo-root> --setup-env
54
+ cd <repo-root>/theorem_pipeline
55
+ ```
56
+
57
+ `<skill-root>` is the directory that contains this `SKILL.md`.
58
+ `pypdf` is installed via template dependencies during `uv sync`; do not use `pdftotext`.
59
+
60
+ 2. Move into `<repo-root>/theorem_pipeline` and initialize:
61
+
62
+ ```bash
63
+ uv run -m tproof.cli doctor
64
+ uv run -m tproof.cli init --build
65
+ ```
66
+
67
+ Warning: `init --build` may take a few minutes on first run (toolchain/dependency fetch + first build). It is typically much faster on later runs when proving multiple artifacts in the same workspace.
68
+ Requirement: Before executing `uv run -m tproof.cli init --build`, the agent MUST explicitly warn the human user in-chat about this first-run delay.
69
+
70
+ 3. Normalize source context before formalization (conditional by input type).
71
+ - First, identify the source type from the user request.
72
+ - If the source is a PDF:
73
+ - Extract text with `pypdf` (do not use `pdftotext`), enforce UTF-8-safe output, and sanitize mojibake.
74
+ - Required artifact A (full cached extraction):
75
+ - `theorem_pipeline/workspace/contexts/<pdf_stem>.txt`
76
+ - Example: `paper.pdf -> theorem_pipeline/workspace/contexts/paper.txt`
77
+ - Required artifact B (theorem-focused excerpt):
78
+ - `theorem_pipeline/workspace/contexts/<theorem_slug>_source_excerpt.txt`
79
+ - Example: `proposition2_source_excerpt.txt`
80
+ - Keep both artifacts. The full extraction is a reusable cache for proving multiple theorems from the same paper; do not reconvert the PDF if the cached full extraction already exists and is still valid.
81
+ - If the source is not a PDF (for example: prompt text, `.txt`, `.md`, `.tex`, or fetched online content):
82
+ - Skip PDF conversion.
83
+ - Use the source exactly as requested by the user.
84
+ - Store the normalized local source artifact under `theorem_pipeline/workspace/contexts/` (for example, `<theorem_slug>_source.txt`), and optionally store a focused excerpt as `<theorem_slug>_source_excerpt.txt` when useful.
85
+ - Explicit ASCII rewrites of common symbols are allowed (for example: `R-field -> Real`, `norm-notation -> norm x`, `leq -> <=`, `and -> /\\`, `arrow -> ->`).
86
+
87
+ 4. Start a run:
88
+
89
+ ```bash
90
+ uv run -m tproof.cli start-run --prompt-file ./workspace/prompts/fill_sorries.txt
91
+ ```
92
+
93
+ 5. Formalization contract (required before proving): define
94
+ - theorem name,
95
+ - exact assumptions,
96
+ - target conclusion,
97
+ - whether corollaries are required (`help` / `match` / `upper-bound`).
98
+
99
+ 6. Use required model routing:
100
+ - Mathematical proof work: a deep-thinking model suitable for complex mathematical reasoning.
101
+ - Programming/scripting/reporting work: a smaller coding-oriented model for automation and logs.
102
+
103
+ 7. Artifact destination (mandatory, no exceptions):
104
+ - Final theorem artifacts MUST live under:
105
+ - `theorem_pipeline/workspace/lean_project/ProofWorkspace/Final/`
106
+ - Never write final artifacts under `workspace/staging/` (forbidden).
107
+ - Lean module files must use Lean-safe filenames (no hyphens), for example:
108
+ - full formal proof file: `<Name>Full.lean`
109
+ - human-readable sketch file: `<Name>Sketch.md`
110
+ - example pair:
111
+ - `ProofWorkspace/Final/Proposition1Full.lean`
112
+ - `ProofWorkspace/Final/Proposition1Sketch.md`
113
+
114
+ 8. Fast iteration loop:
115
+
116
+ ```bash
117
+ lake env lean <tmpfile>
118
+ ```
119
+
120
+ Use `<tmpfile>` for quick local iterations, then copy finalized proof into the target module.
121
+
122
+ 9. Sidecar proof sketch (required):
123
+ - For each produced full proof file `<Name>Full.lean`, create a sibling sketch file `<Name>Sketch.md` in `ProofWorkspace/Final/`.
124
+ - Keep the sketch human-readable for paper-writing: theorem statement, assumptions, proof idea/structure, and how corollaries follow.
125
+ - In sketch files, write mathematics using LaTeX formulas with dollar syntax (`$...$` for inline and `$$...$$` for display).
126
+ - This is safe in the Lean project because the pipeline reindex/verification scans only `*.lean`.
127
+
128
+ 10. Reindex and verify:
129
+
130
+ ```bash
131
+ uv run -m tproof.cli reindex
132
+ uv run -m tproof.cli verify
133
+ ```
134
+
135
+ `verify` must pass with no unresolved `sorry` and no `.lean`/`.md` final artifacts under `workspace/staging/`.
136
+
137
+ 11. Mark run status:
138
+
139
+ ```bash
140
+ uv run -m tproof.cli set-status <run_id> COMPLETE --note "verified locally"
141
+ ```
142
+
143
+ ## Completion Checklist
144
+
145
+ Always report:
146
+
147
+ - theorem file path,
148
+ - sidecar proof sketch path,
149
+ - final artifact directory path (`theorem_pipeline/workspace/lean_project/ProofWorkspace/Final/`),
150
+ - source context artifact path(s):
151
+ - if PDF input: full extraction path (`<pdf_stem>.txt`) and excerpt path (`<theorem_slug>_source_excerpt.txt`);
152
+ - otherwise: normalized source path used (for example `<theorem_slug>_source.txt`) and excerpt path if created,
153
+ - theorem names,
154
+ - verify log path,
155
+ - run id/status.
156
+ - Add one extra final report line (without changing existing format): `SUCCESS` or `FAIL: <reason>`.
157
+
158
+ ## Resources
159
+
160
+ - Use `scripts/scaffold_pipeline.py` to install the full local pipeline template.
161
+ - Use `references/workflow.md` for detailed run loop guidance.
162
+ - Use `assets/pipeline_template/` as the canonical implementation source copied into each repository.
163
+ - Use `agents/interface.yaml` as the universal skill interface metadata.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Flywheel Prove"
3
+ short_description: "Local Lean theorem proving pipeline"
4
+ default_prompt: "Use $flywheel-prove to scaffold and run a local Lean theorem proving pipeline."
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env sh
2
+ set -eu
3
+ uv run -m tproof.cli "$@"
@@ -0,0 +1,2 @@
1
+ @echo off
2
+ uv run -m tproof.cli %*
@@ -0,0 +1,23 @@
1
+ [project]
2
+ name = "tproof"
3
+ version = "0.1.0"
4
+ description = "Local Lean theorem proving pipeline"
5
+ requires-python = ">=3.10"
6
+ dependencies = [
7
+ "typer>=0.24.1",
8
+ "rich>=14.3.3",
9
+ "pypdf>=4.0.0",
10
+ ]
11
+
12
+ [build-system]
13
+ requires = ["setuptools>=68", "wheel"]
14
+ build-backend = "setuptools.build_meta"
15
+
16
+ [tool.setuptools]
17
+ package-dir = {"" = "src"}
18
+
19
+ [tool.setuptools.packages.find]
20
+ where = ["src"]
21
+
22
+ [tool.ruff]
23
+ line-length = 100
@@ -0,0 +1,2 @@
1
+ @echo off
2
+ uv run -m tproof.cli smoke-test %*
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env sh
2
+ set -eu
3
+ uv run -m tproof.cli smoke-test "$@"
@@ -0,0 +1 @@
1
+ """Local Lean theorem proving pipeline."""