Charter
github.com/boundflow/charter- Category
- Developer Tools
- Rank
- No. 1573Tools index
Previous survey · No. 1509 ·
- Pricing
- Open Source
- Type
- TOOL
- Use case
- Agent Building
- Interfaces
- CLI · API · Web · SDK
- GitHub
- 17 stars
- Latest release
- v0.2.0
- Date
About
Charter is an open-source platform for running AI agents in production, defined via YAML and executed by workers in the user's own environment against a persistent control plane. It adds durable execution that survives crashes, human-approval gates on tool calls, spend/call budgets, lifecycle policies that pause or roll back misbehaving agents, and OpenTelemetry-based audit trails, while keeping model keys and data off the control plane.
What it does
Charter wraps LangChain's deepagents harness so an agent can stop mid-task, wait for a person, and pick up later on a different machine. You describe the agent, its tools and its limits in config files, and one command translates them into workflow definitions on BoundFlow, a separate orchestration server from the same authors. Your own Python processes then execute the agent, talk to MCP (Model Context Protocol) tool servers, and keep conversation checkpoints in a Postgres database you operate. The orchestration server sees tool names, counts and costs, never prompts or arguments.
Why it's ranked here
The engineering is careful where money and authority are at stake. Spend caps are enforced twice: once per call inside the worker and once as a running total carried across every pause, so a task stopped four times for approval cannot spend its budget five times. Token usage is read from the harness's own saved state rather than counted in memory, so subagent spend is not missed. Undeclared tools are refused, so a tool server shipping a new tool cannot quietly widen an agent's reach. Against that: it declares itself pre-alpha, is Apache 2.0 licensed, and does nothing without the BoundFlow server.
What's good
The design notes explain why each choice was made, including the traps: the underlying SDK names its tool failure metric a rate while summing a raw count, and Charter uses the accurate name. A rollback restores an older agent version while today's spending limits stay in force, because policy is deliberately left unversioned. One broken tool server quarantines only its own agent, not the whole process, with a retry after 60 seconds. Notifications are HMAC-SHA256 signed webhooks with Slack and Telegram body shapes, so there is no vendor integration to maintain. End-to-end tests run against a real control plane with only the model faked.
Tradeoffs
Everything depends on BoundFlow: without that server running, locally in Docker or through a hosted service still in early access, nothing executes. The package warns that the config format and command line can change between releases. Resumed work is at-least-once, so a tool call whose side effect landed just before a worker crash can run again. When one turn proposes several gated actions, only the first goes to a person and the rest wait for later rounds. A provider-billed call lost in a crash before its result is saved goes uncounted, which the authors bound to one call.
How to use it well
It fits a team already on LangChain that needs agents to touch real systems, such as issuing refunds or closing tickets, with a named person approving the risky calls and a hard dollar cap per task. Start with the local Docker setup and the bundled support-desk examples, then add one gated tool and a spending ceiling before anything else. Keep every version a lifecycle rule might roll back to in the worker's served list, and make gated tools idempotent. It is not an evaluation suite or a prompt-testing tool, and a team outside Python will fight the required dependencies.
Technical notes+
charter/compile.py maps YAML onto BoundFlow SDK types; WorkflowConfig sets resumable=True, commented as at-least-once. The per-run budget becomes BoundFlow's per-invocation cap, while charter/workflows/loop.py passes the remainder as a Budget after each gate. charter/policy.py carries Charter-only limits in RuntimePolicy.custom, reading both typed and dict shapes. charter/harness/metering.py swaps the checkpoint saver's class to read usage_metadata, deduplicating by message id. charter/harness/gates.py turns LangGraph interrupts into approvals; pending_action() returns only the first request. charter/worker.py quarantines per agent version, retrying after REQUARANTINE_SECONDS = 60. The charter/cli.py docstring still says only validate and apply exist.
Observed
- License
- Apache-2.0
- Language
- Python, requires 3.10 or later
- Install surface
- pip package boundflow-charter, with extras ui, otel, openai, google, bedrock, ollama, groq
- Interfaces
- charter CLI plus a browser console served by charter ui; config as YAML with JSON Schema export
- Required dependencies
- BoundFlow SDK and control plane, deepagents, LangGraph with Postgres checkpointing, MCP client
- Model providers
- Any provider LangChain's init_chat_model can build, including local Ollama; Anthropic installed by default
- Notifications
- Webhook, Slack and Telegram channels, optionally HMAC-SHA256 signed
- Trace sinks
- none, logging, jsonl, OpenTelemetry (otel)
- Tests
- pytest suite with a 180-second per-test timeout; end-to-end tests excluded by default and require a running control plane
- Execution semantics
- Resumable operations are at-least-once: a tool call can run again after a worker dies
Read from README.md, pyproject.toml, DESIGN.md, charter/cli.py, charter/worker.py, charter/compile.py, charter/policy.py, charter/harness/gates.py, charter/harness/metering.py, charter/workflows/loop.py, charter/config/worker.py.
What it can do
Define AI agents using YAML configuration
YAML file → Agent definition
Execute agent workflows with durable execution that survives crashes
Agent definition → Running agent process
Require human approval before executing tool calls
Tool call request → Approval decision
Enforce spend and call budgets on agents
Budget limits → Enforced usage caps
Apply lifecycle policies to pause or roll back misbehaving agents
Agent behavior data → Pause or rollback action
Generate OpenTelemetry-based audit trails of agent activity
Agent execution events → Audit trail/logs
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.