reticle init is the one command a person runs before anything else. It inspects the directory it is standing in, works out the framework, and writes every piece of wiring Reticle needs: the MCP server registration, the agent rule files, the dev dependencies, .reticle.json, and the bundler plugin.
Flags
When init runs, and when it asks for a hand
Your agent runsinit only when you agree. The first reticle_session call in a project that was never wired changes no file. It offers the zero-install lease, which checks the running app with nothing installed. reticle init, reticle connect and a setup request from you still wire the app.
Some apps get a ⚠ manual step instead of an edit:
- An Electron app with a static
index.html. A packaged renderer can also run onlocalhost, so init does not write the localhost-only snippet orreticle.local.js. Connect only in development, for example only when!app.isPackaged. Keepreticle.local.jsout of the package: electron-builderfiles: ["!reticle.local.js"], or Electron ForgepackagerConfig.ignore: [/reticle\.local\.js$/]. - A Vite config whose
pluginsis a call or the shorthand{ plugins }. Init leaves the config unchanged and tells you where to addreticle().
~/.reticle cannot be written (a sandboxed agent host), init writes the dev server log to .reticle/logs/ in the project and prints where it is.
What it prints
A plan, one line per step, each with a status mark:✓ written, · already in place or left alone, ⚠ needs a hand, – deliberately skipped by a flag, ℹ done, but incomplete in a way that matters. Captured from a real --dry-run inside apps/bench-app, trimmed to one row of each kind:
init pins the packages to the version of Reticle you are running. When the codex binary is on your PATH, the Codex row is not a hand edit: it reads [✓] MCP server (Codex CLI) and registers through codex mcp add reticle -- npx @reticlehq/server mcp.
Below the plan it also prints the two things that actually finish the install: restart your agent so it re-reads its MCP server list, then run npx @reticlehq/server status to confirm the app connected. A successful run ends with one more line, Tell us what you are building: https://discord.gg/BwAbzv9ZRz. A dry run and a failed run do not print it.
With --no-mcp, the whole MCP and rules group collapses into one skipped line:
1:
--app, it writes that app’s files and starts nothing: no daemon and no dev server, since a monorepo app’s dev server is often run from the root. Add --start to boot it the way a plain init does. It says which directory it moved to before printing the plan:
....
Exit codes
An unknown flag is rejected by name:
reticle init --bogus prints unknown argument '--bogus', then the short usage (reticle --help), and exits 1.
Worked example
The install, step by step
What each step writes and how to read the five status marks.