Skip to main content

Every AI-assisted commit has a backstory. Never lose it again.

Project description

Backstory

PyPI version Python 3.11+ License Knowledge Format Local-first

Git shows what changed. Backstory shows why.

Ever opened an AI-generated commit and wondered:

  • Why was this approach chosen?
  • What did the agent try before this?
  • What assumptions are hidden in this code?

What is Backstory?

Backstory is a local-first AI memory layer for Git repositories. It captures session context from AI coding tools, extracts the durable reasoning (decisions, risks, alternatives), stores it as Google's OKF markdown, and links it to Git commits so you can retrieve the why later.

Why not just write good commit messages? Commit messages describe what changed. They rarely capture the rejected alternatives, the risks you accepted, or the reasoning trail across a multi-step AI session. Backstory fills that gap.

Backstory terminal walkthrough

Quick Install

pip install backstory-cli

Then initialize in your repo:

backstory init
backstory status

See a full worked example with before/after code and stored session.

Features

  • Commit-level reasoning -- backstory why HEAD shows why a commit was made, not just what changed
  • Code-aware retrieval -- Query by file (backstory file <path>), line (backstory line <path>:<line>), or range (backstory range <path>:start-end)
  • Contradiction detection -- Warns when new changes reverse earlier recorded decisions
  • Local-first -- Everything stays in your repo. No cloud, no telemetry.
  • Human-readable storage -- Google's OKF markdown that agents, tools, and humans can read
  • Privacy by default -- Extracts decisions and risks, not raw chat logs. Built-in redaction for API keys and secrets.

How It Works

Backstory flow diagram

Backstory terminal walkthrough

  1. Capture -- A tool-native hook or exporter hands the AI session to Backstory.
  2. Ingest -- Backstory extracts the durable decisions, risks, and changed files. The raw conversation is discarded.
  3. Link -- The session is attached to the relevant Git commit via backstory attach HEAD.
  4. Retrieve -- Query reasoning by commit, file, line, range, or diff.

Git stays the linkage layer. Backstory stores the reasoning.

Commands

Command Status What it does
backstory init ✅ Stable Set up Backstory in the current repo
backstory dump ✅ Stable Ingest an AI session into OKF markdown
backstory attach HEAD ✅ Stable Link a session to a commit
backstory why HEAD ✅ Stable Explain why a commit happened
backstory status ✅ Stable Show Backstory state in this repo
backstory search <query> ✅ Stable Search past sessions and decisions
backstory show <session> 🧪 Experimental View a stored session
backstory file <path> 🧪 Experimental Show AI context relevant to a file
backstory line <path>:<line> 🧪 Experimental Show the decision behind a specific line
backstory range <path>:start-end 🧪 Experimental Show context for a range of lines
backstory code <path>:start-end 🧪 Experimental Show why a code block exists
backstory diff 🧪 Experimental Explain the reasoning behind the current diff
backstory redact ✅ Stable Re-scan and redact sensitive data
backstory hooks ✅ Stable Manage Git hook installation

Integration

Works with Claude Code today. Cursor and Codex support planned.

Backstory is designed for tool-native capture. The preferred path is a tool-specific hook, callback, or transcript exporter that hands the session to Backstory automatically.

See the integration guide for step-by-step setup.

Contradiction Detection

Backstory watches for new changes that appear to reverse earlier recorded decisions.

⚠ This change may contradict a decision from commit 8f21c9a:
  "payment.failed should mark subscription as pending, not cancelled"

That turns the tool from an archive into a guardrail.

Storage

.backstory/
  config.json
  knowledge/
    index.md
    sessions/
      index.md
      latest.md
      sha256-<session>.md
  redactions/
    tombstones.log

Session memory is stored as Google's OKF-style markdown -- human-readable, Git-friendly, and agent-friendly.

Privacy

Backstory is local-first by design. No cloud service or telemetry is required. Raw transcripts are never persisted -- only extracted decisions, risks, follow-ups, and Git context are kept. Built-in redaction scans for and removes API keys and secrets during ingestion.

Documentation


If you find this useful, starring the repo helps others discover it.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

backstory_cli-0.5.0.tar.gz (52.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

backstory_cli-0.5.0-py3-none-any.whl (39.9 kB view details)

Uploaded Python 3

File details

Details for the file backstory_cli-0.5.0.tar.gz.

File metadata

  • Download URL: backstory_cli-0.5.0.tar.gz
  • Upload date:
  • Size: 52.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for backstory_cli-0.5.0.tar.gz
Algorithm Hash digest
SHA256 ea38f2f707ccb4327653c483a7728bbebd610dac887ead660120792261ca2c07
MD5 79dff3e6d05806c1ed4e50ceda5ebc4f
BLAKE2b-256 682128cf1545e6ba7faffe97b6804c715e5b1132c56b489bbd539ed844ae37e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for backstory_cli-0.5.0.tar.gz:

Publisher: publish.yml on arpitkath/backstory

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file backstory_cli-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: backstory_cli-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 39.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for backstory_cli-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ce4906969ead7bf8f334b2ee8345380b9f971f958f3db8b0d12a6e4395cbc3b9
MD5 8c37f6bace2212e97e4336ffa72e6ee6
BLAKE2b-256 64e039f5327254fcb23c1d90dcddd1a1cb31bada747739d0b6c3f3a1c3582cd9

See more details on using hashes here.

Provenance

The following attestation bundles were made for backstory_cli-0.5.0-py3-none-any.whl:

Publisher: publish.yml on arpitkath/backstory

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page