$ brew tap AayushGokhale2005/bugparcel && brew install bugparcel
Use withOpenAICodexClaudeClaude Code

How it works

Captured trace

ErrorStack traceCode stateEnvironmentLogs
user.ts
40  const user = await db.find(id);
41  return {
42    id: user.id,
43  };
TypeError: Cannot read properties of undefined (reading 'id')src/api/user.ts:42
main@a1b2c3dNode 20.11Postgres 16Redis 7

Reviewed fixture

Minimal repoRepro scriptFixtures/DB stateKnown limits
bugparcel/repro/
  • docker-compose.yml
  • seed.sql
  • repro.py
  • README.md

Independent checks

Deterministic testsSame envPass/fail contractNo leak into patch
✕
Run reproduction3.2s
✕
Run acceptance tests1.1s
✓
Verify expected failure0.4s
$ bugparcel run

Reproducing… ✕ FAILED (as expected)

3/3 checks passed

Agent replay

Apply patchRe-run checksCompare resultsExport report
Agent patch
- id: user.id,+ id: user?.id ?? null,
✓
Re-run acceptance tests2.8s
✓
Compare results0.6s
✓
Export regression0.3s

Built for coding agents, not screenshots.

Diagnose

Re-run the incident safely and return an agent-ready bundle: failure contract, captured state, replay result, and isolated worktree path.

{
  "parcel_id": "checkout-zero-total",
  "contract": "ZeroDivisionError @ pricing.py:84",
  "worktree": "/tmp/bp-wt-8f2a",
  "source_branch": "unchanged"
}

Replay in a worktree.
Leave the branch alone.

Source branch
  • Working tree and index untouched
  • No agent commit on your feature branch
  • HEAD, staged, and unstaged diffs captured as evidence
Detached worktree
  • Fresh checkout of the exact captured snapshot
  • Fixtures restored at repository-relative paths
  • Patches applied and verified, then cleaned up

Set up in three steps.

● ● ●brew install bugparcel
$ brew tap AayushGokhale2005/bugparcel
$ brew trust AayushGokhale2005/bugparcel
$ brew install bugparcel
$ bugparcel --version
bugparcel 0.1.1
local-first failure parcels for coding agents

Install in one command

Share the proof.
Keep the state local.

BugParcel's hosted workspace lets a team see what was pushed, who pushed it, and the exact SHA-256 fingerprint—without uploading fixture bytes or database rows.

Get enterprise access →
bugparcel pushSanitized share
$ bugparcel push bp_checkout_zero --state-pointer /request
Workspace
Invite-only team access
Integrity
SHA-256 fingerprint
Storage
Cloudflare Worker + D1
Private by design
Fixtures and DB rows stay local

Reuse the runs
that proved it.

Backend incidents

Package a production-shaped failure — FastAPI exception, dirty checkout, fixture files — without touching production. Optional Docker replay stays network-isolated.

Agent handoffs

Give agents MCP tools and a portable contract instead of reconstructed context. They diagnose and verify against the same failure you captured.

Independent verify

Patches land only in detached worktrees. The acceptance contract stays outside the candidate diff so verification stays honest.

Contract-preserving reduce

Minimize captured JSON state while the failure still matches — smaller fixtures, same ground truth for the next agent run.

Content-addressed store

Artifacts are SHA-256 addressed and append-only. Every hard-won failure becomes reusable regression evidence.

Cleanup without risk

bugparcel_cleanup_worktrees removes only detached BugParcel worktrees. Source repositories are never touched.

Built for evidence, not optimism.

What is a parcel?

A versioned, portable description of a backend failure: Git state, request/fixtures, environment constraints, and the independent contract used to assess a fix.

Does verify change my branch?

No. Reproduce, reduce, diagnose, propose, and verify all run in detached BugParcel worktrees. Source branches are never mutated; cleanup removes only those worktrees.

How do coding agents use it?

Through the local bugparcel-mcp stdio server — tools like bugparcel_diagnose, bugparcel_reproduce, bugparcel_propose_fix, and bugparcel_verify — or the CLI directly.

Can I share a parcel with my team?

Yes. Run bugparcel auth, then bugparcel push <parcel-id>. The hosted workspace records the sanitized share and its SHA-256 fingerprint; fixture bytes and database rows remain on the originating machine.

What about FastAPI services?

The Python adapter captures a sanitized request/error event on unhandled exceptions and invokes the local CLI. Replay sets BUGPARCEL_REPLAY=1 so capture stays off during isolated runs.