spawn-cli 0.1.15__tar.gz → 0.1.18__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.
Files changed (53) hide show
  1. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/LICENSE +21 -21
  2. {spawn_cli-0.1.15/src/spawn_cli.egg-info → spawn_cli-0.1.18}/PKG-INFO +253 -238
  3. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/README.md +19 -4
  4. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/pyproject.toml +39 -39
  5. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/setup.cfg +4 -4
  6. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/core/low_level.py +1388 -1322
  7. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/core/mcp_stdio.py +67 -67
  8. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/ide/__init__.py +3 -0
  9. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/ide/_vacancy.py +35 -1
  10. spawn_cli-0.1.18/src/spawn_cli/ide/cline.py +111 -0
  11. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/ide/codex.py +59 -5
  12. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/ide/mcp_stdio_argv.py +10 -10
  13. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/models/__init__.py +2 -0
  14. spawn_cli-0.1.18/src/spawn_cli/models/navigation.py +52 -0
  15. {spawn_cli-0.1.15 → spawn_cli-0.1.18/src/spawn_cli.egg-info}/PKG-INFO +253 -238
  16. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli.egg-info/SOURCES.txt +1 -0
  17. spawn_cli-0.1.15/src/spawn_cli/models/navigation.py +0 -30
  18. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/__init__.py +0 -0
  19. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/cli.py +0 -0
  20. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/core/__init__.py +0 -0
  21. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/core/download.py +0 -0
  22. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/core/errors.py +0 -0
  23. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/core/high_level.py +0 -0
  24. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/core/scripts.py +0 -0
  25. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/errors.py +0 -0
  26. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/ide/_helpers.py +0 -0
  27. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/ide/_stub.py +0 -0
  28. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/ide/claude_code.py +0 -0
  29. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/ide/cursor.py +0 -0
  30. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/ide/gemini_cli.py +0 -0
  31. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/ide/github_copilot.py +0 -0
  32. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/ide/registry.py +0 -0
  33. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/ide/windsurf.py +0 -0
  34. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/io/__init__.py +0 -0
  35. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/io/json_io.py +0 -0
  36. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/io/lock.py +0 -0
  37. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/io/paths.py +0 -0
  38. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/io/text_io.py +0 -0
  39. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/io/toml_io.py +0 -0
  40. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/io/yaml_io.py +0 -0
  41. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/models/config.py +0 -0
  42. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/models/mcp.py +0 -0
  43. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/models/metadata.py +0 -0
  44. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/models/skill.py +0 -0
  45. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/resources/__init__.py +0 -0
  46. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/resources/default_core_config.yaml +0 -0
  47. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli/warnings_display.py +0 -0
  48. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli.egg-info/dependency_links.txt +0 -0
  49. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli.egg-info/entry_points.txt +0 -0
  50. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli.egg-info/requires.txt +0 -0
  51. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/src/spawn_cli.egg-info/top_level.txt +0 -0
  52. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/tests/test_cli.py +0 -0
  53. {spawn_cli-0.1.15 → spawn_cli-0.1.18}/tests/test_warnings_display.py +0 -0
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 spawn-cli contributors
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.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 spawn-cli contributors
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.
@@ -1,238 +1,253 @@
1
- Metadata-Version: 2.4
2
- Name: spawn-cli
3
- Version: 0.1.15
4
- Summary: A minimal installable Python CLI package.
5
- License: MIT
6
- Classifier: License :: OSI Approved :: MIT License
7
- Requires-Python: >=3.10
8
- Description-Content-Type: text/markdown
9
- License-File: LICENSE
10
- Requires-Dist: pydantic>=2.0
11
- Requires-Dist: ruamel.yaml>=0.18
12
- Requires-Dist: filelock>=3.12
13
- Requires-Dist: httpx>=0.27
14
- Requires-Dist: tomli>=2.0; python_version < "3.11"
15
- Requires-Dist: tomli-w>=1.0
16
- Dynamic: license-file
17
-
18
- ## What is Spawn?
19
-
20
- Spawn is a framework for building **AIDD** (AI-driven development) methodologies. It supports both **authoring** methodologies and **applying** them in a project. Within a single repository you can use **several** AIDD methodologies in a coherent way—shared navigation, skills, rules, and tooling stay aligned instead of competing ad hoc setups.
21
-
22
- ## What is spawn-cli?
23
-
24
- **spawn-cli** is the utility that manages methodologies installed in your project. In Spawn terminology those packs are **extensions**: versioned content that usually lives in a **Git** repository. The CLI **instantiates** instruction files, process descriptions, rules, agent skills, and wires their behavior together (navigation, IDE-facing outputs, optional lifecycle hooks). Extensions can also declare **MCP servers**, **agent-ignore** patterns, **git-ignore** entries, and similar integration points—see [`spec/design/extension-author-guide.md`](spec/design/extension-author-guide.md).
25
-
26
- ### How spawn-cli keeps methodologies coherent
27
-
28
- Several methodologies in one repo stay aligned because Spawn maintains **one shared navigation index**: [`spawn/navigation.yaml`](spec/design/data-structure.md) aggregates mandatory and contextual reads from **every installed extension** plus local [`spawn/rules/`](spec/design/user-guide.md) (refreshed with `spawn rules refresh`). Agents are steered through that file instead of chasing disconnected README fragments.
29
-
30
- On each install or refresh, the CLI **regenerates IDE-facing artifacts** so skills and entry points stay consistent across extensions: rendered skill bodies include **paths and descriptions** wired from navigation (required reads, contextual hints, rule files), MCP snippets normalize server definitions per IDE adapter, and ignore lists merge without manual copy-paste. The net effect is that methodology files, generated skill links, and repo rules **compose** rather than contradict each other. Optional `hints` add short reminders to rendered skills and the Spawn-managed entry block.
31
-
32
- **Example:** [**spawn-ext-spectask**](https://github.com/noant/spawn-ext-spectask) (Spec-Tasks methodology: spec layout, skills, design index) and [**spawn-ext-creator**](https://github.com/noant/spawn-ext-creator) (authoring flows, including agent-guided extension bootstrap) can be installed in the **same** repository and still share that single index and merged IDE outputs.
33
-
34
- ## How to install spawn-cli
35
-
36
- **Recommended:** install `spawn` on your `PATH` with **uv**:
37
-
38
- ```bash
39
- uv tool install spawn-cli && spawn --help
40
- ```
41
-
42
- Run once without installing (ephemeral **uvx**):
43
-
44
- ```bash
45
- uvx --from spawn-cli spawn --help
46
- ```
47
-
48
- **Upgrade** the persistent uv tool:
49
-
50
- ```bash
51
- uv tool upgrade spawn-cli && spawn --help
52
- ```
53
-
54
- Force a fresh resolver for a one-shot run:
55
-
56
- ```bash
57
- uvx --refresh --from spawn-cli spawn --help
58
- ```
59
-
60
- Additional installers (**pip**, **pipx**, local checkout) and upgrade notes: **[spec/design/user-guide.md](spec/design/user-guide.md#other-installation-options)**.
61
-
62
- ## How spawn-cli works
63
-
64
- Run commands from the **root of the repository** you are configuring. Almost every command requires `spawn init` first (it creates the `spawn/` tree). Only one Spawn process should touch a repo at a time (file lock).
65
-
66
- ### Initialize a repo
67
-
68
- ```bash
69
- spawn init
70
- ```
71
-
72
- ### IDE adapters
73
-
74
- For each **supported IDE** adapter, show whether it **looks used in the current repository** and what it can render (e.g. skills, MCP, agent-ignore):
75
-
76
- ```bash
77
- spawn ide list-supported-ides
78
- ```
79
-
80
- Register or drop IDE keys for **this** repo (examples: `cursor`, `codex`):
81
-
82
- ```bash
83
- spawn ide add cursor
84
- spawn ide add cursor codex
85
- spawn ide remove codex
86
- spawn ide list
87
- ```
88
-
89
- ### Extensions
90
-
91
- Add from a Git URL, optional branch (also supports ZIP paths and local directories/archives):
92
-
93
- ```bash
94
- spawn extension add https://github.com/noant/spawn-ext-spectask
95
- spawn extension add https://github.com/noant/spawn-ext-spectask --branch main
96
- ```
97
-
98
- Maintain installed packs:
99
-
100
- ```bash
101
- spawn extension list
102
- spawn extension update spectask
103
- spawn extension reinstall spectask
104
- spawn extension remove spectask
105
- spawn extension healthcheck spectask
106
- ```
107
-
108
- Authoring helpers (run inside or next to an extension project):
109
-
110
- ```bash
111
- spawn extension init ./my-ext --name my-ext
112
- spawn extension check ./my-ext
113
- spawn extension check ./my-ext --strict
114
- spawn extension from-rules ./repo-with-spawn-rules --name my-ext --output ./out
115
- ```
116
-
117
- ### Navigation from repo rules
118
-
119
- After editing files under `spawn/rules/`, refresh mandatory reads in `spawn/navigation.yaml`:
120
-
121
- ```bash
122
- spawn rules refresh
123
- ```
124
-
125
- ### Batch install from a build manifest
126
-
127
- `spawn build list` / `spawn build install` take a **build source** (positional argument; there is no implicit default):
128
-
129
- - **Local directory** whose root contains **`extensions.yaml`**. Spawn resolves the path (e.g. `.` → current working directory) and reads **`<that-directory>/extensions.yaml`** — not a path to the YAML file itself.
130
- - Otherwise a **Git URL**, **ZIP URL**, or **local path** to a repository tree: Spawn stages it, then looks for **`extensions.yaml`** at that root or, if there is exactly one top-level subdirectory, under that folder (`extensions.yaml not found` if neither applies).
131
-
132
- Each manifest entry is an extension source; optional per-entry `branch` overrides the CLI default for that row.
133
-
134
- Minimal `extensions.yaml`:
135
-
136
- ```yaml
137
- extensions:
138
- - path: https://github.com/org/extension-one.git
139
- branch: main
140
- - path: https://github.com/org/extension-two.git
141
- ```
142
-
143
- Dry-run (prints resolved entries as YAML), then install:
144
-
145
- ```bash
146
- # Manifest at ./extensions.yaml (cwd is usually your initialized target repo if you keep it there)
147
- spawn build list .
148
- spawn build install .
149
-
150
- spawn build install /path/to/methodology-bundle
151
- spawn build install https://github.com/org/team-methodology.git --branch main
152
- ```
153
-
154
- The **`--branch`** flag applies when the **build source** is Git (clone revision). Entries that omit `branch` fall back to that value.
155
-
156
- ### Example extension
157
-
158
- [spawn-ext-spectask](https://github.com/noant/spawn-ext-spectask) is a concrete extension you can install with `spawn extension add` as shown above.
159
-
160
- ---
161
-
162
- - **Python:** 3.10+ (see `pyproject.toml`).
163
- - **Deep dives:** [spec/design/user-guide.md](spec/design/user-guide.md) and [spec/design/utility.md](spec/design/utility.md).
164
-
165
- ## How to create an extension
166
-
167
- An extension can be a **full** AIDD methodology, **team** conventions (review rules, codestyle), **scaffolds** for projects that default to AIDD-friendly layouts, **skill-only** bundles, or anything else you can express as declarative files plus optional setup hooks—anything that fits the `extsrc/` layout described in the author guide.
168
-
169
- **Bootstrap with the creator extension** (install like any other extension after `spawn init`):
170
-
171
- ```bash
172
- spawn extension add https://github.com/noant/spawn-ext-creator
173
- ```
174
-
175
- **Scaffold an empty extension** with the CLI (requires `spawn init` in the repo you run from — same as other subcommands). This lays out `extsrc/` with a starter `config.yaml`, plus empty `skills/`, `files/`, and `setup/`:
176
-
177
- ```bash
178
- spawn extension init --name my-extension
179
- spawn extension init ./my-extension --name my-extension
180
- ```
181
-
182
- **Agent-guided scaffold** with **[spawn-ext-creator](https://github.com/noant/spawn-ext-creator)** (install the extension above, then `spawn ide add <ide>` so skills render into your IDE): invoke the **`spawn-ext-bootstrap`** skill so the agent lays out a fuller extension repo than the bare CLI skeleton—for example:
183
-
184
- > Use the **spawn-ext-bootstrap** skill to bootstrap a new Spawn extension.
185
-
186
- Other creator skills (declaring `config.yaml`, skill sources, MCP, verification, etc.) ship under the same extension; see the rendered skill list after install.
187
-
188
- Read **[spec/design/extension-author-guide.md](spec/design/extension-author-guide.md)** for the full model: required `extsrc/config.yaml`, mapping files under `extsrc/files/`, optional `skills/`, `mcp.json`, `agent-ignore`, `setup/` scripts, and how static vs artifact content is updated on `spawn extension update`.
189
-
190
- **Minimal mental model:**
191
-
192
- - `extsrc/config.yaml` — `schema`, `version`, stable `name` (install path `spawn/.extend/<name>/`), plus `files`, `skills`, ignores, optional `hints`, etc.
193
- - `extsrc/files/` — template tree mirrored into the target repo according to `files:` entries.
194
- - `spawn extension check . --strict` — validate before publishing or tagging a release.
195
-
196
- ## How to add rules without creating an extension
197
-
198
- You can steer agents in two complementary ways that do **not** require an extension: **rule files** under **`spawn/rules/`** (content the agent must or may read), and **short hints** in **`spawn/navigation.yaml`** (reminders merged into rendered skills and IDE entry-point blocks such as **`AGENTS.md`**).
199
-
200
- **After edits** to **`spawn/rules/**` or to rule rows / **`hint`** in **`spawn/navigation.yaml`**, run **`spawn refresh`** so navigation, skills, and entry points stay in sync. **`spawn rules refresh`** only syncs **`spawn/rules/**` into **`navigation.yaml`**—no skill or entry-point updates.
201
-
202
- ### 1. Rule files
203
-
204
- Project-local conventions live as files under **`spawn/rules/`**. After **`spawn init`**, add any files there (for example **`spawn/rules/team.md`**); Spawn discovers **every file** under that directory tree.
205
-
206
- Wire those paths into **`spawn/navigation.yaml`** so reads stay aligned with what is on disk:
207
-
208
- ```bash
209
- spawn refresh
210
- ```
211
-
212
- That rescans **`spawn/rules/`**, attaches missing rule files under a **`rules`** group inside **`read-required`** (default description **`Local rule file.`** until you edit it), and drops stale entries whose files were deleted (you may see a warning).
213
-
214
- **Tiers:** list a rule under **`read-required` → `rules`** (always read) or **`read-contextual` → `rules`** (read when relevant). Use the same row shape (`path`, `description`). A path must not appear in both lists—after you move a row, rerun **`spawn refresh`** (or **`spawn rules refresh`** if you only need YAML). New files discovered on disk are appended to **`read-required` → `rules`** until you relocate them.
215
-
216
- **Extension reads:** **`ext:`** blocks are unrelated; repo-local rule paths live only under **`spawn/rules/**`** and the **`rules`** groups in **`spawn/navigation.yaml`**.
217
-
218
- ### 2. Hints in `spawn/navigation.yaml`
219
-
220
- For **short, always-visible reminders** (tone, language, repo-specific habits), add an optional **`hint`** field on rows under **`read-required` → `rules`**—alongside **`path`** and **`description`**.
221
-
222
- Spawn merges those strings into the **Hints** section of **rendered skills** and into the **Hints** rollup in managed IDE entry points (for example **`AGENTS.md`**), using the same ordering and deduping rules as extension **`hints.global`**.
223
-
224
- Example:
225
-
226
- ```yaml
227
- read-required:
228
- - rules:
229
- - path: spawn/rules/team.md
230
- description: Team conventions.
231
- hint: Prefer British spelling in user-facing copy.
232
- ```
233
-
234
- Then run **`spawn refresh`** so skills and entry points pick up the hint.
235
-
236
- ## License
237
-
238
- MIT — see [LICENSE](LICENSE).
1
+ Metadata-Version: 2.4
2
+ Name: spawn-cli
3
+ Version: 0.1.18
4
+ Summary: A minimal installable Python CLI package.
5
+ License: MIT
6
+ Classifier: License :: OSI Approved :: MIT License
7
+ Requires-Python: >=3.10
8
+ Description-Content-Type: text/markdown
9
+ License-File: LICENSE
10
+ Requires-Dist: pydantic>=2.0
11
+ Requires-Dist: ruamel.yaml>=0.18
12
+ Requires-Dist: filelock>=3.12
13
+ Requires-Dist: httpx>=0.27
14
+ Requires-Dist: tomli>=2.0; python_version < "3.11"
15
+ Requires-Dist: tomli-w>=1.0
16
+ Dynamic: license-file
17
+
18
+ <p align="center">
19
+ <img src="logo/main.jpg" alt="Spawn CLI" width="480" />
20
+ </p>
21
+
22
+ ## What is Spawn?
23
+
24
+ Spawn is a framework for building **AIDD** (AI-driven development) methodologies — an **agent harness** that wraps your coding agent in an orchestration layer. It supports both **authoring** methodologies and **applying** them in a project. Within a single repository you can use **several** AIDD methodologies in a coherent way—shared navigation, skills, rules, and tooling stay aligned instead of competing ad hoc setups.
25
+
26
+ ## What is spawn-cli?
27
+
28
+ **spawn-cli** is the utility that manages methodologies installed in your project. In Spawn terminology those packs are **extensions**: versioned content that usually lives in a **Git** repository. The CLI **instantiates** instruction files, process descriptions, rules, agent skills, and wires their behavior together (navigation, IDE-facing outputs, optional lifecycle hooks). Extensions can also declare **MCP servers**, **agent-ignore** patterns, **git-ignore** entries, and similar integration points—see [`spec/design/extension-author-guide.md`](spec/design/extension-author-guide.md).
29
+
30
+ ### How spawn-cli keeps methodologies coherent
31
+
32
+ Several methodologies in one repo stay aligned because Spawn maintains **one shared navigation index**: [`spawn/navigation.yaml`](spec/design/data-structure.md) aggregates mandatory and contextual reads from **every installed extension** plus local [`spawn/rules/`](spec/design/user-guide.md) (refreshed with `spawn rules refresh`). Agents are steered through that file instead of chasing disconnected README fragments.
33
+
34
+ On each install or refresh, the CLI **regenerates IDE-facing artifacts** so skills and entry points stay consistent across extensions: rendered skill bodies include **paths and descriptions** wired from navigation (required reads, contextual hints, rule files), MCP snippets normalize server definitions per IDE adapter, and ignore lists merge without manual copy-paste. The net effect is that methodology files, generated skill links, and repo rules **compose** rather than contradict each other. Optional `hints` add short reminders to rendered skills and the Spawn-managed entry block.
35
+
36
+ **Example:** [**spawn-ext-spectask**](https://github.com/noant/spawn-ext-spectask) (Spec-Tasks methodology: spec layout, skills, design index) and [**spawn-ext-creator**](https://github.com/noant/spawn-ext-creator) (authoring flows, including agent-guided extension bootstrap) can be installed in the **same** repository and still share that single index and merged IDE outputs.
37
+
38
+ ## How to install spawn-cli
39
+
40
+ **Recommended:** install `spawn` on your `PATH` with **uv**:
41
+
42
+ ```bash
43
+ uv tool install spawn-cli && spawn --help
44
+ ```
45
+
46
+ Run once without installing (ephemeral **uvx**):
47
+
48
+ ```bash
49
+ uvx --from spawn-cli spawn --help
50
+ ```
51
+
52
+ **Upgrade** the persistent uv tool:
53
+
54
+ ```bash
55
+ uv tool upgrade spawn-cli && spawn --help
56
+ ```
57
+
58
+ Force a fresh resolver for a one-shot run:
59
+
60
+ ```bash
61
+ uvx --refresh --from spawn-cli spawn --help
62
+ ```
63
+
64
+ Additional installers (**pip**, **pipx**, local checkout) and upgrade notes: **[spec/design/user-guide.md](spec/design/user-guide.md#other-installation-options)**.
65
+
66
+ ## How spawn-cli works
67
+
68
+ Run commands from the **root of the repository** you are configuring. Almost every command requires `spawn init` first (it creates the `spawn/` tree). Only one Spawn process should touch a repo at a time (file lock).
69
+
70
+ ### Initialize a repo
71
+
72
+ ```bash
73
+ spawn init
74
+ ```
75
+
76
+ ### IDE adapters
77
+
78
+ For each **supported IDE** adapter, show whether it **looks used in the current repository** and what it can render (e.g. skills, MCP, agent-ignore):
79
+
80
+ ```bash
81
+ spawn ide list-supported-ides
82
+ ```
83
+
84
+ Register or drop IDE keys for **this** repo (examples: `cursor`, `codex`):
85
+
86
+ ```bash
87
+ spawn ide add cursor
88
+ spawn ide add cursor codex
89
+ spawn ide remove codex
90
+ spawn ide list
91
+ ```
92
+
93
+ ### Extensions
94
+
95
+ Add from a Git URL, optional branch (also supports ZIP paths and local directories/archives):
96
+
97
+ ```bash
98
+ spawn extension add https://github.com/noant/spawn-ext-spectask
99
+ spawn extension add https://github.com/noant/spawn-ext-spectask --branch main
100
+ ```
101
+
102
+ Maintain installed packs:
103
+
104
+ ```bash
105
+ spawn extension list
106
+ spawn extension update spectask
107
+ spawn extension reinstall spectask
108
+ spawn extension remove spectask
109
+ spawn extension healthcheck spectask
110
+ ```
111
+
112
+ Authoring helpers (run inside or next to an extension project):
113
+
114
+ ```bash
115
+ spawn extension init ./my-ext --name my-ext
116
+ spawn extension check ./my-ext
117
+ spawn extension check ./my-ext --strict
118
+ spawn extension from-rules ./repo-with-spawn-rules --name my-ext --output ./out
119
+ ```
120
+
121
+ ### Navigation from repo rules
122
+
123
+ After editing files under `spawn/rules/`, refresh mandatory reads in `spawn/navigation.yaml`:
124
+
125
+ ```bash
126
+ spawn rules refresh
127
+ ```
128
+
129
+ ### Batch install from a build manifest
130
+
131
+ `spawn build list` / `spawn build install` take a **build source** (positional argument; there is no implicit default):
132
+
133
+ - **Local directory** whose root contains **`extensions.yaml`**. Spawn resolves the path (e.g. `.` → current working directory) and reads **`<that-directory>/extensions.yaml`** — not a path to the YAML file itself.
134
+ - Otherwise a **Git URL**, **ZIP URL**, or **local path** to a repository tree: Spawn stages it, then looks for **`extensions.yaml`** at that root or, if there is exactly one top-level subdirectory, under that folder (`extensions.yaml not found` if neither applies).
135
+
136
+ Each manifest entry is an extension source; optional per-entry `branch` overrides the CLI default for that row.
137
+
138
+ Minimal `extensions.yaml`:
139
+
140
+ ```yaml
141
+ extensions:
142
+ - path: https://github.com/org/extension-one.git
143
+ branch: main
144
+ - path: https://github.com/org/extension-two.git
145
+ ```
146
+
147
+ Dry-run (prints resolved entries as YAML), then install:
148
+
149
+ ```bash
150
+ # Manifest at ./extensions.yaml (cwd is usually your initialized target repo if you keep it there)
151
+ spawn build list .
152
+ spawn build install .
153
+
154
+ spawn build install /path/to/methodology-bundle
155
+ spawn build install https://github.com/org/team-methodology.git --branch main
156
+ ```
157
+
158
+ The **`--branch`** flag applies when the **build source** is Git (clone revision). Entries that omit `branch` fall back to that value.
159
+
160
+ ### Example extension
161
+
162
+ [spawn-ext-spectask](https://github.com/noant/spawn-ext-spectask) is a concrete extension you can install with `spawn extension add` as shown above.
163
+
164
+ ---
165
+
166
+ - **Python:** 3.10+ (see `pyproject.toml`).
167
+ - **Deep dives:** [spec/design/user-guide.md](spec/design/user-guide.md) and [spec/design/utility.md](spec/design/utility.md).
168
+
169
+ ## How to create an extension
170
+
171
+ An extension can be a **full** AIDD methodology, **team** conventions (review rules, codestyle), **scaffolds** for projects that default to AIDD-friendly layouts, **skill-only** bundles, or anything else you can express as declarative files plus optional setup hooks—anything that fits the `extsrc/` layout described in the author guide.
172
+
173
+ **Bootstrap with the creator extension** (install like any other extension after `spawn init`):
174
+
175
+ ```bash
176
+ spawn extension add https://github.com/noant/spawn-ext-creator
177
+ ```
178
+
179
+ **Scaffold an empty extension** with the CLI (requires `spawn init` in the repo you run from — same as other subcommands). This lays out `extsrc/` with a starter `config.yaml`, plus empty `skills/`, `files/`, and `setup/`:
180
+
181
+ ```bash
182
+ spawn extension init --name my-extension
183
+ spawn extension init ./my-extension --name my-extension
184
+ ```
185
+
186
+ **Agent-guided scaffold** with **[spawn-ext-creator](https://github.com/noant/spawn-ext-creator)** (install the extension above, then `spawn ide add <ide>` so skills render into your IDE): invoke the **`spawn-ext-bootstrap`** skill so the agent lays out a fuller extension repo than the bare CLI skeleton—for example:
187
+
188
+ > Use the **spawn-ext-bootstrap** skill to bootstrap a new Spawn extension.
189
+
190
+ Other creator skills (declaring `config.yaml`, skill sources, MCP, verification, etc.) ship under the same extension; see the rendered skill list after install.
191
+
192
+ Read **[spec/design/extension-author-guide.md](spec/design/extension-author-guide.md)** for the full model: required `extsrc/config.yaml`, mapping files under `extsrc/files/`, optional `skills/`, `mcp.json`, `agent-ignore`, `setup/` scripts, and how static vs artifact content is updated on `spawn extension update`.
193
+
194
+ **Minimal mental model:**
195
+
196
+ - `extsrc/config.yaml` — `schema`, `version`, stable `name` (install path `spawn/.extend/<name>/`), plus `files`, `skills`, ignores, optional `hints`, etc.
197
+ - `extsrc/files/` — template tree mirrored into the target repo according to `files:` entries.
198
+ - `spawn extension check . --strict` — validate before publishing or tagging a release.
199
+
200
+ ## How to add rules without creating an extension
201
+
202
+ You can steer agents in two complementary ways that do **not** require an extension: **rule files** under **`spawn/rules/`** (content the agent must or may read), and **short hints** in **`spawn/navigation.yaml`** (reminders merged into rendered skills and IDE entry-point blocks such as **`AGENTS.md`**).
203
+
204
+ **After edits** to **`spawn/rules/**` or to rule rows / **`hint`** in **`spawn/navigation.yaml`**, run **`spawn refresh`** so navigation, skills, and entry points stay in sync. **`spawn rules refresh`** only syncs **`spawn/rules/**` into **`navigation.yaml`**—no skill or entry-point updates.
205
+
206
+ ### 1. Rule files
207
+
208
+ Project-local conventions live as files under **`spawn/rules/`**. After **`spawn init`**, add any files there (for example **`spawn/rules/team.md`**); Spawn discovers **every file** under that directory tree.
209
+
210
+ Wire those paths into **`spawn/navigation.yaml`** so reads stay aligned with what is on disk:
211
+
212
+ ```bash
213
+ spawn refresh
214
+ ```
215
+
216
+ That rescans **`spawn/rules/`**, attaches missing rule files under a **`rules`** group inside **`read-required`** (default description **`Local rule file.`** until you edit it), and drops stale entries whose files were deleted (you may see a warning).
217
+
218
+ **Tiers:** list a rule under **`read-required` → `rules`** (always read) or **`read-contextual` → `rules`** (read when relevant). Use the same row shape (`path`, `description`). A path must not appear in both lists—after you move a row, rerun **`spawn refresh`** (or **`spawn rules refresh`** if you only need YAML). New files discovered on disk are appended to **`read-required` → `rules`** until you relocate them.
219
+
220
+ **Extension reads:** **`ext:`** blocks are unrelated; repo-local rule paths live only under **`spawn/rules/**`** and the **`rules`** groups in **`spawn/navigation.yaml`**.
221
+
222
+ ### 2. Hints in `spawn/navigation.yaml`
223
+
224
+ For **short, always-visible reminders** (tone, language, repo-specific habits), add **hint-only** rows under **`read-required` → `rules`** (a **`hint`** entry **without** a **`path`**). Mandatory rule files use rows with **`path`** and **`description`** only—do **not** add **`hint`** on the same row as **`path`**; if refresh finds legacy pairs, it splits them into a file row and a following hint-only row.
225
+
226
+ Hints from **`read-required` → `rules`** (hint-only rows) appear in skills’ **Hints** section and in the managed **`AGENTS.md`** rollup together with extension **`hints.global`**, using YAML row order within maintainer hints before dedupe (**`hint`** on **`read-contextual` → `rules`** is still **not** included there).
227
+
228
+ If a **`path`** names a **`spawn/rules/…`** file that **does not** exist when navigation is refreshed, that row is **removed entirely** — fix or drop **`path`** first; **`hint`** on that same removed row is **not** downgraded to a hint-only row.
229
+
230
+ Example:
231
+
232
+ ```yaml
233
+ read-required:
234
+ - rules:
235
+ - path: spawn/rules/team.md
236
+ description: Team conventions.
237
+ - hint: Prefer British spelling in user-facing copy.
238
+ - hint: Short standalone reminder with no rule file.
239
+ ```
240
+
241
+ Then run **`spawn refresh`** so skills and entry points pick up the hint.
242
+
243
+ ## License
244
+
245
+ MIT — see [LICENSE](LICENSE).
246
+
247
+ ---
248
+
249
+ P.S. Below is a diagram that might help you understand how Spawn works.
250
+
251
+ <p align="center">
252
+ <img src="logo/Scheme.png" alt="How Spawn works" />
253
+ </p>
@@ -1,6 +1,10 @@
1
+ <p align="center">
2
+ <img src="logo/main.jpg" alt="Spawn CLI" width="480" />
3
+ </p>
4
+
1
5
  ## What is Spawn?
2
6
 
3
- Spawn is a framework for building **AIDD** (AI-driven development) methodologies. It supports both **authoring** methodologies and **applying** them in a project. Within a single repository you can use **several** AIDD methodologies in a coherent way—shared navigation, skills, rules, and tooling stay aligned instead of competing ad hoc setups.
7
+ Spawn is a framework for building **AIDD** (AI-driven development) methodologies — an **agent harness** that wraps your coding agent in an orchestration layer. It supports both **authoring** methodologies and **applying** them in a project. Within a single repository you can use **several** AIDD methodologies in a coherent way—shared navigation, skills, rules, and tooling stay aligned instead of competing ad hoc setups.
4
8
 
5
9
  ## What is spawn-cli?
6
10
 
@@ -200,9 +204,11 @@ That rescans **`spawn/rules/`**, attaches missing rule files under a **`rules`**
200
204
 
201
205
  ### 2. Hints in `spawn/navigation.yaml`
202
206
 
203
- For **short, always-visible reminders** (tone, language, repo-specific habits), add an optional **`hint`** field on rows under **`read-required` → `rules`**—alongside **`path`** and **`description`**.
207
+ For **short, always-visible reminders** (tone, language, repo-specific habits), add **hint-only** rows under **`read-required` → `rules`** (a **`hint`** entry **without** a **`path`**). Mandatory rule files use rows with **`path`** and **`description`** only—do **not** add **`hint`** on the same row as **`path`**; if refresh finds legacy pairs, it splits them into a file row and a following hint-only row.
208
+
209
+ Hints from **`read-required` → `rules`** (hint-only rows) appear in skills’ **Hints** section and in the managed **`AGENTS.md`** rollup together with extension **`hints.global`**, using YAML row order within maintainer hints before dedupe (**`hint`** on **`read-contextual` → `rules`** is still **not** included there).
204
210
 
205
- Spawn merges those strings into the **Hints** section of **rendered skills** and into the **Hints** rollup in managed IDE entry points (for example **`AGENTS.md`**), using the same ordering and deduping rules as extension **`hints.global`**.
211
+ If a **`path`** names a **`spawn/rules/…`** file that **does not** exist when navigation is refreshed, that row is **removed entirely** — fix or drop **`path`** first; **`hint`** on that same removed row is **not** downgraded to a hint-only row.
206
212
 
207
213
  Example:
208
214
 
@@ -211,7 +217,8 @@ read-required:
211
217
  - rules:
212
218
  - path: spawn/rules/team.md
213
219
  description: Team conventions.
214
- hint: Prefer British spelling in user-facing copy.
220
+ - hint: Prefer British spelling in user-facing copy.
221
+ - hint: Short standalone reminder with no rule file.
215
222
  ```
216
223
 
217
224
  Then run **`spawn refresh`** so skills and entry points pick up the hint.
@@ -219,3 +226,11 @@ Then run **`spawn refresh`** so skills and entry points pick up the hint.
219
226
  ## License
220
227
 
221
228
  MIT — see [LICENSE](LICENSE).
229
+
230
+ ---
231
+
232
+ P.S. Below is a diagram that might help you understand how Spawn works.
233
+
234
+ <p align="center">
235
+ <img src="logo/Scheme.png" alt="How Spawn works" />
236
+ </p>