$ brew tap AayushGokhale2005/bugparcel && brew install bugparcelHow it works
40 const user = await db.find(id);
41 return {
42 id: user.id,
43 };Reviewed fixture
- docker-compose.yml
- seed.sql
- repro.py
- README.md
Independent checks
$ bugparcel runReproducing… ✕ FAILED (as expected)
3/3 checks passed
Agent replay
- id: user.id,+ id: user?.id ?? null,
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.
- Working tree and index untouched
- No agent commit on your feature branch
- HEAD, staged, and unstaged diffs captured as evidence
- 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 tap AayushGokhale2005/bugparcel
$ brew trust AayushGokhale2005/bugparcel
$ brew install bugparcel
$ bugparcel --version
bugparcel 0.1.1
local-first failure parcels for coding agentsInstall in one command
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.