beads v1.0.5
Pre-compiled binaries for Linux, macOS (Intel & Apple Silicon), Windows (AMD64 & ARM64), Android/Termux (ARM64), and FreeBSD.
Installation
Homebrew (macOS/Linux):
brew install beadsQuick Install (macOS/Linux/FreeBSD):
curl -sSL https://raw.githubusercontent.com/gastownhall/beads/main/scripts/install.sh | bashWindows (PowerShell):
irm https://raw.githubusercontent.com/gastownhall/beads/main/install.ps1 | iexManual Install:
Download the appropriate binary for your platform below, extract it, and place it in your PATH.
Changelog
Features
- 12bb76b feat(config): add dolt.mode config key with ambiguous-config warning
- d476fba feat(config): validate dolt.mode accepts server or embedded
- 82020c4 feat(init): auto-configure contributor routing on fork detect (be-7daa14) (#4028)
- e49bc91 feat(list): be-a5z add --skip-labels hydration toggle (AD-02)
- 7da4f78 feat(schema): schema-skew guard — hard fail on forward DB drift (be-wwbsv)
- 287d8a8 feat(setup): Gemini/Claude hook JSON compliance, --hook-json flag, legacy migration
- cfcc957 feat(show): count-only JSON details with opt-in streamed payloads
- 05c7835 feat(storage): honor .beads/config.yaml types.custom in server-side validation (#4024) (#4026)
- 25703f8 feat: add Copilot CLI setup recipe (#3839)
Bug Fixes
- 78cacb9 Revert "fix(ci): create flake lock PRs from fork"
- 3c8c8be fix(audit): widen newID entropy to 16 bytes + bump test to 8000 IDs (be-5uxe)
- 3b841e1 fix(audit): widen newID entropy to 8 bytes (be-yc9h)
- 26a7a96 fix(ci): create flake lock PRs from fork
- 598a4d2 fix(ci): use app token for flake lock PRs
- a180c63 fix(close): support per-id reasons (#4194)
- 1f2ec3c fix(close): treat re-close of already-closed issue as idempotent success (GH#4025)
- 0afd3d5 fix(codex): ship hook release safely
- f8b9400 fix(create): commit labels during initial issue creation (#4149)
- cbef9fb fix(create): set status=deferred when --defer date is in the future (GH#4071)
- 480ffe4 fix(create): warn on unknown fields and honor --dry-run with --graph (#3762)
- 660250e fix(dep): keep relates-to out of dependency tree
- 4ad5b53 fix(doctor): stop emitting fresh-clone false positive in Dolt server mode (#3755)
- d7d3dad fix(dolt): adopt git origin on first push (#3940)
- 2a5a980 fix(dolt): bd dolt status probes SQL when local server is externally-managed
- 32586cb fix(dolt): detect managed handoff port conflicts (#4217)
- 52cc8be fix(export): fail on auto-export git add errors
- 663bc01 fix(export): guard auto-export against richer JSONL overwrite
- 9e956db fix(export): guard empty auto-export over populated JSONL
- 36f7e8a fix(hooks): address review timeout edge cases
- 85549f4 fix(hooks): bound prime and hook waits
- 5629e18 fix(import): preserve JSONL comment IDs (#4103)
- be0aa70 fix(init): apply config server mode before validation
- f6f1c00 fix(init): hard-fail when dolt.host/dolt.port set without server mode
- 278b24a fix(init): honor dolt local-only remote wiring (#4227)
- 3988db7 fix(init): make JSONL auto-export opt-in (#4063)
- f4c3adf fix(init): mark server-mode Dolt dirs compatible
- 1837fff fix(init): narrow hard-fail to remote host, not port-only
- 6467c4f fix(init): platform-accurate config path in warning and add init test coverage
- 8ba0b46 fix(init): surface marker write failures
- 220e552 fix(init): tighten Dolt marker handling (#4083)
- 0c47b3c fix(init): use git origin as default Dolt remote (#3909)
- 602593b fix(install): use declared module path for go fallback (#4215)
- c17f3fd fix(list): honor skip-labels in JSON output
- 7f8baea fix(list): keep relates-to out of
bd listtree mode (#3936) - 8a8a2ec fix(mcp): route validate and detect-pollution to bd doctor (GH#4037)
- 4cba4ef fix(migration): run schema migrations on a connection with no read timeout
- e4a0b2c fix(mol): bd mol wisp materializes full child DAG by default (#3872) (#3911)
- ed2b5ae fix(ready): apply filters to wisp ready work (#4008)
- 6a5c9e3 fix(schema): migrate TEXT → LONGTEXT for large-content columns (be-knye)
- bbd91cb fix(schema): panic on duplicate migration version numbers
- 6a5fb83 fix(schema): preserve wisps DEFAULT '' and renumber LONGTEXT migration → 0046 (be-knye)
- 028690b fix(schema): qualify go install guidance with gms_pure_go
- 34936e2 fix(schema): renumber duplicate release migrations
- 1f073c5 fix(schema): reorder 0041 FK before generated column for Dolt 2.0.6 (#4120)
- 376a24a fix(schema): serialize Dolt schema migrations (#4005)
- 35b9bbb fix(schema): unify migration advisory lock path (#4031)
- 4a24bc3 fix(schema): update renumbered migration comment (#4235)
- 6143a19 fix(schema): widen events/wisp_events value columns to LONGTEXT (be-kkp)
- 4db8d74 fix(setup): clarify symlinked agents skip
- f52c78b fix(setup): finish hook JSON migration
- 86545f6 fix(setup): harden symlink follow-up handling
- 09a3890 fix(storage): preserve mixed issue and wisp reads (#3991)
- 99653e0 fix(trackers): route secret keys through config.yaml in all tracker getConfig methods
- 88aa88d fix(update): clear external_ref to SQL NULL when --external-ref "" (#3912)
- c0bdf49 fix: guard JSONL auto import/export edge cases
- e569c74 fix: materialize local table schemas for branch tests (#4014)
- 7f7708e fix: preserve Windows drive remotes for dolt sync
- 8ae4c3c fix: repair PR4107 blocked-state corruption (#4139)
- 3068bc4 fix: skip auto-backup file:// register on external Dolt server (#3523)
Others
- 24a1a93 /.github/workflows/ci.yml: run tests in CI
- 2985630 /cmd/bd/init.go: disable again
- bd02b5e /cmd/bd/init.go: experimental
- bcad825 /cmd/bd/init.go: remove comment
- a65d9d1 /cmd/bd/init.go: some more fixes
- 23e11ff /cmd/bd/store_factory_nocgo.go: fix build
- 9c88107 /cmd/bd: cleaning up
- cb04e03 /cmd/bd: get compiling again
- 55b302a /cmd/bd: some cleanup
- 9a5cd78 /cmd/bd: wip need tests
- 04a922c /internal/storage/db/proxy/server.go: lint
- bd1a0dd /internal/storage/dbproxy/server: fix test
- 7ce1330 /internal/storage/dbproxy/server: wip, external dolt server
- 41a5107 /internal/storage/dolt: fix after rebase
- 64ed6c0 /internal/storage/doltserver/store.go: fix panic
- 1075ec3 /internal/storage/doltserver/store.go: fixes
- e346490 /internal/storage/domain/db: comments
- d56ca38 /internal/storage/domain/db: dependency
- a873d5e /internal/storage/domain/db: handle wisps too
- 5a1d5b4 /internal/storage/domain/db: issue
- 93b63c7 /internal/storage/domain: add event
- 80194d1 /internal/storage/domain: address feedback
- 54b83a3 /internal/storage/domain: consolidate
- 7320f26 /internal/storage/domain: more impls
- b01ddb6 /internal/storage/domain: wip
- 30158fc /internal/storage/embeddeddolt/create_issue_test.go: fix test
- ba28732 /internal/storage/embeddeddolt/open.go: change max conns
- d9383ff /internal/storage/embeddeddolt/version_control.go: fix one call site
- 9106148 /internal/storage/issueops/dependencies.go: fix formatting
- 3b1d3b3 /internal/storage/issueops/dependencies.go: remove comment
- 44d3288 /internal/storage/issueops/ready_work.go: fix ready work query
- cc0f80c /internal/storage/issueops/ready_work_test.go: fix tests
- 1946389 /internal/storage/issueops: wip, cleaning up
- 693bd32 /internal/storage/schema/branch_migrate.go: fix branch migrate
- fdb4f25 /internal/storage/schema/helpers.go : remove table exists
- 689fdf2 /internal/storage/schema/migrations/0035: remove comments
- 5a98cb7 /internal/storage/schema/migrations: fix index creation if not exists
- 00393ff /internal/storage/schema/migrations: fix migration
- db2ca20 /internal/storage/schema/migrations: fix migrations
- b22ef92 /internal/storage/schema/migrations: migrate ignored tables to non local ones
- bfb6a6a /internal/storage/schema/migrations: move non local after fk registration
- c190250 /internal/storage/schema/migrations: remove add and commit calls in schema
- 79cf211 /internal/storage/schema/migrations: restore foreign key statements
- 7d8f66d /internal/storage/schema/migrations: wip, fixing migrations
- c90a2da /internal/storage/schema/schema.go: advisory lock for concurrent inits
- 0d27f41 /internal/storage/schema/schema.go: fix panic
- beb2969 /internal/storage/schema/schema.go: panic on failure to unlock
- 4c0338e /internal/storage/schema/schema.go: use query context
- e94ba12 /internal/storage/schema: add foreign keys to normal tables
- 8b43328 /internal/storage/schema: another fix
- ff342b2 /internal/storage/schema: fix ignored table schema
- f412c88 /internal/storage/schema: fix schema migrations
- b0a7ae4 /internal/storage/schema: more fixes
- 2f9eebf /internal/storage/schema: remove views
- 48fe1d6 /internal/storage/uow/doltserver_provider.go: fix provider
- aa968e8 /internal/storage/{dbproxy,uow}: external uow provider
- fee553f /internal/storage/{dolt,issueops,schema}: remove comments
- eee26a7 /internal/storage/{dolt,issueops}: more fixes
- b1e4652 /internal/storage/{domain,uow}: dependency
- 242ecfd /internal/storage/{embeddeddolt,schema}: add wisp_child_counters
- 24b97a2 /internal/storage/{embeddeddolt,schema}: fix test
- 2d8b5f2 /internal/storage/{embeddeddolt,schema}: more cleanup
- e8fb231 /internal/storage/{uow,domain}: wip stubs
- 479445c /internal/storage: cleanup
- 2585b21 /internal/storage: get schema working, wip, deleting wisps from dependencies
- 49c6008 /internal/storage: keep it same branch
- e425037 /internal/storage: more comment cleanup
- 173288d /internal/storage: remove backward compat stuff
- 3c563f7 /internal/storage: remove dual tx
- 34ad562 /internal/storage: remove some comments
- 8cba973 /internal/storage: split tx
- d3145a3 /internal/storage: use branch migrate
- a729b41 /internal/storage: wip, fixing schema
- 247e719 /internal/storage: wip, removing backfill stuff
- e84de4c /internal/storage: wip, start on default branch
- b860988 /internal/{dolt,issueops,schema}: foreign key stuff
- 18a93ec /internal: delete some comments and old store code
- 6c59d53 /{.github,cmd}: comment out ci, disable proxied-server mode
- 364a1b7 /{.github,cmd}: remove parrallelism for ps tests
- 40506ee /{.gitignore,cmd}: disable proxy server mode
- 316cfc6 /{cmd,docs,internal,website}: remove pass
- a106722 /{cmd,docs,internal,website}: wire up
- 3080839 /{cmd,docs,website}: gen docs
- e898bab /{cmd,docs,website}: gen docs again
- 6bb7dba /{cmd,internal}: add migrate schema command
- e9ece3a /{cmd,internal}: cleanup
- 42ad1b7 /{cmd,internal}: cleanup
- 7a6b164 /{cmd,internal}: create tests
- 1fecac9 /{cmd,internal}: external server
- 5a7cc3e /{cmd,internal}: fix proxied server path
- 4d32285 /{cmd,internal}: get debug mode working
- 4bf03b3 /{cmd,internal}: initial proxy server backend pass
- ba36b67 /{cmd,internal}: more cleanup
- 56ce24f /{cmd,internal}: more fixes
- ff8a2e8 /{cmd,internal}: read optimizations
- 98be00c /{cmd,internal}: refactoring
- f030006 /{cmd,internal}: remove bad test
- d13c2ee /{cmd,internal}: remove comments
- 536e114 /{cmd,internal}: remove dead code
- d15c757 /{cmd,internal}: remove depends_on_id
- 78eb7f5 /{cmd,internal}: remove more code
- 04f4e06 /{cmd,internal}: root piece
- 4ff5308 /{cmd,internal}: server config
- b456ec5 /{cmd,internal}: some cleanup
- 48b244a /{cmd,internal}: some cleanup
- c2cbfd3 /{cmd,internal}: some fixes
- c2b998e /{cmd,internal}: some refactors
- f2954dd /{cmd,internal}: support logpath
- 6caed19 /{cmd,internal}: surface mismatches
- c7aa60d /{cmd,internal}: tweaks before merge
- ac52b56 /{cmd,internal}: wip create
- 4fcbd58 /{cmd,internal}: wip, implementing init with proxied-server
- 84d8796 /{cmd,internal}: wip, removing ignored table code
- b4a88e0 /{docs,.github,internal,scripts}: dolt 1.88.1
- e4f0f9b /{docs,website}: gen docs
- 885eacb /{docs,website}: gen docs
- e4b4d84 /{docs,website}: gen docs for new flags
- 4b5936d /{docs,website}: generate docs
- 3d7173c /{internal,cmd,.gitignore}: wip, proxy server fixes and uow impl
- 507b2a1 Add configurable JSONL import path
- e69c53d Add proper hook integration
- fcd3cc0 Consider entire PR thread, clarifying info are often in comments (#4105)
- ec116c4 Consolidate docs evidence review inventory
- b1c968e Document import path portability
- 7044802 Document project scope boundaries (mybd-1fn) (#3842)
- 3a7a2e8 Fix ephemeral graph apply readiness and dependency cost (#3943)
- 3c34d62 Guard auto-export against JSONL-only records (#4090)
- 368eca7 Make auto-export git add lock-aware (#4089)
- 99565c0 Merge remote-tracking branch 'upstream/main' into AI/import-path-config-upstream
- eea1cce Merge remote-tracking branch 'upstream/main' into AI/import-path-config-upstream
- 95930c4 Regenerate CLI reference docs
- 87963b4 Revert "Add external server CLI dir override (bd-fn9) (#3498)" (#3890)
- 0fdaa27 Revert "Revert "Revert external server CLI dir override" (#3891)"
- e7fb579 Revert "Revert external server CLI dir override" (#3888)
- 410cff4 Revert "Revert external server CLI dir override" (#3891)
- 9b0cf9e Revert external server CLI dir override
- 42be8e8 Stamp auto-import attempts for unchanged JSONL
- 4990c83 auto-import: gate server mode at call site (#4170)
- 47adc62 build(deps): bump github.com/anthropics/anthropic-sdk-go from 1.37.0 to 1.45.0 (#3959)
- 9c45638 build(deps): bump golang.org/x/sys from 0.43.0 to 0.45.0 (#3958)
- 1404130 build(deps): bump goreleaser/goreleaser-action from 7.2.1 to 7.2.2 (#4109)
- f18daea chore(deps): bump actions/create-github-app-token from 3.1.1 to 3.2.0 (#3956)
- e1c8b8b chore(deps): bump fastmcp from 3.2.4 to 3.3.1 in /integrations/beads-mcp (#3957)
- 9cdb628 chore(deps): bump github.com/dolthub/driver from 1.86.4 to 1.88.1 (#3830)
- 9ca6b51 ci(nix): auto-update default.nix vendorHash on dependabot Go bumps (#3804)
- 4c22bf0 ci: gate regression tests on risky PR paths (#4123)
- 2382952 cleanup: remove unused private helpers (#4205)
- 027b17d debug config discovery and issue prefix failures (#4191)
- e279a1c debug missing dolt database metadata (#4202)
- c4c3a83 deps: update MCP Python dependencies (#3856)
- 2b4339d deps: update vulnerable Go modules (#3855)
- dec53a2 deps: update website npm dependencies (#3857)
- ced5c50 docs(changelog): credit Kevin Glynn for JSONL cleanup origin
- fcbb823 docs(cli): regenerate CLI reference for --ignore-schema-skew
- 9bdf785 docs(import): enumerate all fields the importer handles in --help
- c4c5b5f docs(import): remove false 'type' alias claim from help
- 70c82c0 docs(list): regenerate CLI reference for --skip-labels (be-rqm7yb)
- 337903d examples: add GitHub issue-to-PR and PR triage formulas (#3866)
- 182bf2e fix setup injection for symlinked agent files
- 1f82e00 fix(auto-import): make upgrade-recovery fallback non-destructive (#3955) (#3960)
- 158a136 fix(auto-import): pass serverMode=false in rebased stamp tests
- 1cf8337 fix(auto-import): restore empty-DB guard regressed by #3630, plus a test repair (#3691)
- c2c3760 fix(github) bd github sync (GitHub issues integration) (#3929)
- 7111e24 flake.lock: Update
- dec564e flake.lock: Update (#4143)
- 647b2b0 gc: recheck closed deletion candidates (#4171)
- 02aa69c import: skip beads-jsonl metadata/header line on JSONL import
- 7229fb1 import: skip stale JSONL issue snapshots (#4204)
- 5d33b4c init: run Codex project setup by default
- 70f5076 internal/storage/schema/migrations: fix nonlocal migrations;
- bd13f47 perf(count): Q1 — SQL COUNT(*) aggregate replaces SearchIssues+len in bd count (bd-xoi0x)
- ad046c9 perf(deps): narrow recursive cycle checks (#3966)
- a4ebe8f perf(deps): scan one cycle table for same-storage edges (#4004)
- ad7674d perf(get): query primary issues before wisp fallback (#4003)
- 0bf33da perf(ready): narrow deferred-parent child filtering (#4001)
- ffd5e32 perf(ready): page blocked checks for limited ready work (#3968)
- 83f49c0 perf(ready): restrict blocked dependency scans to active IDs (#4002)
- 9a29a15 perf(search): Q2+Q3+Q5 — skip-wisps merge, id-shrunk Pattern B, wisp count cache (bd-qi4qr, bd-co6m6)
- 6ec5244 perf(search): tighten label and partial-id queries (#3967)
- 42a2772 refactor(ui): extract markdown rendering to internal/uimd package (#4009)
- 174dd91 test(auto-import): model concurrent writer guard (#4218)
- 9fea6d3 test(cmd/bd): be-0x25q flag-to-env-var propagation gate for --ignore-schema-skew
- 458cf89 test(cmd/bd): route sync.Once test temp dirs through TestMain cleanup (#4108)
- c62f012 test(cmd/bd): use t.Chdir in drift tests to fix chdir race (#3747)
- 882403f test(config): dolt.mode validation rejects invalid values
- 57b0cab test(create): guard external-ref prelinking (#4216)
- 61ae73e test(embedded): grep combined stdout+stderr for bd status text
- 88e1354 test(embedded): split stdout/stderr in all JSON-parsing helpers (be-0ya2oe)
- 4dc8dbd test(export): assert byte-stable JSONL across all record types (#4086)
- 4189cdb test(init): host-only fatal guard + remove DRAFT_PR.md
- 4561c05 test(init): port-only config should not fatal
- 6913833 test(mcp): cover bd doctor routing for validate/detect_pollution
- a499c2b test(regression): make workspace cleanup robust (#3854)
- 439afcf test(regression): prevent baseline daemon timeout (#3809)
- 4eaced4 test(setup): use filepath.Join in TestGeminiSettingsPaths assertions (#3555)
- c1091b8 test(spike): joinIter panic repro test for current go-mysql-server (bd-wsgws)
- 52a5ecf test(upgrade-smoke): exercise dependency blocker paths on migrated DB (#4238)
- 6e7d0b0 test(where): isolate initialized db path state (#4193)
- d80daa9 {CHANGELOG.md,internal}: cleanup and release notes