Tools: Introducing skillc: The Development Kit for Agent Skills

Tools: Introducing skillc: The Development Kit for Agent Skills

Source: Dev.to

The Problem: AI Agents Forget Everything ## Agent Skills: Persistent Knowledge for AI Agents ## Enter skillc: The Development Kit ## For Skill Authors: Build with Confidence ## For Power Users: Unlock Search and Analytics ## Real-World Example: A Rust Skill ## MCP Integration: Direct Agent Access ## Getting Started ## What Will You Teach Your Agent? TL;DR: skillc helps you create, validate, and optimize reusable knowledge packages that make AI coding agents smarter. Whether you're building skills or consuming them, skillc gives you the tools to work confidently. You've probably noticed this pattern: AI agents are stateless. They don't remember your team's conventions, your favorite libraries, or that obscure API you've mastered. Every conversation starts from zero. Agent Skills solve this by giving agents persistent, structured knowledge they can reference across sessions. A skill is just a directory with a SKILL.md file: The agent reads your skill and applies that knowledge contextually. No more repeating yourself. skillc is the CLI toolkit for working with Agent Skills. It handles two distinct workflows: Creating a skill that actually helps agents requires validation. skillc provides the full authoring pipeline: The skc stats command is particularly powerful — it shows you which sections agents access most: Now you know: agents need more content on error handling and iteration. This data helps you optimize for real usage patterns. Even if you're just using skills, skillc adds superpowers: Building a skill creates a search index, so you can quickly find relevant content without reading everything manually. Here's a minimal but useful skill for Rust development. First, the SKILL.md frontmatter: Then the content with practical patterns: Error Handling section: Always use thiserror for library errors and anyhow for applications: Prefer iterators over manual loops: After publishing, any agent with this skill installed will apply these patterns automatically. skillc includes an MCP (Model Context Protocol) server, so agents can query skills directly. Add it to your agent's MCP configuration: For example, in Cursor (.cursor/mcp.json): This exposes tools like skc_search, skc_show, skc_outline, and skc_stats that agents can call programmatically — no CLI needed. The best skills come from real expertise: Your knowledge, captured once, applied forever. What skill would you create first? Drop a comment below! Templates let you quickly answer FAQs or store snippets for re-use. Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse COMMAND_BLOCK: rust-skill/ ├── SKILL.md # Metadata + instructions └── docs/ ├── patterns.md # Your coding patterns └── gotchas.md # Common pitfalls Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: rust-skill/ ├── SKILL.md # Metadata + instructions └── docs/ ├── patterns.md # Your coding patterns └── gotchas.md # Common pitfalls COMMAND_BLOCK: rust-skill/ ├── SKILL.md # Metadata + instructions └── docs/ ├── patterns.md # Your coding patterns └── gotchas.md # Common pitfalls CODE_BLOCK: skc init → skc lint → skc build → skc stats → git push ↓ ↓ ↓ ↓ ↓ scaffold validate test locally trace usage publish Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: skc init → skc lint → skc build → skc stats → git push ↓ ↓ ↓ ↓ ↓ scaffold validate test locally trace usage publish CODE_BLOCK: skc init → skc lint → skc build → skc stats → git push ↓ ↓ ↓ ↓ ↓ scaffold validate test locally trace usage publish COMMAND_BLOCK: # Create a new skill skc init rust-patterns # Validate structure, links, and quality skc lint rust-patterns # Build locally and test with your agent skc build rust-patterns # See how agents actually use your skill skc stats rust-patterns --group-by sections # Publish when ready git push origin main Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: # Create a new skill skc init rust-patterns # Validate structure, links, and quality skc lint rust-patterns # Build locally and test with your agent skc build rust-patterns # See how agents actually use your skill skc stats rust-patterns --group-by sections # Publish when ready git push origin main COMMAND_BLOCK: # Create a new skill skc init rust-patterns # Validate structure, links, and quality skc lint rust-patterns # Build locally and test with your agent skc build rust-patterns # See how agents actually use your skill skc stats rust-patterns --group-by sections # Publish when ready git push origin main COMMAND_BLOCK: $ skc stats rust-patterns --group-by sections Skill: rust-patterns Path: /Users/dev/.skillc/skills/rust-patterns Query: Sections Filters: since=<none>, until=<none>, projects=<none> Period: start=2026-01-15T09:12:33+00:00, end=2026-01-30T16:45:21+00:00 23 SKILL.md Error Handling 18 SKILL.md Iteration 12 SKILL.md Lifetimes 9 references/async.md Tokio Patterns 7 references/async.md Channel Selection 5 references/testing.md Mocking Strategies 3 references/testing.md Property Testing Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: $ skc stats rust-patterns --group-by sections Skill: rust-patterns Path: /Users/dev/.skillc/skills/rust-patterns Query: Sections Filters: since=<none>, until=<none>, projects=<none> Period: start=2026-01-15T09:12:33+00:00, end=2026-01-30T16:45:21+00:00 23 SKILL.md Error Handling 18 SKILL.md Iteration 12 SKILL.md Lifetimes 9 references/async.md Tokio Patterns 7 references/async.md Channel Selection 5 references/testing.md Mocking Strategies 3 references/testing.md Property Testing COMMAND_BLOCK: $ skc stats rust-patterns --group-by sections Skill: rust-patterns Path: /Users/dev/.skillc/skills/rust-patterns Query: Sections Filters: since=<none>, until=<none>, projects=<none> Period: start=2026-01-15T09:12:33+00:00, end=2026-01-30T16:45:21+00:00 23 SKILL.md Error Handling 18 SKILL.md Iteration 12 SKILL.md Lifetimes 9 references/async.md Tokio Patterns 7 references/async.md Channel Selection 5 references/testing.md Mocking Strategies 3 references/testing.md Property Testing CODE_BLOCK: skc build → skc search → skc stats ↓ ↓ ↓ indexing find content track usage Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: skc build → skc search → skc stats ↓ ↓ ↓ indexing find content track usage CODE_BLOCK: skc build → skc search → skc stats ↓ ↓ ↓ indexing find content track usage COMMAND_BLOCK: # Install any skill npx skills add username/awesome-skill # Compile it to enable indexing skc build awesome-skill # Full-text search across all content skc search awesome-skill "error handling" # Track what your agents are actually reading skc stats awesome-skill Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: # Install any skill npx skills add username/awesome-skill # Compile it to enable indexing skc build awesome-skill # Full-text search across all content skc search awesome-skill "error handling" # Track what your agents are actually reading skc stats awesome-skill COMMAND_BLOCK: # Install any skill npx skills add username/awesome-skill # Compile it to enable indexing skc build awesome-skill # Full-text search across all content skc search awesome-skill "error handling" # Track what your agents are actually reading skc stats awesome-skill CODE_BLOCK: --- name: rust-patterns description: "Idiomatic Rust patterns and common gotchas" --- Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: --- name: rust-patterns description: "Idiomatic Rust patterns and common gotchas" --- CODE_BLOCK: --- name: rust-patterns description: "Idiomatic Rust patterns and common gotchas" --- COMMAND_BLOCK: // Library code #[derive(thiserror::Error, Debug)] pub enum MyError { #[error("invalid input: {0}")] InvalidInput(String), } // Application code use anyhow::{Context, Result}; fn main() -> Result<()> { do_thing().context("failed to do thing")?; Ok(()) } Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: // Library code #[derive(thiserror::Error, Debug)] pub enum MyError { #[error("invalid input: {0}")] InvalidInput(String), } // Application code use anyhow::{Context, Result}; fn main() -> Result<()> { do_thing().context("failed to do thing")?; Ok(()) } COMMAND_BLOCK: // Library code #[derive(thiserror::Error, Debug)] pub enum MyError { #[error("invalid input: {0}")] InvalidInput(String), } // Application code use anyhow::{Context, Result}; fn main() -> Result<()> { do_thing().context("failed to do thing")?; Ok(()) } COMMAND_BLOCK: // ❌ Avoid let mut results = Vec::new(); for item in items { results.push(transform(item)); } // ✅ Prefer let results: Vec<_> = items.iter().map(transform).collect(); Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: // ❌ Avoid let mut results = Vec::new(); for item in items { results.push(transform(item)); } // ✅ Prefer let results: Vec<_> = items.iter().map(transform).collect(); COMMAND_BLOCK: // ❌ Avoid let mut results = Vec::new(); for item in items { results.push(transform(item)); } // ✅ Prefer let results: Vec<_> = items.iter().map(transform).collect(); CODE_BLOCK: { "mcpServers": { "skillc": { "command": "skc", "args": ["mcp"] } } } Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: { "mcpServers": { "skillc": { "command": "skc", "args": ["mcp"] } } } CODE_BLOCK: { "mcpServers": { "skillc": { "command": "skc", "args": ["mcp"] } } } COMMAND_BLOCK: # Install cargo install skillc # Create your first skill skc init my-first-skill --global # Edit SKILL.md with your knowledge # Then validate and test skc lint my-first-skill skc build my-first-skill Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: # Install cargo install skillc # Create your first skill skc init my-first-skill --global # Edit SKILL.md with your knowledge # Then validate and test skc lint my-first-skill skc build my-first-skill COMMAND_BLOCK: # Install cargo install skillc # Create your first skill skc init my-first-skill --global # Edit SKILL.md with your knowledge # Then validate and test skc lint my-first-skill skc build my-first-skill - You explain a complex workflow to your AI coding agent - It helps you perfectly... this one time - Next session, you explain it all over again - Framework patterns you've learned the hard way - API quirks that aren't in the docs - Team conventions that keep code consistent - Debugging techniques for specific tools - GitHub: skillc - Agent Skills Spec