CodeAFsenior-dev

senior-dev

Hand senior-dev a whole coding change and it carries it through alone, from the brief to a checked result on a branch you can merge.

A big change needs one owner who never stops to ask. Settle the brief once, and let it work until the proof passes.
  • fix issue 412 across auth and api
  • rename the config loader everywhere
  • add retries with tests

senior-dev is a coding harness with an engine of its own, built into CodeAF and tuned for large changes: a fix whose cause spans files, a feature with its tests, a migration. It works alone, for an hour or more when the change needs it, and asks nothing, so the brief settles everything once. On DeepSWE it solved the most issues of ten harnesses on the same model, at the lowest cost per solve.

0%20%40%60%$0.10$0.20$0.50$1Model cost per task (log scale)Tasks solvednobody hereCodeAF · senior-devother harnesses, same model0%20%40%60%$0.10$0.20$0.50$1Model cost per task (log scale)Tasks solvednobody hereCodeAF · senior-devother harnesses, same model
DeepSWE results by harness: tasks solved, 95% range and cost
HarnessSolved% solved95% range$ / task$ / solved task
CodeAF · senior-dev62/11354.9%46–64%$0.22$0.40
harness A56/11349.6%41–59%$0.38$0.77
harness B51/11345.1%36–54%$0.37$0.83
harness C42/11337.2%29–46%$0.35$0.94
harness D31/11327.4%20–36%$0.50$1.81
harness E30/11326.6%19–35%$0.50$1.90
harness F30/11326.6%19–35%$0.48$1.82
harness G16/11314.2%9–22%$0.19$1.36
harness H16/11314.2%9–22%$1.50$10.59
harness I3/1132.7%1–8%$0.12$4.51
DeepSWE, 113 tasks, the same open model for every harness. Ranges are Wilson 95% intervals from tasks solved. Benchmark code and results ↗

Try it in CodeAF

Where

In a conversation on your repository.

Type
/senior-dev

Then the change and what done means, and press Enter.

You see

senior-dev starts at once, on a branch of its own.

How senior-dev works

CodeAF hands the brief to senior-dev and lands what comes back. In between, code that does not think runs every stage around one model session.

  • where a model runs
  • senior-dev code that does not think
  • decision
  • irreversible
  • CodeAF, outside senior-dev
briefbranchceilingsevery callturn endedsubmittedtransient error: retrystoppedtime is upnudge backmay still submitnudges used upnothing submittedcheckpointpassunverifiedfailmoved: restorepassedunverifiedfailedlimit hitCodeAF hands offIntakeCheck and nudgeSubmitLandingVerifyShipCodeAF lands the runWorking sessioncallmodelstep loopsummarystatesteprouterreadruneditcommitcompactionbriefbranchceilingsevery callturn endedstoppedtime is upsubmittedmay still submittransient errorretrynudge backnudges used upnothing submittedcheckpointpassunverifiedfailmoved: restorepassedunverifiedfailedlimit hitCodeAF hands offIntakeCheck and nudgeLandingSubmitVerifyShipCodeAF lands the runWorking sessioncallmodelstep loopsummarystatesteprouterreadruneditcommitcompaction
  1. CodeAF hands over the brief on a task branch of its own.
  2. Intake records the brief and the starting tree, with no model.
  3. One model session reads, runs and edits in a step loop.
  4. Submit freezes the tree. There is no way back.
  5. A stop without submitting is checked, then nudged back.
  6. When time is up, one last turn may still submit.
  7. senior-dev builds and tests the frozen tree itself.
  8. Exactly one answer ships: the frozen tree or the last checkpoint.
  9. CodeAF lands the run and the chat acts on the ending.

Along the way it picks a model for each call and switches models when one fails, is rate-limited or another does better, saying why. Every call goes through CodeAF, priced and held to the run's ceiling, by default up to $10 and 3 hours.

Where the work lands

In a git repository it cuts a branch named after the task, such as task/rename-loadconfig-to-loadsetting-7d6220, and your own branch never moves. When the run ends, the chat reads the ending: it offers to merge work that passed, or fixes a small gap or sends the work back with a sharper brief, at most twice on its own.

Things to build

  • A rename across the codebase: /senior-dev rename LoadConfig to LoadSettings everywhere; done means go test ./... passes, and the rename waits on a branch named after it.
  • A bug fix with its proof: brief the fix and the test that shows it; senior-dev pins the check command and runs your build and tests on the frozen tree before it hands in.
  • A missing test, found first: discuss the change in a chat and say "give this to senior-dev": the chat checks the code first, so senior-dev writes only what is really missing. Hand a job to a specialist
  • A reviewer before every merge: senior-dev builds each change and a reviewer member reads the diff and runs the tests; main moves only on a pass. Review every change

Go further

Coming soon: describe the org you want and CodeAF builds it: teams, managers, budgets, standing orders.