waniwani with no command is dev. The scaffolded package.json maps check, dev, build and start to npm scripts, so npm run dev and waniwani dev are the same thing.
init writes files and stops there; its prompts and flags are on the Quickstart. Every other command runs the same four stages before doing its own work.
The four stages
- scan walks the folder and turns convention into a manifest.
- check validates structure from the filesystem, then imports every server-safe module for real.
- codegen resolves the distribution template at a pinned commit, copies its plumbing byte for byte, generates registration and view entries from the manifest, and copies your source under
src/app/. - run hands the result to the framework’s
dev,buildorstart, with the output rewritten in Waniwani’s voice.
.waniwani/ is disposable and safe to delete. Keep it out of git, the way .next/ is; init writes that line into .gitignore for you.
dev
dev watches the folder, mirrors changes into .waniwani/, and leaves nodemon and Vite HMR to do the rest. An edit to a tool reaches the MCP endpoint in about a second. The MCP endpoint is /mcp on the dev port, and the dev server’s root serves the framework’s own page for calling tools without a chat client.
To reach the dev server from ChatGPT or Claude, expose it with a tunnel, or bind the repo to a hosted agent with @waniwani/cli and run against the hosted playground.
What the build check catches
Errors that would otherwise surface as a 500 at request time, or as a widget that silently never renders:check reads the app’s .env before importing anything, for the same reason dev does: a flow whose store comes from WANIWANI_API_KEY would otherwise fail its own check over a variable sitting in the file next to it.
Environment variables the CLI reads
Variables for the app itself, such as
WANIWANI_API_KEY, go in the app’s .env; see Deploy.