Review agent skills
Review and edit the skills and instructions that program your agents (SKILL.md, CLAUDE.md, AGENTS.md), on your machine and per project.
Skills and instruction files are the code that programs your agents: SKILL.md files, CLAUDE.md and AGENTS.md. FXCode lets you review and edit them like code: with a diff before saving, history, automatic review and change proposals.
The Skills page (in the team menu, not shown to clients) has two parts:
- On this machine: your local skills, read and edited from the desktop app. Nothing leaves your machine.
- Synced projects: the skills of each project’s repo, uploaded with
fxc skills sync. Visible from any browser or phone.
On this machine (desktop app)
Open the desktop app and go to Skills. By default it reads two folders:
~/.claude/skills(and~/.claude/CLAUDE.md)~/.agents/skills
Click Add repo folder to authorize a repository. From a repo it reads CLAUDE.md, AGENTS.md, .claude/skills/, .agents/skills/ and skills/. The list of folders is saved in the app’s local settings.
Each authorized folder has its own tab (~/.claude/skills, ~/.agents/skills and each repo), with its number of skills and review warnings. The app remembers the last one you opened; on a phone the tabs become a picker.
For each skill you see its name, description and warnings. A link (symlink or Windows junction) carries a Link badge and a short label of where it points, the repo or folder of the target (→ fxcode, → dotfiles-private); hover to see the full path. The All / Links / Local filter shows one kind or the other. When you open one:
- Scope: «Global: affects all your projects» or «Only this repo», and «It’s a link: the change lands in …» when the folder is a symlink or junction to another repo.
- Edit and preview the Markdown.
- Review and save shows the diff first. Before writing, the app checks:
- the frontmatter of a
SKILL.md(valid YAML withnameanddescription); - that the file hasn’t changed on disk since you opened it. If it has, you see the difference and choose: load the disk version or overwrite with yours.
- the frontmatter of a
- Inside a git repository you see the
git diffafter saving and can commit just that file, with a message you can edit. - Outside git, a dated copy (
SKILL.md.20261018-153000.bak) is saved before writing.
Links: edit the original
Many skills in ~/.claude/skills are links to another folder: a dotfiles repo or a project’s repo (<repo>/skills/<name>). The original is the one that counts: whatever you change affects everything that uses it.
When you open a linked skill, the editor tells you you’re editing through the link and recommends Open the original. With the original open (Original badge):
- you edit the file at its real path, and the app reminds you which links use it;
- on save, the diff and the commit go to the target’s git repo, with a note that the change affects everything that uses that original;
- View through the link takes you back to the link view.
It needs desktop app 0.3.1 or later.
Why it’s safe
- Only the FXCode web can call it. The window exposes nine skill commands, and only to
https://app.fxcode.dev(andlocalhostin development builds). No other site, and no other Tauri permission: no generic file access, no shell. - Only the folders you authorized. Every path is resolved (links included) and has to stay inside an authorized folder. A link placed at the skill level is followed (that’s how skills are usually installed); a link deeper inside that points elsewhere is rejected, and so are paths with
... The real path of an original is only accepted if it’s the exact target of one of those links (or something inside it): a file next to the target, or any other path on disk, is rejected. - Only Markdown. It writes existing
.mdfiles up to 1 MB; it never creates scripts or touches other files. - No shell. The commit runs
git addandgit commitwith explicit arguments, only for that file.
Synced projects (cloud)
From the repo of a project, upload its skills:
fxc skills sync --project-id <projectId> [--dir <repo>]
It uploads CLAUDE.md, AGENTS.md and the .md files of .claude/skills/, .agents/skills/ and skills/. Only what changed travels (compared by SHA-256 hash), and each change is a new version with author and date. A file that’s no longer in the repo is marked as deleted.
Before uploading, fxc scans for secrets (GitHub, AWS, OpenAI, Anthropic, Stripe and FXCode tokens, private keys, JWTs, URLs with passwords, SECRET=... assignments). If it finds any, it uploads nothing and tells you the file and line. The API runs the same check.
In the web, for each project you see the skills, their content, the history with the diff between versions, and the usage: bytes synced by your account and per project. Usage is only measured for now; there are no limits or plans.
Change proposals
From the web (or an agent through MCP) you can propose a change to a skill. The proposal stays pending: nothing is written to the repo until someone applies it locally:
fxc skills proposals --project-id <projectId>
fxc skills apply <proposalId> [--dir <repo>]
apply writes the change in the repo and marks the proposal as applied. If the local file changed since the proposal, it stops (sync, review, or use --force). Then review the change and commit it as usual.
Automatic review
Each skill gets warnings from local rules (no AI for now):
| Rule | What it looks for |
|---|---|
| Frontmatter | SKILL.md without frontmatter, invalid YAML, or missing name/description. |
| Duplicates | Two skills with the same name, or almost identical descriptions. |
| Risky instructions | push, deploy, rm -rf, dropping data, pasting tokens, --force or --no-verify without asking for confirmation. |
| Contradictions | One skill says «push when you finish» and another «never push». |
| Outdated versions | A version that doesn’t match the repo’s package (e.g. «Next.js 15» when the repo uses 16). |
| Missing paths | Paths in backticks that don’t exist on disk (desktop app only). |
MCP
The MCP server (local fxc mcp and the remote one) has the same operations for agents: list_skills, get_skill, skill_history, list_skill_proposals and propose_skill_change. An agent can read and propose, but applying a change is always done by a person in the repo.