This guide is meant to be read by your AI coding agent.
Tell your coding agent to look at this page and ask it to help you with Fimo.
Tell your coding agent to look at this page and ask it to help you with Fimo.
fimo CLI. This page is the source of truth for getting set up. Work through the path that matches the user’s starting point.
The examples use fimo@latest. If the initiating prompt supplies a different exact CLI selector (for example npx fimo@staging), preserve that selector for every fimo command in this flow.
1. Choose the onboarding path
Match the user’s request to one of three starting points. A project ID alone does not choose the path: Fimo Studio can create a brand-new project and hand you its ID before any code exists — that is still the create-new path.- Create a new Fimo project: run
fimo init --project-id <projectId>when Fimo Studio supplied an ID. When starting from zero, infer a sensible directory name from the request (usemy-siteif there is no useful name) and runfimo init <dir>. Do not stop to ask what the site should be — initialize immediately. If the request already describes the site, build from that description; if not, initialize anyway and ask after the first preview. Finish this path with the first hosted preview in step 5. - Open an existing Fimo project: use its project ID to link and clone the existing code, then inspect it. If the ID is missing, ask for it. Setting up an existing project does not authorize a deployment.
- Bring an external website or repository into Fimo: website migration is still in development. Load the
fimo-migrationskill and follow its intake, QA, and final owner-approved deployment rules. If the source URL, repository, or export is missing, ask for it. Do not treat migration as fresh-project scaffolding.
fimo init uses Fimo’s current scaffold. In an existing Fimo project, keep its framework: detect it with fimo describe --json and load only its matching fimo-code reference. Do not invent a framework flag.
When no framework is specified for a new project, the default scaffold is Next.js App Router. If the user’s request explicitly names React Router, Vite, Astro, or SvelteKit, pass --framework react-router, --framework vite, --framework astro, or --framework sveltekit during initialization. Existing projects keep their detected framework.
2. Install the CLI and sign in
Thefimo CLI is published on npm. For one-off setup you can run it with npx:
You cannot complete sign-in yourself.fimo loginopens a browser loopback flow — ask the user to finish signing in there.fimo init(next step) will also trigger this automatically if there is no session yet. Once signed in,fimo whoamishows the active user and organization; switch organizations withfimo orgs switch.
3. Set up the project
If the user gave you a project ID, set it up with one command — replace<projectId> with the ID they gave you:
AGENTS.md and CLAUDE.md.
To start a brand-new project instead, infer a directory name and pass it to init:
For a new project,fimo initis the single onboarding entry point (there is no separatefimo installorfimo create). In a non-interactive shell, make installation and skill setup explicit — for examplenpx fimo@latest init my-site -y --install --skills --agents=<agent-id>, replacing<agent-id>with the current coding agent.
fimo init generates .fimo/project.json to link the local directory to the remote project. Treat it as read-only. Older projects may still use the legacy .fimo.settings.json link file.
Choose the primary locale before building
Treat language as part of new-project setup. If the initiating request names one or more languages, load thefimo-cli locales reference after init and use
its typed lifecycle commands to configure the exact locale set and default.
Never edit i18n.defaultLocale or i18n.locales directly in a linked project.
Then update the framework-native locale boundary and document language default.
The new shells keep the default locale unprefixed, so do not add /en, a
language picker, or a global path-prefix strategy unless the requested site
needs it. If the request has no locale signal, keep the shell’s en default and
tell the user. For an existing project, preserve its current URL and locale
behavior; see Locales.
4. Load the project context and skills
fimo init does not copy rich skills into the project. It can install one small global fimo bootstrap skill, which tells your agent to load the real skills from the CLI when needed.
- Read the project rules:
AGENTS.md, plus your tool’s variant if present (CLAUDE.md,.cursor/rules/fimo.mdc,.windsurfrules,GEMINI.md). - Load
fimo-codeon demand before writing schemas, entries, forms,t()labels, orfimo-reactcomponents. It resolves from thefimopackage installed in the project, so the guidance matches the project’s runtime. - Load
fimo-clion demand for CLI workflows such as content operations, local development, and deploys. It comes from the CLI you are running.
--ref <doc> to load a skill’s reference document. Always fetch skills through the CLI rather than reading a cached project copy. The project rule files came into existence mid-session, so your harness may not have auto-loaded them — read them before generating code.
To set up another AI tool later:
5. Create the first hosted preview (new projects)
On the create-new path, setup is not complete whenfimo init exits. Unless the user explicitly said not to deploy, create the project’s single first hosted preview after initialization and the context-loading steps above succeed — do not wait for a second request:
fimo deploy validates the project, commits pending changes, pushes, and syncs the preview sandbox; -m supplies the commit message because you run non-interactively. Return data.studio_url to the user. Run fimo preview url --json only when the hosted site URL itself is needed.
If the initiating request described a concrete site, build a minimal meaningful first screen before this single deploy. If it did not, deploy the scaffolded site as-is and then ask what the user wants to build.
This deploy creates a preview only — never add --publish. Publishing, and every deploy after this first one, requires the user’s explicit request. Opening an existing project and migrating do not auto-deploy merely because setup completed.
Choose the public URL before first publish
After the automatic first hosted preview on the create-new path, offer a cleaner free*.fimo.site URL before the first public publish if there is no custom domain and the default slug still looks generated or was never explicitly chosen. The free URL needs no DNS. Skip the offer if the user already chose the slug, attached a custom domain, or declined.
Run fimo domains suggest-default --base "<brand>" --json, show the candidates, and ask the user to choose. A slug change determines the public URL, so claim nothing without explicit confirmation. After the user selects one, run fimo domains rename-default <slug> or fimo domains suggest-default --pick <slug>. Choosing the slug does not publish the site; the URL starts resolving after the first successful publish. Custom domains use the Pay as you go (or higher) workflow.
6. Quick reference
The full, current detail lives in the skills above — this is just a map. After first-time setup, work with the user against a local dev server (pnpm dev / npm run dev / yarn dev / bun dev — match the lockfile) and iterate. Further deploys are on-demand: use plain fimo deploy for a hosted preview, and --publish only when the user explicitly wants to go live.
Run any command with
--help for its flags, and fimo --help for the full surface.