737e65afbdcb6ad27f482383236fc80586878f2a
* fix(daemon): add periodic remote sync to event-driven mode The event-driven daemon mode only triggered imports when the local JSONL file changed (via file watcher) or when the fallback ticker fired (only if watcher failed). This meant the daemon wouldn't see updates pushed by other clones until something triggered a local file change. Bug scenario: 1. Clone A creates an issue and daemon pushes to sync branch 2. Clone B's daemon only watched local file changes 3. Clone B would not see the new issue until something triggered local change 4. With this fix: Clone B's daemon periodically calls doAutoImport This fix adds a 30-second periodic remote sync ticker that calls doAutoImport(), which includes syncBranchPull() to fetch and import updates from the remote sync branch. This is essential for multi-clone workflows where: - Clone A creates an issue and daemon pushes to sync branch - Clone B's daemon needs to periodically pull to see the new issue - Without periodic sync, Clone B would only see updates if its local JSONL file happened to change The 30-second interval balances responsiveness with network overhead. Adds integration test TestEventDrivenLoop_PeriodicRemoteSync that verifies the event-driven loop starts with periodic sync support. * feat(daemon): add configurable interval for periodic remote sync - Add BEADS_REMOTE_SYNC_INTERVAL environment variable to configure the interval for periodic remote sync (default: 30s) - Add getRemoteSyncInterval() function to parse the env var - Minimum interval is 5s to prevent excessive load - Setting to 0 disables periodic sync (not recommended) - Add comprehensive integration tests for the configuration Valid duration formats: - "30s" (30 seconds) - "1m" (1 minute) - "5m" (5 minutes) Tests added: - TestEventDrivenLoop_HasRemoteSyncTicker - TestGetRemoteSyncInterval_Default - TestGetRemoteSyncInterval_CustomValue - TestGetRemoteSyncInterval_MinimumEnforced - TestGetRemoteSyncInterval_InvalidValue - TestGetRemoteSyncInterval_Zero - TestSyncBranchPull_FetchesRemoteUpdates * fix: resolve all golangci-lint errors (cherry-pick from fix/linting-errors) Cherry-picked linting fixes to ensure CI passes. * feat(daemon): add config.yaml support for remote-sync-interval - Add remote-sync-interval to .beads/config.yaml as alternative to BEADS_REMOTE_SYNC_INTERVAL environment variable - Environment variable takes precedence over config.yaml (follows existing pattern for flush-debounce) - Add config binding in internal/config/config.go - Update getRemoteSyncInterval() to use config.GetDuration() - Add doctor validation for remote-sync-interval in config.yaml Configuration sources (in order of precedence): 1. BEADS_REMOTE_SYNC_INTERVAL environment variable 2. remote-sync-interval in .beads/config.yaml 3. DefaultRemoteSyncInterval (30s) Example config.yaml: remote-sync-interval: "1m" --------- Co-authored-by: Charles P. Cross <cpdata@users.noreply.github.com>
…
…
…
bd - Beads
Distributed, git-backed graph issue tracker for AI agents.
Beads provides a persistent, structured memory for coding agents. It replaces messy markdown plans with a dependency-aware graph, allowing agents to handle long-horizon tasks without losing context.
⚡ Quick Start
# Install (macOS/Linux)
curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
# Initialize (Humans run this once)
bd init
# Tell your agent
echo "Use 'bd' for task tracking" >> AGENTS.md
🛠 Features
- Git as Database: Issues stored as JSONL in
.beads/. Versioned, branched, and merged like code. - Agent-Optimized: JSON output, dependency tracking, and auto-ready task detection.
- Zero Conflict: Hash-based IDs (
bd-a1b2) prevent merge collisions in multi-agent/multi-branch workflows. - Invisible Infrastructure: SQLite local cache for speed; background daemon for auto-sync.
- Compaction: Semantic "memory decay" summarizes old closed tasks to save context window.
📖 Essential Commands
| Command | Action |
|---|---|
bd ready |
List tasks with no open blockers. |
bd create "Title" -p 0 |
Create a P0 task. |
bd dep add <child> <parent> |
Link tasks (blocks, related, parent-child). |
bd show <id> |
View task details and audit trail. |
bd quickstart |
Interactive guide for AI agents. |
🔗 Hierarchy & Workflow
Beads supports hierarchical IDs for epics:
bd-a3f8(Epic)bd-a3f8.1(Task)bd-a3f8.1.1(Sub-task)
Stealth Mode: Run bd init --stealth to use Beads locally without committing files to the main repo. Perfect for personal use on shared projects.
📦 Installation
- npm:
npm install -g @beads/bd - Homebrew:
brew install steveyegge/beads/bd - Go:
go install github.com/steveyegge/beads/cmd/bd@latest
Requirements: Linux (glibc 2.32+), macOS, or Windows.
🌐 Community Tools
- beads_viewer - Keyboard-driven terminal UI with kanban board, insights panel, and graph view. Built by @Dicklesworthstone.
- beads.el - Emacs UI to browse, edit, and manage beads. Built by @ctietze.
- beads-ui - Local web interface with live updates and kanban board.
npx beads-ui start. Built by @mantoni. - bdui - Real-time terminal UI with tree view, dependency graph, and vim-style navigation. Built by @assimelha.
- perles - Terminal UI with BQL (Beads Query Language) and multi-view kanban. Built by @zjrosen.
- vscode-beads - VS Code extension with issues panel and daemon management. Built by @jdillon.
📝 Documentation
Languages
Go
95%
Python
3.7%
Shell
0.7%
JavaScript
0.3%
PowerShell
0.1%