Skip to main content
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

--no-mcp skips more than the server registration. The agent rule files and the /reticle command go with it, because all three only make sense once the tools are reachable.

When init runs, and when it asks for a hand

Your agent runs init 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 on localhost, so init does not write the localhost-only snippet or reticle.local.js. Connect only in development, for example only when !app.isPackaged. Keep reticle.local.js out of the package: electron-builder files: ["!reticle.local.js"], or Electron Forge packagerConfig.ignore: [/reticle\.local\.js$/].
  • A Vite config whose plugins is a call or the shorthand { plugins }. Init leaves the config unchanged and tells you where to add reticle().
When ~/.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:
Run from a workspace root with several apps, it refuses to guess, prints a command for each one, and exits 1:
Given --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:
In the two captures above, the punctuation that separates the two halves of the sentence is shown as ....

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.
Last modified on October 25, 2026