steer-ai 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- steer_ai-0.1.0/.gitignore +8 -0
- steer_ai-0.1.0/CHANGELOG.md +65 -0
- steer_ai-0.1.0/CONTRIBUTING.md +47 -0
- steer_ai-0.1.0/LICENSE +21 -0
- steer_ai-0.1.0/PKG-INFO +300 -0
- steer_ai-0.1.0/README.md +275 -0
- steer_ai-0.1.0/SECURITY.md +24 -0
- steer_ai-0.1.0/docs/components/context.mdx +75 -0
- steer_ai-0.1.0/docs/components/flow.mdx +130 -0
- steer_ai-0.1.0/docs/components/learn.mdx +181 -0
- steer_ai-0.1.0/docs/components/proc.mdx +78 -0
- steer_ai-0.1.0/docs/components/secrets.mdx +75 -0
- steer_ai-0.1.0/docs/components/store.mdx +66 -0
- steer_ai-0.1.0/docs/docs.json +61 -0
- steer_ai-0.1.0/docs/favicon.png +0 -0
- steer_ai-0.1.0/docs/guides/authoring.mdx +176 -0
- steer_ai-0.1.0/docs/introduction.mdx +88 -0
- steer_ai-0.1.0/docs/logo/dark.svg +15 -0
- steer_ai-0.1.0/docs/logo/light.svg +15 -0
- steer_ai-0.1.0/docs/quickstart.mdx +121 -0
- steer_ai-0.1.0/docs/styles.css +0 -0
- steer_ai-0.1.0/examples/README.md +71 -0
- steer_ai-0.1.0/examples/commit-message/SKILL.md +42 -0
- steer_ai-0.1.0/examples/commit-message/references/conventional-commits.md +26 -0
- steer_ai-0.1.0/examples/repo-health/SKILL.md +91 -0
- steer_ai-0.1.0/examples/repo-health/flow.toml +37 -0
- steer_ai-0.1.0/examples/repo-health/scripts/collect.py +119 -0
- steer_ai-0.1.0/examples/repo-health/scripts/report.py +116 -0
- steer_ai-0.1.0/examples/repo-health/scripts/share.py +76 -0
- steer_ai-0.1.0/pyproject.toml +59 -0
- steer_ai-0.1.0/steer/__init__.py +55 -0
- steer_ai-0.1.0/steer/cli.py +927 -0
- steer_ai-0.1.0/steer/context.py +281 -0
- steer_ai-0.1.0/steer/create.py +402 -0
- steer_ai-0.1.0/steer/distribute.py +158 -0
- steer_ai-0.1.0/steer/flow.py +648 -0
- steer_ai-0.1.0/steer/frontmatter.py +307 -0
- steer_ai-0.1.0/steer/learn.py +575 -0
- steer_ai-0.1.0/steer/output.py +70 -0
- steer_ai-0.1.0/steer/paths.py +132 -0
- steer_ai-0.1.0/steer/proc.py +269 -0
- steer_ai-0.1.0/steer/renderer.py +140 -0
- steer_ai-0.1.0/steer/scaffold.py +74 -0
- steer_ai-0.1.0/steer/secrets.py +251 -0
- steer_ai-0.1.0/steer/skill.py +125 -0
- steer_ai-0.1.0/steer/store.py +195 -0
- steer_ai-0.1.0/steer/validate.py +434 -0
- steer_ai-0.1.0/tests/__init__.py +0 -0
- steer_ai-0.1.0/tests/helpers.py +49 -0
- steer_ai-0.1.0/tests/test_cli_lifecycle.py +194 -0
- steer_ai-0.1.0/tests/test_context_proc.py +175 -0
- steer_ai-0.1.0/tests/test_flow.py +188 -0
- steer_ai-0.1.0/tests/test_frontmatter.py +164 -0
- steer_ai-0.1.0/tests/test_learn.py +347 -0
- steer_ai-0.1.0/tests/test_secrets_store.py +141 -0
- steer_ai-0.1.0/tests/test_validate.py +153 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to steer are documented here. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions follow
|
|
5
|
+
[SemVer](https://semver.org/) (pre-1.0: minor bumps may break).
|
|
6
|
+
|
|
7
|
+
## 0.1.0: initial public release
|
|
8
|
+
|
|
9
|
+
Published on PyPI as `steer-ai` (the name `steer` was already taken);
|
|
10
|
+
the command and the import are `steer` either way.
|
|
11
|
+
|
|
12
|
+
### Highlights beyond the components
|
|
13
|
+
|
|
14
|
+
- `steer new` takes component inputs at scaffold time: `--secrets
|
|
15
|
+
KEY[,KEY...]` wires named credentials into the generated instructions,
|
|
16
|
+
`--steps id[,id...]` generates a linear chain of named flow steps, and
|
|
17
|
+
`--user-invoked` scaffolds a human-triggered skill
|
|
18
|
+
(`disable-model-invocation: true`) with validation adapting its trigger
|
|
19
|
+
checks.
|
|
20
|
+
- `flow.toml` strings expand `{skill_dir}` and `{workspace}`, so printed
|
|
21
|
+
directives run verbatim from the workspace even when the skill is
|
|
22
|
+
installed under `.claude/skills/`.
|
|
23
|
+
- `steer validate` prunes as well as checks: `DUPLICATE_TEXT` (the same
|
|
24
|
+
paragraph in two places) and `REFERENCE_ORPHAN` (reference files nothing
|
|
25
|
+
points to).
|
|
26
|
+
- Two complete example skills in `examples/`, scaffolded by steer and
|
|
27
|
+
verified end-to-end by an agent in a sandbox.
|
|
28
|
+
|
|
29
|
+
Steer is the framework for building [Agent Skills](https://agentskills.io):
|
|
30
|
+
authoring tools around the whole lifecycle, plus the runtime components the
|
|
31
|
+
SKILL.md format deliberately leaves out. Zero dependencies: Python stdlib
|
|
32
|
+
only, Python ≥ 3.11.
|
|
33
|
+
|
|
34
|
+
### Author-time CLI
|
|
35
|
+
|
|
36
|
+
- `steer new`: scaffold a spec-valid skill; `--with
|
|
37
|
+
secrets,store,context,flow,proc,learn` wires components into the generated
|
|
38
|
+
SKILL.md, `--scripts` adds an example script with the result envelope,
|
|
39
|
+
`--auto-learn` wires a Claude Code Stop hook for automatic lesson capture.
|
|
40
|
+
- `steer validate`: the open spec's hard rules (name/description/XML/size),
|
|
41
|
+
progressive-disclosure budgets, broken references, portability warnings for
|
|
42
|
+
Claude-Code-only frontmatter, thin-trigger descriptions, and secret hygiene.
|
|
43
|
+
- `steer package`: validated, API-ready zip; refuses credential-looking
|
|
44
|
+
files.
|
|
45
|
+
- `steer install` / `steer list`: copy into / enumerate `.claude/skills`
|
|
46
|
+
and `.agents/skills`, project and user scope.
|
|
47
|
+
|
|
48
|
+
### Runtime components (CLI and Python library)
|
|
49
|
+
|
|
50
|
+
- `steer secrets`: per-skill credentials, resolved env var → OS keychain (macOS
|
|
51
|
+
`security` / Linux `secret-tool`) → `0600` file under `~/.steer/`. Never
|
|
52
|
+
inside the skill directory.
|
|
53
|
+
- `steer store`: per-skill SQLite with KV + JSON-document tables + raw SQL,
|
|
54
|
+
user or workspace scope.
|
|
55
|
+
- `steer context`: one-shot situational snapshot, covering platform, host
|
|
56
|
+
agent, git state, project type, tools on PATH.
|
|
57
|
+
- `steer flow`: declarative steps in `flow.toml` with verify conditions
|
|
58
|
+
(`file_exists`, `dir_exists`, `glob`, `command`, `env`); mandate steps
|
|
59
|
+
gated on prerequisites.
|
|
60
|
+
- `steer proc`: managed background processes with port/log-pattern readiness,
|
|
61
|
+
PID bookkeeping, TERM→KILL stop of the whole process group.
|
|
62
|
+
- `steer learn`: capture → curate → promote loop so skills improve from
|
|
63
|
+
their own runs; deterministic curation, human-gated promotion,
|
|
64
|
+
`steer learn reflect` transcript scanning for auto-capture.
|
|
65
|
+
- `steer.output`: one JSON result envelope for every script.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Contributing to steer
|
|
2
|
+
|
|
3
|
+
Thanks for helping build the framework for Agent Skills.
|
|
4
|
+
|
|
5
|
+
## Ground rules
|
|
6
|
+
|
|
7
|
+
- **Zero runtime dependencies.** Steer is Python stdlib only (`sqlite3`,
|
|
8
|
+
`tomllib`, `zipfile`, …). PRs that add a runtime dependency will be asked
|
|
9
|
+
to find a stdlib way. Dev/CI tooling (pytest, ruff) is fine; it never
|
|
10
|
+
ships.
|
|
11
|
+
- **Python ≥ 3.11**, macOS and Linux are the supported platforms today.
|
|
12
|
+
- **Agent-first UX.** Error messages tell the agent the exact next command
|
|
13
|
+
to run. Every command that prints for humans also takes `--json`.
|
|
14
|
+
- **Spec first.** Scaffolds and validation target the
|
|
15
|
+
[open Agent Skills spec](https://agentskills.io/specification);
|
|
16
|
+
client-specific extensions (e.g. Claude Code hooks) are opt-in and flagged
|
|
17
|
+
by `steer validate` as portability warnings.
|
|
18
|
+
|
|
19
|
+
## Dev setup
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
git clone https://github.com/bh-rat/steer && cd steer
|
|
23
|
+
uv venv && uv pip install -e . pytest
|
|
24
|
+
.venv/bin/python -m pytest tests/ -q
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
(Plain `python3 -m venv .venv && .venv/bin/pip install -e . pytest` works
|
|
28
|
+
too; there is nothing uv-specific here.)
|
|
29
|
+
|
|
30
|
+
## Before you open a PR
|
|
31
|
+
|
|
32
|
+
1. `python -m pytest tests/ -q`: all green, and new behavior has tests.
|
|
33
|
+
Tests are stdlib `unittest`-style via pytest, hermetic (temp dirs, no
|
|
34
|
+
network, no real `~/.steer`).
|
|
35
|
+
2. `uvx ruff check steer tests`: clean.
|
|
36
|
+
3. If you touched the CLI surface or on-disk formats, update the docs
|
|
37
|
+
(`docs/`) and `CHANGELOG.md` in the same PR.
|
|
38
|
+
|
|
39
|
+
## Good first contributions
|
|
40
|
+
|
|
41
|
+
- New `steer context` detectors (project types, host agents); see
|
|
42
|
+
`steer/context.py`.
|
|
43
|
+
- New `steer flow` verify conditions; see `steer/flow.py`.
|
|
44
|
+
- Validation checks with real-world evidence (link to the skill that
|
|
45
|
+
motivated them).
|
|
46
|
+
|
|
47
|
+
For anything bigger, open an issue first so we can agree on the shape.
|
steer_ai-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Bharat Geleda
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
steer_ai-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: steer-ai
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: The framework for building Agent Skills: scaffolding, validation, packaging, and runtime components (secrets, storage, context, flows, processes, learning) for SKILL.md
|
|
5
|
+
Project-URL: Homepage, https://github.com/bh-rat/steer
|
|
6
|
+
Project-URL: Documentation, https://github.com/bh-rat/steer#readme
|
|
7
|
+
Project-URL: Changelog, https://github.com/bh-rat/steer/blob/main/CHANGELOG.md
|
|
8
|
+
Project-URL: Issues, https://github.com/bh-rat/steer/issues
|
|
9
|
+
Author-email: Bharat Geleda <bharatgeleda@gmail.com>
|
|
10
|
+
License: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: SKILL.md,agent-skills,agents,claude,llm,skills
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: MacOS
|
|
17
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
23
|
+
Requires-Python: >=3.11
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
|
|
26
|
+
# steer
|
|
27
|
+
|
|
28
|
+
**The framework for building Agent Skills.**
|
|
29
|
+
|
|
30
|
+
[](https://github.com/bh-rat/steer/actions/workflows/ci.yml)
|
|
31
|
+
[](LICENSE)
|
|
32
|
+

|
|
33
|
+

|
|
34
|
+
|
|
35
|
+
[Agent Skills](https://agentskills.io) (a `SKILL.md` plus scripts) are the
|
|
36
|
+
open standard for packaging agent capabilities, supported by Claude Code,
|
|
37
|
+
Codex, Copilot, Cursor, Gemini CLI, and ~40 other clients. The format is
|
|
38
|
+
deliberately tiny, which means it ships no batteries: the spec says nothing
|
|
39
|
+
about credentials, persistence, context gathering, step enforcement, or
|
|
40
|
+
managed processes. Every serious skill hand-rolls some of these.
|
|
41
|
+
|
|
42
|
+
Steer provides them as components, plus the authoring tools to scaffold,
|
|
43
|
+
validate, package, and install skills. Zero dependencies; Python stdlib only.
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
┌─ author-time ──────────────────────┐ ┌─ runtime (CLI or library) ─────────┐
|
|
47
|
+
│ steer new scaffold a skill │ │ steer secrets credentials │
|
|
48
|
+
│ steer validate spec + hygiene │ │ steer store per-skill SQLite │
|
|
49
|
+
│ steer package API-ready zip │ │ steer context situational recon │
|
|
50
|
+
│ steer install into skill dirs │ │ steer flow enforced steps │
|
|
51
|
+
│ steer list what's installed │ │ steer proc managed processes │
|
|
52
|
+
└────────────────────────────────────┘ │ steer learn skills that learn │
|
|
53
|
+
└────────────────────────────────────┘
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Why
|
|
57
|
+
|
|
58
|
+
Steer's components are reverse-engineered from what good skills already
|
|
59
|
+
hand-roll in prose and fragile bash (enforced steps, situational recon,
|
|
60
|
+
persistent state, credentials, process lifecycles), turned into machinery
|
|
61
|
+
you get with one flag.
|
|
62
|
+
|
|
63
|
+
## Install
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
uv tool install steer-ai # installs the `steer` command
|
|
67
|
+
# or: pip install steer-ai
|
|
68
|
+
# latest from main: uv tool install git+https://github.com/bh-rat/steer
|
|
69
|
+
steer --version
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Requires Python ≥ 3.11. No runtime dependencies.
|
|
73
|
+
|
|
74
|
+
## Quickstart
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
steer new stripe-report \
|
|
78
|
+
--description "Generates revenue reports from Stripe. Use when the user asks for revenue, MRR, or payment reporting." \
|
|
79
|
+
--with secrets,context,flow,learn --scripts
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
This scaffolds a spec-valid skill:
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
stripe-report/
|
|
86
|
+
├── SKILL.md # frontmatter + body with the components wired in
|
|
87
|
+
├── flow.toml # declarative steps with verify conditions
|
|
88
|
+
└── scripts/
|
|
89
|
+
└── example.py # non-interactive, JSON result envelope on stdout
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
The generated `SKILL.md` already tells the agent how to behave:
|
|
93
|
+
|
|
94
|
+
> 1. **Ground yourself.** Run `steer context` and read the snapshot.
|
|
95
|
+
> 2. **Apply past lessons.** Run `steer learn show`; those lessons came
|
|
96
|
+
> from real previous runs.
|
|
97
|
+
> 3. **Check credentials.** Run `steer secrets check STRIPE_REPORT_API_KEY
|
|
98
|
+
> --skill stripe-report`. If missing, ask the user to run
|
|
99
|
+
> `steer secrets set ...` (never ask them to paste the value into the
|
|
100
|
+
> chat).
|
|
101
|
+
> 4. **Follow the flow.** `steer flow status` → do the step → steps verify
|
|
102
|
+
> themselves against reality; you cannot skip ahead.
|
|
103
|
+
|
|
104
|
+
For a skill only the human should trigger, `steer new --user-invoked`
|
|
105
|
+
sets `disable-model-invocation: true` and validation adapts.
|
|
106
|
+
|
|
107
|
+
Then:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
steer validate stripe-report # spec rules, broken refs, secret hygiene
|
|
111
|
+
steer install stripe-report # → .claude/skills/ (project scope)
|
|
112
|
+
steer package stripe-report # → validated zip for the Claude API / claude.ai
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Examples
|
|
116
|
+
|
|
117
|
+
Two complete skills built this way live in [`examples/`](examples/):
|
|
118
|
+
[`repo-health`](examples/repo-health) exercises all six components in
|
|
119
|
+
one skill (enforced flow, trend memory, credential handoff, managed
|
|
120
|
+
preview server, lesson capture), and
|
|
121
|
+
[`commit-message`](examples/commit-message) is the minimal user-invoked
|
|
122
|
+
counterpoint. Their READMEs show exactly which lines steer generated and
|
|
123
|
+
which the author filled in.
|
|
124
|
+
|
|
125
|
+
## The components
|
|
126
|
+
|
|
127
|
+
### `steer secrets`: credentials that never live in the skill
|
|
128
|
+
|
|
129
|
+
Skill directories get zipped and uploaded; credentials must live outside
|
|
130
|
+
them. Resolution order: env var → OS keychain (macOS `security` /
|
|
131
|
+
Linux `secret-tool`) → `0600` file under `~/.steer/`.
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
steer secrets check STRIPE_API_KEY --skill stripe-report # agent checks
|
|
135
|
+
steer secrets set STRIPE_API_KEY --skill stripe-report # human sets (hidden prompt)
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
```python
|
|
139
|
+
from steer import Secrets
|
|
140
|
+
key = Secrets("stripe-report").require("STRIPE_API_KEY",
|
|
141
|
+
hint="dashboard.stripe.com/apikeys")
|
|
142
|
+
# missing -> MissingSecretError whose message tells the agent
|
|
143
|
+
# exactly what command to ask the human to run
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### `steer store`: per-skill SQLite
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
steer store put last_run '"2026-06-11"' --skill stripe-report
|
|
150
|
+
steer store insert runs '{"month": "may", "total": 1200}' --skill stripe-report
|
|
151
|
+
steer store find runs --where month=may --skill stripe-report
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
KV + JSON-document tables + raw SQL. Two scopes: `user`
|
|
155
|
+
(`~/.steer/skills/<name>/store.db`) and `workspace`
|
|
156
|
+
(`<project>/.steer/<name>/store.db`).
|
|
157
|
+
|
|
158
|
+
### `steer context`: situational recon in one command
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
steer context # markdown for the agent to read
|
|
162
|
+
steer context --json --only git,project,tools
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
One command reports the platform, host agent (Claude Code, Codex, Cursor,
|
|
166
|
+
and others), git state, project type (from lockfiles and manifests), tools
|
|
167
|
+
on PATH, and a small allowlist of env flags. It never dumps the environment.
|
|
168
|
+
|
|
169
|
+
### `steer flow`: steps the agent cannot skip
|
|
170
|
+
|
|
171
|
+
Define the process in `flow.toml`; steps with a `verify` condition complete
|
|
172
|
+
only when reality matches, mandate steps are marked explicitly, and marking
|
|
173
|
+
is gated on prerequisites:
|
|
174
|
+
|
|
175
|
+
```toml
|
|
176
|
+
[[steps]]
|
|
177
|
+
id = "configure"
|
|
178
|
+
directive = "Create out/config.json with the data sources"
|
|
179
|
+
[steps.verify]
|
|
180
|
+
file_exists = "out/config.json"
|
|
181
|
+
|
|
182
|
+
[[steps]]
|
|
183
|
+
id = "review"
|
|
184
|
+
directive = "Read the config and confirm the mappings look right"
|
|
185
|
+
requires = ["configure"]
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
steer flow status # progress bar + current directive
|
|
190
|
+
steer flow next # what to do now
|
|
191
|
+
steer flow done review # mark a mandate step (refused if prereqs incomplete)
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Verify conditions: `file_exists`, `dir_exists`, `glob`, `command` (exit 0),
|
|
195
|
+
`env`. Python API: `steer.Flow` / `steer.Step` for full programmatic control.
|
|
196
|
+
|
|
197
|
+
### `steer proc`: background processes that don't zombie
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
steer proc start web --ready-port 5173 -- npm run dev
|
|
201
|
+
steer proc status web
|
|
202
|
+
steer proc logs web
|
|
203
|
+
steer proc stop web # TERM → wait → KILL, whole process group
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
It checks readiness by port or log pattern, keeps PID bookkeeping under
|
|
207
|
+
`<workspace>/.steer/proc/`, guards against recycled PIDs, and captures logs.
|
|
208
|
+
|
|
209
|
+
### `steer learn`: skills that improve from their own runs
|
|
210
|
+
|
|
211
|
+
Tooling exists to improve a skill before it ships, and agents carry runtime
|
|
212
|
+
memory; nothing connects the two, so a skill learns nothing from its own
|
|
213
|
+
runs. `steer learn` is that connection, a capture → curate → promote loop:
|
|
214
|
+
the agent records lessons the moment they happen, reads a bounded digest at
|
|
215
|
+
the start of every run, and the author promotes the keepers into the shipped
|
|
216
|
+
skill.
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
steer learn note "Use the EU endpoint for EU accounts" --kind correction
|
|
220
|
+
steer learn show # ranked digest the SKILL.md tells the agent to read
|
|
221
|
+
steer learn confirm 3 # helped → stronger; dispute → weaker, auto-archives
|
|
222
|
+
steer learn promote 3 # human-gated: append to the skill's learnings.md
|
|
223
|
+
steer learn run ok && steer learn stats
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Curation is deterministic (no LLM inside the framework; the agent is the
|
|
227
|
+
reflector): duplicates confirm instead of duplicating, disputed-more-than-
|
|
228
|
+
confirmed auto-archives, a hard cap evicts the weakest, credential-shaped
|
|
229
|
+
notes are refused.
|
|
230
|
+
|
|
231
|
+
The structure is fixed and inspectable: `~/.steer/skills/<name>/lessons.db`
|
|
232
|
+
(source of truth) plus an auto-maintained readable `LEARNINGS.md` mirror,
|
|
233
|
+
both outside the skill dir, so lessons survive reinstalls and never ship by
|
|
234
|
+
accident. Promoted lessons land in the skill's `learnings.md`, which does
|
|
235
|
+
ship.
|
|
236
|
+
|
|
237
|
+
**Auto-learning:** `steer new my-skill --auto-learn` wires a Claude Code
|
|
238
|
+
skill-scoped Stop hook running `steer learn reflect`. When the agent tries
|
|
239
|
+
to finish, it deterministically scans the session transcript for corrections
|
|
240
|
+
and failed tool calls, and (once) blocks the stop with exact capture
|
|
241
|
+
instructions. Capture no longer depends on the agent remembering to do it.
|
|
242
|
+
|
|
243
|
+
### Result envelope: one output shape for every script
|
|
244
|
+
|
|
245
|
+
```python
|
|
246
|
+
from steer.output import print_envelope
|
|
247
|
+
print_envelope("ok", "Report generated",
|
|
248
|
+
data={"rows": 120}, artifacts=["out/report.pdf"])
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
```json
|
|
252
|
+
{
|
|
253
|
+
"status": "ok",
|
|
254
|
+
"summary": "Report generated",
|
|
255
|
+
"data": {"rows": 120},
|
|
256
|
+
"artifacts": ["out/report.pdf"]
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## Validation
|
|
261
|
+
|
|
262
|
+
`steer validate` checks the open spec's hard rules (name format/length and
|
|
263
|
+
directory match, description 1-1024 chars, no XML), progressive-disclosure
|
|
264
|
+
budgets (<500-line body), broken file references, portability (Claude-Code-
|
|
265
|
+
only frontmatter), thin trigger descriptions, duplicated paragraphs across
|
|
266
|
+
SKILL.md and references (keep one source of truth), orphaned `references/`
|
|
267
|
+
files nothing points to, and secret hygiene: credential-looking files
|
|
268
|
+
inside a skill are warnings normally and hard errors at packaging time.
|
|
269
|
+
`steer package` refuses to ship them.
|
|
270
|
+
|
|
271
|
+
## Library use
|
|
272
|
+
|
|
273
|
+
Everything the CLI does is importable (`from steer import Skill, Flow,
|
|
274
|
+
Secrets, Store, validate_skill, discover`) for building your own skill
|
|
275
|
+
tooling on top.
|
|
276
|
+
|
|
277
|
+
## What steer is not
|
|
278
|
+
|
|
279
|
+
Not a registry or installer ecosystem (use `npx skills`, Tessl, or plugin
|
|
280
|
+
marketplaces; steer sits upstream of them), not an eval harness (yet), and
|
|
281
|
+
not useful at runtime for pure-knowledge skills (a style guide needs no
|
|
282
|
+
database, though steer still helps author and validate it).
|
|
283
|
+
|
|
284
|
+
## Roadmap
|
|
285
|
+
|
|
286
|
+
Skill-to-skill dependencies / shared libraries, `steer test`
|
|
287
|
+
(trigger-regression + cross-runtime checks), signing/provenance, TypeScript
|
|
288
|
+
SDK, PyPI release.
|
|
289
|
+
|
|
290
|
+
## Docs & contributing
|
|
291
|
+
|
|
292
|
+
Full documentation lives in [`docs/`](docs/) (introduction, quickstart, a
|
|
293
|
+
page per component, and the authoring guide, including the checklist for
|
|
294
|
+
writing skill bodies: trigger, structure, steering, pruning). Contributions
|
|
295
|
+
are welcome; see [CONTRIBUTING.md](CONTRIBUTING.md). Security reports go to
|
|
296
|
+
[SECURITY.md](SECURITY.md).
|
|
297
|
+
|
|
298
|
+
## License
|
|
299
|
+
|
|
300
|
+
[MIT](LICENSE)
|