Skills and Agent SDKs — Anthropic Skills, AGENTS.md, OpenAI Apps SDK
> MCP says "what tools exist." Skills say "how to do a task." The 2026 stack layers both. Anthropic's Agent Skills (open standard, December 2025) ship as SKILL.md with progressive disclosure. OpenAI's Apps SDK is MCP plus widget metadata. AGENTS.md (now in 60,000+ repos) sits at the repo root as project-level agent context. This lesson names what each covers and builds a minimal SKILL.md + AGENTS.md bundle that travels across agents.
Type: Learn
Languages: Python (stdlib, SKILL.md parser and loader)
Prerequisites: Phase 13 · 07 (MCP server)
Time: ~45 minutes
Learning Objectives
- Distinguish the three layers: AGENTS.md (project context), SKILL.md (reusable know-how), MCP (tools).
- Write a SKILL.md with YAML frontmatter and progressive disclosure.
- Load skills filesystem-style into an agent runtime.
- Compose a skill with an MCP server and an AGENTS.md so one package works in Claude Code, Cursor, and Codex.
The Problem
An engineer distills a release-notes-writing workflow into a multi-step prompt: "Read the latest merged PRs. Group by area. Summarize each. Write a changelog entry following the team's style. Post to Slack draft." They put it in a Notion doc for their team.
Now they want to use this workflow from Claude Code, Cursor, and Codex CLI. Each agent has a different way to load instructions: Claude Code slash-commands, Cursor rules, Codex .codex.md. The engineer copies the workflow three times and maintains three copies.
AGENTS.md and SKILL.md together fix this:
- AGENTS.md sits at the repo root. Every compatible agent reads it on session start. "How does this project work? What are the conventions? Which commands run tests?"
- SKILL.md is a portable bundle: YAML frontmatter (name, description) + markdown body + optional resources. Agents that support skills load them by name on demand.
- MCP (Phase 13 · 06-14) handles the tools the skill needs to invoke.
Three layers, one portable artifact.
The Concept
AGENTS.md (agents.md)
Launched late 2025, adopted by 60,000+ repos by April 2026. One file at repo root. Format:
# Project: my-service
## Conventions
- TypeScript with strict mode.
- Use Pydantic for models on the Python side.
- Tests run with `pnpm test`.
## Build and run
- `pnpm dev` for local dev server.
- `pnpm build` for production bundle.
Agents read this on session start and use it to calibrate their behavior for that project. Every coding agent in 2026 supports AGENTS.md: Claude Code, Cursor, Codex, Copilot Workspace, opencode, Windsurf, Zed.
SKILL.md format
Anthropic's Agent Skills (released as an open standard December 2025):
name: release-notes-writer
description: Write a changelog entry for the latest merged PRs following this project's style.
---
# Release notes writer
When invoked, run these steps:
1. List PRs merged since the last tag. Use `gh pr list --base main --state merged`.
2. Group by label: feature, fix, chore, docs.
3. For each PR in each group, write one line: `- <title> (#<num>)`.
4. Draft the release notes and stage them in CHANGELOG.md.
If the user says "ship", run `git tag vX.Y.Z` and `gh release create`.
## Notes
- Never include commits without a PR.
- Skip "chore" entries from the public changelog.
Frontmatter declares the skill's identity. The body is the prompt shown to the model when the skill loads.
Progressive disclosure
Skills can reference sub-resources that the agent fetches only when needed. Example:
skills/
release-notes-writer/
SKILL.md
style-guide.md
template.md
scripts/
generate.sh
SKILL.md says "see style-guide.md for the style rules." The agent pulls style-guide.md only when the skill is actively running. This avoids bloating the prompt with detail the model may not need.
Filesystem discovery
Agent runtimes scan known directories for SKILL.md files:
~/.anthropic/skills/*/SKILL.md- Project
./skills/*/SKILL.md ~/.claude/skills/*/SKILL.md
Loading is by folder name and frontmatter name. Claude Code, Anthropic Claude Agent SDK, and SkillKit (cross-agent) all follow this pattern.
Anthropic Claude Agent SDK
@anthropic-ai/claude-agent-sdk (TypeScript) and claude-agent-sdk (Python) load skills at session start, expose them as callable "agents" inside the runtime. The agent loop dispatches to a skill when the user invokes it.
OpenAI Apps SDK
Launched October 2025; built directly on MCP. Unifies OpenAI's prior Connectors and Custom GPT Actions under a single developer surface. An Apps SDK app is:
- An MCP server (tools, resources, prompts).
- Plus widget metadata for ChatGPT's UI.
- Plus an optional MCP Apps
ui://resource for interactive surfaces.
Same protocol, richer UX.
Cross-agent portability via SkillKit
Tools like SkillKit and similar cross-agent distribution layers translate a single SKILL.md into the native format of each of 32+ AI agents (Claude Code, Cursor, Codex, Gemini CLI, OpenCode, etc.). One source of truth; many consumers.
The three-layer stack
| Layer | File | Loaded when | Purpose |
|---|---|---|---|
| AGENTS.md | repo root | session start | project-level conventions |
| SKILL.md | skills directory | skill invoked | reusable workflow |
| MCP server | external process | tools needed | callable actions |
All three compose: the agent reads AGENTS.md on session start, the user invokes a skill, the skill's instructions include MCP tool calls, the agent dispatches via an MCP client.
Use It
code/main.py ships a stdlib SKILL.md parser and loader. It discovers skills under ./skills/, parses the YAML frontmatter plus markdown body, and produces a dict keyed by skill name. It then simulates an agent loop that invokes release-notes-writer by name.
What to look at:
- YAML frontmatter parsed with a minimal stdlib parser (no
pyyamldependency). - Skill body stored verbatim; agent prepends it to the system prompt on invocation.
- Progressive disclosure demoed via a
read_subresourcefunction that pulls referenced files on demand.
Ship It
This lesson produces outputs/skill-agent-bundle.md. Given a workflow, the skill produces the combined SKILL.md + AGENTS.md + MCP-server-blueprint bundle, portable across agents.
Exercises
- Run
code/main.py. Add a second skill underskills/and confirm the loader picks it up.
- Write an AGENTS.md for this course repo. Include testing commands, style conventions, and the Phase 13 mental model.
- Port a multi-step workflow from your team's internal docs into a SKILL.md. Verify it loads in Claude Code.
- Translate the skill into Cursor's and Codex's native rule formats by hand. Count the diff between formats — this is the translation surface SkillKit automates.
- Read the Anthropic Agent Skills blog post. Identify one feature in the Claude Agent SDK that this lesson's loader does not cover. (Hint: agent sub-invocation.)
Key Terms
| Term | What people say | What it actually means |
|---|---|---|
| SKILL.md | "The skill file" | YAML frontmatter plus markdown body, loaded by agent runtime |
| AGENTS.md | "Repo-root agent context" | Project-level conventions file read on session start |
| Progressive disclosure | "Lazy-load sub-resources" | Skill body references files pulled only when needed |
| Frontmatter | "YAML block at top" | Metadata (name, description) in --- delimiters |
| Claude Agent SDK | "Anthropic's skill runtime" | @anthropic-ai/claude-agent-sdk, loads skills and routes |
| OpenAI Apps SDK | "MCP + widget meta" | OpenAI's dev surface built on MCP plus ChatGPT UI hooks |
| Skill discovery | "Filesystem scan" | Walk known dirs for SKILL.md, key by name |
| Cross-agent portability | "One skill many agents" | Translate one SKILL.md to 32+ agents via SkillKit-style tools |
| Agent Skill | "Portable know-how" | Reusable task template outside MCP's tool concept |
| Apps SDK | "MCP plus ChatGPT UI" | Connectors and Custom GPTs unified on MCP |
Further Reading
- Anthropic — Agent Skills announcement — December 2025 launch
- Anthropic — Agent Skills docs — SKILL.md format reference
- OpenAI — Apps SDK — MCP-based developer platform for ChatGPT
- agents.md — AGENTS.md format and adoption list
- Anthropic — anthropics/skills GitHub — official skill examples