Skills
Tools tell the agent what it can do. Skills tell it how ,
domain-specific recipes the agent reads when relevant, ignores when
not. Same shape as
Anthropic Agent Skills (Oct 2025) :
a directory with SKILL.md (frontmatter + markdown body) and
optional bundled files. Drop your existing Anthropic-format skills
into our skills=[...] and they Just Work.
from loomflow import Agent
agent = Agent(
"...",
model="claude-opus-4-7",
skills=[
"~/.jeeves/skills/system/", # base layer
"~/.jeeves/skills/user/", # user override
("./.jeeves-skills/", "Project"), # project-local with label
],
)Progressive disclosure
Only name + description (~50 tokens per skill) load into the
system prompt at startup. The model calls a load_skill(name) tool
when a skill is relevant. Only THEN does the full body enter context.
A 50-skill agent costs ~2,500 tokens at rest; nothing more until the model actually loads one. Compare to “drop every recipe into the system prompt” approaches, which scale O(n) in tokens at every turn.
Read more
tools.py with @tool) · Mode C (frontmatter-declared scripts).Three skill modesSystem / user / project layering with last-wins override. Auto-namespacing prevents tool collisions.Layered sourcesInline skills. One-off in code
For tiny skills that don’t justify a folder:
from loomflow.skills import Skill
skill = Skill.from_text("""
---
name: standup
description: Format a daily standup from rough notes.
---
# Standup
Always 3 sections: Yesterday, Today, Blockers.
""")
agent = Agent("...", skills=[skill])Skills vs. Tools. A tool is a callable. A skill is a playbook the model reads on demand. Typically containing instructions, plus optionally its own tools. Most skills are pure markdown (Mode A); they teach the model how to use the tools it already has.