Releases: jamiesun/scoot
Releases · jamiesun/scoot
v0.4.0
Added
- Embedded runs now emit session-correlated audit events and write per-session
JSONL state, making API-driven runs replayable and easier to inspect (#140). - Added read-only session and audit commands:
scoot sessions list,
scoot session show <id>, andscoot audit show <session-id>(#141). - Added the foreground
scoot servestdio NDJSON protocol withrun,
session.list,session.get, andaudit.querymethods for local app-server
integrations (#142).
Changed
- Hardened the serve and daemon lifecycle: stdio
runuses request-scoped
result allocation and default retry semantics, anddaemon stoponly signals
a process when the pid matches the recorded running daemon state (#143).
v0.3.0
Added
- Docker releases now publish multi-platform Linux images for
linux/amd64,
linux/arm64, andlinux/arm/v7to GHCR, with optional Docker Hub publishing
when Docker Hub credentials are configured. The default image uses a minimal
BusyBox/musl runtime and matching Alpine runtime tags use an-alpinesuffix. scoot setupinteractive command generates a config directory in a few
prompts (config dir with overwrite confirmation, backendbase_url/model,
token source via env/0600 file/command,max_turns, policy), creates the
runtime tree, and writesconfig.tomlwithout ever inlining the token —
the fast path for provisioning multiple isolated instances on one host.- Release workflow now publishes explicit
ReleaseSmallassets with-small
suffixes for every supported target. - Installer supports
SCOOT_INSTALL_FLAVOR=smallto select the small release
artifact instead of the defaultReleaseSafeartifact. - Native
recallaction can retrieve exact earlier messages from the current
session transcript archive after active context compaction (#99). - Stable embedding API surface now separates the public package root from the
CLI/internal module and includes a compiled minimal embed example (#106). backend.storeconfig key andSCOOT_BACKEND_STOREoverride to opt into
Responses API server-side response persistence; defaults to off so Scoot
stays stateless and local-first (#110).- Client-side MCP support through a guarded
mcp_callmeta-action and
[[mcp.servers]]config. The client now supports stdio, Streamable HTTP, and
legacy SSE transports behind the same config and policy seam, including
per-server header authentication via environment-backed values (#103). - External context compressor plugins can now be selected with
agent.compactor = "plugin:<name>"and configured under
[agent.compactor_plugin.<name>]. Packages reuse thewasm_tooldescriptor
boundary withkind = "compressor"and run as bounded subprocesses with
extractive/drop fallback (#98).
Changed
- Scoot now speaks only the OpenAI Responses API (
/v1/responses): leading
system messages map to the top-levelinstructionsfield, the rest become the
inputarray, and transport is stateless by default (fullinputresent each
turn) so local context compaction stays in control. Requires a Responses-capable
backend such as Ollama >= 0.13.3, vLLM, or OpenAI (#110). - Guarded mode now confines file writes to the project root by default, wraps
tool observations in an explicit untrusted-data boundary, and requires an
opt-in for repository-carried<cwd>/.agents/skills(#113). - Context compaction now goes through a
Compressorstrategy seam withdrop
retained as the smallest fallback strategy (#97). - Added the built-in
extractivecompactor andagent.compactor/
SCOOT_AGENT_COMPACTORselection (#97).
Removed
- OpenAI Chat Completions transport, the
backend.apiselector, and the
SCOOT_BACKEND_APIoverride; the Responses API is now the only transport.
Configs that still setapiare ignored with a one-line deprecation warning
(#110). - The
backend.prompt_cachehint andSCOOT_BACKEND_PROMPT_CACHEoverride
(with the Anthropic-stylecache_controlbreakpoint); theinstructions
field is natively prompt-cached, so the manual hint is obsolete. Stale keys are
ignored with a deprecation warning (#110).
Fixed
-eand REPL runs now get per-process session transcript ids instead of
appending every run to sharedcli.jsonlandrepl.jsonlfiles (#95).- Default agent configuration now enables a conservative context budget with
extractivecompaction, whilecontext_budget_bytes = 0still explicitly
disables the guard (#96). - Catastrophic shell-command detection now also catches whitespace-obfuscated
fork-bomb patterns (#113). - GitHub workflows now pin action references to commit SHAs and verify the
downloaded Zig toolchain tarball checksum before extraction (#113). - MCP stdio tests now use per-process temp directories, so the parallel
zig build testartifacts no longer race on shared/tmppaths (#122). - MCP SSE transport now enforces a single cumulative timeout across the entire
session (connection setup,receiveHead, every POST, and every event read) so
a server that accepts the connection but never sends headers, or that dribbles
one event just before each per-event deadline, can no longer hang the agent
indefinitely (#123). - MCP remote header values sourced from environment variables (
value_env) are
now checked for CR/LF, closing a header-injection gap where the literal
valueandprefixwere validated but the resolved env value was not (#124). - MCP stdio transport now bounds the child-process stdin write with the
configured timeout. Previously a server that never drained its stdin blocked
the write forever once the OS pipe buffer filled with the model-controlled
request, and thedefer child.killcleanup could never run (#125). zig build testnow runs its three test artifacts sequentially instead of
in parallel, so tests that share hardcoded/tmp/scoot_*paths across
binaries no longer race (one binary'sdeleteTreeremoving a file another is
mid-execon); compilation still parallelizes (#127).
v0.2.0
Added
SCOOT_*environment overrides for zero-config and CI runs (#67)- Windowed
file_readsupport with offset/limit line ranges (#78) - Context compaction at the configured context budget instead of aborting the run (#81)
- Optional grep context lines around matches (#82)
- Config-gated prompt-cache breakpoint for stable model prompts (#84)
- Zero-dependency
outlineaction for low-token file skeletons (#85) - POSIX release installer that downloads, verifies, and installs the matching binary (#90)
- Run summaries on stderr after CLI/REPL runs, including event counts, tool calls, policy denies, backend status, and transcript path (#59)
- Minute-level 5-field UTC cron scheduling for
schedule.jobs(#65)
Changed
~/.agents/skillsdiscovery is now opt-in while project-local and Scoot-local skills remain enabled (#87)- Repeated read-only observations are deduplicated within a run (#83)
- Agent observations are token-optimized by stripping ANSI, using head/tail windows, and enforcing token caps (#80)
- Per-turn thoughts are no longer persisted in run history (#79)
- Runtime directories and JSONL audit/session files now use owner-only permissions, and JSONL files rotate to
.1at a bounded size (#60, #61) - GitHub workflows now use Node 24-compatible actions and shell-based Zig setup (#63)
build_optionsis imported by the executable root module as well as the library module (#64)parseStepnow tolerates compatibility backends that wrap the step JSON in a Markdown code fence or emit multiple concatenated JSON objects, executing only the first step while keeping single-step ReACT semantics
Fixed
- Language switching now lives in the mdBook navigation icon bar (#86)
- Invalid enum-like
SCOOT_*overrides now warn and keep the previous value instead of silently changing policy/mode/level (#68) confine_writesnow rejects a pre-existing symlink at the final write path component (#69)
Documentation
- Added maintained changelogs and made release notes derive from them (#66)
- Improved README and user-guide structure, including installer docs, design philosophy, best-practice cases, and daemon/run-mode guidance (#90)
- Added Scoot logo and favicon assets, plus an animated documentation landing mark (#91)
- Folded the logo into the README/mdBook infographic and removed duplicate standalone logo blocks (#92)
v0.1.0
First feature release since v0.0.2 (which only carried release-workflow plumbing).
Features
- CLI trace output and
--tracein the interactive REPL (#7, #48) - Live "thinking"/"running" trace markers so
--tracenever looks frozen (#56) doctorand policycheckcommands (#10)scoothome override flag (#11)- Skill validation, skill pack export, and skill review metadata (#15, #17, #21)
- Native skill reading with expanded skill search paths (#35)
- Bounded parallel read tools (#16)
- wasm tool package boundary (#20)
- Daemon lifecycle commands (#33)
Fixes & hardening
- Readonly policy default hardening and constrained read paths (#13, #14)
- Retry transient eval backend failures (#18)
- Resolved all open issues #22–#54 (#34, #49, #55)
- Version is now derived from
build.zig.zoninstead of hardcoded; release builds embed the tag (#57)
Docs
Full changelog: v0.0.2...v0.1.0