AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
Chetter is an open source control plane for autonomous coding agents. Standard harnesses, plain Docker or Kubernetes, GitHub-native workflows. No hosted service, no custom runtime, no lock-in.
Developer toolsGo · SvelteGitHub @flatout-worksOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Chetter: self-hosted MCP server and runner fleet for autonomous AI development tasks
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Chetter is an Open Source system written in Go for running autonomous AI development agents using standard harnesses (OpenCode, Claude Code, CodeWhale, Pi, Codex, Niffler) in standard Docker or Kubernetes environments.
If you are looking for a simple(r) solution to self host standard autonomous coding agents, then Chetter should be interesting. Hop into our Discord if you want to know more.Read the full README ↗Chetter is an Open Source system written in Go for running autonomous AI development agents using standard harnesses (OpenCode, Claude Code, CodeWhale, Pi, Codex, Niffler) in standard Docker or Kubernetes environments. If you are looking for a simple(r) solution to self host standard autonomous coding agents, then Chetter should be interesting. Hop into our Discord if you want to know more.
Chetter was built as a reaction towards the solutions available (E2B, Daytona, Modal etc) which often are not Open Source or want to lock you into them hosting your agents, need relatively exotic infrastructure like Firecracker VMs or use custom harnesses instead of industry standard harnesses.
Chetter instead ...
Prerequisites
docker.io package install docker-buildx too:
sudo apt-get install -y docker.io docker-compose-v2 docker-buildxgitDEEPSEEK_API_KEY) — set it in .envgit clone https://github.com/flatout-works/chetter.git
cd chetter
cp .env.example .env
# Edit .env: set CHETTER_MCP_AUTH_TOKEN and at least one LLM provider key
./deploy/build.sh
docker compose --env-file .env -f deploy/compose.yaml -f deploy/compose.local.yaml up -d
The MCP server is at http://localhost:18088, the web UI at http://localhost:18090.
See docs/MANUAL.md for detailed setup, configuration, and operations.
What you get: a dev TiDB (bundled via deploy/compose.local.yaml,
single-node unistore, MySQL-wire compatible — the chetter database and
all migrations are created automatically on startup), the MCP server, and two
runners. To run your first task you also need a default Git identity
(chetter_create_git_identity + chetter_set_git_identity_default via any
MCP client).
⚠ Security note: the quickstart runs agent tasks in plain Docker, without gVisor sandboxing (
compose.local.yamlsetsCHETTER_ALLOW_UNISOLATED=trueandUSE_GVISOR=false). That is fine for development, but it is not a security boundary against a malicious task. For a hardened deployment, enable gVisor — see docs/DEPLOYMENT.md and "Verifying gVisor" below.
The server defaults to hardened mode: every task requires gVisor-enforced isolation unless the deployment opts out. To go from the quickstart to a sandboxed setup:
runsc on the host and register it with Docker, per
docs/DEPLOYMENT.md ("Docker + gVisor").deploy/compose.local.yaml, set USE_GVISOR: "true" for the runners
(or drop the override) and remove CHETTER_ALLOW_UNISOLATED.docker compose up -d --force-recreate).chetter_runner_health),
andrunsc runtime:
docker inspect <task-container> --format '{{.HostConfig.Runtime}}' # → runsc
isolation="required" runs (instead of failing
with isolation_unavailable).ops/test-quickstart.sh runs the full Quick Start from scratch on a
disposable Ubuntu 24.04 KVM VM and asserts every step — ideal before
releases:
DEEPSEEK_API_KEY=sk-... ./ops/test-quickstart.sh # plain-Docker quickstart
DEEPSEEK_API_KEY=sk-... ./ops/test-quickstart.sh --gvisor # ...then gVisor hardening
The default run provisions the VM (no Docker preinstalled), installs the
prerequisites, and validates: image build, compose up, database
auto-creation + migrations, MCP connect, fleet health, a real task
execution, and the self-test. --gvisor additionally installs runsc,
switches the stack to hardened mode and re-validates with
isolation="required" tasks (including the HostConfig.Runtime == runsc
check). Each step is reported PASS/FAIL; the VM is torn down afterwards
(QS_KEEP_VM=1 keeps it for debugging). Requires /dev/kvm, libvirt
tooling, and sudo. See the script header for all options.
/chetter-review): see docs/TRIGGERS.md..opencode/opencode.json; set CHETTER_MCP_TOKEN and point the url at your serverclaude mcp add --transport http chetter https://chetter.example.com/mcp --header "Authorization: Bearer $TOKEN"| Path | Purpose |
|---|---|
main.go | Server entry point |
internal/ | Config, store, service, webhook, web UI |
cmd/ | chetterctl token management CLI |
db/ | Migrations and sqlc query files (TiDB/MySQL under db/migrations/, PostgreSQL under db/postgres/) |
proto/ | ConnectRPC service definitions (server ↔ runner) |
runner/ | Containerized runner harness |
web/ | SvelteKit web UI (Flowbite-Svelte) |
deploy/ | Docker Compose and Kubernetes manifests |
docs/ | Documentation |
Requires Go 1.26+, Node.js 24 + npm (the server embeds the web UI), and GNU Make.
make check && make build
make build compiles the SvelteKit web UI, embeds it into the server via
go:embed, and produces two binaries in bin/:
bin/chetter — the MCP server / control planebin/chetterctl — the token management CLIAfter changing proto/ or any db/queries/*.sql, regenerate the protobuf
and sqlc code (this also refreshes the dialect facade):
make generate
See AGENTS.md for the full developer command reference.
MIT