The framework for building Agent Skills
A SKILL.md tells your agent what to do. It can't hold credentials, keep state between runs, or stop the agent from skipping steps. Steer adds those as components, plus the tools to scaffold, validate, package, and install skills.
uv tool install steer-aiSee it run
Scaffold
One command generates a spec-valid skill: components wired into its SKILL.md, plus a bundled runtime the skill carries with it.
$ steer new pr-review --with secrets,context,flow,learn \ --secrets GITHUB_TOKEN --steps fetch,review,post --scriptsCreated skill at pr-review+ SKILL.md+ flow.toml+ scripts/steer.py+ scripts/example.pyValidation: clean
Enforce
Flow steps verify against reality. Marking a step done out of order is refused, not discouraged.
$ steer flow statusPR-REVIEW WORKFLOW─────────────────────────────────────────Progress: 0/3 steps ● fetch ○ review ○ post▸ Next: fetchRun scripts/fetch.py --pr <number>; it writes out/diff.json$ steer flow done reviewNot so fast: Step 'review' is blocked. Complete these first: fetchRun `steer flow next` to see the current step.
Hand off secrets
The agent gets the exact command to relay to the human. Values never enter the chat or the skill directory.
$ steer secrets check GITHUB_TOKENSecret 'GITHUB_TOKEN' is not set for skill 'pr-review'.Ask the user to provide it, then store it with:steer secrets set GITHUB_TOKEN --skill pr-review(or export GITHUB_TOKEN=... in the environment)
Learn
Lessons recorded mid-run come back as a digest at the start of the next one.
$ steer learn note "Skip vendored and generated files in the diff" --kind correction✓ Lesson recorded (id 1)$ steer learn show## Lessons from previous runs (pr-review)- [1] Skip vendored and generated files in the diff- [2] Cite file and line in every finding(helped? steer learn confirm <id> · wrong? steer learn dispute <id>)
The components
Each one replaces a pattern skills carry today as prose and fragile bash. Every component is a Python library and a CLI subcommand, so a SKILL.md can use steer with no code at all.
"Ask the user for the API key and save it in .env."
secretsPer-skill credentials that never live inside the skill directory.
"Write your progress to /tmp/session-$$.json."
storePer-skill SQLite: key/value, JSON documents, and raw SQL.
"Step 0: figure out the environment before doing anything."
contextOne command that answers "where am I, what can I use?"
"YOU MUST COMPLETE EACH PHASE BEFORE PROCEEDING."
flowMulti-step processes the agent cannot skip.
"Poll the port until the server is up. Kill it when done."
procBackground processes that start ready and never zombie.
"Note what failed last time so you don't repeat it."
learnSkills that improve from their own runs.
FAQ
›Why not just write the rules in SKILL.md?
Prose pleads; it doesn't enforce. A flow step with a verify condition completes only when reality matches: the file exists, the command passes, the variable is set. An agent that tries to mark steps done out of order is refused.
›Do agents need steer installed to run my skill?
No. A skill that uses components carries its own runtime: steer new writes scripts/steer.py into the skill, a self-contained copy of exactly the chosen components, and the SKILL.md invokes it as python3 scripts/steer.py. Running the skill needs Python 3.11+, not steer. The one exception is the optional auto-learn Stop hook, which runs the installed CLI.
›Does it only work with Claude Code?
No. Steer targets the open Agent Skills spec, and steer validate warns when a skill uses fields only Claude Code understands. Any client that loads skills can run a steer-built one.
›Can I adopt it in an existing skill?
Yes. steer validate and steer package work on any spec skill, and components come one at a time: steer bundle --with secrets drops a runtime with just that component into the skill, and the rest of the skill stays as it was.
›Is steer a registry or marketplace?
No. Steer sits upstream of distribution: it builds and validates what installers like npx skills ship.
›What does it depend on?
Nothing. Python 3.11 or newer, standard library only. macOS and Linux today.