NAME — tiny · Claude Code & Codex sessions on your own Kubernetes
tiny runs Claude Code and Codex as Kubernetes workloads. Label a GitHub issue and a pull request comes back. You can close the laptop; the session keeps working, and there is no server of ours running next to it.
File a GitHub issue and add the tiny label. That is the whole ceremony. Anyone on the team can do it from the GitHub UI.
An Actions job on the in-cluster runner pipes the issue into the root session's inbox. It usually takes about five seconds.
The root session plans, spawns specialists in the right toolchains, and raises a ✳ when a decision needs a human. Overnight is fine; we test session recovery by killing pods mid-task.
Agents hold no credentials. Finished branches leave as git bundles through the outbox, and a short-lived courier token opens the pull request and comments on your issue.
PROOF — this loop produced a real pull request in our demo repo: github.com/tiny-systems/seedling
.mcp.json. tiny does not wrap or proxy the agent, so new agent features work without us doing anything.golang:1.26, buildah, your own dev image: an init container injects the agent into whatever you name. You do not maintain a special image./workspace/uploads/.--agent codex runs OpenAI’s Codex. The fleet screen, the gate and resume behave the same for both.claude --model / codex -m underneath). Also a field on the options form.[b] on the fleet screen, or tiny broadcast from cron and CI.Pull-through image cache in your namespace. golang:1.26 downloads once instead of once per session, which also keeps you under docker.io rate limits. An optional DaemonSet installs its CA on the nodes.
S3-compatible store next to the sessions, for things too big for git: builds, screenshots, datasets.
In-cluster Actions runner, so delivery jobs can reach the sessions. A labeled issue lands in an inbox in about five seconds.
Recorded against a real cluster, including the kubectl delete pod. Tapes in the repo.
The session lives in the cluster, not on your machine. Close the lid and the agent keeps working; attach from any terminal later and it is where you left it.
tiny runs the real CLI, so you sign in the way you do on your laptop: Claude Pro/Max or ChatGPT Plus. Sessions run on the flat plan you already pay for instead of a metered API key.
When a session hits your plan's usage limit, its fleet row shows ⏸ resuming 5:20am, and it resumes then on its own.
The fleet screen shows who is waiting on you. You can answer inline, message a session without attaching, or drop a file onto its row.
The second agent took an afternoon. The two bugs it surfaced were nowhere near the model.
Job tokens die with their jobs and deploy keys sprawl, so our agents stopped pushing entirely.
Kubernetes already replaces dead pods. Why were we running a manager, with a standing secrets-reader Role, to do it again?
One binary, one wizard, no pods until your first session.
$ brew install tiny-systems/tap/tiny $ tiny setup # cluster · runtime · claude token $ tiny new "make the tests not lie"
tiny pins one cluster per machine, chosen with an arrow-key picker on every start — enter‑enter repeats yesterday's choice. Read the full manual →
tiny is MIT-licensed. We are early, and stars are the main way people find small projects like this one — if you want this to keep growing, a star genuinely helps.