Self-hosted · your keys, your repos, your machine

Ship while you're
away from keyboard.

AFK dispatches an autonomous coding agent against your own repositories under hard, code-enforced guardrails — then hands you a reviewed draft pull request with before/after screenshots. Assign the work. Walk away. Come back to PRs.

No agent runs unsandboxed Hard cost cap per task Nothing merges itself
The loop

Four steps between a sentence
and a pull request.

You describe the change in plain language. AFK handles dispatch, isolation, verification and packaging — and stops the moment it hits a guardrail.

01

Assign

Write the task and pick a repo. AFK reads its .afk/config.yml to know the rules of engagement.

02

Dispatch

A fresh sandboxed container clones the repo. The agent runs the task on an isolated branch — never on your machine.

03

Enforce

Cost, iterations, files changed and diff size are checked on every step. Cross a limit and the run halts — clean.

04

Review

You get a PR with the diff, verification output and screenshots. You merge — or comment /afk to iterate. Nothing self-merges.

Trust, not vibes

Autonomous — with a
hand on the kill switch.

Every limit lives in version-controlled config and is enforced in code, not suggested to the model. This is what makes handing the keyboard over actually safe.

Cost ceiling
Token spend is metered live; the run stops dead at the cap.
$2.00
Blast radius
Max files changed and diff lines per task — no sprawling rewrites.
8 · 500
Iteration + time budget
Bounded agent loops and a wall-clock timeout per run.
10 · 20m
Path allow-list
Writes only where you permit; lockfiles & generated files ignored.
src/** tests/**
.afk/config.yml — version controlled, code-enforced
# the rules of engagement live in the repo
limits:
  maxCost: 2.00
  maxFilesChanged: 8
  maxDiffLines: 500
  maxIterations: 10

paths:
  allowed: ["src/**", "tests/**"]

model:
  default: moonshotai/kimi-k2.5

pr:
  labels: ["afkgnt"]  # opens a PR — never merges
The deliverable

You review a PR,
not a black box.

Every run comes back as a pull request you can actually reason about: the diff, the verification it ran (tests, lint, typecheck), and before/after screenshots rendered from a disposable preview of your app.

tests pass lint clean typecheck ok
Ready#218 · Migrate logger to structured JSON
afk/task-1785088 → main+128−545 files
Before/admin
After/admin
agent · moonshotai/kimi-k2.5$0.87 · 6 iters · 4m 12s
Runs on your terms

Self-hosted. Your keys.
Your machine.

AFK is a container you run. Point it at your model provider and your Git host — nothing leaves your infrastructure but the pull requests you asked for.

OpenRouter · bring your own key🛰 model moonshotai/kimi-k2.5 · swappable per repo🐳 Docker · disposable job containers🔀 opens GitHub pull requests🔐 gated by a single .env token
Self-hosted · single owner

Hand over the keyboard.

Paste your access token and step into the control room. The agents are already awake.