Repository navigation
efr 0.0.2
The reply view is new: replies stream without lag, a status row shows what runs, and
tool calls and questions have a clear layout. This release also fixes two sandbox
bugs.
Added
- Streaming drafts. efrd sends the text of a running turn to the reply view every
16 ms, and never writes these drafts to the event log. A reply now reaches the
screen about 7 ms after the model sends it (it was about 100 ms). - A status row under the reply while a turn runs: a spinner, the state (waiting for
the model, thinking with the title of the reasoning, writing, preparing a tool call,
stalled, waiting for you) and the time. The clock stops while a question waits.
render.motion = falseturns the shimmer off. - An end-of-turn line, such as
done in 24s, 18.2k tokens in, 1.1k out
(render.turn_summary). - A progress indicator in the terminal tab during a turn (OSC 9;4), in Ghostty 1.2 or
newer, kitty 0.47 or newer and Windows Terminal, but not in tmux, GNU screen or
zellij (render.progress). - Colour roles for every part of the view: text, muted, accent, heading, link, code,
success, warning, error, quote and the diff roles.[render.colors]sets one role,
andrender.paletteloads a theme file with a[colors]table and an optional
code_theme(a.tmThemefile). The eggfriedrice.nvim colour scheme ships such a
file asextras/efr/eggfriedrice.toml. render.theme = "auto"withrender.theme_darkandrender.theme_light. The zsh
plugin asks the terminal for its background once and setsEFR_TERMINAL_BG.- Character widths by grapheme cluster in Ghostty, so emoji and flags no longer shift
the live zone. - Debug log lines with the time of each step of a call (
phase=... elapsed_ms=...).
docs/sandbox.mdtells how to read them. CHANGELOG.md, and release notes that come from it.
Changed
- Tool calls are blocks:
· $ commandin the code colour, a muted│output tail
while it runs, and a result row (✓ 0.4sor✗ exit 3 · 2.0s). A failed call keeps
its last 3 output lines. A long command wraps at the width and is never cut. - Questions are cards with a thin muted bar and a title such as
? allow outside the sandbox. After the answer, a card gives its place to one line,
✓ allowedor✗ denied, and the command shows only once. - One blank line between blocks, and none inside a block.
- Markdown: no label above plain code blocks, a file name when the fence names one,
inline code in the code colour, one heading colour, quotes in italic, and a rule of
at most 40 columns. - The default accent colour is yellow (ANSI slot 3).
sudo -k(and-K,--reset-timestamp,--remove-timestamp) can stand beside the
one command of a line that runs outside the sandbox.- A failed call no longer says
(sandbox)in its result; the end-of-turn note says
that the turn ran in the sandbox. - A question no longer says that its target exists. It still says when a target is a
directory, because a write grant then opens all of it. - The reply view no longer prints
answer sentafter a password answer.
Fixed
- A redirect to
/dev/null(and to the other nodes of the sandbox's own/dev) was a
write exit inauto: the line asked you and then ran outside the sandbox with your
full rights. It now runs in the sandbox with no question. - A command line that wraps inside a word no longer looks like two words; such a cut
is marked with↩. - When stdout is not a terminal, a call's rows come after its question and answer, as
on a terminal. - The status row no longer shows the reasoning title of an earlier model call.
- Ctrl+C during a turn says how long the turn ran.
- The cursor always comes back, also after a signal.
Security
- A path below
/dev/fd/<n>/or/dev/pts/<n>/counted as a node of the sandbox's
own/dev, so a write such asecho x > /dev/fd/3/authorized_keyscould run with no
question. Now only/dev/fd/<n>and/dev/pts/<n>themselves count; a path below
them is a write exit that only you can allow.