The umbrella "I say what I want, it ships it" loop. Clarifies the ask up front only if genuinely ambiguous, triages the change to decide which phases it actually needs, then implements it and drives i
The orchestrator for your project's local agentic loop. You give it an intent; it clarifies anything genuinely unclear, figures out the smallest correct path for this specific change, implements it to the repo's standards, and drives it all the way to a green, review-clean PR that's ready for you to merge - composing the existing skills rather than reimplementing them. It runs autonomously and only stops mid-way when it truly needs something from you.
At 2,359 words, this large prompt gives your agent specialized testing & qa expertise with structured patterns and output formats. Copy it into CLAUDE.md, .cursorrules, or Copilot instructions.
The orchestrator for your project's local agentic loop. You give it an intent; it clarifies
anything genuinely unclear, figures out the smallest correct path for this specific
change, implements it to the repo's standards, and drives it all the way to a green,
review-clean PR that's ready for you to merge - composing the existing skills rather
than reimplementing them. It runs autonomously and only stops mid-way when it truly
needs something from you.
This is the whole "software factory" loop for a solo developer, minus the parts
deliberately left out: no CI reviewer bot (review runs locally, here), and no
auto-approve / auto-merge (the terminal state is "ready to merge" - you click merge).
Factory is not a fixed pipeline - it's adaptive. The single biggest failure mode is
running every phase on every change: a one-line if in an endpoint, fully covered by
unit tests and invisible to the UI, does not need a design loop or an e2e run, and
paying that tax makes the loop something you avoid rather than reach for. So factory
triages the change and walks only the phases it needs. The rule of thumb: match the
effort to the change, and never run a gate whose failure mode this change can't hit.
Execute directly - do not enter plan mode. Narrate each phase inline as you move
through it, including the ones you skip and why (the skip is a decision worth showing).
Read what you need to place the change correctly first: your conventions doc (e.g.CLAUDE.md / AGENTS.md, the root file plus the package's own for the subtree you'll
touch), the relevant architecture/subsystem doc, and any recent decision records (ADRs).
Then decide whether the ask is clear enough to build.
AskUserQuestion for discrete options),
fold the answers in, and proceed. Don't drip questions one at a time.Never build on main. If you're on main, create a feature branch off it
(git switch -c <type>/<slug>). If you're already on a feature branch for this work,
stay on it.
Before building, classify the change - this is what makes factory adaptive instead of a
fixed pipeline. Two decisions come out of it; make the first now, and set expectations
for the second (finalize it against the real diff in Phase 6).
Does this change need a design loop? (Phase 3)
Will this change need e2e-verify? (Phase 6) - a provisional read now, confirmed
against the actual diff later. See Phase 6 for the criteria; the point of flagging it
here is so you don't design/implement in a way that makes the eventual verification
harder than it needs to be.
Say out loud what triage decided ("localized fix → skipping design; touches a rendered
component → e2e likely") so the skips are visible, not silent.
Run [/design](../design/SKILL.md) - draft the approach, critique it with the
multi-model panel, and revise to a converged design doc. Then stop and show it to the
user for a go/no-go before implementing. This gate is always-on when design runs:
a design that looks right but isn't wastes an entire implement cycle, so the
interruption earns itself. Present the approach in plain English - what's being
built and why, not the design loop's round counts, trajectory, or internal codes (/design
Step 7 is written to this) - plus the key trade-offs and any decision it still needs from
you, each stated as a plain question with a recommended default. Wait for the user's go
(or their redirect) before Phase 4.
Skip this phase entirely for localized changes - do not draft a design doc for a
one-line fix.
Do the work per your project's conventions - minimal, surgical, at the right layer;
search for an existing pattern before adding one; match the two nearest similar files;
never compromise type safety. Colocate tests for the logic you add, exercising real
dependencies per your conventions doc's test rules. As you implement, run the local gate
incrementally so you don't pile up breakage: your local gate (format, lint, typecheck,
test), stopping on the first failure you caused.
Before handing off to review, run the completeness sweep from
[the reviewer brief](../review-multi-model/references/reviewer-brief.md) yourself: list
every UI state you added or changed and give each a story (or visual test), give every
behavior change a test you watched fail, and grep for every comment/doc describing what
you changed. The review loop should be confirming completeness, not discovering it one
round at a time.
Run [review-loop](../review-loop/SKILL.md) over the working tree until it converges (a
pass with no finding that matters, or a reported stop condition). Apply its verified
fixes. Re-run the local gate after fixes land. This phase always runs - it's cheap
relative to shipping a defect and catches what unit tests can't.
Use review-loop's own stop rules - don't override them. It stops once a round finds
nothing that matters (a real bug, or a missing story/test/now-false comment), caps at 5
rounds by default, and applies polish (naming/wording taste, crafted-input hardening)
in-place without another round. Missing stories, tests, and false comments/docs are not
polish. Don't push it past that looking for a zero count: zero never arrives, and the long
tail is wording and hand-crafted inputs, not bugs. Out-of-scope findings go on a
follow-up list, not into this PR.
When a run's matters findings reveal a defect class the conventions failed to prevent,
feed it to [/add-rule](../add-rule/SKILL.md) (or flag it for
[/evaluate-run](../evaluate-run/SKILL.md)) so the next change starts from a higher floor.
Now that you can see the actual diff, decide whether to run
[e2e-verify](../e2e-verify/SKILL.md). Walk these in order:
if)
→ skip. Unit tests + review-loop + CI are enough.If you run a
visual regression check in CI (e.g. UI Verify), it diffs the UI at PRSay why you skipped when you skip - "no runtime/UI surface, covered by unit tests" - so
the decision is visible.
If Phase 6 produced
any code change, run [review-loop](../review-loop/SKILL.md)Hand off to [/babysit-pr](../babysit-pr/SKILL.md): commit, push, open the PR, and
babysit CI - polling ~every 10 min, reacting to each failure (lint/type/test/e2e and, if
you run a visual check, its diffs - triaged through your visual tool's MCP if it has one,
e.g. UI Verify). /babysit-pr does not merge.
Any code change made in Phase 8 (a CI fix, an accepted-vs-fixed visual decision, an answer
that arrived late) re-enters the loop: re-run [review-loop](../review-loop/SKILL.md)
on the new changes, push, and let /babysit-pr re-confirm CI. Keep going until the
fixpoint holds simultaneously:
Check this literally, against the log - it is the step most likely to be skipped.
Before you report convergence, name the SHA of the last commit on the branch and the
review round that covered it. If no reviewer ran
Docs / rollout closeout - a user-visible behavior change owes a docs decision before you
converge. If the diff added or changed user-visible product behavior (a new/changed
feature, a flag default, a CLI/config surface), branch on how it ships:
Surface this as an explicit line at convergence ("live for everyone → owes a docs page,
offering one" / "behind flag X → logged as a rollout follow-up"), never silence. A docs
edit already in the diff does not automatically discharge the obligation - a change
often touches several behaviors, and an edit for a minor one is not documentation of the
That's convergence. Stop and report - the PR is ready for you to merge. Do not merge
or approve.
Phase 0 batches the questions you can see up front. The expensive ones are the questions
the
AskUserQuestion with discrete options.ASR-N, dimension N, "option B from round 2"). Restate the code as the
decision it stands for and recommend a default.
Stop and ask only for: the design go/no-go (Phase 3, always when it runs); a
genuine product/behavior decision the ask didn't settle (see above for
Do NOT stop for: routine implementation choices, fixable failures, review findings you
can address, or "just checking in." The point of this skill is that it converges on its
own.
When the loop hits a mistake that would generalize - CI or review-loop caught something
a rule or lint guard should have prevented - propose capturing it with
[/add-rule](../add-rule/SKILL.md) and act on your agreement, exactly as /babysit-pr
does. The factory should get smarter each time you run it.
Factory is a free testing & qa skill for AI coding agents. The umbrella "I say what I want, it ships it" loop. Clarifies the ask up front only if genuinely ambiguous, triages the change to decide which phases it actually needs, then implements it and drives i. It provides a specialized system prompt that configures your agent with testing & qa expertise.
Copy the system prompt below and paste it into your CLAUDE.md file or Claude Code's custom instructions to activate Factory.
Factory is compatible with Claude Code, Cursor, GitHub Copilot, Windsurf, OpenClaw, Cline, and any AI agent that supports custom system prompts or .cursorrules files.
Yes, Factory is completely free and open source. The full source is available on GitHub at https://github.com/uiverify/uiverify/blob/main/packages/skills/skills/factory/SKILL.md. You only need a subscription to the AI agent you use it with.
Weekly roundup of top Claude Code skills, MCP servers, and AI coding tips.