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

Install from PyPI (recommended):

pip install backstory-cli

Run from source (no install needed):

git clone https://github.com/arpitkath/backstory.git
cd backstory
python -m backstory init
python -m backstory status

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 test ✅ Stable Run self-test to verify installation and setup
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.7.0.tar.gz (54.3 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.7.0-py3-none-any.whl (41.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: backstory_cli-0.7.0.tar.gz
  • Upload date:
  • Size: 54.3 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.7.0.tar.gz
Algorithm Hash digest
SHA256 c27669c4ca5436a752ae390540f1758f8897ff6bf86744ab5c005d08c37f8bae
MD5 79ee49e296f75453f02adeba7932aa52
BLAKE2b-256 6acec2a51607ac329f1f05a808284de30fee9ca5513cce3ddd7cf65a73c6d956

See more details on using hashes here.

Provenance

The following attestation bundles were made for backstory_cli-0.7.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.7.0-py3-none-any.whl.

File metadata

  • Download URL: backstory_cli-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 41.8 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.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2828ac89c5d2d5d34220b77e89151de99855d661286d63acf716762abb5f8713
MD5 07a16a8d5799d134026823b382031bf9
BLAKE2b-256 1b67df5ff3b12585d81a11edcc8f801128c9b84f736dd604127ecce0a6c528df

See more details on using hashes here.

Provenance

The following attestation bundles were made for backstory_cli-0.7.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