{"slug": "agentkindergarten-daycare-for-your-ai-coding-agents", "title": "AgentKindergarten – daycare for your AI coding agents", "summary": "AgentKindergarten is a new tool that streams a developer's entire coding environment to their phone, allowing AI coding agents to continue working on a home PC while the user is away. The self-hosted system uses a daemon on the dev machine and a relay server for secure remote access, with no storage of sessions or agent credentials. It targets vibe coders who want to maintain productivity during family or social obligations.", "body_md": "**Daycare for your AI coding agents — so you can log off without logging off.**\n\nDo you have a spouse who *nags* every time you vibe-code for 72 hours straight? Does a \"family picnic\" feel like a hostage negotiation between you and a perfectly good merge conflict? Do you need to peel yourself off the keyboard to go pick up your kid who's only been waiting at school for an hour?\n\nCongratulations: these are the ordinary, unbearable hardships of the modern vibe coder, and I built the cure.\n\n**AgentKindergarten** streams your entire dev environment straight to your pocket. Your agents keep grinding on your home PC while your *body* attends the picnic. You nod. You say \"mhm.\" You watch Claude refactor the auth layer from the potato-salad table — one thumb on your phone, one hand accepting a paper plate you did not ask for.\n\n- Kid wants a push on the swing? Push a commit instead. From the swing. That's multitasking.\n- In-law asking about your \"career plans\"? Turn the phone around — you are, at this very moment, supervising seven autonomous engineers from a lawn chair. They will stop asking.\n- Someone shouts \"burgers are ready\"? So is your dev server on\n`localhost:3000`\n\n— open it live through the tunnel before the ketchup comes out.\n\nYour agents never take a day off. Now you don't have to either — you just do it somewhere with grass.\n\n- 🧒\n**Students**— every agent session streamed live as a real terminal you can type into (yes, from the bench). - 🏫\n**Classroom**— one dashboard for every session on your machine, so you can ignore them all in one place. - 📺\n**Show & Tell**— dev servers your agents start (`localhost:3000`\n\n& friends) are auto-detected and openable live through the tunnel. From the car. In the pickup line. Engine running. - 📋\n**Roll call**— see at a glance which daemons and sessions are present — i.e. who's actually working while you're \"present.\" - 🪞\n**Same session, everywhere**— a session lives on your PC; terminal, browser, and phone are all just views of it. Start it at your desk, keep going from the in-laws' bathroom, come back to your desk. No fork, no handoff, no witnesses. - 🍎\n**Miss Clanker, the Teacher**— opt-in report cards for the whole class: each student's assignment, how it's going, and the receipts to prove it. She nags the agents so you don't have to — outsource the nagging at last. Graded by your own`claude`\n\nCLI, any agent CLI, or an OpenRouter key; watch her grade live, token bill and all. - 🖐️\n**Raised hands**— a student that stalls, errors out, or sits at a permission prompt raises its hand and web-pushes your phone — a*genuine*emergency you can use to excuse yourself from grace at Thanksgiving.\n\nI accept no liability for missed swing-pushes, cold burgers, or the slow dawning realization on your child's face.\n\n```\nPhone/Browser ──HTTPS/WSS──▶ Relay (your VPS) ◀──WSS (outbound)── Daemon (your PC)\n                               │                                     │\n                               └─ hosts web UI + auth                └─ wraps agent CLIs in PTYs,\n                                  pure pass-through, no storage         watches ports, proxies previews\n```\n\n- The\n**daemon** runs on your dev machine and dials*out*— no port-forwarding, no inbound firewall holes. - The\n**relay** is a tiny self-hosted server: it authenticates you and routes traffic. It is a**pure pass-through**— no database, no logs of your sessions, nothing persisted. - Your agent credentials never leave your machine. The daemon simply runs the CLIs you already have installed and logged in (your own Claude Code login, your own API keys). AgentKindergarten never touches agent auth tokens.\n\nThe daemon exposes one CLI: ** agk**. You run it on the machine your agents live on.\n\n```\nnpm install -g agentkindergarten          # installs the `agk` command\n\nagk init --relay wss://your.domain --token <PAIRING_TOKEN>\nagk start                                 # connects to the relay; leave it running\n```\n\nThen open your relay in a browser (or the PWA on your phone), log in with your\n**access token**, and you'll see this machine under 📋 Roll call. For always-on\n(survives reboots), see the Task Scheduler recipe in ** DEPLOY.md**.\n\nOne machine runs exactly one daemon.\n\n`agk start`\n\nrefuses to start a second one (pass`--force`\n\nto override). If something looks off, check`~/.agentkindergarten/daemon.out.log`\n\n.\n\n```\nagk claude\n```\n\nType this **instead of claude**. The session is born in the classroom\n\n*and*attached to your terminal at the same time — so your terminal, browser, and phone are three views of the one session. It never forks. All agent flags pass straight through:\n\n| You type | You get |\n|---|---|\n`agk claude` |\nfresh Claude session, mirrored everywhere |\n`agk claude -c` |\ncontinue this folder's latest conversation, mirrored |\n`agk claude --resume <id>` |\nresume an exact conversation, mirrored |\n`agk codex` |\nsame, for Codex |\n\nPress **Ctrl+]** to detach your terminal — the session keeps running in the\nclassroom; reattach any time with `agk attach`\n\n.\n\n| Command | What it does |\n|---|---|\n`agk start` |\nStart the daemon: connect to the relay and wait for students. Leave it running. |\n`agk claude [args…]` |\nEnroll + attach in one step. Start Claude in the classroom and in this terminal. (`agk codex` too.) |\n`agk run \"<cmd>\" --name <n>` |\nEnroll a command as a student without attaching (streams to the classroom only). Add `--attach` to also attach. |\n`agk attach <id-or-name>` |\nAttach this terminal to an existing student, tmux-style. Ctrl+] detaches without killing it. |\n`agk ls` |\nList the students currently in the classroom. |\n`agk rename <id-or-name> <new>` |\nRe-label a student — then `agk attach <new>` works. |\n`agk stop <id>` |\nSend a student home (kill the process); its scrollback stays in the classroom. |\n`agk close <id-or-name>` |\nRemove a student tile entirely (kills it first if still running). |\n`agk teacher [options]` |\nHire Miss Clanker: `--claude` grades with your own `claude -p` (no key), `--cli \"<cmd>\"` uses any agent CLI, `--key <k>` uses OpenRouter. `--off` fires her. |\n`agk watch [options]` |\nThe watchful teacher: raised-hand alerts for stalls/errors/permission prompts (`--stall <min>` , `--escalate on` for a Teacher one-liner). |\n`agk skills [install]` |\nList the bundled Claude Code skills; `install` copies them into `~/.claude/skills` . |\n`agk init [options]` |\n(Re)create the daemon config at `~/.agentkindergarten/config.json` . |\n\nSessions live on your PC as OS processes; closing a terminal or browser never\naffects them. Your agent's own conversation history persists on disk and is\nresumable (`agk claude -c`\n\n/ `--resume`\n\n).\n\nIf you use Claude Code, four skills ship with the package — install them once and control the classroom from inside a chat, great for \"I'm mid-conversation and want to continue on my phone\":\n\n```\nagk skills install      # copies them into ~/.claude/skills\n```\n\n(From a repo clone instead: copy the folders in [ packages/daemon/skills/](/rokrak1/agentkindergarten/blob/master/packages/daemon/skills) into\n\n`~/.claude/skills/`\n\n.)| In a Claude Code chat | What it does |\n|---|---|\n`/kindergarten-mirror [name]` |\nMirror this conversation: enrolls it with full history and opens a local attached terminal — phone + PC, same session, one command. |\n`/kindergarten-join` |\nHand this conversation off to the classroom (phone/web only). |\n`/kindergarten-set <name>` |\nName (or rename) this conversation's classroom session so `agk attach <name>` works. |\n`/kindergarten-detach` |\nPull this conversation back out of the classroom and continue it in a plain local terminal. |\n\n```\nagk teacher --claude      # hire Miss Clanker — grades with your own claude CLI, no key needed\nagk watch --stall 10      # a student that's silent for 10 min raises its hand 🖐️\n```\n\n**Report cards**(📋 Reports in the web UI) are opt-in: each student gets graded on what its assignment was, how it's going, and the receipts (transcript excerpts) to back it up. Watch the grading happen live — Miss Clanker's own token bill included.- Backends:\n`--claude`\n\n(your existing subscription, nothing leaves your machine),`--cli \"codex exec\"`\n\n(any agent CLI), or`--key <openrouter-key>`\n\n(transcripts go to OpenRouter — your call). **Raised hands** are on by default and fully local: stalls, errors, and permission prompts flag the student in the classroom; enable alerts on the phone to get a web-push.`agk watch --escalate on`\n\nadds a one-line Teacher summary of*why*the hand is up.\n\n**Nothing on your PC listens publicly.** The daemon dials *out* to your relay —\nno port-forwarding, no inbound firewall holes. Kill the daemon and your PC is a\nstranger to the internet again.\n\n**Two secrets:**\n\n**Access token**— your browser login. HTTPS-only, rate-limited, and it mints a signed cookie whose key is*derived from the token itself*— so**rotating the access token on the relay instantly logs everyone out.** That's your kill switch.**Pairing token**— authenticates the daemon to the relay. Lives in`~/.agentkindergarten/config.json`\n\n.\n\n**Anyone holding your access token can drive the machine the daemon runs on —\nthat is literally the product.** Use a long random token, always run the relay\nbehind HTTPS, and treat the token like an SSH key.\n\nBecause the daemon trusts the relay socket, a *compromised relay* is your real\nworst case. Two daemon-side controls defend against that — enforced on the\ndaemon, so they hold even if the relay/VPS is fully owned:\n\nFlag (on `agk init` ) |\nEffect |\n|---|---|\n`--lock-commands` |\nThe daemon spawns only its built-in presets (claude, codex, shell) — a hijacked relay can't launch arbitrary commands. |\n`--view-only` |\nThe daemon drops all terminal input coming from the relay — the web UI/phone can watch but can't type. Only a local `agk attach` can drive. |\n\nTwo more protections are **always on**: the preview tunnel can only reach ports\nyour own students opened (no reaching other localhost services like a database or\nmodel server), and a browser can only type into a session it explicitly attached.\n\nRecommended posture for a public or shared relay: `agk init --lock-commands --view-only`\n\n.\n\nEverything below runs on one machine — the same wiring as production, just with the relay on localhost.\n\n```\npnpm install\npnpm -r build\n\n# 1. relay (terminal 1)\n$env:AGK_INSECURE='1'; $env:AGK_ACCESS_TOKEN='pick-a-token'; $env:AGK_PAIRING_TOKEN='pick-another'\nnode packages/relay/dist/server.js\n\n# 2. daemon (terminal 2)\nnode packages/daemon/dist/cli.js init --relay ws://127.0.0.1:8787 --token pick-another\nnode packages/daemon/dist/cli.js start\n\n# 3. open http://127.0.0.1:8787/app/ — log in with pick-a-token,\n#    hit \"+ New student\", run `claude` (or anything), and watch it live.\n```\n\nStart a dev server inside a student (e.g. `pnpm dev`\n\n) and its port shows up under **📺 Show & Tell** within seconds — click \"open live\" to view the app through the tunnel.\n\nSee ** DEPLOY.md** — Docker Compose brings up the relay + Caddy (automatic Let's Encrypt HTTPS); the daemon on your PC connects with\n\n`agk init --relay wss://your.domain`\n\n. Includes a Windows Task Scheduler recipe so the daemon stays up while you're away. The relay image is verified to build and serve.\n\n```\npnpm install\npnpm -r build      # typecheck + bundle everything\npnpm -r test       # unit tests across daemon/relay/shared (incl. a real ConPTY spawn)\npnpm check         # biome lint + format\n```\n\nEnd-to-end suites (start relay + daemon first, as in \"Try it locally\" with token `test-access`\n\n/ `test-pair`\n\n):\n\n```\nnode packages/relay/scripts/e2e-m3.mjs      # auth + session streaming round-trip\nnode packages/relay/scripts/e2e-m4.mjs phase1   # multi-session + backlog (then kill/restart relay)\nnode packages/relay/scripts/e2e-m4.mjs phase2   # outage resilience\nnode packages/relay/scripts/e2e-m5.mjs      # port detection + attribution\nnode packages/relay/scripts/e2e-m6.mjs      # preview proxy\n```\n\n- Preview proxy: one app \"on stage\" at a time (pinned-port cookie), and no WebSocket/HMR passthrough yet — pages render, hot reload doesn't. See\n[SPEC.md](/rokrak1/agentkindergarten/blob/master/SPEC.md). - Multi-daemon is in the wire protocol but not fully in the UI yet; with several daemons on one relay, terminal-input channel routing assumes a single daemon.\n\n**v1 feature-complete.** Protocol, daemon, relay, classroom UI, port detection, preview proxy, and the Docker/Caddy deploy — all with unit + E2E coverage; the relay image builds and serves. Plus: tmux-style local `agk attach`\n\n, the `agk claude`\n\none-liner, session rename, Miss Clanker's report cards (`agk teacher`\n\n), raised-hand alerts with web push (`agk watch`\n\n), bundled Claude Code skills (`agk skills install`\n\n), and daemon-side security hardening (locked commands, view-only relay, preview port allowlist). See [SPEC.md](/rokrak1/agentkindergarten/blob/master/SPEC.md) for the protocol and [DEPLOY.md](/rokrak1/agentkindergarten/blob/master/DEPLOY.md) to ship it.\n\nMIT", "url": "https://wpnews.pro/news/agentkindergarten-daycare-for-your-ai-coding-agents", "canonical_source": "https://github.com/rokrak1/agentkindergarten", "published_at": "2026-07-11 10:08:05+00:00", "updated_at": "2026-07-11 10:35:18.624503+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents", "ai-tools", "ai-infrastructure"], "entities": ["AgentKindergarten", "Claude"], "alternates": {"html": "https://wpnews.pro/news/agentkindergarten-daycare-for-your-ai-coding-agents", "markdown": "https://wpnews.pro/news/agentkindergarten-daycare-for-your-ai-coding-agents.md", "text": "https://wpnews.pro/news/agentkindergarten-daycare-for-your-ai-coding-agents.txt", "jsonld": "https://wpnews.pro/news/agentkindergarten-daycare-for-your-ai-coding-agents.jsonld"}}