Skip to content

v1.0.1

Choose a tag to compare

@github-actions github-actions released this 11 Nov 22:09
· 19 commits to main since this release
v1.0.1
041ef96

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_store answers 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 apply runs. 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.contradicted no 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 correction now 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. With feedback.enabled on (the default), every memory_store answer that shows a memory now asks Claude, when the fact replaces it, to report it outdated with memory_credit, which retires it: 🧠🔄 Updated alone names the memory and retires nothing.
  • The retirement limit counts memories. feedback.max_retirements counted 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 in config.toml is kept.
  • backsight read takes 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, as memory_read does; several, or none, exit 2 and ask for more of the id, instead of the server's HTTP 400.
  • Corrections after memory was shown, measured truer. injection.contradicted judged 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 in config.toml (configuration). An older backsight refuses a config.toml with a key it does not know: remove store_correction_min_score if you set it, before installing an older version (a failed update apply puts back your config.toml itself).

Install

On Linux:

curl -fsSL https://raw.githubusercontent.com/Barben360/backsight/main/scripts/install.sh | sh
backsight setup

On Windows x86_64, in PowerShell:

powershell -ExecutionPolicy ByPass -c "irm https://raw.githubusercontent.com/Barben360/backsight/main/scripts/install.ps1 | iex"
backsight setup

Requirements 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 schtasks nor 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 days reads 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 switch is refused). It serves this PC only, has no web UI, and starts with your logon, not at boot.
    • backsight server status keeps showing the server's last refusal while it is stopped, until a start passes the check.
    • backsight's .exe files 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, nor setup --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.
  • 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's price check 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 verify runs in the runtime that will restore.
  • On Windows, the commands the dashboard and stats --json offer 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.