Skip to main content

Beadle

Build an AI employee without building an agent platform.

Most of any job is noticing, not thinking — scanning, comparing against a baseline, concluding nothing changed. Noticing is constant and answerable in SQL. Judgment is rare, expensive, and the only part a model is good at. Most agent systems fuse the two and pay judgment prices for noticing. Beadle keeps them apart.

pip install beadle
beadle init my-employees
cd my-employees
./beadle doctor
./beadle run example-site-watch uptime-check

Every task is the same five steps:

GATHER   deterministic — SQL, an API call, a shell command. No model.
GATE     plain Python. Did anything happen? If not, stop here — silently.
JUDGE    one isolated model call. It sees only the prompt produced by GATHER.
DELIVER  gated. Silence is the correct output most days.
RECORD   journal, archive.

There is no agent loop. On the production fleet this was extracted from — 21 live tasks — 10 never call a model at all, 18 can exit before the model is invoked, and the busiest task runs 144 times a day for zero tokens.

The judge uses a logged-in Claude Code or Codex CLI subscription, selected with BEADLE_LLM_PROVIDER=claude|codex; an optional BEADLE_LLM_FALLBACK can use the other login on auth or quota failure. No model API key is required. lib.llm_meta() returns the same answer plus the tokens, cost_usd and duration the CLI reported, and logs that meta per call. Claude judge calls skip Claude Code's own startup context (CLAUDE.md, MCP, skills, plugins, hooks): a few hundred tokens per call instead of 70k+. BEADLE_CLAUDE_FULL_CONTEXT=1 restores the old call.

Beadle is a workspace you own and edit. beadle init fetches it and gets out of the way. Full docs, four working example employees, and a complete worked build (including the bug hit along the way) are in the workspace itself.

Or import it into a codebase you already have

If you already have a repo with scheduled scripts in it, you do not need a second workspace:

from beadle import lib          # BEADLE_HOME=/path/to/your/repo

BEADLE_HOME decides where .env, logs/ and employees live; BEADLE_EMPLOYEES overrides the employee root on its own, so an existing layout keeps working (lib.journal("teams/sre", ...)) without moving a single folder. Everything else is identical, because it is the same lib.py.

The scheduler and the fleet status come with it. From the repo root (or with BEADLE_HOME set):

beadle dispatch --dry-run      # what in schedule.toml is due now; `beadle dispatch` runs the daemon
beadle dispatch --fleets       # every fleet in ~/.config/beadle/fleets.toml, one daemon
beadle status --json           # the whole fleet as one read-only JSON document

A fleet.toml at the root names the fleet, its companies and its employees_root; employees namespaced company/employee read <company>/company.md above their role.

The workspace remains the recommended way in: reading the four example employees teaches the shape faster than any API docs, and editing your own copy of lib.py is a feature, not a violation. Import it when you have an existing fleet to fold in rather than a new one to start.

MIT · https://github.com/agentropicai/beadle

Metadata

Release files for beadle 0.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for beadle 0.7.0
File Size Uploaded
beadle-0.7.0.tar.gz 28.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for beadle 0.7.0
File Interpreter ABI Platform
beadle-0.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 60.5 kB

Release files / beadle-0.7.0.tar.gz

Download URL beadle-0.7.0.tar.gz
Size 28.9 kB
Tags Source
SHA-256 checksum
How to use checksums
bb0502b671db9d316e02ddc141e5bb10a59092ed7dafb90c4cb36d883ba79bf0
BLAKE2b-256 checksum
How to use checksums
2ef7220c456e85030bd899e6c02070ae4d8f2e5257bd964dc8e6097b036f12db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / beadle-0.7.0-py3-none-any.whl

Download URL beadle-0.7.0-py3-none-any.whl
Size 31.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1f6160cb9768d3856000a531e87bf915e6e6a0c93bec30da9754ad13562681c7
BLAKE2b-256 checksum
How to use checksums
f07400b395f7bc8e69f6a0b513313464cc0eead7eb1f95a3dcbf5c5e1a8cba67
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

0.8.1

2 release files

0.8.0

2 release files

This release

0.7.0 This release

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page