Repository navigation
Phonton CLI v0.23.0
phonton-cli v0.23.0 — Local models on Linux and macOS
One command, no Ollama install
phonton models setup qwen2.5-coder:3b now installs, starts and verifies the
local runtime on Linux (x64, arm64) and macOS (Apple Silicon and Intel), as
it already did on Windows x64. You no longer install Ollama yourself or pass
--allow-unverified-runtime to run local goals.
What setup does on every platform:
- Downloads the official Ollama 0.34.2 archive for the platform from GitHub
and checks its published SHA-256 (about 1.5 GB on Linux, 160 MB on macOS). - Unpacks it into a folder Phonton owns, in-process (no
zstdortar
binary needed), and checks every file and library symlink against a pinned
digest before running anything. - Starts it on
127.0.0.1:11434with cloud models disabled, then proves the
process it started owns that port (/procon Linux,lsofon macOS) and
records its start time and executable. Local goals run as
verified-managed only while that same process still owns the port. - Refuses network and FUSE mounts for the runtime and model folders.
scripts/runtime-tree-digest.py recomputes every platform's pins from the
published archives and reproduces the Windows pins exactly.
If an Ollama you installed already answers on port 11434, Phonton uses it as
before, unverified, and asks for consent per goal.
Tested on fresh CI runners with no Ollama installed
| Runner | Runtime | Goals (qwen2.5-coder:3b) |
|---|---|---|
| Ubuntu (x64, 16 GB) | verified | 2/2 accepted |
| macOS Intel (14 GB) | verified | 2/2 accepted |
| macOS Apple Silicon (7 GB) | verified | not run |
The 7 GB Apple Silicon runner has about 3.7 GB free; no model passes the
memory check (Phonton keeps 2 GiB for the system), so setup declines to
calibrate one. A 16 GB Mac fits the 3B model.
Edits that keep their shape
Saving every local run's evidence showed a pattern in the larger smoke
fixtures: the 3B model often answers a search/replace edit with only a
block's first line as search (class OrderBook {) and the whole rewritten
block as the replacement. Phonton replaced just that line and duplicated the
body; every shop-cancel-restock candidate failed to parse. Phonton now
replaces the whole block when the replacement starts with that line and is
one complete block (brace-aware, skipping strings, comments and JS regex
literals; indentation-aware for Python). It also turns a line break that a
single JSON escape put inside a one-line string literal back into \n.
These fixes make the model's edits land as it meant them. They do not make a
3B model write correct logic: on the local smoke suite (CPU-only Linux
runner, hidden tests) acceptance is unchanged.
| Run | Accepted | Marked review-ready but failed hidden tests |
|---|---|---|
| 3B, before the fixes | 14/36 | 2 |
| 3B, with the fixes | 14/36 | 4 |
| 7B, with the fixes (1 run per task) | 7/12 | 2 |
The shop class rewrites now parse and reach the project's tests; two of them
added an unused method, passed the visible tests and failed the hidden ones.
Greedy decoding on CPU is not fully repeatable between runs, so single-task
differences of one or two runs are noise. Small local models remain best at
small, focused edits.
Install
npm install -g phonton-cli
phonton models setup qwen2.5-coder:3b