define-goal
Turns a plain-language want — or a whole document of them — into a measurable goal contract, grounded by recon. Produces goals only; never implements.
Four skills turn what you ask for into a measurable goal queue. Agents claim each goal, build it in an isolated worktree, and merge only what passes a deterministic gate — autonomy you can actually leave running.
The skills chain: capture wants as contracts, queue them in the repo, work the queue with isolated agents, and integrate verified merges — with a loop designed to run unattended.
Plain-language want → a measurable contract, grounded by recon. Queued into docs/goals/.
Goal files + index.yaml live in the repo. Status lives only in the index, arbitrated by git push.
Claims ready goals, spawns one isolated implementer per goal in its own worktree, shepherds the PR.
Under merge: auto, a deterministic gate re-verifies on a fresh checkout, then the orchestrator merges.
They activate automatically when the conversation matches, or you invoke them directly. In Claude Code they're namespaced flywheel:<skill>.
Turns a plain-language want — or a whole document of them — into a measurable goal contract, grounded by recon. Produces goals only; never implements.
The factory orchestrator. Claims queued goals, spawns one isolated implementer per goal, and integrates verified merges through a deterministic gate. Orchestrates only.
Designs the loop contract — prompt + verification + stop conditions — so an unattended run actually converges and stops, instead of just “keep working on X”.
One-pass preflight for a repo + machine: software, gh auth, merge allow-rule, branch protection, CI, queue state. Auto-fixes everything local; never merges.
No issue-body size limits, no per-repo label bootstrap — versioned with the code. PRs stay the review and merge surface.
# status lives ONLY in index.yaml — goal files are immutable contracts docs/goals/ ├── index.yaml # config + queue state ├── 001-faster-checkout.md ├── 002-fix-auth-redirect.md └── done/ # archived completed goals
config: base: main # branch goals fork from / merge back to state_branch: main # where the queue lives (default = base) merge: auto # pr = human merges · auto = factory merges wip: 2 # parallelism cap model: inherit # inherit | sonnet | haiku validation: risk_based # off | risk_based | required
Decided from real production runs, encoded so parallel sessions and unattended loops don’t corrupt the queue.
single sourceStatus lives only in index.yaml; dual-writing frontmatter drifts.claim protocolpull → flip one entry → commit → push; push acceptance arbitrates parallel sessions.isolationImplementers branch goal/<id> from origin/<base> and never touch docs/goals/.blocked ≠ lostA blocked goal keeps a reason and is surfaced under needs-you, never re-dispatched into livelock.auto-mergeOne goal at a time, sync-with-base then re-verify on a fresh checkout before every merge.pragmatic-growth marketplace.Same plugin, both CLIs — Droid auto-translates the .claude-plugin/ manifest, and the skills detect the runtime to use the right paths and commands.
/plugin marketplace add pragmaticgrowth/flywheel /plugin install flywheel@pragmatic-growth
/plugin marketplace update pragmatic-growth
droid plugin marketplace add https://github.com/pragmaticgrowth/flywheel droid plugin install flywheel@pragmatic-growth
droid plugin marketplace update pragmatic-growth
/factory-doctor # preflight the repo + machine /define-goal I want the API p95 latency under 200ms /loop 15m /dispatch # work the queue, unattended