Team Ok
Write a spec.
Core trick
Runs Claude Code inside a Docker container against a markdown spec, so the generated app image contains only the app.
Description
Write a spec. Get a running app.
ok serve spec.md
Software engineering is moving up an abstraction layer — from code to prose. The spec becomes the source; code becomes the build artifact.
ok is a CLI that turns a markdown specification into a containerized web app. Describe what you want in plain English*, and ok handles the rest: code generation runs inside Docker via Claude Code, producing a clean image with nothing but your app.
*Or any written language you prefer.
README excerpt
# ok Spec in, app out. ``` ok serve spec.md ``` Software engineering is moving up an abstraction layer — from code to prose. The spec becomes the source; code becomes the build artifact. `ok` is a CLI that turns a markdown specification into a running app. Describe what you want in plain English*, and `ok` handles the rest: code generation via [Claude Code](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview) produces a clean app from your spec. Run it locally in Docker or in a cloud sandbox. <sub>*Or any written language you prefer.</sub> ## Quick start ```bash npm install -g okcmd ``` Set your API key: ```bash echo "ANTHROPIC_API_KEY=sk-ant-..." > .env ``` Write a spec: ```markdown # Counter App A single-page app with a number displayed in large text and two buttons: increment (+1) and decrement (-1). The count persists across page reloads using localStorage. ``` Build and run: ```bash ok serve counter.md ``` That's it. Open `http://localhost:3000`. ## How it works ``` spec.md → ok build → app artifact → ok run → accessible URL ``` `ok` supports pluggable runtimes. The default is Docker (local containers); you can also use cloud sandbox providers like Daytona. ### Docker (default) 1. **`ok build`** stages your spec into a temporary build context and runs `docker build` 2. Inside Docker, Claude Code reads your spec and generates the entire app — source files, dependencies, startup script 3. A multi-stage build produces a clean `node:l