Repository navigation
v1.0.1
Linux amd64 is tested; Windows amd64 is tested in CI. The Linux arm64 and macOS binaries are built but not tested.
Update from v1.0.0 or any v0.1 with backsight update apply: it takes a verified backup first and rolls back if a step fails. Then restart Claude Code, so it reads the memory tools' new answers, and a running dashboard (Ctrl+C, then backsight dashboard). New install: see below.
- The server is unchanged (Hindsight 1.2.0): no server upgrade.
- The instruction set is v18 (v17 before): the
memory_storeanswers below. - The memory bank gets a new template, with the new extraction rules below: it is sent once, at the next bank apply, which
update applyruns. Memories already extracted are not extracted again. On a PC that uses another PC's server, the server's PC sends it once that PC is updated. - The plugin and the metrics index are unchanged.
- From the update on,
injection.contradictedno longer counts a prompt that came after a subagent's hand-back or another session's message, so it can drop once.
What changed
An audit of two weeks of one install's memory, checked against its sessions, found that extraction generalises: a plan written in a note came back as a delivered fact, and a constraint given to a subagent for one task came back as your standing rule. A correction then could not always retire what it replaced. Nothing wrong was done from these memories, since your own words won each time, but a session without them would get a confident, contradictory answer (#317, #318).
- Plans stay plans. The bank's extraction rules say that a plan, an assignment or an intended step is never a delivered outcome: kept, it is recorded as planned, with its date. Only a source that says something was done, verified, merged or released gives a delivered state. A note that states a plan keeps it a plan.
- A task's constraints stay the task's. What a subagent was told for its task ("do not merge", "do not push") is not extracted as your rule, and a permission or restriction you give for one task is recorded with that scope. When the server consolidates memories, a fact with no date of its own no longer reads "since" the day it was mentioned, and a rule you stated outranks one inferred from an agent's report.
- A correction can retire what it replaces. A fact Claude stores as a
correctionnow shows up to 2 similar memories, from a score of 0.6 (recall.store_correction_min_score) instead of one from 0.8: the memory a correction replaces is often worded otherwise. Withfeedback.enabledon (the default), everymemory_storeanswer that shows a memory now asks Claude, when the fact replaces it, to report it outdated withmemory_credit, which retires it:🧠🔄 Updatedalone names the memory and retires nothing. - The retirement limit counts memories.
feedback.max_retirementscounted the raw facts retired, so one observation drawn from 3 facts used 3 of the 3 allowed; it now counts each memory Claude reports once, an observation retired through any number of its facts, over any number of calls, included. Its default goes from 3 to 10. The other guards are unchanged: a memory shown in the session, a correction and its evidence on every report,feedback.cross_project_retire, and the line printed with its undo. A limit you set inconfig.tomlis kept. backsight readtakes a short id. The 8 characters the lines from memory print are enough when this PC's record of what was shown holds a memory starting with them, asmemory_readdoes; several, or none, exit 2 and ask for more of the id, instead of the server'sHTTP 400.- Corrections after memory was shown, measured truer.
injection.contradictedjudged the prompt after an injection whatever came between; after a subagent's hand-back or another session's message, that prompt answers that work, not the memory. It is still logged, never as contradicted. - Built with Go 1.27.4 (1.26.10 before), with the standard library's latest fixes (#302).
- New setting,
recall.store_correction_min_score = 0.6, and a new default,feedback.max_retirements = 10; backsight writes neither inconfig.toml(configuration). An older backsight refuses aconfig.tomlwith a key it does not know: removestore_correction_min_scoreif you set it, before installing an older version (a failedupdate applyputs back yourconfig.tomlitself).
Install
On Linux:
curl -fsSL https://raw.githubusercontent.com/Barben360/backsight/main/scripts/install.sh | sh
backsight setupOn Windows x86_64, in PowerShell:
powershell -ExecutionPolicy ByPass -c "irm https://raw.githubusercontent.com/Barben360/backsight/main/scripts/install.ps1 | iex"
backsight setupRequirements as for v0.1.22-m7. On Windows, Claude Code must find Git Bash: if Git for Windows is portable or installed in a place of your own, set CLAUDE_CODE_GIT_BASH_PATH to its bin\bash.exe (doctor's git-bash check gives the command).
Known limits
- The new extraction rules apply to what is extracted from now on: a memory already wrong stays until Claude reports it or you retire it (
backsight memory stale,backsight forget <id>). Whether the server's model follows them is checked on live extractions, not in tests. - A fact Claude stores as a correction, then reports outdated with
memory_credit, is stored as two correction notes. - Dashboard:
- Version switches and settings changes are marked on a day's page and on Releases only, not on every chart.
- The custom window goes back 13 months, as far as this PC keeps its history.
- Time to recall needs a few days of history, and 20 sessions before it shows times; it is judged (ok or watch) only from 100 sessions, and reads "too few" until then.
- A window, custom or typed in a URL, can span at most 400 days, between 2000 and 2099.
- Bank growth still counts a UTC day that straddles the window's start as a whole day.
- Memory yield needs four weeks: a week counts 28 days after it ends.
- On a window over 200 days, charts show no per-day values on hover, and "Show as a table" lists the latest 120 days.
- A week that is not complete shows no count of new memories.
- The project filter takes a typed name, not a pick from a list (the Projects page lists the names). The Projects list cannot be sorted. The context card names the session budget rather than showing its value.
- GPU reranker:
- It needs the Docker runtime, on the server's PC.
- Tested on one NVIDIA RTX A2000 (Linux) and one AMD Radeon 890M (Linux). Intel GPUs, macOS and Windows are not tested.
- Owner checks:
- The short-lived native units created during install, start and restore are not checked.
- On Windows, when neither
schtasksnor the task's file can be read, the task is driven as before.
retain resend-failed: it does not cover notes and sub-agent reports sent while extraction failed (the queue drops them once sent). A transcript rewritten or moved after its worktree was deleted loses the project recorded for those turns, so the session is then filed by today's rules.- The metrics index: an index already in write-ahead mode whose folder no longer allows it fails its writes until the state directory is back on a local disk.
stats daysreads a year of prompts with no index for it (about 0.1 s locally). - Import: a file the server keeps rejecting holds that folder's next files until it passes. The last tick before a cap can overshoot it by what was already in flight. A file deleted from the folder stays in the memory until
import purge. - Windows:
- WSL is not tested, and Windows on Arm has no binary.
- The native runtime is the only runtime there (
server runtime switchis refused). It serves this PC only, has no web UI, and starts with your logon, not at boot. backsight server statuskeeps showing the server's last refusal while it is stopped, until a start passes the check.- backsight's
.exefiles are not code-signed: SmartScreen or Smart App Control may warn about them. The install script checks the release signature before it runs anything.
- The terminal's look:
- On Windows, the splash draws the ASCII logo unless the console's code page is UTF-8 (65001;
chcp 65001): many consoles default to another one. - The views' tables (
stats <view>) and section headings are not colored yet, norsetup --undo's list. - The braille logo needs a font with braille characters (most coding fonts have them); with one that lacks them, set
terminal.logo = "blocks". The logo's dot can take two columns in an East Asian terminal.
- On Windows, the splash draws the ASCII logo unless the console's code page is UTF-8 (65001;
- A new install reads "learning" for its first week, and some numbers read "too few" until enough prompts and turns accumulate.
- Extraction cost needs a price: the built-in table's, or one set under
[llm]in the config file for another model (doctor'spricecheck says when none is known). The server reports token counts for all PCs together. - On native, PostgreSQL is 18.1 with pgvector 0.8.5, where the Docker image runs 18.6 with 0.8.7;
backup verifyruns in the runtime that will restore. - On Windows, the commands the dashboard and
stats --jsonoffer to copy are quoted for PowerShell; run through Git Bash, a name holding an apostrophe comes out without it. - Claude cannot run
/reload-plugins: after an update from the session, you type it. - A LAN address carries the API key in clear; a tailnet address encrypts it.
- The shared part of a session continued on two PCs may be stored twice.
- Several PCs: a PC sends its figures once a UTC day, up to the day before, so another PC's today is not in all PCs until the next day; the others' figures are fetched every 6 hours. A PC counts in a window by the noon (UTC) of each of its days. The other PCs send no project, session or memory: Projects, Sessions and Memories stay this PC's, and a project filter does not narrow the others (
other PCs: not filtered). The verdict stays this PC's. Speed across PCs is a range from time buckets, never an exact time, and the PCs' figures are trusted as sent: nothing signs them. - The feedback database:
- The ledger lookup's speed is measured on Linux only: Windows has no bench yet.
- After a rollback to an older version and an update again, the counts that version added catch up at the first tick.
- In a rare race during an update or a rollback, an older version can leave one tick's shows out of its
ledger.json; this version's next tick counts them.
Report problems at https://github.com/Barben360/backsight/issues, after reading the diagnostic backsight report prints, or ask Claude /backsight:doctor. Report vulnerabilities privately, as https://github.com/Barben360/backsight/blob/main/SECURITY.md describes.