noskills 4.1.50 → 4.1.54
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.
- package/README.md +345 -890
- package/chunks/approve-ZX62EG5U.js +1 -0
- package/chunks/{ask-IZXOXJHB.js → ask-VGI3BFZW.js} +1 -1
- package/chunks/block-ERQESYMH.js +1 -0
- package/chunks/cancel-FOVCYBQY.js +1 -0
- package/chunks/{chunk-K223KAUB.js → chunk-2GF5IUQD.js} +1 -1
- package/chunks/chunk-5CNPFLE6.js +1 -0
- package/chunks/chunk-5P46WSNG.js +5 -0
- package/chunks/{chunk-AQWB2PVR.js → chunk-5URW6X3N.js} +93 -92
- package/chunks/{chunk-6OQNXZAN.js → chunk-6YHWLEJ4.js} +26 -26
- package/chunks/chunk-AP3YBNPX.js +1 -0
- package/chunks/{chunk-OCDUS26F.js → chunk-DEIZVYT6.js} +1 -1
- package/chunks/chunk-H77MLIL5.js +4 -0
- package/chunks/{chunk-TI4CLT2V.js → chunk-HNAHPI6V.js} +1 -1
- package/chunks/{chunk-E7UED6DA.js → chunk-JVCVWI3B.js} +1 -1
- package/chunks/{chunk-ESTTTPON.js → chunk-KYQ77E7T.js} +1 -1
- package/chunks/{chunk-JCIANZPY.js → chunk-LBPD4EIH.js} +1 -1
- package/chunks/chunk-OKM4FE4G.js +1 -0
- package/chunks/chunk-OVLGUKPG.js +1 -0
- package/chunks/chunk-PKYW3S5P.js +5 -0
- package/chunks/chunk-RGGYSKJY.js +5 -0
- package/chunks/chunk-RJX4ZXQ4.js +2 -0
- package/chunks/{chunk-WWPJMOT3.js → chunk-SVJVJDZR.js} +1 -1
- package/chunks/{chunk-JKKCV4KM.js → chunk-UG26APX2.js} +1 -1
- package/chunks/{chunk-2X2U2VC5.js → chunk-UT6ZCLRA.js} +1 -1
- package/chunks/chunk-XNGHRJVK.js +1 -0
- package/chunks/{chunk-CLCZ7IO3.js → chunk-YSSDQJTT.js} +1 -1
- package/chunks/chunk-YTNM7A5Y.js +3 -0
- package/chunks/chunk-Z3O5HAIO.js +2 -0
- package/chunks/{claude-code-F64HRHHR.js → claude-code-BWCSAVK2.js} +1 -1
- package/chunks/{cmd-NWSNAUKC.js → cmd-ZXO6KFK6.js} +1 -1
- package/chunks/concern-2PON4VPG.js +1 -0
- package/chunks/{config-EPT7NOOO.js → config-CZDLCSOC.js} +1 -1
- package/chunks/delegate-VRPCGUT2.js +1 -0
- package/chunks/diagrams-D5CYTTWA.js +1 -0
- package/chunks/diagrams-I2QKL7WR.js +1 -0
- package/chunks/done-WQDGQZ5D.js +1 -0
- package/chunks/followup-Q3RLSNNM.js +1 -0
- package/chunks/{free-5HORD4VB.js → free-R4ZTZ76O.js} +1 -1
- package/chunks/init-HTCNOWTZ.js +1 -0
- package/chunks/invoke-hook-675IUCLN.js +13 -0
- package/chunks/{kiro-XJ6XH4Q4.js → kiro-RGYUKJAX.js} +1 -1
- package/chunks/learn-MWUFAR2G.js +7 -0
- package/chunks/{list-SG2MZH7M.js → list-6EQP6VUL.js} +1 -1
- package/chunks/manager-Q7DRXNNO.js +6 -0
- package/chunks/{mod-AU5SVHO5.js → mod-A77UWGGG.js} +1 -1
- package/chunks/mod-TYCXSLSH.js +1 -0
- package/chunks/next-7W4YVHSZ.js +7 -0
- package/chunks/{ollama-IVHLR7VV.js → ollama-LTZ43OHQ.js} +1 -1
- package/chunks/{opencode-MTSBCZYY.js → opencode-PZDL7VDP.js} +1 -1
- package/chunks/pack-DXWS4PMA.js +5 -0
- package/chunks/{purge-573OIQZI.js → purge-XZ5EOCFP.js} +1 -1
- package/chunks/reopen-VATALF56.js +1 -0
- package/chunks/reset-BL73UVLM.js +1 -0
- package/chunks/review-VF6JOTLX.js +1 -0
- package/chunks/rule-ODX4WMCS.js +6 -0
- package/chunks/run-J5Z6R4DP.js +3 -0
- package/chunks/session-DFMI2GCC.js +1 -0
- package/chunks/spec-3PAUTPIT.js +1 -0
- package/chunks/status-5JHFFTMD.js +1 -0
- package/chunks/sync-CVEZ4FMQ.js +1 -0
- package/chunks/{watch-ELIW23EO.js → watch-I7Q3AEAQ.js} +7 -7
- package/chunks/web-JOWEH622.js +1 -0
- package/chunks/wontfix-CJMNFDCG.js +1 -0
- package/noskills.js +1 -1
- package/package.json +1 -1
- package/chunks/approve-LYDFDSXE.js +0 -1
- package/chunks/block-4IUG6QYT.js +0 -1
- package/chunks/cancel-STVRTPSC.js +0 -1
- package/chunks/chunk-4N7N37OY.js +0 -1
- package/chunks/chunk-GOLHD4DZ.js +0 -1
- package/chunks/chunk-IZMNMJYU.js +0 -16
- package/chunks/chunk-JNVM2KAE.js +0 -1
- package/chunks/chunk-MSJSMJL2.js +0 -1
- package/chunks/chunk-RMCTOOQL.js +0 -1
- package/chunks/chunk-RTD42HPS.js +0 -2
- package/chunks/concern-NQODAEHU.js +0 -1
- package/chunks/done-TLRZYAUZ.js +0 -1
- package/chunks/init-A3VTACZC.js +0 -1
- package/chunks/invoke-hook-Y2YREMYB.js +0 -11
- package/chunks/manager-5AJ7QWMG.js +0 -6
- package/chunks/next-GSQE7GYI.js +0 -8
- package/chunks/pack-KWRZVNBH.js +0 -5
- package/chunks/reopen-G7ZMJSB7.js +0 -1
- package/chunks/reset-WRG3L4QP.js +0 -1
- package/chunks/rule-HMBAP5LJ.js +0 -6
- package/chunks/run-CC6MLCNO.js +0 -3
- package/chunks/session-TYOM74BQ.js +0 -1
- package/chunks/spec-LVJCLNRO.js +0 -1
- package/chunks/status-YALP7W5Y.js +0 -1
- package/chunks/sync-L7E5Y3OG.js +0 -1
- package/chunks/wontfix-4L3IAWLG.js +0 -1
package/README.md
CHANGED
|
@@ -1,32 +1,45 @@
|
|
|
1
1
|
# [@eser/noskills](./)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
AI agents are powerful. But left alone, they take shortcuts — they skip
|
|
4
|
+
requirements, rush past edge cases, declare "done" when it isn't, and forget
|
|
5
|
+
your spec/PRD details halfway through. You end up babysitting the thing that was
|
|
6
|
+
supposed to save you time.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Noskills is here to fix this. It's designed as a state-machine orchestrator for
|
|
9
|
+
AI coding agents. An agent can't skip discovery, can't ignore tests, can't
|
|
10
|
+
declare victory without proof. Not because a prompt says "please don't" —
|
|
11
|
+
because the system mechanically blocks it.
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
Think of it as a Scrum Master for your agents.
|
|
14
|
+
|
|
15
|
+
Noskills provides you to a better workflow and context health with replacing
|
|
16
|
+
skill-packs. Loading skills into context and hoping agents pick the right one is
|
|
17
|
+
a pull model — and it doesn't work. noskills is a push model: it delivers
|
|
18
|
+
exactly the right instruction at the right time. The agent never decides what to
|
|
19
|
+
do next. The state machine does.
|
|
20
|
+
|
|
21
|
+
Not every task needs a full discovery cycle. Bug fix? ship-fast mode — 2
|
|
22
|
+
questions, spec in 2 minutes. Major feature? full mode with adaptive follow-ups.
|
|
23
|
+
You pick the depth. See [Discovery Modes](#discovery-modes) below.
|
|
16
24
|
|
|
17
25
|
If you want to test noskills with a platform other than Claude Code, reach out —
|
|
18
26
|
we'd love early feedback. Find me at [github.com/eser](https://github.com/eser)
|
|
19
27
|
or [@eserozvataf](https://x.com/eserozvataf).
|
|
20
28
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
29
|
+
## The Problem
|
|
30
|
+
|
|
31
|
+
Agents have a context rot problem. The more skills, rules, and conventions you
|
|
32
|
+
load upfront, the worse the agent performs — its context window fills with
|
|
33
|
+
instructions it doesn't need yet, and it forgets the ones it does.
|
|
24
34
|
|
|
25
|
-
|
|
35
|
+
You say "add photo upload with validation." The agent says "on it!" and starts
|
|
36
|
+
coding immediately. Twenty minutes later you discover it skipped validation,
|
|
37
|
+
forgot error handling, deleted your existing code, and declared the task
|
|
38
|
+
complete. You correct it. It fixes one thing, breaks another. Context fills up.
|
|
39
|
+
The agent forgets or gets distracted even you told it ten minutes ago. You start
|
|
40
|
+
over.
|
|
26
41
|
|
|
27
|
-
|
|
28
|
-
conventions you load upfront, the worse the agent performs — its context window
|
|
29
|
-
fills with instructions it doesn't need yet, and it forgets the ones it does.
|
|
42
|
+
### Why skills don't work
|
|
30
43
|
|
|
31
44
|
Skills are a "pull" model: the agent decides which skill to load. This creates
|
|
32
45
|
two failure modes — picking the wrong skill (wasted context) and needing
|
|
@@ -42,82 +55,120 @@ The agent calls `noskills next`, gets exactly what it needs for the current
|
|
|
42
55
|
phase, acts on it, and calls `noskills next` again. No skill selection, no
|
|
43
56
|
context pollution, no forgetting.
|
|
44
57
|
|
|
45
|
-
##
|
|
58
|
+
## Noskills Solution
|
|
59
|
+
|
|
60
|
+
**Before you code, it makes you think.** noskills asks 6 discovery questions
|
|
61
|
+
that probe product, engineering, and QA at the same time. Not a checklist — the
|
|
62
|
+
questions adapt to your answers. If you say "WebSocket," it asks about
|
|
63
|
+
reconnection. If you're vague, it pushes back. You end up with a spec that
|
|
64
|
+
reflects what you actually need, not what the agent guessed.
|
|
65
|
+
|
|
66
|
+
**It generates a real spec with real tasks.** Discovery answers become a spec
|
|
67
|
+
with concrete tasks and acceptance criteria. You review it, adjust it, approve
|
|
68
|
+
it. The agent doesn't touch code until you say go.
|
|
69
|
+
|
|
70
|
+
**Each task runs in isolation.** The main agent orchestrates, sub-agents
|
|
71
|
+
execute. Fresh context per task. No context rot, no forgotten requirements, no
|
|
72
|
+
"the agent got confused after 30 minutes."
|
|
73
|
+
|
|
74
|
+
**The agent can't lie about being done.** Tests run before a task is accepted.
|
|
75
|
+
The agent reports against specific acceptance criteria, not vibes. Unfinished
|
|
76
|
+
items carry forward as debt — they don't disappear.
|
|
77
|
+
|
|
78
|
+
**Your concerns shape everything.** "We're open-source" isn't a label — it's a
|
|
79
|
+
lens. It injects documentation requirements into every spec, contributor checks
|
|
80
|
+
into every review, and license reminders into every task. Stack multiple
|
|
81
|
+
concerns to define your project's character.
|
|
82
|
+
|
|
83
|
+
**One source of truth for all tools.** Write rules once. noskills generates
|
|
84
|
+
CLAUDE.md, AGENTS.md, .cursorrules, Kiro steering files, and more. Your teammate
|
|
85
|
+
on Cursor and your teammate on Claude Code get the same conventions,
|
|
86
|
+
automatically.
|
|
87
|
+
|
|
88
|
+
**A human who's always in charge.** noskills never makes decisions silently.
|
|
89
|
+
Discovery questions -> you answer. Spec approval -> you decide. Architectural
|
|
90
|
+
choices -> you pick. Concern tensions -> you resolve. The agent executes, you
|
|
91
|
+
decide. Explicit > Clever.
|
|
92
|
+
|
|
93
|
+
### Before & After
|
|
46
94
|
|
|
47
95
|
**Without noskills:**
|
|
48
96
|
|
|
49
97
|
```
|
|
50
98
|
You: "Add photo upload with validation"
|
|
51
|
-
Agent: *
|
|
52
|
-
Agent: *picks wrong skill, starts building auth instead*
|
|
53
|
-
Agent: "I've implemented a comprehensive authentication system..."
|
|
54
|
-
You: "No, photo UPLOAD"
|
|
55
|
-
Agent: *context is now 60% full with auth code it wrote*
|
|
56
|
-
Agent: *starts photo upload but forgets validation requirement*
|
|
99
|
+
Agent: *starts coding immediately*
|
|
57
100
|
Agent: "Done! Photo upload is working."
|
|
58
|
-
You:
|
|
101
|
+
You: "There's no validation. And you deleted my error handler."
|
|
59
102
|
Agent: "I apologize, let me fix that..."
|
|
60
|
-
|
|
61
|
-
Agent: *forgets everything, starts from scratch*
|
|
103
|
+
*context fills up, agent forgets everything, starts from scratch*
|
|
62
104
|
```
|
|
63
105
|
|
|
64
106
|
**With noskills:**
|
|
65
107
|
|
|
66
108
|
```
|
|
67
109
|
You: "Add photo upload with validation"
|
|
68
|
-
noskills:
|
|
69
|
-
You: "They fill forms manually
|
|
70
|
-
noskills:
|
|
110
|
+
noskills: "What do users do today without this?"
|
|
111
|
+
You: "They fill forms manually"
|
|
112
|
+
noskills: "1-star and 10-star versions?"
|
|
71
113
|
You: "1-star: basic upload. 10-star: auto-detect from photo"
|
|
72
|
-
... 4 more questions ...
|
|
114
|
+
... 4 more questions, each adapting to your answers ...
|
|
73
115
|
noskills: "Here's your spec. 5 tasks. Approve?"
|
|
74
116
|
You: "Approved"
|
|
75
|
-
|
|
76
|
-
Agent: *implements task
|
|
77
|
-
|
|
78
|
-
Agent: "Endpoint works. Error handling done. Docs not yet."
|
|
79
|
-
noskills: "Docs carried as debt. Task 2: Add validation..."
|
|
80
|
-
*Each task: fresh context, clear scope, verified before advancing*
|
|
117
|
+
Agent: *implements task 1 in fresh context, tests pass, reports progress*
|
|
118
|
+
Agent: *implements task 2 in fresh context, tests pass, reports progress*
|
|
119
|
+
*Each task: clear scope, verified, nothing forgotten*
|
|
81
120
|
```
|
|
82
121
|
|
|
83
|
-
|
|
122
|
+
### How it works (briefly)
|
|
84
123
|
|
|
85
|
-
|
|
86
|
-
asks 6 questions that probe product, engineering, and QA simultaneously — with
|
|
87
|
-
sub-questions injected by your active concerns. The agent scans your codebase
|
|
88
|
-
first, challenges your assumptions, then asks. You get a spec that reflects what
|
|
89
|
-
you actually need, not what the agent guessed.
|
|
124
|
+
Every spec moves through phases:
|
|
90
125
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
The agent reports against specific criteria, not vibes.
|
|
126
|
+
```
|
|
127
|
+
IDLE → DISCOVERY → REVIEW → DRAFT → APPROVED → EXECUTING → DONE
|
|
128
|
+
```
|
|
95
129
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
urgency. The agent can't declare victory and move on.
|
|
130
|
+
At each phase, the agent gets exactly the instructions it needs — nothing more.
|
|
131
|
+
In DISCOVERY, it can't edit files (mechanically blocked, not just asked nicely).
|
|
132
|
+
In EXECUTING, it delegates to sub-agents with fresh context per task. At every
|
|
133
|
+
gate, you decide.
|
|
101
134
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
135
|
+
The agent calls `noskills next`, gets a JSON payload with its current task,
|
|
136
|
+
behavioral rules, and concern reminders. It does the work, calls `noskills next`
|
|
137
|
+
again.
|
|
105
138
|
|
|
106
|
-
**
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
139
|
+
**Hooks enforce the rules at the system level.** The agent doesn't know hooks
|
|
140
|
+
exist. It just can't do things it shouldn't — like editing files during
|
|
141
|
+
discovery or running git commands. This is the difference between "please don't"
|
|
142
|
+
and "you can't."
|
|
110
143
|
|
|
111
|
-
|
|
112
|
-
noskills generates AGENTS.md CLAUDE.md, .cursorrules, Kiro steering files,
|
|
113
|
-
Copilot instructions, Windsurf rules, OpenCode AGENTS.md + plugins, Codex CLI
|
|
114
|
-
hooks + TOML agents, and Copilot CLI hooks + MCP config. Your teammate on Cursor
|
|
115
|
-
and your teammate on Claude Code both get the same conventions, automatically.
|
|
144
|
+
### Key concepts
|
|
116
145
|
|
|
117
|
-
**
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
146
|
+
**Discovery** — Adaptive questions that challenge your assumptions, surface edge
|
|
147
|
+
cases, and catch things you'd miss. Discovery modes shape the depth.
|
|
148
|
+
|
|
149
|
+
**Concerns** — your project's DNA. "open-source" adds documentation requirements
|
|
150
|
+
everywhere. "beautiful-product" demands every UI state is designed. "move-fast"
|
|
151
|
+
accepts good-enough. Concerns stack — they inject into discovery, specs,
|
|
152
|
+
execution, and verification.
|
|
153
|
+
|
|
154
|
+
**Specs** — living documents with tasks, acceptance criteria, and status
|
|
155
|
+
tracking. Not a plan the agent ignores — a contract it's held to.
|
|
156
|
+
|
|
157
|
+
**Sub-agent pipeline** — main agent orchestrates, sub-agents execute individual
|
|
158
|
+
tasks in fresh context. Verifier checks the work. Test-writer ensures coverage.
|
|
159
|
+
No context rot.
|
|
160
|
+
|
|
161
|
+
**Verification backpressure** — tests must pass before a task is accepted.
|
|
162
|
+
Unfinished items become debt that follows the agent around with increasing
|
|
163
|
+
urgency.
|
|
164
|
+
|
|
165
|
+
**Packs** — installable bundles of rules and concerns.
|
|
166
|
+
`noskills pack install typescript` gives you 3 rules and a concern. Share packs
|
|
167
|
+
across projects or teams.
|
|
168
|
+
|
|
169
|
+
**Learnings** — mistakes from past specs are remembered and surfaced in future
|
|
170
|
+
discovery. "Last time you assumed SDK v2 and it was v3" appears before you make
|
|
171
|
+
the same mistake.
|
|
121
172
|
|
|
122
173
|
### Discovery Modes
|
|
123
174
|
|
|
@@ -133,299 +184,107 @@ Before the six questions, noskills asks which discovery mode to use:
|
|
|
133
184
|
|
|
134
185
|
The mode shapes how questions are asked and which concern extras appear.
|
|
135
186
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
Before Q1, noskills challenges the spec's premises:
|
|
139
|
-
|
|
140
|
-
- Is this the right problem to solve?
|
|
141
|
-
- What happens if we do nothing?
|
|
142
|
-
- What existing code already partially solves this?
|
|
143
|
-
|
|
144
|
-
Premises are stored in the spec. Disagreements are recorded with the user's
|
|
145
|
-
revision. All subsequent questions reference agreed premises.
|
|
146
|
-
|
|
147
|
-
### Alternatives Generation
|
|
148
|
-
|
|
149
|
-
After discovery is approved, noskills prompts for 2-3 implementation approaches
|
|
150
|
-
before generating the spec draft. The user picks one (or skips). The chosen
|
|
151
|
-
approach shapes the spec's tasks and architecture.
|
|
187
|
+
## Who is this for
|
|
152
188
|
|
|
153
|
-
|
|
189
|
+
**Vibe coders** who are tired of babysitting agents — you want to describe what
|
|
190
|
+
you need and get it built correctly. ship-fast mode: 2 questions, 2 minutes,
|
|
191
|
+
spec ready. Autonomous mode runs overnight.
|
|
154
192
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
present them for confirmation — not ask from scratch. Each extraction is marked
|
|
158
|
-
as [STATED] (your words) or [INFERRED] (agent's interpretation) so you can catch
|
|
159
|
-
misunderstandings.
|
|
193
|
+
**Solo builders** who use AI agents daily and want structure without overhead.
|
|
194
|
+
Discovery catches what you'd miss. Verification catches what the agent skips.
|
|
160
195
|
|
|
161
|
-
|
|
196
|
+
**Tech leads and engineering managers** who need their team's agents to follow
|
|
197
|
+
the same conventions, pass the same quality gates, and produce auditable specs —
|
|
198
|
+
across Cursor, Claude Code, Kiro, and every other tool.
|
|
162
199
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
builders get a structured workflow that keeps the agent focused. Teams get a
|
|
167
|
-
shared source of truth that every tool and every teammate inherits
|
|
168
|
-
automatically.
|
|
169
|
-
|
|
170
|
-
## How noskills differs
|
|
200
|
+
**Product owners and PMs** who want to define specs, delegate questions to
|
|
201
|
+
engineers, and approve results — without touching a terminal. The web dashboard
|
|
202
|
+
and delegation system are built for you.
|
|
171
203
|
|
|
172
|
-
|
|
173
|
-
| ------------------------- | ----------------------------------------- | ------------------------------------------------ | --------------------------------- | ---------------------------------------- | ------------------------------------------ |
|
|
174
|
-
| What it does | Structures agent's internal thinking | Role-based slash commands (CEO, Eng, QA) | Loads rules into context | Resets session, keeps state in files | Manages workflow via state machine |
|
|
175
|
-
| Metaphor | "Think out loud" | "Virtual team" | "Law book" | "Clean desk every turn" | "Scrum Master" |
|
|
176
|
-
| User role | None — agent self-talks | Chooses which role to invoke | Writes rules, hopes agent follows | Manages context manually | Active decision-maker at every gate |
|
|
177
|
-
| Enforcement | None | None — behavioral | None — behavioral | Context reset only | Mechanical (hooks block actions) |
|
|
178
|
-
| State tracking | Thought history (in-memory) | Learnings (cross-session) | None | File-based (manual) | Full state machine, per-spec |
|
|
179
|
-
| File control | None | None | None | None | Phase-based edit control |
|
|
180
|
-
| Sub-agents | None | None (single agent, multiple roles) | None | None | Executor / verifier / test-writer pipeline |
|
|
181
|
-
| Discovery | None | /office-hours (similar concept) | None | None | 6 structured questions + concerns |
|
|
182
|
-
| Works alongside noskills? | Yes — ST for thinking, noskills for doing | Yes — gstack for roles, noskills for enforcement | Replaced by noskills | Automated by noskills sub-agent pipeline | — |
|
|
183
|
-
|
|
184
|
-
**The core difference:** other tools tell the agent what to do and hope it
|
|
185
|
-
listens. noskills mechanically restricts what the agent _can_ do. When the agent
|
|
186
|
-
is in DISCOVERY, it literally cannot edit files — not because a rule says
|
|
187
|
-
"don't" but because a hook blocks the operation. That is the difference between
|
|
188
|
-
behavioral guidance and mechanical enforcement.
|
|
189
|
-
|
|
190
|
-
noskills is not a replacement for any of these tools. Sequential Thinking helps
|
|
191
|
-
agents reason better. gstack assigns useful roles. Both can run alongside
|
|
192
|
-
noskills. The distinction is that noskills owns the workflow — who does what,
|
|
193
|
-
when, and whether the result was verified — while the others own the thinking or
|
|
194
|
-
the persona.
|
|
195
|
-
|
|
196
|
-
**noskills vs gstack in depth:** gstack is a collection of behavioral skills —
|
|
197
|
-
each skill is a 2000+ line prompt that tells the agent how to behave. Office
|
|
198
|
-
hours asks 6 questions (noskills: discovery). CEO review selects a scope mode
|
|
199
|
-
(noskills: discovery modes). Eng review checks architecture and tests (noskills:
|
|
200
|
-
verifier pipeline + mandatory ACs). The key difference: gstack skills are
|
|
201
|
-
behavioral instructions the agent may or may not follow. noskills pushes exactly
|
|
202
|
-
the right instruction at the right time via a state machine, and enforces
|
|
203
|
-
compliance via hooks. gstack's /office-hours produces a design doc. noskills'
|
|
204
|
-
discovery produces a spec with tasks, ACs, and a state machine that tracks
|
|
205
|
-
execution. Both are valuable — gstack for thinking, noskills for doing.
|
|
204
|
+
## Quick Start
|
|
206
205
|
|
|
207
|
-
|
|
206
|
+
Open your AI coding agent (Claude Code, Cursor, Kiro, Copilot, etc.) and tell
|
|
207
|
+
it:
|
|
208
208
|
|
|
209
209
|
```
|
|
210
|
-
|
|
211
|
-
(1 file) (modular, 1 tool) (portable, curated) (state-driven)
|
|
210
|
+
Run `npx eser@latest noskills init` — it will scaffold your project and guide you through setup.
|
|
212
211
|
```
|
|
213
212
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
1. **`.cursorrules`** — single file, single tool. Couldn't split, couldn't
|
|
217
|
-
scale, couldn't travel across tools.
|
|
218
|
-
2. **`.cursor/rules/*.mdc`** — modular, but still locked to Cursor.
|
|
219
|
-
3. **`eser/rules` + `eser-rules-manager`** — created as a portable,
|
|
220
|
-
tool-agnostic instruction system. This **predated** Anthropic's Skills spec.
|
|
221
|
-
When Skills arrived, eser/rules was adapted into skills format — validating
|
|
222
|
-
the ecosystem was heading where eser/rules had already gone.
|
|
223
|
-
4. **noskills** — Skills brought new limits: context rot as skills accumulated,
|
|
224
|
-
agents making wrong skill choices, manual sync across tools. noskills drops
|
|
225
|
-
skills entirely in favor of state-driven context injection.
|
|
226
|
-
|
|
227
|
-
The `eser/rules` repository
|
|
228
|
-
([github.com/eser/rules](https://github.com/eser/rules)) is now archived. Its
|
|
229
|
-
ideas live on in noskills, refined under
|
|
230
|
-
[github.com/eser/stack](https://github.com/eser/stack).
|
|
231
|
-
|
|
232
|
-
This is the **Software³** philosophy: build, discover limits, evolve, share.
|
|
233
|
-
noskills will discover its own limits too — and when it does, the next step will
|
|
234
|
-
emerge. If you want to discover those limits together, jump on board.
|
|
235
|
-
|
|
236
|
-
The name mirrors the SQL -> NoSQL shift: skills define everything upfront,
|
|
237
|
-
noskills determines what's needed at runtime.
|
|
238
|
-
|
|
239
|
-
### The Scrum analogy
|
|
240
|
-
|
|
241
|
-
If you know Agile, you already know noskills:
|
|
242
|
-
|
|
243
|
-
| Agile / Scrum | noskills |
|
|
244
|
-
| ------------------ | --------------------------------------------- |
|
|
245
|
-
| User Story | Spec |
|
|
246
|
-
| Increment | Spec's deliverable |
|
|
247
|
-
| Refinement meeting | Discovery (6 questions + concerns) |
|
|
248
|
-
| Sprint Planning | Spec draft → approval (tasks defined) |
|
|
249
|
-
| Sprint | Execution (runs until spec is done) |
|
|
250
|
-
| Dev team | Sub-agents (executor, verifier, test-writer) |
|
|
251
|
-
| Scrum Master | noskills (state machine, hooks, backpressure) |
|
|
252
|
-
| Definition of Done | Acceptance criteria |
|
|
253
|
-
| Sprint Review | AC status report + verifier validation |
|
|
254
|
-
| Retrospective | Debt tracking + concern reminders |
|
|
255
|
-
| Product Owner | You (every decision is yours) |
|
|
256
|
-
|
|
257
|
-
One key difference: in Scrum, a sprint is time-boxed. In noskills, execution
|
|
258
|
-
runs until the spec is complete — it is a single-story sprint. This is why
|
|
259
|
-
mid-execution checkpoints make no sense: a Scrum Master does not stop a sprint
|
|
260
|
-
halfway through the only story. If the story is too big, you split it _before_
|
|
261
|
-
the sprint starts — not during. That is exactly what noskills does at
|
|
262
|
-
DISCOVERY_REVIEW with the split proposal.
|
|
263
|
-
|
|
264
|
-
## Philosophy — A Scrum Master for Agents
|
|
265
|
-
|
|
266
|
-
I used to teach Agile. In those trainings, I'd go all the way back to the Toyota
|
|
267
|
-
Production System to explain why we do what we do.
|
|
268
|
-
|
|
269
|
-
I'd talk about WIP limits — not as a process rule, but as acknowledgment that
|
|
270
|
-
human attention is finite. I'd explain how story points emerged from the need to
|
|
271
|
-
break work into pieces small enough for a single person's working memory. I'd
|
|
272
|
-
walk through why we have daily standups (people lose track), why we have
|
|
273
|
-
Definition of Done (everyone's "done" is different), why we have acceptance
|
|
274
|
-
criteria (without them, work drifts from intent). I'd talk about cognitive load
|
|
275
|
-
— how the brain starts dropping things when you pile on too much context.
|
|
276
|
-
|
|
277
|
-
When I first encountered context rot in AI agents, it felt familiar. The agent
|
|
278
|
-
starts strong, makes a great plan, then gradually loses the plot — forgets
|
|
279
|
-
instructions, gets sloppy, declares things "done" that aren't. I'd seen this in
|
|
280
|
-
humans. The practices we built around human limitations applied directly.
|
|
281
|
-
|
|
282
|
-
When I saw Ralph loops, I got excited — they felt like sprints. Each iteration
|
|
283
|
-
starts clean: fresh context, clear goal, defined scope. Just like a sprint
|
|
284
|
-
protects the team from mid-sprint chaos, a Ralph loop protects the agent from
|
|
285
|
-
context accumulation. But just as sprint quality depends on what goes INTO the
|
|
286
|
-
sprint, loop quality depends on what context the agent receives.
|
|
287
|
-
|
|
288
|
-
I'd also teach Jidoka — one of the pillars of the Toyota Production System.
|
|
289
|
-
Jidoka means "automation with a human touch." The machine runs autonomously, but
|
|
290
|
-
when it detects an anomaly, it stops and calls a human. The human doesn't watch
|
|
291
|
-
every step — they intervene at the right moments. Production quality comes from
|
|
292
|
-
human and machine working together, each doing what they're best at.
|
|
293
|
-
|
|
294
|
-
noskills is Jidoka for AI coding. The agent runs autonomously through tasks, but
|
|
295
|
-
at every phase transition — discovery, spec approval, blocked decisions — it
|
|
296
|
-
stops and the human decides. The human doesn't watch every line of code. They
|
|
297
|
-
intervene at the moments that matter: what to build, whether the plan is right,
|
|
298
|
-
which tradeoffs to accept. The agent handles execution; the human handles
|
|
299
|
-
judgment.
|
|
300
|
-
|
|
301
|
-
That's why I stopped using skills and built a scrum master instead:
|
|
302
|
-
|
|
303
|
-
- **Ralph loops are sprints** — fresh context, clear scope, no carryover rot.
|
|
304
|
-
- **Discovery is sprint planning** — the same questions a good PM asks before
|
|
305
|
-
work starts.
|
|
306
|
-
- **Backpressure is Definition of Done** — "done" requires evidence, not
|
|
307
|
-
declaration.
|
|
308
|
-
- **Debt tracking is the sprint board** — unfinished items don't vanish, they
|
|
309
|
-
carry forward with increasing urgency.
|
|
310
|
-
- **Concerns are team values** — "we care about open source" shapes every
|
|
311
|
-
decision, just like team values shape how a team works.
|
|
312
|
-
- **Phase transitions are Jidoka stops** — the machine pauses, the human
|
|
313
|
-
decides, then the machine continues.
|
|
314
|
-
- **Explicit over clever** — noskills never makes decisions silently. It always
|
|
315
|
-
asks.
|
|
316
|
-
|
|
317
|
-
The insight isn't technical. It's that the practices we spent decades developing
|
|
318
|
-
for human teams apply directly to AI agents — because the underlying problem is
|
|
319
|
-
the same: finite attention, drifting focus, and the need for structure to keep
|
|
320
|
-
work on track.
|
|
321
|
-
|
|
322
|
-
## Multi-User
|
|
323
|
-
|
|
324
|
-
noskills tracks who did what. Every discovery answer, phase transition, custom
|
|
325
|
-
AC, and note is attributed to the user who made it.
|
|
213
|
+
noskills detects your tools, sets up hooks, and generates instruction files.
|
|
214
|
+
Then:
|
|
326
215
|
|
|
327
216
|
```bash
|
|
328
|
-
noskills
|
|
329
|
-
|
|
330
|
-
|
|
217
|
+
noskills spec new "photo upload with validation" # start discovery
|
|
218
|
+
# Answer 6 questions. Review spec. Approve.
|
|
219
|
+
# Agent executes tasks with verification.
|
|
220
|
+
# You approve the result.
|
|
331
221
|
```
|
|
332
222
|
|
|
333
|
-
|
|
223
|
+
That's it — from zero to executing spec in under 5 minutes. The discovery
|
|
224
|
+
questions take 2-5 minutes depending on mode. The agent handles the rest.
|
|
334
225
|
|
|
335
|
-
|
|
336
|
-
# Eser creates the spec and answers discovery
|
|
337
|
-
noskills spec new upload "photo upload"
|
|
226
|
+
### Autonomous mode
|
|
338
227
|
|
|
339
|
-
|
|
340
|
-
noskills
|
|
341
|
-
|
|
342
|
-
|
|
228
|
+
```bash
|
|
229
|
+
noskills run --unattended --max-iterations=50
|
|
230
|
+
# Fresh agent per iteration, zero context rot
|
|
231
|
+
# Blocks logged to file — resolve in the morning
|
|
343
232
|
```
|
|
344
233
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
- Discovery answers with attribution (who said what)
|
|
348
|
-
- Phase transitions (who approved, who started execution)
|
|
349
|
-
- Custom ACs (who added which requirement)
|
|
350
|
-
- Notes (who provided which context)
|
|
351
|
-
|
|
352
|
-
No user configured? noskills still works — attribution shows "Unknown User". Set
|
|
353
|
-
identity anytime with `noskills config set-user`.
|
|
354
|
-
|
|
355
|
-
## Packs
|
|
356
|
-
|
|
357
|
-
Installable bundles of rules, concerns, and folder-rules:
|
|
234
|
+
### Live monitoring
|
|
358
235
|
|
|
359
236
|
```bash
|
|
360
|
-
noskills
|
|
361
|
-
noskills
|
|
362
|
-
noskills pack install typescript # install rules + concerns
|
|
363
|
-
noskills pack install security # security audit rules
|
|
364
|
-
noskills pack uninstall typescript # remove
|
|
237
|
+
noskills watch # real-time dashboard in your terminal
|
|
238
|
+
noskills web # same dashboard in your browser
|
|
365
239
|
```
|
|
366
240
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
241
|
+
The web dashboard (`noskills web`) provides the same experience as the terminal
|
|
242
|
+
— spec reading with inline actions, Claude Code tabs, real-time updates. Product
|
|
243
|
+
owners and PMs can review specs, answer delegated questions, and approve from
|
|
244
|
+
their browser without ever opening a terminal.
|
|
371
245
|
|
|
372
|
-
|
|
246
|
+
## Platform Support
|
|
373
247
|
|
|
374
|
-
|
|
248
|
+
| Platform | Enforcement |
|
|
249
|
+
| ----------- | --------------------------------------- |
|
|
250
|
+
| Claude Code | Full — hooks block unauthorized actions |
|
|
251
|
+
| Kiro | Full — steering files + hooks |
|
|
252
|
+
| Codex CLI | Full — hooks + agents |
|
|
253
|
+
| Copilot CLI | Full — hooks + agents |
|
|
254
|
+
| OpenCode | Full — plugins + agents |
|
|
255
|
+
| Cursor | Behavioral — rules synced, no hooks |
|
|
256
|
+
| Windsurf | Behavioral — rules synced, no hooks |
|
|
375
257
|
|
|
376
|
-
|
|
258
|
+
"Full" means the agent is mechanically prevented from breaking rules.
|
|
259
|
+
"Behavioral" means the agent is asked to follow rules — it usually does, but
|
|
260
|
+
can't be forced.
|
|
377
261
|
|
|
378
|
-
|
|
262
|
+
## Multi-user
|
|
379
263
|
|
|
380
|
-
|
|
381
|
-
|
|
264
|
+
Multiple people can work on the same spec. Discovery questions can be delegated
|
|
265
|
+
— "I can't answer this, ask Ahmet." Delegated items must be signed off before
|
|
266
|
+
the spec can be approved, like GitHub reviewers.
|
|
382
267
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
Run `npx eser@latest noskills init` — it will scaffold your project and guide you through setup.
|
|
388
|
-
|
|
389
|
-
noskills detects your agent, generates multi-file steering files (with `always`,
|
|
390
|
-
`auto`, and `fileMatch` inclusion modes), installs hook configs, and creates
|
|
391
|
-
executor/verifier agents.
|
|
392
|
-
|
|
393
|
-
### Other agents
|
|
394
|
-
|
|
395
|
-
noskills generates a generic `AGENTS.md` at the project root. Any agent that
|
|
396
|
-
reads instruction files can use it. Run `noskills sync` after adding rules to
|
|
397
|
-
regenerate all tool files.
|
|
398
|
-
|
|
399
|
-
### Adding to an existing team project
|
|
268
|
+
```bash
|
|
269
|
+
noskills config set-user --from-git # set your identity
|
|
270
|
+
noskills spec upload review # see what's delegated to you
|
|
271
|
+
```
|
|
400
272
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
files. The init command won't overwrite existing `.eser/` config — it only
|
|
404
|
-
generates the sync output for your tool.
|
|
273
|
+
Every action is attributed — who answered what, who approved, who added which
|
|
274
|
+
requirement.
|
|
405
275
|
|
|
406
|
-
|
|
276
|
+
### Getting your team on board
|
|
407
277
|
|
|
408
|
-
|
|
409
|
-
|
|
278
|
+
One person starts: `noskills init`, create a spec, ship it. The `.eser/`
|
|
279
|
+
directory commits to your repo. When a teammate opens the project, they run
|
|
280
|
+
`noskills init` — it detects their tool (Cursor, Claude Code, Kiro, whatever)
|
|
281
|
+
and generates the right instruction files. Same rules, same concerns, same
|
|
282
|
+
quality gates — automatically.
|
|
410
283
|
|
|
411
|
-
|
|
284
|
+
No migration. No team-wide rollout meeting. One person starts, others join when
|
|
285
|
+
they see the specs landing correctly.
|
|
412
286
|
|
|
413
|
-
|
|
414
|
-
eser noskills init # Scaffold .eser/, detect tools
|
|
415
|
-
eser noskills concern add open-source # Activate concerns
|
|
416
|
-
eser noskills spec new "photo upload" # Start spec -> DISCOVERY
|
|
417
|
-
# Agent takes over: calls noskills next, answers questions,
|
|
418
|
-
# builds to spec, reports progress. You approve transitions.
|
|
419
|
-
|
|
420
|
-
# Or skip structure entirely:
|
|
421
|
-
eser noskills free # FREE mode — no enforcement
|
|
422
|
-
# Work freely, then exit when you want structure back:
|
|
423
|
-
eser noskills free --exit # Back to IDLE
|
|
424
|
-
```
|
|
425
|
-
|
|
426
|
-
After `init`, your AGENTS.md (or CLAUDE.md, .cursorrules, etc.) tells the agent
|
|
427
|
-
to call `noskills next` at every step. The agent follows the JSON output. You
|
|
428
|
-
never need to prompt-engineer the agent's behavior — noskills handles that.
|
|
287
|
+
## Usage Details
|
|
429
288
|
|
|
430
289
|
### Without an agent (agentless CLI mode)
|
|
431
290
|
|
|
@@ -481,144 +340,6 @@ past broken tests. When `autoCommit: true` in `manifest.yml`, the `noskills run`
|
|
|
481
340
|
CLI loop handles git commits between iterations — the agent never touches git.
|
|
482
341
|
Git write operations are the CLI's responsibility, never the agent's.
|
|
483
342
|
|
|
484
|
-
### Live monitoring
|
|
485
|
-
|
|
486
|
-
While an agent works, open another terminal:
|
|
487
|
-
|
|
488
|
-
```bash
|
|
489
|
-
eser noskills watch # Live terminal dashboard
|
|
490
|
-
eser noskills watch -o json # JSON lines per state change (pipeable)
|
|
491
|
-
eser noskills watch -o markdown # Markdown per update
|
|
492
|
-
```
|
|
493
|
-
|
|
494
|
-
The dashboard shows: active spec, phase, progress bar, iteration count, time
|
|
495
|
-
since last update, outstanding debt items, files changed this iteration, concern
|
|
496
|
-
list, and context warning. Entirely filesystem-driven — watches `.eser/.state/`
|
|
497
|
-
for changes. Zero LLM tokens. Exits automatically when phase reaches DONE.
|
|
498
|
-
|
|
499
|
-
## How It Works
|
|
500
|
-
|
|
501
|
-
noskills is a state machine. Your spec moves through phases — each phase has
|
|
502
|
-
different rules, different questions, and different behavioral constraints for
|
|
503
|
-
the agent. You don't need to understand the internals to use noskills, but
|
|
504
|
-
here's how it works under the hood.
|
|
505
|
-
|
|
506
|
-
### The State Machine
|
|
507
|
-
|
|
508
|
-
Every spec follows a deterministic phase flow:
|
|
509
|
-
|
|
510
|
-
```
|
|
511
|
-
IDLE -> DISCOVERY -> DISCOVERY_REVIEW -> SPEC_DRAFT -> SPEC_APPROVED -> EXECUTING <-> BLOCKED
|
|
512
|
-
^ \ |
|
|
513
|
-
| <-> FREE |
|
|
514
|
-
+--------------------------------- DONE <---------------------------------+
|
|
515
|
-
```
|
|
516
|
-
|
|
517
|
-
| Phase | What happens |
|
|
518
|
-
| -------------------- | ---------------------------------------------------------------------- |
|
|
519
|
-
| **IDLE** | No active spec. Start one with `noskills spec new "..."` |
|
|
520
|
-
| **FREE** | No enforcement. Work freely. Agent has no restrictions from noskills |
|
|
521
|
-
| **DISCOVERY** | 6 blended questions probe product, engineering, and QA simultaneously |
|
|
522
|
-
| **DISCOVERY_REVIEW** | User reviews and confirms all discovery answers before spec generation |
|
|
523
|
-
| **SPEC_DRAFT** | Spec generated from discovery answers. Human reviews |
|
|
524
|
-
| **SPEC_APPROVED** | Spec approved, waiting to start. A deliberate "ready but not yet" gate |
|
|
525
|
-
| **EXECUTING** | Agent works through the spec. Reports progress each iteration |
|
|
526
|
-
| **BLOCKED** | Agent hit a decision it can't make alone. Human resolves |
|
|
527
|
-
| **DONE** | Spec complete. Summary with iteration count and decisions |
|
|
528
|
-
|
|
529
|
-
### Phase Transition Protocol
|
|
530
|
-
|
|
531
|
-
Every phase transition follows the same structured cycle:
|
|
532
|
-
|
|
533
|
-
```
|
|
534
|
-
Human input -> Agent A evaluates -> Agent B validates (optional) -> Human approves -> Next phase
|
|
535
|
-
```
|
|
536
|
-
|
|
537
|
-
This is universal — DISCOVERY -> SPEC_DRAFT, SPEC_DRAFT -> SPEC_APPROVED,
|
|
538
|
-
BLOCKED -> EXECUTING, every transition. The human always has final say.
|
|
539
|
-
|
|
540
|
-
Agent B validation is opt-in per command (`noskills next --validate`) or as a
|
|
541
|
-
project default in `manifest.yml`. When validation is active, noskills spawns
|
|
542
|
-
Agent B via the Agent Bridge with completely isolated context — Agent B never
|
|
543
|
-
sees Agent A's conversation history. This is real generator/judge separation,
|
|
544
|
-
not role-played.
|
|
545
|
-
|
|
546
|
-
### The JSON Output
|
|
547
|
-
|
|
548
|
-
Every `noskills next` call returns a structured JSON payload:
|
|
549
|
-
|
|
550
|
-
```jsonc
|
|
551
|
-
{
|
|
552
|
-
"phase": "EXECUTING",
|
|
553
|
-
"instruction": "Execute the current task. When done, report progress.",
|
|
554
|
-
"task": {
|
|
555
|
-
"id": "task-2",
|
|
556
|
-
"title": "Add photo upload endpoint with validation",
|
|
557
|
-
"totalTasks": 5,
|
|
558
|
-
"completedTasks": 1
|
|
559
|
-
},
|
|
560
|
-
"meta": {
|
|
561
|
-
"protocol": "Run `eser noskills next --answer=\"...\"` to submit results and advance",
|
|
562
|
-
"spec": "photo-upload",
|
|
563
|
-
"branch": null,
|
|
564
|
-
"iteration": 3,
|
|
565
|
-
"lastProgress": "implemented auth module",
|
|
566
|
-
"activeConcerns": ["open-source", "beautiful-product"],
|
|
567
|
-
"resumeHint": "Executing \"photo-upload\", iteration 3. Last progress: implemented auth module. Continue with the current task."
|
|
568
|
-
},
|
|
569
|
-
"behavioral": {
|
|
570
|
-
"rules": [
|
|
571
|
-
"NEVER run git write commands. Git is read-only for agents.",
|
|
572
|
-
"Do not explore the codebase beyond what the current task requires.",
|
|
573
|
-
"Do not refactor, improve, or modify code outside this task's scope.",
|
|
574
|
-
"Complete the task, then report progress. The user handles git."
|
|
575
|
-
],
|
|
576
|
-
"tone": "Direct. Orchestrate immediately — spawn sub-agents."
|
|
577
|
-
},
|
|
578
|
-
"context": {
|
|
579
|
-
"rules": ["Use Deno for all TypeScript"],
|
|
580
|
-
"concernReminders": [
|
|
581
|
-
"open-source: Endpoint should be documented in API docs",
|
|
582
|
-
"beautiful-product: Loading and error states must be designed, not placeholder"
|
|
583
|
-
]
|
|
584
|
-
},
|
|
585
|
-
"transition": {
|
|
586
|
-
"onComplete": "eser noskills next --answer=\"...\"",
|
|
587
|
-
"onBlocked": "eser noskills block \"reason\"",
|
|
588
|
-
"iteration": 3
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
```
|
|
592
|
-
|
|
593
|
-
The `meta.resumeHint` is designed for cold starts — a fresh agent (or human)
|
|
594
|
-
reading the output for the first time can orient themselves without any prior
|
|
595
|
-
context. On stale sessions (>5 min since last call), a `protocolGuide` block
|
|
596
|
-
appears explaining what noskills is and how phases work.
|
|
597
|
-
|
|
598
|
-
When concerns conflict, the output includes a tension block:
|
|
599
|
-
|
|
600
|
-
```jsonc
|
|
601
|
-
{
|
|
602
|
-
"phase": "EXECUTING",
|
|
603
|
-
"concernTensions": [{
|
|
604
|
-
"between": ["move-fast", "compliance"],
|
|
605
|
-
"issue": "Skipping audit log saves ~2h but violates compliance concern."
|
|
606
|
-
}]
|
|
607
|
-
}
|
|
608
|
-
```
|
|
609
|
-
|
|
610
|
-
Tensions require human resolution — noskills never auto-resolves them.
|
|
611
|
-
|
|
612
|
-
### Output Formats
|
|
613
|
-
|
|
614
|
-
```bash
|
|
615
|
-
noskills next # JSON (default, for agents and pipes)
|
|
616
|
-
noskills next -o json # Explicit JSON
|
|
617
|
-
noskills next -o markdown # Human-readable with headings and checklists
|
|
618
|
-
noskills next -o text # Plain text, no formatting
|
|
619
|
-
noskills status -o json # Structured status for scripts
|
|
620
|
-
```
|
|
621
|
-
|
|
622
343
|
### Behavioral Guardrails
|
|
623
344
|
|
|
624
345
|
Every `noskills next` output includes a `behavioral` block with phase-specific
|
|
@@ -643,31 +364,6 @@ When the agent's iteration count exceeds `maxIterationsBeforeRestart` (default
|
|
|
643
364
|
15), an `urgency` message warns that context is degrading and recommends a fresh
|
|
644
365
|
session.
|
|
645
366
|
|
|
646
|
-
### Platform Support
|
|
647
|
-
|
|
648
|
-
| Platform | Rules | Hooks | Agents | MCP | Enforcement |
|
|
649
|
-
| ----------- | -------------- | ----------- | ----------- | --- | --------------- |
|
|
650
|
-
| Claude Code | CLAUDE.md | full | Task tool | yes | Mechanical |
|
|
651
|
-
| Kiro | steering/ | Run Command | delegation | yes | Mechanical |
|
|
652
|
-
| Codex CLI | AGENTS.md | full | spawn_agent | yes | Mechanical |
|
|
653
|
-
| Copilot CLI | AGENTS.md | full | /fleet | yes | Mechanical |
|
|
654
|
-
| OpenCode | AGENTS.md | plugins | delegation | yes | Mechanical |
|
|
655
|
-
| Cursor | .cursorrules | none | none | yes | Behavioral only |
|
|
656
|
-
| Windsurf | .windsurfrules | none | none | yes | Behavioral only |
|
|
657
|
-
|
|
658
|
-
Platforms with **mechanical enforcement** use hooks to prevent unauthorized file
|
|
659
|
-
edits, block git write commands, and enforce phase transitions. Platforms with
|
|
660
|
-
**behavioral-only enforcement** rely on rules and instructions — the agent is
|
|
661
|
-
asked to follow the protocol but cannot be mechanically prevented from breaking
|
|
662
|
-
it.
|
|
663
|
-
|
|
664
|
-
**Convention discovery:** When the agent identifies a recurring pattern,
|
|
665
|
-
receives a correction from the user, or discovers a preference during work, the
|
|
666
|
-
behavioral rules instruct it to ask: _"Should this be a permanent rule for this
|
|
667
|
-
project, or just for this task?"_ If permanent, the agent runs
|
|
668
|
-
`noskills rule add`. If just this task, it notes and moves on. The agent never
|
|
669
|
-
writes to `.eser/rules/` directly — noskills handles file creation and sync.
|
|
670
|
-
|
|
671
367
|
### Concerns — The Project's DNA
|
|
672
368
|
|
|
673
369
|
Concerns define what your project IS. They stack on top of each other and affect
|
|
@@ -695,60 +391,6 @@ Concerns inject:
|
|
|
695
391
|
When concerns conflict (e.g., move-fast + compliance), noskills surfaces the
|
|
696
392
|
tension to the human rather than resolving it silently.
|
|
697
393
|
|
|
698
|
-
### Decision Lifecycle
|
|
699
|
-
|
|
700
|
-
When an agent encounters a decision during any phase:
|
|
701
|
-
|
|
702
|
-
1. Agent reports it needs a decision (via `noskills block` or within `next`
|
|
703
|
-
output).
|
|
704
|
-
2. noskills routes the decision to the human.
|
|
705
|
-
3. Human answers.
|
|
706
|
-
4. noskills asks: _"Should this be a permanent rule for this project, or just
|
|
707
|
-
for this spec?"_
|
|
708
|
-
5. If permanent -> `noskills rule add` is called internally -> writes to
|
|
709
|
-
`.eser/rules/` -> triggers sync.
|
|
710
|
-
6. If just this spec -> recorded in the spec's decisions table only.
|
|
711
|
-
|
|
712
|
-
This creates an organic growth loop: as you build specs, your rule set evolves.
|
|
713
|
-
New team members and AI agents automatically inherit accumulated decisions.
|
|
714
|
-
One-time decisions stay scoped to their spec — they never leak into other specs.
|
|
715
|
-
|
|
716
|
-
The spec file tracks decisions:
|
|
717
|
-
|
|
718
|
-
```markdown
|
|
719
|
-
## Decisions
|
|
720
|
-
|
|
721
|
-
| # | Decision | Choice | Type |
|
|
722
|
-
| - | ------------------ | ------------- | --------------- |
|
|
723
|
-
| 1 | Validation library | Zod | rule (promoted) |
|
|
724
|
-
| 2 | Image API provider | OpenAI Vision | one-time |
|
|
725
|
-
```
|
|
726
|
-
|
|
727
|
-
### Verification Backpressure
|
|
728
|
-
|
|
729
|
-
When the agent reports a task complete, noskills doesn't take its word for it.
|
|
730
|
-
|
|
731
|
-
1. **Automated verification** runs first (configurable via `verifyCommand` in
|
|
732
|
-
manifest, e.g., `"deno test"`). If tests fail, the task is rejected and the
|
|
733
|
-
failure output is returned as the next instruction.
|
|
734
|
-
|
|
735
|
-
2. **Status report** requested against acceptance criteria — items from the spec
|
|
736
|
-
plus concern-injected criteria (e.g., "All UI states designed" from
|
|
737
|
-
beautiful-product). The agent checks off what's done and reports what
|
|
738
|
-
remains.
|
|
739
|
-
|
|
740
|
-
3. **Debt carry-forward** — remaining items persist across iterations as debt.
|
|
741
|
-
Every subsequent `noskills next` output includes the debt with "Address these
|
|
742
|
-
BEFORE starting new work." Debt is never silently removed — only an explicit
|
|
743
|
-
status report listing items as completed clears them. If debt items remain
|
|
744
|
-
unaddressed for 3+ iterations, noskills escalates — the debt block gains an
|
|
745
|
-
urgency field warning that these items have been outstanding for N iterations
|
|
746
|
-
and must be addressed before any new work.
|
|
747
|
-
|
|
748
|
-
4. **Context clearing** — when debt is zero and verification passes, noskills
|
|
749
|
-
recommends a `/clear` for fresh context on the next task. The sub-agent
|
|
750
|
-
pattern handles context isolation naturally, so this is advisory only.
|
|
751
|
-
|
|
752
394
|
### Scoped Folder Rules
|
|
753
395
|
|
|
754
396
|
In monorepos, different packages have different constraints. Drop a
|
|
@@ -776,376 +418,189 @@ like CSS specificity. A rule at `pkg/` applies to all files under `pkg/`, while
|
|
|
776
418
|
a rule at `pkg/@eser/streams/` applies only to that package. Zero token cost —
|
|
777
419
|
derived from filesystem, not LLM.
|
|
778
420
|
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
Six questions, each probing product + engineering + QA at once:
|
|
782
|
-
|
|
783
|
-
1. **What does the user do today without this feature?**
|
|
784
|
-
2. **Describe the 1-star and 10-star versions.**
|
|
785
|
-
3. **Does this change involve an irreversible decision?**
|
|
786
|
-
4. **Does this change affect existing users' behavior?**
|
|
787
|
-
5. **How do you verify this works correctly?**
|
|
788
|
-
6. **What should this feature NOT do?**
|
|
789
|
-
|
|
790
|
-
Active concerns inject sub-questions. For example, with `open-source` active,
|
|
791
|
-
question 1 also asks: _"Is this workaround common in the community?"_
|
|
792
|
-
|
|
793
|
-
For larger specs, noskills may propose splitting the work into separate specs at
|
|
794
|
-
the end of discovery — for example, separating a bug fix from a feature
|
|
795
|
-
addition. You always decide: keep as one spec or split. noskills never splits on
|
|
796
|
-
its own.
|
|
797
|
-
|
|
798
|
-
### Spec Classification
|
|
799
|
-
|
|
800
|
-
After discovery answers are submitted, noskills asks the user to classify the
|
|
801
|
-
spec along five boolean axes:
|
|
802
|
-
|
|
803
|
-
| Flag | What it controls |
|
|
804
|
-
| ---------------------- | ------------------------------------------------------- |
|
|
805
|
-
| `involvesWebUI` | Web/Mobile UI sections from beautiful-product concern |
|
|
806
|
-
| `involvesCLI` | CLI/Terminal UI loading states |
|
|
807
|
-
| `involvesPublicAPI` | API documentation sections from open-source concern |
|
|
808
|
-
| `involvesMigration` | Migration checklist sections from compliance/long-lived |
|
|
809
|
-
| `involvesDataHandling` | Data safety sections from compliance concern |
|
|
810
|
-
|
|
811
|
-
Classification determines which concern sections appear in the generated spec.
|
|
812
|
-
Irrelevant sections are skipped entirely — a backend API change won't get UI
|
|
813
|
-
state checklists, and a CSS tweak won't get migration warnings. This replaces
|
|
814
|
-
keyword-based guessing with explicit user input.
|
|
815
|
-
|
|
816
|
-
The classification is submitted as JSON via `noskills next`:
|
|
817
|
-
|
|
818
|
-
```bash
|
|
819
|
-
noskills next --answer='{"involvesWebUI":true,"involvesCLI":false,"involvesPublicAPI":false,"involvesMigration":false,"involvesDataHandling":false}'
|
|
820
|
-
```
|
|
821
|
-
|
|
822
|
-
### Hooks — Zero-Token Bookkeeping
|
|
823
|
-
|
|
824
|
-
noskills installs hooks for Claude Code (`.claude/settings.json`), Kiro
|
|
825
|
-
(`.kiro/settings/hooks.json`), OpenCode (`.opencode/plugins/noskills.ts`), Codex
|
|
826
|
-
CLI (`.codex/hooks.json`), and Copilot CLI (`.github/hooks/noskills.json`) that
|
|
827
|
-
handle state bookkeeping without spending LLM tokens. Claude Code hooks:
|
|
828
|
-
|
|
829
|
-
| Hook | Event | What it does |
|
|
830
|
-
| ------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
831
|
-
| **pre-tool-use** | PreToolUse | Blocks file edits outside EXECUTING phase. Blocks git write commands. |
|
|
832
|
-
| **stop** | Stop | Increments iteration counter, snapshots `git diff` into state, checks restart threshold. The Ralph loop's heartbeat. |
|
|
833
|
-
| **post-file-write** | PostToolUse | Logs modified file paths to `.eser/.state/files-changed.jsonl` |
|
|
834
|
-
| **post-bash** | PostToolUse | Logs noskills CLI invocations for observability |
|
|
835
|
-
| **session-start** | SessionStart | Runs `noskills next` at session start so the agent is immediately oriented. No CLAUDE.md reading needed — the hook delivers the current instruction. |
|
|
836
|
-
|
|
837
|
-
Kiro hooks map the same behavioral guarantees to Kiro-native triggers (Pre Tool
|
|
838
|
-
Use, Post Tool Use, Agent Stop, Prompt Submit) using Run Command actions.
|
|
839
|
-
OpenCode hooks use the plugin system (`.opencode/plugins/`) with event handlers
|
|
840
|
-
for session.created, tool.execute.before/after, and session.deleted. Codex CLI
|
|
841
|
-
hooks use `.codex/hooks.json` with PascalCase events (SessionStart, PreToolUse,
|
|
842
|
-
PostToolUse, Stop). Copilot CLI hooks use `.github/hooks/noskills.json` with a
|
|
843
|
-
versioned schema (`{"version": 1, "hooks": {...}}`) and array-format commands.
|
|
844
|
-
|
|
845
|
-
Hooks are CLI subcommands (`noskills invoke-hook <name>`), not generated script
|
|
846
|
-
files. This avoids ESM/CJS issues — the same Deno entry point handles
|
|
847
|
-
everything.
|
|
848
|
-
|
|
849
|
-
The agent is completely unaware hooks exist. Hooks derive progress from
|
|
850
|
-
filesystem and git state — the agent doesn't waste tokens summarizing what it
|
|
851
|
-
did.
|
|
852
|
-
|
|
853
|
-
### Tool Sync — One Source of Truth
|
|
854
|
-
|
|
855
|
-
noskills generates instruction files for every AI tool your team uses:
|
|
856
|
-
|
|
857
|
-
```
|
|
858
|
-
.eser/ (single source of truth)
|
|
859
|
-
+-- noskills sync
|
|
860
|
-
| Claude Code
|
|
861
|
-
|-- -> CLAUDE.md (instructions)
|
|
862
|
-
|-- -> AGENTS.md (shared: Codex / Copilot / OpenCode)
|
|
863
|
-
|-- -> .claude/settings.json (hooks)
|
|
864
|
-
|-- -> .claude/agents/ (agents)
|
|
865
|
-
| Kiro
|
|
866
|
-
|-- -> .kiro/steering/*.md (steering files)
|
|
867
|
-
|-- -> .kiro/settings/hooks.json (hooks)
|
|
868
|
-
|-- -> .kiro/settings/mcp.json (MCP)
|
|
869
|
-
|-- -> .kiro/agents/*.json (agents)
|
|
870
|
-
|-- -> .kiro/specs/ (spec projection)
|
|
871
|
-
| Codex CLI
|
|
872
|
-
|-- -> .codex/hooks.json (hooks)
|
|
873
|
-
|-- -> .codex/agents/*.toml (agents)
|
|
874
|
-
|-- -> .codex/config.toml (MCP)
|
|
875
|
-
| Copilot CLI
|
|
876
|
-
|-- -> .github/hooks/noskills.json (hooks)
|
|
877
|
-
|-- -> .github/agents/*.agent.md (agents)
|
|
878
|
-
|-- -> .github/copilot-instructions.md (IDE instructions)
|
|
879
|
-
|-- -> .copilot/mcp.json (MCP)
|
|
880
|
-
| OpenCode
|
|
881
|
-
|-- -> .opencode/plugins/noskills.ts (hooks)
|
|
882
|
-
|-- -> .opencode/agents/*.md (agents)
|
|
883
|
-
|-- -> .opencode/skills/*.md (spec projection)
|
|
884
|
-
|-- -> opencode.json (MCP)
|
|
885
|
-
| Cursor / Windsurf / Copilot IDE
|
|
886
|
-
|-- -> .cursorrules (Cursor)
|
|
887
|
-
+-- -> .windsurfrules (Windsurf)
|
|
888
|
-
```
|
|
889
|
-
|
|
890
|
-
Write your rules once in `.eser/rules/`, run `noskills sync`, and every tool
|
|
891
|
-
gets the same instructions in its native format.
|
|
892
|
-
|
|
893
|
-
Generated AGENTS.md includes:
|
|
894
|
-
|
|
895
|
-
- Protocol instructions with 5 concrete trigger points
|
|
896
|
-
- Git read-only section (unless `allowGit: true`)
|
|
897
|
-
- Active rules
|
|
898
|
-
- JSON output explanation
|
|
899
|
-
|
|
900
|
-
### Spec Management
|
|
901
|
-
|
|
902
|
-
```bash
|
|
903
|
-
# Create with auto-generated slug
|
|
904
|
-
noskills spec new "photo upload feature"
|
|
905
|
-
# -> .eser/specs/photo-upload-feature/spec.md
|
|
906
|
-
|
|
907
|
-
# Create with explicit name
|
|
908
|
-
noskills spec new --name=SPC0001 "photo upload feature"
|
|
909
|
-
# -> .eser/specs/SPC0001/spec.md
|
|
910
|
-
|
|
911
|
-
# List all specs with status
|
|
912
|
-
noskills spec list
|
|
913
|
-
# . photo-upload-feature EXECUTING iteration 3
|
|
914
|
-
# fix-login-bug SPEC_DRAFT
|
|
915
|
-
# SPC0001 DONE
|
|
916
|
-
|
|
917
|
-
# Switch between specs (preserves state)
|
|
918
|
-
noskills spec switch fix-login-bug
|
|
919
|
-
# Active spec: fix-login-bug (SPEC_DRAFT)
|
|
920
|
-
|
|
921
|
-
# JSON output for scripts
|
|
922
|
-
noskills spec list -o json
|
|
923
|
-
```
|
|
924
|
-
|
|
925
|
-
Multiple specs can exist at different stages. Switching away from an EXECUTING
|
|
926
|
-
spec preserves everything — iteration, debt, verification result, progress.
|
|
927
|
-
Switching back resumes exactly where it left off.
|
|
928
|
-
|
|
929
|
-
> **Future:** `spec new --from-plan <file>` — import an existing plan document
|
|
930
|
-
> (e.g., from Claude Code's plan mode) as the basis for discovery, pre-filling
|
|
931
|
-
> some answers. Not yet implemented.
|
|
932
|
-
|
|
933
|
-
## Common Workflows
|
|
421
|
+
## How noskills differs
|
|
934
422
|
|
|
935
|
-
|
|
423
|
+
| | Sequential Thinking | gstack | Superpowers | agent-skills | Skills / Rules | Ralph Loops | noskills |
|
|
424
|
+
| --------------------------- | ------------------------------------ | -------------------------------------------------------------------- | --------------------------------------------------------------- | ---------------------------------------------------------------- | --------------------------------- | ---------------------------------------- | ------------------------------------------ |
|
|
425
|
+
| What it does | Structures agent's internal thinking | Role-based slash commands (CEO, Eng, QA) | Step-by-step execution playbooks | Static workflow patterns for agents | Loads rules into context | Resets session, keeps state in files | Manages workflow via state machine |
|
|
426
|
+
| Metaphor | "Think out loud" | "Virtual team" | "Instruction manual" | "Reference book" | "Law book" | "Clean desk every turn" | "Scrum Master" |
|
|
427
|
+
| User role | None — agent self-talks | Chooses which role to invoke | Configures playbooks | Loads patterns into context | Writes rules, hopes agent follows | Manages context manually | Active decision-maker at every gate |
|
|
428
|
+
| Enforcement | None | None — behavioral | None — behavioral | None — behavioral | None — behavioral | Context reset only | Mechanical (hooks block actions) |
|
|
429
|
+
| State tracking | Thought history (in-memory) | Learnings (cross-session) | None | None | None | File-based (manual) | Full state machine, per-spec |
|
|
430
|
+
| File control | None | None | None | None | None | None | Phase-based edit control |
|
|
431
|
+
| Sub-agents | None | None (single agent, multiple roles) | None | None | None | None | Executor / verifier / test-writer pipeline |
|
|
432
|
+
| Discovery | None | /office-hours (similar concept) | Brainstorming skill (similar) | None | None | None | 6 structured questions + concerns |
|
|
433
|
+
| Still needed with noskills? | Different layer — helps agents think | Unnecessary — noskills pushes role-specific rules at the right phase | Unnecessary — noskills delivers the right playbook mechanically | Unnecessary — noskills injects patterns as phase-aware reminders | Replaced by noskills | Automated by noskills sub-agent pipeline | — |
|
|
434
|
+
|
|
435
|
+
The pull model asks agents to pick the right skill at the right time. The push
|
|
436
|
+
model delivers exactly what's needed — no picking, no missing, no waste.
|
|
437
|
+
|
|
438
|
+
Every tool above solves a real problem. But they all share the same limitation:
|
|
439
|
+
they load instructions and hope the agent follows them. noskills doesn't hope —
|
|
440
|
+
it enforces. Hooks block the operation, not rules. The agent can't skip
|
|
441
|
+
discovery, can't bypass verification, can't declare done without evidence.
|
|
442
|
+
|
|
443
|
+
You don't need skill packs. You need a state machine.
|
|
444
|
+
|
|
445
|
+
Another distinction is that noskills owns the workflow — who does what, when,
|
|
446
|
+
and whether the result was verified — while the others own the thinking or the
|
|
447
|
+
persona.
|
|
448
|
+
|
|
449
|
+
**noskills vs gstack:** gstack is a collection of behavioral skills — each skill
|
|
450
|
+
is a 2000+ line prompt that tells the agent how to behave. Office hours asks 6
|
|
451
|
+
questions (noskills: discovery). CEO review selects a scope mode (noskills:
|
|
452
|
+
discovery modes). Eng review checks architecture and tests (noskills: verifier
|
|
453
|
+
pipeline + mandatory ACs). The key difference: gstack skills are behavioral
|
|
454
|
+
instructions the agent may or may not follow. noskills pushes exactly the right
|
|
455
|
+
instruction at the right time via a state machine, and enforces compliance via
|
|
456
|
+
hooks. gstack's /office-hours produces a design doc. noskills' discovery
|
|
457
|
+
produces a spec with tasks, ACs, and a state machine that tracks execution.
|
|
458
|
+
gstack solves real problems — but with 2000-line prompts the agent may or may
|
|
459
|
+
not follow. noskills solves the same problems with 10 lines at the right moment,
|
|
460
|
+
enforced by hooks.
|
|
461
|
+
|
|
462
|
+
**noskills vs Superpowers:** Superpowers provides detailed execution playbooks —
|
|
463
|
+
step-by-step instructions for brainstorming, dispatching, executing, and
|
|
464
|
+
verifying. Each skill tells the agent exactly how to do the work, down to
|
|
465
|
+
specific checklists and verification tables. The key difference: Superpowers
|
|
466
|
+
defines the "how" exhaustively and hopes the agent follows all of it. noskills
|
|
467
|
+
defines the "what" and "when" minimally — the agent gets only the current
|
|
468
|
+
phase's constraints, and hooks enforce compliance. Superpowers is a detailed
|
|
469
|
+
instruction manual. noskills is a state machine that won't let you skip
|
|
470
|
+
chapters. You don't need the manual when the machine enforces the process.
|
|
471
|
+
|
|
472
|
+
**noskills vs agent-skills:** agent-skills is a collection of 20 workflow
|
|
473
|
+
patterns — anti-rationalization prompts, verification checklists, red flag
|
|
474
|
+
detectors — designed to be loaded into agent context at the start of a session.
|
|
475
|
+
The key difference: agent-skills loads everything upfront and trusts the agent
|
|
476
|
+
to apply the right pattern at the right time. noskills delivers specific
|
|
477
|
+
reminders at specific phases — you don't see the verification checklist during
|
|
478
|
+
discovery, and you don't see the brainstorming prompt during execution.
|
|
479
|
+
agent-skills is a reference book the agent carries everywhere. noskills is a
|
|
480
|
+
guide that shows you only the page you need right now — and won't let you turn
|
|
481
|
+
to the wrong one.
|
|
936
482
|
|
|
937
|
-
|
|
938
|
-
eser noskills spec new "Fix: users can't upload files over 10MB"
|
|
939
|
-
# Discovery mode: Ship fast (skip expansions, minimal questions)
|
|
940
|
-
# 3 tasks generated: reproduce, fix, test
|
|
941
|
-
# Agent implements in ~8 minutes with verification
|
|
942
|
-
```
|
|
943
|
-
|
|
944
|
-
**"I need to add a major feature"**
|
|
483
|
+
## The Mental Model
|
|
945
484
|
|
|
946
|
-
```bash
|
|
947
|
-
eser noskills spec new "Add real-time collaboration to the editor"
|
|
948
|
-
# Discovery mode: Explore scope (expansion proposals, dream state table)
|
|
949
|
-
# 12 tasks generated with architectural decisions
|
|
950
|
-
# Agent works through tasks over multiple sessions
|
|
951
|
-
# Debt tracking ensures nothing is forgotten between sessions
|
|
952
485
|
```
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
```bash
|
|
957
|
-
eser noskills spec new "From product meeting: need analytics dashboard,
|
|
958
|
-
CEO wants daily active users, retention curves, revenue per cohort.
|
|
959
|
-
Mobile must work. Launch by end of Q2."
|
|
960
|
-
# noskills accepts any input format — meeting notes, kanban cards, emails
|
|
961
|
-
# Discovery challenges assumptions: "Is mobile-first or desktop-first?"
|
|
962
|
-
# Spec generated with proper tasks, not meeting note fragments
|
|
486
|
+
.cursorrules -> .cursor/rules/*.mdc -> eser/rules + skills -> noskills
|
|
487
|
+
(1 file) (modular, 1 tool) (portable, curated) (state-driven)
|
|
963
488
|
```
|
|
964
489
|
|
|
965
|
-
|
|
490
|
+
Each generation solved one bottleneck and discovered the next:
|
|
966
491
|
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
492
|
+
1. `**.cursorrules**` — single file, single tool. Couldn't split, couldn't
|
|
493
|
+
scale, couldn't travel across tools.
|
|
494
|
+
2. `**.cursor/rules/*.mdc**` — modular, but still locked to Cursor.
|
|
495
|
+
3. `**eser/rules` + `eser-rules-manager**` — created as a portable,
|
|
496
|
+
tool-agnostic instruction system. This **predated** Anthropic's Skills spec.
|
|
497
|
+
When Skills arrived, eser/rules was adapted into skills format — validating
|
|
498
|
+
the ecosystem was heading where eser/rules had already gone.
|
|
499
|
+
4. **noskills** — Skills hit a wall: context rot as they accumulated, agents
|
|
500
|
+
picking wrong skills, manual sync across tools. The pull model failed.
|
|
501
|
+
noskills drops skills entirely — state-driven push replaces context-heavy
|
|
502
|
+
pull.
|
|
973
503
|
|
|
974
|
-
|
|
504
|
+
The `eser/rules` repository
|
|
505
|
+
([github.com/eser/rules](https://github.com/eser/rules)) is now archived. Its
|
|
506
|
+
ideas live on in noskills, refined under
|
|
507
|
+
[github.com/eser/stack](https://github.com/eser/stack).
|
|
975
508
|
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
509
|
+
This is the **Software³** philosophy: build, discover limits, evolve, share.
|
|
510
|
+
noskills will discover its own limits too — and when it does, the next step will
|
|
511
|
+
emerge. If you want to discover those limits together, jump on board.
|
|
979
512
|
|
|
980
|
-
|
|
981
|
-
|
|
513
|
+
The name mirrors the SQL -> NoSQL shift: skills define everything upfront,
|
|
514
|
+
noskills determines what's needed at runtime.
|
|
982
515
|
|
|
983
|
-
|
|
984
|
-
eser nos <command>
|
|
985
|
-
```
|
|
516
|
+
### The Scrum analogy
|
|
986
517
|
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
| Command | Description |
|
|
990
|
-
| ------------------------------------- | ------------------------------------------------------------------ |
|
|
991
|
-
| `init` | Scaffold `.eser/`, detect project traits, install hooks |
|
|
992
|
-
| `status [-o format]` | Show current phase, spec name, progress, debt |
|
|
993
|
-
| `spec new <name> "description"` | Start a new spec, enter DISCOVERY |
|
|
994
|
-
| `spec list [-o format]` | List all specs with phase info |
|
|
995
|
-
| `spec <name> next [-o format]` | Get instruction for current phase |
|
|
996
|
-
| `spec <name> next --answer="..."` | Submit answer and advance state |
|
|
997
|
-
| `spec <name> approve` | Approve spec draft -> SPEC_APPROVED |
|
|
998
|
-
| `spec <name> done` | Complete execution -> DONE |
|
|
999
|
-
| `spec <name> block "reason"` | Mark execution as blocked |
|
|
1000
|
-
| `spec <name> reset` | Reset current spec to IDLE |
|
|
1001
|
-
| `spec <name> revisit "reason"` | Return to DISCOVERY from EXECUTING |
|
|
1002
|
-
| `spec <name> split --into x --into y` | Split spec into sub-specs |
|
|
1003
|
-
| `run [--spec=name] [--unattended]` | Autonomous execution loop (Ralph loop) |
|
|
1004
|
-
| `watch [-o format]` | Live dashboard monitoring agent progress |
|
|
1005
|
-
| `concern add/remove/list` | Manage active concerns |
|
|
1006
|
-
| `rule add/list/promote` | Manage permanent rules |
|
|
1007
|
-
| `sync` | Regenerate tool-specific instruction files + hooks |
|
|
1008
|
-
| `purge [--force]` | Remove all noskills content (specs, rules, concerns, hooks, state) |
|
|
1009
|
-
|
|
1010
|
-
All spec commands use the `spec <name> <command>` positional format. The spec
|
|
1011
|
-
name always comes before the subcommand. Use `spec list` to see available specs.
|
|
1012
|
-
|
|
1013
|
-
### Output Formats
|
|
1014
|
-
|
|
1015
|
-
All commands that produce output support `-o` / `--output`:
|
|
1016
|
-
|
|
1017
|
-
| Format | Flag | Use case |
|
|
1018
|
-
| -------- | ------------------- | ---------------------- |
|
|
1019
|
-
| JSON | `-o json` (default) | Agents, pipes, scripts |
|
|
1020
|
-
| Markdown | `-o markdown` | Human reading |
|
|
1021
|
-
| Text | `-o text` | Simple terminal output |
|
|
1022
|
-
|
|
1023
|
-
## Configuration
|
|
1024
|
-
|
|
1025
|
-
noskills config lives inside `.eser/manifest.yml` as a `noskills:` section:
|
|
1026
|
-
|
|
1027
|
-
```yaml
|
|
1028
|
-
noskills:
|
|
1029
|
-
command: "eser noskills" # auto-detected during init
|
|
1030
|
-
concerns:
|
|
1031
|
-
- open-source
|
|
1032
|
-
- beautiful-product
|
|
1033
|
-
tools:
|
|
1034
|
-
- claude-code
|
|
1035
|
-
- cursor
|
|
1036
|
-
providers:
|
|
1037
|
-
- anthropic
|
|
1038
|
-
project:
|
|
1039
|
-
languages: [typescript]
|
|
1040
|
-
frameworks: [react]
|
|
1041
|
-
ci: [github-actions]
|
|
1042
|
-
testRunner: deno
|
|
1043
|
-
maxIterationsBeforeRestart: 15
|
|
1044
|
-
verifyCommand: "deno test" # runs before accepting task completion
|
|
1045
|
-
allowGit: false # true = agents can run git write commands
|
|
1046
|
-
```
|
|
518
|
+
If you know Agile, you already know noskills:
|
|
1047
519
|
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
520
|
+
| Agile / Scrum | noskills |
|
|
521
|
+
| ------------------ | --------------------------------------------- |
|
|
522
|
+
| User Story | Spec |
|
|
523
|
+
| Increment | Spec's deliverable |
|
|
524
|
+
| Refinement meeting | Discovery (6 questions + concerns) |
|
|
525
|
+
| Sprint Planning | Spec draft → approval (tasks defined) |
|
|
526
|
+
| Sprint | Execution (runs until spec is done) |
|
|
527
|
+
| Dev team | Sub-agents (executor, verifier, test-writer) |
|
|
528
|
+
| Scrum Master | noskills (state machine, hooks, backpressure) |
|
|
529
|
+
| Definition of Done | Acceptance criteria |
|
|
530
|
+
| Sprint Review | AC status report + verifier validation |
|
|
531
|
+
| Retrospective | Debt tracking + concern reminders |
|
|
532
|
+
| Product Owner | You (every decision is yours) |
|
|
1053
533
|
|
|
1054
|
-
|
|
534
|
+
One key difference: in Scrum, a sprint is time-boxed. In noskills, execution
|
|
535
|
+
runs until the spec is complete — it is a single-story sprint. This is why
|
|
536
|
+
mid-execution checkpoints make no sense: a Scrum Master does not stop a sprint
|
|
537
|
+
halfway through the only story. If the story is too big, you split it _before_
|
|
538
|
+
the sprint starts — not during. That is exactly what noskills does at
|
|
539
|
+
DISCOVERY_REVIEW with the split proposal.
|
|
1055
540
|
|
|
1056
|
-
|
|
1057
|
-
`copilot`, `windsurf`, `opencode`, `codex`, `copilot-cli`). Affects which sync
|
|
1058
|
-
output files are generated.
|
|
1059
|
-
- **Providers** = AI model access methods (`anthropic`, `openai`, `ollama`,
|
|
1060
|
-
`claude-code` CLI). Used by the Agent Bridge for validation and
|
|
1061
|
-
`noskills run`.
|
|
541
|
+
## Philosophy — A Scrum Master for Agents
|
|
1062
542
|
|
|
1063
|
-
|
|
543
|
+
I used to teach Agile. In those trainings, I'd go all the way back to the Toyota
|
|
544
|
+
Production System to explain why we do what we do.
|
|
1064
545
|
|
|
1065
|
-
|
|
1066
|
-
.
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|-- rules/ # Permanent rules (*.md, *.txt)
|
|
1073
|
-
|-- specs/
|
|
1074
|
-
| +-- photo-upload/
|
|
1075
|
-
| +-- spec.md # Generated spec from discovery
|
|
1076
|
-
|-- workflows/
|
|
1077
|
-
|-- .state/ # git-ignored (runtime only)
|
|
1078
|
-
| |-- state.json # Current phase, answers, progress, active spec
|
|
1079
|
-
| |-- specs/ # Per-spec state snapshots
|
|
1080
|
-
| | |-- photo-upload.json
|
|
1081
|
-
| | +-- fix-login-bug.json
|
|
1082
|
-
| |-- files-changed.jsonl # File modification log (from hooks)
|
|
1083
|
-
| +-- noskills-calls.jsonl # CLI invocation log (from hooks)
|
|
1084
|
-
+-- .gitignore # Excludes .state/
|
|
1085
|
-
```
|
|
546
|
+
I'd talk about WIP limits — not as a process rule, but as acknowledgment that
|
|
547
|
+
human attention is finite. I'd explain how story points emerged from the need to
|
|
548
|
+
break work into pieces small enough for a single person's working memory. I'd
|
|
549
|
+
walk through why we have daily standups (people lose track), why we have
|
|
550
|
+
Definition of Done (everyone's "done" is different), why we have acceptance
|
|
551
|
+
criteria (without them, work drifts from intent). I'd talk about cognitive load
|
|
552
|
+
— how the brain starts dropping things when you pile on too much context.
|
|
1086
553
|
|
|
1087
|
-
|
|
1088
|
-
|
|
554
|
+
When I first encountered context rot in AI agents, it felt familiar. The agent
|
|
555
|
+
starts strong, makes a great plan, then gradually loses the plot — forgets
|
|
556
|
+
instructions, gets sloppy, declares things "done" that aren't. I'd seen this in
|
|
557
|
+
humans. The practices we built around human limitations applied directly.
|
|
1089
558
|
|
|
1090
|
-
|
|
559
|
+
When I saw Ralph loops, I got excited — they felt like sprints. Each iteration
|
|
560
|
+
starts clean: fresh context, clear goal, defined scope. Just like a sprint
|
|
561
|
+
protects the team from mid-sprint chaos, a Ralph loop protects the agent from
|
|
562
|
+
context accumulation. But just as sprint quality depends on what goes INTO the
|
|
563
|
+
sprint, loop quality depends on what context the agent receives.
|
|
1091
564
|
|
|
1092
|
-
|
|
1093
|
-
|
|
565
|
+
I'd also teach Jidoka — one of the pillars of the Toyota Production System.
|
|
566
|
+
Jidoka means "automation with a human touch." The machine runs autonomously, but
|
|
567
|
+
when it detects an anomaly, it stops and calls a human. The human doesn't watch
|
|
568
|
+
every step — they intervene at the right moments. Production quality comes from
|
|
569
|
+
human and machine working together, each doing what they're best at.
|
|
1094
570
|
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
571
|
+
noskills is Jidoka for AI coding. The agent runs autonomously through tasks, but
|
|
572
|
+
at every phase transition — discovery, spec approval, blocked decisions — it
|
|
573
|
+
stops and the human decides. The human doesn't watch every line of code. They
|
|
574
|
+
intervene at the moments that matter: what to build, whether the plan is right,
|
|
575
|
+
which tradeoffs to accept. The agent handles execution; the human handles
|
|
576
|
+
judgment.
|
|
1101
577
|
|
|
1102
|
-
|
|
1103
|
-
const qs = noskills.questions.getQuestionsWithExtras(activeConcerns);
|
|
578
|
+
That's why I stopped using skills and built a scrum master instead:
|
|
1104
579
|
|
|
1105
|
-
|
|
1106
|
-
|
|
580
|
+
- **Ralph loops are sprints** — fresh context, clear scope, no carryover rot.
|
|
581
|
+
- **Discovery is sprint planning** — the same questions a good PM asks before
|
|
582
|
+
work starts.
|
|
583
|
+
- **Backpressure is Definition of Done** — "done" requires evidence, not
|
|
584
|
+
declaration.
|
|
585
|
+
- **Debt tracking is the sprint board** — unfinished items don't vanish, they
|
|
586
|
+
carry forward with increasing urgency.
|
|
587
|
+
- **Concerns are team values** — "we care about open source" shapes every
|
|
588
|
+
decision, just like team values shape how a team works.
|
|
589
|
+
- **Phase transitions are Jidoka stops** — the machine pauses, the human
|
|
590
|
+
decides, then the machine continues.
|
|
591
|
+
- **Explicit over clever** — noskills never makes decisions silently. It always
|
|
592
|
+
asks.
|
|
1107
593
|
|
|
1108
|
-
|
|
1109
|
-
|
|
594
|
+
The insight isn't technical. It's that the practices we spent decades developing
|
|
595
|
+
for human teams apply directly to AI agents — because the underlying problem is
|
|
596
|
+
the same: finite attention, drifting focus, and the need for structure to keep
|
|
597
|
+
work on track.
|
|
1110
598
|
|
|
1111
|
-
|
|
1112
|
-
const text = noskills.formatter.format(output, "markdown");
|
|
1113
|
-
```
|
|
599
|
+
## Technical Reference
|
|
1114
600
|
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
1. **@eser/ai** — Programmatic API call (cross-model, configurable)
|
|
1120
|
-
2. **Claude CLI** — Spawns `claude -p "..."` locally (zero additional cost)
|
|
1121
|
-
3. **Manual** — Returns null, caller handles human review
|
|
1122
|
-
|
|
1123
|
-
## Init Detection
|
|
1124
|
-
|
|
1125
|
-
`noskills init` auto-detects:
|
|
1126
|
-
|
|
1127
|
-
- **Languages** — TypeScript, Go, Rust, Python (from config files)
|
|
1128
|
-
- **Frameworks** — React, Vue, Svelte, Next.js, Express, Hono (from
|
|
1129
|
-
package.json)
|
|
1130
|
-
- **CI** — GitHub Actions, GitLab CI, Jenkins, CircleCI
|
|
1131
|
-
- **Test runner** — Deno, Vitest, Jest, Playwright
|
|
1132
|
-
- **Coding tools:**
|
|
1133
|
-
- **Claude Code** — `CLAUDE.md`, `.claude/` directory
|
|
1134
|
-
- **Kiro** — `.kiro/` directory
|
|
1135
|
-
- **Codex CLI** — `.codex/` directory, `.codex/config.toml`
|
|
1136
|
-
- **Copilot CLI** — `.copilot/` directory, `.github/hooks/`
|
|
1137
|
-
- **Copilot IDE** — `.github/copilot-instructions.md`
|
|
1138
|
-
- **OpenCode** — `.opencode/` directory, `opencode.json`
|
|
1139
|
-
- **Cursor** — `.cursorrules`, `.cursor/` directory
|
|
1140
|
-
- **Windsurf** — `.windsurfrules`
|
|
1141
|
-
- **Kilo Code** — `.kilo/` directory _(detection only — full adapter planned)_
|
|
1142
|
-
- **Cline** — `.clinerules` file _(detection only — full adapter planned)_
|
|
1143
|
-
- **Roo Code** — `.roo/` directory, `.roomodes` file _(detection only — full
|
|
1144
|
-
adapter planned)_
|
|
1145
|
-
|
|
1146
|
-
Detected coding tools are auto-synced on init, including hook installation for
|
|
1147
|
-
tools that support it. Invocation method is auto-detected and stored in
|
|
1148
|
-
`manifest.yml` as `noskills.command` — all output references use this prefix.
|
|
601
|
+
State machine internals, JSON output format, hook implementation, CLI reference,
|
|
602
|
+
directory structure, configuration, and library API — see
|
|
603
|
+
**[README-HOW.md](./README-HOW.md)**.
|
|
1149
604
|
|
|
1150
605
|
## License
|
|
1151
606
|
|