phax 0.30.0
Changes since 0.29.0: v0.29.0...v0.30.0.
Highlights
- Mistral Vibe 3 — phax reads a Vibe session only from what its turns hand over, and confines it per invocation, never through the person's configuration.
- Provider failures — The provider's own verdict on its session is the cause phax reports, first and in full; nothing the session read or wrote is ever taken for it.
Upgrading
- Exit 14: the provider could not be reached. A command whose agent cannot reach its provider (a network failure) now exits 14, which is resumable, instead of 5. Treat 14 like 8, but retry as soon as the network is back.
- Tools that read a phase folder: a failed session's files are archived. When a session starts in a folder that holds an
agent-error.log, phax renames itagent-error.failed-NN.log, and the transcript the new session would overwrite<name>.failed-NN.jsonl. See Troubleshooting a failed agent session. - Review UIs:
review-stop.jsonandphax ls --jsonare stamped 0.30.0. A stop'slastClosegains the resultnetwork({ result, at, exitCode: 14, detail }, nostep) when its closing turn could not reach the provider; the run staysawaiting_review. 0.26.0 documents still read. - Records readers: a failed decision record names its failure.
failure(the session's failure kind,answer-refused,artifact-changedorcommit-failed) is required on a failed decision record, stampeddecision-record-manifest0.30.0. Records written earlier still read, without it. - Mistral Vibe 3.0.3 or later is required. Run
uv tool upgrade mistral-vibe. phax checksvibe --versionbefore its first Vibe session and refuses an older Vibe, naming the installed version. - phax no longer reads sessions from
~/.vibe. A Vibe turn's answer, session id, usage and transcript come from its stream and from theexport.jsonVibe writes beside it.VIBE_HOMEis no longer a provider store root.phax agent setup mistral-vibe --install-model-aliasesstill appends the phax aliases to your Vibe config. - Secure mode runs Vibe. It is recorded as filesystem jail
strong, with command enforcementprefix, so asecurerun no longer falls back to Claude Code. Your ownconfig.tomlsettings (bypass,outside_workdir, tool allowlists) never reach a secure or read-only phax session. - Rename a custom
accept-editsagent. If~/.vibe/agents/accept-edits.toml(or$VIBE_HOME/agents/accept-edits.toml) exists, phax refuses every secure and read-only Vibe session (a stop's turns, decide, authoring), naming the file: it would replace the built-in agent phax runs. Rename it, for example tomy-accept-edits.toml, and pick it with--agent my-accept-editsin your own sessions. - Vibe config under an extra writable root. A secure Vibe session is refused when a root in
security.filesystem.allowWriteholds.vibe/or.agents/, naming it: Vibe loads hooks, agents and tools from such a root. Move that config out, or drop the root. Phase agents on Vibe can no longer write.vibe/or.agents/in the worktree either. - A turn that ran under another config is refused. After each secure or read-only turn, phax compares the config Vibe ran with (its
export.json) with what phax set, and refuses the result on a difference, naming the field inagent-error.log. - MCP on Vibe. MCP servers and connectors are off in a session whose
mcp.modeisdisabledorallowlist: Vibe cannot load only some servers. - Records. Vibe usage is
{ provider, inputTokens, cachedInputTokens, outputTokens, costUsd }, summed over the phase's turn, fix attempts and handoff. Older records still read; an older@lbdremy/phax-schemascannot read 0.30.0 records. - Two Mistral efforts,
offandhigh. The Mistral API serves onlynoneandhighreasoning for mistral-medium-3.5, sophax-mistral-medium-3.5-low,-mediumand-maxare gone from the catalog.phax plans lintandphax runrefuse a plan that names one: rewrite it tophax-mistral-medium-3.5-off(effortoff) orphax-mistral-medium-3.5-high(efforthigh). A Claude Sonnet 4.6 phase routed to Vibe runs thehighalias, recorded as anupgradefromlowormediumand adowngradefrommax. ~/.phax/providers.jsonthat still lists them. Every command that reads the provider catalog refuses it, naming each id. Runphax agent setup providers --writeto drop them: it also enables every provider whose CLI is installed, so setenabled: falseagain on any you do not want. Or delete the three entries by hand.- The three aliases in your Vibe config.
phax agent setup mistral-vibeinstalls only theoffandhighaliases, and names the old ones it finds in~/.vibe/config.tomlwithout touching them. Delete their[[models]]blocks if you like; nothing uses them.
What's new
Mistral Vibe 3
phax reads a Vibe session only from what its turns hand over, and confines it per invocation, never through the person's configuration.
-
A phase record now shows a Vibe session's input, cached input and output tokens and its cost, summed over all its turns.
phase record usage for mistral-vibeNow:
Before
-
A secure Vibe phase's security record now shows it as fully secured, with its agent commands enforced.
<run>/<phase>/security.json for a secure mistral-vibe phaseNow:
Before
-
A closed stop on Vibe now records that its first and closing turns ran with read-only tools.
stop.turns in a closed mistral-vibe stop's security.jsonNow:
Before
-
If the installed Vibe is older than 3.0.3, phax now stops before any session starts and shows the command to upgrade.
Vibe version-floor refusalNow:
-
The security guide now lists Mistral Vibe's filesystem jail as strong, and its MCP allowlist as unsupported, since phax turns Vibe's MCP off instead.
docs/security.md provider capability tableNow:
Before
-
A secure or read-only Vibe session is now refused while a custom accept-edits agent profile, or Vibe config under an extra writable root, could widen it, naming the file to rename or move.
Vibe session refused for a config phax cannot vouch forNow:
Before
Provider failures
The provider's own verdict on its session is the cause phax reports, first and in full; nothing the session read or wrote is ever taken for it.
-
When the writer session fails, phax names the provider's error first, with a retry hint, and the record refusal that follows says so.
phax artifact decide (a failed writer session)Now:
Before
-
A run whose agent loses the network pauses resumable and tells you to resume it, instead of failing.
phax run (a network failure mid-phase)Now:
Before
-
A session that crashes after a tool merely printed "429" is reported as the crash it is, not as a rate limit.
phax run (a crash after a tool printed "429")Now:
Before
-
The agent error log now opens with the failure kind, the provider's own message, the session id and the transcript to read.
agent-error.logNow:
Before
-
When the repository's visibility cannot be checked, phax quotes why gh failed and, on a network or login problem, tells you to retry rather than to acknowledge an unknown visibility.
records visibility refusalNow:
Before
-
A failed decision record says why the decide failed.
decision record record.jsonNow:
Before
-
When a stop's closing turn loses the network, the stop's last close says so, and the run still waits for your review.
review-stop.jsonNow:
Before
-
A command whose agent could not reach its provider exits with its own code, so a script can retry it.
exit codesNow:
Before