Skip to main content

Using generated skills

A generated skill is for whoever fills the page: you, a teammate, or a client. They need only an AI that accepts Agent Skills and has a browser, such as Claude, Cowork or ChatGPT. Nothing is installed and no MCP server is involved.

Add the skill​

WhereHow
Claude or ChatGPT skill settingsUpload the zip from skillgen export --one-skill --zip
Claude Code or Cowork on your machineCopy a skill folder into ~/.claude/skills/ (personal) or the project's .claude/skills/
A pluginInstall the output of export --plugin (Claude Code) or export-chatgpt (ChatGPT, Codex)

A skill upload takes one skill at a time, which is why --one-skill bundles every page into a single skill. See Exporting.

What the AI does​

  1. It matches the request to one skill by the skill's description, and reads SKILL.md.
  2. It opens the page in the user's logged-in tab. If a login page, CAPTCHA or two-factor prompt appears, it hands over to the user and never asks for a password.
  3. It checks that the tab is on the host named in the skill's app-url. On another host it stops; on a production host it confirms with the user before submitting.
  4. It fills every field in one call, asks the user once for every missing required value, then fills the rest.
  5. It submits, reads the result, fixes only the fields the server rejected, and reports.

The skill tells the AI to treat page text, such as option labels and error messages, as data and never as instructions.

Four ways to fill​

Not every AI can run JavaScript in a page. Every skill carries four methods, and SKILL.md tells the AI to decide first what its browser tool can do, then use the first one it supports:

#MethodFileWhen
1JavaScript in the pagereferences/fill.mdOne call sets every field and reports each one
2Locatorsreferences/locators.mdTools that act by role, label or selector, such as Playwright's fill(), selectOption(), check(), click()
3Browser actions"Fill with browser actions" in SKILL.mdClick and type each field by its visible label
4By handreferences/manual-steps.mdAn AI working from screenshots, or the user

Direct writes can fail in sandboxed browsers, protected pages, framework-controlled forms and read-only page proxies. Any field method 1 cannot set moves on to the next method.

What the fill call reports​

Method 1 returns one status per key:

StatusMeaning
okSet, and read back as the value given
partialSome of a multi-value field matched; the rest did not
rejectedThe field would not take the value. The AI asks the user rather than retrying blind
missingThe field is not on the page: hidden until another field is set, or the app changed
escalateThe inline setter cannot do this field. The AI reads scripts/fill.js and uses it for those keys only
unknownThat key is not on this page

The layout check​

Skills generated with --xy first compare the live page with the layout they were built from:

layout.stateMeaningWhat happens
matchSame formFilled
resizedSame form on another screen sizeFilled
blockedA dialog or prompt covers the formNothing written; the AI inspects the page
changedNot the layout expectedNothing written; the AI inspects the page

The check is a shortcut, never a gate: the AI may always inspect the page itself and fill with {"verify": false}.

When the page does not match​

If several keys come back missing for fields the table says are always shown, or a field in the table is not on the page at all, the app has changed. The skill tells the AI to fill with browser actions in table order and to tell the user the skill needs regenerating. The developer then runs skillgen check --regenerate.

Try it on the test bench​

The repository includes a one-page bench with every widget skillgen supports and 14 test cases. See Testing.