Show HN: Codemm – your coding agent writes exercises, a sandbox rejects bad ones Codemm, an open-source app from developer iignaite, launched in beta on its GitHub Releases page as a coding-practice tool in which the user's own Claude Code or Codex agent writes lessons and exercises while a Docker or wasmtime sandbox validates them. Codemm accepts an exercise only if the reference solution passes, the starter code fails, and the visible and hidden tests catch all 2–4 deliberately broken variants; the app launches the agent locally, never calls a model API, and never reads or stores credentials. The beta requires Docker Desktop plus Claude Code or Codex (Cursor is experimental), with a Docker-free fallback running interpreted languages such as Python through bundled wasmtime, and the public 1.0 release will be signed. Learn any language or framework one step at a time, with your own coding agent as the tutor. ▶ Watch the one-minute video with sound https://codemm.vercel.app/ watch · Read the story behind it Codemm is an open-source app for learning to code by practice. Your own coding agent Claude Code or Codex, with your own account writes the lessons and exercises. Codemm checks each exercise against its tests, grades your code in a sandbox, and tracks what you've mastered. Codemm launches your agent; it never calls a model API, and it never reads, stores or asks for credentials. It ships no languages: your agent sets up each language or framework the first time you need it, and Codemm checks that it works. 1. Connect your agent and let Codemm check this computer Docker installed, running, and the sandbox working . 2. Say what you want to learn. Your agent writes a roadmap of topics. You can approve it, ask for changes, or rename, reorder, add and remove topics yourself. 3. Agree to setup once. Your agent proposes an environment for the language a Dockerfile, a track.yaml and small probe programs . Codemm shows you the files and builds exactly those, only after you agree, and installs the track only if its probes pass with the network off. 4. Read the lesson for each topic, and keep notes beside it. 5. Do the activity. Your agent writes an exercise: a statement, starter code, a reference solution, 2–4 deliberately broken variants, and visible and hidden tests. Codemm accepts it only if the reference passes, the starter fails, and the tests catch every broken variant. You edit the code, use Try it for the visible tests, then Check . 6. Ask Codemm when you're stuck. It explains and hints; it doesn't edit your code. Skip means "come back later", never "mastered". What counts. Try it is never recorded. Check records an attempt, except for a check of the unedited starter or one that failed for a reason outside your code Docker stopped, for example . Mastery moves only on an exercise's first check, or when you beat your best score on it; re-checking a solved exercise adds nothing. Difficulty goes up to at most 3 after a first-try pass without assistance, and down to 1 after repeated failures. Beta builds are on the Releases page https://github.com/iignaite/Codemm/releases . Download the installer for your computer: - macOS Apple Silicon or Intel : the .dmg . Beta builds are unsigned: open the app once, then choose System Settings, Privacy & Security, Open Anyway. - Windows x64 : the installer. Beta builds are unsigned: in the SmartScreen prompt, choose More info, then Run anyway. You also need: - Docker Desktop , running. On Windows, use the WSL 2 backend with Linux containers. No Docker? See below. - Claude Code or Codex , installed and signed in. Cursor is experimental. The app bundles Codemm, so you don't need Node.js, npm or a terminal. The public 1.0 will be signed. Installing Docker Desktop needs admin rights, which school and work computers often don't give. Without Docker, the desktop app can still run io practice programs that read input and print output in interpreted languages that have a WebAssembly WASI build, such as Python. It bundles wasmtime https://wasmtime.dev , a sandbox that runs as your own user, with no admin rights. In Check this computer, choose Continue without Docker . For everything else, such as unit tests, frameworks and compiled languages, ask whoever manages the computer to install Docker Desktop once Docker's terms https://docs.docker.com/subscription/desktop-license/ list education among free uses , or use a computer that has Docker. Codemm also works directly from your agent in a terminal. This needs Node.js 22 or newer and Docker or wasmtime https://wasmtime.dev 50 on PATH , for the practice above , and installs from source Codemm isn't on npm : git clone https://github.com/iignaite/Codemm.git cd Codemm && npm ci && npm run build && npm link Check that Docker and the sandbox work: codemm doctor Then, in an empty project folder: codemm init This sets up Claude Code, Codex and Cursor; use --host claude repeatable to pick specific ones. It adds an MCP server entry for each agent, a Codemm section in AGENTS.md , an author subagent and the Claude Code practice hook. Existing config is merged, never replaced. Open the folder in your agent and say what you want to learn. The practice hook is Claude Code-only, and a practice aid rather than a lock. In Claude Code it blocks the Edit , Write , MultiEdit and NotebookEdit tools on files under exercises/ unless you run codemm assist on assisted attempts count for less . Writes through the shell aren't blocked. In Codex and Cursor, the instructions in AGENTS.md ask the agent not to edit your files, but nothing enforces it. Note Codex loads .codex/config.toml only for projects you've marked as trusted, and asks before each Codemm tool call. To skip those prompts, add default tools approval mode = "approve" under mcp servers.codemm ; that also skips your approval for save track , which runs a network build. | Command | What it does | |---|---| | codemm init --host claude\|codex\|cursor | Set up this project for your agent s | | codemm doctor --fix | Check Docker and prove the sandbox has no network | | codemm status | Your progress and the next step | | codemm test exercise | Run the visible tests not recorded | | codemm check exercise | Run every test and record the attempt | | codemm skip