name.
An agent loads a skill’s full body only when its description looks relevant to the task at hand; the description is the trigger it routes on.
What’s in a skill
For exact field constraints, see Create a skill.
Create custom skills
Create a skill once, then reference it byname from any agent’s skills array.
How an agent uses a skill
An agent doesn’t read every attached skill up front. Each one is advertised to it byname and description in an <available_skills> section of the system prompt, with the body held back:
description relevant to the task, it calls a built-in load_skill tool with that name. The tool returns the full skill, and its body enters the conversation as instructions for the steps that follow. If the name doesn’t match, the tool replies with the closest available names so the agent can retry. A url_pattern, when set, is listed next to the description as an extra hint; it is not matched against the live page.
Environments ship with their own skills too, bundled by default and always in context rather than loaded on demand. These are fixed per environment, not something you configure.
Write effective skills
- Make the
descriptiona trigger, not a summary. It is the only thing the agent sees before loading a skill, so phrase it as “use this when…” and name the situation precisely. Vague descriptions get loaded at the wrong time or not at all. - Keep the
bodyself-contained. The agent reads it cold, mid-task, so write a focused procedure (steps, formats, edge cases) rather than background prose. - Put always-on behavior in the agent’s
instructions. Reserve skills for procedures that only apply some of the time, so they stay out of context until they are relevant. - Compose small skills. Several narrow skills route better than one broad skill, because each
descriptioncan target a distinct situation.
Built-in skills
H maintains a catalog of computer-use skills under theh/ namespace. Attach them to any agent by name.
List them by filtering on the h/ prefix, or fetch one by name:
Endpoints
The list is paginated (
page, size) and returns an items / page / total envelope; sort it with sort=created_at or sort=name (prefix - for descending), and filter with name (substring match) or search (matches name or description).