aipromptguide.com · A collection of production-grade Claude Code dynamic workflows: the prompts and orchestration that guide the AI through real engineering work, plus the shared design principles they're all built to.
Each workflow is a background Workflow engine (a .mjs script) paired with a CLAUDE.md operator
guide. The guide is the prompt: it drives plan mode and the human approval gate outside the engine,
then runs the engine to do the work. The build workflows leave the result test-verified, wired in,
and staged for you to commit. The generative ones leave cited files for you to use. Either way,
nothing is ever committed for you.
| Workflow | Trigger | Flow | Use it for |
|---|---|---|---|
| develop | /aipg:develop |
map | Build the blocks of an approved plan file. Each block is one bounded feature, one slice of a migration across many call sites, or one triaged issue inventory. Each accepted block is staged. |
| refine | /aipg:refine |
map | Review a plan file before develop builds it. A critic checks each block against the code for defects only, and an editor folds each gap into the plan. It stops after one clean round. |
| debug | /aipg:debug |
map | Find production defects in a repo or change. Each unit's issues are written as a fix-mode plan file that develop builds once you triage it. An inventory from manual testing or bug reports works the same way. |
| enhance | /aipg:enhance |
map | Audit: what a working system could do better. One lens per angle → verified, impact-scored proposals you triage. Nothing auto-applied. |
| brainstorm | /aipg:brainstorm |
map | Diverge: one fully-committed variation per lens (designs, ideas) for you to pick or combine. No AI verdict. |
| decide | /aipg:decide |
map | Converge: lensed analysis → a weighted decision matrix → a justified conclusion, adversarially reviewed. |
| investigate | /aipg:investigate |
map | Search: find an answer that already exists and qualify it against fixed pass/fail criteria, until nothing qualifying is left unsearched. |
| docs | /aipg:docs |
map | Provision: copy the docs a project needs verbatim (web/repo/files) → curate + index into a folder the LLM builds against. |
develop is the one build workflow. It writes the code, reviews it and stages it. refine and debug produce the plan files develop builds. The last five are generative and read only. They produce proposals, creative options, a decision, a determination, or a curated doc set, with no code and nothing staged or committed.
Two pairs are worth keeping straight. debug and enhance: something the system gets wrong is a
defect, which debug fixes; something it could do better is an enhancement, which enhance proposes and
you decide on. decide and investigate: when no established answer exists and the work is weighing
trade-offs, that's decide; when the answer is already out there and the work is finding it and proving
it fits, that's investigate. The tell is whether missing a requirement is a trade-off or simply
disqualifying.
All eight share the design rules in principles/, the fifteen Workflow Principles (lean, file bus, no busy work).
The Flow column is a diagram of what a run actually does — every agent, gate, loop and terminal state, rendered inline by GitHub. Read one before starting a run you have not done before: the terminal states in particular are the part worth knowing in advance, since "ran out of rounds" and "proved there is no answer" are different results that look alike in a summary.
Those maps are generated, never hand-drawn. tools/gen-flows.mjs runs each engine against scripted
agent replies and watches which agents it spawns, so a diagram can only ever show a path that really
runs. That makes it a linter as much as a picture: it fails node tests/run.mjs when a map goes stale,
when an engine grows a branch no scenario reaches, or when meta.phases stops matching the phases the
agents actually run under.
This repo is a Claude Code plugin (aipg), and its skills are thin and stable. Each carries
no workflow prompt, only the install's resolved paths and a pointer to the matching
workflows/<x>/CLAUDE.md. That split is deliberate:
- The prompt lives in the workflow, not the skill. Plan mode (and its approval gate) must run
outside a background Workflow, so the
CLAUDE.mdguide, not the engine, drives it. Loading a workflow the ordinary way wouldn't include that prompt. Pointing at theCLAUDE.mddoes. - One update moves everything together. Skills, guides, engines and the
plan-blocktool ship as one plugin version — nothing to copy, nothing to drift.
You run /aipg:develop → Claude reads the plugin's workflows/develop/CLAUDE.md → plan mode, the
refine review, then your approval → runs develop-cycle.mjs by path → staged result you review
and commit
/plugin marketplace add Blakeem/aipromptguide-workflows
/plugin install aipg@aipromptguide
The workflows land in the plugin cache, and run state goes to the plugin's persistent data dir
(~/.claude/plugins/data/…), outside every project. Then run one, such as
/aipg:develop add a search_docs MCP tool. Plan it first.
Since Claude Code only starts a workflow from a folder the session can read, the first run asks if Claude can read the plugin folder. Say yes and a Read rule is added to your user settings. It stays in place when the plugin updates.
-
Clone it anywhere (in a project, gitignore it):
git clone https://github.com/Blakeem/aipromptguide-workflows.git aipg echo "aipg/" >> .gitignore
-
Open the checkout in Claude Code — the root
CLAUDE.mdroutes to each workflow's guide, withroot= the checkout. To use the plugin's skills against a local clone, add it as a local marketplace instead:/plugin marketplace add ./aipgthen/plugin install aipg@aipromptguide.
Every engine takes two separate paths, and they are deliberately not the same directory:
E:/myproject/ ← target.repo the project itself, the folder holding .git
├── .git/
├── src/
└── aipg/ ← root run-state lands at aipg/runs/<runId>/
└── workflows/
target.repois the repo being worked on. Agents rungit -C <target.repo> …against it, and it is the only place code is ever changed or staged.rootis the base the run-state hangs off.<root>/runs/<runId>/holds the review files, the ledgers, and any parked patch. Normally the checkout's own folder, so nothing lands in your project.
Keeping them apart is what makes the blind review work: the issue files live outside the repo under review, so a reviewer that is supposed to judge a diff on its own merits cannot wander into them. The develop, refine and debug engines warn if you point run-state inside the target repo. develop and refine also warn when a plan file resolves inside it.
It also means one checkout can drive any number of projects. Point target.repo at each in turn and
give each its own runId. The run-state stacks up under root, so you can queue work across several
repos and still read every trail in one place:
aipg/runs/api-v2-migration/ ← target.repo E:/work/api
aipg/runs/dashboard-search/ ← target.repo E:/work/dashboard
You never type these yourself. Tell Claude which project you mean and it fills them in as pre-run setup.
There is no default for target.repo on the engines that write code, because guessing wrong would point
a build, or a park's git checkout, at the wrong repo. They fail loudly instead.
Installed as the plugin, the same two-path rule holds — only root moves. The plugin install dir
is version-swapped on every update, so run-state cannot live beside the engines there. The skills point
root at the plugin's persistent data dir instead, and everything stacks up the same way, still outside
every project:
~/.claude/plugins/cache/aipromptguide/aipg/<version>/ ← the engines (read-only, swapped on update)
~/.claude/plugins/data/aipg-aipromptguide/ ← root: runs/<runId>/ + plans/<runId>/
Plugin: /plugin → Installed → aipg → update (auto-update lives under Marketplaces, off by
default) — skills, guides and engines move together, and every commit is a new version (plugin.json
carries no version field, so the git commit SHA is the version). Checkout:
cd aipg && git pull # refreshes every workflow's CLAUDE.md + engineWhat's changed, newest first: new workflows, changes to how they work, and bugs worth knowing about.
- Leaner prompts. Each engine's agent prompts are 6 to 14 percent shorter, and so are the skill descriptions Claude keeps loaded. The concision pass changed no rule.
- docs drops a superseded recapture. The round-2 curator reads the previous
INDEX.md. When a gap-fill file recaptures a flagged source, the curator deletes the superseded file and drops it from the index. - A parked block's resume step names the status flip. Park's note and develop's followups tell you to flip the block to todo before you relaunch it with runOnly. runOnly selects only todo blocks.
- A dirty tree at launch never parks your edits. develop now checks for a clean tree before it checks the plan. Before, a developer that stopped at the tree check was reported as unable to read its plan, and park moved your own edits into a patch.
- Park leaves a clean tree. It saves a block's new files even when the block changed no tracked
file, and it removes
git add -Nentries along with their files. - investigate reports a verified no-solution as one. A no-solution that rests on criteria nothing can meet no longer ends as blocked on you.
- The plugin grant follows links. When the plugin folder is reached through a link,
plugin-access.mjsadds a rule for both paths. A skill skips the question when its working directory is the plugin folder or a folder that contains it.
- Installed skills launch their engines from any project. Before this, a skill run outside this
checkout failed with "scriptPath must be a script path this tool returned, or a file you can already
read". Each skill now runs
tools/plugin-access.mjsfirst, which adds one Read rule for the plugin folder once you agree. See Install (plugin).
- Statuses reach the plan file on their own.
plan-edit.mjs args <plan>is the step before every develop launch. It applies the statuses of every finished develop run from the run records Claude Code keeps, then prints develop's args. This works for a run that failed or was stopped too, and thesynccommand is gone. - Small fix blocks share one pass.
plan-edit.mjs args --pack <repo>groups triaged issue files into passes of up to 5000 lines of touched code, so one developer, one reviewer and one verifier build several small blocks. Each block keeps its own file and statuses. - enhance rejects a proposal whose risk outweighs it, and counts them in
summary.tooRisky. - Prompt snapshots.
tests/snapshots/<engine>.prompts.mdholds every distinct prompt each engine sends, so a prompt change shows in the diff under every mode and round it reaches. tools/freeze-notes.mjscopies an engine for a live test in which every agent reports what in the workflow was unclear or wasteful. It now reaches every agent, including brainstorm's.- A question for the user no longer stops an unordered develop run. The block is parked and marked
blocked, and the remaining blocks continue. An ordered run still stops there. - Launch every workflow from a notification turn. Claude Code copies the launching turn's user message into every agent's prompt, so a run is now launched in the turn a background pre-launch command's notification starts. develop's sweep runs on opus for the same reason.
- refine flags a block that relies on text outside itself, since develop hands each agent only its own block.
feature,migrateand debug'sresolveare retired, and develop replaces all three. A block'smodepicks the job.featurebuilds one bounded change,sectionconverts one slice of a migration, andfixworks a triaged issue inventory. refine replaces feature's refine phase. A plan written for feature or migrate needs## Plan:headers with a preamblegate:line.gauntletis retired with no successor.plan-block.mjshas one keyword.--kindnow fails with a message, and a## Gateheading is body text. Every block is## Plan:with its gate in the preamble.- develop returns
statusSync, every block and issue status a run decided. A fix block that did not land marks its fixed issuesneeds-attention, neverfixed. - Section files default to
suite: scoped, so a migration's intentionally red suite no longer fails a green gate. Asweep: goal-coveragefile needs agoal:line. - develop carries the failure-path tests of the three engines it replaced, including dead reviewers, the plan amendment protocol and fix-mode agent deaths.
- develop's acceptance confirms every STALE claim. A fix block whose developer calls every entry
stale now goes to acceptance, and a refuted claim never syncs
stale. A block that passed but was left unstaged syncsdone, so the documented recovery is to stage it and relaunch. - debug review keeps every finding. Distinct findings in one file and category all reach the
verifier, which folds true duplicates. A dead reviewer or verifier is returned in
failedand is never counted as a clean unit. Colliding unit ids and an invalidreviewSeverityfail at launch. - Agent prompts were tightened from the agents' own reports. Live runs asked every agent to note workflow problems from its seat. Those notes fixed the blind reviewer's scope and gate commands, refine's grading and one-fix-per-gap rules, and review's dangling marker and context-read rules.
developgained fix mode, anddebug's verifier writes plan-bus fix blocks. Eachissues/<unit>.mdis now a## Plan:fix-mode block develop builds directly: its fix worker verifies each### [<id>]entry still exists (vanished = stale), fixes ACTIONABLE decisions only, and returns per-issue results the operator syncs back into the file's- status:lines withplan-edit.mjs. Two new round-1 terminals: an all-stale block is done without reviewers, and an all-skipped block is blocked, never silently done.resolve-cyclestill works unchanged during the transition.- New engine: refine — converging plan review, replacing
feature'sphase:"refine"(which never converged: five runs on one plan kept adding detail). A read-only critic judges every todo block under a fixed defect bar and severity floor, writing findings to a critique file. A minimal-fold editor changes nothing a gap does not name, declines to a ledger, and re-validates the plan throughplan-block.mjsafter every fold. One clean round ends the loop. Structural findings (block order, an oversized block, a gap in an already-built block) come back as questions instead of edits. - New engine: develop — the merged successor to
feature's build phase andmigrate's run phase. It builds thestatus: todoblocks of one approved plan file, each block'smodepicking the engine-held frame (feature or section), with the file keys (ordered,suite,sweep,goal) deciding park semantics, suite strictness, and the whole-goal sweep. New hardening over its parents: a missing unstaged attestation now halts, and a flagged block is re-reviewed even when a later round produces no changes (migratereceived the same fix).featureandmigratestay runnable during the transition. plan-block.mjsreads the plan-bus metadata grammar. First step of the plan-bus rework (one develop engine consuming plans every workflow produces). The default kind now parses file keys (goal,ordered,suite,sweep), a block preamble (mode,gate,status), and### [<id>]issue entries in fix-mode blocks.--listemits one object, the file keys plus ablocksarray, instead of the old array.--kind sectionand--kind componentare unchanged transition aliases. Unknown keys, illegal values, and duplicate ids across the block and issue namespaces all fail loudly.- New
tools/plan-edit.mjs, the one tool that writes plan files.setupserts one block or issue metadata line.moverelocates an issue entry between blocks or files (a cut, never a copy). A separate file from the read-only tool agents run, so the run-time allowlist rule never covers a write. featurethrows on a malformedplansarg. Aplanspresent but not a non-empty array used to fall through to the single-plan path and build the whole roadmap as one plan at exit 0.
- Every blind reviewer is now blind by placement (feature, migrate, debug's resolve — following
gauntlet's precedent): the blind prompt's only run-state paths point into
runs/<runId>/gate/(its review files +DISMISSED-*ledgers); NEEDS-USER, AMENDED, critiques and debug's issue files all live outside it. Closes a real leak — the AMENDED pointer line in NEEDS-USER.md handed the blind reviewer a route to verbatim plan text — and debug's documented instruction-only-blindness gap. Principle #5 amended to match (blind stage reads the gate-scoped ledger; acceptance reads ledger + user notes). Breaking only for in-flight runs resumed from the old layout. - Agent-reported preconditions are value-guarded in feature/migrate/resolve: the
Number()/?? -1coercion onbaseline_dirty_files(and resolve'sissue_entries_found) is replaced by the typeof guard gauntlet shipped —null/false/''/[]now warn ("precondition was NOT verified") instead of silently reading as a clean tree; resolve's schema now requires both fields. - Flow maps: at most one label per node pair, ever. The second labeled edge of a boundary+back
pair carries a bounded
E<n>marker with its full conditions in a new## Edgestable, and the boundary edge of a marked pair renders caption-less (the table's fixed sentence carries the next-item advance) — mermaid places both labels of a pair at the same midpoint, so one label per pair is the only shape that cannot collide. All 10 maps measured overlap-free withtools/render-flows.mjs. Also:plan-block.mjs+wt.mjsCLI entry detection is symlink-proof. - New workflow:
gauntlet(/aipg:gauntlet) — the Gauntlet Loop pattern (builder + fresh blind critic vs. an inspectable exemplar) adapted to the house principles.phase:"mvp"builds an approvedCOMPONENTS.mddecomposition to a working, code-sound alpha: per component, builder → blind code gate (defects AND structural debt) → staged; a component that cannot pass parks and STOPS.phase:"refine"— also the entry point for an existing product — climbs the staged product towardBAR.mdin waves: one fresh critic per open quality aspect observes the RUNNING product with its own persistenttestbed/tooling, A/Bs it blind against the exemplar, names ONE largest gap with evidence; an improver closes exactly that gap; the wave diff is blind-reviewed and staged.cycles(the wave budget) is required with no default — you are the brake — and every stop lands on a staged clean tree, so resume = buy more waves (startWave). No mid-run user escalation by design: agents settle judgment calls via decision matrix intoSETTLED.md, the end-of-run audit; only environment faults halt. Ships withplan-block.mjs --kind component, 49 flow scenarios, and full dead-agent coverage. A rendering overlap noted here at ship time was closed the same day — see the flow-maps bullet above.
- All eight skills are model-invocable, and the auditor agent is gone. The three build skills'
disable-model-invocationflag also hid them from Claude's context, so calling one out by name ("use the aipg feature workflow") only worked as a slash command — dropped; the opt-in gate is each description's "only when the user explicitly asks" clause, whichtests/skills.test.mjsnow enforces in the new direction. Theworkflow-principles-auditoragent registered in every project a user-level install touched — deleted; audit an engine by running debug withprinciples/WORKFLOW-PRINCIPLES.mdas a lens, keeping the principles doc the single source of truth. - Principle #15 is now machine-checked, and the plan-defect wedge is closed (batch h2, phased):
tests/dead-agent.test.mjskills every agent role once per engine and demands a visibly different outcome — building it exposed and fixed four real launderers (feature-cycle's dead develop/quality/ acceptance read asdone (staged); docs-cycle's dead scrubber logged✓ scrubbed: 0 file(s)). And a blind-review finding that indicts the PLAN's own text is no longer a dead end: a developer that VERIFIES the defect fixes it and records the override inAMENDED-<id>.md(read by acceptance, never the blind reviewer), so the wt-land-style wedge cannot recur. - First live parallel batch shipped two hardening features (
planpath-guard+attestation-scoping), built simultaneously in worktrees and landed throughaipg/int-h1— the wt.mjs lifecycle's own shakedown. The features: feature + migrate now warn when a plan file resolves insidetarget.repo(blindness by placement made structural), and the attestation sweep binds each schema's consumer check to itsagent()call's receiver variable (closing the shared-field-name mask; three previously-hidden deadnotesfields got real consumers). - Every code-review role now runs on opus (feature/migrate/resolve blind quality critics + debug's review finder). Measured on the wt-tooling build: the fast tier surfaced one deep-verified defect per round on large diffs, serializing discovery across rounds and burning the round budget.
- Parallel runs via batch worktrees:
tools/wt.mjs+docs/worktree-batches.md. Run several engine runs at once, each chain in its own git worktree (init/prep), landed one at a time into a per-batch integration branch (land: index-only accept commit → sync → gate on the merged state → merge, serialized by a heartbeat-liveness lock) and cleaned without--forceso unlanded work is refused, not deleted. Areference-transactionhook refusesgit stashinsideaipg-*worktrees —refs/stashis the one stack every worktree shares, and a straypopwould inject one chain's work into a sibling's blind-review diff. Built from theworktree-parallelism-1decide run (E-c); engines unchanged — a worktree is just a differenttarget.repo. - New principle #15: "A missing result is its own outcome — fail loud, resume clean." A dead/null
agent must never be conflatable with success, a clean verdict, or an empty result; every
agent()consumption site states its death policy (solo critical → throw, build loop → park, auxiliary → log + record), write-attestations must be consumed, and any failure resumes through the same clean-tree + durable-trail mechanism as everything else. A debug run over the engines themselves found and fixed the five engines that violated it (dead-agent visibility guards in review, resolve, enhance, migrate; plus gate and numeric-arg validation). - Plan mode is now the agent's judgment call (feature + migrate guides): default INTO plan mode when
the task is complex, needs the user's answers, or touches something important; skip it when simple,
obvious, or already planned — the user always has the final say. A plan authored without plan mode
lives at
plans/<runId>/underroot(the plugin data dir when installed), same rules as snapshots. - The repo is now a Claude Code plugin (
aipg) and its own marketplace (aipromptguide)./plugin marketplace add Blakeem/aipromptguide-workflows→/plugin install aipg@aipromptguide. The copy-me command templates incommands/became plugin skills (skills/<x>/SKILL.md), so the triggers are now namespaced:/aipg-feature→/aipg:feature, and likewise for all eight. A bare checkout still works exactly as before (rootCLAUDE.mdrouter,root= the checkout); the old copied/aipg-*commands keep working against a checkout but no longer ship. - Run-state moved out of reach of plugin updates. Installed, the engines live in the version-swapped
plugin cache; the skills therefore point
rootat the plugin's persistent data dir (~/.claude/plugins/data/…), whereruns/<runId>/andplans/<runId>/survive updates — and stay outside every target repo, where the blind reviewer cannot reach them. featureandmigratetakeblockTool(optional): the absolute path toplan-block.mjsfor the roadmap/section block command, defaulting to<root>/tools/plan-block.mjsas before. Required in practice whenrootis not a checkout (the plugin data dir has notools/); the skills pass it automatically.featureandmigratedocument an autonomous path — the user hands a finished plan (or says to run unattended): skip plan mode, snapshot the plan toplans/<runId>/if a reviewer could reach it (insidetarget.repoorruns/), refine as usual, resolve refine's questions conservatively when unattended, then build. Approval comes from the user's own plan; the blind reviewer still never sees one.- The official Claude Code plugin docs are captured under
docs/claude-code-plugins/(verbatim, via docs-cycle) for building against.
investigateknows when to stop looking — and says so without claiming it finished. Two new terminal states, never folded into "exhaustive".stopped on saturation: from round 2 the investigator watches its own yield collapse, writes a determination with a new WHERE NEXT section (the unswept avenues, and the premise change that would open new space) and the critic verifies the collapse before the run ends — the search is reported open, not closed.stalled: a round that adds nothing at all — no option, no ledger line, no claim — stops the run immediately instead of buying another empty round. A round that rules candidates out is still progress and keeps going.investigateremembers which ground it swept, not just which candidates died. A second append-only file,SEARCHED.md, records every avenue each round covered — with the search terms it used and what they yielded — plus the most promising avenue still untried. Until now that survived only in the terminating round's determination, so every other round was free to re-run the last one's searches with the same terms and call the same candidates new.- A coverage contest now costs the critic a citation. Contesting "the search is finished" used to be free: name any avenue, buy a whole round. It must now carry a source and locator connecting that avenue to the criterion or search-space bound it puts back in play.
decidesays why it could not converge instead of guessing. The reviewer now slugs every gap it raises, so a run that spends its round budget can tell two opposite failures apart: the same gaps coming back (the decider is not resolving them — the hand-back names them and the reviews that first raised them) versus new gaps every round (the question is under-specified). The per-round split is on the return asgapRounds, and the last non-agreeing review ends with a WHERE NEXT section — the requirement axis the rubric does not settle, and the change that would let a decision converge.
investigateproduces a real determination.DETERMINATION.mdnow has a fixed shape — the qualifying options, a comparison over the axes they actually differ on, which to pick when, the near misses, and the coverage evidence — and it is written even when the search runs out of rounds (labelled a partial result) instead of leaving you a folder of option files with no comparison. Options stay unranked on purpose: qualification is pass/fail, and ranking isdecide's job.investigatekeeps near misses. A candidate that failed exactly one criterion is marked in the ledger with the shortfall in numbers and gets its own section in the determination. When nothing qualifies, that is usually the most useful thing the run found — it is what relaxing a criterion would put back on the table.- Fixed:
investigatecould report an option the critic had disqualified. A later round knocking out an option an earlier round upheld left it in the answer set, contradicting the run's own ledger. - Fixed: a malformed
maxRoundssilently did nothing. A non-number coerced to NaN and the round loop exited before its first pass — ininvestigate,decideanddocsthe run finished having spawned no agents at all and reported it as an ordinary "ran out of rounds"; infeature,migrateanddebug/resolvethe unit parked without a developer ever running. All six throw now, as do values that merely coerce to a legal number ("",falseand[]are each0) and used to switch off a budget floor ordocs' verbatim spot-check. enhancereports what its impact floor cut. Candidates belowminImpactare removed before verification and appear in no proposal file, so a floor set too high used to look identical to a clean system.summary.belowFloortells you which one you are looking at.- A
featureroadmap is ONE approved plan file of## Plan: <id>blocks — no more hand-splitting into per-feature files. Each agent infeatureandmigrateis handed a command that prints only its own block, so the other units never enter its context. - Flow maps render reliably. Self-loop conditions moved into a Loops table below the diagram, so a long label can no longer land on a neighbouring box. All nine render clean on both the current Mermaid and the version GitHub serves.
- New workflow: investigate (
/aipg-investigate) — finds an answer that already exists and qualifies it against pass/fail criteria, stopping when the search can be evidenced as complete rather than when the first answer works. "Nothing qualifies" is a verified result, not a failure. Usedecidewhen the work is weighing trade-offs instead. - Every workflow ships a flow map — a
FLOW.mdbeside each engine (linked in the table above) diagramming every agent, gate, loop and terminal state, rendered inline by GitHub. They are generated by watching each engine run, so a diagram can only show a path that really executes. Worth reading before a run you haven't done before: the terminal states are where two very different outcomes read alike. - Fixed: dead agents reported success. In
featureandmigratearefineplan critic that died returned a verdict indistinguishable from "your plan is sound"; inmigratea died final sweep read as zero coverage gaps. Both now fail loudly instead. - Fixed:
migratetold you to resume into a red build. A parked section that cleared the tree but left the build broken now halts as unsafe, matchingfeatureanddebug.
- New workflow: enhance (
/aipg-enhance) — audits a working system for enhancements worth writing up, and stops for you to triage. Defects still belong indebug. - Work is never discarded. A feature, section, or fix batch that can't pass is now parked: saved to
runs/<runId>/parked-<id>.patch, cleared from the tree, with thegit applyrestore command written intoNEEDS-USER.md. It used to be rolled back and lost. A parked feature no longer stops afeatureroadmap either — it parks and builds the next plan;migratestill stops, because its sections depend on each other. - The build engines check your working tree first. A dirty tree halts before any agent does work, naming the two commands that fix it, rather than reviewing your uncommitted changes as its own.
target.repois now required on every engine that writes code, instead of quietly defaulting to the checkout's own folder, so a typo can't retarget the wrong project (see One checkout, many projects).debug's review pass takes a lens array — sweep the same code from several angles in one pass, merged into one issue file per unit — and returns the issue index, so there's no hand-grepping to build the fix loop's input.decidegainsselection: "ranked"— a ranked shortlist instead of one winner, when the answer is legitimately a portfolio.docsspot-checks captured files against their source, so the verbatim promise is tested rather than asserted.
- 2026-07-07 — the research workflow became docs: verbatim capture, curated and indexed.
- 2026-07-04 — renamed
upgrade→ migrate andreview→ debug.featuregained theplansroadmap, so several approved features can be built in one run. - 2026-07-01 —
decidegained atestbedso claims get measured instead of asserted.
- Claude Code with the background Workflow capability.
- The target is a git repository (staging is how regressions are caught, and you do the commit).
- Build and test commands for your project. You provide them, and the engines run them and read pass/fail.
- For frontend work: optionally a browser/MCP driver (Chrome DevTools MCP, Playwright, MCP inspector),
else a
curl/manual fallback.
If these workflows save you time, you can sponsor their development via GitHub Sponsors.
MIT © Blakeem