You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Static Linux binary (x86_64-unknown-linux-musl) — releases now ship a fully static, musl-linked Linux build alongside the existing glibc one. Because musl is linked statically, the binary carries its own libc and depends on nothing on the host — it runs on Alpine, scratch/distroless containers, busybox, and older distros where a glibc build dies with GLIBC_2.xx not found or simply has no libc to link against. Verified end-to-end: the binary boots and completes a TLS handshake inside a bare Alpine container with no glibc and no system CA certificates.
Changed
TLS trust now uses bundled Mozilla CA roots (webpki-roots) — HTTPS previously trusted the system CA store (rustls-tls-native-roots), which reads /etc/ssl/certs at runtime. Minimal environments (Alpine, slim/scratch containers, bare CI images) often ship without ca-certificates, so every HTTPS call failed there with a certificate/"could not reach" error. The CA roots are now compiled into the binary, so HTTPS works out of the box on any system regardless of what's installed. This is what makes the static musl binary genuinely "runs anywhere." (Trade-off: a custom/corporate CA installed only in the system trust store is no longer picked up automatically.)
Install synaps 0.3.8
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaseebKhalid1507/SynapsCLI/releases/download/v0.3.8/synaps-installer.sh | sh
Configurable streaming frame rate (max_fps) — the TUI's streaming redraw rate is now a config knob. Add max_fps = 144 (or 240, or whatever your display runs) to ~/.synaps-cli/config; default is 60. Until now streaming redraws were hard-capped at ~10fps — a deliberate throttle from when each redraw rebuilt the whole transcript (O(n)). With 0.3.4's incremental cache (O(changed)) and 0.3.6's O(viewport) publish, a streaming frame is cheap, so the cap is now a real, tunable frame rate. Values are validated (1–1000) with a boot warning on bad input; user input (scroll/typing) always redraws immediately regardless of the cap.
Install synaps 0.3.7
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaseebKhalid1507/SynapsCLI/releases/download/v0.3.7/synaps-installer.sh | sh
Streaming render publish is now O(viewport), not O(transcript) — each frame, the TUI built its render snapshot by deep-cloning the entire line buffer (every message, every span) just so the render thread could slice the ~one screenful it actually draws. On long sessions that per-frame full clone was the last cost standing between streaming and a flat 60fps. The visible window is now sliced on the publishing side, so the snapshot carries only the lines on screen — publish cost no longer grows with session length. Completes the streaming-render perf arc: 0.3.3 throttled rebuild frequency, 0.3.4 cut rebuild cost (O(changed messages)), and 0.3.6 removes the residual O(n) publish clone. Selection and scrolling are unchanged.
Fixed
Scrolling and typing stayed smooth during streaming — the 0.3.3 redraw throttle (~10fps during active turns) also throttled your input, so scrolling the transcript or typing while the agent streamed felt sluggish. User input now bypasses the throttle (immediate redraw on scroll/keypress) while streaming text stays throttled — responsive controls without giving back the streaming CPU win.
Install synaps 0.3.6
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaseebKhalid1507/SynapsCLI/releases/download/v0.3.6/synaps-installer.sh | sh
Shell installer failed on systems without xz — release tarballs shipped only as .tar.xz, but minimal environments (slim containers, bare CI images) lack xz/xz-utils, so extraction died with xz: Cannot exec. Release archives are now .tar.gz (gzip is universal), and the generated installer extracts with tar xzf.
/gamba did nothing on .deb installs — the Debian package shipped only /usr/bin/synaps, omitting the hidden companion binary, so the casino command hit its "nothing here" path. The .deb now ships both binaries (parity with the tarball, Homebrew, and crates.io channels).
Install synaps 0.3.5
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaseebKhalid1507/SynapsCLI/releases/download/v0.3.5/synaps-installer.sh | sh
Incremental message render cache — the TUI now re-renders only the message(s) that actually changed during streaming, instead of rebuilding the entire transcript on every delta. Per-frame render cost drops from O(transcript size) to O(changed messages), so main-thread CPU during streaming stays flat regardless of how long the session runs. Completes the streaming-render perf work begun in 0.3.3: that release throttled rebuild frequency (~60fps → ~10fps); this one cuts the cost per rebuild. The full-transcript renderer is retained as a test oracle.
Install synaps 0.3.4
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaseebKhalid1507/SynapsCLI/releases/download/v0.3.4/synaps-installer.sh | sh
night-city theme — a premium neon-noir palette (Cyberpunk / Blade Runner / Neuromancer accents on a near-black base). Strictly opt-in via theme = night-city.
Tool transcript overhaul — per-tool colored gutter + glyph identity (bash / read / write / edit / grep / find / ls / subagent / ext), subtle per-tool panel backgrounds (input darker, output lighter), paired input→output ordering for parallel tool calls, and an ok / timed out status footer under each result. All themeable via new tool_* theme keys.
Performance
Streaming redraw throttled ~60fps → ~10fps during active turns (#131). The per-delta full RenderModel rebuild — which scales with session size — was the main-thread CPU cost; the spinner only needs ~10fps and deltas arrive faster than the eye reads. The idle/final frame still renders immediately, so end-of-turn state never lags.
Fixed
Tool colors no longer leak across themes — tool_* accents now derive from each theme's own palette (only night-city carries the neon set), and the no-config default theme is unchanged. Pick dracula and the tool gutters look like dracula, not Night City.
Thinking spinner could spin forever on an empty thinking step — the placeholder is now dropped when the agent produces text/tools or the turn ends. A real model … is preserved via a sentinel so it's never mistaken for the placeholder.
Install synaps 0.3.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaseebKhalid1507/SynapsCLI/releases/download/v0.3.3/synaps-installer.sh | sh
synaps.log was silently dead — after the A3 split the tracing EnvFilter only enabled synaps_cli=debug, but the code now emits from agent_core / agent_engine / agent_tui targets. With RUST_LOG unset (the default) every log line was filtered out. Added the three crate targets to the filter.
Version header showed a bogus <hash>-dirty on source-tarball installs — build.rs shelled out to git and trusted whatever repo it found; AUR/Homebrew extract the source inside the package's own git checkout, so it baked an unrelated commit + a spurious -dirty. Now it only trusts git when its repo root is the synaps workspace root; any packaged build (AUR / Homebrew / crates.io) shows vX.Y.Z · release instead. CI-built release binaries still carry the real commit.
Empty end_turn could misclassify as a silent-stop error in the default (telemetry-off) config — has_stop_reason was derived from a telemetry-gated field. Now captured unconditionally. (#130 follow-up)
In-stream API error bodies reached the screen unsanitized — a hostile/MITM endpoint could inject terminal escape sequences via an error event message. Error text is now sanitized like notices.
Mid-stream transport drops are now retried through the unified retry budget instead of hard-failing the turn.
build.rs-dirty no longer triggers on untracked files (--untracked-files=no); SSE line buffer gained an 8 MiB hard cap against a no-newline OOM; telemetry records now carry the real retry attempt number.
Changed
crates.io publish job runs with verification enabled and keys idempotency off the process exit code (not log grep), so a genuine publish failure fails the release loudly instead of silently skipping a crate.
Docs
User + contributor docs (README, AGENTS, in-app /help, and the 36-page wiki) cross-checked against the code and refreshed for the 0.2→0.3 / A3 workspace reality.
Install synaps 0.3.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaseebKhalid1507/SynapsCLI/releases/download/v0.3.2/synaps-installer.sh | sh
cargo install synaps from crates.io was broken in 0.3.0 — after the A3 workspace split, synaps-engine embedded its help data via include_str!("../../../assets/help.json"), a file at the workspace root, outside the crate. cargo publish only packages files inside the crate, so the published synaps-engine/synaps 0.3.0 could not compile (No such file: assets/help.json). The asset now lives inside the crate at crates/agent-engine/assets/help.json, and the crates.io publish job runs with verification (no --no-verify) so this class of packaging bug is caught before the permanent upload. Binary installs (GitHub release, Homebrew, AUR, shell installer) were never affected — they bundle the full workspace. The broken 0.3.0 crates are yanked.
Install synaps 0.3.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaseebKhalid1507/SynapsCLI/releases/download/v0.3.1/synaps-installer.sh | sh
Workspace architecture split (A3) — the monolith is now three library crates (agent-core, agent-engine, agent-tui) behind the synaps binary. Cleaner boundaries, faster incremental builds, independent test surfaces. No user-facing CLI changes.
Dedicated render thread — the terminal is driven from its own thread off an immutable RenderModel snapshot, decoupling draw latency from the event loop and closing a class of resize/teardown races. The signal watchdog is retired now that rendering is isolated.
/stats command — per-session token + cost receipt with a cache-split footer.
/context command — inspect live context-window usage.
Configurable prompt-cache TTL (cache_ttl config key) — 5m (default, unchanged behavior), 1h, or hybrid (1h on the stable tools/system prefix, 5m on the per-turn message tail). Long-gap sessions (> 5 min between turns) can keep their cache warm instead of paying full input price every turn. Invalid values fall back to 5m with a boot warning. Spec: docs/specs/cache-ttl-spec.md (v4)
Pricing is TTL-aware: 1h cache writes billed at 2.0× input (5m stays 1.25×); when the API reports no 5m/1h split, aggregate writes are billed at the 5m rate (fail-cheap)
extended-cache-ttl-2025-04-11 beta header sent only on API-key auth — 1h is live-verified working bare over OAuth, whose beta set is left untouched
Silent-downgrade detector: if 1h is configured but the account never honors it, a one-time-per-session notice fires; the configured mode is never auto-flipped
RPC protocol: agent_end.usage gains optional cache_creation_5m / cache_creation_1h fields (omitted when unknown — additive, existing consumers unaffected); same split flows through server-mode Usage messages and subagent aggregation
/model <name> and /thinking persist to config — in-session changes survive restarts.
Paste while streaming — input can be pasted mid-turn without dropping characters.
Build commit in the TUI header — the version now shows the exact git commit the binary was built from (e.g. v0.3.0 · 88e08e0), with a -dirty marker for builds from a modified tree.
Changed
Honest billing — reported cost now reflects exactly one Usage event per request and TTL-aware cache-write pricing. Figures will differ from 0.2.1 (more accurate, not more expensive).
Signal shutdown overhaul — SIGINT/SIGTERM handling rebuilt around the real root causes: clean teardown ordering, bounded budgets, and no watchdog.
Fixed
The "stopping" bug (#130) — in large conversations the agent could silently end a turn after running tools, never landing the synthesizing reply. Anthropic delivers some failures (e.g. overloaded_error) as an in-stream error event under a 200 response; the SSE parser had no error arm and dropped it, leaving an empty stream that was treated as a clean end-of-turn. The parser now surfaces these as visible, actionable errors; an empty model response is never swallowed; and the retry budget is unified so HTTP 5xx, transport drops, and in-stream errors all draw from one policy (429 keeps its dedicated budget). Prompt caching is unaffected — retries re-send the byte-identical request, hitting cache.
Cache-TTL usage split was read from the wrong SSE event — live message_delta frames carry only the aggregate; the 5m/1h breakdown arrives on message_start. The split is now captured at message_start with a delta-arm fallback, restoring telemetry split keys, the downgrade detector, and correct 1h write pricing in streaming sessions.
Signal delivery + shutdown — busy-loop and unkillable-process on a dead PTY fixed (three-layer); SIGINT clean-exit path restored.
Toast renderer panic on small-terminal resize (min > max).
Idle logo gradient frozen until the first keystroke.
Retry backoff is now header-aware (honours retry-after/reset) with a higher 429 budget.
/model, /thinking, /compact side effects now run on the live engine dispatch path.
Server-mode clients now receive Notice events.
Performance
Boot:--continue no longer parses every session file (~11s → ~1s); the skills fs-walk moved off the async runtime; plugins.json read hoisted out of the extension-load loop.
AUR build failure on LTO-enabled systems — the rustls migration (0.2.0) introduced ring, whose C/asm objects are GCC-LTO-incompatible with rust-lld: makepkg's -flto=auto produced bitcode the linker can't read, failing every ring_core_* symbol. PKGBUILD now sets options=(!lto); stale openssl runtime dependency dropped (TLS is rustls since 0.2.0). Binaries unchanged from 0.2.0.
Install synaps 0.2.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/HaseebKhalid1507/SynapsCLI/releases/download/v0.2.1/synaps-installer.sh | sh