Back to Workshops
Workshop Free

Skills.md from Scratch: Build a Skill-Driven Coding Agent

Alexey Grigorev Jan 16, 2026 ai-agents
Workshop

Skills.md from Scratch: Build a Skill-Driven Coding Agent

January 16, 2026 Alexey Grigorev
ai-agents llm-engineering agent-systems tooling-architecture

We start from the coding agent from the prerequisite workshop and turn it into a general-purpose coding agent with two reusable behavior layers: skills and slash commands. Skills are loaded by the agent when the user's request matches a skill description. Commands are invoked by the user with a leading slash and rendered into prompts before the agent acts.

Links

External resources for this workshop:

The agent you will build

The final workshop system looks like this:

flowchart LR USER["User"] RUNNER["ToyAIKit runner<br/>OpenAI Responses"] LLM["OpenAI model"] CODETOOLS["Coding tools<br/>read, write, tree, bash, search"] SKILLTOOL["skill(name) tool"] LOADER["SkillLoader"] SKILLS["skills/*/SKILL.md<br/>scripts and templates"] COMMANDS["commands/*.md"] COMMANDTOOL["execute_command(name, args)"] USER -->|plain request| RUNNER USER -->|/command| RUNNER RUNNER --> LLM RUNNER --> CODETOOLS RUNNER --> SKILLTOOL SKILLTOOL --> LOADER LOADER --> SKILLS RUNNER --> COMMANDTOOL COMMANDTOOL --> COMMANDS

The project stays small enough to understand in a notebook, but it mirrors the pieces used by real coding agents. The coding tools let the model read, write, search, and run commands. The skill loader turns SKILL.md files with YAML frontmatter into tool-loadable instructions. The command loader turns markdown files like review.md or test.md into reusable prompt templates.

Walkthrough

Follow the numbered files in order. Each file is one self-contained step.

  1. Overview and setup - prerequisites, environment setup, workshop code, and the project folder.
  2. Part 1: Demoing skills and commands - demo a Claude Code skill that fetches /kid and /parent commands from GitHub.
  3. Part 2: Recapping the coding agent - recap the agent loop and the coding-agent tools from the prerequisite workshop.
  4. Part 3: Building the base runner - build a general-purpose coding-agent runner in Jupyter with ToyAIKit.
  5. Part 4: Defining the skill format - define the SKILL.md format and look at the example skills.
  6. Part 5: Loading SKILL.md - parse skill markdown, read frontmatter, list skills, and resolve extra files.
  7. Part 6: The skill tool and prompt injection - expose skills as a tool and inject the available skill list into the prompt.
  8. Part 7: Implementing commands - load slash-command markdown files and run them as prompt templates.
  9. Part 8: The fuller prototype - connect the notebook version to the fuller prototype/ implementation and its tests.
  10. Q&A: skills and commands - side questions about skill design, execution, model support, and command discovery.
  11. Deferred items - items intentionally left as follow-ups or reference-only behavior.

Appendix

A file list for the workshop materials is in Appendix: workshop files.