Get started
Generating a project takes one command. This page covers what the machine needs first, what the CLI asks, and what arrives.
Check the machine
Prumo needs Node 22.23.4 or later and pnpm 10.26 or later, on macOS, Linux or Windows. On Windows it runs natively: the project lives in a Windows folder and the Windows Node and pnpm run it. Inside a WSL distribution, with its own Node, pnpm and Docker, Prumo is on Linux, which is supported though not tested on WSL specifically; Windows tools working on a project inside the WSL filesystem are not supported. Anything with an API also needs Docker, because the development database runs there: on Windows, Docker Desktop with its WSL2 backend, set to Linux containers. This command checks all of it and names whatever is missing.
npx @stjoseph/prumo doctorGenerate the project
It asks what to build, writes the project into my-app/, runs git init and installs. Nothing is committed, so the first commit is yours and its diff shows everything Prumo wrote.
npx @stjoseph/prumo new my-appAnswer without a terminal
Every question has a flag, and without a terminal every question the answers raise needs one: a missing flag is an error. More than one type makes a workspace; a single type needs --alone or --monorepo to say how it is laid out.
npx @stjoseph/prumo new my-app --types api,web --single-tenant --single-language --languages en --no-mcp --sign-in password --email --no-socialCreate the database
Inside a project with an API, this creates the development database in Docker, writes its URL into .env, and runs the migrations unless --skip-migrate is passed. Once the database exists, prumo clean removes the setup the project needed only once.
npx @stjoseph/prumo db
The flags
| Flag | What it answers |
|---|---|
| --types api,web,mobile | What the project contains. More than one type makes a workspace; web:vite, web:next or web:astro chooses the web framework, Vite by default |
| --alone --monorepo | How a single type is laid out |
| --multi-tenant --single-tenant | With an api, web or mobile: whether the application serves several tenants. Multi-tenant ships the multi-tenancy conventions; the generated code itself is not tenant-aware yet |
| --single-language --multi-language | Whether the project speaks one language, its words written where they are shown, or several, from messages: one file per language, checked against a base, so another is a file and its translation |
| --languages en,pt-BR,es-419 | The languages: exactly one with --single-language, or with --multi-language one or more, the base first. Prumo translates its templates into these three |
| --mcp --no-mcp | With an api and a web: whether AI assistants reach the API through MCP, signed in as the user |
| --sign-in password,email-code,phone-code | With an api: how people sign in, one or more: a password, or a 6-digit code sent by email or by text, the first of which creates the account |
| --email --no-email | With an api and password: email verification and password reset, by a 6-digit code sent through the Mailer port, which writes to the log until you give it a provider |
| --social google,apple --no-social | With an api and a web or mobile: sign-in with Google, Apple, or both |
| --skip-install | Stops after writing the files |
What landed
| File | What it is |
|---|---|
| .prumo/ | The conventions, in seventeen areas. Only the areas the answers call for are copied |
| .prumo/INDEX.md | One line per document. Generated by the tool, and safe to regenerate |
| .context/INDEX.md | The project's own rules, which win over .prumo/. Written empty; the assistant adds a rule when the developer states one |
| AGENTS.md | The pointer into .context/ and .prumo/, read by Codex, Cursor, Copilot, Gemini CLI and others |
| CLAUDE.md | An @AGENTS.md import, for Claude Code |