Turn debugging sessions into reusable engineering artifacts.
Project description
FixTape
FixTape is a local-first CLI that turns debugging sessions into reusable engineering artifacts.
Instead of ending a hard bug hunt with just a patch and a vague memory, FixTape gives you:
- a structured debugging summary,
- a reproducible command trail,
- attached evidence such as traces, logs, and payloads,
- Git-aware snapshots of the code context,
- and a handoff package another engineer can actually use.
The pitch
When a hard bug is finally fixed, most teams still lose the most expensive part of the work:
- how the issue was reproduced,
- which commands mattered,
- which traces were useful,
- which hypothesis was discarded,
- why the final fix won,
- and how the team can prove the bug stays fixed.
FixTape preserves that path.
It is not a debugger. It is not a note-taking app. It is a debugging memory layer.
Why it feels different
Most developer tools help you:
- write code faster,
- inspect state faster,
- or generate code faster.
FixTape helps you not lose the investigation itself.
That makes it useful for:
- backend debugging,
- flaky integration failures,
- infra incidents,
- reproducible handoffs,
- and turning debugging effort into regression assets.
What you get
At the end of a debugging session, FixTape can generate:
generated/handoff.mdgenerated/debug-summary.mdgenerated/session-digest.mdgenerated/session-digest.jsongenerated/parsed-artifacts.jsongenerated/repro.ps1orgenerated/repro.shgenerated/regression-test.todo.mdgenerated/regression-draft.jsongenerated/timeline.json- copied artifacts such as traces, logs, payloads, and command outputs
Command set
Current commands:
fixtape start <title> [--include-last 40m]fixtape statusfixtape doctor [--window 40m]fixtape suggest-start [--window 20m]fixtape promote --include-last 40mfixtape note "<text>"fixtape link <ticket|issue|commit|pr|branch|doc|other|current-commit> [value]fixtape refs [session-id]fixtape run [--repro] <command...>fixtape capture [--repro] <command...>fixtape attach <kind> <path>fixtape snapshotfixtape finish --verdict <fixed|unresolved|handoff|needs-more-data> [--include-last 40m]fixtape listfixtape show [session-id]fixtape digest [session-id]fixtape similar [session-id]fixtape patternsfixtape clustersfixtape hotspotsfixtape lensesfixtape regressionsfixtape outcomesfixtape playbooksfixtape recipesfixtape triage <query>fixtape kickoff <title> --query <query> [--include-last 40m]fixtape search <query>fixtape reindexfixtape shell-init <powershell|bash|zsh|sh>fixtape export <destination.zip>
60-Second Quickstart
1. Install
From PyPI (recommended):
pip install fixtape
Or with pipx (isolated install, no conflicts):
pipx install fixtape
From source (for development):
git clone https://github.com/Py2755/FixTape.git
cd FixTape
python -m pip install -e .
2. Start a session
fixtape start "billing webhook duplicates charges" --tag incident --tag backend --include-last 40m
3. Capture the investigation
fixtape note "Can reproduce only with retry header present"
fixtape capture pytest tests/test_webhook.py -k duplicate
fixtape attach trace traceback.txt
fixtape attach payload failing_event.json
fixtape snapshot
4. Finalize the fix
fixtape note "Root cause was idempotency key ignored on retry path"
fixtape capture --repro python scripts/replay_event.py failing_event.json
fixtape finish --verdict fixed --summary "Retry path now respects idempotency keys" --ref ticket:PAY-123 --ref commit:abc123 --include-last 20m
5. Revisit the result
fixtape list
fixtape show
fixtape digest
fixtape similar
fixtape patterns
fixtape clusters
fixtape hotspots --kind file
fixtape lenses
fixtape regressions
fixtape outcomes
fixtape playbooks
fixtape recipes
fixtape triage "retry storm payments"
fixtape kickoff "payments retry gamma" --query "retry storm payments" --include-last 40m
fixtape doctor --window 40m
fixtape suggest-start --window 20m
fixtape promote --include-last 40m
fixtape search retry
fixtape link ticket PAY-123
fixtape export .\fixtape-session.zip
fixtape search now ranks stronger matches above weaker ones and shows compact field-labeled snippets, so title and summary hits naturally rise above low-signal substring matches.
fixtape search --field signals can now search parsed failure signals directly, including exception types, stack-trace families, HTTP failures, and file hints.
FixTape now also maintains a local cross-session index in .fixtape/session-index.json, which powers faster list and search across accumulated debugging history.
FixTape now also builds a second layer of cross-session intelligence:
fixtape similarfinds sessions with matching failure fingerprints, exception types, refs, and command patternsfixtape patternshighlights recurring failure clusters across your debugging history
FixTape now also has history-level intelligence views:
fixtape clustersgroups connected incidents that keep rhyming across timefixtape hotspotsshows which files, exceptions, families, status codes, or fingerprints keep reappearingfixtape lensescompresses the history into root-cause lenses and common next steps
FixTape now also writes a compact session digest on finish:
- one-line summary of the case
- likely failure family and area
- root-cause hint
- next recommended step
FixTape now also keeps higher-level engineering memory:
fixtape regressionsshows recurring regression-test opportunities across repeated failure classesfixtape outcomesshows what kinds of failures the team actually fixes, hands off, or leaves under-specified
FixTape can now also emit repeatable guidance from history:
fixtape playbookssurfaces common first moves, artifacts, and entry points for repeated failure familiesfixtape recipesturns repeated failure buckets into concrete “if you see this, start here” workflows
FixTape can now also use that history at incident start:
fixtape triagesuggests the best historical starting point for a current signalfixtape kickoffstarts a new session and writes an incident kickoff bundle with the best known first move
FixTape now also has a zero-touch flight recorder:
- shell hooks can keep buffering the last commands even before a session exists
fixtape doctorshows what is currently bufferedfixtape suggest-startdetects likely incident onset from failure bursts and traceback signalsfixtape suggest-startnow scores suggestions by incident type, not just by generic fail volume--include-last 40mcan promote buffered command history intostart,kickoff,promote, orfinishfixtape capturerecords full stdout/stderr into the buffer even outside an active session
Refs can now be linked directly after or during a session:
fixtape link ticket PAY-123
fixtape link issue 481
fixtape link current-commit
fixtape refs
fixtape export now creates a richer handoff bundle with:
- top-level
HANDOFF.md - top-level
SUMMARY.md - top-level repro and regression TODO entry points
metadata.jsonwith related refs such as tickets or commits- the full original session nested under
session/
FixTape also drafts regression-test inputs from captured evidence:
- suggested test name
- candidate reproduction entry point
- likely fixture files from payload/config artifacts
- refs linked during
finish - candidate assertions inferred from the debugging trail
FixTape now also parses failure signals from attached traces and captured command outputs:
- Python tracebacks
- common Node/JavaScript stack traces
- Java stack traces
- HTTP 4xx/5xx failures
- common SQL failures
- pytest-style failures
- generic high-signal error lines from stderr and log-like artifacts
- command-level non-zero exit failures when no stderr artifact is available
Optional shell helpers
FixTape can print shell helpers so you can use short wrappers during debugging sessions.
PowerShell:
Invoke-Expression (& fixtape shell-init powershell)
ft pytest tests/test_billing.py -k duplicate
ftr python scripts/replay_invoice.py failing_invoice.json
ftnote "Root cause likely sits in retry path"
ftsnap
ftdoctor
ftsuggest
POSIX shells:
eval "$(fixtape shell-init bash)"
ft pytest tests/test_billing.py -k duplicate
ftr python scripts/replay_invoice.py failing_invoice.json
ftnote "Root cause likely sits in retry path"
ftsnap
ftdoctor
ftsuggest
ft and ftr now go through fixtape capture, so they work both inside and outside an active session while preserving full stdout/stderr output.
Zero-touch flight recorder
If you want lighter capture without remembering fixtape start first, FixTape can now keep a local pre-session flight recorder.
PowerShell:
Invoke-Expression (& fixtape shell-init powershell --mode all)
Bash:
eval "$(fixtape shell-init bash --mode all)"
What the flight recorder captures automatically:
- command line
- exit code
- current working directory
- shell source
- recent command history before a session exists
What fixtape capture adds on top:
- full stdout/stderr files in the recorder
- reproducible command marking
- promotion into the active session if one exists
Suggested workflow:
Invoke-Expression (& fixtape shell-init powershell --mode all)
pytest tests/test_billing.py -k duplicate
python scripts/replay_invoice.py failing_invoice.json
fixtape doctor --window 40m
fixtape suggest-start --window 20m
fixtape start "billing retry storm" --include-last 40m
That gives you the low-friction "black box" path first, then turns the last part of the investigation into a proper FixTape session once you decide the incident matters. If the last commands look like a real investigation, shell hooks can also print a one-line suggestion automatically instead of forcing a hard auto-start.
The suggestion layer is now type-aware:
- test failures prefer
test regression - Python/Node/Java tracebacks prefer runtime incident types
- HTTP 5xx bursts prefer API failure suggestions
- SQL signals prefer database failure suggestions
- and repeated historical families can upgrade the recommendation from plain
starttokickoff
Example session flow
fixtape start "billing webhook duplicates charges" --include-last 40m
fixtape note "Can reproduce only with retry header present"
fixtape capture pytest tests/test_webhook.py -k duplicate
fixtape attach trace traceback.txt
fixtape attach payload failing_event.json
fixtape snapshot
# fix the bug
fixtape note "Root cause was idempotency key ignored on retry path"
fixtape capture --repro python scripts/replay_event.py failing_event.json
fixtape finish --verdict fixed --summary "Retry path now respects idempotency keys" --include-last 20m
fixtape show
See more:
VS Code extension
FixTape now also includes a lightweight VS Code extension in extensions/vscode.
It adds:
- a
FixTapeactivity bar view, - active and recent session visibility,
- one-click opening of
handoff.mdanddebug-summary.md, - quick reveal of the session folder.
The repository also now ships separate packaging paths for both delivery surfaces:
- Python CLI artifacts from the repository root
- versioned VS Code
.vsixpackages fromextensions/vscode
Session storage
FixTape stores sessions locally inside:
.fixtape/
active-session.json
flight-recorder/
buffer.jsonl
outputs/
last-session.json
sessions/
<session-id>/
session.json
events.jsonl
commands/
artifacts/
snapshots/
generated/
incident-kickoff.json
incident-kickoff.md
session-digest.json
session-digest.md
If FixTape runs inside a Git repository, it stores data at the repository root. Otherwise it stores data in the current working directory.
Design principles
- Local-first: no backend, no sync requirement, inspectable files.
- Zero-touch first: shell hooks can keep a rolling pre-session memory before you open a formal FixTape session.
- Explicit capture when needed:
fixtape capturestores full stdout/stderr andfixtape runstays available for session-scoped command capture. - Git-aware: snapshots include branch, commit, dirty state, and diffs.
- File-based artifacts: every session is portable and easy to inspect.
- Useful without AI: the generated package should already help a human engineer.
Project status
FixTape is currently an early but already feature-rich public alpha.
Already included:
- runnable CLI
- session lifecycle
- command capture
- artifact capture
- Git snapshots
- session history search
- shell helper generation
- markdown/script generation
- unit tests
- GitHub Actions CI
Planned next:
- shell history imports such as
atuin/zsh-histdb - git-aware suggestion scoring with branch and changed-file context
- richer IDE actions on top of the current VS Code extension
- stronger team knowledge export and playbook sharing
- AI-assisted summarization once the local debugging memory layer is fully mature
Development
Install with dev dependencies:
python -m pip install -e ".[dev]"
Run tests:
python -m pytest
Run tests with coverage:
python -m pytest --cov --cov-report=term-missing
Contributing guide:
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fixtape-0.3.0.tar.gz.
File metadata
- Download URL: fixtape-0.3.0.tar.gz
- Upload date:
- Size: 60.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
302457e805094ccbbf90a9cfc6f53617ff0cab1ba690af11d51478ff32268b5a
|
|
| MD5 |
d0548e566933f33c510f27c12a7728d5
|
|
| BLAKE2b-256 |
4de4a0f7cc591c47419a936f229d5d8b954f30a5b7cdc033fd7bf9b19bceca69
|
Provenance
The following attestation bundles were made for fixtape-0.3.0.tar.gz:
Publisher:
publish-pypi.yml on Py2755/FixTape
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fixtape-0.3.0.tar.gz -
Subject digest:
302457e805094ccbbf90a9cfc6f53617ff0cab1ba690af11d51478ff32268b5a - Sigstore transparency entry: 1188828262
- Sigstore integration time:
-
Permalink:
Py2755/FixTape@6709bcf061e3eb0eded9a693bb1b2961f188e511 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/Py2755
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@6709bcf061e3eb0eded9a693bb1b2961f188e511 -
Trigger Event:
release
-
Statement type:
File details
Details for the file fixtape-0.3.0-py3-none-any.whl.
File metadata
- Download URL: fixtape-0.3.0-py3-none-any.whl
- Upload date:
- Size: 56.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1be03e6165fe71a67cb286b7f60799ce0e2f61cb0c49d124c89534817835b28
|
|
| MD5 |
d342339ecb1e1431b6b5705cc7ed641f
|
|
| BLAKE2b-256 |
8007c87a96b0d10a64c480dd2b91b9ec023c9ca7ac341fb5db957fdb2d4b2319
|
Provenance
The following attestation bundles were made for fixtape-0.3.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on Py2755/FixTape
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fixtape-0.3.0-py3-none-any.whl -
Subject digest:
e1be03e6165fe71a67cb286b7f60799ce0e2f61cb0c49d124c89534817835b28 - Sigstore transparency entry: 1188828267
- Sigstore integration time:
-
Permalink:
Py2755/FixTape@6709bcf061e3eb0eded9a693bb1b2961f188e511 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/Py2755
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@6709bcf061e3eb0eded9a693bb1b2961f188e511 -
Trigger Event:
release
-
Statement type: