beads v0.49.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/steveyegge/beads/main/scripts/install.sh | bashWindows (PowerShell):
irm https://raw.githubusercontent.com/steveyegge/beads/main/install.ps1 | iexManual Install:
Download the appropriate binary for your platform below, extract it, and place it in your PATH.
Changelog
Features
- 3c167b8 feat(dolt): fail-fast TCP check before MySQL protocol initialization
- e06e0cc feat: add bd find-duplicates for AI-powered duplicate detection (bd-581b80b3)
- 4d16070 feat: add bd promote command for wisp-to-bead promotion (gt-7mqd.9)
- 55a4140 feat: add bd todo command for lightweight task management
- 24ba7e3 feat: add bd validate command for data-integrity health checks (bd-e108)
- 6d99a8c feat: add content and null-check filters to bd search (bd-au0.5)
- a6cbb7c feat: centralize AI model config into ai.model with DefaultAIModel()
- 6fe7f20 feat: default to chaining hooks in bd init instead of prompting (bd-bxha)
- 66b7fc4 feat: embed Windows PE version info to reduce antivirus false positives (bd-t4u1)
- e533064 feat: remove embedded Dolt mode, keep server-only connections (bd-esqfe)
Bug Fixes
- f5e0de4 fix(ci): resolve lint failures and test guard false positive (#1550)
- f763b15 fix(ci): resolve lint failures and test guard false positive on main
- 31687be fix(ci): unbreak Nix and Windows CI
- 307cd1b fix(ci): update vendorHash, fix pre-existing lint failures
- 9affc8f fix(config): log when viper uninitialized in getConfigList
- d0cb650 fix(config): write beads.role to git config instead of SQLite
- 3ba6bc3 fix(daemon): use rpc.ShortSocketPath for daemon status/health/metrics
- 7057b08 fix(docs): correct markdown link syntax in COMMUNITY_TOOLS.md
- 3d4ac66 fix(doctor): correct brew upgrade command from "bd" to "beads"
- c9f68c2 fix(doctor): improve output formatting with summary-first layout (bd-4qfb)
- 282c13e fix(dolt): clean test tables in setupTestStore to prevent duplicate primary key errors
- ac0ff2e fix(gitignore): add .jsonl.lock to template and requiredPatterns
- 85bd4bb fix(lint): suppress unparam for doctor/sqlite_open.go readOnly
- 1296242 fix(merge): use strings.HasPrefix to prevent panic on short error messages
- 3e8bc4f fix(migrate): check for running daemon before dolt migration
- 8566c34 fix(nix): update flake.lock, remove CI workaround
- a96df5a fix(rpc): pass issueID via closure to prevent empty mutation events
- fea2bc7 fix(rpc): replace hardcoded /tmp paths with t.TempDir() in tests
- 531f7a9 fix(security): path traversal in export handler and command injection in import
- 85a5b84 fix(security): upgrade Go toolchain to 1.25.7 for CVE-2025-68121
- eb1049b fix(sqlite): make Close() idempotent to prevent WAL retry deadlock (bd-4ri)
- 0f14a11 fix(sync): apply --ours/--theirs strategy to conflict resolution
- 914146d fix(sync): include tombstones in auto-flush full export
- f72000a fix(tests): add missing assertions to RPC coverage and list filter tests
- 5b8090e fix(tests): re-enable deadlock test and add timeout guards for peer sync (dolt-test-ebm)
- 3273834 fix(update): log DB error when GetCustomTypes fails
- 182655c fix(update): skip type pre-validation in daemon mode
- 16ac05c fix: ShouldExportJSONL reads DB directly, returns false in dolt-native mode
- 3d01c7f fix: Support cross-prefix ID resolution in multi-repo scenarios (GH#1513)
- 69ab6b6 fix: add bounds checks for slice/string access in migrate.go (dolt-test-atg)
- b78a67a fix: add exclusive lock to flushToJSONLWithState to prevent race conditions
- f291727 fix: add nil storage guard to handleCommentList and handleCommentAdd (dolt-test-w1p)
- 48574fe fix: add staleness check to export, graph, history, gate list commands (bd-2q6d)
- fd274c9 fix: apply approved fixes before returning on stdin read error (dolt-test-hp8)
- de5f702 fix: bd dep list cross-rig routing broken from town root (bd-ciouf)
- 8ea2353 fix: bd doctor --check=validate re-checks after fix, reuses doctor infra (bd-e108)
- 2b90ed1 fix: bd list --all disables default limit (bd-u0l9f)
- dd2e1c6 fix: block BD_BACKEND env var to prevent data fragmentation (bd-hevyw)
- bf3af46 fix: centralize error handling patterns in storage layer (bd-bwk2)
- 656c806 fix: detect cross-rig contamination in post-migration check (bd-73cf5)
- 75fd768 fix: dolt_conflicts column name, doctor gastown detection, explicit routing mode
- 831c6ab fix: drain in-flight requests before closing storage in Server.Stop (dolt-test-rgh)
- 2a0cd4c fix: handle json.Marshal error in runServerHealth (dolt-test-hk6)
- a66165a fix: include dependencies and comments in issueEqual comparison (dolt-test-7e4)
- 1b42ec3 fix: isolate Dolt tests with per-test databases (dolt-test-1cf)
- 8a18582 fix: log warnings for label and dependency import errors in migration (dolt-test-qf0)
- 342af3b fix: make "connection refused" retryable in Dolt retry logic (bd-p3ytz)
- 81a87a7 fix: make TestRoutingIntegration/maintainer_with_SSH_remote deterministic (bd-g9eu)
- e73f16f fix: prevent stdout export from clearing dirty flags and auto-flush state (dolt-test-f8l)
- c4c54cb fix: remove global os.Stderr redirect during daemon import (dolt-test-s6y)
- db232c8 fix: remove output_schema=None workaround, FastMCP 2.14.4 handles union return types (bd-49kw)
- a8bc581 fix: remove unreachable RPC import method and dead code
- 766f6dc fix: replace hardcoded 100ms sleep with response-write-then-shutdown pattern (dolt-test-931)
- 2f4c26f fix: resolve gosec lint warnings in migrate_sync.go and migration_hint.go
- 7b9c581 fix: separate parent-child from blocks in bd list output (bd-ohn7c)
- ac09cde fix: standardize JSON output across commands (bd-au0.7)
- 4eafe63 fix: sync labels during import by removing DB labels absent from JSONL (dolt-test-96u)
- 6be7133 fix: use SQLITE_BUSY retry logic for all BEGIN IMMEDIATE calls (bd-ola6)
- 1d77673 fix: use port 3307 consistently for Dolt server connections (bd-ig3re)
- 249609d fix: use prefix-based Dolt database names to prevent cross-rig contamination (bd-u8rda)
- 4bf6e8f fix: use unique temp filename in writeMergedStateToJSONL to avoid collisions (dolt-test-1so)
Others
- 556836b Add beads-manager plugin to community tools list
- 17e54c5 Enable Dolt on Windows via gms_pure_go build tag
- 8cc9344 Fix bd doctor fix suggestion: bd daemon stop requires workspace path
- 3126997 Fix daemon ignoring auto-sync config from YAML
- 89e4ec5 Fix doctor --fix migration for legacy spec_id
- 976fbe6 Fix doctor role check false positive when role set via bd config
- df0204d Initialize bd after merge
- 7593042 Merge remote-tracking branch 'origin/main' into fix/nix-and-windows-ci
- a39cf8b Newsletter generator: automated narrative summaries of releases (#1197)
- a0450ec cleanup: remove G5 flock semaphore remnants (server mode makes them obsolete)
- e54ac33 hygiene: consolidate internal/util into internal/utils
- 16cdc21 hygiene: consolidate sqliteConnString into internal/storage
- d182aa0 hygiene: extract requireFreshDB to eliminate staleness boilerplate
- ae108e8 hygiene: renumber spec_id migration from 041 to 043
- 4bc425e hygiene: unexport 5 dead symbols in internal/merge
- d6690dc perf(tests): speed up cmd/bd test suite from ~158s to ~50s (bd-1rh)
- 198fcbf refactor: consolidate findJSONLPath in doctor/fix to use utils.FindJSONLInDir (bd-74w1)
- 5e2c4e9 refactor: move bd validate into bd doctor --check=validate (bd-e108)
- 829ac59 refactor: replace manual save/defer globals with saveAndRestoreGlobals helper (dolt-test-0uf)
- bcf54c5 release: v0.49.5
- 0a9bf3d security: add SQL identifier validation for dynamic table and database names (dolt-test-46a)
- 2bb827f style: run gofmt across entire codebase (bd-nmk12)
- eb571f9 test(beads): improve internal/beads coverage from 55.5% to 88.3%
- 9c96517 test(compact): improve internal/compact coverage from 54.9% to 87.9%
- 7033f0c test(create): add tests for --body-file and --description-file flags (bd-hy9p)
- 3aa501f test(daemon): add CLI-level integration tests for daemon mode
- 0129a46 test(gitignore): add failing tests for .jsonl.lock in template
- 72b3f0a test(syncbranch): improve test coverage from 63.5% to 78.8% (bd-io8c)
- 80e7509 test(utils): add multi-hyphen prefix tests for GH#405 (bd-s0qf)
- df08dd4 tests: add tests for doltutil and factory packages