Changelog
September 10, 2026 · View on GitHub
Notable changes to Rekal. Format follows Keep a Changelog; versions follow semantic versioning under the scope defined in docs/compatibility.md.
Per-release notes for every 0.1.x and 0.2.x build are on the
Releases page. This file
starts at 1.0; it records what 1.0 ships and everything after.
Unreleased
Fixed
- The installer resolves the release version off the
releases/latestredirect instead of the GitHub API. Unauthenticated API calls are capped at 60 an hour per IP, so a shared office egress could exhaust the budget before a user typed anything, and some networks reachgithub.comandraw.githubusercontent.combut never allowlistapi.github.com— both ended the install at "Could not fetch latest version from GitHub". The redirect uses the same host the download already needs. When resolution does fail it now reports the HTTP code each host returned and namesREKAL_VERSION, which skips the lookup. - README install commands work as written.
--targetis shown with thebash -s --a piped shell requires, andREKAL_VERSIONin front of the shell that runs the script rather than in front ofcurl, where it applied to the download and never reached the script — silently installing the latest version instead of the pinned one. The commands now name a version so a first install does not depend on the lookup at all.
1.0.2 - 2026-08-04
Fixed
rekal push --rebuildrefuses when the remote branch holds checkpoints this machine'sdata.dbdoes not — it no longer silently deletes another machine's already-shared frames.- The merged-only export gate judges ancestry against local
mainwhen it is ahead of a staleorigin/main, so a checkpoint ships on the samegit pushthat merges it rather than waiting for the next one. - Fish installs create
~/.config/fish/before appending the PATH export, so a machine that never configured fish still gets a working profile line.
1.0.1 - 2026-08-04
Fixed
- Installer no longer refuses machines without Claude Code — Cursor, Codex,
Gemini, Copilot, Kiro and OpenCode users can follow the documented
curl | bashpath. - Headless installs (CI, containers, no controlling tty) no longer crash on the PATH-prompt step; they silently append instead.
- Drilling a session missing from both databases reports a plain "session not found" instead of a raw SQL driver string.
rekal sync --helpdocuments that a plain sync also checkpoints and pushes the caller's own local work before fetching.
1.0.0 - 2026-08-04
First stable 1.0 release. The store format, wire format, command surface and
exit codes are covered by the version number under
docs/compatibility.md. Ranking and index.db remain
deliberately unfrozen.
Capabilities
- Capture. Sessions from Claude Code, Cursor, Codex, Gemini, OpenCode,
Copilot and Kiro, snapshotted by a
post-commithook into an append-onlydata.db. Re-capturing a growing conversation appends to its existing session rather than storing it again. No capture runs during a rebase. - Redaction. Secret redaction (pattern plus Shannon entropy) and home-directory path anonymization run before anything is written to the database, so nothing unscrubbed can reach the wire later.
- Sharing. Merged work only. A checkpoint reaches the orphan branch
rekal/<email>when its commit is an ancestor of the default branch, or its branch landed as a patch-equivalent squash. Unmerged spikes stay local. - Recall. Hybrid BM25 + LSA + deep-semantic ranking with additive facet,
recency and recall-graph layers, returning a compact seed digest by default
and raw JSON under
--json. - Knowledge layer. Tracked prose at HEAD chunked and searched alongside sessions, answering "what is the convention now" with a file and line pointer instead of an old conversation.
- Recall graph. Query-time edges from a session to the query that reached
it, local-only and never pushed, surfacing as a
[reached N× drilled N×]hint and an opt-out ranking boost. - Single binary. Database, embedding model, inference engine, full-text extension and compression dictionary all embedded. No runtime, no service, no API key.
Changed since 0.2.x
rekal push --forceis removed. The append-only wire format is a structural guarantee, not a policy, and a flag that overwrites a branch would demote it to the latter. No code path force-pushes; discarding a ref remains an ordinary git operation.rekal push --re-exportis renamed--rebuild. The old name still works as a hidden alias and will be removed no earlier than 2.0.rekal pushreports a publication failure as a warning by default, and as an error only under--strict, so a diverged memory branch cannot abort the user'sgit push.- Short flags across the command surface (
-p,-c,-a,-A,-n,-j,-e,-s,-r,-o,-F,-q,-i). rekal query --sessionaccepts the short handle from a digest (s14) as well as a full ULID.rekal query --sqlruns on a read-only handle and accepts a single statement.- Zero-argument subcommands reject extra words instead of silently answering a
different question;
rekal -- <query>forces recall past a command-name collision. rekal initruns a structural index rebuild so the first recall does not silently pay for an emptyindex.db.
Documentation
- A recorded demo driven by a real agent, generated by
scripts/demo/record.pyrather than staged. - README corrected against the shipped binary:
rekal cleanresidue, the seed digest format, platform support, and the download and on-disk size. - Compatibility contract published in docs/compatibility.md.