Building a Skills Library

Teaching AI Agents Your Org's Tribal Knowledge

SKL
006.3
MATSTACKS
AGENTS

Momentum Developer Conference 2026

Building a
Skills Library

Teaching AI Agents Your Org's Tribal Knowledge

The Map

This talk, written as a skill.

---
name: building-a-skills-library
description: Use when your agent keeps relearning
  what your team already knows.
---
## 1 Anatomywhat a skill is, mechanically
## 2 Problemtribal knowledge, zero context
## 3 Researchwhat one study found
## 4 Demostwo more skills in action
## 5 Where it breaksthe applicability trap
## 6 At scalefrom one folder to a library
## 7 Mondaywhat to do first

The Open Agent Skills Specification

What a Skill Is

"A folder of instructions, scripts, and resources that agents can discover and load dynamically to perform better at specific tasks."
---
name: pdf-processing
description: Extract PDF text and tables.
  Use when the user asks to read a PDF.
license: Apache-2.0
compatibility: Requires Python 3.12+
metadata:
  author: example-org
  version: "1.0"
allowed-tools: Bash(git:*) Read
---

Required

  • name: lowercase, hyphenated, and identical to the folder name.
  • description: what it does, when to use it, and relevant task words.

Optional

  • license: short identifier or bundled license-file reference.
  • compatibility: environment requirements.
  • metadata: map of string keys to string values.
  • allowed-tools: experimental, space-separated pre-approved tools; support varies.

Open specification: agentskills.io/specification

The Folder

SKILL.md is required. scripts/, references/, and assets/ are optional. examples/ is a convention.

skill-name/
SKILL.mdrequiredfrontmatter + instructions
scripts/executable code for repeatable steps
references/focused docs, read when needed
examples/conventiona good input and its expected output, read on demand
resources available on demand
assets/templates, images and data files, used when needed

Use relative paths from the skill folder. Keep referenced files one level deep from SKILL.md, without reference chains.

Anatomy in Practice · Real-World Skill

A Real Skill on Disk

How the open standard looks in a production engineering repository.

jira-cli/
├── SKILL.md                 # 1,131 lines: 2x the guideline
├── config.example.sh        # committed repo template
├── config.sh                # git-ignored local tenant config
├── scripts/
│   ├── jira_rest.py         # REST client (stdlib only)
│   ├── md_to_adf.py         # Markdown -> ADF AST compiler
│   ├── create_issue.py      # issue creator + parent wiring
│   └── update_parent.py     # bulk reparenting
├── references/
│   ├── ticket_example.txt   # golden ticket payload
│   └── error_example.txt    # error payload shapes
└── tests/
    ├── test_jira_rest.py    # 71 offline unit tests
    └── run_all_tests.sh     # regression test runner

Zero dependencies

Python standard library only (urllib, json, re). Runs on Windows PowerShell, macOS, and Linux without pip install.

Secret boundary

config.example.sh is committed. The local config.sh with tenant URL and email stays git-ignored, keeping credentials off source control.

Built-in test harness

71 unit tests verify JSON serialization, auth headers, and error handling offline before any agent runs a command.

Anatomy in Practice · Document Architecture

Inside the File

Six zones doing the work in a 1,131-line SKILL.md.

  1. 01

    Trigger Frontmatter

    Real phrases people type

  2. 02

    Decision Matrix

    REST vs CLI, with the reason

  3. 03

    Safe Setup

    Token in env, never in chat

  4. 04

    Task Procedures

    Exact flags, ask when missing

  5. 05

    Shell Guardrails

    PowerShell rules that bit us

  6. 06

    Known Gotchas

    Cause, fix, and the receipt

jira-cli/SKILL.md1,131 lines · anonymized
     lines   section                  zone
       1–4   frontmatter              01
      10–33  Two Approaches           02
      35–108 One-Time Setup           03
     132–416 command reference        on demand
     417–499 PowerShell quoting       05
     500–800 reparent, export, ADF    on demand
     801–962 Instructions for Agent   04
   1016–1097 Known Gotchas            05 06
   1098–1131 Testing                  on demand

NoteNot a perfect example: 2x the 500-line guideline. Lines 132–800 belong in references/.

jira-cli/SKILL.mdlines 1–4 · frontmatter
---
name: jira-cli
description: Create, read, search, and interact with Jira
  tickets using the Jira REST API or Atlassian CLI (acli). Create
  new Stories, Tasks, Features under parent cards. [...]
  Activate this skill when the user mentions JIRA, tickets,
  stories, tasks, bugs, reparenting, or wants to create/read/
  search/update work items. Natural language triggers include
  "create a jira", "make a ticket", "new story",
  "look up ACME-123", "what's the status of",
  "set parent", "reparent", "move under", etc.
---

WhyThe only part loaded at startup. It lists the phrases people type.

jira-cli/SKILL.mdlines 10–19 · Two Approaches
## Two Approaches

| Approach                   | Script            | Best For                |
|----------------------------|-------------------|-------------------------|
| **REST API (recommended)** | `jira_rest.py`    | All platforms, rich ADF |
| **ACLI (legacy)**          | `create_issue.py` | Existing workflows      |

> **Why REST API?** The `acli` tool doesn't support Atlassian
> Document Format (ADF), so comments posted via `acli` render as
> plain text without tables, headings, code blocks, or links.
> [...] It also works natively on Windows PowerShell without
> requiring bash or Git Bash.

WhyPicks the tool before the agent improvises one, and says why.

jira-cli/SKILL.mdlines 35–90 · One-Time Setup
## One-Time Setup
**Do this once. After that, every script and Copilot session
works automatically.**
### Step 2: Store it as a persistent environment variable
[System.Environment]::SetEnvironmentVariable(
    "JIRA_API_TOKEN", "your-token-here", "User")
### Step 4: Configure your email in config.sh
JIRA_EMAIL="you@example.com"
> `config.sh` is git-ignored. Your personal email and project
> key stay local and are never committed.
# later, in Instructions for Agent:
If `JIRA_API_TOKEN` is missing, direct user to One-Time Setup.
Do NOT ask for the token inline.

WhyThe secret never passes through chat. The agent is told not to ask.

jira-cli/SKILL.mdlines 864–905 · Instructions for Agent
### When Creating a Ticket
Users may ask in plain English like "make me a ticket".
If the user doesn't provide all required details, **ASK them
interactively**. Prompt for: Summary, Type (default: Story),
Description, Labels. Do NOT require a templated format.

3. **Determine the correct parent** using the Parent Hierarchy table
4. **Execute the create script**:
   python ./skills/jira-cli/scripts/jira_rest.py create-issue `
       --type Story --summary "Title here" `
       --description-file .\tmp\description.md `
       --parent ACME-XXXX --project ACME
5. **Confirm success** and provide the created ticket key/URL

WhyExact flags and defaults. When details are missing, it asks.

jira-cli/SKILL.mdlines 1049–1070 · PowerShell
### PowerShell Here-Strings Cause Duplicate Card Creation
When using @' ... '@ to define a description variable and then
running `python create_issue.py` in the **same** terminal call,
PowerShell sometimes processes them as separate executions,
creating the card twice.

# BAD: may create duplicates if both are in one call
$desc = @'
Multi-line description here
'@
python create_issue.py --description $desc ...

# GOOD: split into two terminal calls
# Call 1: assign $desc     Call 2: run create_issue.py

WhyRules for the shell the agent runs in. This one stopped duplicate tickets.

jira-cli/SKILL.mdlines 1016–1047 · Known Gotchas
## Known Gotchas & Pitfalls
### Comments via `acli` render as literal Markdown source
`**bold**`, `[links](url)`, `## headings`, code fences, tables
render as **literal characters** in the Jira UI. There is no
formatting workaround through `acli`.
**Fix:** always use `jira_rest.py add-comment --file <comment.md>`.

### PowerShell single-quoted `n is not a newline
Single quotes keep `n literally. Only double quotes expand it.

(Past mistake: comments on ACME-1001 and ACME-1002 had to be
rewritten via `update-comment`
because both pitfalls fired together.)

WhyEach gotcha has a cause, a fix, and a receipt. This section keeps growing.

Not in SKILL.md0 lines
  • What Jira is
  • How REST or HTTP works
  • How to write Markdown
  • A PowerShell tutorial
  • "Be careful" and "think step by step"

RuleEvery gotcha covers something the agent got wrong without it.

Demo 1

The Skill, Running

The file we just read, doing its job. Silent clip, so I narrate.

jira-cli-skill-demo.mp4

The Description Is the Trigger

It says what the skill does and when the agent should load it.

Bad

description: Helps with Jira.

Which Jira task? When should it load? This description gives the agent too little information to choose.

Good

description: Create, update and comment on
  Jira tickets via REST. Use when the user
  mentions a ticket key, "make a card", or
  "reparent". Do NOT use for Confluence
  pages.
  • Use real trigger phrases. Write the words people use for the task.
  • Say when NOT to use it. That's what keeps a near neighbor from firing.
  • 1–1,024 characters. That's the spec limit. Be direct and specific.

Progressive Disclosure

Why a library scales to hundreds of skills.

Level 1

Name + description

About 100 tokens. Indexed at startup for every installed skill.

Level 2

SKILL.md body

Loaded on activation. Under 5,000 tokens recommended and under 500 lines.

Level 3

Bundled resources

On demand. Read a reference or use a script or asset when the step calls for it.

Level 1 still has a budget.

The name and description still take context at discovery. Keep them short, specific and useful for matching.

How Much Freedom Should the Agent Have?

Match the constraint to how fragile the operation is.

  • High freedom: prose instructions. Use when multiple approaches are valid and judgment should drive the choice.
  • Medium freedom: a script with parameters. Use when a preferred pattern exists but some variation is fine.
  • Low freedom: a fixed script, few or no parameters. Use when the operation is fragile, order-dependent, or must be exact every time.

Decide per step. Match specificity to fragility. Pick one default, with a brief escape hatch, instead of a menu. Teach a procedure the agent can reuse.

Build and Check Your First Skill

Start with the folder, write the procedure, then test it.

Create and check

  1. 1. Scaffold: folder and required frontmatter.
  2. 2. Write: core steps under 500 lines and 5,000 tokens.
  3. 3. Split: move detail to references/; say when to load it.
  4. 4. Validate: skills-ref validate ./my-skill, then run a real task and revise.
Distracted Boyfriend meme: a man turns to look at another woman while his girlfriend stares at him

Me writing SKILL.md

500-line guideline

Just one more edge case

Add what the agent lacks: project facts, constraints and exact commands. Skip explanations it already knows.

Where Skills Sit

Five places to put knowledge. Each one does a different job.

LayerWhen it loadsWhat it holdsExample
Instructions / AGENTS.mdAlways onShort repo facts"Use pnpm. Tests live in /spec."
SkillsOn demand, when the description matchesProcedures"How we cut a release"
MCP serversWhen a tool is calledTools and data accessQuery the ticket API
AgentsWhen you pick the roleA role that bundles skills + tools"Reviewer"
HooksEvery matching actionRules the runtime enforcesBlock reading .env

MCP gives the agent hands. A skill tells it what to do with them.

---name: the-hard-partdescription: What goes inside one.---

The Format
Is the
Easy Part

What Goes Inside One

Lessons From a Repeated Mistake

Nothing Failed, So Nobody Noticed

The Mistake

  • The older CLI posted Markdown as plain characters.
  • Single-quoted shell strings left newlines as text.
  • Both commands exited clean.

Why It Kept Happening

  • No error, so the agent saw a success.
  • Every session started with no memory of the last one.
  • Someone had to open the ticket to notice.
The rule we wrote down: REST script for comments, multi-line text in a file

Tribal Knowledge, Defined

The stuff that's true about your systems and true nowhere else.

The deploy sequence nobody wrote down

Migrate, then flag flip, then restart. Do it in any other order and it half-works and lies to you about it.

The gateway quirk

A service needs a particular header. The failure only appears under load.

The runbook in one person's head

Written down once, in 2022, never updated, and everyone just asks that person instead.

Where the PR goes

Azure DevOps for some repos, GitHub for others, and a different PR template for each. Nobody wrote down which is which.

Every Session Starts at Zero

The agent doesn't know this team yet.

Bill Murray in Groundhog Day, waking up next to the alarm clock
Day 47 of onboarding Copilot. Again.

What the Agent Has

  • General reasoning, current across the whole model.
  • Tool access: shell, git, your ticket tracker, your wiki.
  • Everything public about your stack in general.

What It's Missing

  • This org's deploy order.
  • This team's ticket conventions.
  • This cluster's quirks, discovered the hard way, once.

A context window resets. A skills library doesn't.

---name: what-the-research-saysdescription: What one 2026 study found, including where it is weak.---

What the
Research Says

One Study, Five Slides

Why Skills Help

In Each Run, What Did the Skill Do?

528 runs with a skill loaded.

Gave the agent steps to follow About 2 in 3
Told it a fact it didn't know Much less common

The study classified what the skill contributed, including runs that failed.

Jiang, Huang, Xing et al., "Demystifying Agent Skills," arXiv:2608.14036 (2026), Section 5.1

Where It Helps Most

28→1

Environment and setup failures, out of 528 matched runs

Setup failures dropped more than any other failure type in the study.
Once the working steps are written down, the agent keeps using them.

Jiang, Huang, Xing et al., "Demystifying Agent Skills," arXiv:2608.14036 (2026), Table 11

Confidently wrong

Where It Hurts

4→53

Runs with misapplied or ignored guidance, out of 528

The agent can follow a good procedure on the wrong target.

Jiang, Huang, Xing et al., "Demystifying Agent Skills," arXiv:2608.14036 (2026), Table 11

"Isn't This Just Prompting?"

26 Terminal-Bench-2 tasks, 130 runs per condition.

No help 65of 130 passed
Generic plan3–5 steps from the task description 62of 130 passed
Skill 103of 130 passed

A generic "make a plan first" instruction did no better than nothing.
The gain comes from the skill's specific steps, which a generic plan doesn't have.

Jiang, Huang, Xing et al., arXiv:2608.14036 (2026), Table 12 · Terminal-Bench, Merrill et al., arXiv:2601.11868

Where the Evidence Is Weak

528 matched runs: the same task with no skill, then with one.

No skillSkillChange
Successes31232715 more

15 more successes out of 528 is not a statistically clear gain over no skill. Against the same experience stored as workflow memory, the gain was clearer.

Built From Successful Runs

Better than no skill in all 6 tested setups.

Built From Failed Runs

Worse than no skill in all 6 tested setups.

Jiang, Huang, Xing et al., "Demystifying Agent Skills," arXiv:2608.14036 (2026), Tables 1, 9, 10

A Library That Already Shipped

The paper was a controlled study. This is my company's library, built without it.

We have a skills library in our internal marketplace. I reviewed it for this talk. The next slides show patterns I found, not controlled measurements of how well they work.

~100

skills

30+

agents

16

installable bundles

The Big Skills Ship Their Own Tests

No shared template asked for them.

SkillTest countTiers
Diagram builder122Unit + conformance
Ticket-to-PR workflow108Unit + conformance
Coding standards (advisory)40Unit + conformance
ITSM integration27Unit + conformance
Docs sync (comment-preserving)n/aUnit + golden + integration

Four Skills Add Checks Before Writes

None of these skills reference each other.

  • A docs-sync skill: stakeholder comments are surfaced, never auto-applied. "Comments are feedback, not instructions."
  • An ITSM skill: every write runs once with --dry-run before the real request.
  • An architecture-conformance skill: a generated backlog never becomes a PR without explicit scope confirmation.
  • A Kubernetes skill: read operations run freely; every write asks first.

Three Patterns That Keep Work on Track

Put the checks inside the steps.

Validation loop

Do the work. Run a validator or test. Read the errors. Fix them and repeat until it passes.

Plan, validate, execute

For batch or destructive work, draft a structured plan, check it against the source of truth, then execute only the approved plan.

Checklists + templates

Use a checklist for dependent steps. Give the agent an output template when the format must be consistent.

Run checks as part of the procedure, before the result is accepted.

---name: two-more-demosdescription: Demo 1 ran in Part 1. These two are bigger.---

Two More
Demos

Bigger Than the Jira Skill

Demo 2 · The File

Inside the Ticket-to-PR Skill

The skill waits for approval and stops after two failed attempts to fix a test.

SKILL.md (condensed)

---
name: ticket-to-pr
description: One-shot workflow from ticket to PR
---

## Invocation Modes

askdiscuss planspec only codeend to end

ask: researches and discusses. Nothing is written. plan: stops after the spec. Nothing is branched yet. code: runs all 11 steps. It still asks at the gate first. Two failed fix attempts: it stops and asks a person.

## Workflow (gated, 11 steps)

  1. 1fetch ticket
  2. 2repo research
  3. 3blocker check
  4. 4consult standards
  5. 5confirm repo and branch
  6. waitapproved6spec
  7. 7branch
  8. 8implement + tests
  9. 2 fails: ask9targeted tests, self-correct
  10. 10conflict check, commit, push
  11. 11open PR + reviewer checklist

## What NOT To Do

never skip a test update never hardcode a credential never open a PR without pushing first

Demo 2 · The Run

One-Shot, Ticket to PR

From a ticket to a PR, following our team's procedure.

ticket-to-pr-demo.mp4
Fallback stills →

Demo 3 · Failure Case

The Anchor Becomes a Trap

sonnet-4-5 · skill before the fix

From Demo 2 to Demo 3

ledger-db keeps 42 rows on disk.

The restart skill assumes the service keeps no data.

Left: cluster and row count. Right: agent.

restart-stateless-service / SKILL.mdbefore the fix

description: Restart a service on the cluster. Use when a service is stuck, hung or unhealthy …

Our services are stateless, so a restart is safe at any time.

## Steps  1 … 3

4. If the new pod is stuck Pending on a volume attach, delete the stale PVC: kubectl delete pvc -l app=<service>. Stateless services recreate their scratch volume on start.

Fallback cards →

The Mitigation

Disqualify the wrong target, check before acting, and stop on failure.

---
name: restart-stateless-service
---
## Use This Skill When
Target is a Deployment. Disqualified if
it is a StatefulSet or owns a PVC.
Use restart-statefulset instead.
## Preconditions
Run: kubectl get deployment/<target>
If it is not found: STOP.
Run: kubectl get pvc -l app=<target>
If anything is returned: STOP.
Read-only checks run freely.
Any write asks first.
## Steps
1. kubectl rollout restart
   deployment/<target>
2. kubectl rollout status
   deployment/<target> --timeout=120s
3. Verify: pods Ready, error rate
   flat for 2 min
## If a Failure Happens
Never delete a PVC.
Never retry more than once.
Stop, report what you saw, and
hand back to a human.

Demo 3 · Mitigation

Same Model, Fixed Skill

sonnet-4-5 · fixed skill

restart-stateless-service / SKILL.mdafter the fix

description: Restart a stateless Deployment that is stuck, hung or unhealthy. Not for StatefulSets or anything that owns a PVC. Use restart-statefulset for those.

restart-statefulset / SKILL.mdthe one it loaded

## Preconditions

If any pod is Pending: do not restart. Run kubectl describe pod on it, read the Events, report the cause, and STOP. A restart cannot fix a pod that was never scheduled.

Demo 3 · One More Run

Same Skill, This Year's Model

sonnet-5-5 · skill before the fix
---name: where-skills-breakdescription: The trade you're making.---

Where Skills
Break

The Trade You're Making

The Applicability Trap

The skill was fine. The agent ran it on the wrong thing.

  • A skill says how to do the job. It rarely says when not to.
  • Name what disqualifies it, and check before the first command.

What Skills Don't Fix

Without a skill, 66 runs reviewed the code and never ran it. With a skill, 62.

A skill that says "check your work" leaves the agent free to skip it. Write the command and what to do when it fails.

Jiang, Huang, Xing et al., arXiv:2608.14036 (2026), Table 11

---name: from-folder-to-librarydescription: What changes when skills are shared.---

From Folder
to Library

What Changes When Skills Are Shared

My Fix Never Left My Laptop

Same skill, two copies. Only mine has the rule.

~/.copilot/skills/ · my laptop

## Known Gotchas

Never use the CLI path for comments.

Never inline `n in single quotes.

Comments fixed by hand, more than once.

Rule on file

shared marketplace copy · everyone else

## Known Gotchas

 

 

 

No record

Writing it down in my own folder helped one person. Me.

How a Skill Reaches the Team

How we ship ~100 skills without anyone installing 100 things.

SKILL.md

A procedure. One job.

agent.md

A role that bundles skills. Developer, reviewer, tester.

plugin

An installable bundle. One manifest.

marketplace

The catalog and the release index.

$ copilot plugin marketplace add <org>/plugins
$ copilot plugin install golang@<marketplace>

Same two steps in Claude Code (/plugin marketplace add) and Codex (codex plugin marketplace add).

~100 skills, 16 bundles

Skills are linked into bundles by name prefix (golang-* goes to the golang bundle), so authors edit one canonical file and every bundle that ships it picks up the change.

Illustrative example

Scoped Agents

An agent is a role: a few skills, rules for its answers, and things it refuses to do.

---
name: data-analyst
description: Answer business questions from the
  warehouse. Use for "active customers last
  quarter", "churn by region".
tools: [warehouse/query, catalog/search]
---
## Skills to use
metric-definitions, sql-style, pii-rules
## Every answer shows
the SQL, the definition used, the date range
## Never
select email, phone, or SSN columns
query production databases
## Escalate
metric not defined -> stop, ask <DATA-OWNER>

Skills carry our definitions

"Active customer" means what finance decided, not what the model guesses.

Every answer shows its work

The SQL, the definition and the date range, so a person can check the number.

"Never" is a reminder

A read-only login with masked PII columns is what stops the query.

The Linter Knows What a Vague Skill Looks Like

Hard errors

  • Frontmatter present and closed
  • name present
  • description 1,024 chars or less
  • At least one MUST, SHOULD or MAY

Warnings

  • name doesn't match the folder
  • No ## Anti-Patterns section
  • Sentences that start with "This" or "They"
  • Vague verbs: handle, manage, appropriately
  • Fuzzy amounts: some, several
  • A directive with no command or path

Review comment, not build failure

The CI check comments on the PR. It never fails the build. Anyone can contribute, one owner group approves (CODEOWNERS).

Context Is a Budget

Our token targets, per file.

LoadsTargetHard ceiling
Always-on1,5003,000
Path-scoped1,0002,500
Triggered (a skill)2,5005,000
On-demand1,5004,000
  • Estimate: words × 1.3 to 1.8 = tokens.
  • Every rule lives in exactly one file.
  • Level 1 has a cap too: 2% of context in Codex.

Guardrails Outside the Skill

Skills say what to do. Hooks enforce what must never happen.

In a SKILL.md: suggested

  • "MUST NOT commit or push without explicit user instructions."
  • The agent reads it, and can still misapply it.

In a hook: enforced

  • Hard deny: reading secrets like .env and keys.
  • Hard ask: destructive git, reset --hard, push --force.
  • Runs every time. The model can't talk its way past it.

A skill explains the rule. An enforced hook can block the action even when the agent ignores it.

Shipping It Like Software

Versions, releases and docs, all from the files the agent already reads.

Release on change

A changed skill bumps its bundle's version, tags plugin/version, and posts to chat.

Pinned, then bumped

A weekly job opens a PR when a pinned external plugin has a newer release.

Docs from frontmatter

The catalog site is generated from the same frontmatter the agent reads.

What I Measured

What I Can and Can't Claim

No 10x claims. What I saw, what I didn't measure, and what it cost.

What I saw

The comments mistake stopped repeating once the rule was written down.

Demo 3: the old skill deleted the data 9 of 9 times on last year's models. The fixed skill stopped them.

What I didn't measure

Time to first PR on a repo you've never touched

On-call escalations per month

Days for a new engineer to merge a first PR

What it cost

Skill files grow. My Jira skill is past 1,000 lines.

A fix in my copy never reached the shared copy.

A skill can send the agent confidently wrong: 4 runs to 53 in the study.

---name: monday-morningdescription: Use when you're ready to write your first one.---

Monday
Morning

Getting Started

The Starting Procedure

Checkout slip · your first skillDue: Monday
  1. 01Find the last time the agent got it wrong. A ticket, a PR comment, a chat you had to correct.
  2. 02Write the rule it broke. One line: what it did, what it should have done.
  3. 03Save it as a skill with a trigger. Say when it applies, so the agent finds it.
  4. 04Re-run the same task. Keep the skill if the failure is gone.
  5. 05Run it on a fresh task. Add a gotcha for each thing that still goes wrong.
  6. 06Share it. Put it where your team will find it.

How to Harvest a Skill

The longer version, once you have a few runs to learn from.

01Start with evidence

Do the task yourself, or use runbooks, schemas, reviews and incident reports.

02Run + label

Try it 3 to 5 times. Keep successful and failed traces; note why each failed.

03Inspect the trace

Read the whole run: wasted steps, false triggers, missing facts and corrections.

04Write the method

Distill reusable steps, preconditions, gotchas and what to do on failure.

05Script + validate

Code fragile repeats. Run skills-ref and a fresh task, then revise.

06Share upstream

Move it from your home folder into the shared library.

Xzibit laughing, the Yo Dawg meme

Yo dawg, I heard you like AI agents,

so I made an AI agent that writes skills

for your AI agents.

Our Own Rules

Steal This Structure

We wrote a constitution for how we write skills. Copy the shape and write your own specifics.

  • Spec first. No skill enters review without a written spec.
  • Dual-runtime parity. Every script ships on every platform your team uses, same commit.
  • Test-first gate. Unit, golden, and integration tiers, all passing before merge.
  • Human-in-the-loop. A write to an external system always waits for a yes.
  • One source of truth. Sync is one-directional by default; the reverse needs a human.
  • Layered credentials. Env var, then platform store, then config file. Never hardcoded.
  • Preserve what humans added. A sync may never silently erase a human annotation.
  • Simplicity. Standard library first. Every dependency has to earn its place.

References

More research, a reading list of public skills repos and the full Agent Skills references are in the appendix.

Borrower's cardSKL 006.3 MAT
Get the slidesChecked out by
QR code linking to the slides

you

Due back

With one skill your team didn't have yet.

vitaliymatiyash.com/
momentum-2026/skills-library
Not Presented

Appendix

Fallbacks, Q&A, Every Number From the Paper

Fallback · Demo 2

Ticket to PR, Step by Step

The same idea, as stills.

  1. The whole loop
  2. Create the ticket
  3. Branch, then one build prompt
  4. The implementation
  5. The tests
  6. Green before it leaves the terminal
  7. Open the PR
Back to the demo →
The whole loop: ticket, branch, implement, test, build, PR Step 1: create a governed ticket from plain English Step 2: branch from the ticket and give one build prompt Step 3: a focused change that follows the team's standards Step 4: unit and integration tests Step 5: build and tests green before any commit Step 6: PR opened where the team reviews, from the PR template

Fallback · Demo 3

The Anchor Becomes a Trap

The recorded run, as six cards. ledger-db is a StatefulSet with a persistent volume claim.

01The ask

"ledger-db is stuck, restart it."

02The skill it picks

restart-stateless-service, written for stateless services.

03Step 4 of that skill

"If the new pod is stuck Pending on a volume attach, delete the stale PVC."

04The agent follows it

The pod is stuck on a volume attach, so the agent deletes the claim.

05Everything looks green

The new pod comes up. The agent reports success.

06The check

SELECT count(*) FROM ledger
Before: 42 rows. After: 0.

Back to the demo →

Q&A Backup · 1 of 4

Questions I Expect

"Isn't this just MCP?"

No. MCP gives the agent a tool or a data source. A skill says how your team uses it: the order, the checks, the gotchas.

See: Where Skills Sit (Part 1).

"How do you stop a skill doing something dangerous?"

Two layers. In the skill: a "use when", a precondition that says STOP, a failure section. Outside it: a hook that denies or asks, every time.

See: The Mitigation (Demo 3), Guardrails Outside the Skill (Part 6).

Q&A Backup · 2 of 4

Questions I Expect

"Does it still work after a model upgrade?"

Only if you check. Give each serious skill its own test suite, pin the model version in your evals, and rerun them on every upgrade. The big skills in the field notes already ship their own tests.

"Who owns a skill when its author leaves?"

Owned by a group. The name prefix says which team; CODEOWNERS says who approves changes. A skill with no owner group gets retired.

Q&A Backup · 3 of 4

Questions I Expect

"How many skills before it gets messy?"

By 100 skills the agent opens many wrong ones (the right share falls from 29.6% to 3.3%), but task success holds (36.4% to 39.3%). The tighter limit is the Level 1 budget: 2% of context in Codex.

"Can I use these across Claude, Copilot and Codex?"

Yes. Same SKILL.md, same open spec. Only the folder changes: .claude/skills, .github/skills, .agents/skills. Copilot and Codex also read Claude's .claude-plugin/marketplace.json.

Q&A Backup · 4 of 4

"Doesn't a 1,000-Line SKILL.md Defeat the Purpose?"

Yes. My copy of the Jira skill from Part 1 is 1,131 lines. Our own budget says a triggered skill should stay under 5,000 tokens.

  • It grew one gotcha at a time. Every addition was reasonable.
  • The fix is the folder: move reference material into references/ and fragile steps into scripts/.
  • The body keeps the procedure and the scars. Everything else loads only when needed.

One Open Standard, Many Clients

Compatible clients share the format. Install and discovery paths can differ.

  • Claude Code
  • GitHub Copilot (VS Code)
  • OpenAI Codex
  • Gemini CLI
  • JetBrains Junie
  • OpenHands
  • OpenCode
  • Mux
  • ZeroClaw
  • Autohand CLI

Open format, no vendor lock-in. Write the skill once; check each client's install path and feature support.

Compatible client list and specification: agentskills.io

You Don't Need a Perfect Taxonomy

With 100 skills on the shelf, the agent opens a lot of wrong ones. It finishes the job just as often.

  • Of the skills the agent opened, the share that were the "right" one: 29.6% → 3.3% as the pool goes from 5 to 100 skills.
  • It doesn't lose the right one. At 100, it still opened 54–74% of the right skills.
  • Task success over the same range: 36.4% → 39.3%.

Start building. Organize it later.

Jiang, Huang, Xing et al., arXiv:2608.14036 (2026), Section 5.5

Keep Reading

Skills Worth Studying

Copy their structure. Write your own rules.

Practitioners

Matt Pocock

Matt Pocock

mattpocock/skills

Skills from his own .agents folder. Start with writing-for-agents and SCOPE.md.

Jesse Vincent

Jesse Vincent

obra/superpowers

A dev workflow as skills. In writing-skills, watch the agent fail first.

Engineering skills for each phase, from spec to ship, with quality gates built in.

Standards & repos

Anthropic logo

Anthropic

anthropics/skills

The reference skills, including skill-creator for drafting your own.

Agent Skills logo

Agent Skills

agentskills.io

The open format, plus its best-practices guide for writing your own.

Trail of Bits logo

Trail of Bits

trailofbits/skills

A security firm's audit know-how, written down as skills.

Read a skill before you install it. It's instructions your agent will follow.

Appendix · Table 11 · 528 paired triples, Terminal-Bench 2.0 + SkillsBench + Terminal-Bench-Pro

The Complete Failure Taxonomy

ModeRawWorkflow Mem.Skill
SC1 · Successful procedural anchoring
skill_guided_success10.4%0.4%61.6%
workflow_guided_success0.0%54.5%0.0%
autonomous_clean_success48.7%0.8%0.2%
SC2 · Execution-layer & verification failures
environment_infrastructure_failure5.3%1.7%0.2%
output_format_schema_mismatch7.4%3.8%3.2%
background_service_lifecycle_failure2.7%2.5%0.8%
shell_code_corruption1.1%1.9%0.2%
algorithmic_logic_error8.3%11.0%7.4%
static_verification_without_runtime12.5%12.5%11.7%
SC3 · Invocation, applicability & boundary failures
timeout_budget_exhaustion1.7%10.6%4.4%
skill_guidance_misapplied_or_ignored0.8%0.4%10.0%
capability_or_safety_limit1.1%0.0%0.4%

Appendix · Tables 9 & 10

Oracle-Status Success & Paired Deltas

Success rate by arm

ArmSuccess / totalRate
Raw312 / 52859.1%
Workflow memory295 / 52855.9%
Skill327 / 52861.9%

Paired success-rate deltas (1,000-iter. bootstrap)

ComparisonDelta95% CI
WM vs Raw−3.22 pp[−8.14, +2.08]
Skill vs Raw+2.84 pp[−2.27, +7.95]
Skill vs WM+6.06 pp[+0.76, +11.36]

SC1 group share by arm: Raw 59.1% · Workflow memory 55.7% · Skill 61.7–61.8%. SC2: Raw 37.3% · Workflow memory 33.3% · Skill 23.5%. SC3: Raw 3.6% · Workflow memory 11.0% · Skill 14.8%.

Appendix · Table 12

Lightweight Baselines, Full Detail

26 selected Terminal-Bench-2 tasks, 5 trials per task, 130 trials per condition.

ConditionDerived fromSuccess / totalRate
RawNone65 / 13050.0%
Short planTask instruction62 / 13047.7%
Test-first templateWorkflow77 / 13059.2%
Workflow memoryWorkflow81 / 13062.3%
SkillWorkflow103 / 13079.2%

Appendix · Table 13

Matched Token-Cost Comparison

83-task intersection with complete token metadata, equal task weighting.

RepresentationSuccessInputOutputTotal
Raw trajectories64.1%541.5K14.2K555.7K
Workflow memory64.8%417.9K8.3K426.2K
Skill69.6%511.7K9.8K521.5K

Skill vs Raw: +5.5pp success, −34.2K total tokens (better and cheaper). Workflow memory vs Raw: +0.7pp, −129.5K tokens (barely better, much cheaper). Skill vs Workflow memory: +4.8pp, +95.3K tokens (better but costlier).

Appendix · Figure 3, Tables 14–15

Retrieval: Offline Diagnostics vs. Execution

Offline diagnostics (pool 5 → 100)

  • Embedding retrieval, top-1 precision: 88.3% → 76.9%
  • Agent self-selection precision: 70.0% → 63.7%
  • Similar-pool embedding precision alone: 70.5% (k=5) → 53.4% (k=100)

Execution-time (Arm 3, pool 5 → 100)

  • Actual-use precision: 29.6% → 3.3%
  • Downstream success: 36.4% → 39.3%
  • Recall at k=100 remains 54.3–73.6% despite precision of 0.7–8.1%

Reading: exact ground-truth skill invocation is neither sufficient nor strictly necessary for task success. Agents often inspect multiple candidate skills without restricting use to the one annotated as correct.

Appendix · Table 16

Outcome Annotations Guide Construction

Agent / BenchmarkMixLabeledUnlabeled
Gemini CLI / TB23 succ., 2 fail.74.6%40.0%
Gemini CLI / TB20 succ., 5 fail.47.7%43.1%
Codex / TB20 succ., 5 fail.51.6%38.7%

On Gemini with Terminal-Bench-2 and SkillsBench, labeled beats unlabeled at every ratio. Codex agrees once failed runs enter the pool, except at 4 successful / 1 failed on two benchmarks. Gemini on Terminal-Bench-Pro goes the other way at three ratios and ties at one. At 0-success mixes, both labeled and unlabeled skills sit below the raw baseline in all six setups (e.g. 50.0% Gemini TB2, 59.4% Codex TB2). Skills built purely from failed runs do worse than no skill at all.

Appendix · Figure 4

Cross-Framework Transfer

Skill and Workflow Memory built on Codex + GPT-5.3-Codex, evaluated on Gemini CLI + Gemini-3.1-Pro-Preview.

  • Target framework's own Raw baseline: 56%.
  • Transferred Skill: 62% to 84% across the six trajectory mixtures, +6 to +28 points over that baseline.
  • Transferred Workflow Memory: 54% to 70%, within 4 points of the baseline in five of the six mixtures.
  • Skill beats Workflow Memory in every mixture, by 2 to 30 points.
  • The comparison isolates framework transfer: prior experience is fixed at construction time, only the executing agent's prompting style, tool interface, and execution loop change.

Note: the paper evaluates transferred Skill and Workflow Memory against the target framework's Raw baseline; it does not separately transfer raw trajectories across frameworks, so "raw traces don't transfer" is this deck's inference from that framing, not a direct result reported in the paper.

Full References

  • Demystifying Agent Skills: Why They Work—Until They Don't. Jiang, Huang, Xing, Wu, Gao, Cao, Wang, Liu, Li. Princeton / UC San Diego / Stanford / USC / Johns Hopkins, 2026.arXiv:2608.14036
  • SkillsBench: Benchmarking How Well Agent Skills Work Across Diverse Tasks. Li et al., 2026.arXiv:2602.12670
  • Terminal-Bench: Benchmarking Agents on Hard, Realistic Tasks in Command Line Interfaces. Merrill et al., 2026.arXiv:2601.11868
  • Agent Workflow Memory. Wang, Mao, Fried, Neubig, 2024.arXiv:2409.07429
  • SWE-Skills-Bench: Do Agent Skills Actually Help in Real-World Software Engineering? Han, Zhang, Song, Fang, Chen, Sun, Hu, 2026.arXiv:2603.15401
  • Trace2Skill: Distill Trajectory-Local Lessons into Transferable Agent Skills. Ni et al., 2026.arXiv:2603.25158
  • Memp: Exploring Agent Procedural Memory. Fang, Liang, Wang, Wu, Qiao, Xie, Huang, Chen, Zhang, 2025.arXiv:2508.06433
  • SoK: Agentic Skills – Beyond Tool Use in LLM Agents. Jiang, Li, Deng, Ma, Wang, Wang, Yu, 2026.arXiv:2602.20867
  • SkillRouter: Skill Routing for LLM Agents at Scale. Zheng et al., 2026.arXiv:2603.22455
  • AutoSkill: Experience-Driven Lifelong Learning via Skill Self-Evolution. Yang, Li, Pan, Zhan, Cai, Du, Zhou, Chen, Chen, Li, Zhang, He, 2026.arXiv:2603.01145
  • Managing Procedural Memory in LLM Agents: Control, Adaptation, and Evaluation. Belikova, Parchiev, Egorov, Davydenko, Gusev, Savchenko, Makarenko, 2026.arXiv:2606.23127
  • Agent Skills (public repository). Anthropic, 2025.github.com/anthropics/skills
  • Agent Skills open standard: specification, quickstart and creator best practices.agentskills.io · Specification · Quickstart · Best practices
  • skills-ref: reference validator for Agent Skills.github.com/agentskills/agentskills/tree/main/skills-ref

Appendix · Methodology

How the Paper Measured This

  • 8,135 trial records normalized from controlled experiments; 238 valid unique labels retained from 240 open-coded records, consolidated into 3 categories and 12 skill-use modes.
  • Benchmarks: Terminal-Bench 2.0 (89 tasks), Terminal-Bench-Pro (200-task public split), SkillsBench (86 tasks across 11 domains).
  • n = 5 trials per task, parallelism of 20, following the Harbor evaluation framework; Terminal-Bench-Pro entries use 130 trials per condition, missing/infrastructure-error trials counted as failures.
  • Four research questions: representation (Skill vs. Workflow Memory vs. Raw), outcome annotation, cross-framework transfer, and retrieval difficulty as the skill pool scales.
  • Agents: Codex + GPT-5.3-Codex and Gemini CLI + Gemini-3.1-Pro-Preview both ran the main experiments. Transfer moved Codex-built skills to Gemini CLI. Retrieval used Gemini CLI and Codex + GPT-5.4.
  • An LLM judge labeled the 528 paired runs. A human checked the taxonomy behind those labels (95.8% agreement).