FXCode
SIGN IN →
Doc. 09 — Features

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 with name and description);
    • 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.
  • Inside a git repository you see the git diff after 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.

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 (and localhost in 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 .md files up to 1 MB; it never creates scripts or touches other files.
  • No shell. The commit runs git add and git commit with 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.