Changelog
Release notes for phi, from the project's CHANGELOG.md.
All notable changes to phi are documented here. The format is based on Keep a Changelog and the project adheres to Semantic Versioning.
[Unreleased]
Added
- Yaegi extensions: Go extensions under
~/.phi/extensionsand<cwd>/.phi/extensions(*.go/*/index.go). Public APIext, runtimeinternal/extension. SupportsOnevents,RegisterTool,RegisterCommand, session/tool lifecycle. See Extensions. Palette: extensions → list / reload. Disable withPHI_EXTENSIONS=off.
Changed
- Breaking: shell
plugin.jsonhooks (internal/hooks,PHI_HOOKS,.phi/hooks) are removed. Rewrite policy as Go extensions (migration table in Extensions). - TUI:
agent_spawn/agent_waittool rows show role in the detail line (explore · …).
Removed
- Shell hook plugins (
plugin.json+type: "command"),doc/hooks.md, and related TUI hooks → commands.
[0.18.1] — 2026-08-28
Changed
- Breaking:
plugin.jsonhooks use an event-map shape (PreToolUse,PostToolUse, … +type: "command"shell commands). Legacy flatpre_tool/runmanifests are no longer accepted. phi extensions:SessionShutdown(leaving the active session;SessionEndis a deprecated alias),SessionBeforeSwitch,PostTurn, andCommandslash hooks. See Hooks. - Hooks: drop unimplemented
plugin.jsonfields (if,once,statusMessage,asyncRewake) until needed.
Fixed
/resumeand/clearnow replay tool executions (with their styled rows) instead of dropping them.
[0.18.0] — 2026-08-27
Added
- Composer shortcut help: type
?at the start of the input (like/commands); Esc closes the picker. Ctrl+A/Ctrl+Emove the composer cursor to the start/end of the current line.Ctrl+Uclears the composer input, pending images, and pending skills.- Per-model
image_enabledconfig key; the composer blocks clipboard and@image attach and shows a warning when the active model does not support images. make checkrunsdeadcode -testagainst a baseline so new unreachable functions fail CI without blocking on known legacy dead code.
Changed
- Splash hint now shows
?for shortcut help instead of the removed!shell-command shortcut.
Removed
- Dead code: unused layout widgets,
StatusBlock,inputpackage, orphan exported helpers, and unused clipboard read-text path.
Fixed
@file picker: cancel in-flightfdsearches on each keystroke / close, surface timeouts as actionable hints, and note when the match list is truncated.
[0.17.0] — 2026-08-25
Added
phi run --yolo: skip all permission checks for one headless run (benchmarks / CI).phi run --tools: limit a headless run to selected built-in tools.- Hooks: session lifecycle events now include
usage— token counts of the latest completed assistant turn. - Hooks:
post_turnevent fires after each completed assistant stream with per-roundusage(for audit metrics such as cache hit ratio). util/clipboardreads and writes the system clipboard (text; images via wl-paste/xclip, osascript/pngpaste, or PowerShell).- Composer image attachments: Ctrl+V clipboard,
@image files, pending queue, and LLMImageson submit. util/image.Loadreads an image file (raw bytes + content-sniffed MIME type; png/jpeg/gif/webp, up to 10 MiB).
Changed
- System prompt and
agent_spawnguidance now state the sub-agent concurrency cap (default 4; spawn beyond it fails, no queue).
Fixed
- Tool errors no longer duplicate the error text in the TUI (Error and Output shown the same message twice).
[0.16.0] — 2026-08-22
Added
- Hooks:
commandUI intents —status(footer),list(palette page). - Hooks: session lifecycle events
session_start,session_shutdown,session_before_switch.
[0.15.0] — 2026-08-20
Removed
agent_liststatusfilter parameter (always returns the full list; each row still includesstatus).
[0.14.0] — 2026-08-20
Added
- Hook event
command:plugin.jsonentries register TUI slash commands (/namerunsrun). stdout maysubmita user message ortoast.
Changed
writecreates or overwrites files (no longer create-only). Useeditfor surgical changes.- File tools resolve relative paths against the session cwd and print
cwd-relative results (
find/ls/grep/read/write/edit). Absolute paths are used internally (including rg/fd) and returned only when the file is outside cwd. find(formerlyglob) usesfdfrom~/.phi/bin(same asrg): respects.gitignore, early-stops at limit, optionallimitarg.- Renamed directory listing tool
list→ls.
Removed
- Built-in
fetchtool (andpermissions.fetchconfig). Use MCP if you still need URL fetching. agent_logtool (parent agents only getagent_waitsummaries; job logs remain on disk under~/.phi/jobs/).
Fixed
phi updateon Windows: stage the download next to the installed binary (same volume) and fall back to copy when rename still cannot cross drives.- Assistant fenced code blocks drop the box/
-----chrome; a muted language caption sits above the highlighted code so mouse selection stays copy-clean.
[0.13.0] — 2026-08-18
Added
- TUI hot-reloads the git branch in the path label: switching branches outside the app (another terminal, an editor) refreshes the label automatically.
Changed
- TUI activity: tool rows keep a 1-cell braille spinner; the footer uses a Knight-Rider scan bar so the two don’t share the same glyph.
- Tool routing: bash is no longer described as an inspection tool; grep/glob
no longer nudge
agent_spawn;edit.hashis the 4 hex chars after#in@file path#TAG(leading#/ full header copy-paste is accepted). - Breaking: hooks are declared in
plugin.json(one file, many hooks) instead of per-directoryhook.json. Load~/.phi/hooks/plugin.jsonand~/.phi/hooks/<plugin>/plugin.json(same under the project.phi/hooks/).
Removed
- Per-hook
hook.jsondirectories. Useplugin.jsoninstead.
[0.12.0] — 2026-08-17
Added
- Changelog gate: PRs must update
CHANGELOG.md(with skip labels /[chore]), released sections are protected, and GitHub Release notes are taken from this file.
Changed
- Hashline
editnow requires a whole-file@file path#TAG(hashfield) fromread/grep; after a successful edit, re-read before anotherediton that path. Per-line hashes are 3 letters (a-z) and no longer use digits.
Removed
- Remove the redundant
agent_tasktool; composeagent_spawn+agent_waitinstead.
[0.11.0] — 2026-08-16
Baseline release when this changelog became the source of truth for user-visible changes. Earlier releases are available from GitHub tags only.