Easy Bead Oven banner
schpet schpet

Easy Bead Oven

Development community

Description

[experimental] runs claude code in a loop, polling for beads issues

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

README

easy-bead-oven

beads orchestrator for claude code. processes beads issues as they become ready, waiting for new work when idle. quality gates ensure code quality.

install

deno install -A -g -f -n ebo jsr:@schpet/easy-bead-oven

or, if you've cloned the repo:

deno install -c ./deno.json -A -g -f -n ebo ./main.ts

status

**this project is experimental and in early development.**

current limitations:

  • runs claude code in a sequential for loop (no parallelization)
  • only supports claude code as the agent (no support for other ai agents/models)

usage

ebo **requires** `--dangerously-skip-permissions` since it runs claude code autonomously in a loop and cannot prompt for permissions.

# basic usage - run in continuous mode (streams output, runs indefinitely)
ebo --dangerously-skip-permissions

# limit to 10 iterations
ebo --dangerously-skip-permissions --max-iterations 10

# use a specific model
ebo --dangerously-skip-permissions --model claude-sonnet-4-20250514

# quiet mode
ebo --dangerously-skip-permissions --quiet

how it works

  1. runs quality gates first (if configured) and fixes any failures
  2. checks for stale in_progress issues from previous runs
  3. reads ready issues from beads (bd ready)
  4. claims the first issue (sets status to in_progress)
  5. builds a prompt from issue details and runs claude code
  6. runs quality gates
  7. if gates pass, closes the issue
  8. repeats for ready issues, polling when idle

configuration

create `.config/ebo.toml` in your project to configure quality gates:

gates = [
  "npm test",
  "npx tsc --noEmit",
  "npx prettier --check .",
  "npx eslint .",
]

gates are run sequentially and must all pass for an issue to be closed.

language examples

**deno:**

gates = [
  "deno fmt --check",
  "deno lint",
  "deno test -A",
]

**rust:**

gates = [
  "cargo test",
  "cargo check",
  "cargo fmt --check",
  "cargo clippy -- -D warnings",
]
`