Opt-in v1 preview built from master commit eb86711.
Experimental binaries, not a stable release. Windows preview binaries are unsigned. Use the stable channel for production. Preview numbers may have gaps.
What changed
212 commits since v1.0.0-preview.199: 9 feature/addition commits, 26 fixes, and 177 other changes (classified from commit titles).
Highlights from commit titles
- Add opt-in earned weekly reset recovery for continuing agents
- Implement verified Cedar Ember Fable earned resets with durable spend guard
- fix(tui): resolve strict production lint blockers
- fix(tui): show running cloud sessions in grouped resume picker
Commits
- eb867111 Upgrade bundled SQLite to resolve RUSTSEC-2026-0459
- 24b480e9 Stabilize preview metadata and file activity rendering tests
- e43279cd Avoid redundant swarm snapshot fanout work and preserve status order
- ccae47c8 Avoid redundant partial repaint rendering and frame clones
- 5ce1b17f Clear release source lint and keep optional metadata handling explicit
- 75d126cf fix(tui): resolve strict production lint blockers
- 255cc850 Reuse terminal command builder in companion request conversion
- cc0c3cd0 Fit inline account limits before truncating startup headers
- e98c60ff fix(tui): show running cloud sessions in grouped resume picker
- 45fc9c4b Preserve earned resets until approved pool routes are exhausted
- 200c9a89 fix: preserve dev version offset in hosted builds
- 06bbfae2 Keep account identity and usage limits on one compact header row
- fb64b269 Handle new quota safety fallbacks and exhaustion delivery errors
- 58efb3a7 Allow validated pinned manual previews without quiet-window starvation
- 97c6308f Cover SHA-isolated release source CI concurrency
- d383d289 Allow guarded pinned manual preview publication
- 8abed2b1 Distinguish recoverable throttles from exhausted usage with configurable routing
- 15364060 Update quota bar assertions for indented header rows
- 87b559a7 Switch TUI immediately only on definitive usage exhaustion
- 6a0e5fd5 Add opt-in earned weekly reset recovery for continuing agents
- 32bd8c49 Clear waiting agent quota state after concurrent Fable recovery
- e6c94f94 Implement verified Cedar Ember Fable earned resets with durable spend guard
- 6e565747 Keep each account quota visible on its own header row
- 7f9e2786 Show every reported account usage window in headers
- 7b2395ce Document Fable reset contract limitation and add safe integration hook
- 362dc60a fix(app-core): handle safety failures and production lint blockers
- 0c730d24 fix(tui): handle runtime failures without panic or silent defaults
- 025a76aa fix: report client focus and voice background failures
- 2c05ddd7 fix: handle base and provider safety fallbacks explicitly
- 3330b9a2 fix(ci): handle terminal cache failures and limit usage test helper
- a88a7388 fix(waybar): discover session sockets with directory watches
- 15e92d87 fix(ci): resolve remaining ratatui widget lint failures
- e5ffc084 fix(usage): adopt cross-process recovery and quota-wall telemetry
- a1a8edd9 fix(usage): recover Claude quota telemetry and stop rejected-token polling
- 45234c71 fix(ci): clear ratatui preview clippy blockers
- fc7d760c tui: stranded soft-interrupt recovery asks the server before requeueing
- 5bfba140 resume: display.resume_open_elsewhere moves or replaces a window already showing the session
- 8eb7c477 tui: key releases skip the full frame unless they change visible state
- 50f94201 tui: background turns with no reveal backlog tick at 1s, not 10fps
- 2ba3d03f dev_cargo: force selfdev builds onto hosted justrust (no local fallback)
- 42eab136 Share Anthropic reset availability with coordinated usage polling
- 4d1f3cdf Prefer fresh available account usage within routing priority tiers
- 42606f41 Decouple resume query editing from all search matching
- 12495967 docs: update weekly stars chart
- f60280eb voice: keep the niri socket query off non-Unix targets
- bc45162d config: do not write an empty [display.colors] table
- 9c9003b1 docs: update downloads badge
- 75a10e13 Name auto-backgrounded tools after their intent
- ccac73e2 Resume picker: keep typing off the search path and stop list flicker
- c664f8ae cloud runtime reload: live-reload-capable daemons no longer wait for idle turns
- aa0dd51f Show usage throttle retry countdown instead of bare 429 failure
- e5642ccc Do not let debug event subscriptions block group transfers
- bd959a5a Skip wakes for migrated sessions and no model-switch offer on lease block
- bc06755d tui: lane titles use title text, not blocker suffix
- 4f2d8239 Nudge agent to use todo tool after 20 tool calls with no todos
- 05e93ac6 cloud: rescue unreturned cloud work into a ref instead of refusing every later move
- 8e5a30a6 Name waited background task and fold worker wait onto its todo row
- 46dbcd01 cloud: scope long-lived comm/await/debug admission to their session; name unscoped transfer blockers
- 5d52f273 cloud: keep host awake while a daemon session is running
- 47e426e5 docs: update weekly stars chart
- b46d54b0 cloud: stop /cloud failing on idle admission
- 2df610a7 Merge remote-tracking branch 'origin/master'
- 2d76dedb Record verified cloud wakeup activation and backend flag recovery
- 3aa176e1 docs: update downloads badge
- 7c697549 tui: skip width measurement for left-aligned pane snapshot lines, ASCII width fast path
- 52d2aab1 cloud runtime: describe live handoff in reload help
- e950aeed tui: stream justrust status from one long-lived --watch process instead of spawning a query every second
- 9983155d tui: cap unfocused clients at 10 fps redraw (background swarm panes)
- 1a9d55a5 voice: query niri socket directly and cache focused session lookup (companion idle CPU)
- a9f3569e cloud: live in-place reload for managed cloud daemons, keeping sessions attached
- c5c6ad89 bash tool: all commands non-interactive (stdin=/dev/null, setsid no tty, no-prompt env); remove stdin detection/forwarding
- d8b42a08 ratatui-jcode: skip already-empty cells on reset/clear, in-place set_symbol; tui: getrusage frame CPU sample, memoized prompt preview
- a8fc37ea server: deliver voice transcripts to one client, not every attachment of the session
- cac4a120 Shard /resume transcript search across worker threads (~4x faster on real sessions)
- 15079694 tui: single-byte fast path in smoothness hash_row
- e7b940d8 tui: show live voice input inside the composer (waveform row + streaming ghost transcript)
- ed813e9c Classify external harness transcripts by source for /resume search weighting
- fe5f6b08 Hot reload every client, including --ssh, via inotify on published builds
- fab9ff27 Weight /resume search words by rarity and rank source evidence above literal-only matches
- f979a0ad ratatui-jcode: Buffer::diff skips unchanged narrow rows wholesale
- e5ff426f api bridge: always-on request timing log (~/.jcode/logs/api-timing.log): handshake, per-request total/translate/bytes/source, slow event translations
- 8f038020 Run reload recovery turn before user follow-ups queued ahead of the reload
- f8d1498a bash tool: stop pushing needs_input for stdin reads (stdin is auto-closed after 1.5s, push is never actionable)
- b7ca4ec9 ratatui-jcode: direct row blit for unwrapped, unscrolled Paragraph text
- 3170d244 tui: drop stale incomplete-todo pokes at dispatch and show pokes as notices
- 6c47789c companion: [companion] config toggles, autostart from the TUI, live waveform for global push-to-talk
- b018f90f tui: make expanded pinned todos scrollable
- 138175ab Cut idle polling: focus-gate cloud status SSH probes, coarsen swarm age tick to 5s, add wake-source stats
- 4e017c2f Hold queued follow-ups until remote history loads after reload
- 27d631ad Test that a retyped later user prompt outranks scattered /resume hits
- 4e5c7f7e Rank /resume sessions by retyped phrases in any user prompt, not only the first
- 00cb46fc Weight /resume project name and working directory above IDs and tool input
- e4c10b18 Give tool-call intents their own /resume search weight between replies and user prompts
- caf6b142 Weight tool-call intent labels as assistant prose in /resume search
- 36dfd046 tui: SSH git probes back off to 120s while the window is unfocused
- 4a2e78d3 tui: stop idle clients polling todos every 2s and re-waking telemetry thread
- 910287d3 stdin_detect: only trust wchan fallback when fd 0 is the sole readable pipe/socket/tty (fixes false needs_input pushes)
- 8f825a20 tui-markdown: merge same-style spans in word wrapper output
- f969dc5e ratatui-jcode: bulk-fill Buffer::reset; clear_area fills contiguous runs
- 424aa08b ratatui-jcode: row-slice Buffer::set_style (no-op for default style) and Paragraph render_line
- 105c3e36 tui: merge same-style syntax spans and trim cached body span capacity
- 6d60a882 ratatui-jcode: single-measure LineTruncator, report flushed cell updates; drop jcode's duplicate cell compare
- 45b18faf ratatui-jcode: ASCII width/grapheme fast paths, single-measure diff, cheap-first Cell eq; run upstream tests in workspace
- be3dd864 tui: report body cache memory breakdown by field in client:memory
- a7264df8 tui: only count changed cells per frame once draw-stats is requested
- cb0582a8 vendor ratatui-jcode: in-tree fork of ratatui-core 0.1.0 and ratatui-widgets 0.3.0 (unmodified baseline)
- 858e7657 tui: coalesce event-driven full redraws to 60fps in the remote loop
- 997c6262 test: drop IPv6 zone-id base URL assertion the url parser rejects (#2018 follow-up)
- 5ca1e119 ACP: report max_tokens/max_turn_requests/refusal/cancelled stop reasons and scope cancellation to the active prompt (#2094)
- bd73df2c session picker search: narrow literal token extensions to prefix-matching segments
- 407221e4 fix(tui): follow live terminal theme changes (OSC 11) and refresh the tmux background cache (#2047)
- b8e18578 fix: preserve runtime context when opening swarm agents (#2080)
- 39821598 feat(tui): copy session ID from picker (#2063)
- 11800ccb fix(providers issue #1939): accept http base URLs with any IP address (#2018)
- 91871800 fix(tui): emit OSC 52 before native clipboard in SSH sessions (#2078)
- 4f2278d8 fix(build): sweep stale launcher backups on Windows publish (#2065)
- 3587784e fix(compaction): reject refused or empty summaries instead of dropping messages (fixes #2089)
- 6a75170d Fix #2087: buffer UTF-8 across SSE chunks in Anthropic and Copilot streams
- a37f0bff session picker search: keep decode work across keystrokes
- e8d0cbe6 Show running cloud sessions in /resume
- 3f0c9d82 Event-driven git widget: inotify watcher on .git and non-ignored worktree dirs replaces polling
- 89381e29 Follow running sessions live in the /resume preview
- 2cfbf03f Session picker resumes onto the active build, not its own frozen binary
- f4dd8a7e Draw the /resume preview with the real chat renderer
- b771fd11 Weight /resume metadata index hits by source section: user prompts over replies over tool output
- 9d4ed83b Reap inherited children in every process image, not only the server
- 2f8957ca Cut idle battery drain: reap exec-inherited children, MCP process groups and exponential reconnect backoff, stamp-gated git polling
- cfa379f1 Weight /resume transcript matches by source: user prompts over replies over tool output and reasoning
- 8053f1ef feat(resume): show spinner 'running' state instead of age for live turns
- 3adafbd0 Revert "Make TUI activity status columns stable across phases"
- 663aa21d Revert "Restore compact comprehensive TUI activity status"
- 6bf48f95 feat(resume): configurable resume time, default to last message
- 3cccd699 chore(voice): lock bundled TLS root dependency
- 9904e71c Record enabled production mobile wakeups and safe runtime staging
- a74b4556 fix(voice): use bundled TLS roots for Nari connections on iOS
- 83ae68ad Refuse cloud restart when activity cannot be verified
- 5d505322 tui: reuse last_frame cell storage via Vec::clone_from
- 5ca28ecf tui: never await socket writes on the UI loop, fixing client/server write deadlock
- 629cca34 tui: reuse last_frame buffer allocation each full draw
- 0eb1105d tui: cut per-frame release CPU (memoize section byte estimate, FNV row hash, slice clear_area)
- 42343bd4 Add optional mobile command wakeups with polling fallback
- 0871234b harness-api: carry tool call identity on history tool rows
- b0ae6557 feat(voice): add authenticated cloud Nari relay sessions
- d2951073 tui: drop body cache entries superseded by a newer messages_version
- 1aba823d perf: skip per-frame background-task notification parse for non-notification messages
- caf3111b mobile: clear agents status on session close and expire errors after 30 min
- e0d3dbda mobile: report aggregate agents status to /v1/agents/status
- 88a2fbd0 Remove mobile runner startup and backlog polling gaps
- e8db4647 Lock lightweight shared voice credential dependency
- ef38d0c8 cloud reload: stop detached handoff daemons before start; report rollback
- dba35555 debug: show tail catchup and reveal backlog in draw-stats redraw_schedule
- 64add79e tui: drop superseded streaming frames from the full-prep cache
- a9e0c9c1 tui: drop to spinner cadence while revealed stream text waits on the turn
- e4eac5b8 feat(voice): expose lightweight shared Nari transport
- d2813b4c Document mobile latency measurements and count push delivery failures
- ec1b3798 Align mobile runner timings with shared cloud latency report
- b4da0774 Optimize authoritative cloud directory session metadata scans
- 44abd164 Fix mobile runner stderr deadlock and supervise full child lifetime
- 34225e3b cloud reload: accept a handed-off daemon as ready
- ae4c7af1 mobile push: per-kind emoji marker in notification title
- cb16698e Reuse shared mobile push HTTP transport and record safe timings
- 8c3cf2b7 Document per-operation SSH latency interpretation
- e19759fd Avoid redundant cloud preview journal entry scans
- 8de92779 Attribute bounded workspace commands to static operations
- 05d778f3 Count bounded cloud transport failures in latency reports
- 8e57a894 Filter cloud latency reports by explicit local time window
- 52fbe9d7 Preserve HTTP/1 mobile upload connections with bounded response draining
- 7869b1b5 cloud runtime: push --from-source/--reload, runtime reload, /cloud reload
- e6d9cb47 Fix queued follow-up dropped after reload when combined with delivered recovery reminder
- c7b896f3 Keep cloud latency correlations scoped to their connection
- bbddd3d4 Collapse mobile sync progress commit guard for strict Clippy
- 891a5366 Test mobile sync no-op writes and in-flight generation fencing
- a46d055f Optimize mobile sync unchanged reconciliation and no-op commits
- 83192304 tui: show time-since-last and token count on swarm messages, icon expand badge
- ccb930f2 Mobile push: durable history log (~/.jcode/logs/mobile-push.jsonl) with payload, source excerpt, outcome and API error body; log skips; retry transient failures once
- 92ca1819 feat(swarm): auto-dispatch workers for worker-owned todo lanes, replacing run_plan
- 9b8c8529 Show cloud repo git status on overscroll line
- e2e2c32f Mobile push: fix 400s from u64 turn ids, readable bodies (final answer lead, questions as needs_input, clean errors, parsed background-task wakes, word-boundary truncation, titles for wakes)
- 025d8793 Fix CI: rustfmt and refresh size/swallowed-error budgets
- e256031a Measure preview stages around their actual operations
- d86ab7a4 Safely forward bounded remote projection timing records
- 029d280e Trace cloud resume latency stages and report slow operations
- a361d2b6 Instrument SDK cloud HTTP and host wait timings
- ae960877 Accept notify_auth_changed from one-shot login clients so Desktop gets new models
- bff51ea1 Instrument bounded cloud previews with safe stage timings
- e193b9bd Instrument server history paging and bootstrap timing outcomes
- b8948c6a Log safe mobile sync stage outcomes and timings
- ab434ba9 perf(cloud): avoid rescanning snapshot message bodies for previews
- af3b5318 Reuse managed SSH connections for cloud previews and git probes
- ad0e5262 Keep polling todo snapshots after resume so cards don't freeze
- 6f16a817 Keep lazy history state and mobile sync tests in scoped modules
- 8985eb2b Preserve negotiated recent history across resume requests
- 48dd2aae Scope cloud preview cache by API endpoint and record live projection timings
- f360ab41 Prioritize fresh mobile saves over reconciliation backlog
- 7a3405a2 Fence recent history paging against live transcript changes
- 4c757af1 Fix CI: collapse clippy if, refresh size/safety budgets, include pending history changes
- 2dfce36e Sync opted-in mobile transcripts promptly after persistence
- 116a18fd Bound opt-in remote history bootstrap and page recent rendered windows
- 64c38a25 Bound cloud previews remotely and stream inventory metadata
- fcae7328 Resume picker: Alt+S cycles filters, Cloud follows All
- 096ef173 Improve usage snapshots, session picker mobile inventory, and cloud transport
- 438398e1 Prepare managed cloud SSH locally for fresh resume clients
- 6428b57b Send authoritative resume todos before large history replay
- 9d08c53f mcp: never open OAuth browser windows from background auto-connects
- f42f41ce Reuse authenticated SSH startup connection and managed mux
- 325678fb Discover mobile-created cloud sessions in local resume picker
- 3025aafe fix(tui): seed pinned todos before resumed session history
- 017e37da Restore compact comprehensive TUI activity status
- a0e31e4d docs: update weekly stars chart
- ad6843ab docs: update downloads badge
- 9d00b337 docs: update weekly stars chart
- c28c6aa7 docs: update downloads badge
First-time preview setup
Existing stable versions do not support --channel. Download the archive for your OS and architecture from this release, verify it against SHA256SUMS, and extract the entire archive into its own directory (keep all Linux companion files together). Run the extracted binary explicitly, using its full path, rather than the old stable jcode on PATH. For Windows, use the extracted .exe.
From that preview binary, run jcode update --channel preview (substitute its full path for jcode) to persist the opt-in channel and receive future previews. To roll back, run the preview binary with update --channel stable, or reinstall the current stable release. Stable users are never moved to previews automatically.
This preview series ends when the v1.0.0 stable tag is created.