Implements @beads/bd npm package for easy installation in Node.js environments, especially Claude Code for Web. Features: - Automatic platform-specific binary download during postinstall - CLI wrapper that invokes native bd binary - Full feature parity with standalone bd - Works with SessionStart hooks for auto-installation Package structure: - bin/bd.js: Node.js CLI wrapper - scripts/postinstall.js: Downloads correct binary from GitHub releases - scripts/test.js: Verification tests - Comprehensive documentation (6 guides) Published to npm: https://www.npmjs.com/package/@beads/bd Benefits vs WASM: - Full SQLite support (no custom VFS) - Better performance (native vs WASM) - Simpler implementation and maintenance - All commands work identically Closes bd-febc, bd-be7a, bd-e2e6, bd-f282, bd-87a0, bd-b54c 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
6.7 KiB
Using bd in Claude Code for Web
This guide shows how to automatically install and use bd (beads issue tracker) in Claude Code for Web sessions using SessionStart hooks.
What is Claude Code for Web?
Claude Code for Web provides full Linux VM sandboxes with npm support. Each session is a fresh environment, so tools need to be installed at the start of each session.
Why npm Package Instead of Direct Binary?
Claude Code for Web environments:
- ✅ Have npm pre-installed and configured
- ✅ Can install global npm packages easily
- ❌ May have restrictions on direct binary downloads
- ❌ Don't persist installations between sessions
The @beads/bd npm package solves this by:
- Installing via npm (which is always available)
- Downloading the native binary during postinstall
- Providing a CLI wrapper that "just works"
Setup
Option 1: SessionStart Hook (Recommended)
Create or edit .claude/hooks/session-start.sh in your project:
#!/bin/bash
# .claude/hooks/session-start.sh
# Install bd globally (only takes a few seconds)
echo "Installing bd (beads issue tracker)..."
npm install -g @beads/bd
# Initialize bd in the project (if not already initialized)
if [ ! -d .beads ]; then
bd init --quiet
fi
echo "✓ bd is ready! Use 'bd ready' to see available work."
Make it executable:
chmod +x .claude/hooks/session-start.sh
Option 2: Manual Installation Each Session
If you prefer not to use hooks, you can manually install at the start of each session:
npm install -g @beads/bd
bd init --quiet
Option 3: Project-Local Installation
Install as a dev dependency (slower but doesn't require global install):
npm install --save-dev @beads/bd
# Use with npx
npx bd version
npx bd ready
Verification
After installation, verify bd is working:
# Check version
bd version
# Check database info
bd info
# See what work is ready
bd ready --json
Usage in Claude Code for Web
Once installed, bd works identically to the native version:
# Create issues
bd create "Fix authentication bug" -t bug -p 1
# View ready work
bd ready
# Update status
bd update bd-a1b2 --status in_progress
# Add dependencies
bd dep add bd-f14c bd-a1b2
# Close issues
bd close bd-a1b2 --reason "Fixed"
Agent Integration
Tell your agent to use bd by adding to your AGENTS.md or project instructions:
## Issue Tracking
Use the `bd` command for all issue tracking instead of markdown TODOs:
- Create issues: `bd create "Task description" -p 1 --json`
- Find work: `bd ready --json`
- Update status: `bd update <id> --status in_progress --json`
- View details: `bd show <id> --json`
Use `--json` flags for programmatic parsing.
How It Works
- SessionStart Hook: Runs automatically when session starts
- npm install: Downloads the @beads/bd package from npm registry
- postinstall: Package automatically downloads the native binary for your platform
- CLI Wrapper:
bdcommand is a Node.js wrapper that invokes the native binary - bd init: Sets up the .beads directory and imports existing issues from git
Performance
- First install: ~5-10 seconds (one-time per session)
- Binary download: ~3-5 seconds (darwin-arm64 binary is ~17MB)
- Subsequent commands: Native speed (<100ms)
Troubleshooting
"bd: command not found"
The SessionStart hook didn't run or installation failed. Manually run:
npm install -g @beads/bd
"Error installing bd: HTTP 404"
The version in package.json doesn't match a GitHub release. This shouldn't happen with published npm packages, but if it does, check:
npm view @beads/bd versions
And install a specific version:
npm install -g @beads/bd@0.21.5
"Binary not found after extraction"
Platform detection may have failed. Check:
node -e "console.log(require('os').platform(), require('os').arch())"
Should output something like: linux x64
Slow installation
The binary download may be slow depending on network conditions. The native binary is ~17MB, which should download in a few seconds on most connections.
If it's consistently slow, consider:
- Using a different npm registry mirror
- Caching the installation (if Claude Code for Web supports it)
Benefits Over WASM
This npm package wraps the native bd binary rather than using WebAssembly because:
- ✅ Full SQLite support: No custom VFS or compatibility issues
- ✅ All features work: 100% feature parity with standalone bd
- ✅ Better performance: Native speed vs WASM overhead
- ✅ Simpler maintenance: Single binary build, no WASM-specific code
- ✅ Faster installation: One binary download vs WASM compilation
Examples
Example SessionStart Hook with Error Handling
#!/bin/bash
# .claude/hooks/session-start.sh
set -e # Exit on error
echo "🔗 Setting up bd (beads issue tracker)..."
# Install bd globally
if ! command -v bd &> /dev/null; then
echo "Installing @beads/bd from npm..."
npm install -g @beads/bd --quiet
else
echo "bd already installed"
fi
# Verify installation
if bd version &> /dev/null; then
echo "✓ bd $(bd version)"
else
echo "✗ bd installation failed"
exit 1
fi
# Initialize if needed
if [ ! -d .beads ]; then
echo "Initializing bd in project..."
bd init --quiet
else
echo "bd already initialized"
fi
# Show ready work
echo ""
echo "Ready work:"
bd ready --limit 5
echo ""
echo "✓ bd is ready! Use 'bd --help' for commands."
Example Claude Code Prompt
You are working on a project that uses bd (beads) for issue tracking.
At the start of each session:
1. Run `bd ready --json` to see available work
2. Choose an issue to work on
3. Update its status: `bd update <id> --status in_progress`
While working:
- Create new issues for any bugs you discover
- Link related issues with `bd dep add`
- Add comments with `bd comments add <id> "comment text"`
When done:
- Close the issue: `bd close <id> --reason "Description of what was done"`
- Commit your changes including .beads/issues.jsonl
Alternative: Package as Project Dependency
If you prefer to track bd as a project dependency instead of global install:
{
"devDependencies": {
"@beads/bd": "^0.21.5"
},
"scripts": {
"bd": "bd",
"ready": "bd ready",
"postinstall": "bd init --quiet || true"
}
}
Then use with npm scripts or npx:
npm run ready
npx bd create "New issue"