beads v1.0.4
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
- ecb9542 feat(close): add --reason-file flag mirroring --body-file pattern
- 3367288 feat(config): add central server config library (#3258)
- 097ed1c feat(linear): add OAuth client-credentials support
- 6584ff8 feat(linear): add ambient staleness signal for auto-fresh data
- 0ec4a99 feat(linear): add idempotency markers to prevent duplicate issue creation
- 989d0f9 feat(linear): add per-workspace concurrency lock on sync
- 06d385e feat(linear): add type mappings for decision, spike, story, milestone (#3651)
- ac15e09 feat(linear): adopt issueBatchCreate/issueBatchUpdate for 50x efficiency (#3654)
- a845bc4 feat(linear): parse Retry-After headers and add rate-limit circuit breaker
- e90f980 feat(setup): omit bd dolt push from template when no remote configured
- 7358de6 feat: add -C flag to change directory before running (#3442)
- 0bc4c72 feat: add JSONL bulk dep add (#3530)
Bug Fixes
- 60cbf83 fix(cli): swap CommandStyle LightDark arguments for light terminals (GH#3611) (#3643)
- 1ebee7f fix(cli): swap CommandStyle colors for correct light/dark contrast (GH#3611)
- 0338534 fix(close): adapt routed close to current main
- 564bd1e fix(close): route ID resolution like show/update (beads-0km)
- 0c51997 fix(comments): helpful error for misplaced bd comments list (GH#3542) (#3641)
- 74b107a fix(config): check ~/.config/bd/config.yaml on macOS
- 4fbfd97 fix(config): consult config.yaml for dolt.host (#3471)
- 10bf490 fix(config): format OAuth config changes
- 860ddb2 fix(config): format wisp privacy changes
- 918eb8e fix(config): refuse to write secret keys to git-tracked config.yaml (#3652)
- a6f2d8d fix(config): remove dead dolt.idle-timeout key (GH#2452-followup)
- 21c55f4 fix(create): handle dependency aliases in --deps
- 2183499 fix(dep): only show [BLOCKED] for genuine blocking deps in dep tree (GH#3565) (#3675)
- f0b6d49 fix(dep): show dependency type in bd dep tree output (GH#3565) (#3647)
- ccfb97f fix(dep): tolerate unresolved IDs in batch dep list (#3620)
- be65f59 fix(dolt): batch wisp-ID partition in bulk hydrators (GH#3414)
- 4affe45 fix(dolt): distinguish fsck open-failures from integrity failures (#3465)
- fbcdb90 fix(dolt): preserve label hydration wisp-set callers
- 607919f fix(dolt): skip git hooks on internal push of refs/dolt/data (GH#3724) (#3740)
- 7596369 fix(embeddeddolt): pass DOLT_REMOTE_USER to push/pull/fetch
- 7978fae fix(export): exclude ephemeral wisps from bd export by default (GH#3649)
- 61e85bc fix(export): exclude memories from bd export by default (GH#3650)
- 226e7f2 fix(export): include NoHistory beads when Ephemeral=&false filter is active
- 651a52a fix(export): sort memory keys for deterministic JSONL output (GH#3474) (#3482)
- c67e41e fix(federation): respect ephemeral/wisp type filters during sync
- 7fb4c31 fix(formula): carry step labels through cook and pour
- 7e8766d fix(gate): drop removed 'merged' field from gh pr view call (GH#3411) (#3488)
- b324166 fix(github): map decision, spike, story, milestone GitHub type labels (GH#3604) (#3639)
- dccfa20 fix(graph): emit [] not null for empty links in HTML output (GH#3592)
- a028506 fix(graph): merge components for bd graph --all --html (GH#3592) (#3648)
- b5d8c46 fix(history): respect --json flag when issue has no history (#3503)
- 3be9f00 fix(hooks): auto-import .beads/issues.jsonl after pull/checkout (GH#3729) (#3730)
- ad8d6de fix(hooks): inject BEADS INTEGRATION above trailing exec block (GH#3537) (#3556)
- 0db2a66 fix(hooks): preserve user content when migrating v0.62.x → v1.0.x (GH#3536) (#3557)
- 2efac71 fix(hooks): use BeadsDirPerm (0700) for .beads/hooks directory (#3616)
- bcd5763 fix(init): add FixBeadsDirPermissions stub for Windows build
- a0cf5e6 fix(init): chmod existing .beads/ to 0700 instead of only warning (GH#3391)
- 7d3dc1a fix(init): only strip world-accessible bits, preserve group perms
- f34ab80 fix(init): repair existing .beads permissions to 0700
- c9eb8ec fix(init): sanitize dotted prefixes consistently (beads-oko)
- e643e94 fix(linear): add done/deferred/pinned/hooked aliases to ParseBeadsStatus (#3718)
- b8e7562 fix(linear): address maintainer blockers on idempotency PR
- 46584d8 fix(linear): address maintainer feedback on OAuth client-credentials PR
- 3e804cd fix(linear): address maintainer feedback on PR #3655
- dc4cd8b fix(linear): clean rate-limit lint
- d336874 fix(linear): clean staleness lint
- cb1a070 fix(linear): clean sync lock lint
- f172b97 fix(linear): correct issueBatchCreate GraphQL variable type (#3703)
- 175bc23 fix(linear): keep lock file stable across Release cycles
- 3d9a012 fix(list): --deferred returns complete deferred set (GH#3571)
- 7e3c7fb fix(list): deduplicate issues with multiple blocks dependencies (GH#3567) (#3673)
- d648b6a fix(list): emphasize truncation warning with WarnStyle (GH#3580) (#3739)
- 22e9ca3 fix(list): format deferred filter tests
- 7d4bf5a fix(makefile): use /dev/null instead of nul to silence stderr on windows
- 229f214 fix(mol): clear root Ephemeral on bd mol squash (#3696)
- bbd4e4d fix(mol): recognize TypeMolecule roots in findParentMolecules (#3719) (#3721)
- ae0fc1d fix(nix): use proxy vendor for pure-go package
- 1cfb6e5 fix(plugin): move claude agent out of shared codex dir to fix plugin install
- 02bdb4c fix(prime): surface memories before hook truncation (#3692)
- 7a1f7e4 fix(release): harden shipped release formula adoption (#3668)
- f3d57da fix(release): ship beads-release formula (#3631)
- c9ae42b fix(setup): align Claude PreCompact hook docs
- 059d729 fix(setup): drop bd sync from Mux fallback; warn on stale Claude hooks (GH#3546) (#3642)
- 261fdbb fix(setup): format conditional push template
- 3fa0e23 fix(setup): prevent doubled BEGIN/END markers from CRLF embedded template (#3553)
- 2cfbe4e fix(setup): removeHookCommand drops sibling commands on first match
- c5961c4 fix(sort): natural numeric sort for issue IDs with dotted suffixes (GH#3477) (#3486)
- 8475f8b fix(test): thread -tags gms_pure_go to subprocess build in embeddeddolt concurrency test
- 5a180ed fix(where): avoid live reopen for server-mode selection (beads-gekl.3)
- 4fbb332 fix(where): keep bd where on the no-db path (beads-bgu)
- 555173e fix(where): restore prefix without the old slowdown (beads-ayf)
- cb3ef71 fix: ApplyCLIAutoStart respects ServerModeExternal (#3473)
- 57ddb0b fix: bd admin commands fail with 'embedded mode' error in server mode (#3438)
- eef21de fix: remove duplicate wisp query in bd export (#3352) (#3372)
- 5a2fc61 fix: repair shared-server bootstrap and doctor metadata drift (#3242)
- 4a25937 fix: replace deprecated --force flag with --reinit-local in init error messages (#3695)
Others
- adb0cc1 /cmd/bd/db_proxy_child.go: cleanup
- 5e66b2a /cmd/bd/db_proxy_child.go: rebase main
- e5bebbd /cmd/bd/dolt.go: revert message flag requirement
- 1ad7009 /cmd/bd/main.go: default auto-commit on
- a58228d /cmd/bd/main.go: remove promote gate
- 2f1cd4f /cmd/{cmd, internal}: make exports atomic writes
- f4c46d9 /go.{mod,sum}: bump dolt driver (#3435)
- 916c163 /internal/atomicfile/atomicfile.go: use io.Copy
- 2529780 /internal/beads: maybe fix worktree server bug
- 6e0b6b8 /internal/storage/db/doltserver.go: wip
- a9cbf96 /internal/storage/db/proxy/server.go: more cleanup
- e774926 /internal/storage/db/proxy/server.go: pr feedback fix
- 42b38d2 /internal/storage/db/proxy/server_test.go: fix test bug
- d7d1b31 /internal/storage/db/server/doltserver.go: ready for tests
- 04de2f7 /internal/storage/db/server/doltserver.go: some fixes
- 312b5bc /internal/storage/db/server/doltserver.go: wip, dial
- 54b25a4 /internal/storage/db/server/doltserver.go: wip, implement start
- 5a205fb /internal/storage/db/server/doltserver.go: wip, ping
- aa76c4e /internal/storage/db/server/doltserver.go: wip, running
- 18ff81c /internal/storage/db/server/doltserver.go: wip, stop
- e83e98c /internal/storage/db/server/doltserver_test.go: add socket test
- 9e49d13 /internal/storage/db/server/doltserver_test.go: keep config in tests
- 106e106 /internal/storage/db/server/testserver_test.go: add test server test
- 83813b2 /internal/storage/db/server: add wait to server start
- d3e8377 /internal/storage/db/server: concurrency test
- a4dc3f2 /internal/storage/db/server: remote status check
- 65a8f42 /internal/storage/db/server: remove restart
- efb4151 /internal/storage/db/server: use abs root dir
- 5a39aae /internal/storage/db/server: wip, need to test tests
- cd4a226 /internal/storage/db: change to endpoint
- 8f16bab /internal/storage/db: fix tests
- 227c74a /internal/storage/db: some additional fixes
- 40bb251 /internal/storage/db: update to kill and remove dolt sql-server
- 3667dde /internal/storage/db: wip implement dsn
- e3dd665 /internal/storage/db: wip, making DoltServer
- 6e0f3c2 /internal/storage/db: write pid of dolt sql-server
- dd2cd02 /internal/storage/doltserver/store.go: dolt server store
- 4151d85 /internal/storage/doltserver/store.go: get test passing
- 79c6899 /internal/storage/doltserver/store.go: wip
- 273ff65 /internal/storage/doltserver/store.go: wip, need proxy
- c7f1456 /internal/storage/doltserver/store.go: wip, need schema stuff
- ac0f6e6 /internal/storage/doltserver/store.go: wip, new store
- 57d3c8b /internal/storage/doltserver: get test how i want it
- ed3a43a /internal/storage/doltserver: get test how i want it
- 3969115 /internal/storage/{db,doltserver}: add shutdown helper for tests
- e8c5d60 /internal/storage/{db,doltutil}: linting
- e8d4d69 /internal/storage: remove Ping from DatabaseServer
- dcc683e /internal/storage: some lint
- a05e06c /internal/storage: wip, need to create db if not exists
- 6a2f851 /{.github,internal}: remove comments, install dolt in ci
- 58dc2e1 /{beads_cgo,cmd,internal}: cache open embedded stores deterministically to prevent deadlocking when multiple store open attempts are made against an opened store
- d0fd475 /{cmd,internal}: add test server
- e211188 /{cmd,internal}: fix import jsonl
- dad89ea /{cmd,internal}: fix linting
- 73f2ab6 /{cmd,internal}: maybe fix tool tip closed store bug
- 05251d1 /{cmd,internal}: some cleanup
- b0a3330 /{cmd,internal}: some cleanup
- b83fdbf /{cmd,internal}: some fixes
- bed5e5f /{cmd,internal}: wire up db proxy child
- 7e0d09c /{internal,cmd}: fix CommitPending
- e97532a :remove uneccessary locking
- dcb105a Add Linear state_map dotted config regressions (#3500)
- f7269b6 Add Linear state_map dotted key regressions (bd-cba)
- a97eec9 Add atomic ready claim (GH-3570)
- 112be87 Add bd init --remote bootstrap path (#3527)
- 4f1c296 Add explicit Codex skill setup (#3670)
- 0fffa44 Add external server CLI dir override (bd-fn9) (#3498)
- 46be559 Add maintainer PR guidelines (bd-k0j) (#3665)
- 43715ad Add shared Beads plugin package
- 3e56f0b Document Linear external_ref pre-linking (#3517)
- e2e4975 Document supported go install modes (bd-o5a) (#3480)
- d33799e Drop redundant trailing comments on Labels and Metadata copies
- e9ebb2b Fix Nix CI Go toolchain selection (bd-7mh.6)
- b5448ef Fix Nix lock hash (bd-7mh.6)
- 52fc26a Fix gate and cook regressions (bd-r2l)
- bb6b8f2 Fix ready/list UX regressions (#3481)
- 2f60a10 Import Linear relations as dependencies (#3519)
- f481b76 Keep Nix CI smoke test local (bd-7mh.6)
- 16c0cd1 Merge PR #3483: fix init permissions repair
- 425ae20 Merge main into OAuth client credentials branch
- f118303 Merge main into OAuth client credentials branch
- f4a1a21 Merge main into staleness signal branch
- ef3c991 Merge remote-tracking branch 'origin/main' into bd-where-is-slow
- f993aa6 Merge remote-tracking branch 'origin/main' into bd-where-is-slow
- ea9fa3e Merge remote-tracking branch 'origin/main' into fix/export-exclude-memories
- 69cd8af Merge remote-tracking branch 'upstream/main' into bd-where-is-slow
- cc31c60 Rebalance embedded cmd CI shards (bd-8zg) (#3499)
- b0ab39e Refresh Nix lock target (bd-7mh.6)
- e93d42a Repair ignored wisp dependency table bootstrap (bd-8e8) (#3497)
- 42064c4 Sync Linear milestones as local epics (#3528)
- 85cbdea Update Nix vendor hash for Go 1.26 (bd-7mh.6)
- a2db80a auto-import: don't print progress message before confirming import needed
- 275bdb5 auto-import: remove redundant commandDidWrite in fallback path
- 6c93841 changelog: document OpenBestAvailable breaking change and flock removal
- 24486d1 chore(deps): bump DeterminateSystems/determinate-nix-action (#3635)
- 3323572 chore(deps): bump actions/setup-go from 5.6.0 to 6.4.0 (#3636)
- 2841d90 chore(deps): bump pydantic in /integrations/beads-mcp (#3467)
- 7d94c2d chore(deps): bump pydantic-settings in /integrations/beads-mcp
- 87e698a ci(docs): add --fallback-extensions html to lychee link check (#3736)
- 73507cf ci(regression): pull Dolt sql-server image so tests use shared container (#3737)
- 2cd8864 ci: mint Homebrew tap token from GitHub App (#3472)
- e19e31c docs(agents): add Storage Boundary section to AGENTS.md (#3617)
- 51f8fae docs(changelog): note bd close routing fix (beads-5wr, GH#3608)
- 8b7cbfc docs(claude): make root agent guide a source pointer (#3795)
- 2e1a0dd docs(codex): add skill path hint and marker-coexistence note (#3735)
- f7b797a docs(doctor): align interactions.jsonl policy with bd audit (GH#3622) (#3645)
- 45c7a61 docs(templates): prepend architecture summary to bd-init AGENTS.md (GH#3683) (#3727)
- 56cc30e docs(website): config.toml → config.yaml in git-integration.md (GH#3683-followup)
- 8694c53 doctor: detect AGENTS.md / CLAUDE.md user-authored divergence (#3600)
- 4fcad21 fix(auto-export): surface git add stderr in failure warning
- cc34fbd fix(storage/dolt): apply ExcludeLabels in GetReadyWork (#3479)
- b78a62c github: classify rate-limit 403s and stop the push loop when one hits (#3624)
- b9e16ac init: harden --remote error path and broaden test coverage (#3558)
- c61f97a refactor(where-tests): share JSON assertions for selected-db cases (beads-yi0o)
- 6745613 schema: make DROP COLUMN migrations idempotent (fixes migration 0032 loop) (#3418)
- ba9d250 test(close): table-driven routing-fallback tests (beads-bn1)
- 539fb64 test(cmd/bd): build-tag cgo-only test helpers so pure-go tests compile (#3716)
- c27aa2b test(config): add XDG config path tests for macOS
- 609dce0 test(export): add export globals to saveAndRestoreGlobals for isolation
- 195ee65 test(init): cover config-sourced dotted prefix normalization (beads-gekl.2)
- 759456e test(permissions): add regression coverage for FixBeadsDirPermissions
- 911137c test(where): cover BEADS_DB precedence over BD_DB (beads-gekl.1)
- d71a3aa test(where): cover no-db command selection
- f95430f test(where): cover prefix fallback decisions (beads-53zb)
- 2514d2b test(where): cover remaining prefix resolution branches (beads-454u)
- ac98e6c {cmd,internal}: wip, proxy database server