{
    "componentChunkName": "component---src-templates-blog-detail-tsx",
    "path": "/blog/ai-skills/",
    "result": {"data":{"site":{"siteMetadata":{"siteTitleShort":"Developer Portfolio"}},"markdownRemark":{"id":"b2021467-3a09-57f4-b80c-d7e9cb2ad37d","excerpt":"One Folder, Every Agent I’ve written before about Claude Code skills, but skills have since outgrown any single tool. The format Anthropic released as an open…","html":"<h2>One Folder, Every Agent</h2>\n<p class=\"lead\">A year ago, customizing an AI agent meant rewriting the same prompt over and over, once for each tool you used. Today there's a shared format — Agent Skills — that lets you write a workflow once and run it in Claude Code, Codex, Gemini CLI, Copilot, and more. This post is a practical guide to what skills are, how to use them, and where to find the good ones.</p>\n<p>I’ve written before about <a href=\"/blog/claude-code/\">Claude Code skills</a>, but skills have since outgrown any single tool. The format Anthropic released as an open standard has been adopted across the ecosystem, and a whole layer of registries and tooling has grown up around it. If you’ve been treating skills as a Claude-only feature, this is the post that reframes them as something portable, shareable, and worth investing in regardless of which agent you reach for.</p>\n<h3>What an AI Skill Actually Is</h3>\n<p>Strip away the marketing and a skill is almost disappointingly simple: it’s a folder containing a single <code class=\"language-text\">SKILL.md</code> file. That file has a small block of YAML frontmatter — at minimum a <code class=\"language-text\">name</code> and a <code class=\"language-text\">description</code> — followed by plain-English instructions telling the agent how to perform a task. That’s the whole core of the standard.</p>\n<div class=\"gatsby-highlight\" data-language=\"markdown\"><pre class=\"language-markdown\"><code class=\"language-markdown\"><span class=\"token front-matter-block\"><span class=\"token punctuation\">---</span>\n<span class=\"token front-matter yaml language-yaml\">name: changelog\ndescription: Generate a changelog entry from staged git changes.\n  Use when the user asks to write a changelog or release note.</span>\n<span class=\"token punctuation\">---</span></span>\n\n<span class=\"token title important\"><span class=\"token punctuation\">##</span> Writing a changelog entry</span>\n\n<span class=\"token list punctuation\">1.</span> Run <span class=\"token code-snippet code keyword\">`git diff --staged`</span> to see what changed.\n<span class=\"token list punctuation\">2.</span> Group changes under Added, Changed, Fixed, Removed.\n<span class=\"token list punctuation\">3.</span> Write each entry in past tense, user-facing language.\n<span class=\"token list punctuation\">4.</span> Skip internal refactors that don't affect behavior.\n<span class=\"token list punctuation\">5.</span> Prepend the entry to <span class=\"token code-snippet code keyword\">`CHANGELOG.md`</span> under an <span class=\"token code-snippet code keyword\">`## [Unreleased]`</span> heading.</code></pre></div>\n<p>That’s a real, working skill. There’s no SDK, no compilation step, no API to register against. The agent reads the description, decides the skill is relevant, loads the instructions, and follows them. A skill is procedural knowledge written down in a format an agent knows how to find and read.</p>\n<p>The frontmatter is the contract. The <code class=\"language-text\">name</code> is the slug you’d type to invoke it. The <code class=\"language-text\">description</code> is the single most important line you’ll write, because it’s the only thing the agent sees until the skill is actually needed. More on that in a moment.</p>\n<p>A skill folder can hold more than just <code class=\"language-text\">SKILL.md</code>. You can bundle:</p>\n<ul>\n<li><strong>Scripts</strong> the agent runs as part of the workflow — a Python helper, a shell script, a linter config.</li>\n<li><strong>Reference files</strong> — API docs, style guides, schemas — that get loaded only when the instructions point to them.</li>\n<li><strong>Templates</strong> — boilerplate the agent fills in, like a PR description or a component scaffold.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">my-skill/\n├── SKILL.md          # metadata + instructions (always read)\n├── reference.md      # loaded only when SKILL.md links to it\n├── template.tsx      # a scaffold the agent copies\n└── validate.py       # a script the agent can execute</code></pre></div>\n<p>This bundling is what separates a skill from a saved prompt. A prompt is text; a skill is text plus the resources and executable steps needed to actually carry the work out.</p>\n<h3>Why the Format Matters: Progressive Disclosure</h3>\n<p>The clever part of the design is how skills are loaded. At startup, the agent reads only the <strong>name and description</strong> of every installed skill — roughly a hundred tokens each. The full instructions, the reference files, the scripts: none of that enters the context window until a task actually matches the skill’s description.</p>\n<p>This is called progressive disclosure, and it’s the reason you can have fifty skills installed without drowning your agent in irrelevant context. Each skill costs almost nothing until it’s needed, then expands to full detail on demand. It’s the difference between handing someone an entire library versus handing them a card catalog and letting them pull the one book they need.</p>\n<p>The practical consequence: write descriptions that are precise about <em>when</em> a skill applies, not just <em>what</em> it does. A vague description like “helps with testing” forces the agent to guess. A sharp one — “Use when the user asks to write or fix a Vitest unit test, or when a test file is open and failing” — gives it a clear trigger. The description is doing matching work, not marketing work.</p>\n<h3>The Open Standard and Why It’s Portable</h3>\n<p>The Agent Skills format was developed by Anthropic and released as an <a href=\"https://agentskills.io\">open standard</a>. The specification lives at agentskills.io and is open to contributions from the wider ecosystem. The significance isn’t the spec document itself — it’s who adopted it.</p>\n<p>As of mid-2026, the same <code class=\"language-text\">SKILL.md</code> folder works across a growing list of tools:</p>\n<table>\n<thead>\n<tr>\n<th>Tool</th>\n<th>Vendor</th>\n<th>Skill support</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Claude Code</td>\n<td>Anthropic</td>\n<td>Native</td>\n</tr>\n<tr>\n<td>Codex CLI</td>\n<td>OpenAI</td>\n<td>Native</td>\n</tr>\n<tr>\n<td>Gemini CLI</td>\n<td>Google</td>\n<td>Native</td>\n</tr>\n<tr>\n<td>GitHub Copilot</td>\n<td>Microsoft</td>\n<td>Via VS Code agent skills</td>\n</tr>\n<tr>\n<td>Cursor</td>\n<td>Anysphere</td>\n<td>Manual placement</td>\n</tr>\n<tr>\n<td>Cline / Windsurf / OpenCode</td>\n<td>Community</td>\n<td>Supported</td>\n</tr>\n</tbody>\n</table>\n<p>Write a skill once and it follows you across all of them. If your team standardizes on a deployment checklist as a skill, that checklist works whether a given engineer prefers Claude Code in the terminal or Copilot in VS Code. The investment compounds because it isn’t locked to a vendor.</p>\n<p>This is a genuine shift. Most AI tooling so far has been proprietary and non-transferable — your ChatGPT custom instructions don’t move to another assistant. Skills break that pattern by being a plain-text, version-controllable, tool-agnostic format. They behave like source code, because effectively they are.</p>\n<h3>How to Actually Use Skills</h3>\n<p>There are three things you’ll do with skills: install them, invoke them, and write your own.</p>\n<h4>Installing Skills</h4>\n<p>Skills live in conventional locations the agent scans automatically. The exact paths vary slightly by tool, but the Claude Code convention is representative:</p>\n<table>\n<thead>\n<tr>\n<th>Scope</th>\n<th>Path</th>\n<th>Applies to</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Personal</td>\n<td><code class=\"language-text\">~/.claude/skills/&lt;name>/SKILL.md</code></td>\n<td>All your projects</td>\n</tr>\n<tr>\n<td>Project</td>\n<td><code class=\"language-text\">.claude/skills/&lt;name>/SKILL.md</code></td>\n<td>One repository</td>\n</tr>\n</tbody>\n</table>\n<p>Personal skills are for habits that follow you everywhere — your commit message style, your preferred way of explaining code. Project skills encode team conventions and get committed to version control, so every contributor and every fresh checkout inherits the same playbook. When a new engineer clones the repo, the skills come with it.</p>\n<p>Installing a skill is, at its simplest, dropping a folder in the right place. That’s also why distribution matters — and why registries exist.</p>\n<h4>Invoking Skills</h4>\n<p>Skills run two ways:</p>\n<ol>\n<li><strong>Explicitly</strong>, by typing the skill’s name as a command (e.g. <code class=\"language-text\">/changelog</code>). You’re telling the agent exactly which playbook to follow.</li>\n<li><strong>Automatically</strong>, when the agent reads a skill’s description, decides it matches the current task, and loads it on its own.</li>\n</ol>\n<p>The automatic path is where skills feel magical — you ask for a changelog in plain language and the agent quietly pulls in your <code class=\"language-text\">changelog</code> skill without being told. The explicit path is your override for when you want a specific behavior guaranteed.</p>\n<p>For skills with side effects — deploying, deleting, sending messages — you generally want to disable automatic invocation so they only ever run when you type the command. In Claude Code that’s a frontmatter flag:</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token punctuation\">---</span>\n<span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> deploy\n<span class=\"token key atrule\">description</span><span class=\"token punctuation\">:</span> Deploys the app to production.\n<span class=\"token key atrule\">disable-model-invocation</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span>\n<span class=\"token punctuation\">---</span></code></pre></div>\n<p>This is a safety boundary worth respecting: read-only skills can be automatic; anything destructive should be explicit-only.</p>\n<h4>Writing Your Own</h4>\n<p>The best first skill is a workflow you’ve explained to an agent more than twice. Open a folder, write a <code class=\"language-text\">SKILL.md</code>, and keep it tight:</p>\n<ul>\n<li><strong>Lead with a sharp description.</strong> It’s the trigger. Say what the skill does <em>and</em> when to use it.</li>\n<li><strong>Keep <code class=\"language-text\">SKILL.md</code> short</strong> — under a few hundred lines. Push detailed reference material into separate files the instructions link to, so it loads only when needed.</li>\n<li><strong>Write imperative steps.</strong> Numbered lists the agent can follow literally beat prose.</li>\n<li><strong>Bundle the resources.</strong> If the workflow needs a template or a script, put it in the folder rather than describing it.</li>\n</ul>\n<p>The mindset shift: you’re not prompt-engineering, you’re writing documentation for a colleague who happens to read fast and never remembers between sessions.</p>\n<h3>Where to Find Skills: skills.sh and the Registry Layer</h3>\n<p>Once skills became portable packages, the natural next step was an npm-style registry — somewhere to publish, discover, and install them. That layer arrived fast. The ecosystem went from a single registry in late 2025 to a handful of major marketplaces by Q2 2026.</p>\n<p>The most visible is <a href=\"https://www.skills.sh/\"><strong>skills.sh</strong></a>, billed as “The Agent Skills Directory.” It works like a package registry crossed with a leaderboard. Every skill page shows an install count, which platforms it’s compatible with, and a one-line install command. There are rankings by all-time installs, by 24-hour trending, and by what’s “hot” right now. It has tracked tens of thousands of unique skills, which gives the trending lists real signal rather than being a static list.</p>\n<p>Treating skills like packages and the directory like a registry is what makes sharing scale. Instead of emailing a folder around, you publish once and anyone can install with a command. Teams can standardize on a published skill and get updates the same way they’d update a dependency.</p>\n<p>A few directories worth knowing, beyond skills.sh:</p>\n<ul>\n<li><strong>skills.sh</strong> — large catalog, leaderboards, broad platform compatibility tags.</li>\n<li><strong>SkillsMP / SkillsLLM</strong> — competing catalogs with their own curation.</li>\n<li><strong>agentskills.io</strong> — the standard itself, with documentation and a reference set of skills.</li>\n</ul>\n<p>One honest caveat: a registry is not a quality gate. The big catalogs are open, which means anyone can publish, and a skill is just instructions plus <em>executable scripts</em> that your agent will run. That’s a real trust surface. Before you install a third-party skill — especially one with bundled scripts — read the <code class=\"language-text\">SKILL.md</code>, look at what the scripts actually do, and check the install count and source as weak signals of legitimacy. Treat an unknown skill the way you’d treat an unknown npm package with a postinstall hook: useful, but worth a glance first.</p>\n<h3>A Mental Model That Sticks</h3>\n<p>If you take one framing away, make it this. Persistent project context — your architecture, your conventions, the stuff every session needs — belongs in an always-loaded file like <code class=\"language-text\">CLAUDE.md</code>. On-demand playbooks — how to deploy, how to write a changelog, how to scaffold a component — belong in skills, loaded only when the task calls for them.</p>\n<p>Context files answer “what is this project?” Skills answer “how do I do this specific thing?” Together they turn a general-purpose agent into one that knows both your codebase and your team’s way of working — and because skills are portable, that knowledge isn’t trapped in whichever tool you happened to set it up in.</p>\n<h3>Getting Started</h3>\n<p>You don’t need a grand plan. Pick the single workflow you re-explain to your agent most often — the one where you find yourself typing the same paragraph of instructions every few days. Write it as a <code class=\"language-text\">SKILL.md</code>. Use it for a week. Refine the description until the agent reaches for it at the right moments without being told.</p>\n<p>Then browse <a href=\"https://www.skills.sh/\">skills.sh</a> for the obvious wins others have already solved — changelog generators, test scaffolders, commit formatters — and install the ones that fit. As your collection grows, the savings compound: every session starts with the agent already knowing how you work, and every teammate who clones the repo inherits the same playbooks for free.</p>\n<p>The format is open, the registries are public, and the skill you write today works in tools that don’t exist yet. That’s a rare kind of durable investment in a field that reinvents itself every few months.</p>\n<p>‘Till next time!</p>","rawMarkdownBody":"\n## One Folder, Every Agent\n\n<p class=\"lead\">A year ago, customizing an AI agent meant rewriting the same prompt over and over, once for each tool you used. Today there's a shared format — Agent Skills — that lets you write a workflow once and run it in Claude Code, Codex, Gemini CLI, Copilot, and more. This post is a practical guide to what skills are, how to use them, and where to find the good ones.</p>\n\nI've written before about [Claude Code skills](/blog/claude-code/), but skills have since outgrown any single tool. The format Anthropic released as an open standard has been adopted across the ecosystem, and a whole layer of registries and tooling has grown up around it. If you've been treating skills as a Claude-only feature, this is the post that reframes them as something portable, shareable, and worth investing in regardless of which agent you reach for.\n\n### What an AI Skill Actually Is\n\nStrip away the marketing and a skill is almost disappointingly simple: it's a folder containing a single `SKILL.md` file. That file has a small block of YAML frontmatter — at minimum a `name` and a `description` — followed by plain-English instructions telling the agent how to perform a task. That's the whole core of the standard.\n\n```markdown\n---\nname: changelog\ndescription: Generate a changelog entry from staged git changes.\n  Use when the user asks to write a changelog or release note.\n---\n\n## Writing a changelog entry\n\n1. Run `git diff --staged` to see what changed.\n2. Group changes under Added, Changed, Fixed, Removed.\n3. Write each entry in past tense, user-facing language.\n4. Skip internal refactors that don't affect behavior.\n5. Prepend the entry to `CHANGELOG.md` under an `## [Unreleased]` heading.\n```\n\nThat's a real, working skill. There's no SDK, no compilation step, no API to register against. The agent reads the description, decides the skill is relevant, loads the instructions, and follows them. A skill is procedural knowledge written down in a format an agent knows how to find and read.\n\nThe frontmatter is the contract. The `name` is the slug you'd type to invoke it. The `description` is the single most important line you'll write, because it's the only thing the agent sees until the skill is actually needed. More on that in a moment.\n\nA skill folder can hold more than just `SKILL.md`. You can bundle:\n\n- **Scripts** the agent runs as part of the workflow — a Python helper, a shell script, a linter config.\n- **Reference files** — API docs, style guides, schemas — that get loaded only when the instructions point to them.\n- **Templates** — boilerplate the agent fills in, like a PR description or a component scaffold.\n\n```\nmy-skill/\n├── SKILL.md          # metadata + instructions (always read)\n├── reference.md      # loaded only when SKILL.md links to it\n├── template.tsx      # a scaffold the agent copies\n└── validate.py       # a script the agent can execute\n```\n\nThis bundling is what separates a skill from a saved prompt. A prompt is text; a skill is text plus the resources and executable steps needed to actually carry the work out.\n\n### Why the Format Matters: Progressive Disclosure\n\nThe clever part of the design is how skills are loaded. At startup, the agent reads only the **name and description** of every installed skill — roughly a hundred tokens each. The full instructions, the reference files, the scripts: none of that enters the context window until a task actually matches the skill's description.\n\nThis is called progressive disclosure, and it's the reason you can have fifty skills installed without drowning your agent in irrelevant context. Each skill costs almost nothing until it's needed, then expands to full detail on demand. It's the difference between handing someone an entire library versus handing them a card catalog and letting them pull the one book they need.\n\nThe practical consequence: write descriptions that are precise about *when* a skill applies, not just *what* it does. A vague description like \"helps with testing\" forces the agent to guess. A sharp one — \"Use when the user asks to write or fix a Vitest unit test, or when a test file is open and failing\" — gives it a clear trigger. The description is doing matching work, not marketing work.\n\n### The Open Standard and Why It's Portable\n\nThe Agent Skills format was developed by Anthropic and released as an [open standard](https://agentskills.io). The specification lives at agentskills.io and is open to contributions from the wider ecosystem. The significance isn't the spec document itself — it's who adopted it.\n\nAs of mid-2026, the same `SKILL.md` folder works across a growing list of tools:\n\n| Tool | Vendor | Skill support |\n| --- | --- | --- |\n| Claude Code | Anthropic | Native |\n| Codex CLI | OpenAI | Native |\n| Gemini CLI | Google | Native |\n| GitHub Copilot | Microsoft | Via VS Code agent skills |\n| Cursor | Anysphere | Manual placement |\n| Cline / Windsurf / OpenCode | Community | Supported |\n\nWrite a skill once and it follows you across all of them. If your team standardizes on a deployment checklist as a skill, that checklist works whether a given engineer prefers Claude Code in the terminal or Copilot in VS Code. The investment compounds because it isn't locked to a vendor.\n\nThis is a genuine shift. Most AI tooling so far has been proprietary and non-transferable — your ChatGPT custom instructions don't move to another assistant. Skills break that pattern by being a plain-text, version-controllable, tool-agnostic format. They behave like source code, because effectively they are.\n\n### How to Actually Use Skills\n\nThere are three things you'll do with skills: install them, invoke them, and write your own.\n\n#### Installing Skills\n\nSkills live in conventional locations the agent scans automatically. The exact paths vary slightly by tool, but the Claude Code convention is representative:\n\n| Scope | Path | Applies to |\n| --- | --- | --- |\n| Personal | `~/.claude/skills/<name>/SKILL.md` | All your projects |\n| Project | `.claude/skills/<name>/SKILL.md` | One repository |\n\nPersonal skills are for habits that follow you everywhere — your commit message style, your preferred way of explaining code. Project skills encode team conventions and get committed to version control, so every contributor and every fresh checkout inherits the same playbook. When a new engineer clones the repo, the skills come with it.\n\nInstalling a skill is, at its simplest, dropping a folder in the right place. That's also why distribution matters — and why registries exist.\n\n#### Invoking Skills\n\nSkills run two ways:\n\n1. **Explicitly**, by typing the skill's name as a command (e.g. `/changelog`). You're telling the agent exactly which playbook to follow.\n2. **Automatically**, when the agent reads a skill's description, decides it matches the current task, and loads it on its own.\n\nThe automatic path is where skills feel magical — you ask for a changelog in plain language and the agent quietly pulls in your `changelog` skill without being told. The explicit path is your override for when you want a specific behavior guaranteed.\n\nFor skills with side effects — deploying, deleting, sending messages — you generally want to disable automatic invocation so they only ever run when you type the command. In Claude Code that's a frontmatter flag:\n\n```yaml\n---\nname: deploy\ndescription: Deploys the app to production.\ndisable-model-invocation: true\n---\n```\n\nThis is a safety boundary worth respecting: read-only skills can be automatic; anything destructive should be explicit-only.\n\n#### Writing Your Own\n\nThe best first skill is a workflow you've explained to an agent more than twice. Open a folder, write a `SKILL.md`, and keep it tight:\n\n- **Lead with a sharp description.** It's the trigger. Say what the skill does *and* when to use it.\n- **Keep `SKILL.md` short** — under a few hundred lines. Push detailed reference material into separate files the instructions link to, so it loads only when needed.\n- **Write imperative steps.** Numbered lists the agent can follow literally beat prose.\n- **Bundle the resources.** If the workflow needs a template or a script, put it in the folder rather than describing it.\n\nThe mindset shift: you're not prompt-engineering, you're writing documentation for a colleague who happens to read fast and never remembers between sessions.\n\n### Where to Find Skills: skills.sh and the Registry Layer\n\nOnce skills became portable packages, the natural next step was an npm-style registry — somewhere to publish, discover, and install them. That layer arrived fast. The ecosystem went from a single registry in late 2025 to a handful of major marketplaces by Q2 2026.\n\nThe most visible is [**skills.sh**](https://www.skills.sh/), billed as \"The Agent Skills Directory.\" It works like a package registry crossed with a leaderboard. Every skill page shows an install count, which platforms it's compatible with, and a one-line install command. There are rankings by all-time installs, by 24-hour trending, and by what's \"hot\" right now. It has tracked tens of thousands of unique skills, which gives the trending lists real signal rather than being a static list.\n\nTreating skills like packages and the directory like a registry is what makes sharing scale. Instead of emailing a folder around, you publish once and anyone can install with a command. Teams can standardize on a published skill and get updates the same way they'd update a dependency.\n\nA few directories worth knowing, beyond skills.sh:\n\n- **skills.sh** — large catalog, leaderboards, broad platform compatibility tags.\n- **SkillsMP / SkillsLLM** — competing catalogs with their own curation.\n- **agentskills.io** — the standard itself, with documentation and a reference set of skills.\n\nOne honest caveat: a registry is not a quality gate. The big catalogs are open, which means anyone can publish, and a skill is just instructions plus *executable scripts* that your agent will run. That's a real trust surface. Before you install a third-party skill — especially one with bundled scripts — read the `SKILL.md`, look at what the scripts actually do, and check the install count and source as weak signals of legitimacy. Treat an unknown skill the way you'd treat an unknown npm package with a postinstall hook: useful, but worth a glance first.\n\n### A Mental Model That Sticks\n\nIf you take one framing away, make it this. Persistent project context — your architecture, your conventions, the stuff every session needs — belongs in an always-loaded file like `CLAUDE.md`. On-demand playbooks — how to deploy, how to write a changelog, how to scaffold a component — belong in skills, loaded only when the task calls for them.\n\nContext files answer \"what is this project?\" Skills answer \"how do I do this specific thing?\" Together they turn a general-purpose agent into one that knows both your codebase and your team's way of working — and because skills are portable, that knowledge isn't trapped in whichever tool you happened to set it up in.\n\n### Getting Started\n\nYou don't need a grand plan. Pick the single workflow you re-explain to your agent most often — the one where you find yourself typing the same paragraph of instructions every few days. Write it as a `SKILL.md`. Use it for a week. Refine the description until the agent reaches for it at the right moments without being told.\n\nThen browse [skills.sh](https://www.skills.sh/) for the obvious wins others have already solved — changelog generators, test scaffolders, commit formatters — and install the ones that fit. As your collection grows, the savings compound: every session starts with the agent already knowing how you work, and every teammate who clones the repo inherits the same playbooks for free.\n\nThe format is open, the registries are public, and the skill you write today works in tools that don't exist yet. That's a rare kind of durable investment in a field that reinvents itself every few months.\n\n'Till next time!\n","frontmatter":{"title":"AI Skills","date":"20. June, 2026","description":"AI Skills are portable SKILL.md folders that teach any agent your workflows. Learn how they work, how to use them, and where to find them on skills.sh.","category":"Develop","cover":{"childImageSharp":{"gatsbyImageData":{"layout":"fixed","backgroundColor":"#d8d8c8","images":{"fallback":{"src":"/static/8088c4473a8d2cada9ff06f88a95464a/4bb82/ai-skills.png","srcSet":"/static/8088c4473a8d2cada9ff06f88a95464a/4bb82/ai-skills.png 960w","sizes":"960px"},"sources":[{"srcSet":"/static/8088c4473a8d2cada9ff06f88a95464a/56499/ai-skills.webp 960w","type":"image/webp","sizes":"960px"}]},"width":960,"height":549}}}},"fields":{"slug":"/2026-06-20_ai-skills/"}}},"pageContext":{"slug":"/2026-06-20_ai-skills/","previous":{"fields":{"slug":"/2026-05-23_vercel-ai-sdk/"},"frontmatter":{"title":"Building AI-Powered Apps with the Vercel AI SDK"}},"next":null}},
    "staticQueryHashes": ["1711471402","674253978"]}