roasOS
Agent

Skills

Run a saved ask: one that a person wrote in roasOS, or one from the roasOS pack.

A skill is a saved, reusable ask. A person writes it one time in roasOS and gives it a name. Your software then runs it by its id, or by its slug.

A skill run is an agent run. It uses the same caps, the same approvals, and the same read path as POST /v1/agent/completions.

Your workspace has two kinds of skill. A workspace skill is one that a person in your workspace wrote. A pack skill is one that roasOS ships. Both run through the same path. Refer to The roasOS skill pack.

Your software cannot make a skill or change one. A person makes a skill in roasOS. The API reads skills and runs them.

List your skills

curl "https://api.roasos.com/v1/skills?limit=20" \
  -H "Authorization: Bearer roasos_sk_..."
{
  "data": [
    {
      "id": "7c2a3f10-...",
      "slug": null,
      "name": "Weekly hook test",
      "description": "Three new hooks for the best ad of last week.",
      "prompt": "Find my best performing ad from the last 7 days. Write three new hooks for it. Render the first frame of each hook.",
      "use_count": 12,
      "pack_version": null,
      "created_at": "2026-07-02T09:14:00.000Z",
      "updated_at": "2026-08-18T08:02:11.000Z"
    },
    {
      "id": "855acde9-c801-4076-97cd-b08de3985705",
      "slug": "roasos:remix-ad",
      "name": "Remix an ad",
      "description": "Recreate a reference ad for your own product.",
      "prompt": "…the prompt that roasOS ships for this skill…",
      "use_count": 4,
      "pack_version": 1,
      "created_at": "2026-08-23T00:00:00.000Z",
      "updated_at": "2026-08-23T00:00:00.000Z"
    }
  ],
  "meta": { "has_more": false }
}

The list holds the skills of your workspace and the skills of the roasOS pack. slug tells the two apart: a workspace skill has null, and a pack skill has its roasos: name. pack_version follows the same rule, and it is null on a workspace skill.

This page shortens the prompt of a pack skill in its examples. The API always answers with the whole text.

The list gives one page. Send the cursor value from meta to read the next page. Refer to Pagination.

Read one skill

curl https://api.roasos.com/v1/skills/7c2a3f10-... \
  -H "Authorization: Bearer roasos_sk_..."

The answer holds the same object under data. Read prompt. It is the exact text that the run uses.

A pack skill answers to its slug as well as to its id.

curl https://api.roasos.com/v1/skills/roasos:remix-ad \
  -H "Authorization: Bearer roasos_sk_..."

A skill in a different workspace returns 404.

Run a skill

POST /v1/skills/{id}/runs starts the run. The body states no text, because the prompt of the skill is the text. The body states the money only.

Quote first. Set quote_only to true.

curl -X POST https://api.roasos.com/v1/skills/7c2a3f10-.../runs \
  -H "Authorization: Bearer roasos_sk_..." \
  -H "Idempotency-Key: weekly-hook-test-2026-08-21" \
  -H "Content-Type: application/json" \
  -d '{
    "max_credits": 20,
    "generation_spend_cap_credits": 30,
    "quote_only": true
  }'
{
  "data": {
    "schema_version": "agent-run@1",
    "kind": "agent_run",
    "id": "9e51b704-...",
    "trigger": "skill",
    "skill_id": "7c2a3f10-...",
    "conversation_id": null,
    "status": "quoted",
    "max_credits": 20,
    "generation_spend_cap_credits": 30,
    "credits_reserved": 0,
    "credits_max": 50,
    "pricing_version": "agent-token-pricing@2026-10-04.v3",
    "quote_id": "5a7d9c02-...",
    "expires_at": "2026-08-21T09:12:40.000Z",
    "authorization": { "status": "auto_approved" },
    "created_at": "2026-08-21T09:02:40.000Z",
    "updated_at": "2026-08-21T09:02:40.000Z"
  }
}

Then confirm with the quote_id and the same idempotency key. The answer is 202.

curl -X POST https://api.roasos.com/v1/skills/7c2a3f10-.../runs \
  -H "Authorization: Bearer roasos_sk_..." \
  -H "Idempotency-Key: weekly-hook-test-2026-08-21" \
  -H "Content-Type: application/json" \
  -d '{
    "max_credits": 20,
    "generation_spend_cap_credits": 30,
    "quote_id": "5a7d9c02-..."
  }'

Read the run at /v1/agent-runs/9e51b704-.... The trigger is skill, and skill_id names the skill. Refer to Runs.

The body can omit both caps. The run then uses the defaults: 25 credits for the thinking, and 0 credits for paid work. A run with a cap of 0 leaves each paid action as an approval for a person.

The body must still carry quote_only or a quote_id. roasOS rejects a paid call that carries neither, exactly as it does on every other paid path.

roasOS adds 1 to use_count after the run starts. A typed workflow door counts too: a run of POST /v1/workflows/remix is a use of roasos:remix-ad.

The roasOS skill pack

roasOS ships twelve skills. Every workspace has them from the first day. No workspace can change them.

SlugNamepack_versionWhat it does
roasos:analyze-adAnalyze an ad1Read one reference ad. Report the hook, the structure, the one thing worth stealing, and one caution.
roasos:remix-adRemix an ad13Analyze one ad, rewrite the script for your product, cast the person and the product, then price the storyboard on its approval card.
roasos:discover-formatDiscover a format1Read a product URL, find the ad format that fits it, then draft and price the storyboard.
roasos:localize-adLocalize an ad13Take one finished ad into another language and another market, and price each step first.
roasos:statics-factoryMake static ads12Turn one product into a set of static ads: pick the lane, write the copy, quote every variant on one card, then render them all. It also makes headline variants and resize packs from a winning static.
roasos:recast-actorRecast the actor13Read who is on screen in one of your own clips, cast the replacement, then recast the footage.
roasos:street-interviewStreet interview ad6Make a vox-pop UGC ad. A stranger's honest admission sells the product. One card, rendered after the yes.
roasos:clone-staticClone a static ad6Rebuild a reference static's layout for your product. Structure from the reference, brand from your kit, new copy.
roasos:animated-storyAnimated story ad5Make a claymation or animated story ad. A personified problem loses to the product. One approval card.
roasos:song-adSong ad9Make a song ad. The product name, one benefit and the call to action are sung. The song is the whole soundtrack of one finished ad.
roasos:product-effectsProduct effects11Make a product effect clip or ad with no person: giant product, bullet time, macro splash, packshot closer, ASMR or levitation. The label stays readable.
roasos:tiktok-slideshowTikTok slideshow14Make a TikTok photo slideshow: 5 to 8 slides at 9:16 with the text drawn in and one soft product plug, all quoted on one card.

A pack skill is a skill, not a second kind of object. It has the same fields, the same run path, and the same meter as a skill that your workspace wrote.

One card, and eight quotes on it

A pack skill puts the whole price of a step on one approval card. One card carries at most eight quotes, so a step that renders a set stops at eight.

roasos:statics-factory therefore makes 1 to 8 static ads in one call, and a request for a ninth answers 400 validation_error. roasos:remix-ad fans out at most two variants of one board for the same reason. Refer to Spend caps and approvals.

Address a pack skill by slug or by id

The path takes both forms.

curl -X POST https://api.roasos.com/v1/skills/roasos:remix-ad/runs \
  -H "Authorization: Bearer roasos_sk_..." \
  -H "Idempotency-Key: remix-glow-serum-001" \
  -H "Content-Type: application/json" \
  -d '{ "generation_spend_cap_credits": 120, "quote_only": true }'

Use the slug. It is stable, and a person can write it from memory. The UUID answers the same run.

Any other value answers 400 validation_error. A slug has the form roasos: and 1 to 60 lower-case letters, digits or hyphens. Only roasOS writes a slug.

Two pack skills also have a typed door. POST /v1/workflows/remix is the door onto roasos:remix-ad, and POST /v1/workflows/statics is the door onto roasos:statics-factory. Send a typed body to the door when your software knows the product and the source. Run the skill by slug when you want to state the work in your own words. Refer to Remix an ad and to Make static ads.

A pack skill is read-only

No workspace can edit a pack skill, and no workspace can delete one. The pack belongs to no workspace, and every write path in roasOS filters on the workspace. There is no API operation that changes a skill of either kind.

Copy the prompt into a skill of your own to make a version you control.

The pack has a version

pack_version is the revision of one prompt, and not the revision of the whole pack. roasOS raises the number of a skill when it rewrites that skill's prompt. Two of the nine skills are still at 1, roasos:localize-ad is at 2, roasos:recast-actor is at 3, roasos:animated-story is at 5, and the four skills revised in the 2026-08-31 alignment pass are at 6. The prompt field is always the exact text that the next run uses. Read it when your software depends on the steps.

use_count on a pack skill counts the runs of every workspace, because the pack is one shared record. use_count on your own skill counts your workspace only.

The fields of a skill

FieldMeaning
idThe identifier. Use it on the run path.
slugThe roasos: address of a pack skill. null for a workspace skill.
nameThe name in roasOS. 1 to 60 characters.
descriptionAn optional line about the skill.
promptThe text that the run uses. 1 to 4,000 characters.
use_countThe number of times that the skill ran.
pack_versionThe revision of the prompt of a pack skill. null for a workspace skill.
created_at, updated_atThe times of the record.

A skill holds no model, no tool list, and no input schema. The agent chooses the tools and the models for each run, exactly as it does for an ask.

Errors

StatusCodeCause
400validation_errorThe skill id is not a UUID and not a roasos: slug, or the cursor or limit is not valid
400idempotency_key_requiredThe Idempotency-Key header is absent on a run
400quote_requiredThe body has no quote_only value and no quote_id
400spend_cap_exceeds_policyThe ceiling is more than the maximum price for one request of the key
402approval_requiredThe ceiling is more than the unattended limit of the key
402insufficient_creditsYour workspace does not have sufficient credits for the ceiling
404—roasOS cannot find the skill in your workspace
409—The idempotency key was used again with different data
410quote_expiredQuote the run again under a new idempotency key
429rate_limit_exceededToo many requests
429daily_credit_budget_exceeded, monthly_credit_budget_exceededThe budget of the key has no space
503skill_store_unavailableThe skill store is not available at this time

A skill run uses the same door as an ask, so it gives the same answers. Refer to Errors at the door.

From an agent

Three MCP tools cover this page: roasos_list_skills, roasos_get_skill, and roasos_run_skill. roasos_run_skill obeys the same quote rule as every paid tool. It takes a slug as well as an id, so an agent can run roasos:remix-ad without a lookup. Refer to Connect an AI agent (MCP).

On this page