skill tool when it needs the instructions.
Skills are:
- Lazy — only the name and description enter the model’s context until it loads the skill.
- Versioned — uploading the same skill again creates a new revision under the same skill ID.
- Shared — one skill can be granted to multiple projects and attached to many agents.
Upload a skill
Upload a.zip or .tar.gz archive with one top-level directory:
SKILL.md starts with the skill’s name and description:
- API
- Dashboard
The examples assume the client, For a project- or user-owned skill, set the owner accordingly:
$ORG/orgID, and $PROJ/projectID setup from the quickstart.POST /skills takes multipart form data: an owner and the archive itself. When calling the API directly, send owner as a JSON part (Content-Type: application/json); the SDK and CLI do this for you. The CLI’s --archive takes a .zip or .tar.gz file, or a skill directory that it packs for you:--owner-kind project --owner-project-id proj_… or --owner-kind user with the CLI, or {"kind": "project", "project_id": "proj_…"} / {"kind": "user"} as the owner.org, project, or user) decides who manages the skill and cannot change. A project can attach only skills it owns or has been granted—even skills owned by its organization.
Uploading again with the same owner and name creates the next revision: the skl_ ID stays the same and the skr_ revision ID changes. Attached agents resolve the latest revision at each model call, so they do not need to be relaunched.
Update a skill
Each update creates the next revision; the skill’s name cannot change.- API
- Dashboard
POST /skills/{skillID} takes multipart form data with exactly one of:skill_md— replacementSKILL.mdtext. Every other file in the current revision is kept.archive— a new.zipor.tar.gzthat replaces all of the skill’s files.
omnara skills create again with the same owner and skill name uploads the next revision.List, inspect, delete
Each skills page lists the skills owned at that scope;omnara skills list does the same from the terminal. Fetching a skill (omnara skills get {skill-id} or the API) returns skill_md, the full instruction text of its current revision. To delete an owned skill in the dashboard, open its row menu and click Delete, or run omnara skills delete {skill-id}. Deletion removes its revisions and grants, but is blocked with 409 while an active agent config references it.
Grant it to projects
A project can use a skill only if it owns it or holds a grant — org- and user-owned skills must be granted to each project that references them. Grants share without transferring ownership.- API
- Dashboard
The response identifies the grant and target project:List a skill’s project grants with Each result reports whether the project owns the skill (
omnara grant skills list {skill-id} or GET …/grants; revoke one with omnara grant skills delete {skill-id} {grant-id} or DELETE …/grants/{grantID}.To confirm which skills a project can use (the CLI has no equivalent command):direct) or receives it through a grant.Attach it to an agent
Reference the skill ID in the config; config creation verifies the project can use it:skill tool. The model sees each skill’s name and description; when it calls the tool, Omnara returns the SKILL.md instructions and attempts to install the supporting files on each attached machine. The instructions still work when no machine is attached or an installation fails.
For a complete example you can deploy, which uploads Remotion’s skill folder and attaches it to a video agent, see the video generation agent.
Full schema and playground: Create skill · Update skill · List skills · Skill grants · Project skills.