Skip to main content

Local coding models, checked by your own tests.

Phonton puts each attempt in a copy of your repo, runs your tests on it, and only shows you a diff that passed. Every run ends with a receipt. Free, open source, no account.

Windows · Linux · macOS
npm install -g phonton-cli

CLI 0.25.1 · Desktop 0.5.2 · source on GitHub · MIT or Apache-2.0

  1. goal
  2. plan
  3. edit
  4. verify
  5. review
  6. remember

terminal · phonton 0.25.1runtime download, model pull and calibration

$ phonton models setup qwen3.5:4b
phonton models setup
Checking managed runtime files
Downloading Ollama runtime sha256:e155b83589986d2c581fdbf1381ea3ebdb16549883679cd5a0627f7cdc05b12b: 1427542079 / 1427542079 bytes
Verifying official runtime archive
Extracting and verifying pinned runtime files
phonton models install qwen3.5:4b
Model store verified: 3.3 GB to download (3324173934 of 3324173934 bytes), 1073741824 bytes kept free
pulling manifest
pulling a9d0a3e1d8c9: 2648593216 / 2648593216 bytes
verifying sha256 digest
writing manifest
success
phonton models calibrate qwen3.5:4b
phonton models select qwen3.5:4b
runtime Ollama 0.34.2, started and verified by Phonton
model qwen3.5:4b, 3.3 GB on disk, digest checked
measured on CPU, 32k context
pass SearchReplace edit 17.4 s
pass UnifiedDiff edit 10.8 s
pass Structured create 8.4 s
FAIL UnifiedDiff create 17.5 s
pass Tool call format 27.9 s
Phonton asks qwen3.5:4b for search/replace edits only.
Ready: qwen3.5:4b is calibrated and selected. Run `phonton` and type a goal, or `phonton goal "<goal>" --yes --allow-host-checks`.

Replay of one recorded run: phonton 0.25.1, qwen3.5:4b on a 4-vCPU runner with no GPU. Text is from the recording; timing is compressed. The test's failure message was written for the demo.

51 exercises. Who said done, and who was right.

Aider Polyglot, 17 exercises each in Python, JavaScript and Rust. Same model for every arm: qwen3.5:4b through Ollama on an RTX 4050 laptop. Tests were visible to all three. Afterwards the original tests were restored and run.

  1. Bare modelAider's prompt, two tries
    said done
    43
    wrong when it did
    37
    tests passed
    6
  2. OpenCode 1.14.19run --pure
    said done
    51
    wrong when it did
    50
    tests passed
    1
  3. Phonton 0.25.0goal --local, the exercise tests as its check
    said done
    1
    wrong when it did
    0
    tests passed
    2

One cell per exercise, 51 in all. said done, tests pass said done, tests fail did not say done

By language, 17 exercises each
LanguagePhonton passedBare passed / said done / wrongOpenCode passed / said done / wrong
Python12 / 15 / 131 / 17 / 16
JavaScript14 / 16 / 120 / 17 / 17
Rust00 / 12 / 120 / 17 / 17
What the false passes were
KindBareOpenCode
Wrong output: the tests run and assertions fail2729
Crashes on load or uses a missing name211
Does not compile (Rust)810

With a 4B model nobody solves much. The bare model passes the most, 6 of 51; Phonton passes 2. The difference is the claim: Phonton said done once, and it was right. The other two said done 94 times, and 87 of those were wrong.

18 Phonton runs stopped on a free-RAM reserve that 0.25.1 lowers for models held in VRAM, and 2 goals were over the 8 KB goal limit. Both count as failures. One JavaScript pass is a refactoring exercise that already passed. Runner: benchmarks/polyglot.

The same run, cut to music.

68 seconds of real recordings: setup, the failed first candidate, the repair, the receipt, then Desktop applying the change.

demo · 68 s · real recordings

phonton 0.25.1 · the TUI

Phonton TUI while it works: baseline checks fail as expected, candidate 1 failed with not ok 3 - rejects trailing garbage, candidate 2 being written.

screenshot

Phonton Desktop 0.5.2 · same goal, engine and model

Phonton Desktop showing candidate 1's diff for src/port.js and its failed node --test check.

real time

Install the CLIDownload Desktop 0.5.2

Three commands to a verified diff.

Setup downloads a pinned, hash-checked runtime (about 1.5 GB on Windows and Linux, 160 MB on macOS) and the model, then measures which edit formats it can actually do. No account, no Phonton server, no telemetry.

npm install -g phonton-cli
phonton models setup qwen3.5:4b
cd your-project && phonton

Windows x64 · Linux x64 and arm64 · macOS Apple Silicon and Intel. Read the local models guide

Bigger job? Bring a key.

The same plan, checks and receipt work with Anthropic, OpenAI, DeepSeek, OpenRouter, Gemini or Groq on your own key. Calls go straight to your provider, and the receipt shows the cost.

export ANTHROPIC_API_KEY="..."
phonton doctor --provider
cd your-project && phonton

Or set it in ~/.phonton/config.toml. Provider setup

Also in the box

plan first
Files, checks and budget are on screen before any model call. Nothing runs until you approve.
receipt
Files, checks, tokens, time, cost and which runtime ran, for every goal.
real undo
phonton review reject puts back exactly the files the task changed.
memory
Decisions stay on your machine in SQLite, scoped to the repository they came from.