agentleFS
wildewouterwildewouter/skills/control/SKILL.md

control

Skill0 starsChanged 4 months agoApache-2.0View on GitHub

Interface-first, human-gated development loop. Use when user invokes the /control command, or says things like "let's build this with control", "interface first then review". Structures feature work as Interface -> review gate -> Minimal Stub -> review gate -> Deep Impl (per method) -> review gate (repeat per method) -> Test Path Selection -> Tests. Persists progress in CONTROL.md at repo root so a fresh session can resume.

8 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use pm-discovery, qa-phase and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • ww-w-aiSkill

    pm-discovery

    PM Agent Team - Automated product discovery, strategy, and PRD generation. Runs PM analysis workflow to produce comprehensive PRD before PDCA Plan phase.

    Also in 3 projects that use this

  • ww-w-aiSkill

    qa-phase

    Run QA tests at various levels (L1-L5) for features under PDCA management. Integrates with MCP tools to execute structured test plans.

    Also in 3 projects that use this

  • +10 more from ww-w-ai

The file

We split this skill into the rules it gives an agent

8 rules. 0 are common, 4 are distinctive, and 4 are very specific to this project.

  • 0

    Common

    Most of the 7 edited versions we read keep these.

  • 4

    Distinctive

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Create at repo root if missing when /control starts.

    line 22
  2. Very specific:

    Check off items and add notes inline as you go.

    line 53
  3. Very specific:

    If the interface involves a real architectural decision (how a service is structured, which pattern/abstraction/dependency to use, data …

    line 78
  4. Very specific:

    No hardcoded build tool/language — generic across repos.

    line 106
  5. Distinctive:

    Never skip a gate "to save time" — the whole value of this skill is that a human looks at every interface and every method before the next …

    line 108
  6. Distinctive:

    If the human requests changes at a gate, make them, then re-stop at the same gate — don't auto-advance to the next phase.

    line 110
  7. Distinctive:

    If new insight (yours or the human's) sends work back to an earlier phase (e.g.

    line 112
  8. Distinctive:

    Avoid leaky abstractions at all times: interfaces and stubs must not expose implementation details (internal types, storage/framework …

    line 122

“Common” is measured: kept by at least 6 in 10 of the 7 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Control

Workflow skill. Purpose: stop the agent from guessing wrong interfaces and running away with implementation before a human has signed off on the shape of the code.

Persistence

ACTIVE for the whole feature once invoked via /control, across as many messages/sessions as it takes. Governed entirely by CONTROL.md at repo root — state lives in the file, not in chat memory, so a brand new session can pick up exactly where the last one left off. Never delete CONTROL.md when a plan finishes; it's the record of what was decided at each gate.

CONTROL.md format

Create at repo root if missing when /control starts. One file per active plan (if a repo has multiple in-flight plans, ask user how to disambiguate, don't guess).

# Control: <feature name>

## Interface
- [ ] drafted
- [ ] reviewed

## Stub
- [ ] compiles / minimal stub in place
- [ ] reviewed

## Deep implementation
- [ ] MethodA
- [ ] MethodB
- [ ] MethodC

## Tests
- [ ] paths enumerated
- [ ] paths selected
- [ ] tests written

## Revisions
<!-- append-only log. new insight sends work back to an earlier phase —
     log it here instead of unchecking prior boxes. -->
- <!-- e.g. "back to Interface: MethodB needs a callback param, discovered while implementing MethodA" -->

Check off items and add notes inline as you go. Update CONTROL.md before every stop, not just at phase end — a resumed session must see the true state without asking chat history. On resume: read this file first, it tells you exactly which phase and which method you're on.

Loop

1. Interface draft

From the plan, write only types/signatures/data models — no bodies. Check off "drafted" in CONTROL.md. Then stop. Say plainly: "Interfaces drafted, need your review before I go further. Reply when ready to continue." Do not touch implementation past this point until told to proceed. Human may edit the interface directly — if so, re-read their version before resuming, don't fight it. On approval, check off "reviewed" before moving to phase 2.

2. Initial stub

Fill bodies with the smallest thing that satisfies the compiler/type checker: throw new Error("not implemented") (or language equivalent) — never silent defaults, a stub must fail loudly if actually called. One pass across the whole interface. Check off "compiles / minimal stub in place" in CONTROL.md. Then stop, same review-gate wording as above. On approval, check off "reviewed" before moving to phase 3.

If the interface involves a real architectural decision (how a service is structured, which pattern/abstraction/dependency to use, data flow shape, etc.), do not silently pick one. Present the viable options (with brief tradeoffs) via ask_user — or propose your preferred option and an alternative — and let the human decide before drafting. Only skip this when there is truly one obvious way to do it.

3. Deep implementation, per method

Present user with ask_user tool to pick one method/function from the "Deep implementation" checklist. Implement it fully. Update CONTROL.md (check it off) immediately, before stopping — never batch the checkbox update for later. Then stop, same gate. Repeat for the next unchecked method only after explicit go-ahead. Never batch multiple methods in one pass — that's the whole point of this skill.

4. Tests

Once all methods are checked off: enumerate the distinct code paths/branches in the implementation. Present them with the ask_user tool as a multi-select list — let the human pick which paths are worth testing, don't assume "all of them". Check off "paths enumerated" then "paths selected" in CONTROL.md as each happens. Write tests only for selected paths. Keep tests small (one behavior each) and comprehensive within that scope (edge cases for the paths chosen) — this skill is standalone for testing style, it does not defer to other testing skills even if loaded alongside. Check off "tests written" once done.

Rules

  • No hardcoded build tool/language — generic across repos. Detect from repo (package.json, go.mod, Cargo.toml, etc.) or ask if ambiguous.
  • Never skip a gate "to save time" — the whole value of this skill is that a human looks at every interface and every method before the next step.
  • If the human requests changes at a gate, make them, then re-stop at the same gate — don't auto-advance to the next phase.
  • If new insight (yours or the human's) sends work back to an earlier phase (e.g. deep-implementing MethodA reveals the Interface needs a new param), do not uncheck the earlier boxes — checked means "was reviewed at time X", it's history, not current-truth. When the insight is yours, never implement it straight away: stop and present it via ask_user (what changed, why, which earlier phase it affects) and get a go-ahead first. Once agreed, append a line to the Revisions log naming the phase revisited and the insight, make the change, then re-run that phase's own gate (interface change → re-review at gate 1, etc.) before returning to where you left off.
  • Avoid leaky abstractions at all times: interfaces and stubs must not expose implementation details (internal types, storage/framework specifics, error types from a dependency, etc.) through their public shape. Flag it and propose a fix rather than let a leak through a review gate unmentioned.
  • Any architectural decision (service structure, choice of pattern/library/ abstraction, data flow) must be surfaced to the human before committing to it — present options or a recommendation plus an alternative, never decide silently.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.