Skills
A skill is a folder an agent loads when the job calls for it: SKILL.md with the instructions,
when to use them and how, plus any scripts and files. It is the open format Claude and the
open-source skill directories use, and on AIOUM it is a marketplace of its own: 1,505 open-source
skills indexed from public directories, free, each with its repo, commit and licence, beside
skills anyone lists on a node, per use or one-time. An agent reads a skill's instructions when it
needs them, runs its scripts on your node, and can discover skills on its own during a run and
keep the ones that worked.
The free index
npm run skills:index in offchain/ reads real public directories with the GitHub API: the
known collections (anthropics/skills and the awesome-claude-skills and awesome-agent-skills
lists), the agent-skills and claude-skills topics, code search for filename:SKILL.md above a
star threshold, and a crypto slice of its own. It fetches each SKILL.md, parses its
frontmatter, and writes offchain/skills/index.json: one entry per skill with its id, name,
description, tags, category skill:<tag>, source {repo, path, commit, url}, licence and files.
The files are cached under offchain/skills/<id>/ only when the licence allows redistribution
(MIT, Apache-2.0, BSD, CC-BY, CC0, MPL); every other skill is indexed with a link and fetched
from its repo when an agent loads it. GITHUB_TOKEN (or GH_TOKEN, or gh auth token) lifts
the rate limit; without one, 60 calls an hour and no code search.
mcpmarket.com's skills directory is a second source: the generator reads its robots.txt and
honours it (a one-second crawl delay), then its sitemaps and the newest pages, each giving a
skill's name, description, author, category and the GitHub folder it links; those entries are
link-only, via: mcpmarket, and their SKILL.md comes from the linked folder when an agent loads
it.
| Flag | Default | What it does |
|---|---|---|
--out | ./skills | where the index and the cache go |
--min-stars, --max-skills, --max-per-repo | 25, 1500, 40 | the star threshold, the size of the index, the most from one repo |
--code-search-pages | 10 | pages of GitHub code search for SKILL.md |
--crypto-slice, --crypto-min-stars, --crypto-max-repos | 150, 5, 300 | the crypto slice, indexed on its own terms |
--repos a/b,c/d | only these repos | |
--no-lists, --no-topics, --no-code-search | skip a source | |
--mcpmarket-max, --no-mcpmarket, --mcpmarket-only | 200 | the directory pages to read; skip it; refresh only it, merged into the index on disk |
--dry, --refresh, --finalize | list without writing; ignore the HTTP cache; finish a run from its work directory |
The runner reads the index from offchain/skills/ (AIOUM_SKILLS_DIR), re-checked every 30
seconds, and serves it: GET /skills?q=&tag=&category=&limit=&offset= searches the index and
the skill:* listings on the marketplace together, GET /skills/:id returns one with its
SKILL.md, GET /skills/:id/files every file of an index skill. Categories are crypto, media,
writing, research, code, data, social, ai, ops and other, each a set of tags.
The project's own skills ship with the runner. offchain/skills/own.json names their folders with
tags, a category and a licence; the runner merges each into the served index ahead of the
generator's entries, via: "own", with the name, description and licence its SKILL.md states
and every file of its folder, always Files ready, and npm run skills:index never touches
them. GET /skills, load_skill, the builder and a pipeline's skill need see them like any index
entry; a search describes one as "Ships with AIOUM", and the card shows aioum as its source.
Twelve ship, all MIT: aioum-beat-engine, aioum-cartoon-scene, aioum-voice-clone and
aioum-motion-compiler (The Beat Engine and cartoon scenes),
aioum-localize-service and
aioum-distill-model (Localize a service, distill a model),
aioum-workflow-optimizer, aioum-warm-gpu, aioum-line-cache, aioum-parallel-writer,
aioum-kit-on-demand and aioum-resume-from-failure (Speed up a project). Each is
also a marketplace listing (the skill-aioum-* templates: skill.get on the node that ships
them, one-time, at the smallest price a listing can carry), so an agent on another node hires it
like any listed skill.
In an agent
The builder's Its skills step (and --skills a,b on aioum agent create, skills in an
aioum_agent_create spec) adds skills by id: an index id such as anthropics-skills-skills-pdf,
or svc:<serviceId> for one listed on a node. How it reaches them is the same three-way choice as
services and data: Only the skills I pick, My picks first, then anything it discovers, or
Fully loose (--skills-access only|prefer|open, default prefer). Press never on a skill
and it is ruled out.
At run start each chosen skill's name and description go into the planner's brief, with a rule:
before relying on one, call load_skill with its id to read the full SKILL.md. Its files are
put in the workspace on your node under skills/<id>/ (the node's skills.install), so its
scripts run there with ws.run. With picks-first or fully loose, the planner also has
search_skills (free, eight matches at a time) and keep_skill: a skill it found and used in a
run that ends well is remembered as Picked up on its own and offered first next time; the
builder lists these with Keep and Removed.
The run log shows every load as Skill · name: "trying name" for a free one, "name · $0.50 · one-time, yours now" on a purchase, "name · bought earlier, no charge" after, "name · $0.05" for a per-use load.
Selling a skill
Anyone can list a skill on a node. The listing type is skill: the node serves skill.get {id},
returning the SKILL.md and the files, and the terms are in pricing:
- Per use (
mode: "per-use"): every load is a paid call at the price. Nothing is kept between runs. - One-time (
mode: "one-time"): an agent pays once and keeps the files, in the runner's skill cache for that agent; later loads make no call and cost nothing. The purchase is on the agent as Bought outright, with the date and the service, and goes when the agent is deleted.
The licence line is the seller's: whatever SKILL.md states as its licence is what the listing
shows, and the marketplace card and the builder show it beside the price and the terms. An
open-source skill from the index shows its repo's licence, or "no license stated".
On the Earn page, Sell a skill takes the folder as a zip or a folder already on your node
(Put it on the node: the node's POST /admin/skills answers with the SKILL.md's name,
description and licence), then a name, a category tag, the one line agents read, the Terms
(Per use or One-time), a price once per agent or per load, the usual test call and go-live.
/earn?sell=skill opens on it. From the command line and from Claude:
npx aioum sell skill ./my-skill --mode one-time --price 0.5 --category writing
npx aioum sell skill --node-dir /path/on/the/node --mode per-use --price 0.05
aioum_sell_skill takes dir, files or nodeDir, with mode, price, name,
description, category, key and stake. The listing's category is skill:<tag>; aioum skills and aioum_skills show every skill with its terms.
The marketplace's Skills section
Free and paid side by side: each card with its source (the repo with its stars, or "Listed on the marketplace" with the operator), its licence or Live state, One-time or Per use with the price, Files ready or Fetched on use, its tags, and Add to an agent, which opens the builder with the skill added.
Next: Pipelines: agent networks in one click — whole networks of agents with a project for the job, built from what is live.