The App Skills extension config declares the skills your app offers to AI agents working on a site, such as Aria. Configure a JSON object with a skills array of skill objects. Include between 1 and 100 skills. An app can have one App Skills extension.
Skills build on your App Tools extension: a skill may only reference tools your own app declares there.
For each skill, provide:
| Name | Type | Description |
|---|---|---|
slug | string | Required. Identifier of the skill, unique within your app. Agents use it to refer to the skill they chose. Use lowercase words separated by hyphens, for example package-tracking. Max: 64 characters. |
displayName | string | The name shown to users when they browse the site's skills. Min: 2. Max: 200 characters. |
description | string | Required. What the skill does and when to use it. Agents decide whether a request fits the skill from this text, so write it clearly. Min: 10. Max: 1,024 characters. |
guidelines | string | The instructions an agent follows once the skill is chosen, in Markdown. Required when activated is true. Max: 20,000 characters. See Writing Skill Guidelines. |
toolMethodNames | array of strings | The methodName values of the tools in your App Tools extension that this skill may call. Every name must exist there. A skill without tools is allowed, for example a review or checklist skill. Max: 50 names, each 1 to 30 characters. |
activated | boolean | Whether the skill is available to agents. Set to true to enable it. |
tags | array of strings | Keywords describing what the skill does, for agents that pick skills by topic. Lowercase words or short phrases. Max: 10, each 1 to 30 characters. |
examples | array of strings | Example user requests the skill handles. The strongest signal an agent has when matching a request to a skill. Max: 5, each 1 to 200 characters. |
inputModes | array of strings | MIME media types the skill accepts as input, as in the A2A AgentSkill.inputModes field. For example, text/plain. Leave empty when the skill accepts any input the agent accepts. Max: 10, each 3 to 100 characters. |
outputModes | array of strings | MIME media types the skill produces, as in the A2A AgentSkill.outputModes field. For example, application/json. Leave empty when the skill produces whatever the agent produces. Max: 10, each 3 to 100 characters. |
Beyond the limits above, the declaration is checked when you save the extension and is rejected in these cases:
| Rejection | Fix |
|---|---|
Skill [<slug>] uses tool method [<name>], which is not declared in the app's App Tools extension | Add the tool to your App Tools extension first, or remove it from toolMethodNames. |
Skill [<slug>] is activated but has no guidelines | Write the guidelines, or set activated to false until they are ready. |
Skill [<slug>] guidelines were rejected by the safety check: they may contain instructions that override or manipulate the AI Assistant | Rephrase the guidelines or the description. See Writing Skill Guidelines for what the check rejects. When several skills fail, the message names the first few and counts the rest. |
| A second App Skills extension on the same app, rejected as already existing | Add the new skill to your existing App Skills extension instead of creating a second one. |
This example declares an activated package-tracking skill that uses the getPackageTracking tool from the app's App Tools extension:
Once your app version is released and installed on a site, the skill appears in that site's List App Skills response and its guidelines are served by Get App Skill. Agents see the declaration of the app version each site is on, so a change to a skill reaches a site when that site moves to the new version.
Last updated: 6 October 2026