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-ai

See 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 --scripts
Created skill at pr-review
+ SKILL.md
+ flow.toml
+ scripts/steer.py
+ scripts/example.py
 
Validation: clean

Enforce

Flow steps verify against reality. Marking a step done out of order is refused, not discouraged.

$ steer flow status
PR-REVIEW WORKFLOW
─────────────────────────────────────────
Progress: 0/3 steps ● fetch ○ review ○ post
 
▸ Next: fetch
Run scripts/fetch.py --pr <number>; it writes out/diff.json
$ steer flow done review
Not so fast: Step 'review' is blocked. Complete these first: fetch
Run `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_TOKEN
Secret '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.

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.