Skip to content

Editor skills

Noemata is built for humans and agents to author frames together. For an agent to be useful in a workspace, it has to know the authoring model — what a frame is, how views and blocks fit together, which packs are installed. The noemata integration teaches it, by writing skills into the coding agents on your machine. It’s one of the always-installed integrations (see Integrations & packs).

What a skill is

A skill is a bundle of instructions an agent loads when it’s relevant. The one Noemata ships, noemata-overview, is a high-level orientation: what Noemata is, the shape of a frame (a data view plus a page of blocks), example frames/blocks/expressions to learn the model from, which packs are guaranteed installed, and links into the docs at @frames/@noemata/docs/. An agent working in your project picks it up and can author frames instead of guessing at the schema.

Because the docs also ship as the @noemata frame pack, the skill and the pages you’re reading now point at the same content — the agent reads the authoring guides from disk, the same way you browse them in the app.

Where skills install

Skills are written per host. Noemata always writes the universal location, and additionally writes a host’s own directory when it detects that host on your machine:

  • .agents/skills/ — the universal alias. Written every time, regardless of what’s detected. Gemini CLI, OpenCode, Goose, and Codex all read this path, so a single write covers them.
  • .claude/skills/ — Claude Code. Written when the claude binary is on PATH.
  • .cursor/skills/ — Cursor. Written when cursor or cursor-agent is on PATH.

Detection is by binary presence, independent of the wizard’s integration choices — a skill host gets skills because it’s installed, not because you opted into collecting its telemetry. (Note that not every tool Noemata integrates with is a skill host — VS Code, for instance, is a telemetry integration only.)

Controlling installs

Skill writes are gated by collect.integrations.skills in noemata.json:

{ "collect": { "integrations": { "skills": true } } }
  • true (the default) — install to every detected host.
  • false — install to none.
  • a host selector ("claude", "agents", or "cursor"), or an array of them — force exactly those hosts, whether or not their binary is detected. Pinning a host is a directive, not a probe.

The --skills / --no-skills flag on noemata up takes precedence over the config for a single run. --no-skills reconciles everything else — packs, collector, service configs — but writes no skills.

When you disable the noemata integration, reconciliation sweeps the noemata--prefixed skill directories from every known host so your repo doesn’t carry orphaned skills.