Repository navigation
Releases
nudge 0.5.1
Relay connections now survive laptop sleep: dead connections are detected within about a minute, and --connect sessions reconnect by themselves.
Highlights
--connectreconnects automatically. If the relay connection drops (for example while the laptop sleeps), the TUI shows "relay connection lost — reconnecting…", redials with backoff, and replays only the events you missed. Input typed during the outage is sent once it reconnects.- Dead connections are detected. Clients and the relay now exchange keepalive pings every 20s and treat 60s of silence as a dead connection. A peer that sleeps or disappears is reaped and dropped from
/peersinstead of lingering indefinitely. - No more "Connection reset without closing handshake" on
/connect-peer. The relay now reads connections waiting to be paired and drops dead ones, so a client is never paired with a session that went away. - Stale pairing codes are flagged. If reconnecting keeps failing for about 2 minutes, nudge suggests the session may have restarted and its pairing code changed.
Upgrade notes
- Self-hosted relays: upgrade the relay first, then the clients. Download
relayfrom this release and restart your relay service. A 0.5.1 client against an older relay repeatedly replaces its waiting connection, and the old relay keeps the dead ones around. The new relay keeps 0.5.0 clients working, so upgrading it first is safe. The shared relay is already upgraded. - Restarting the relay drops all open connections. Sessions running
nudge --daemonreconnect on their own. Older--connectTUIs and peer links need restarting. - Peer links are detected but not yet reconnected: re-run
/connect-peerwith the same code (#62). A message sent to a peer in the up-to-60s window before a dead link is detected can be lost.
nudge 0.5.0
nudge 0.5.0 adds web fetch, so nudge can read full web pages and PDFs as well as search, completing search → read → answer.
Highlights
- Web fetch. nudge uses Anthropic's server-side
web_fetchtool (web_fetch_20260318), up to 5 fetches per request. Each fetch shows as a WebFetch card with the URL and a one-line summary (size, or the error code), live and on resume. It never shows the page itself. - Safe by default. nudge only fetches URLs that came from you or from web search/fetch results. Links that appear only in files or command output are refused (
url_not_in_prior_context); paste them into the chat instead. This blocks a prompt-injection trick where a tool prints a URL with secrets in it and the model then fetches it. - Per model. Fetch follows the same capability rules as search: dynamic filtering on models that support it, direct calls elsewhere (e.g. Claude Haiku 4.5).
- Old fetch results are cleared automatically. On models that support context editing, Anthropic clears old fetch results from the prompt once a conversation passes ~100k input tokens. A one-line notice tells you when; your saved session is unchanged. Long sessions with big fetches keep working, including after switching to a model with a smaller context window.
Upgrade notes
NUDGE_WEB_SEARCHnow covers both search and fetch;offturns off both.- Page cap: web pages are capped at about 25k tokens each and may be cut off without notice.
- PDFs are returned whole (the cap doesn't apply to them) and can cost 100k+ tokens. nudge steers the model toward HTML pages where possible.
- Fetch can't render JavaScript-heavy pages or reach localhost or private pages.
- Cost: fetch has no extra fee beyond the tokens of the fetched content.
- Session compatibility: sessions that used fetch contain new block types; open them with 0.5.0. Older versions keep them but show no fetch cards.
- Known limitation: old PDF data is still uploaded with every request, even though it's cleared from the prompt. Reducing that is planned.
nudge 0.4.1
nudge 0.4.1 adds built-in web search, and nudge now adapts each request to what the selected model supports.
Highlights
-
Web search. nudge uses Anthropic's server-side
web_searchtool (web_search_20260318). It's on by default and capped at 5 searches per request.- Searches show as WebSearch cards with each result's title and URL, live and when a session is resumed.
-
Dynamic filtering. On models that support it, Claude can write and run code in Anthropic's sandbox to filter search results before they reach the context. That means better accuracy with fewer tokens. Those steps show as a single "ran code in Anthropic's sandbox" notice.
-
Per-model capabilities. nudge reads each model's capabilities from Anthropic's Models API and shapes the request to match:
- dynamic filtering or direct-only search;
- adaptive or budgeted thinking.
This fixes the
adaptive thinking is not supported on this modelerror when switching to Claude Haiku 4.5. -
Cited answers render cleanly. Answers that cite search results no longer break their markdown (tables, lists, bold) across fragments.
-
Long search turns finish. When the API pauses a long server-side turn (
pause_turn), nudge continues it instead of ending it early.
Upgrade notes
- Cost: web search costs about $10 per 1,000 searches plus result tokens. Code execution used for filtering is free.
- No permission prompt: searches run on Anthropic's side, so they don't go through nudge's approval step. That includes auto mode and subagents.
- Turning it off: set
NUDGE_WEB_SEARCH=off(shell, project.env, or~/.nudge/config.env). Any value other thanon/offis rejected at startup. - ZDR/HIPAA: dynamic filtering isn't eligible for Zero Data Retention or HIPAA. Turn web search off if that applies to you.
- Session compatibility: sessions that used web search contain new block types. nudge 0.4.1 reads older sessions fine, but older nudge versions can't fully read sessions created by 0.4.1 that used search. Upgrade every machine and daemon that shares a session store.
Build
- The macOS (Apple Silicon) agent now builds on GitHub's
macos-15runner;macos-14runners were retired. 0.4.0 was tagged but shipped no binaries; 0.4.1 is the first installable release with these changes.
nudge 0.4.0
Superseded by 0.4.1. This tag was published, but the release build failed (retired macos-14 runner), so it has no binaries. See 0.4.1 for the full notes.
v0.3.0
Supervised auto mode: /auto hands the work to a subagent your agent supervises, so you can walk away without the agent stalling on a permission prompt (#90).
Highlights
/auto, supervised auto mode: the agent still answers conversation and quick read-only questions itself, but work that edits files or runs commands goes to one subagent it keeps for the whole session. The parent decides every check-in itself, with your intent, the conversation, the child's activity andAGENTS.mdin view. It approves routine in-scope work, denies wrong turns with a correction, and denies risky steps (push, history rewrites, deletions, writes outside the repo, installs) with "skip it and report it". Nothing waits on you, and the final report ends with a Needs you list (#90).- Auto mode stays on until you toggle it off, including across
--resume(#90). - An AUTO badge shows in the TUI and Android headers while auto mode is on, updated live as it toggles and correct on resume/attach (#91).
- Subagents now get the project's
AGENTS.md; wherever it says to ask the user, they ask their parent instead (#89). - Subagents read and search with Read/Grep/Glob instead of Bash, and batch related Bash calls into one, so a supervisor gets fewer approval requests (#90).
Upgrade notes
- The session store gains a
sessions.autocolumn, added in place on first launch of 0.3.0 without a schema-version bump. Older nudge binaries keep working against the same~/.nudge/nudge.db, and unlike 0.2.0 there's no need to quit running sessions first. - The
SessionInfowire event gains anautofield that defaults to false on both the Rust and Kotlin sides, so older and newer clients and daemons interoperate. An older client just shows no badge. - Only a client that may answer permission prompts can turn on auto mode: a peer agent connected with
/connect-peercannot.
nudge 0.2.1
Subagent permission check-ins work again on the latest Claude models, and a check-in the parent can't decide now goes to you instead of being silently denied.
Highlights
- Check-ins no longer depend on forced tool choice. Newer models (e.g.
claude-opus-5-5,claude-sonnet-5-5) rejecttool_choice: tool, so every subagent Bash/Edit call was being denied. The parent now decides check-ins with thinking on, in a normal cache-sharing request (#86). - Unjudged check-ins escalate to you. If the parent can't reach a verdict (API error, or no verdict after one retry), the call surfaces on your permission prompt with the reason, instead of handing the subagent an unexplained denial (#86).
- Verdicts stay reliable over long sessions. Check-ins are now recorded as the real
RespondToPeercall and result, so the model no longer learns from its own history to answer check-ins with plain text (#87). - API errors now show the provider's actual error message instead of a bare HTTP status (#86).
- Denied tool calls now read "Permission to run this tool was denied." — the answer may come from a supervising agent, not only a user (#86).
Upgrade notes
- No storage, schema, or config changes; upgrade in place.
- Existing sessions resume fine. Check-ins recorded before 0.2.1 keep their old compact form in history; new ones use the new form.
nudge 0.2.0
Sessions now live in a single SQLite store (~/.nudge/nudge.db) instead of per-project JSONL files (#26).
Highlights
InspectSessiontool — agents can inspect, list, and search all past sessions: "what did that subagent actually do?" is now one read-only query, even for dismissed or crashed children (#26, ergonomics #82).--listis indexed and honest: state (running/ended), live turn count, resume-by-name from any past rename.- Sessions record spawn provenance (
spawned_by, task) and lifecycle state; resume truncation now marks dropped entries superseded instead of replaying them on later resumes. - Fixed: dismissing a subagent now actually ends it (previously it idled until the parent exited).
Upgrade notes
- Quit any running nudge sessions before first launch of 0.2.0. First run performs a one-time import of your existing JSONL transcripts (a few seconds, prints a summary); a session left running on the old version during the import would keep writing JSONL the store never sees.
- Your old transcripts under
~/.nudge/projects/are never modified — they remain the archival originals. - The store is schema-versioned: an older nudge will refuse (cleanly) to open a database written by a newer one.
v0.1.5
v0.1.4
- Remote peer agents — connect two nudge sessions across machines with
/connect-peer: a mutual, end-to-end-encrypted peer edge over the relay (#63) - Named drivers — once a second driver attaches to a session, messages in the model transcript are attributed by sender name (#67)
- Better iteration limit — per-turn budget raised 25 → 50 and configurable via
NUDGE_MAX_ITERATIONS; a subagent that hits its limit now reports up to its spawner (which can replycontinue) instead of stalling silently (#70) - Global config on first run —
~/.nudge/config.envis auto-created as a working config: default model (nowclaude-fable-5), thinking display, iteration limit, and the shared relay preconfigured — add yourANTHROPIC_API_KEYand you're set (#71)
v0.1.3
v0.1.3: Watch-only mode. Command in phone client. /peers info