v0.5.0 — Agent Skills
ember v0.5.0 — Agent Skills
ember 0.5.0 adds support for Agent Skills — a portable, open format for packaging instructions an agent can discover and load on demand. Skills follow the progressive disclosure principle: the model always sees only a tier-1 catalogue (name + description), and pulls in the full instruction body with a tool call when it becomes relevant. Because the format is a standard, skills are portable across compatible clients.
Highlights
- 📚 Agent Skills — load skills from one or more directories, no extra glue code.
- 🔍 Progressive disclosure — compact catalogue in the prompt, full body only when needed.
- ✍️
read_skill/save_skilltools — the model can load and persist skills during a run. - 🔒 Strict on write, lenient on read — authored skills are validated against the
standard; third-party skills that don't parse perfectly are skipped with a warning. - 🧩 Composes with everything else — skills coexist with
FunctionTools and MCP tools.
New public API
| Name | Description |
|---|---|
Agent(skills_dirs=[...]) |
One or more skill directories; order defines priority |
ember.Skill |
Skill data model (name, description, optional standard fields) |
ember.skills.parse_skill |
Lenient parser for a single SKILL.md |
ember.skills.scan_skills |
Scan directories for <name>/SKILL.md |
ember.skills.SkillStore |
Catalogue for the prompt + the read_skill / save_skill tools |
Usage
pip install -U emberio-labs-ember from ember import Agent, MockProvider
agent = Agent(
provider=MockProvider(),
skills_dirs=[".ember/skills", "~/.config/ember/skills"], # order = priority
system_prompt="You are a developer assistant.",
) A skill is a directory <name>/SKILL.md with YAML frontmatter (name, description) and a Markdown body:
---
name: release-checklist
description: Steps to follow before publishing an ember release.
---
1. Bump the version in three places... Behaviour notes
- Directories are scanned at
<dir>/<name>/SKILL.md(one level deep only); on a name collision the skill from the earlier directory wins. - The catalogue is re-read from disk on every request, so a skill saved during the current conversation is visible to the very next model call. The agent's message history is not modified by the catalogue.
save_skillwrites only on an explicit user request and only into the first directory in the list. The tool validates the standard strictly — name (lowercase Latin letters, digits and single hyphens, ≤64 chars), description (≤1024 chars), non-empty body — and refuses to write outside its target directory.skills_dirs=None(the default) disables skills entirely: no tools, no prompt section. The library ships no default paths by design.- Optional standard fields (
license,compatibility,metadata,allowed-tools) are parsed and preserved, but are not executed in v1.
Limitations
stream_run()does not support skills or tools; userun().pyyamlis now a core dependency (no extra required).⚠️ Skills from untrusted sources can inject instructions into the model's context. Only enable directories you trust. A trust gate is planned.
What's Changed
Tests
146 tests passing on Python 3.10–3.12; ruff and mypy (strict) clean.
Full Changelog:
v0.4.0...v0.5.0