-
v1.4.0 — live tool tokens, a real terminal pane, and one-command tailnet access
StableSome checks failedci / gate (push) Has been cancelledreleased this
2026-09-20 04:52:36 -04:00 | 0 commits to main since this releaseevilcode v1.4.0 — live tool tokens, a real terminal pane, and one-command tailnet access
This release makes tool use visible while it happens. Tool calls now type into the transcript as their arguments arrive, and the
Ctrl+Lsplit follows the active call: bash output behaves like a live terminal, file mutations assemble against the file on disk, Markdown renders while it is being written, and every other tool gets a bounded preview instead of a blank panel.It also adds
/tailscale, which brings up the web companion on the current tailnet from inside the TUI, plus a broad daemon and agent reliability pass covering fan-out, replay, wakeups, prompt durability, and concurrent model/context updates.What changed
Live tool calls from provider to TUI
- Arguments stream end to end. OpenAI, Codex, Ollama, and non-streaming providers now expose one stable call identity and the same start/delta semantics; malformed or partial JSON remains safe to preview while it is arriving.
- The transcript types along. Tool rows appear when a call starts and update in place as arguments arrive, then reconcile with the authoritative completed call.
- Replay is self-healing. Daemon attach and ring replay preserve live deltas without changing the final headless response shape, and a full payload repairs a missed or interrupted delta stream.
A genuinely live
Ctrl+Lsplit- Bash is a terminal pane. The command appears as it is assembled, stdout and stderr append while the process runs, ANSI control sequences are stripped for safe rendering, and retained output is bounded.
- Writes and edits assemble visibly.
write,edit, andmultieditpreviews are applied to the current on-disk file as their JSON arrives. Diffs use the same syntax-aware highlight-then-tint treatment as the inline transcript. - Markdown renders while streaming. Whole-document
.mdwrites render uncached during assembly and settle into the normal cached preview at completion. - Every tool has a fallback. Unknown tools show a dimmed, bounded raw-argument preview rather than leaving the split stale or empty. The newest active call owns the panel, and completed calls reconcile it cleanly.
/tailscale- Run
/tailscaleinside evilcode to start the web companion on loopback, configuretailscale serve --bg, and display the tailnet URL and QR code. - Existing Serve routes are respected, failures are surfaced in the transcript, and the command includes a safe cleanup path.
Agent and daemon reliability
- Worker fan-out now reserves capacity correctly, wakes reliably, and persists session-log delivery without races.
- Attach snapshot plus replay has one publication boundary, avoiding gaps and duplicates during concurrent activity.
- Prompt rebuilds and context-window/model transitions are synchronized without holding locks across provider work; retry delays saturate safely.
- Web ask cards lock for the full answer lifecycle and disable their controls once answered.
Install or update
Fresh install:
curl -fsSL https://evileko.dev/evilcode | shExisting installations can update in place:
evilcode updateSource builds require Go 1.26 or newer. This release publishes the Linux/amd64 binary
evilcode-linux-amd64.Verification
go build ./...go vet ./...go mod verifygo test ./... -count=1go test -race ./internal/agent ./internal/provider ./internal/tools ./internal/daemon ./internal/tuigo test -tags probe ./probe -count=1
SHA-256 for
evilcode-linux-amd64:1e569761f72689e6aace283d0faa3f7f37055195a68916c457c529aec076eb4bDownloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads