Repository navigation
Releases
snajpagent 0.99.8c
snajpagent 0.99.8c — October 2, 2026
This release combines terminal, session, provider and context-recovery fixes with
voice-continuity changes. Sessions retain JSONL storage.
Changes
- Session names, resume selection and status listings preserve live ownership and
saved options. Listings group sessions by status and show ten stored sessions
by default;-l Nselects another count. - Command reports use the configured pager. Active-turn verbosity controls remain
responsive during blocked engine work, with immediate terminal feedback.
Successful reports remain available to voice observations;/catcontents stay
operator-only. - Native terminal attachment publishes a handover after the destination frontend
confirms it is bound. Input and audio activation follow that acknowledgement;
managed work stays with the session owner through detach and attachment changes.
Buffered composer edits share one repaint, preserving displayed response rows
when the terminal is resized during typing. - Context preparation retains cached request prefixes, retry notices and completed
tool results across compaction, recovery and model changes. Token preflight keeps
generation-only controls out of count requests. HTTP response streams use
HTTP/1.1 and preserve completed work across connection failures. - Voice captions accumulate transcript fragments. Voice and working-model guidance
distinguishes their roles: execution remains with the working model, and original
ASR text stays separate from derived paraphrases and approval decisions.
Voice intent remains enabled through work and recoverable failures, with honest
unavailable states. Conversational guidance supports progress, quiet and resume
requests while work continues. - POSIX command children reset inherited ignored SIGINT so managed interruption
works when the agent is launched in the background as well as in the foreground.
Parent signal settings remain unchanged.
The changelog contains the complete change list.
Scope and compatibility
Hermetic provider, CLI, PTY and terminal fixtures exercise these paths. Device and
operating-system runtime observations retain their recorded revisions in
QUALIFICATION.md; compilation does not qualify a newer executable on that device.
Long-session voice continuity and recovery against live providers remain
unqualified by the fixture results.
Native attachment uses a new private protocol. Use a compatible executable to
attach to an older running owner and finish or stop it deliberately. Existing
processes keep their running code until their operators restart them.
Production recipes enable device audio and native voice backends across the
implemented matrix. File decoding, configured provider routes and device access
are separate capabilities. Office rendering uses the separately installed runtime
documented in the manual.
Downloads and updates
The release includes the complete implemented PROD_TARGETS matrix, matching
symbols, manual, application and dependency sources, notices and SHA256SUMS.
Select the exact OS, architecture and ABI, then verify its checksum before
installation. Experimental platforms retain their qualification labels. macOS
builds retain the documented per-file quarantine exception for a verified download.
Official stable builds use latest and default automatic updates to on. Updating
replaces the executable for the next launch; it does not replace running processes.
Git-suffixed development builds use latest-dev and default automatic updates to
off. Older releases and their immutable assets remain available under their
original GitHub tags.
Source tag correction
Before binary publication, the 0.99.8c tag was corrected to commit
6cecbcedeaa80f7b53e52c2ed0d2124ae0dbb24d. It includes the Windows and OpenBSD
SpeexDSP build repairs and the buffered-typing terminal resize repair. All
downloads in this release come from that commit. Existing checkouts holding
an earlier candidate tag can fetch the corrected tag explicitly:
git fetch origin +refs/tags/0.99.8c:refs/tags/0.99.8csnajpagent 0.99.8b-d25f0846 (development)
Development snapshot based on 0.99.8b — September 29, 2026
This snapshot fixes OpenAI API-key token preflight and includes the terminal,
voice and context-continuity changes developed after 0.99.8b. Its version keeps
that approved base and adds the source commit's Git suffix. The stable release
and its existing downloads remain unchanged.
Changes
- Token-count requests select input parameters separately from generation
controls. This fixes theUnknown parameter: 'include'rejection and excludes
prompt-cache routing from ordinary and compaction counts. Generation retains
encrypted reasoning and cache affinity, including after manual compaction. - Native terminal attachment keeps one session owner while the foreground
terminal detaches, reattaches or switches sessions. Retained controls, process
continuity and workstation transfers use the existing ownership boundaries. - History paging, context-cache recovery and goal-aware retries preserve durable
work across long-session transitions. IRC recovery retains input identities
and reply obligations within their original input and turn lifetimes. - Voice shares session controls and read capabilities with typed input, retains
public dialogue and working-history observations, and keeps interface requests
separate from coding work. Credential filtering and settled-request retention
protect responses across credential rotation and voice shutdown. - Validated native voice expiry and temporary transport/service failures renew
the physical connection while retaining logical conversation state. Completed
tool effects and previously sent audio are not replayed. Policy errors remain
distinct from capacity recovery. - Production recipes enable device audio and native voice backends on Linux,
macOS, Windows and BSD. File decoding, provider audio routes and device access
remain separate capabilities; Office rendering uses its documented runtime. - Linux voice and HTTPS share Mbed TLS; libarchive is built with Nettle.
DTLS-SRTP and AES-GCM remain enabled with GPLv2-compatible license options. - Builds after a development tag keep the approved version base and replace the
previous Git suffix with the current revision. Clean tagged builds retain the
exact tag; modified checkouts add-dirty.
Scope and compatibility
Permanent unit and strict HTTP-fixture regressions cover the token-count
rejections, compaction request isolation and development-version derivation.
Fixture coverage also exercises context, transport, terminal attachment,
lifecycle and packaging. Device and operating-system runtime qualification is
listed separately in QUALIFICATION.md; consult it together with the platform
ABI and installation guidance in the manual.
Native voice capacity recovery remains unfinished and is excluded from this
snapshot. The binary journal codecs are preparatory; live sessions continue
using the existing storage format.
Downloads and updates
Development assets cover the complete implemented PROD_TARGETS matrix and
include matching symbols, manual, source, dependency notices and SHA256SUMS.
Application builds use DEBUG=1, retaining debug information and frame pointers
without application LTO or stripping. Select the exact OS, architecture and ABI
and verify its checksum before installation. macOS builds retain the documented
per-file quarantine exception for a verified download.
Git-suffixed versions use latest-dev and default automatic updates to off.
An update replaces the executable for the next launch; existing processes keep
running until their operators restart them. Stable installations remain on
latest. Older releases and their immutable assets remain available under
their original GitHub tags.
snajpagent 0.99.8b
snajpagent 0.99.8b — September 27, 2026
This release follows the immutable 0.99.8 tag. It includes the long-session
recovery, prompt, terminal-upload and model-selection changes developed since
that tag, plus updater support for this letter-suffixed stable version.
Changes
- Long-running sessions with accumulated media and tool history recover from
repeated compaction or active-request rejection without re-compacting the
same already-covered prefix. Completed tool effects and retained attachments
remain durable. The original first native provider error was not recoverable
from the journal; the fix is supported by reproductions and fixture coverage,
not a claimed reconstruction of that missing response. - The measured context percentage repaints during active progress and at the
idle prompt. A just-submitted input stays visible when the next composer is
blocked, without a second echo after admission. - Wrapped POSIX terminals can receive regular files with the stock
trzdrag
action or/upload. Successful batches become private unsent attachments;
failed transfers restore terminal input and preserve the pending draft.
/attachalso accepts opaque files. Resume and deletion remove abandoned
upload staging only under the operation's ownership and shape checks. - The model's
select_modeltool accepts only rows and effort variants in the
current provider catalog. Selectorcacherefreshes and lists those rows;
failed refresh leaves the prior catalog and selection intact. The operator's
typed/modelstill accepts uncached names. - The updater and release channel accept
0.99.8bas a stable version after
0.99.8. Stable installations stay onlatest; Git-suffixed development
builds stay onlatest-dev. Existing processes continue running their mapped
executables until their operators restart them. - Checkpoint serialization, upload transfer formatting, and upload checksum
errors use interfaces available in the older BSD build SDKs; compilation
does not establish new runtime qualification on those operating systems.
Scope and known limits
The upload client was exercised in a disposable PTY using a pinned stock Go
client, including binary multi-file success and malformed-image rollback;
synthetic wire cases cover other failures. A desktop GUI drag action, nested
SSH, a terminal-specific relay, and prompt/scrollback behavior outside the
PTY fixtures were not qualified. The iTerm2 saved-scrollback display issue is
intentionally left open. The old running processes whose high CPU usage was
sampled mapped older deleted executables. A newly installed 0.99.8 development
snapshot mapped its own inode, used 0.160 CPU seconds for twelve fake-provider
tool calls and zero CPU time while idle for five seconds; this is not a
real-provider or large-journal performance guarantee. No live session was
signaled or restarted during the fix work.
The release ships the implemented PROD_TARGETS matrix with separate matching
symbols, manual, source and dependency notices. Build success is not runtime
qualification on every platform. Linux i686 legacy stays outside that matrix:
its pinned uClibc dependency chain remains unbuildable; the opt-in recipe and
honest compatibility notes remain in source and on the download page.
Downloads and updates
Choose the executable matching the OS, architecture and ABI, compare its
SHA-256 with the published SHA256SUMS, and consult the download page for
minimum requirements and tested configurations. The official stable updater
installs a verified replacement in the background and displays one restart
notice; it never restarts a running session. Set [agent] auto_update = false
to opt out. Development builds default to updates off. Older release notes and
assets remain available under their original GitHub tags.
snajpagent 0.99.8
snajpagent 0.99.8 — September 23, 2026
Durable long-session recovery, truthful interactive input and complete tool and
IRC control.
These notes describe the immutable 0.99.8 tag and its companion downloads.
Later source changes are listed under Unreleased in CHANGELOG.md.
Changes
- Long open turns that accumulate more than 12 MiB of image input now recover
without replaying the same local projection error. The runtime retains every
completed result and omits already-presented historical pixels from
compaction requests. A rejected active request continues from the current
input with bounded history access instead of re-compacting the same turn;
durable media and completed tool effects remain intact. - Context capacity follows the selected binding's explicit limits and advertised
maximum. A smaller normal working window remains a policy value and does not
replace the hard ceiling. Compaction starts at the effective boundary or a
typed provider rejection. Normal compaction covers complete call/result
groups in overlapping chunks; a rejected active turn rebases to current
input, current goal and exact pending steering, with the historical journal
reachable through bounded tools rather than replayed automatically. - Resume preserves completed tools, unfinished outcomes and the selected
provider/model binding. Same-model, same-family and smaller-binding changes no
longer replay completed calls, switch back to the previous model for summary
work or loop over already-covered history. - Every nonblank interactive submission appears in scrollback immediately.
Stdin remains live for type-ahead while the ready prompt stays hidden until
acknowledgement; whitespace-only Enter remains local and creates no turn or
request. The presentation owner also handles one-shot output, immediate view
changes, asynchronous backlog backfill and per-room IRC tabs. - Steering preserves valid calls already emitted in an accepted response.
Commands can yield with live handles, retain the full tool catalog, and finish
without lost or replayed work. - Complete redacted command output receives durable stream/range identities.
read_tool_outputpages saved bytes after result truncation, cache eviction,
compaction or resume.set_command_shellselects a durable per-session shell
while preserving exact command bytes and existing security boundaries. - Execution limits now form one visible policy with per-model overrides for
yield, maximum wait, timeout, parallel handles, result size and output cache.
Configured waits can use the full 32-bit millisecond range while input,
steering, interruption and process collection remain responsive. - The embedded IRC server and outgoing connections run on independent runtime
workers. Models can inspect state, send, change nick/topic, host, connect and
disconnect;/disconnectcontrols model-created clients too, and topic
authorization follows the room's live+tpolicy. - Provider compatibility, media token bounds, model-cache binding and the
portable build/configuration matrix include the fixes accumulated after
0.99.7.
Upgrading sessions and history
Back up prompt history before manually editing it, and do not run older builds
against newer history files. Existing sessions replay unchanged; resumed work
uses current capacity, output-retrieval and recovery rules without rerunning
completed tools.
Downloads and updates
Choose the executable for the exact OS/ABI and architecture and verify
SHA256SUMS. Each target includes matching symbols; the release also contains
source, build instructions, the manual and dependency license notices. Use a
legacy variant only on its matching OS ABI.
Official stable standalone binaries install matching updates in the background;
the old process keeps running and one redacted:secret banner gives restart advice. Set
[agent] auto_update = false to opt out. Development builds use latest-dev,
retain debug information and default to updates off.
Platform requirements and scope
The release includes every target in the source PROD_TARGETS matrix: Linux
x86-64, AArch64, ARMv6, RISC-V 64, PowerPC 64 LE and i686; macOS
Intel, Apple Silicon and universal; Windows x64 and ARM64; current and legacy
FreeBSD, OpenBSD and NetBSD variants. Experimental labels and exact ABI/minimum
requirements remain in the download table. DEPENDENCIES.md and
QUALIFICATION.md describe runtime checks and platform limits; compilation does
not establish additional runtime qualification.
PowerPC 32-bit Linux is no longer a supported production target. Its opt-in
source-build recipe remains, but this release has no PPC32 binary or update
channel; 0.99.7 also had no PPC32 binary.
snajpagent 0.99.7
snajpagent 0.99.6 — September 14, 2026
Multimodal conversations, a steadier provider continuity story and cheaper long sessions.
These notes describe the immutable 0.99.6 tag and its companion downloads.
Later source changes are listed under Unreleased in CHANGELOG.md.
Changes
- The composer returns once the submitted turn reports processing instead of repainting a
ready-looking prompt immediately underneath it. Text typed in that window is buffered and
appears with the composer; empty, slash-command and display-only submissions stay immediate,
and a turn that never reports processing returns it after a brief bounded delay. - Images, documents and sampled video referenced in a conversation are read natively, and Office
work is driven through the engine installed on the target rather than a bundled runtime. Modalities
are compiled per target and the shipped matrix reflects what each platform actually carries. - The provider request now carries a stable per-conversation identity in the header this proxy keys
its prompt-cache affinity on. Consecutive requests of one session can therefore reuse the provider's
cached prefix instead of being pinned per request: the measured baseline this addresses is 270 of 610
large requests served under 10% from cache, with the cold class costing about five times more per
output token than the warm one. The first measurement after the change — one fresh session, 20
requests — shows 87.5% of input tokens served from cache against 30.0% for the same proxy before it,
with the reuse growing as the session does; one request in that set was still cold, so this is a
measured improvement rather than a guarantee. - Usage accounting records cached and uncached input tokens separately, per session (derived from the
journal, so it survives a resume) and per program, and/statusreports both with tokens per second
for the running turn and the most recent response. - A tool call is named by the provider's own call id on both sides of a request, so a scope change
between requests can no longer send a call under one id and its result under another. -maccepts the catalogue index the numbered model listing prints, not only a name; an out-of-range
index fails instead of being sent upstream.- A journal written by an earlier build still loads: the rules that govern what the model may do now are
enforced when an event is committed rather than while replaying history, so a goal the operator locked and
a model block recorded before that rule existed can no longer leave the session unresumable. - A goal the operator has locked is frozen in its objective: the model may not reword, block or cancel
it, refused in the tool before dispatch and again in the store wherever the event names the model,
while finishing or resuming it stays allowed. A refused store transition also names its own failing
clause, call and status rather than only the event type and sequence. - 32-bit x86 links statically without PIE, and the legacy pin's
checkframework builds without its
own test suite, which unblocked the targets those two walls held.
Known issues
- Not a regression: one interruption path can still refuse a state transition, so an affected turn ends with
invalid <type> transition at sequence N
instead of a completed result. 0.99.6 does not fix it. Every 0.99.6 binary names the failing clause, the
call and the result status inside that refusal, so the next live occurrence explains itself, and the fix
follows in the next development build once one occurrence names its clause.
Upgrading sessions and history
Back up prompt history before manually editing it, and do not run older builds against newer history
files. Existing sessions replay unchanged: the cache identity is derived from the session itself, and
sessions written before it are simply sent without the header until they are used again.
Downloads and updates
Choose the executable for the exact OS/ABI and architecture and verify SHA256SUMS. Each target
includes matching symbols; the release also contains source, build instructions, the manual and
dependency license notices. Use a legacy variant only on its matching OS ABI.
Official stable standalone binaries install matching updates in the background; the old process keeps
running and one local banner gives restart advice. Set [agent] auto_update = false to opt out.
Development builds use latest-dev, retain debug information and default to updates off.
Platform requirements and scope
- Linux: x86-64, AArch64, ARMv6, PowerPC 64-bit little-endian and i686.
linux-i686-legacy,
linux-riscv64andlinux-ppc32are not built for 0.99.6: the legacy target's pinned uClibc
source set cannot build it (the pin's owncheckframework test suite, then fontconfig 2.17.1's
fc-cachelink against undefinedBrotli*symbols with a verified-correct link order), the RISC-V
target fails one wall past its fixed FFmpeg syscall constant (libjpeg-turbo's static-SIMD coverage
tool does not compile), and the 32-bit big-endian PowerPC target cannot link coreutils 9.8's
libstdbuf.soin its pinned musl closure (__stack_chk_fail_localis undefined outside glibc).
Each is a chain inside its own pin rather than a defect in this tree, all three stay buildable
through their own recipes, and no other artifact inherits them. - macOS: experimental Intel, Apple Silicon and universal builds, macOS 11+. ARM64 is ad-hoc signed;
Intel is unsigned. Developer ID signing and notarization are absent, and execution is unqualified. - Windows: experimental x64 and ARM64 builds using OS DLLs; ARM64 needs UCRT.
- FreeBSD: standard libc.so.7 ABI, including 8.4 and 14.4; the separate legacy libc.so.5/libc_r.so.5
build supports 5.1 and 5.5. - OpenBSD: experimental amd64 builds for 7.9, 5.9 and early 3.5, separately.
- NetBSD: experimental amd64 builds for 10.1 and legacy 2.0/5.2.3, separately.
DEPENDENCIES.md and QUALIFICATION.md describe the actual earlier runtime checks and OS limits.
Compilation does not establish new runtime qualification.
snajpagent 0.99.6
snajpagent 0.99.6 — September 14, 2026
Multimodal conversations, a steadier provider continuity story and cheaper long sessions.
These notes describe the immutable 0.99.6 tag and its companion downloads.
Later source changes are listed under Unreleased in CHANGELOG.md.
Changes
- Images, documents and sampled video referenced in a conversation are read natively, and Office
work is driven through the engine installed on the target rather than a bundled runtime. Modalities
are compiled per target and the shipped matrix reflects what each platform actually carries. - The provider request now carries a stable per-conversation identity in the header this proxy keys
its prompt-cache affinity on. Consecutive requests of one session can therefore reuse the provider's
cached prefix instead of being pinned per request: the measured baseline this addresses is 270 of 610
large requests served under 10% from cache, with the cold class costing about five times more per
output token than the warm one. The first measurement after the change — one fresh session, 20
requests — shows 87.5% of input tokens served from cache against 30.0% for the same proxy before it,
with the reuse growing as the session does; one request in that set was still cold, so this is a
measured improvement rather than a guarantee. - Usage accounting records cached and uncached input tokens separately, per session (derived from the
journal, so it survives a resume) and per program, and/statusreports both with tokens per second
for the running turn and the most recent response. - A tool call is named by the provider's own call id on both sides of a request, so a scope change
between requests can no longer send a call under one id and its result under another. -maccepts the catalogue index the numbered model listing prints, not only a name; an out-of-range
index fails instead of being sent upstream.- A journal written by an earlier build still loads: the rules that govern what the model may do now are
enforced when an event is committed rather than while replaying history, so a goal the operator locked and
a model block recorded before that rule existed can no longer leave the session unresumable. - A goal the operator has locked is frozen in its objective: the model may not reword, block or cancel
it, refused in the tool before dispatch and again in the store wherever the event names the model,
while finishing or resuming it stays allowed. A refused store transition also names its own failing
clause, call and status rather than only the event type and sequence. - 32-bit x86 links statically without PIE, and the legacy pin's
checkframework builds without its
own test suite, which unblocked the targets those two walls held.
Known issues
- Not a regression: one interruption path can still refuse a state transition, so an affected turn ends with
invalid <type> transition at sequence N
instead of a completed result. 0.99.6 does not fix it. Every 0.99.6 binary names the failing clause, the
call and the result status inside that refusal, so the next live occurrence explains itself, and the fix
follows in the next development build once one occurrence names its clause.
Upgrading sessions and history
Back up prompt history before manually editing it, and do not run older builds against newer history
files. Existing sessions replay unchanged: the cache identity is derived from the session itself, and
sessions written before it are simply sent without the header until they are used again.
Downloads and updates
Choose the executable for the exact OS/ABI and architecture and verify SHA256SUMS. Each target
includes matching symbols; the release also contains source, build instructions, the manual and
dependency license notices. Use a legacy variant only on its matching OS ABI.
Official stable standalone binaries install matching updates in the background; the old process keeps
running and one local banner gives restart advice. Set [agent] auto_update = false to opt out.
Development builds use latest-dev, retain debug information and default to updates off.
Platform requirements and scope
- Linux: x86-64, AArch64, ARMv6, PowerPC 64-bit little-endian and i686.
linux-i686-legacy,
linux-riscv64andlinux-ppc32are not built for 0.99.6: the legacy target's pinned uClibc
source set cannot build it (the pin's owncheckframework test suite, then fontconfig 2.17.1's
fc-cachelink against undefinedBrotli*symbols with a verified-correct link order), the RISC-V
target fails one wall past its fixed FFmpeg syscall constant (libjpeg-turbo's static-SIMD coverage
tool does not compile), and the 32-bit big-endian PowerPC target cannot link coreutils 9.8's
libstdbuf.soin its pinned musl closure (__stack_chk_fail_localis undefined outside glibc).
Each is a chain inside its own pin rather than a defect in this tree, all three stay buildable
through their own recipes, and no other artifact inherits them. - macOS: experimental Intel, Apple Silicon and universal builds, macOS 11+. ARM64 is ad-hoc signed;
Intel is unsigned. Developer ID signing and notarization are absent, and execution is unqualified. - Windows: experimental x64 and ARM64 builds using OS DLLs; ARM64 needs UCRT.
- FreeBSD: standard libc.so.7 ABI, including 8.4 and 14.4; the separate legacy libc.so.5/libc_r.so.5
build supports 5.1 and 5.5. - OpenBSD: experimental amd64 builds for 7.9, 5.9 and early 3.5, separately.
- NetBSD: experimental amd64 builds for 10.1 and legacy 2.0/5.2.3, separately.
DEPENDENCIES.md and QUALIFICATION.md describe the actual earlier runtime checks and OS limits.
Compilation does not establish new runtime qualification.
snajpagent 0.99.5
snajpagent 0.99.5 — September 10, 2026
Local-first prompt history, provider reasoning continuity and terminal controls.
These notes describe the immutable 0.99.5 tag and its companion downloads.
Later source changes are listed under Unreleased in CHANGELOG.md.
Changes
- Up/Down, Ctrl-P/Ctrl-N and Ctrl-R visit session history first, then the global
archive. Submissions remain private to a running process until orderly exit.
Only newly entered lines are appended globally; repeated resume/exit does not
republish saved entries. Files are neither copied wholesale nor pruned, and
large-file searches remain cancellable. - Provider reasoning is retained privately and replayed with matching tool calls
and results, including after resume and during compaction. Replay is scoped
to provider, endpoint, model and credential identity. DeepSeek thinking streams
accept non-public reasoning parts without displaying or executing them. - Model/provider/effort selections persist across turns and resume. Goal
interruption settles state before showing the idle prompt; empty Enter stays
local. Command help, queued-prompt rendering, history counts, active controls
and manual compaction have been corrected. - Installation and first-run instructions cover all six platform families.
Twenty standalone production executables retain the existing target matrix.
Upgrading sessions and history
Back up prompt history before manually editing it. Do not run older builds
against the new unbounded history files: older versions can prune the archive.
Saved local entries from an earlier process are not republished on resume,
including entries whose original process crashed before its global merge.
An explicit /exit submission adds its own history entry; empty Ctrl-D does not.
Reasoning continuation is stored in the private session journal, not the public
transcript. Sessions written with the extended completion records must not be
downgraded to executables predating reasoning-continuation support.
Downloads and updates
Choose the executable for the exact OS/ABI and architecture and verify
SHA256SUMS. Each target includes matching symbols; the release also contains
source, build instructions, the manual and dependency license notices.
Use the separate legacy variant only on its matching OS ABI.
Official stable standalone binaries install matching updates in the background.
The old process keeps running and one local banner gives restart advice and the
release-log URL. Set [agent] auto_update = false to opt out. Development builds
use latest-dev, retain debug information and default to updates off; this stable
release leaves the existing development channel unchanged.
Platform requirements and scope
- Linux: x86-64, AArch64, ARMv6, RISC-V 64-bit, PowerPC 64-bit little-endian,
PowerPC 32-bit big-endian and i686; the separate legacy i686 build supports
Linux 2.4.27, with procfs, secure OS entropy and devpts for PTY commands. - macOS: experimental Intel, Apple Silicon and universal builds, macOS 11+.
ARM64 is ad-hoc signed; Intel is unsigned. Developer ID signing and
notarization are absent. Actual macOS execution remains unqualified. - Windows: experimental x64 and ARM64 builds using OS DLLs; ARM64 needs UCRT.
- FreeBSD: standard libc.so.7 ABI, including 8.4 and 14.4; the separate legacy
libc.so.5/libc_r.so.5 build supports 5.1 and 5.5. - OpenBSD: experimental amd64 builds for 7.9, 5.9 and early 3.5, separately.
- NetBSD: experimental amd64 builds for 10.1 and legacy 2.0/5.2.3, separately.
DEPENDENCIES.md and QUALIFICATION.md describe the actual earlier runtime
checks and OS limits. Compilation does not establish new runtime qualification.
The Windows updater's two-rename fallback has interruption/recovery semantics
specified in the manual; actual Windows/macOS updater execution remains
unqualified. Exact 0.99.5 build and validation scope accompanies the assets.
snajpagent 0.99.4
snajpagent 0.99.4 — September 9, 2026
Goal controls, durable session recovery and additional Linux builds.
Changes
/goal clearcancels the current goal and stops automatic continuation.
Pause, resume and clear accept whitespace around their command words.
An in-progress turn finishes normally; Ctrl-C interrupts it immediately.- Session recovery preserves admitted input and active-turn controls. Provider
policy clarification retains running commands and partial response evidence. - Twenty standalone executables cover Linux, macOS, Windows, FreeBSD, OpenBSD
and NetBSD. Linux adds ARMv6, RISC-V 64-bit, PowerPC 64-bit little-endian and
PowerPC 32-bit big-endian builds.
Downloads and updates
Choose the executable for the exact OS/ABI and architecture and verify
SHA256SUMS. Each target includes matching symbols; the release also contains
source, build instructions, the manual and dependency license notices.
Use the separate legacy variant only on its matching OS ABI.
Official stable standalone binaries install matching updates in the background.
The old process keeps running and one local banner gives restart advice and the
release-log URL. Set [agent] auto_update = false to opt out. Development builds
use latest-dev, retain debug information and default to updates off; this stable
release leaves the existing development channel unchanged.
Platform requirements and scope
- Linux: x86-64, AArch64, ARMv6, RISC-V 64-bit, PowerPC 64-bit little-endian,
PowerPC 32-bit big-endian and i686; the separate legacy i686 build supports
Linux 2.4.27, with procfs, secure OS entropy and devpts for PTY commands. - macOS: experimental Intel, Apple Silicon and universal builds, macOS 11+.
ARM64 is ad-hoc signed; Intel is unsigned. Developer ID signing and
notarization are absent. Actual macOS execution remains unqualified. - Windows: experimental x64 and ARM64 builds using OS DLLs; ARM64 needs UCRT.
- FreeBSD: standard libc.so.7 ABI, including 8.4 and 14.4; the separate legacy
libc.so.5/libc_r.so.5 build supports 5.1 and 5.5. - OpenBSD: experimental amd64 builds for 7.9, 5.9 and early 3.5, separately.
- NetBSD: experimental amd64 builds for 10.1 and legacy 2.0/5.2.3, separately.
DEPENDENCIES.md and QUALIFICATION.md describe the actual earlier runtime
checks and OS limits. Compilation does not establish new runtime qualification.
The Windows updater's two-rename fallback has interruption/recovery semantics
specified in the manual; actual Windows/macOS updater execution remains
unqualified. Exact 0.99.4 build and validation scope accompanies the assets.
snajpagent 0.99.3
snajpagent 0.99.3 — September 8, 2026
Broader BSD support and a tag-driven release workflow.
Changes
- Sixteen standalone executables now cover Linux, macOS, Windows, FreeBSD,
OpenBSD and NetBSD. New BSD variants retain their native OS library ABI. - FreeBSD legacy extends to 5.1 with the libc.so.5/libc_r.so.5 ABI.
OpenBSD has 7.9, 5.9 and early 3.5 variants. NetBSD has 10.1 and 5.2.3
variants; the 10.1 executable uses PIE and full RELRO. - The approved annotated Git tag drives the ordinary native build, full matrix
and release staging. Manual build/version/URL overrides remain available. - Current-master reductions consolidate terminal, process, provider and turn
ownership paths. BSD fixes cover positional offsets, old thread runtimes,
dependency link flags and terminal behavior.
Downloads and updates
Choose the executable for the exact OS/ABI and architecture and verify
SHA256SUMS. Each target includes matching symbols; the release also contains
source, build instructions, the manual and dependency license notices.
Use the separate legacy variant only on its matching OS ABI.
Official stable standalone binaries install matching updates in the background.
The old process keeps running and one local banner gives restart advice and the
release-log URL. Set [agent] auto_update = false to opt out. Development builds
use latest-dev, retain debug information and default to updates off; this stable
release leaves the existing development channel unchanged.
Platform requirements and scope
- Linux: x86-64, AArch64 and i686; the separate legacy i686 build supports
Linux 2.4.27, with procfs, secure OS entropy and devpts for PTY commands. - macOS: experimental Intel, Apple Silicon and universal builds, macOS 11+.
ARM64 is ad-hoc signed; Intel is unsigned. Developer ID signing and
notarization are absent. Actual macOS execution remains unqualified. - Windows: experimental x64 and ARM64 builds using OS DLLs; ARM64 needs UCRT.
- FreeBSD: standard libc.so.7 ABI, including 8.4 and 14.4; the separate legacy
libc.so.5/libc_r.so.5 build supports 5.1 and 5.5. - OpenBSD: experimental amd64 builds for 7.9, 5.9 and early 3.5, separately.
- NetBSD: experimental amd64 builds for 10.1 and legacy 5.2.3, separately.
DEPENDENCIES.md and QUALIFICATION.md describe the actual earlier runtime
checks and OS limits. Compilation does not establish new runtime qualification.
The Windows updater's two-rename fallback has interruption/recovery semantics
specified in the manual; actual Windows/macOS updater execution remains
unqualified. Exact 0.99.3 build and validation scope accompanies the assets.
snajpagent 0.99.2
snajpagent 0.99.2 — September 8, 2026
Background binary updates and clearer streamed Markdown.
Changes
- Official standalone binaries discover, verify and install matching releases
in a background thread. The current process keeps running its old version.
One local banner gives restart advice and links to the release log. - Stable builds default to automatic updates. Development builds carry a Git
suffix, retain debugging information and use a separate channel that defaults
off. Configureauto_updateandupdate_urlin[agent]. - Plain-text code fences keep their border without a redundant type label.
Indented and pipe-prefixed code stays literal during streaming. - Eleven standalone targets now include Linux i686 legacy, FreeBSD amd64 and
FreeBSD amd64 legacy. Completed tool arguments are accepted after empty
streaming placeholders, including snapshot-only provider responses.
Installation and updating
Download the executable for your OS and architecture and verify SHA256SUMS.
On Unix, make it executable and place it in a user-owned standalone directory.
Use auto_update = false for package-managed installations. Updates preserve
executable permissions and require ownership of the file and its directory.
The updater's trust root is the configured HTTPS publisher; expected size,
SHA-256 and product/target/publisher identity are checked before replacement.
Unix replaces the executable by a same-directory rename. Windows retains the
mapped original at .EXECUTABLE.update-old.exe if rename-over is unavailable;
this two-rename fallback has an interruption window. The manual describes
recovery. Windows replacement has Linux forced-path regression coverage but
has not yet been qualified on an actual Windows runtime for this release.
Platforms
- Modern Linux: x86-64, AArch64 and i686, with static application libraries.
- Legacy Linux: i686 non-PIE build; Linux 2.4.27 runtime exercised. Requires
procfs and secure OS entropy; PTY commands also require devpts. - macOS: experimental Intel, Apple Silicon and universal builds, macOS 11+.
ARM64 is ad-hoc signed; Intel is unsigned. Developer ID signing and
notarization are absent. Actual macOS execution remains unqualified. - Windows: experimental x64 and ARM64 builds using OS DLLs. ARM64 needs UCRT.
- FreeBSD: amd64 libc.so.7 build, exercised on 8.4 and 14.4; separate legacy
libc.so.5/libpthread.so.1 build exercised on 5.5.
See DEPENDENCIES.md and QUALIFICATION.md for platform limits. Earlier
platform runs qualify those paths, not every behavior added in this release.
All targets include matching symbol archives, exact source/build instructions,
manual and dependency license notices. Development applications are
always debug builds and retain symbols without application stripping.
Tagged source and canonical build
Annotated release tag: 0.99.2.
Exact source commit: 2a5083221c6fec7c5e592023b3e162b2a666e136.
Build from the tag with Git, GNU make and Nix on a Linux host:
git clone --branch 0.99.2 https://github.com/snajpa/snajpagent.git
cd snajpagent
make -j4 UPDATE_BASE_URL=https://agent.snajpa.net prod-matrixThe build derives 0.99.2 from the tag; no BUILD_VERSION override is needed.
This canonical command resolves all eleven tagged targets to the exact published
executable hashes. The source archive matches the tag file-for-file.
The version override shown in the original BUILDING-0.99.2.md is optional.
This release uses the eleven-target matrix present at its source commit;
later platforms belong to later releases. Existing executables, symbols,
source companions and checksums remain unchanged.