Files
beads/npm-package/CLAUDE_CODE_WEB.md
Steve Yegge da921e1829 Add npm package for bd with native binaries (bd-febc)
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>
2025-11-03 11:41:18 -08:00

285 lines
6.7 KiB
Markdown

# 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:
1. Installing via npm (which is always available)
2. Downloading the native binary during postinstall
3. Providing a CLI wrapper that "just works"
## Setup
### Option 1: SessionStart Hook (Recommended)
Create or edit `.claude/hooks/session-start.sh` in your project:
```bash
#!/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:
```bash
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:
```bash
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):
```bash
npm install --save-dev @beads/bd
# Use with npx
npx bd version
npx bd ready
```
## Verification
After installation, verify bd is working:
```bash
# 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:
```bash
# 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:
```markdown
## 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
1. **SessionStart Hook**: Runs automatically when session starts
2. **npm install**: Downloads the @beads/bd package from npm registry
3. **postinstall**: Package automatically downloads the native binary for your platform
4. **CLI Wrapper**: `bd` command is a Node.js wrapper that invokes the native binary
5. **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:
```bash
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:
```bash
npm view @beads/bd versions
```
And install a specific version:
```bash
npm install -g @beads/bd@0.21.5
```
### "Binary not found after extraction"
Platform detection may have failed. Check:
```bash
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:
1. Using a different npm registry mirror
2. 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
```bash
#!/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:
```json
{
"devDependencies": {
"@beads/bd": "^0.21.5"
},
"scripts": {
"bd": "bd",
"ready": "bd ready",
"postinstall": "bd init --quiet || true"
}
}
```
Then use with npm scripts or npx:
```bash
npm run ready
npx bd create "New issue"
```
## Resources
- [beads GitHub repository](https://github.com/steveyegge/beads)
- [npm package page](https://www.npmjs.com/package/@beads/bd)
- [Complete documentation](https://github.com/steveyegge/beads#readme)
- [Claude Code hooks documentation](https://docs.claude.com/claude-code)