stu.

Let it stew.

Go to bed. Wake up to reviewed PRs and a short list of questions.

stu turns your Claude Code session into a blind supervisor. It hands out the work, checks every return mechanically, and stops rather than guess.

Once
/stu:init

Answer a few questions about your repo.

Start
/stu:run "<objective>"

Name the work. Walk away.

After
/stu:settle

Answer what it parked, one at a time.

Install
/plugin install stu --marketplace keavi-app/stu-claude

Why long runs go wrong

What a run looks like

claude · parleq-speech
> /stu:run parleq 0.45.1 bug fixesobjective written · 3 units · cycle cap 4cycle 1  orchestrator (opus)1reviewer finished. Relayed; result not read.checked  engine:c0          on main  tag 0.6.2cycle 2  orchestrator (sonnet)2interim  "c1 has landed and been tagged." Not counted until the cycle's result passes the checks.checked  engine:c1          on main  tag 0.6.3checked  parleq-speech:p1   reviewed · gated · pin 0.6.3DONE  3 of 3 units closed · 2 of 4 cycles3awaiting your approval to push:parleq-speech:p1  fix/0.45.1-bug-fixes  2754016! stu-approve parleq-speech:p1 2754016f99342736010fd6dc46adf8ec0672fd3b
  1. 1
    Blind supervisorIt passes on that a reviewer finished. It never reads what the reviewer said.
  2. 2
    Fail closedA claim in prose counts for nothing until the cycle's result passes all five checks.
  3. 3
    Your checkpointThis repo is marked, so the push waits for you to approve that exact commit.

Condensed from the supervisor's own messages during the Parleq trial, with the private engine repo shown as engine.

How stu works

A supervisor that stays small

Your session holds only unit IDs and a scoreboard, and never reads the work. Its context is designed to stay flat; if it grows anyway, the run ends at the next cycle.

  1. you
  2. supervisorholds: unit IDs, scoreboardreads: nothing
  3. orchestratorfresh each cyclewrites no code
  4. implementerwrites
    reviewerat one SHA
    merge gateown evidence
    scout, verifierread-only

Checks that stop the run instead of trusting it

Every return is checked against the scoreboard with set operations. A failure gets one repair at most, then the run stops.

  1. returnID sets
  2. five checks, every return
    1. 1every ID was issuedno invented work
    2. 2no silent new unitsno scope creep
    3. 3DONE means none leftno "done" with work open
    4. 4a premise to verifyno self-certified claims
    5. 5progress, not spinningno burned night
  3. all passscoreboard updated; next cycle, or DONE
    a failone repair, at most
    fails again: STOPfail closed, nothing guessed

Questions wait for you; the run keeps going

A question only you can answer parks one unit, with a recommendation. Settle it later in a fresh session.

  1. unit 3 needs youyour call
  2. parkedwith a recommendation
  3. others continueunits 1 and 2
  4. /stu:settleone at a time
  5. resumeanswers go back in

Repos you mark wait for your approval

On a marked repo, an agent's push stops at a git hook until you approve that exact commit. Elsewhere, the merge gate merges only the SHA that was reviewed.

Marked repo, agent push
  1. git pushfrom the agent
  2. before-pushrefused: not approved
  3. stu-approve <unit> <sha>you run it, not the agent
  4. pushthat SHA only
Your own push
  1. git pushyour terminal
  2. pushstraight through; public repos still get the leak scan
Unmarked repo
  1. reviewedby an agent that did not write it
  2. merge gatecollects its own evidence
  3. merged at the reviewed SHAor reported for you to merge

A budget on every agent

Turn and context budgets, enforced live by a hook, with a native maxTurns backstop. Each role gets the cheapest model that does the job.

RoleModelTurn budget
supervisoryour session4 cycles (8 overnight)
orchestratoropus on cycle 1, then sonnet120 · backstop 190
implementersonnet140 · backstop 220
reviewer, merge gate, verifiersonnet
scouthaiku

Proof: the Parleq trial

3 of 3units closed, across two repos
2 of 4cycles used
1 PRopened by stu, merged by the maintainer
1 pushto Parleq, after approval of its exact SHA
Engine · private
  1. c0
  2. tag 0.6.2
  3. c1
  4. tag 0.6.3
Parleq · public
  1. waits for 0.6.3
  2. p1 · pin 0.6.3
  3. approved
  4. v0.45.1

Check it: the v0.45.1 release and PR #131. Every rule in stu is backed by a measured failure, written up in the design rationale, and its known limits are listed too.

Prefer the shell?

claude plugin marketplace add keavi-app/stu-claude
claude plugin install stu@keavi --scope user

Needs Claude Code 2.1.310 or later, an authenticated gh, git 2.31+ and Python 3.9+. macOS, Linux or WSL.