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.
- package/assets/agent-templates/content-translator/GOAL.md +2 -2
- package/assets/agent-templates/seo-audit/config.yaml +1 -1
- package/assets/skills/fimo/SKILL.md +1 -0
- package/assets/skills/fimo-cli/SKILL.md +6 -4
- package/assets/skills/fimo-cli/references/agents.md +63 -18
- package/assets/skills/fimo-cli/references/credits.md +1 -1
- package/assets/skills/fimo-cli/references/deploy.md +1 -1
- package/assets/skills/fimo-cli/references/describe.md +1 -1
- package/assets/skills/fimo-cli/references/history.md +1 -1
- package/assets/skills/fimo-cli/references/init.md +4 -2
- package/assets/skills/fimo-cli/references/integrations/firecrawl.md +12 -3
- package/assets/skills/fimo-cli/references/integrations.md +15 -3
- package/assets/skills/fimo-cli/references/invite.md +1 -1
- package/assets/skills/fimo-cli/references/labels.md +1 -1
- package/assets/skills/fimo-cli/references/locales.md +4 -4
- package/assets/skills/fimo-cli/references/mcp.md +85 -0
- package/assets/skills/fimo-cli/references/project-vars-and-secrets.md +1 -1
- package/assets/skills/fimo-cli/references/projects.md +7 -7
- package/assets/skills/fimo-code/references/labels.md +2 -2
- package/assets/skills/fimo-code/references/locales.md +5 -5
- package/assets/skills/fimo-code/references/setup-plain-vite.md +4 -4
- package/assets/skills/fimo-code/references/setup-react-router.md +5 -5
- package/assets/skills/fimo-code/references/ui.md +1 -1
- package/assets/skills/fimo-migration/references/workflow.md +1 -1
- package/assets/skills/fimo-migration/scripts/build-canonical-manifest.mjs +32 -3
- package/dist/build/vite/index.d.ts +3 -3
- package/dist/build/vite/plugins/fimo-config.d.ts +2 -2
- package/dist/build/vite/plugins/fimo-config.js +5 -5
- package/dist/build/vite/plugins/robots.d.ts +1 -1
- package/dist/build/vite/plugins/robots.js +3 -3
- package/dist/build/vite/plugins/server-config.js +1 -1
- package/dist/build/vite/plugins/sitemap.js +2 -2
- package/dist/build/vite/plugins/translations.js +14 -10
- package/dist/cli/bundle.json +1 -1
- package/dist/cli/index.js +131 -117
- package/dist/runtime/app/prefetch.d.ts +1 -1
- package/dist/runtime/app/prefetch.js +2 -2
- package/dist/runtime/paths/get-fimo-paths.d.ts +1 -1
- package/dist/runtime/paths/get-fimo-paths.js +2 -2
- package/dist/runtime/paths/types.d.ts +1 -1
- package/dist/runtime/project-layout.d.ts +14 -0
- package/dist/runtime/project-layout.js +57 -0
- package/dist/runtime/seo/resolver.d.ts +1 -1
- package/dist/runtime/seo/resolver.js +1 -1
- package/dist/runtime/shared/fimo-config.server.d.ts +2 -0
- package/dist/runtime/shared/fimo-config.server.js +17 -4
- package/dist/runtime/templates.d.ts +4 -4
- package/dist/runtime/templates.js +11 -6
- package/dist/scripts/validate-route-metadata.js +8 -6
- package/package.json +7 -1
- package/templates/react-router/AGENTS.md +1 -1
- package/templates/react-router/package.json +1 -1
- /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
|
|
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
|
|
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
|
|
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.
|
|
47
|
+
## Critical: `.fimo/project.json` is the project link
|
|
47
48
|
|
|
48
|
-
A Fimo project is identified by `.fimo.
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
45
|
-
- **`list`** — list the agents declared under `<project
|
|
46
|
-
- **`validate [name]`** — run the full validation pipeline: parse → capability vocabulary → composition (cycle / missing sub-agents / invalid grants) → semantic +
|
|
47
|
-
- **`secrets add/remove/list`** — edit or inspect the agent's requested secret names in
|
|
48
|
-
- **`integrations <name>`** — preview the agent's `integrations` allowlist from
|
|
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
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
|
96
|
+
- If `--cwd` is set and the directory belongs to a linked Fimo project, that project is auto-selected.
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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>] #
|
|
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.
|
|
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`** —
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
28
|
+
`.fimo/config.json` owns the locale list:
|
|
29
29
|
|
|
30
30
|
```json
|
|
31
31
|
{
|