What to improve
The product gap is not closable. The harness gap is.
A hosted IDE agent has native tools, extra servers, a browser, and a large context window. python-vibe is a local loop: twenty typed Actions, a write limit, twenty steps, 700 tokens, project text files only (Python plus a few config suffixes; no secrets). Improving this project means making the 8B loop reliable on small Python and platform trees — not growing a browser Action or pretending 8B is a frontier model.
Related: local loop vs hosted agents · harness comparison.
What to copy, what to refuse
Published harness notes in this repo already said the quiet part: edit format and context assembly move small-model pass rates. A free shell tool does not transfer to an 8B on a laptop working tree.
| Hosted-agent behavior | Copy into python-vibe? | Local lever | Status (29 Aug 2026) |
|---|---|---|---|
| Read the defining file before answering | Yes | prelude() locate + refuse a shallow done (must quote the -> type) |
Wired. Files under 12 KB are read whole so nearby constants stay in the quote. |
| Patch one function, then add a test, then run | Yes, scoped — not a stranger’s full suite | pick_skills + write-tests inject + refuse done before a passing run |
Wired for add-feature, new-package, bugfix, refactor, and a design-loop write. |
| Review structure, then one split, then review again | Yes | Design scan + refuse done while findings remain |
Wired. Prelude allows a one-split edit. After each write the harness re-scans. done is refused while findings remain. |
| Show a repo map of signatures | Yes | Action: map (120-line outline) |
Wired. Large trees still need --scope. |
| Recover a near-miss edit | Yes | Find: whitespace retry + closest-line hint |
Wired. Keep exact Find: (fails loud). Do not add fuzzy patches. |
| Extra tools, browser, any language, 100k–1M context | No | None. The write limit and step budget stay. | Out of scope on purpose. openai_compat.py does not add these. |
| Free-form terminal | No | Typed run only (no -c, pip, pipes) |
Correct for an 8B on a laptop tree. |
| Train the brain to emit the protocol | Later, after traces | train.py --everyday on ~2k redacted --record turns |
30 train rows + 40 seed templates. No python-vibe-8b adapters. |
Closest score on the same jobs
Score is “would a daily user get the same outcome,” not model size. 0–5. “After harness” is the recommended local work, not a new weight.
| Job | 8B + harness today | After recommended harness | Hosted IDE agent |
|---|---|---|---|
| Typed question | 3 | 3 | 5 |
| Add a function + test | 1 (wrong file, 29 Aug evening) | 4 (name-overlap pick + refuse done until def exists) |
5 |
| Rename / smell | 5 | 5 | 5 |
| Named-file review | 2 (invented a defect) | 5 (compiler findings, no model turn) | 5 |
| One-split refactor | 2 | 3 | 5 |
| 100-file review | 1 | 2 | 5 |
| Extra tools / browser / any language | 0 | 0 | 5 |
Work already in the tree
Ship these before training another model.
- Design loop. Wired. After each one-split edit the harness re-scans.
doneis refused while findings remain. Review tasks may edit. Live 8B still aims at the god module;refuse_god_targetnow blocks that path before the draft runs. - Auto-pick
review-design,refactor-split, andreadable-layout. Thin-review refuse is in thedonehandler. - Verify writes. Add / bug / rename / refactor / a design-loop write: inject tests or
run.doneis refused until a passing unittest. - Deeper small-file reads. Files under 12 KB are read whole. Larger files still truncate at 3500 characters plus a tail.
- Measure bigger local models. 29 Aug 2026, this laptop: 8B first Action was
doneoncomplete(thin summary),patchon add-multiply (tests file first, not impl),readon a dirty design review (skills were auto-picked; prelude asked foredit). The on-disk 30B coder timed out at the 180s Ollama cap. 7B coder is not pulled. Default stays 8B. - Raise the live parse floor.
eval/action_prompts.jsonlhas ten rows. Live 8B parse is 7/10. Everyday-ready still means beating an untuned 8B on parse and a real ≥1 KB fix. - AAA tests.
write-testsnow requirestest_<unit>_<result>andgot = …. One-lineassertEqual(fn(), n)is refused. - Editor drop-in.
python -m harness editors vscode|continue|cursorcopies tasks / Continue / local MCP.servespeaks/v1/chat/completions. Hosted-editor chat override of loopback is out of scope (no public tunnel). - Everyday laptop Python. Skills
write-script,call-http,analyze-data,write-algorithm. Prelude now quotes the skillPath:(pkg/weekday_name.py, notpkg/<noun>.py). Drafts that emitcurl/wget/os.systemare refused. - Compiler oracle. Undefined-name scan (
scan/names.py).doneis refused if a bugfix file still hassubtotl. Tests in an impl file are refused. A rename that still defines the old name is refused. See small models, classic development. - Platform paths. Skill
write-paths. The limit includes.toml/.yml/.json. Drafts that useos.path.join, a hardcoded home or/tmp, or a POSIX-only venv path are refused. See platform engineering. - Traces, then a 7B LoRA. Only after a live design loop reaches no structure findings.
--recordintodata/agent-loop/extra.jsonl(gitignored). Thirty seed rows are not enough. Decision write-up: fine-tune or harness. - Named-file review quotes the compiler. Wired.
review src/orders.pyno longer asks for a patch, then refuses it. Undefined names finish the run with no generate. Measured: same jobs, same evening. - New functions stay with related names. Wired.
pick_moduleno longer prefers the largest file (that was the controller). Prelude pinsPath:. After the def exists the harness writes the AAA test.doneis refused untildef <symbol>exists. A secondorders.pyis refused.
0.5B stdout, estimated
The 18-script MLX pair is
0.5B sample-and-run.
Four drafts plus one repair is 9 / 18. The later loop
(datetime prepend, “stdout is wrong,” one 8B hint) is 12 / 18.
Zero of those twelve were a hint-repair. Greedy LoRA is 0 / 54.
| Next | Hours | Lift after measuring |
|---|---|---|
| Keep base, four drafts, one repair as the 0.5B stdout default | 0 | Holds 9 / 18 |
Prepend sys / re / datetime; reject a traceback-as-source |
shipped | weekday is a first pass |
| 8B one-line hint from stderr, then one 0.5B rewrite | measured | 12 / 18 headline, 0 hint-repairs. Stop |
| Eight drafts instead of four | one measured run | +0 to +2. Not worth it at n = 1 |
| Train the 18 prompts into the 0.5B | days, and it leaks the eval | Not a capability |
Daily run stays an 8B. Do not spend the week on more 0.5B pairs
or on another 8B-hint cell for this board.
What not to spend a week on
- More 0.5B train steps. The adapter is a style prior. Held-out vibe tasks failed. It misses
Action:lines. Greedy LoRA scored 0 / 54 on the 18-script exec eval. - Training
python-vibe-8bon the thirty seed rows and calling it everyday-ready. - A bash tool, a browser Action, or extra-tool bridges. Those make the laptop write limit weaker and do not move the measured jobs.
- Raising
--stepsas a substitute for a review → one-split → review loop.
Two success bars
| Bar | python-vibe (local) | Hosted IDE agent |
|---|---|---|
| Ready for daily use | Small Python tree. First Action correct on Q&A / add / rename / one-split. Writes limited to one folder. Offline. | Any repo, any language, extra tools, browser. Precise multi-site quotes. You pay a usage pool. |
| How you know | skill_probe.py shows the intended Action with prelude on; live eval beats the 8B baseline; a design loop reaches “no structure findings” without rewriting the tree. |
Already there. Pointing an editor at Ollama does not move this bar. |