fimo 0.11.0-staging.5 → 0.11.0-staging.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/assets/agent-templates/content-translator/GOAL.md +2 -2
  2. package/assets/agent-templates/seo-audit/config.yaml +1 -1
  3. package/assets/skills/fimo/SKILL.md +1 -0
  4. package/assets/skills/fimo-cli/SKILL.md +6 -4
  5. package/assets/skills/fimo-cli/references/agents.md +63 -18
  6. package/assets/skills/fimo-cli/references/credits.md +1 -1
  7. package/assets/skills/fimo-cli/references/deploy.md +1 -1
  8. package/assets/skills/fimo-cli/references/describe.md +1 -1
  9. package/assets/skills/fimo-cli/references/history.md +1 -1
  10. package/assets/skills/fimo-cli/references/init.md +4 -2
  11. package/assets/skills/fimo-cli/references/integrations/firecrawl.md +12 -3
  12. package/assets/skills/fimo-cli/references/integrations.md +15 -3
  13. package/assets/skills/fimo-cli/references/invite.md +1 -1
  14. package/assets/skills/fimo-cli/references/labels.md +1 -1
  15. package/assets/skills/fimo-cli/references/locales.md +4 -4
  16. package/assets/skills/fimo-cli/references/mcp.md +85 -0
  17. package/assets/skills/fimo-cli/references/project-vars-and-secrets.md +1 -1
  18. package/assets/skills/fimo-cli/references/projects.md +7 -7
  19. package/assets/skills/fimo-code/references/labels.md +2 -2
  20. package/assets/skills/fimo-code/references/locales.md +5 -5
  21. package/assets/skills/fimo-code/references/setup-plain-vite.md +4 -4
  22. package/assets/skills/fimo-code/references/setup-react-router.md +5 -5
  23. package/assets/skills/fimo-code/references/ui.md +1 -1
  24. package/assets/skills/fimo-migration/references/workflow.md +1 -1
  25. package/assets/skills/fimo-migration/scripts/build-canonical-manifest.mjs +32 -3
  26. package/dist/build/vite/index.d.ts +3 -3
  27. package/dist/build/vite/plugins/fimo-config.d.ts +2 -2
  28. package/dist/build/vite/plugins/fimo-config.js +5 -5
  29. package/dist/build/vite/plugins/robots.d.ts +1 -1
  30. package/dist/build/vite/plugins/robots.js +3 -3
  31. package/dist/build/vite/plugins/server-config.js +1 -1
  32. package/dist/build/vite/plugins/sitemap.js +2 -2
  33. package/dist/build/vite/plugins/translations.js +14 -10
  34. package/dist/cli/bundle.json +1 -1
  35. package/dist/cli/index.js +131 -117
  36. package/dist/runtime/app/prefetch.d.ts +1 -1
  37. package/dist/runtime/app/prefetch.js +2 -2
  38. package/dist/runtime/paths/get-fimo-paths.d.ts +1 -1
  39. package/dist/runtime/paths/get-fimo-paths.js +2 -2
  40. package/dist/runtime/paths/types.d.ts +1 -1
  41. package/dist/runtime/project-layout.d.ts +14 -0
  42. package/dist/runtime/project-layout.js +57 -0
  43. package/dist/runtime/seo/resolver.d.ts +1 -1
  44. package/dist/runtime/seo/resolver.js +1 -1
  45. package/dist/runtime/shared/fimo-config.server.d.ts +2 -0
  46. package/dist/runtime/shared/fimo-config.server.js +17 -4
  47. package/dist/runtime/templates.d.ts +4 -4
  48. package/dist/runtime/templates.js +11 -6
  49. package/dist/scripts/validate-route-metadata.js +8 -6
  50. package/package.json +7 -1
  51. package/templates/react-router/AGENTS.md +1 -1
  52. package/templates/react-router/package.json +1 -1
  53. /package/templates/react-router/{fimo-config.json → .fimo/config.json} +0 -0
@@ -1,7 +1,7 @@
1
1
  # Content translator
2
2
 
3
3
  Translate CMS entries and DB-backed labels from the project's default
4
- locale into every non-default locale declared in `fimo-config.json`.
4
+ locale into every non-default locale declared in `.fimo/config.json`.
5
5
  Writes go through Fimo's content and label APIs. Do not create locale
6
6
  JSON files or put translated values in source code.
7
7
 
@@ -9,7 +9,7 @@ JSON files or put translated values in source code.
9
9
 
10
10
  - The list of CMS entries that have a non-empty default-locale field
11
11
  but an empty translation for any non-default locale.
12
- - The configured target locales (read from `fimo-config.json`).
12
+ - The configured target locales (read from `.fimo/config.json`).
13
13
 
14
14
  ## What to do
15
15
 
@@ -7,7 +7,7 @@ data_sources:
7
7
  - main
8
8
 
9
9
  # Manual-only in v1. Add a schedule trigger when you're ready to run
10
- # this nightly — make sure fimo.config.json has
10
+ # this nightly — make sure .fimo/config.json has
11
11
  # `agents.notifications.email_recipients` set before activating.
12
12
  triggers:
13
13
  - type: manual
@@ -25,6 +25,7 @@ Pick by task:
25
25
 
26
26
  - Writing code — schema-driven JSX, schemas/forms JSON, `t()` labels, `fimo/ui` media → `fimo-code`
27
27
  - CLI commands and workflows — push, deploy, sync, labels, domains, analytics → `fimo-cli`
28
+ - Project MCP setup — configure `fimo mcp` for a local AI client → `fimo-cli` (`references/mcp.md`)
28
29
  - The Fimo Studio dashboard / web app UI → `fimo-studio`
29
30
  - Migrating an existing site into Fimo → `fimo-migration`
30
31
 
@@ -6,6 +6,7 @@ description: >-
6
6
  (schemas, entries, forms, media, labels/locales), deploy a site, manage
7
7
  custom domains, configure outbound webhooks and event-driven integrations,
8
8
  check site traffic/analytics, inspect or restore project history, invite collaborators, inspect AI credits,
9
+ connect an AI coding client to a Fimo project through MCP,
9
10
  report a failing or slow Fimo API, rejected documented argument,
10
11
  undocumented workaround, missing capability that blocks work, forces a
11
12
  fragile or heavily manual workaround, or would materially accelerate a
@@ -43,9 +44,9 @@ Branch on `error.code`, never on `error.message`. The envelope shape is versione
43
44
 
44
45
  For shell composition use plain pretty mode (`cd $(fimo …)`); for structured parsing use `--json`. JSON mode disables interactive prompts — commands that need a confirmation will fail fast with `NON_INTERACTIVE_REFUSAL` unless every required arg is on the command line (`--yes`, `--org`, etc.).
45
46
 
46
- ## Critical: `.fimo.settings.json` is the project link
47
+ ## Critical: `.fimo/project.json` is the project link
47
48
 
48
- A Fimo project is identified by `.fimo.settings.json` at its root, written once by `fimo init`. This file connects the local directory to the remote Fimo project. **Never edit it manually.** Most CLI commands look at this file in the cwd to know which project they operate on.
49
+ A Fimo project is identified by `.fimo/project.json`, written by `fimo init`. This file connects the local directory to the remote Fimo project. **Never edit it manually.** Most CLI commands find it by walking up from the cwd.
49
50
 
50
51
  ## Critical: commands target the env of the current git branch
51
52
 
@@ -70,7 +71,7 @@ npx fimo@latest deploy --publish # ON-DEMAND: publish live (only w
70
71
 
71
72
  The working loop is local: run the app with the project's package-manager `dev` script (`pnpm dev` / `npm run dev` / `yarn dev` / `bun dev` — match the lockfile), ask the developer what they want, edit, and iterate against the live localhost server. `fimo deploy` is **not** a required final step — reach for it only when the developer wants a hosted preview, a shareable link, or to go live, and only on their signal (see `references/deploy.md`).
72
73
 
73
- `fimo validate` is the single entrypoint for "prove this project is ready" — it covers schema/form codegen, route metadata checks, lint, and missing label checks for `i18n.defaultLocale` from `fimo-config.json` (fallback: `en`). Use `fimo labels set` / `set-many` to create or update label values in the DB. The underlying phases are also available individually under the hidden `fimo scripts` namespace for advanced/debug use.
74
+ `fimo validate` is the single entrypoint for "prove this project is ready" — it covers schema/form codegen, route metadata checks, lint, and missing label checks for `i18n.defaultLocale` from `.fimo/config.json` (fallback: `en`). Use `fimo labels set` / `set-many` to create or update label values in the DB. The underlying phases are also available individually under the hidden `fimo scripts` namespace for advanced/debug use.
74
75
 
75
76
  ## Decision Tree
76
77
 
@@ -104,6 +105,7 @@ Load the matching reference when the user's request fires its trigger. Recipes t
104
105
  - "Login / log out / who am I / switch organization" → `references/account.md` — note: switching **org** is `fimo orgs switch`; bare `fimo switch` switches **env** (see `references/branches.md`)
105
106
  - "Create / scaffold / run / validate an agent / agent bundle / wire or enable its triggers / list agent templates / view agent runs, reports, or logs (`fimo agents *`)" → `references/agents.md`
106
107
  - "Install Fimo for my AI tool / fimo skills install / set up Claude Code or Cursor for Fimo / add an agent to this project" → `references/agent-setup.md`
108
+ - "Connect an AI coding client to a Fimo project through MCP / configure `fimo mcp` / expose Fimo tools to a local MCP client" → `references/mcp.md`
107
109
  - "Refresh / update installed Fimo skills / fimo skills sync / agent missing the latest fimo conventions" → `references/agent-setup.md`
108
110
  - "Report a Fimo problem or blocking feature request / contact Fimo support / a Fimo API or command keeps failing / a documented argument is rejected / a supported operation needs an undocumented workaround / a Fimo API is abnormally slow / a confirmed missing capability blocks completion or forces a fragile or heavily manual workaround" → `references/support.md`
109
111
  - "Regenerate rule files / I edited AGENTS.md / fimo rules sync" → `references/agent-setup.md`
@@ -128,7 +130,7 @@ These fire at specific moments in the project lifecycle. **Surface them proactiv
128
130
 
129
131
  ## Anti-Patterns
130
132
 
131
- - **Editing `.fimo.settings.json`** — read-only; it's the link between local and remote project. Treat as a generated file.
133
+ - **Editing `.fimo/project.json`** — read-only; it's the link between local and remote project. Treat as a generated file.
132
134
  - **Treating `fimo deploy` as the working loop or a required final step** — the loop is local (`pnpm dev` etc.). Deploy commits + pushes + round-trips the sandbox; it's for hosted previews / going live, on-demand. Iterate locally and deploy at logical breakpoints. See `references/deploy.md`.
133
135
  - **Deploying without the developer asking or confirming** — offer, then wait for their yes. Don't auto-deploy after finishing an edit.
134
136
  - **Running `fimo deploy` just to get a fresh preview URL** — that's a commit + push + sandbox sync for what should be a sub-second read. Use `fimo preview url` instead. See `references/preview.md`.
@@ -2,21 +2,21 @@
2
2
 
3
3
  > **Run via `npx fimo@latest <command>`** — always the latest CLI, no install needed.
4
4
 
5
- The `fimo agents` namespace authors and operates **agent bundles** — multi-file definitions under `<project>/agents/<name>/` (a `config.yaml`, a `GOAL.md`, optional `capabilities.yaml`, etc.).
5
+ The `fimo agents` namespace authors and operates **agent bundles** — multi-file definitions under `<project>/.fimo/agents/<name>/` (a `config.yaml`, a `GOAL.md`, optional `capabilities.yaml`, etc.). Legacy projects keep using root `agents/<name>/`.
6
6
 
7
7
  ## Mental model
8
8
 
9
9
  The namespace splits cleanly in two:
10
10
 
11
- - **Bundle authoring** — `create`, `list-templates`, `list`, `validate`, `secrets add/remove/list`. Local config editing, no API call except the project-level validation path. Operates on the files under `agents/<name>/`.
12
- - **Cloud ops** — `run`, `runs`, `report`, `logs`. Env-aware, talk to the server. Default `--env` is `main`; `--project` defaults to the `projectId` in `.fimo.settings.json`.
11
+ - **Bundle authoring** — `create`, `list-templates`, `list`, `validate`, `secrets add/remove/list`. Local config editing, no API call except the project-level validation path. Operates on the files under `.fimo/agents/<name>/` (or root `agents/<name>/` for legacy projects).
12
+ - **Cloud ops** — `run`, `runs`, `report`, `logs`. Env-aware, talk to the server. Default `--env` is `main`; `--project` defaults to the linked project in `.fimo/project.json` or legacy `.fimo.settings.json`.
13
13
 
14
- The bundle lives in **git** (`agents/<name>/`), not the database. The DB only mirrors what `config.yaml` declares on `main` (which triggers are wired) plus **run sessions**. So the bundle reaches the server through `fimo deploy` — and that push to `main` is also what wires its triggers. There is no activate command: deploying IS the enablement act, and removing a trigger from `config.yaml` tears it down on the next deploy.
14
+ The bundle lives in **git** (`.fimo/agents/<name>/`, or legacy root `agents/<name>/`), not the database. The DB only mirrors what `config.yaml` declares on `main` (which triggers are wired) plus **run sessions**. So the bundle reaches the server through `fimo deploy` — and that push to `main` is also what wires its triggers. There is no activate command: deploying IS the enablement act, and removing a trigger from `config.yaml` tears it down on the next deploy.
15
15
 
16
16
  Typical flow:
17
17
 
18
18
  ```
19
- fimo agents create <name> # scaffold agents/<name>/ from a template (local)
19
+ fimo agents create <name> # scaffold .fimo/agents/<name>/ from a template (local)
20
20
  fimo agents secrets add <name> FIRECRAWL_API_KEY # request a project secret in config.yaml
21
21
  fimo secrets add FIRECRAWL_API_KEY --stdin # store the hidden value in Fimo
22
22
  fimo agents validate <name> # parse + policy + composition + requested secrets
@@ -41,21 +41,66 @@ fimo agents secrets remove <name> <KEY> [-C <dir>]
41
41
  ```
42
42
 
43
43
  - **`list-templates`** — list the bundled starter templates with the first line of each template's `GOAL.md` as a summary. Ships with the CLI binary; no API call. The five bundled templates are `_default`, `seo-audit`, `content-translator`, `broken-link-sweeper`, `post-deploy-check`.
44
- - **`create <name>`** — scaffold `agents/<name>/` from a template (default `_default`, a minimal valid bundle). `--description <text>` writes a one-line tagline into the scaffolded `config.yaml` (surfaces in the dashboard's agents list). When run **without** `-C`, it requires the cwd to be inside a real Fimo project (walks up for `.fimo.settings.json`) and errors out cleanly otherwise, so it never leaks `agents/<name>/` into a stray cwd. If the template declares capabilities, an install-consent flow runs after the copy (`--quiet` skips it; critical caps still abort).
45
- - **`list`** — list the agents declared under `<project>/agents/`, with each one's trigger types and capability count. Local — the bundle list is the source of truth even if the project isn't linked yet.
46
- - **`validate [name]`** — run the full validation pipeline: parse → capability vocabulary → composition (cycle / missing sub-agents / invalid grants) → semantic + `fimo.config.json` policy checks. Omit `name` to validate every bundle. `--json` emits a structured `ValidationReport` for CI; exit code is non-zero on any failure.
47
- - **`secrets add/remove/list`** — edit or inspect the agent's requested secret names in `agents/<name>/config.yaml`. These commands do not create, rotate, or reveal secret values. Store values with `fimo secrets add`; run `fimo agents validate` to check that required requested secrets exist in the project. See `references/project-vars-and-secrets.md`.
48
- - **`integrations <name>`** — preview the agent's `integrations` allowlist from `agents/<name>/config.yaml` and, when linked, overlay project integration status. See `references/integrations.md`.
44
+ - **`create <name>`** — scaffold `.fimo/agents/<name>/` from a template (default `_default`, a minimal valid bundle). `--description <text>` writes a one-line tagline into the scaffolded `config.yaml` (surfaces in the dashboard's agents list). When run **without** `-C`, it requires the cwd to be inside a real Fimo project (walks up for `.fimo/project.json` or legacy `.fimo.settings.json`) and errors out cleanly otherwise, so it never leaks an agent bundle into a stray cwd. If the template declares capabilities, an install-consent flow runs after the copy (`--quiet` skips it; critical caps still abort).
45
+ - **`list`** — list the agents declared under `<project>/.fimo/agents/` (or legacy root `agents/`), with each one's trigger types and capability count. Local — the bundle list is the source of truth even if the project isn't linked yet.
46
+ - **`validate [name]`** — run the full validation pipeline: parse → capability vocabulary → composition (cycle / missing sub-agents / invalid grants) → semantic + Fimo project config policy checks. Omit `name` to validate every bundle. `--json` emits a structured `ValidationReport` for CI; exit code is non-zero on any failure.
47
+ - **`secrets add/remove/list`** — edit or inspect the agent's requested secret names in `.fimo/agents/<name>/config.yaml` (or legacy root). These commands do not create, rotate, or reveal secret values. Store values with `fimo secrets add`; run `fimo agents validate` to check that required requested secrets exist in the project. See `references/project-vars-and-secrets.md`.
48
+ - **`integrations <name>`** — preview the agent's `integrations` allowlist from `.fimo/agents/<name>/config.yaml` (or legacy root) and, when linked, overlay project integration status. See `references/integrations.md`.
49
49
 
50
- Agent integration access is configured in `agents/<name>/config.yaml` with an allowlist. Omitted integrations and omitted tools are not available to the agent:
50
+ Agent integration access is configured in `.fimo/agents/<name>/config.yaml` (or legacy root). Enable the integration there; omit `tools` to allow all tools that integration exposes, or add a `tools` map to keep the agent on a smaller set:
51
51
 
52
52
  ```yaml
53
53
  integrations:
54
54
  firecrawl:
55
55
  enabled: true
56
- tools:
57
- scrape: true
58
- search: true
56
+ ```
57
+
58
+ An explicit map is restrictive: only entries set to `true` are available. An omitted or disabled integration cannot be
59
+ used. See `references/integrations.md` for project setup, auth, and provider-specific commands.
60
+
61
+ ## Capabilities
62
+
63
+ Capabilities describe the non-integration actions an agent may take. Start with the smallest set that matches the goal.
64
+ If `capabilities.yaml` is absent or empty, the agent gets the read-only defaults: `files:read`, `cms:read`, and
65
+ `assets:read`. Once you add a capabilities file, list every extra capability the agent needs.
66
+ There is no all-capabilities wildcard; keeping the list explicit makes each agent's power reviewable.
67
+
68
+ | Capability | Allows the agent to | Risk |
69
+ | ---------------------------- | ------------------------------------------- | ------------ |
70
+ | `files:read` | Read project files | Low |
71
+ | `files:write` | Write or delete project files | Medium |
72
+ | `cms:read` | Read CMS content | Low |
73
+ | `cms:write` | Create, update, or delete CMS entries | Medium |
74
+ | `cms:schema:read` | Read CMS schemas | Low |
75
+ | `cms:schema:write` | Modify CMS schemas | High |
76
+ | `assets:read` | Read uploaded media | Low |
77
+ | `assets:write` | Upload, replace, or delete media | Medium |
78
+ | `i18n:read` / `i18n:write` | Read / modify translation catalogs | Low / Medium |
79
+ | `forms:read` / `forms:write` | Read / modify form schemas and submissions | Low / Medium |
80
+ | `git:read` | Read git state | Low |
81
+ | `git:branch` | Create an agent branch | Medium |
82
+ | `git:commit` | Commit changes to the agent branch | Medium |
83
+ | `git:push` | Push changes to the project remote | High |
84
+ | `fimo:logs:read` | Read production logs | Low |
85
+ | `fimo:analytics:read` | Read analytics data | Low |
86
+ | `fimo:preview:read` | Read a current preview URL | Low |
87
+ | `fimo:deploy` | Trigger a production deploy | Critical |
88
+ | `net:fetch` | Make outbound HTTP requests | Medium |
89
+ | `shell:exec` | Run arbitrary shell commands in the sandbox | High |
90
+ | `agent:delegate` | Invoke declared sub-agents | Medium |
91
+ | `runtime:long_running` | Run beyond the default time limit | High |
92
+ | `runtime:auto_merge` | Auto-merge trivial proposed branches | Critical |
93
+
94
+ If a capability is missing, the related command is denied and the agent should choose another path or report the
95
+ blocker. Add the capability to `capabilities.yaml`, run `fimo agents validate <name>`, deploy the bundle, and start a
96
+ new run. A denied capability does not grant access to anything else.
97
+
98
+ Example for a content editor that can read and update entries but cannot change schemas or run shell commands:
99
+
100
+ ```yaml
101
+ - files:read
102
+ - cms:read
103
+ - cms:write
59
104
  ```
60
105
 
61
106
  ## Cloud ops (env-aware)
@@ -67,7 +112,7 @@ fimo agents report <name> [--session <id>] [--env <env>] [--project <id>] [-C <d
67
112
  fimo agents logs <name> [--session <id>] [--project <id>] [-C <dir>]
68
113
  ```
69
114
 
70
- - **`run <name>`** — fire the agent's `manual` trigger on the server; prints a `sessionId` on success. Skips with `no-manual-trigger` when `config.yaml` declares none, or `trigger-not-wired` when the push-to-main sync recorded the trigger but refused to wire it (see the wiring note below). **Pre-flight drift check**: if `agents/<name>/` has uncommitted git changes, the command refuses — the server would dispatch the _deployed_ version, so deploy first. Pass `--skip-drift-check` to dispatch the deployed bundle anyway. Defaults `--env` to `main`.
115
+ - **`run <name>`** — fire the agent's `manual` trigger on the server; prints a `sessionId` on success. Skips with `no-manual-trigger` when `config.yaml` declares none, or `trigger-not-wired` when the push-to-main sync recorded the trigger but refused to wire it (see the wiring note below). **Pre-flight drift check**: if `.fimo/agents/<name>/` (or the legacy root bundle) has uncommitted git changes, the command refuses — the server would dispatch the _deployed_ version, so deploy first. Pass `--skip-drift-check` to dispatch the deployed bundle anyway. Defaults `--env` to `main`.
71
116
  - **`runs <name>`** — list past run sessions for the agent in a compact table (id, started, duration, status, trigger, env, cost). Default `--limit 20`; `--env` filters to one env.
72
117
  - **`report <name>`** — print a run's **report**: the agent's final message, captured when the run finishes (for a read-only agent like `seo-audit` this _is_ the audit; for a write agent it's a "what I changed" summary). With no `--session`, the most recent run for `<name>` is used (combine with `--env` to scope); `--session <id>` targets a specific run. Output is raw markdown, so it stays readable in the terminal and pipes cleanly (e.g. `fimo agents report seo-audit | glow`). If the run hasn't finished, or produced no message, it says so (and shows the stop reason when there is one). This is the command to read what a run actually produced — see the `logs` note below.
73
118
  - **`logs <name>`** — stream a run's log (defaults to the latest session; `--session <id>` targets one). **Note:** the log-streaming endpoint is still a server-side stub at time of writing — the command prints a placeholder rather than real log lines. To read a finished run's output today, use `report`.
@@ -76,13 +121,13 @@ fimo agents logs <name> [--session <id>] [--project <id>] [-C <dir>]
76
121
 
77
122
  Agents are not env-scoped: they belong to the project, are read from `main`, and their triggers are global. A branch env has no agents of its own — Studio's agents view shows main's agents whichever env you are on, and a bundle sitting only on a feature branch appears nowhere until it reaches main.
78
123
 
79
- Pushing `agents/<name>/config.yaml` to `main` is the whole enablement act — `fimo deploy` does it. The server reconciles the file into its trigger rows on every push: a `schedule` trigger gets a cron, a `webhook` trigger gets its path, and `manual` becomes runnable. Removing a trigger from the file deletes it (cron torn down, path released) on the next deploy; deleting the agent's directory removes the whole deployment.
124
+ Pushing `.fimo/agents/<name>/config.yaml` (or a legacy root bundle) to `main` is the whole enablement act — `fimo deploy` does it. The server reconciles the file into its trigger rows on every push: a `schedule` trigger gets a cron, a `webhook` trigger gets its path, and `manual` becomes runnable. Removing a trigger from the file deletes it (cron torn down, path released) on the next deploy; deleting the agent's directory removes the whole deployment.
80
125
 
81
- Cloud triggers (`schedule` / `webhook`) additionally require `notifications.email_recipients` in `fimo-config.json` (the dash-form scaffold file; legacy `fimo.config.json` is also accepted). Without it the trigger is recorded but deliberately left **unwired** and will not fire — `fimo agents validate` warns about this before you deploy, and the Studio agents view shows the reason afterwards.
126
+ Cloud triggers (`schedule` / `webhook`) additionally require `notifications.email_recipients` in `.fimo/config.json` (legacy root `fimo-config.json` and `fimo.config.json` are also accepted). Without it the trigger is recorded but deliberately left **unwired** and will not fire — `fimo agents validate` warns about this before you deploy, and the Studio agents view shows the reason afterwards.
82
127
 
83
128
  ## `-C, --cwd <dir>`
84
129
 
85
- Every `fimo agents` command accepts `-C, --cwd <dir>` to point at a different project directory. For the cloud-ops commands, `--project <id>` overrides the project id otherwise read from `.fimo.settings.json`.
130
+ Every `fimo agents` command accepts `-C, --cwd <dir>` to point at a different project directory. For the cloud-ops commands, `--project <id>` overrides the project id otherwise read from `.fimo/project.json` or legacy `.fimo.settings.json`.
86
131
 
87
132
  ## Non-interactive use
88
133
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  > **Run via `npx fimo@latest <command>`** — always the latest CLI, no install needed.
4
4
 
5
- `fimo credits` is a read-only command for checking the AI credit balance of the organization that owns a Fimo project. It resolves the project from `.fimo.settings.json` unless `--project <project-id>` is provided.
5
+ `fimo credits` is a read-only command for checking the AI credit balance of the organization that owns a Fimo project. It resolves the project from `.fimo/project.json` unless `--project <project-id>` is provided.
6
6
 
7
7
  ```bash
8
8
  fimo credits
@@ -98,7 +98,7 @@ fimo deploy
98
98
  ## Other facts
99
99
 
100
100
  - Source of truth is this git repo.
101
- - **Never** edit `.fimo.settings.json`; it is written once by `fimo init`.
101
+ - **Never** edit `.fimo/project.json`; it is generated by `fimo init`.
102
102
  - Each env deploys to its own branch + preview sandbox; `--publish` and `fimo publish` run from `main` only. See `references/branches.md`.
103
103
 
104
104
  ## After the first successful deploy
@@ -78,4 +78,4 @@ The scoped view still emits the project-level metadata header (name, framework,
78
78
 
79
79
  - The JSON shape is stable; parse it rather than scraping the human output when you need a specific field.
80
80
  - The `framework` field is detected from `package.json#dependencies` (v1 detector). For multi-framework projects or unusual setups, the field may be `null` — fall back to reading `package.json` yourself.
81
- - The command runs in any directory that contains `.fimo.settings.json` or one of its ancestors. If you're not in a Fimo project, `describe` will run against whatever directory you point it at (it doesn't require Fimo credentials).
81
+ - The command runs in any directory that contains `.fimo/project.json` or one of its ancestors. If you're not in a Fimo project, `describe` will run against whatever directory you point it at (it doesn't require Fimo credentials).
@@ -13,7 +13,7 @@ fimo history create "Before content migration"
13
13
  fimo history restore <version-id>
14
14
  ```
15
15
 
16
- Use the global `--env <name>` option to target a different environment. Use `--project <id>` when there is no local `.fimo.settings.json`.
16
+ Use the global `--env <name>` option to target a different environment. Use `--project <id>` when there is no local `.fimo/project.json`.
17
17
 
18
18
  ## Pagination and usage
19
19
 
@@ -39,14 +39,16 @@ For `--agents`, pass the AI tool you're running in: `--agents=claude-code` for C
39
39
 
40
40
  ## Linking an existing project
41
41
 
42
- Pass `--project-id <id>` to link an EXISTING project instead of creating one. This clones the project's git repo into `[dir]` and writes the local `.fimo.settings.json`, the same as `fimo clone` (init's `--project-id` path reuses it). Use `--env <name>` to check out a specific env (defaults to `main`). Without `--project-id`, `fimo init` creates a new project.
42
+ Pass `--project-id <id>` to link an EXISTING project instead of creating one. This clones the project's git repo into `[dir]` and writes the local `.fimo/project.json`, the same as `fimo clone` (init's `--project-id` path reuses it). Use `--env <name>` to check out a specific env (defaults to `main`). Without `--project-id`, `fimo init` creates a new project.
43
43
 
44
44
  ## What gets written (create-new)
45
45
 
46
46
  `fimo init` (create-new path) scaffolds:
47
47
 
48
48
  - The project template (Vite + React 19 + TypeScript + Tailwind v4 + shadcn/ui + react-router)
49
- - `.fimo.settings.json` — links this directory to the remote project (read-only after creation)
49
+ - `.fimo/project.json` — links this directory to the remote project (read-only after creation)
50
+ - `.fimo/config.json` — project, route, locale, SEO, and agent policy
51
+ - `.fimo/agents/` — versioned agent bundles
50
52
  - `.env` — initial env vars (currently just `VITE_API_URL`)
51
53
  - `AGENTS.md` + `CLAUDE.md` — project rules (from the template) read by AGENTS.md-compatible tools and Claude Code. Both point the agent at `fimo skills get` to load the real skills on demand.
52
54
  - A git repository with `fimo` as the remote, and — after dependencies install — an initial commit (including the lockfile) plus an initial push
@@ -31,7 +31,7 @@ fimo integrations connect firecrawl --name client-a --token-stdin
31
31
  fimo integrations enable firecrawl --connection client-a
32
32
  ```
33
33
 
34
- `connect` creates or repairs an organization-level connection. `enable --connection <alias>` lets the current project use that connection. Teammates and agents can use the capability, but Fimo never prints the API key back.
34
+ `connect` creates or repairs an organization-level connection. `enable --connection <alias>` lets the current project use that connection. Teammates and agents can use the integration, but Fimo never prints the API key back.
35
35
 
36
36
  There is no fallback between auth choices. If a named connection is selected and its key is missing or broken, repair the connection. If `fimo` is selected and the backend is not configured, report that Firecrawl needs backend setup.
37
37
 
@@ -155,7 +155,16 @@ For users, describe monitors as website change monitors: create a monitor, list
155
155
 
156
156
  ## Agent Access
157
157
 
158
- Project-level setup makes Firecrawl available to the project. Agent-level policy narrows what a specific agent may use.
158
+ Project-level setup makes Firecrawl available to the project. Add Firecrawl to an agent's `config.yaml` to let that
159
+ agent use it. If you omit `tools`, the agent gets every Firecrawl tool; use a tools map when you want a narrower set.
160
+
161
+ ```yaml
162
+ integrations:
163
+ firecrawl:
164
+ enabled: true
165
+ ```
166
+
167
+ Selective access:
159
168
 
160
169
  ```yaml
161
170
  integrations:
@@ -177,7 +186,7 @@ fimo validate
177
186
  fimo agents integrations seo-researcher
178
187
  ```
179
188
 
180
- For deployed or scheduled agents, deploy the bundle after changing `agents/<name>/config.yaml`:
189
+ For deployed or scheduled agents, deploy the bundle after changing `.fimo/agents/<name>/config.yaml`:
181
190
 
182
191
  ```bash
183
192
  fimo deploy
@@ -14,7 +14,7 @@ fimo integrations status firecrawl
14
14
 
15
15
  `info` shows supported auth choices, required credentials, tools, and recipes. `status` shows the project-specific setup state.
16
16
 
17
- When running inside an autonomous agent session, `fimo integrations list` shows the effective integrations available to that agent runtime, scoped by `agents/<name>/config.yaml`. It lists only usable tools, plus the auth column and the config path that granted access.
17
+ When running inside an autonomous agent session, `fimo integrations list` shows the effective integrations available to that agent runtime, scoped by `.fimo/agents/<name>/config.yaml`. It lists only usable tools, plus the auth column and the config path that granted access.
18
18
 
19
19
  ## Integration References
20
20
 
@@ -89,7 +89,19 @@ For Firecrawl-specific recipes, JSON examples, and agent policy guidance, load `
89
89
 
90
90
  ## Agent Access Policy
91
91
 
92
- Project integrations are enabled at the project level. Agents narrow access in `agents/<name>/config.yaml`:
92
+ Project integrations are enabled at the project level. An agent opts into an integration in
93
+ `.fimo/agents/<name>/config.yaml` (or the legacy root `agents/<name>/config.yaml`):
94
+
95
+ When `tools` is omitted, the agent can use every tool currently exposed by that integration. Add a `tools` map only
96
+ when the agent needs a narrower set:
97
+
98
+ ```yaml
99
+ integrations:
100
+ firecrawl:
101
+ enabled: true
102
+ ```
103
+
104
+ For a narrower allowlist, add the tools explicitly:
93
105
 
94
106
  ```yaml
95
107
  integrations:
@@ -101,7 +113,7 @@ integrations:
101
113
  'monitor.list': true
102
114
  ```
103
115
 
104
- Agent integration access is an allowlist. If an integration is omitted, disabled, or has no `tools` entries set to `true`, the agent cannot use it. New provider tools are not automatically available to old agents.
116
+ If an integration is omitted or disabled, the agent cannot use it. If an explicit `tools` map has no `true` entries, it also grants no tools. With no map, newly available provider tools are included automatically on the next run.
105
117
 
106
118
  Run `fimo validate` after editing agent config to check local shape plus project-level integration setup.
107
119
 
@@ -93,4 +93,4 @@ fimo invite --email "dev@agency.com" --role full
93
93
  - Invited users receive an email with a sign-up link if they don't have an account, or a sign-in link if they do.
94
94
  - Organization invites can be resent with `--resend` if the user didn't receive the original.
95
95
  - Project invites are scoped to a single project; organization invites grant access to all projects in that organization.
96
- - If `--cwd` is set and the directory contains a `.fimo.settings.json`, the project is auto-selected.
96
+ - If `--cwd` is set and the directory belongs to a linked Fimo project, that project is auto-selected.
@@ -29,7 +29,7 @@ There is no `fimo translations` command. Use `fimo labels`.
29
29
 
30
30
  ## Locale config
31
31
 
32
- `fimo-config.json` controls label/content locales:
32
+ `.fimo/config.json` controls label/content locales:
33
33
 
34
34
  ```json
35
35
  {
@@ -6,7 +6,7 @@ This file covers CLI-side locale configuration and validation. For code helpers
6
6
 
7
7
  ## Configure Locales
8
8
 
9
- Edit `fimo-config.json`. Keep one locale unless the user asks for multilingual or localized output:
9
+ Edit `.fimo/config.json`. Keep one locale unless the user asks for multilingual or localized output:
10
10
 
11
11
  ```jsonc
12
12
  {
@@ -40,13 +40,13 @@ Validation checks:
40
40
  - malformed locale tags
41
41
  - `defaultLocale` missing from `locales`
42
42
  - unsupported routing strategies
43
- - canonical routes in `fimo-config.json` that claim reserved locale prefixes, for example `/es`
43
+ - canonical routes in `.fimo/config.json` that claim reserved locale prefixes, for example `/es`
44
44
  - top-level dynamic routes that could capture locale prefixes unless the project uses Fimo's React Router helper
45
45
  - missing default-locale DB labels
46
46
 
47
47
  ## Route Metadata Rule
48
48
 
49
- Keep `fimo-config.json#routes` canonical and unlocalized:
49
+ Keep `.fimo/config.json#routes` canonical and unlocalized:
50
50
 
51
51
  ```json
52
52
  {
@@ -71,7 +71,7 @@ For custom frameworks, the project may implement its own URL scheme, but it stil
71
71
 
72
72
  Inspect the existing locale provider, route table, switcher, redirects, and public URLs before editing configuration. Preserve working URL behavior during the migration.
73
73
 
74
- For React Router projects, prefer one contract based on `fimo-config.json`, `fimoRoutes()`, and `FimoLink`; migrate existing wrappers into the framework root instead of layering a second locale context. If that would change established URLs, keep the custom router temporarily, pass its active locale to `FimoProviders`, and ask the user to choose canonical URLs and redirects before rewriting routes.
74
+ For React Router projects, prefer one contract based on `.fimo/config.json`, `fimoRoutes()`, and `FimoLink`; migrate existing wrappers into the framework root instead of layering a second locale context. If that would change established URLs, keep the custom router temporarily, pass its active locale to `FimoProviders`, and ask the user to choose canonical URLs and redirects before rewriting routes.
75
75
 
76
76
  ## Labels And Content
77
77
 
@@ -0,0 +1,85 @@
1
+ # Project MCP
2
+
3
+ > **Run via `npx fimo@latest <command>`** — always the latest CLI, no install needed.
4
+
5
+ The **Project MCP** lets an AI coding client use Fimo's project workflows through the Model Context Protocol. It is
6
+ the same Fimo tool surface exposed in two ways:
7
+
8
+ - **Local MCP**: `fimo mcp` over stdio, for an AI client running next to a checkout.
9
+ - **Remote MCP**: `https://api.fimo.ai/api/mcp` over authenticated Streamable HTTP, for ChatGPT, Claude, and other
10
+ clients that support OAuth.
11
+
12
+ The local and remote Project MCP modes share the same catalog. The public Docs MCP at
13
+ `https://fimo.ai/docs/mcp` is separate: it is unauthenticated, read-only, and only provides Fimo documentation.
14
+
15
+ ## Set up the local MCP
16
+
17
+ Authenticate the CLI first:
18
+
19
+ ```bash
20
+ npx fimo@latest login
21
+ ```
22
+
23
+ Then configure the MCP client to launch:
24
+
25
+ ```text
26
+ npx fimo@latest mcp
27
+ ```
28
+
29
+ For clients that accept a JSON command configuration, the equivalent entry is:
30
+
31
+ ```json
32
+ {
33
+ "mcpServers": {
34
+ "fimo": {
35
+ "command": "npx",
36
+ "args": ["fimo@latest", "mcp"]
37
+ }
38
+ }
39
+ }
40
+ ```
41
+
42
+ Do not add shell output or logging around the command: stdout is reserved for MCP JSON-RPC frames. Diagnostics are
43
+ written to stderr.
44
+
45
+ ## Project and environment scope
46
+
47
+ When launched inside a linked Fimo project, `fimo mcp` reads the project from `.fimo.settings.json` and uses the
48
+ current git branch as the default environment. This keeps an AI client working against the same project environment as
49
+ the checkout.
50
+
51
+ Outside a linked project, the server still works, but each project-scoped tool call must provide `projectId` and
52
+ `env`. The client can also pass an environment override when launching the CLI. Never edit `.fimo.settings.json`
53
+ manually to change scope.
54
+
55
+ The CLI credential represents the signed-in user's Fimo authority. If an MCP server is invoked from a Fimo agent
56
+ session, the session's frozen capability snapshot still limits the operations available to that agent.
57
+
58
+ ## Capabilities
59
+
60
+ The Project MCP catalog covers:
61
+
62
+ - **Identity and navigation** — current user, projects, and environments.
63
+ - **Content** — schemas, collection entries, search, create/update/delete, bounded bulk operations, and Singles.
64
+ - **Labels** — list, read, set, batch-set, and delete localized labels.
65
+ - **Media** — list and inspect assets, generate images or videos, create folders, move, and delete assets. Binary
66
+ upload remains `fimo assets upload`.
67
+ - **Forms** — create, read, update, and delete forms; inspect submissions and statistics.
68
+ - **Files** — read, glob, grep, write, edit, and delete project files within the scoped environment. Sensitive files
69
+ such as credentials and `.env` files are excluded.
70
+ - **Agents** — list agents, start a run, and inspect run status.
71
+
72
+ Use the MCP client's tool list as the wire-level source of truth. The catalog is shared with the remote endpoint, so a
73
+ client configured locally sees the same tool names and input shapes as a remote client.
74
+
75
+ ## Local versus remote authorization
76
+
77
+ Local MCP uses the stored CLI credential (or `FIMO_API_TOKEN` when explicitly configured). It does not use the
78
+ browser OAuth consent screen. Remote MCP uses Fimo OAuth with `read`, `write`, and `agents` scopes; the user selects
79
+ the optional capabilities during consent.
80
+
81
+ In both modes, Fimo still checks the user's project permissions, environment access, input validation, and file safety
82
+ rules for every operation. MCP does not grant access to projects the user cannot already access.
83
+
84
+ For ChatGPT, Claude, or another remote MCP client, use the setup guide in the public [MCP documentation](https://fimo.ai/docs/ai/mcp)
85
+ instead of the local stdio configuration above.
@@ -62,7 +62,7 @@ fimo agents secrets remove seo-publisher FIRECRAWL_API_KEY
62
62
  fimo agents validate
63
63
  ```
64
64
 
65
- `fimo agents secrets add` edits `agents/<name>/config.yaml`. It does not create or rotate the secret value. Use `fimo secrets add` to create the value or `fimo secrets update` to rotate it.
65
+ `fimo agents secrets add` edits `.fimo/agents/<name>/config.yaml`. It does not create or rotate the secret value. Use `fimo secrets add` to create the value or `fimo secrets update` to rotate it.
66
66
 
67
67
  `fimo agents validate` checks that required agent secrets exist in the project. A running agent keeps the environment it started with; the next run reads the deployed agent config again.
68
68
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  > **Run via `npx fimo@latest <command>`** — always the latest CLI, no install needed.
4
4
 
5
- Commands for listing projects across an org, cloning a remote project locally, and managing the lifecycle of a single project (delete, publish, unpublish, rename). Most lifecycle commands operate on the **current project** (read from `.fimo.settings.json` in the cwd) by default; for `delete`, `publish`, and `unpublish` you can pass an explicit `[projectId]` to target another. (`rename` is local-only — it never targets a different project; see below.)
5
+ Commands for listing projects across an org, cloning a remote project locally, and managing the lifecycle of a single project (delete, publish, unpublish, rename). Most lifecycle commands operate on the **current project** (read from `.fimo/project.json`, or the legacy `.fimo.settings.json`, in the cwd) by default; for `delete`, `publish`, and `unpublish` you can pass an explicit `[projectId]` to target another. (`rename` only edits the linked local project; see below.)
6
6
 
7
7
  ## The `fimo projects` namespace
8
8
 
@@ -13,15 +13,15 @@ fimo projects clone [projectId] [dir] [--env <name>] # clone an existing project
13
13
  fimo projects delete [projectId] [-C <dir>] [-y] # delete (defaults to current project)
14
14
  fimo projects publish [projectId] [-C <dir>] # make the project live (publish from main)
15
15
  fimo projects unpublish [projectId] [-C <dir>] # take the project offline
16
- fimo projects rename <name> [projectId] [-C <dir>] # local-only: set seo.siteName in fimo-config.json
16
+ fimo projects rename <name> [projectId] [-C <dir>] # set seo.siteName in the linked project config
17
17
  ```
18
18
 
19
19
  - **`list`** — projects you can see in the org. Live projects are marked.
20
20
  - **`create`** — identical to `fimo init` (create-new path); see `references/init.md`.
21
- - **`clone`** — clone a remote Fimo project's git repo to your machine and write the local `.fimo.settings.json`/agent files. Use `fimo clone <projectId>` when scripting or when the ID is known. In an interactive terminal, bare `fimo clone` opens a project picker for the active org; JSON mode and non-TTY shells require an explicit project ID and fail fast instead of prompting. By default it clones `main`; pass `--env <name>` to clone a specific env. The target directory defaults to the project display name/name, or pass `[dir]` explicitly.
21
+ - **`clone`** — clone a remote Fimo project's git repo to your machine and write the local `.fimo/project.json` and agent files. Use `fimo clone <projectId>` when scripting or when the ID is known. In an interactive terminal, bare `fimo clone` opens a project picker for the active org; JSON mode and non-TTY shells require an explicit project ID and fail fast instead of prompting. By default it clones `main`; pass `--env <name>` to clone a specific env. The target directory defaults to the project display name/name, or pass `[dir]` explicitly.
22
22
  - **`delete`** — destructive; prompts unless `-y`. Removes the remote project.
23
23
  - **`publish` / `unpublish`** — toggle the project's public visibility. `publish` flips the current `main` state live (the same "go live" as `fimo deploy --publish`, minus the git push). This is **not** the versioned release path — for that, see `fimo publish` in `references/branches.md`.
24
- - **`rename`** — **local-only**, unlike the others. It does not touch the remote project record. It requires `.fimo.settings.json` in the cwd, and if you pass a `[projectId]` that doesn't match the linked project it errors and exits 1 (so you can't rename a different project). It writes `seo.siteName` into the local `fimo-config.json`; you must commit and run `fimo deploy` to apply the change.
24
+ - **`rename`** — edits only the linked local project immediately. It requires a project marker in the cwd, and if you pass a `[projectId]` that doesn't match the linked project it errors and exits 1 (so you can't rename a different project). It writes `seo.siteName` into the current or legacy project config; commit and run `fimo deploy` to reconcile the remote `displayName` and deploy the new site name.
25
25
 
26
26
  ## Top-level clone shortcut
27
27
 
@@ -33,15 +33,15 @@ Use the top-level shortcut for the common "get this project onto my machine" wor
33
33
 
34
34
  ## Top-level shortcuts (current project)
35
35
 
36
- These target the project linked in the cwd's `.fimo.settings.json` — handy from inside a project directory:
36
+ These target the project linked in the cwd's `.fimo/project.json` (or legacy `.fimo.settings.json`) — handy from inside a project directory:
37
37
 
38
38
  ```bash
39
39
  fimo delete [-C <dir>] [-y] # delete the current project
40
40
  fimo unpublish [-C <dir>] # unpublish the current project
41
- fimo rename "<Site Name>" # local edit: set seo.siteName in fimo-config.json
41
+ fimo rename "<Site Name>" # local edit: set seo.siteName in the project config
42
42
  ```
43
43
 
44
- `fimo rename` sets the **site name** (`seo.siteName`) in the local `fimo-config.json` — it is a local edit, not a remote update, so it requires a follow-up commit + `fimo deploy` to take effect. It does **not** change the project's remote display name (the `displayName` shown by `projects list`), which is set once at creation time from the project directory name. See `references/init.md` and `references/deploy.md`.
44
+ `fimo rename` sets the **site name** (`seo.siteName`) in the local project config — it is a local edit, not an immediate remote update, so it requires a follow-up commit + `fimo deploy` to take effect. Deploy reconciles the project's remote `displayName` with the committed site name while pushing the config. See `references/init.md` and `references/deploy.md`.
45
45
 
46
46
  ## Three "publish" verbs — don't confuse them
47
47
 
@@ -21,11 +21,11 @@ In development, the generated app reloads when DB label values change. In produc
21
21
 
22
22
  ## Locale behavior
23
23
 
24
- The default label locale is `i18n.defaultLocale` in `fimo-config.json`, falling back to `en` when it is not set. `fimo validate`, the generated app runtime, and `fimo labels set` without `--locale` all use that default locale.
24
+ The default label locale is `i18n.defaultLocale` in `.fimo/config.json`, falling back to `en` when it is not set. `fimo validate`, the generated app runtime, and `fimo labels set` without `--locale` all use that default locale.
25
25
 
26
26
  For non-default locales, create explicit DB values with `fimo labels set --locale <locale>` or `fimo labels set-many --locale <locale>`. Keep the code shape the same for every locale: `t('hero.title')` declares the key, and the DB decides which locale value is shown.
27
27
 
28
- `fimo-config.json` owns the locale list:
28
+ `.fimo/config.json` owns the locale list:
29
29
 
30
30
  ```json
31
31
  {