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.

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.6.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.6.0
File Size Uploaded
beadle-0.6.0.tar.gz 28.2 kB Details

Built distribution (wheel)

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

Total release size: 59.1 kB

Release files / beadle-0.6.0.tar.gz

Download URL beadle-0.6.0.tar.gz
Size 28.2 kB
Tags Source
SHA-256 checksum
How to use checksums
2bc65a1001c046005d2922c38b40b8103b40c7067deed2f85c73c2911c0d55aa
BLAKE2b-256 checksum
How to use checksums
b09cd8ef587fe8dae40aab92bbdb662deeefb0f996b5fb03a35270c471649263
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

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

Download URL beadle-0.6.0-py3-none-any.whl
Size 30.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
210e0a27da8c7ffe0069e547d1af1885bb1636d491bbda8951d2f52d40eb7fb2
BLAKE2b-256 checksum
How to use checksums
ab63a5ee3b27b494750a2641ac5b8735e87380da4a040da815d9f849534399f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.12

Release history Release notifications | RSS feed

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

This release

0.6.0 This release

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