diff --git a/.beads/.gitignore b/.beads/.gitignore deleted file mode 100644 index 4a7a77d..0000000 --- a/.beads/.gitignore +++ /dev/null @@ -1,39 +0,0 @@ -# SQLite databases -*.db -*.db?* -*.db-journal -*.db-wal -*.db-shm - -# Daemon runtime files -daemon.lock -daemon.log -daemon.pid -bd.sock -sync-state.json -last-touched - -# Local version tracking (prevents upgrade notification spam after git ops) -.local_version - -# Legacy database files -db.sqlite -bd.db - -# Worktree redirect file (contains relative path to main repo's .beads/) -# Must not be committed as paths would be wrong in other clones -redirect - -# Merge artifacts (temporary files from 3-way merge) -beads.base.jsonl -beads.base.meta.json -beads.left.jsonl -beads.left.meta.json -beads.right.jsonl -beads.right.meta.json - -# NOTE: Do NOT add negation patterns (e.g., !issues.jsonl) here. -# They would override fork protection in .git/info/exclude, allowing -# contributors to accidentally commit upstream issue databases. -# The JSONL files (issues.jsonl, interactions.jsonl) and config files -# are tracked by git by default since no pattern above ignores them. diff --git a/.beads/README.md b/.beads/README.md deleted file mode 100644 index 50f281f..0000000 --- a/.beads/README.md +++ /dev/null @@ -1,81 +0,0 @@ -# Beads - AI-Native Issue Tracking - -Welcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-native tool designed to live directly in your codebase alongside your code. - -## What is Beads? - -Beads is issue tracking that lives in your repo, making it perfect for AI coding agents and developers who want their issues close to their code. No web UI required - everything works through the CLI and integrates seamlessly with git. - -**Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads) - -## Quick Start - -### Essential Commands - -```bash -# Create new issues -bd create "Add user authentication" - -# View all issues -bd list - -# View issue details -bd show - -# Update issue status -bd update --status in_progress -bd update --status done - -# Sync with git remote -bd sync -``` - -### Working with Issues - -Issues in Beads are: -- **Git-native**: Stored in `.beads/issues.jsonl` and synced like code -- **AI-friendly**: CLI-first design works perfectly with AI coding agents -- **Branch-aware**: Issues can follow your branch workflow -- **Always in sync**: Auto-syncs with your commits - -## Why Beads? - -✨ **AI-Native Design** -- Built specifically for AI-assisted development workflows -- CLI-first interface works seamlessly with AI coding agents -- No context switching to web UIs - -🚀 **Developer Focused** -- Issues live in your repo, right next to your code -- Works offline, syncs when you push -- Fast, lightweight, and stays out of your way - -🔧 **Git Integration** -- Automatic sync with git commits -- Branch-aware issue tracking -- Intelligent JSONL merge resolution - -## Get Started with Beads - -Try Beads in your own projects: - -```bash -# Install Beads -curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash - -# Initialize in your repo -bd init - -# Create your first issue -bd create "Try out Beads" -``` - -## Learn More - -- **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs) -- **Quick Start Guide**: Run `bd quickstart` -- **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples) - ---- - -*Beads: Issue tracking that moves at the speed of thought* ⚡ diff --git a/.beads/config.yaml b/.beads/config.yaml deleted file mode 100644 index f242785..0000000 --- a/.beads/config.yaml +++ /dev/null @@ -1,62 +0,0 @@ -# Beads Configuration File -# This file configures default behavior for all bd commands in this repository -# All settings can also be set via environment variables (BD_* prefix) -# or overridden with command-line flags - -# Issue prefix for this repository (used by bd init) -# If not set, bd init will auto-detect from directory name -# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc. -# issue-prefix: "" - -# Use no-db mode: load from JSONL, no SQLite, write back after each command -# When true, bd will use .beads/issues.jsonl as the source of truth -# instead of SQLite database -# no-db: false - -# Disable daemon for RPC communication (forces direct database access) -# no-daemon: false - -# Disable auto-flush of database to JSONL after mutations -# no-auto-flush: false - -# Disable auto-import from JSONL when it's newer than database -# no-auto-import: false - -# Enable JSON output by default -# json: false - -# Default actor for audit trails (overridden by BD_ACTOR or --actor) -# actor: "" - -# Path to database (overridden by BEADS_DB or --db) -# db: "" - -# Auto-start daemon if not running (can also use BEADS_AUTO_START_DAEMON) -# auto-start-daemon: true - -# Debounce interval for auto-flush (can also use BEADS_FLUSH_DEBOUNCE) -# flush-debounce: "5s" - -# Git branch for beads commits (bd sync will commit to this branch) -# IMPORTANT: Set this for team projects so all clones use the same sync branch. -# This setting persists across clones (unlike database config which is gitignored). -# Can also use BEADS_SYNC_BRANCH env var for local override. -# If not set, bd sync will require you to run 'bd config set sync.branch '. -# sync-branch: "beads-sync" - -# Multi-repo configuration (experimental - bd-307) -# Allows hydrating from multiple repositories and routing writes to the correct JSONL -# repos: -# primary: "." # Primary repo (where this database lives) -# additional: # Additional repos to hydrate from (read-only) -# - ~/beads-planning # Personal planning repo -# - ~/work-planning # Work planning repo - -# Integration settings (access with 'bd config get/set') -# These are stored in the database, not in this file: -# - jira.url -# - jira.project -# - linear.url -# - linear.api-key -# - github.org -# - github.repo diff --git a/.beads/interactions.jsonl b/.beads/interactions.jsonl deleted file mode 100644 index e69de29..0000000 diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl deleted file mode 100644 index 1aa9008..0000000 --- a/.beads/issues.jsonl +++ /dev/null @@ -1,12 +0,0 @@ -{"id":"py-code-mode-0c9","title":"Fix MCP install commands to consistently use --base flag","status":"closed","priority":1,"issue_type":"bug","created_at":"2026-01-02T13:10:43.012292-08:00","created_by":"actae0n","updated_at":"2026-01-02T13:11:47.455148-08:00","closed_at":"2026-01-02T13:11:47.455148-08:00","close_reason":"Fixed: README.md, getting-started.md, dependencies.md now consistently use --base"} -{"id":"py-code-mode-6y4","title":"Put mcp tools under their own namespaces instead of merging with top level namespace","description":"Right now, if one enables for example the semgrep MCP, all the MCP tools will go under tools.* namespace; they will not be grouped like tools.semgrep.*; this causes tools without a nice prefix to be confusing (who provides them? what are they for?)","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-02T01:44:05.333773-08:00","created_by":"actae0n","updated_at":"2026-01-02T02:37:35.39444-08:00","closed_at":"2026-01-02T02:37:35.39444-08:00","close_reason":"Implemented MCP tool namespacing - tools now accessible via tools.namespace.tool_name pattern"} -{"id":"py-code-mode-nqe","title":"Async Skills Migration","status":"closed","priority":1,"issue_type":"feature","created_at":"2026-01-02T19:26:01.647453-08:00","created_by":"actae0n","updated_at":"2026-01-02T19:35:06.963875-08:00","closed_at":"2026-01-02T19:35:06.963875-08:00","close_reason":"Async skills migration complete - all code review fixes applied"} -{"id":"py-code-mode-nqe.1","title":"Enforce async def run() for all skills","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-02T19:26:10.866714-08:00","created_by":"actae0n","updated_at":"2026-01-02T19:26:20.361907-08:00","closed_at":"2026-01-02T19:26:20.361907-08:00","close_reason":"PythonSkill.from_source validates async def run()","dependencies":[{"issue_id":"py-code-mode-nqe.1","depends_on_id":"py-code-mode-nqe","type":"parent-child","created_at":"2026-01-02T19:26:10.8757-08:00","created_by":"actae0n"}]} -{"id":"py-code-mode-nqe.2","title":"Fix InProcessExecutor to await async skills","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-02T19:26:10.998531-08:00","created_by":"actae0n","updated_at":"2026-01-02T19:26:20.455011-08:00","closed_at":"2026-01-02T19:26:20.455011-08:00","close_reason":"SkillsNamespace uses run_coroutine_threadsafe","dependencies":[{"issue_id":"py-code-mode-nqe.2","depends_on_id":"py-code-mode-nqe","type":"parent-child","created_at":"2026-01-02T19:26:11.001649-08:00","created_by":"actae0n"}]} -{"id":"py-code-mode-nqe.3","title":"Fix SubprocessExecutor to handle async skills in IPython","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-02T19:26:11.120923-08:00","created_by":"actae0n","updated_at":"2026-01-02T19:26:20.549138-08:00","closed_at":"2026-01-02T19:26:20.549138-08:00","close_reason":"SkillsProxy uses ThreadPoolExecutor for nested event loops","dependencies":[{"issue_id":"py-code-mode-nqe.3","depends_on_id":"py-code-mode-nqe","type":"parent-child","created_at":"2026-01-02T19:26:11.124201-08:00","created_by":"actae0n"}]} -{"id":"py-code-mode-nqe.4","title":"Fix container deps visibility (CONTAINER_DEPS env var)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-02T19:26:11.24671-08:00","created_by":"actae0n","updated_at":"2026-01-02T19:26:20.640213-08:00","closed_at":"2026-01-02T19:26:20.640213-08:00","close_reason":"Added CONTAINER_DEPS env var handling","dependencies":[{"issue_id":"py-code-mode-nqe.4","depends_on_id":"py-code-mode-nqe","type":"parent-child","created_at":"2026-01-02T19:26:11.250281-08:00","created_by":"actae0n"}]} -{"id":"py-code-mode-nqe.5","title":"Run full test suite and verify all pass","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-02T19:26:11.368386-08:00","created_by":"actae0n","updated_at":"2026-01-02T19:27:51.322838-08:00","closed_at":"2026-01-02T19:27:51.322838-08:00","close_reason":"Tests run in CI","dependencies":[{"issue_id":"py-code-mode-nqe.5","depends_on_id":"py-code-mode-nqe","type":"parent-child","created_at":"2026-01-02T19:26:11.370988-08:00","created_by":"actae0n"}]} -{"id":"py-code-mode-nqe.6","title":"Test analyze_reddit_thread skill end-to-end","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-02T19:26:11.489488-08:00","created_by":"actae0n","updated_at":"2026-01-02T19:29:16.283249-08:00","closed_at":"2026-01-02T19:29:16.283249-08:00","close_reason":"Async skill invocation verified working","dependencies":[{"issue_id":"py-code-mode-nqe.6","depends_on_id":"py-code-mode-nqe","type":"parent-child","created_at":"2026-01-02T19:26:11.493071-08:00","created_by":"actae0n"}]} -{"id":"py-code-mode-nqe.7","title":"Update docs for async skills requirement","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-02T19:26:56.116869-08:00","created_by":"actae0n","updated_at":"2026-01-02T19:30:51.714371-08:00","closed_at":"2026-01-02T19:30:51.714371-08:00","close_reason":"Updated docs/skills.md with async def run() examples","dependencies":[{"issue_id":"py-code-mode-nqe.7","depends_on_id":"py-code-mode-nqe","type":"parent-child","created_at":"2026-01-02T19:26:56.125025-08:00","created_by":"actae0n"}]} -{"id":"py-code-mode-nqe.8","title":"Code review async skills implementation","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-02T19:26:56.261165-08:00","created_by":"actae0n","updated_at":"2026-01-02T19:47:25.662469-08:00","closed_at":"2026-01-02T19:47:25.662469-08:00","close_reason":"Code review fixes complete - from_file validation, CONTAINER_DEPS in Redis mode, simplified invoke()","dependencies":[{"issue_id":"py-code-mode-nqe.8","depends_on_id":"py-code-mode-nqe","type":"parent-child","created_at":"2026-01-02T19:26:56.265661-08:00","created_by":"actae0n"}]} -{"id":"py-code-mode-y1l","title":"Session API ergonomics: convenience constructors","description":"Improve Session API ergonomics with convenience constructors (from_base, subprocess, inprocess). Make storage param required. Re-export executor types at top level. PR #53.","status":"closed","priority":0,"issue_type":"task","created_at":"2026-01-02T13:04:00.716049-08:00","created_by":"actae0n","updated_at":"2026-01-02T13:04:14.004424-08:00","closed_at":"2026-01-02T13:04:14.004424-08:00","close_reason":"Closed"} diff --git a/.beads/metadata.json b/.beads/metadata.json deleted file mode 100644 index c787975..0000000 --- a/.beads/metadata.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "database": "beads.db", - "jsonl_export": "issues.jsonl" -} \ No newline at end of file diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 807d598..0000000 --- a/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ - -# Use bd merge for beads JSONL files -.beads/issues.jsonl merge=beads diff --git a/AGENTS.md b/AGENTS.md index 87117fd..7e792af 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,35 +1,11 @@ # Agent Instructions -## Agent-Managed Beads (User Preference) - -**The user does NOT interact with bd directly.** Agent handles all issue tracking automatically. - -### On session start: -1. Run `bd ready` to check available tasks -2. Present options to user in plain language -3. If no tasks exist, ask what to work on and create issues - -### During work: -- Create parent issues for features: `bd create "Feature: X" -p 0` -- Create sub-tasks: `bd create "Subtask" -p 1 --parent ` -- Link blockers: `bd dep add ` -- Claim work: `bd update --status in_progress` - -### On task completion: -- Close finished work: `bd close ` -- Run `bd ready` to suggest next task -- Present next options to user - -### Key principle: -User says what they want in plain English. Agent translates to bd commands, executes them, and reports back in plain English. - ---- - ## Branch Policy **The `main` branch is protected.** You cannot push directly to main. **ALWAYS create a feature branch before making changes:** + ```bash git checkout -b feature/description-of-work # ... make changes ... @@ -38,42 +14,3 @@ git push -u origin feature/description-of-work ``` --- - -This project uses **bd** (beads) for issue tracking. Run `bd onboard` to get started. - -## Quick Reference - -```bash -bd ready # Find available work -bd show # View issue details -bd update --status in_progress # Claim work -bd close # Complete work -bd sync # Sync with git -``` - -## Landing the Plane (Session Completion) - -**When ending a work session**, you MUST complete ALL steps below. Work is NOT complete until `git push` succeeds. - -**MANDATORY WORKFLOW:** - -1. **File issues for remaining work** - Create issues for anything that needs follow-up -2. **Run quality gates** (if code changed) - Tests, linters, builds -3. **Update issue status** - Close finished work, update in-progress items -4. **PUSH TO REMOTE** - This is MANDATORY: - ```bash - git pull --rebase - bd sync - git push - git status # MUST show "up to date with origin" - ``` -5. **Clean up** - Clear stashes, prune remote branches -6. **Verify** - All changes committed AND pushed -7. **Hand off** - Provide context for next session - -**CRITICAL RULES:** -- Work is NOT complete until `git push` succeeds -- NEVER stop before pushing - that leaves work stranded locally -- NEVER say "ready to push when you are" - YOU must push -- If push fails, resolve and retry until it succeeds -