tiny-spec 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.
- tiny_spec-0.1.0/.gitignore +25 -0
- tiny_spec-0.1.0/LICENSE +21 -0
- tiny_spec-0.1.0/PKG-INFO +236 -0
- tiny_spec-0.1.0/README.md +199 -0
- tiny_spec-0.1.0/agents/tiny-spec-build-executor.md +78 -0
- tiny_spec-0.1.0/agents/tiny-spec-build-reviewer.md +69 -0
- tiny_spec-0.1.0/pyproject.toml +53 -0
- tiny_spec-0.1.0/tiny-spec-build/SKILL.md +167 -0
- tiny_spec-0.1.0/tiny-spec-build/templates/memory.template.md +17 -0
- tiny_spec-0.1.0/tiny-spec-create/SKILL.md +101 -0
- tiny_spec-0.1.0/tiny-spec-create/templates/SPEC.template.md +51 -0
- tiny_spec-0.1.0/tiny-spec-create/templates/constitution.template.md +34 -0
- tiny_spec-0.1.0/tiny-spec-plan/SKILL.md +69 -0
- tiny_spec-0.1.0/tiny-spec-plan/templates/PLAN.template.md +45 -0
- tiny_spec-0.1.0/tiny-spec-tasks/SKILL.md +83 -0
- tiny_spec-0.1.0/tiny-spec-tasks/templates/tasks.template.md +28 -0
- tiny_spec-0.1.0/tiny_spec/__init__.py +8 -0
- tiny_spec-0.1.0/tiny_spec/cli.py +124 -0
- tiny_spec-0.1.0/tiny_spec/manifest.json +12 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
### macOS
|
|
2
|
+
# Finder metadata
|
|
3
|
+
.DS_Store
|
|
4
|
+
|
|
5
|
+
# Thumbnails
|
|
6
|
+
._*
|
|
7
|
+
|
|
8
|
+
# Custom folder icons
|
|
9
|
+
Icon
|
|
10
|
+
|
|
11
|
+
# Volume root files
|
|
12
|
+
.DocumentRevisions-V100
|
|
13
|
+
.fseventsd
|
|
14
|
+
.Spotlight-V100
|
|
15
|
+
.TemporaryItems
|
|
16
|
+
.Trashes
|
|
17
|
+
.VolumeIcon.icns
|
|
18
|
+
.com.apple.timemachine.donotpresent
|
|
19
|
+
### Python
|
|
20
|
+
__pycache__/
|
|
21
|
+
*.py[cod]
|
|
22
|
+
build/
|
|
23
|
+
dist/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.venv/
|
tiny_spec-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Snir Orlanczyk
|
|
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.
|
tiny_spec-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: tiny-spec
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A tiny, opinionated take on spec-driven development.
|
|
5
|
+
Project-URL: Homepage, https://github.com/GrayMa77er/tiny-spec
|
|
6
|
+
Project-URL: Source, https://github.com/GrayMa77er/tiny-spec
|
|
7
|
+
Project-URL: Issues, https://github.com/GrayMa77er/tiny-spec/issues
|
|
8
|
+
Author: Snir Orlanczyk
|
|
9
|
+
License: MIT License
|
|
10
|
+
|
|
11
|
+
Copyright (c) 2026 Snir Orlanczyk
|
|
12
|
+
|
|
13
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
14
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
15
|
+
in the Software without restriction, including without limitation the rights
|
|
16
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
17
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
18
|
+
furnished to do so, subject to the following conditions:
|
|
19
|
+
|
|
20
|
+
The above copyright notice and this permission notice shall be included in all
|
|
21
|
+
copies or substantial portions of the Software.
|
|
22
|
+
|
|
23
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
24
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
25
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
26
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
27
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
28
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
29
|
+
SOFTWARE.
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
Keywords: ai-agents,claude,claude-code,skills,spec-driven-development
|
|
32
|
+
Classifier: Environment :: Console
|
|
33
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
34
|
+
Classifier: Programming Language :: Python :: 3
|
|
35
|
+
Requires-Python: >=3.9
|
|
36
|
+
Description-Content-Type: text/markdown
|
|
37
|
+
|
|
38
|
+
<p align="center">
|
|
39
|
+
<img src="images/logo.png" alt="tiny-spec" width="200">
|
|
40
|
+
</p>
|
|
41
|
+
|
|
42
|
+
<h1 align="center">tiny-spec</h1>
|
|
43
|
+
|
|
44
|
+
<p align="center">A tiny, opinionated take on spec-driven development.</p>
|
|
45
|
+
|
|
46
|
+
<p align="center">
|
|
47
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License: MIT"></a>
|
|
48
|
+
<a href="https://docs.claude.com/en/docs/claude-code/overview"><img src="https://img.shields.io/badge/Claude%20Code-skills-d97757.svg" alt="Claude Code"></a>
|
|
49
|
+
</p>
|
|
50
|
+
|
|
51
|
+
tiny-spec is a four-step workflow for Claude Code that turns a ticket into shipped,
|
|
52
|
+
reviewed code. You write the intent, it produces a design, a task list, and then
|
|
53
|
+
builds the work one task at a time. Every task is implemented by one agent and
|
|
54
|
+
graded by an independent reviewer that runs the real tests before anything is
|
|
55
|
+
committed.
|
|
56
|
+
|
|
57
|
+
It is four skills and two agents. No orchestrator, no config file, no build step.
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
tiny-spec-create → tiny-spec-plan → tiny-spec-tasks → tiny-spec-build
|
|
61
|
+
intent design tasks per-task loop
|
|
62
|
+
SPEC.md PLAN.md + tasks.md plan → implement → review → commit
|
|
63
|
+
constitution
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## New to spec-driven development?
|
|
67
|
+
|
|
68
|
+
Spec-driven development (SDD) means writing down *what* you want and *why* before
|
|
69
|
+
any code exists, then letting that spec drive the build. Instead of prompting an
|
|
70
|
+
agent and hoping, you hand it a small, explicit contract — the intent, a design,
|
|
71
|
+
and an ordered list of tasks — and it implements against that. The payoff: the
|
|
72
|
+
agent stops guessing. It knows what "done" looks like, you can review the plan
|
|
73
|
+
before a single line is written, and the result is checked against the spec
|
|
74
|
+
rather than vibes. tiny-spec is one small take on that idea.
|
|
75
|
+
|
|
76
|
+
## Quickstart
|
|
77
|
+
|
|
78
|
+
Install the skills and agents into your Claude Code config with
|
|
79
|
+
[uv](https://docs.astral.sh/uv/):
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
uvx tiny-spec install
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Restart Claude Code so it picks up the new skills, then run the flow in your project:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
/tiny-spec-create # capture intent and requirements (binds a ticket, optional)
|
|
89
|
+
/tiny-spec-plan # turn the spec into a design and harden the constitution
|
|
90
|
+
/tiny-spec-tasks # slice the plan into an ordered checklist
|
|
91
|
+
/tiny-spec-build # build each task: implement, review, commit
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Re-run `install` any time to update; `tiny-spec uninstall` removes only what it
|
|
95
|
+
installed. Each skill is copied (not symlinked) so every install is
|
|
96
|
+
self-contained.
|
|
97
|
+
|
|
98
|
+
<details>
|
|
99
|
+
<summary>Manual install (no uv)</summary>
|
|
100
|
+
|
|
101
|
+
The skills and agents are plain markdown — copy them in by hand. Claude Code
|
|
102
|
+
loads skills from `~/.claude/skills/` and agents from `~/.claude/agents/`:
|
|
103
|
+
|
|
104
|
+
```sh
|
|
105
|
+
git clone https://github.com/GrayMa77er/tiny-spec.git
|
|
106
|
+
cd tiny-spec
|
|
107
|
+
|
|
108
|
+
mkdir -p "$HOME/.claude/skills" "$HOME/.claude/agents"
|
|
109
|
+
for s in tiny-spec-create tiny-spec-plan tiny-spec-tasks tiny-spec-build; do
|
|
110
|
+
cp -R "$s" "$HOME/.claude/skills/$s"
|
|
111
|
+
done
|
|
112
|
+
cp agents/*.md "$HOME/.claude/agents/"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
If a skill name collides with one you already have, rename these before copying,
|
|
116
|
+
or install one set at a time.
|
|
117
|
+
|
|
118
|
+
</details>
|
|
119
|
+
|
|
120
|
+
## How it works
|
|
121
|
+
|
|
122
|
+
The constitution (`constitution.md`) is the spine. `tiny-spec-create` seeds it from a
|
|
123
|
+
short interview, `tiny-spec-plan` hardens it with concrete engineering rules, and
|
|
124
|
+
`tiny-spec-build` injects it whole into every task. It holds your style, standards,
|
|
125
|
+
invariants, definition of done, and verification commands.
|
|
126
|
+
|
|
127
|
+
`tiny-spec-build` walks the task list top to bottom. Each task runs through one loop:
|
|
128
|
+
|
|
129
|
+
1. Plan the task against the constitution (inline, brief).
|
|
130
|
+
2. Implement it with a fresh `tiny-spec-build-executor` agent.
|
|
131
|
+
3. Review it with an independent `tiny-spec-build-reviewer` agent that runs the gate
|
|
132
|
+
end to end and grades against the constitution and the task's acceptance.
|
|
133
|
+
4. On pass, commit the code plus a checklist tick. On fail, loop back to the
|
|
134
|
+
executor with the findings. After two failed attempts it becomes a blocker.
|
|
135
|
+
|
|
136
|
+
```mermaid
|
|
137
|
+
flowchart TB
|
|
138
|
+
SPEC[SPEC.md<br/>intent] --> PLAN[PLAN.md<br/>design] --> TASKS[tasks.md<br/>checklist]
|
|
139
|
+
|
|
140
|
+
TASKS --> P[Plan task]
|
|
141
|
+
P --> I[Implement<br/>executor]
|
|
142
|
+
I --> R[Review + run gate<br/>reviewer]
|
|
143
|
+
R -->|pass| C[Commit + tick]
|
|
144
|
+
C --> TASKS
|
|
145
|
+
R -->|fail| I
|
|
146
|
+
R -->|fail twice| B[Blocker logged to decisions.md]
|
|
147
|
+
|
|
148
|
+
CON([constitution.md]) -.-> P & I & R
|
|
149
|
+
MEM([memory.md]) -.-> I & R
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Solid arrows are the flow. Dotted arrows show the persistent context injected into
|
|
153
|
+
a step: the `constitution.md` goes into planning, implementation, and review, while
|
|
154
|
+
`memory.md` is handed to the executor and reviewer.
|
|
155
|
+
|
|
156
|
+
A small `memory.md` carries operational lessons between runs, so the executor and
|
|
157
|
+
reviewer (which start fresh each time) don't relearn the same pitfalls.
|
|
158
|
+
|
|
159
|
+
When a task can't pass because of a gap in the design or spec, the executor stops
|
|
160
|
+
and logs a blocker instead of hacking around it. You fix the gap upstream in
|
|
161
|
+
`tiny-spec-plan` or `tiny-spec-create`, then resume. Work runs one ticket at a time and
|
|
162
|
+
resumes from the checklist state.
|
|
163
|
+
|
|
164
|
+
## Why it's small
|
|
165
|
+
|
|
166
|
+
Most spec frameworks are generous by default:
|
|
167
|
+
many phases, many agents, many generated documents. tiny-spec makes the opposite
|
|
168
|
+
bet. Keep one safeguard, drop the rest.
|
|
169
|
+
|
|
170
|
+
A green unit test suite is not the same as working software, so the reviewer
|
|
171
|
+
exercises acceptance criteria end to end and a final smoke test confirms the whole
|
|
172
|
+
spec. That independent review is the safeguard — not the volume of planning
|
|
173
|
+
artifacts. One task, one commit, an external reviewer. Nothing gets added unless
|
|
174
|
+
it earns its place.
|
|
175
|
+
|
|
176
|
+
The case for staying small:
|
|
177
|
+
|
|
178
|
+
- **Documents are context, and context isn't free.** Generating large `spec.md`,
|
|
179
|
+
`plan.md`, `research.md`, and `data-model.md` files costs tokens to write, then
|
|
180
|
+
costs context to carry. Every paragraph the agent has to hold is room it no
|
|
181
|
+
longer has for your actual code. tiny-spec keeps the spine small — a
|
|
182
|
+
constitution and a short memory — and injects only what each task needs.
|
|
183
|
+
- **Real work is a ticket inside a system, not a greenfield repo.** Bigger kits
|
|
184
|
+
assume you're bootstrapping a project from a blank page. Day to day, you pick up
|
|
185
|
+
a ticket and change part of a system that already exists. tiny-spec binds to a
|
|
186
|
+
ticket, works one at a time, and references your task platform instead of
|
|
187
|
+
re-describing the world.
|
|
188
|
+
- **Rigid pipelines fight the user.** Mandatory phases and required sections
|
|
189
|
+
impose ceremony on work that doesn't need it. tiny-spec's extra structure is
|
|
190
|
+
optional by design — add shape where it pays, skip it where it doesn't.
|
|
191
|
+
- **More moving parts is more to maintain.** Orchestrators, ownership contracts,
|
|
192
|
+
checkpoint matrices, and config files are themselves a system you have to learn
|
|
193
|
+
and keep in sync. Four skills and two agents are not.
|
|
194
|
+
- **Generated docs can fake rigor.** A folder of polished planning artifacts looks
|
|
195
|
+
like progress, but it isn't proof. The proof is the reviewer running your real
|
|
196
|
+
tests before each commit.
|
|
197
|
+
|
|
198
|
+
That's the whole trade: where larger kits add machinery, tiny-spec adds one
|
|
199
|
+
independent reviewer and stops.
|
|
200
|
+
|
|
201
|
+
## Project layout
|
|
202
|
+
|
|
203
|
+
Each skill is self-contained. It carries its own templates and refers to them by
|
|
204
|
+
relative path, with no absolute paths and no shared parent required at runtime, so
|
|
205
|
+
a skill folder works wherever you drop it.
|
|
206
|
+
|
|
207
|
+
tiny-spec creates a `.spec/` directory in your project root, never inside a skill.
|
|
208
|
+
It is namespaced per ticket, with a shared spine at the root:
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
.spec/
|
|
212
|
+
ACTIVE the active ticket directory name (resolution pointer)
|
|
213
|
+
constitution.md project-wide, shared across tickets
|
|
214
|
+
memory.md operational lessons, shared across tickets
|
|
215
|
+
<ticket-id>/ one directory per ticket (PROJ-123/, gh-42/, …)
|
|
216
|
+
SPEC.md PLAN.md tasks.md decisions.md
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
`CONTRACTS.md` documents the formats for maintainers. The skills do not read it at
|
|
220
|
+
runtime; each is self-sufficient.
|
|
221
|
+
|
|
222
|
+
## Integrations
|
|
223
|
+
|
|
224
|
+
tiny-spec binds to a task platform (Jira, GitHub Issues, Azure DevOps, Monday) by
|
|
225
|
+
reference only: a `ticket` block in the spec and a `Refs:` footer on each
|
|
226
|
+
[Conventional Commit](https://www.conventionalcommits.org/en/v1.0.0/), so the
|
|
227
|
+
platform auto-links the work. No API calls or credentials are required.
|
|
228
|
+
|
|
229
|
+
## Contributing
|
|
230
|
+
|
|
231
|
+
Issues and pull requests are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md), and
|
|
232
|
+
read [AGENTS.md](AGENTS.md) before changing any skill or agent.
|
|
233
|
+
|
|
234
|
+
## License
|
|
235
|
+
|
|
236
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="images/logo.png" alt="tiny-spec" width="200">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">tiny-spec</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">A tiny, opinionated take on spec-driven development.</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License: MIT"></a>
|
|
11
|
+
<a href="https://docs.claude.com/en/docs/claude-code/overview"><img src="https://img.shields.io/badge/Claude%20Code-skills-d97757.svg" alt="Claude Code"></a>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
tiny-spec is a four-step workflow for Claude Code that turns a ticket into shipped,
|
|
15
|
+
reviewed code. You write the intent, it produces a design, a task list, and then
|
|
16
|
+
builds the work one task at a time. Every task is implemented by one agent and
|
|
17
|
+
graded by an independent reviewer that runs the real tests before anything is
|
|
18
|
+
committed.
|
|
19
|
+
|
|
20
|
+
It is four skills and two agents. No orchestrator, no config file, no build step.
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
tiny-spec-create → tiny-spec-plan → tiny-spec-tasks → tiny-spec-build
|
|
24
|
+
intent design tasks per-task loop
|
|
25
|
+
SPEC.md PLAN.md + tasks.md plan → implement → review → commit
|
|
26
|
+
constitution
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## New to spec-driven development?
|
|
30
|
+
|
|
31
|
+
Spec-driven development (SDD) means writing down *what* you want and *why* before
|
|
32
|
+
any code exists, then letting that spec drive the build. Instead of prompting an
|
|
33
|
+
agent and hoping, you hand it a small, explicit contract — the intent, a design,
|
|
34
|
+
and an ordered list of tasks — and it implements against that. The payoff: the
|
|
35
|
+
agent stops guessing. It knows what "done" looks like, you can review the plan
|
|
36
|
+
before a single line is written, and the result is checked against the spec
|
|
37
|
+
rather than vibes. tiny-spec is one small take on that idea.
|
|
38
|
+
|
|
39
|
+
## Quickstart
|
|
40
|
+
|
|
41
|
+
Install the skills and agents into your Claude Code config with
|
|
42
|
+
[uv](https://docs.astral.sh/uv/):
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
uvx tiny-spec install
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Restart Claude Code so it picks up the new skills, then run the flow in your project:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
/tiny-spec-create # capture intent and requirements (binds a ticket, optional)
|
|
52
|
+
/tiny-spec-plan # turn the spec into a design and harden the constitution
|
|
53
|
+
/tiny-spec-tasks # slice the plan into an ordered checklist
|
|
54
|
+
/tiny-spec-build # build each task: implement, review, commit
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Re-run `install` any time to update; `tiny-spec uninstall` removes only what it
|
|
58
|
+
installed. Each skill is copied (not symlinked) so every install is
|
|
59
|
+
self-contained.
|
|
60
|
+
|
|
61
|
+
<details>
|
|
62
|
+
<summary>Manual install (no uv)</summary>
|
|
63
|
+
|
|
64
|
+
The skills and agents are plain markdown — copy them in by hand. Claude Code
|
|
65
|
+
loads skills from `~/.claude/skills/` and agents from `~/.claude/agents/`:
|
|
66
|
+
|
|
67
|
+
```sh
|
|
68
|
+
git clone https://github.com/GrayMa77er/tiny-spec.git
|
|
69
|
+
cd tiny-spec
|
|
70
|
+
|
|
71
|
+
mkdir -p "$HOME/.claude/skills" "$HOME/.claude/agents"
|
|
72
|
+
for s in tiny-spec-create tiny-spec-plan tiny-spec-tasks tiny-spec-build; do
|
|
73
|
+
cp -R "$s" "$HOME/.claude/skills/$s"
|
|
74
|
+
done
|
|
75
|
+
cp agents/*.md "$HOME/.claude/agents/"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
If a skill name collides with one you already have, rename these before copying,
|
|
79
|
+
or install one set at a time.
|
|
80
|
+
|
|
81
|
+
</details>
|
|
82
|
+
|
|
83
|
+
## How it works
|
|
84
|
+
|
|
85
|
+
The constitution (`constitution.md`) is the spine. `tiny-spec-create` seeds it from a
|
|
86
|
+
short interview, `tiny-spec-plan` hardens it with concrete engineering rules, and
|
|
87
|
+
`tiny-spec-build` injects it whole into every task. It holds your style, standards,
|
|
88
|
+
invariants, definition of done, and verification commands.
|
|
89
|
+
|
|
90
|
+
`tiny-spec-build` walks the task list top to bottom. Each task runs through one loop:
|
|
91
|
+
|
|
92
|
+
1. Plan the task against the constitution (inline, brief).
|
|
93
|
+
2. Implement it with a fresh `tiny-spec-build-executor` agent.
|
|
94
|
+
3. Review it with an independent `tiny-spec-build-reviewer` agent that runs the gate
|
|
95
|
+
end to end and grades against the constitution and the task's acceptance.
|
|
96
|
+
4. On pass, commit the code plus a checklist tick. On fail, loop back to the
|
|
97
|
+
executor with the findings. After two failed attempts it becomes a blocker.
|
|
98
|
+
|
|
99
|
+
```mermaid
|
|
100
|
+
flowchart TB
|
|
101
|
+
SPEC[SPEC.md<br/>intent] --> PLAN[PLAN.md<br/>design] --> TASKS[tasks.md<br/>checklist]
|
|
102
|
+
|
|
103
|
+
TASKS --> P[Plan task]
|
|
104
|
+
P --> I[Implement<br/>executor]
|
|
105
|
+
I --> R[Review + run gate<br/>reviewer]
|
|
106
|
+
R -->|pass| C[Commit + tick]
|
|
107
|
+
C --> TASKS
|
|
108
|
+
R -->|fail| I
|
|
109
|
+
R -->|fail twice| B[Blocker logged to decisions.md]
|
|
110
|
+
|
|
111
|
+
CON([constitution.md]) -.-> P & I & R
|
|
112
|
+
MEM([memory.md]) -.-> I & R
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Solid arrows are the flow. Dotted arrows show the persistent context injected into
|
|
116
|
+
a step: the `constitution.md` goes into planning, implementation, and review, while
|
|
117
|
+
`memory.md` is handed to the executor and reviewer.
|
|
118
|
+
|
|
119
|
+
A small `memory.md` carries operational lessons between runs, so the executor and
|
|
120
|
+
reviewer (which start fresh each time) don't relearn the same pitfalls.
|
|
121
|
+
|
|
122
|
+
When a task can't pass because of a gap in the design or spec, the executor stops
|
|
123
|
+
and logs a blocker instead of hacking around it. You fix the gap upstream in
|
|
124
|
+
`tiny-spec-plan` or `tiny-spec-create`, then resume. Work runs one ticket at a time and
|
|
125
|
+
resumes from the checklist state.
|
|
126
|
+
|
|
127
|
+
## Why it's small
|
|
128
|
+
|
|
129
|
+
Most spec frameworks are generous by default:
|
|
130
|
+
many phases, many agents, many generated documents. tiny-spec makes the opposite
|
|
131
|
+
bet. Keep one safeguard, drop the rest.
|
|
132
|
+
|
|
133
|
+
A green unit test suite is not the same as working software, so the reviewer
|
|
134
|
+
exercises acceptance criteria end to end and a final smoke test confirms the whole
|
|
135
|
+
spec. That independent review is the safeguard — not the volume of planning
|
|
136
|
+
artifacts. One task, one commit, an external reviewer. Nothing gets added unless
|
|
137
|
+
it earns its place.
|
|
138
|
+
|
|
139
|
+
The case for staying small:
|
|
140
|
+
|
|
141
|
+
- **Documents are context, and context isn't free.** Generating large `spec.md`,
|
|
142
|
+
`plan.md`, `research.md`, and `data-model.md` files costs tokens to write, then
|
|
143
|
+
costs context to carry. Every paragraph the agent has to hold is room it no
|
|
144
|
+
longer has for your actual code. tiny-spec keeps the spine small — a
|
|
145
|
+
constitution and a short memory — and injects only what each task needs.
|
|
146
|
+
- **Real work is a ticket inside a system, not a greenfield repo.** Bigger kits
|
|
147
|
+
assume you're bootstrapping a project from a blank page. Day to day, you pick up
|
|
148
|
+
a ticket and change part of a system that already exists. tiny-spec binds to a
|
|
149
|
+
ticket, works one at a time, and references your task platform instead of
|
|
150
|
+
re-describing the world.
|
|
151
|
+
- **Rigid pipelines fight the user.** Mandatory phases and required sections
|
|
152
|
+
impose ceremony on work that doesn't need it. tiny-spec's extra structure is
|
|
153
|
+
optional by design — add shape where it pays, skip it where it doesn't.
|
|
154
|
+
- **More moving parts is more to maintain.** Orchestrators, ownership contracts,
|
|
155
|
+
checkpoint matrices, and config files are themselves a system you have to learn
|
|
156
|
+
and keep in sync. Four skills and two agents are not.
|
|
157
|
+
- **Generated docs can fake rigor.** A folder of polished planning artifacts looks
|
|
158
|
+
like progress, but it isn't proof. The proof is the reviewer running your real
|
|
159
|
+
tests before each commit.
|
|
160
|
+
|
|
161
|
+
That's the whole trade: where larger kits add machinery, tiny-spec adds one
|
|
162
|
+
independent reviewer and stops.
|
|
163
|
+
|
|
164
|
+
## Project layout
|
|
165
|
+
|
|
166
|
+
Each skill is self-contained. It carries its own templates and refers to them by
|
|
167
|
+
relative path, with no absolute paths and no shared parent required at runtime, so
|
|
168
|
+
a skill folder works wherever you drop it.
|
|
169
|
+
|
|
170
|
+
tiny-spec creates a `.spec/` directory in your project root, never inside a skill.
|
|
171
|
+
It is namespaced per ticket, with a shared spine at the root:
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
.spec/
|
|
175
|
+
ACTIVE the active ticket directory name (resolution pointer)
|
|
176
|
+
constitution.md project-wide, shared across tickets
|
|
177
|
+
memory.md operational lessons, shared across tickets
|
|
178
|
+
<ticket-id>/ one directory per ticket (PROJ-123/, gh-42/, …)
|
|
179
|
+
SPEC.md PLAN.md tasks.md decisions.md
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
`CONTRACTS.md` documents the formats for maintainers. The skills do not read it at
|
|
183
|
+
runtime; each is self-sufficient.
|
|
184
|
+
|
|
185
|
+
## Integrations
|
|
186
|
+
|
|
187
|
+
tiny-spec binds to a task platform (Jira, GitHub Issues, Azure DevOps, Monday) by
|
|
188
|
+
reference only: a `ticket` block in the spec and a `Refs:` footer on each
|
|
189
|
+
[Conventional Commit](https://www.conventionalcommits.org/en/v1.0.0/), so the
|
|
190
|
+
platform auto-links the work. No API calls or credentials are required.
|
|
191
|
+
|
|
192
|
+
## Contributing
|
|
193
|
+
|
|
194
|
+
Issues and pull requests are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md), and
|
|
195
|
+
read [AGENTS.md](AGENTS.md) before changing any skill or agent.
|
|
196
|
+
|
|
197
|
+
## License
|
|
198
|
+
|
|
199
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tiny-spec-build-executor
|
|
3
|
+
description: Implements a single task — writes/modifies code to satisfy one task, adhering to the project's constitution, and reports what changed plus any decisions or blockers. Spawned (one per task) by tiny-spec-build. Does not plan, spawn other agents, or invoke skills.
|
|
4
|
+
tools: Read, Write, Edit, Bash, Grep, Glob
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# tiny-spec-build-executor
|
|
8
|
+
|
|
9
|
+
You implement **one task** from a build. You are spawned by `tiny-spec-build`,
|
|
10
|
+
one instance per task, running on its own. Your final message **is** the
|
|
11
|
+
structured report back — it is not shown to a human, so return data, not prose
|
|
12
|
+
pleasantries.
|
|
13
|
+
|
|
14
|
+
## What you receive (the context contract)
|
|
15
|
+
|
|
16
|
+
Everything you need and nothing you don't:
|
|
17
|
+
|
|
18
|
+
- the **task id**, **description**, and **acceptance** (the outcome that proves it done);
|
|
19
|
+
- a **`files:` hint** — likely paths to touch (guidance, not a hard boundary);
|
|
20
|
+
- the full **constitution** (`constitution.md`): Style, Engineering standards,
|
|
21
|
+
Guiding invariants, Glossary, Layout, Definition of Done, Verification commands;
|
|
22
|
+
- the project's **memory** if any (`memory.md`) — operational lessons; honor them
|
|
23
|
+
so you don't re-learn a pitfall a past run already paid for;
|
|
24
|
+
- the specific existing files that are your starting point, named explicitly.
|
|
25
|
+
|
|
26
|
+
You are **blind to the workflow, not to the codebase.** You don't get the plan,
|
|
27
|
+
other tasks, or shared state. But the named files are a launch point, not the whole
|
|
28
|
+
picture: **explore the codebase read-only** as far as you need — grep for callers
|
|
29
|
+
and usages, read the types you touch, find the existing helper or pattern to reuse
|
|
30
|
+
instead of reinventing. Editing existing code blind is how the constitution gets
|
|
31
|
+
violated.
|
|
32
|
+
|
|
33
|
+
## How to work
|
|
34
|
+
|
|
35
|
+
1. Read your launch-point files, then explore outward (read-only) until you
|
|
36
|
+
understand the code you're changing and the patterns to match.
|
|
37
|
+
2. Write or modify code to satisfy the task, **adhering strictly to the
|
|
38
|
+
constitution** — style, invariants, error handling, testing approach, layout.
|
|
39
|
+
3. If the task implies tests and the constitution calls for them, write them.
|
|
40
|
+
4. Keep your changes focused on this task. The `files:` hint is guidance — if the
|
|
41
|
+
task genuinely needs a nearby file the hint missed, that's fine (you're
|
|
42
|
+
sequential, no one else is writing). But do **not** refactor unrelated code or
|
|
43
|
+
implement adjacent tasks — that's scope creep, not thoroughness.
|
|
44
|
+
5. You MAY run a **narrow self-check** of your own work (the one test file you
|
|
45
|
+
wrote, a syntax/import check). You do **not** need to run the full gate — the
|
|
46
|
+
independent **reviewer** runs the authoritative Verification commands next.
|
|
47
|
+
Leave the tree in a clean, buildable state for it.
|
|
48
|
+
|
|
49
|
+
## Hard constraints
|
|
50
|
+
|
|
51
|
+
- **Never spawn subagents or invoke skills.** You have no Agent tool by design.
|
|
52
|
+
One task, one executor.
|
|
53
|
+
- **Never hack around a blocker.** If you cannot proceed correctly — a design gap,
|
|
54
|
+
an impossible requirement, a missing dependency, a contradiction with the
|
|
55
|
+
constitution — **stop and report a blocker.** Do not invent a workaround, stub
|
|
56
|
+
silently, or guess intent. Bubbling up is the correct outcome, not a failure.
|
|
57
|
+
- **Surface, don't bury, decisions.** Record any non-obvious choice in your report.
|
|
58
|
+
|
|
59
|
+
## Report back (your final message)
|
|
60
|
+
|
|
61
|
+
Return exactly this structure so `tiny-spec-build` can act:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
TASK: <task id>
|
|
65
|
+
STATUS: done | blocked
|
|
66
|
+
CHANGES:
|
|
67
|
+
- <file>: <one-line summary of what changed>
|
|
68
|
+
DECISIONS:
|
|
69
|
+
- <any non-obvious choice you made, and why> (omit section if none)
|
|
70
|
+
BLOCKER:
|
|
71
|
+
- <if blocked: what stopped you, and which upstream doc (SPEC or PLAN) must change
|
|
72
|
+
to unblock> (omit section if not blocked)
|
|
73
|
+
SELF-CHECK:
|
|
74
|
+
- <the narrow check you ran and its result, or "none — left the gate to the reviewer">
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
If `STATUS` is `blocked`, leave the work in a clean state (no half-applied hacks) —
|
|
78
|
+
`tiny-spec-build` will leave the task unchecked and route the blocker upstream.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tiny-spec-build-reviewer
|
|
3
|
+
description: Independently reviews a single finished task — runs the project's real gate end-to-end and checks the code against the constitution and the task's acceptance. Blind to how the code was written. Returns PASS/FAIL plus findings. Spawned (one per task) by tiny-spec-build. Does not fix code, plan, spawn agents, or invoke skills.
|
|
4
|
+
tools: Read, Write, Edit, Bash, Grep, Glob
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# tiny-spec-build-reviewer
|
|
8
|
+
|
|
9
|
+
You independently review **one finished task** from a build. You did
|
|
10
|
+
**not** write this code and you have no memory of how it was written — that
|
|
11
|
+
independence is the whole point. Your final message **is** the structured verdict
|
|
12
|
+
back to `tiny-spec-build`; return data, not pleasantries.
|
|
13
|
+
|
|
14
|
+
## What you receive (the context contract)
|
|
15
|
+
|
|
16
|
+
- the **task id**, **description**, and **acceptance** (the outcome that must hold);
|
|
17
|
+
- the full **constitution** (`constitution.md`) — especially **Guiding invariants**,
|
|
18
|
+
**Definition of Done**, and **Verification commands**;
|
|
19
|
+
- the project's **memory** if any (`memory.md`) — operational lessons (e.g. the
|
|
20
|
+
gate needs the package installed first); honor them so you don't false-fail on a
|
|
21
|
+
known precondition;
|
|
22
|
+
- the list of **changed files** to review.
|
|
23
|
+
|
|
24
|
+
## How to review
|
|
25
|
+
|
|
26
|
+
Your job is to answer one question honestly: **does this task actually satisfy its
|
|
27
|
+
acceptance and the constitution — verified, not inferred?**
|
|
28
|
+
|
|
29
|
+
1. **Read the changed code.** Check it against the constitution: does it honor the
|
|
30
|
+
**Guiding invariants**, match the **Style** and **Layout**, meet the
|
|
31
|
+
**Definition of Done**? Note any violation as a finding.
|
|
32
|
+
2. **Run the real gate.** Execute the constitution's **Verification commands**
|
|
33
|
+
end-to-end (install → lint → test → build → run, as applicable) from a clean
|
|
34
|
+
state, after the documented setup — not a test-runner shortcut. Capture the
|
|
35
|
+
real output.
|
|
36
|
+
3. **Exercise the acceptance.** Trigger the task's stated outcome the most
|
|
37
|
+
black-box way available (CLI > HTTP > public API) with realistic input,
|
|
38
|
+
including a negative case if the acceptance implies a boundary or rejection.
|
|
39
|
+
The acceptance is met only if the **observed** effect is the one it names — not
|
|
40
|
+
an adjacent or merely-plausible behavior. "A unit test exists" or "the code
|
|
41
|
+
looks right" is **not** evidence.
|
|
42
|
+
|
|
43
|
+
## Verdict rules
|
|
44
|
+
|
|
45
|
+
- **`PASS`** — the gate is green AND you exercised the acceptance end-to-end with
|
|
46
|
+
real input AND the observed effect matches AND no invariant/DoD violation. Only
|
|
47
|
+
this is a pass.
|
|
48
|
+
- **`FAIL`** — anything short of the above: a red gate, an invariant violated, the
|
|
49
|
+
acceptance not observably met, or you couldn't exercise it end-to-end. When torn,
|
|
50
|
+
**fail** — never round up. List concrete, actionable findings so the executor
|
|
51
|
+
can fix them.
|
|
52
|
+
|
|
53
|
+
You are **read-only on the source** — you run commands and read files, but you do
|
|
54
|
+
**not** edit code, fix the task, or rewrite docs. If it's wrong, you report it; the
|
|
55
|
+
executor fixes it on the next attempt. (You have edit tools only so you can run
|
|
56
|
+
gates that scratch-write build output — never use them on source.)
|
|
57
|
+
|
|
58
|
+
Never spawn subagents or invoke skills.
|
|
59
|
+
|
|
60
|
+
## Report back (your final message)
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
TASK: <task id>
|
|
64
|
+
VERDICT: PASS | FAIL
|
|
65
|
+
GATE: <the Verification commands you ran + the real result (pass/fail + key output)>
|
|
66
|
+
ACCEPTANCE: <how you exercised it + the observed effect, or why you couldn't>
|
|
67
|
+
FINDINGS:
|
|
68
|
+
- <each invariant/DoD/acceptance problem, concrete and actionable> (omit if PASS)
|
|
69
|
+
```
|