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. It also works in a plain folder, where edits happen in place.

Type
/senior-dev

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

You see

senior-dev starts at once, in a private copy on a branch of its own when the folder has git history.

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 starts from your current commit and uncommitted work in a private copy, and 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.

Checks and limits

senior-dev discovers build and test commands from CI, project instructions, scripts and language defaults, including CMake and ctest. A folder that looks like a project but has no discoverable build or test entrypoint fails that check. A folder of loose files can finish without any build or tests running; the ending says so. Read the verification result before merging, even when the task says it passed.

For commands it cannot discover, set them explicitly at the shell, before the brief:

codeaf senior-dev run --verify-build "npm run build" --verify-test "npm test" -- "Implement the settled change with its tests"
codeaf senior-dev run --help

Each flag overrides only its own check. senior-dev runs the commands on the submitted tree; its model cannot set these flags. A requested model known to hold 32,768 tokens or fewer is refused before the first call; unsuitable crew models can be skipped. Cached model capacity works offline. A populated catalog that cannot size a selected model can cause refusal; the assumed 16,384-token fallback applies only when no catalog can be read, and the run says so.

Steering and the submitted tree

Open the task and type a note, or ask the chat to pass one on. senior-dev reads it before its next model call, until it submits. Submission freezes the tree and ends steering; later messages cannot change that hand-in. You can stop the task and inspect what it left.

The specialist is built in on macOS and Linux and absent on Windows. Its default ceiling is $10 and three hours, potentially lower where the conversation has less left. In a folder with no git history it edits in place, so there is no task branch to merge.

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.