ystack 0.1.0 → 0.2.0
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/CHANGELOG.md +36 -1
- package/LINTING.md +36 -71
- package/PHILOSOPHY.md +11 -11
- package/README.md +103 -43
- package/RUNTIMES.md +10 -10
- package/bin/cli.js +84 -62
- package/hooks/docs-match-progress.js +100 -0
- package/hooks/no-undocumented-check.js +91 -0
- package/hooks/progress-before-ship.js +74 -0
- package/hooks/session-start.sh +11 -6
- package/hooks/workflow-nudge.js +2 -2
- package/package.json +3 -5
- package/skills/address-review/SKILL.md +1 -1
- package/skills/build/SKILL.md +3 -3
- package/skills/docs/SKILL.md +4 -2
- package/skills/go/SKILL.md +11 -9
- package/skills/import/SKILL.md +182 -81
- package/skills/pr/SKILL.md +15 -10
- package/skills/quick/SKILL.md +110 -0
- package/skills/scaffold/SKILL.md +77 -65
- package/PLAN.md +0 -515
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.0 — 2026-04-09
|
|
4
|
+
|
|
5
|
+
**Breaking:** Replaces Beads with git-native progress files. No migration path from 0.1.0 — run `npx ystack init` to set up the new `.ystack/` directory.
|
|
6
|
+
|
|
7
|
+
### Breaking Changes
|
|
8
|
+
|
|
9
|
+
- `ystack.config.json` moved to `.ystack/config.json`
|
|
10
|
+
- `.beads/` directory no longer used — progress tracked in `.ystack/progress/*.md`
|
|
11
|
+
- `"epic"` field removed from module registry entries
|
|
12
|
+
- `.context/<bead-id>/` renamed to `.context/<feature-slug>/`
|
|
13
|
+
- `bd` CLI no longer required
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- **`/quick` skill** — fast path for bug fixes, chores, and small changes (skips planning and progress)
|
|
18
|
+
- **`progress-before-ship` hook** — warns on PR if code changed but progress not updated
|
|
19
|
+
- **`docs-match-progress` hook** — catches `[x]` items with stubbed doc sections
|
|
20
|
+
- **`no-undocumented-check` hook** — warns when checking a box with stub docs still present
|
|
21
|
+
- **`/pr` runs `/docs` inline** when it detects stubbed doc sections for completed features
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- Progress tracked via markdown checklists in `.ystack/progress/<module>.md` instead of Beads
|
|
26
|
+
- `workflow-nudge` hook now recognizes `/quick` mode and stays silent
|
|
27
|
+
- `progress-before-ship` hook skips warning for small diffs (5 or fewer code files)
|
|
28
|
+
- `session-start` hook reads `.ystack/progress/` instead of `bd ready`
|
|
29
|
+
|
|
30
|
+
### Removed
|
|
31
|
+
|
|
32
|
+
- Beads (`bd` CLI) dependency
|
|
33
|
+
- `PLAN.md` project roadmap (content lives in individual skill files)
|
|
34
|
+
- Beads installation flow from `ystack init` and `ystack create`
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
3
38
|
## 0.1.0 — 2026-04-09
|
|
4
39
|
|
|
5
40
|
First public release. Claude Code only.
|
|
@@ -8,7 +43,7 @@ First public release. Claude Code only.
|
|
|
8
43
|
|
|
9
44
|
- **CLI** — `ystack create`, `init`, `update`, `remove` commands with interactive prompts (@clack/prompts)
|
|
10
45
|
- **Skills** — `/build`, `/go`, `/review`, `/docs`, `/pr`, `/import`, `/scaffold`, `/address-review`
|
|
11
|
-
- **Hooks** — context-monitor
|
|
46
|
+
- **Hooks** — context-monitor, workflow-nudge, session-start
|
|
12
47
|
- **Module registry** — `ystack.config.json` maps code scopes to doc pages and Beads epics
|
|
13
48
|
- **Beads integration** — persistent task memory with epics, features, ready front, structured notes
|
|
14
49
|
- **Docs support** — Nextra 4 and Fumadocs, framework-agnostic doc layer
|
package/LINTING.md
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# Agent Linting
|
|
2
2
|
|
|
3
|
-
> **Status: Design Spec — Not Yet Implemented**
|
|
4
|
-
> None of the agent lint rules, hook infrastructure (`hooks/agent-lint.js`), or per-skill `rules/*.json` files described below are built. This document is a design specification for a future version of ystack. v0.1 includes basic Claude Code hooks (context monitoring, file-count nudge) but not the structured rule system described here.
|
|
5
|
-
|
|
6
3
|
## Two Types of Linting
|
|
7
4
|
|
|
8
5
|
**Code linting** checks what the code looks like — formatting, syntax, style. Tools like Ultracite/Biome handle this. You configure it once and it covers all code. Adding a new feature doesn't mean adding new rules.
|
|
@@ -28,44 +25,61 @@ Rules come in two severities:
|
|
|
28
25
|
- **Warn** — surface a message, let the agent continue. For nudges and best practices.
|
|
29
26
|
- **Block** — prevent the action. For hard constraints that protect quality.
|
|
30
27
|
|
|
31
|
-
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Built Hooks
|
|
31
|
+
|
|
32
|
+
These are implemented and installed by `npx ystack init`.
|
|
33
|
+
|
|
34
|
+
### Workflow Hooks
|
|
35
|
+
|
|
36
|
+
| Hook | File | Trigger | What it does |
|
|
37
|
+
|------|------|---------|-------------|
|
|
38
|
+
| **workflow-nudge** | `workflow-nudge.js` | PreToolUse on Edit/Write | After 3+ source files edited without an active `.context/<feature-slug>/PLAN.md`, warns: "Consider /build for tracked changes." Dismissible via `.context/.no-nudge`. |
|
|
39
|
+
| **context-monitor** | `context-monitor.js` | PostToolUse on * | Warns at 60% context usage (suggest subagents) and 80% (suggest finishing current task). Silent if runtime doesn't expose context metrics. |
|
|
40
|
+
| **session-start** | `session-start.sh` | Session start | Shows unchecked features from `.ystack/progress/` and any in-progress plans in `.context/`. |
|
|
41
|
+
|
|
42
|
+
### Progress Integrity Hooks
|
|
43
|
+
|
|
44
|
+
| Hook | File | Trigger | What it does |
|
|
45
|
+
|------|------|---------|-------------|
|
|
46
|
+
| **progress-before-ship** | `progress-before-ship.js` | PreToolUse on Bash (git push / gh pr create) | Warns if the branch has code changes but no `.ystack/progress/` updates. Catches `/go` forgetting to check the box. |
|
|
47
|
+
| **docs-match-progress** | `docs-match-progress.js` | PostToolUse on Edit/Write (doc files) | After editing a doc file, checks that `[x]` items in the module's progress file don't still have `<!-- ystack:stub -->` in docs. Catches incomplete doc updates. |
|
|
48
|
+
| **no-undocumented-check** | `no-undocumented-check.js` | PreToolUse on Edit (progress files) | When checking a box `[x]` in a progress file, warns if the linked doc section still has `<!-- ystack:stub -->`. Reminds you to run `/docs` before `/pr`. |
|
|
32
49
|
|
|
33
|
-
|
|
50
|
+
---
|
|
34
51
|
|
|
35
|
-
|
|
52
|
+
## Design Spec — Not Yet Implemented
|
|
53
|
+
|
|
54
|
+
The rules below are enforced by the skill prompts themselves (the SKILL.md instructions tell the agent what to check). They are not separate hook implementations. A future version of ystack may extract these into standalone hooks for harder enforcement.
|
|
55
|
+
|
|
56
|
+
### Workflow Rules (prompt-enforced)
|
|
36
57
|
|
|
37
58
|
| Rule | Severity | When | What it checks |
|
|
38
59
|
|------|----------|------|---------------|
|
|
39
|
-
| `plan-before-edit` | Warn | PreToolUse on Edit | Is there an active `.context/<bead-id>/PLAN.md`? Nudges toward `/build` or `/quick`. |
|
|
40
60
|
| `spec-before-plan` | Block | During `/build` | Did the agent read the module's doc page before creating a plan? Prevents hallucinated architecture. |
|
|
41
|
-
| `decisions-before-execute` | Block | During `/go` | Does `.context/<
|
|
61
|
+
| `decisions-before-execute` | Block | During `/go` | Does `.context/<feature-slug>/DECISIONS.md` exist? No executing without confirmed decisions. |
|
|
42
62
|
| `plan-checker-passed` | Block | During `/go` | Has the plan-checker agent validated the plan? No executing unchecked plans. |
|
|
43
|
-
| `no-scope-reduction` | Block | During `/
|
|
63
|
+
| `no-scope-reduction` | Block | During `/build` | Does the plan cover ALL locked decisions from DECISIONS.md? Catches silent simplification. |
|
|
44
64
|
|
|
45
|
-
### Verification Rules
|
|
65
|
+
### Verification Rules (prompt-enforced)
|
|
46
66
|
|
|
47
67
|
| Rule | Severity | When | What it checks |
|
|
48
68
|
|------|----------|------|---------------|
|
|
49
69
|
| `verify-before-ship` | Block | During `/pr` | Has `/review` passed all success criteria? No shipping unverified work. |
|
|
50
|
-
| `docs-before-ship` | Warn | During `/pr` | Are there closed beads without corresponding doc updates? Nudges toward `/docs`. |
|
|
51
70
|
| `typecheck-before-ship` | Block | During `/pr` | Does `pnpm typecheck` pass? No shipping broken types. |
|
|
52
71
|
|
|
53
|
-
### Documentation Rules
|
|
72
|
+
### Documentation Rules (prompt-enforced)
|
|
54
73
|
|
|
55
74
|
| Rule | Severity | When | What it checks |
|
|
56
75
|
|------|----------|------|---------------|
|
|
57
76
|
| `cross-references` | Warn | During `/docs` | Does the updated doc page link to related modules? Flags isolated pages. |
|
|
58
77
|
| `final-state-only` | Block | During `/docs` | Does the doc contain "planned", "coming soon", "TODO", "WIP"? Docs describe what IS. |
|
|
59
|
-
| `module-registered` | Warn | During `/build` | Is the target module in
|
|
60
|
-
|
|
61
|
-
### Context Rules
|
|
62
|
-
|
|
63
|
-
| Rule | Severity | When | What it checks |
|
|
64
|
-
|------|----------|------|---------------|
|
|
65
|
-
| `context-budget` | Warn | PostToolUse | Is context usage above 60%? Suggests spawning subagents. |
|
|
66
|
-
| `context-critical` | Warn | PostToolUse | Is context usage above 80%? Suggests finishing current task or `/pause`. |
|
|
78
|
+
| `module-registered` | Warn | During `/build` | Is the target module in `.ystack/config.json`? Catches work outside any module's scope. |
|
|
67
79
|
| `reference-not-dump` | Warn | During `/build` | Did the agent inline a full doc page into the plan instead of referencing it? |
|
|
68
80
|
|
|
81
|
+
---
|
|
82
|
+
|
|
69
83
|
## Adding Rules When You Add Skills
|
|
70
84
|
|
|
71
85
|
Each skill can ship with its own lint rules. When you install a skill, its rules get added to the hook configuration automatically.
|
|
@@ -100,17 +114,15 @@ Rules evolve with the project:
|
|
|
100
114
|
|
|
101
115
|
1. **Start soft.** New rules ship as `warn`. Teams adopt the practice before it becomes enforced.
|
|
102
116
|
2. **Promote to block.** Once the team is comfortable, flip severity to `block` for critical rules.
|
|
103
|
-
3. **Project-specific rules.** Teams can add their own rules in
|
|
117
|
+
3. **Project-specific rules.** Teams can add their own rules in `.ystack/config.json`:
|
|
104
118
|
|
|
105
119
|
```json
|
|
106
120
|
{
|
|
107
121
|
"linting": {
|
|
108
122
|
"rules": {
|
|
109
123
|
"plan-before-edit": "warn",
|
|
110
|
-
"spec-before-plan": "block",
|
|
111
124
|
"verify-before-ship": "block",
|
|
112
125
|
"docs-before-ship": "warn",
|
|
113
|
-
"cross-references": "warn",
|
|
114
126
|
"custom-rules": [
|
|
115
127
|
{
|
|
116
128
|
"name": "security-review-for-auth",
|
|
@@ -137,53 +149,6 @@ Rules evolve with the project:
|
|
|
137
149
|
}
|
|
138
150
|
```
|
|
139
151
|
|
|
140
|
-
## Implementation
|
|
141
|
-
|
|
142
|
-
Agent lint rules are thin hooks. Each rule is a single check that runs at a specific point in the workflow.
|
|
143
|
-
|
|
144
|
-
### Hook Structure
|
|
145
|
-
|
|
146
|
-
```javascript
|
|
147
|
-
// hooks/agent-lint.js
|
|
148
|
-
// PostToolUse hook — runs after every tool call
|
|
149
|
-
|
|
150
|
-
export default function agentLint({ tool, input, output, config }) {
|
|
151
|
-
const rules = loadRules(config);
|
|
152
|
-
const violations = [];
|
|
153
|
-
|
|
154
|
-
for (const rule of rules) {
|
|
155
|
-
if (rule.shouldRun(tool, input)) {
|
|
156
|
-
const result = rule.check(tool, input, output);
|
|
157
|
-
if (result.violated) {
|
|
158
|
-
violations.push({
|
|
159
|
-
rule: rule.name,
|
|
160
|
-
severity: rule.severity,
|
|
161
|
-
message: result.message
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// Warnings get surfaced as messages
|
|
168
|
-
// Blocks prevent the action
|
|
169
|
-
return formatViolations(violations);
|
|
170
|
-
}
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
### What Rules Can Check
|
|
174
|
-
|
|
175
|
-
Rules have access to:
|
|
176
|
-
- **Tool name and input** — which tool was called and with what arguments
|
|
177
|
-
- **File system** — read `.context/`, `ystack.config.json`, doc pages
|
|
178
|
-
- **Beads state** — `bd show`, `bd ready` (via shell)
|
|
179
|
-
- **Git state** — current diff, branch, recent commits
|
|
180
|
-
|
|
181
|
-
Rules do NOT:
|
|
182
|
-
- Modify files
|
|
183
|
-
- Call external APIs
|
|
184
|
-
- Block indefinitely
|
|
185
|
-
- Access conversation history
|
|
186
|
-
|
|
187
152
|
## Code Linting vs. Agent Linting
|
|
188
153
|
|
|
189
154
|
| | Code Linting | Agent Linting |
|
|
@@ -193,6 +158,6 @@ Rules do NOT:
|
|
|
193
158
|
| **When** | Pre-commit hook | During agent execution |
|
|
194
159
|
| **Grows with** | Language features | New skills and conventions |
|
|
195
160
|
| **Examples** | "Use `const` not `let`" | "Read the spec before planning" |
|
|
196
|
-
| **Configured in** | `biome.json` |
|
|
161
|
+
| **Configured in** | `biome.json` | `.ystack/config.json` |
|
|
197
162
|
|
|
198
163
|
Both run automatically. Code linting on commit, agent linting during workflow. Together they ensure both the code and the process that produced it meet the team's standards.
|
package/PHILOSOPHY.md
CHANGED
|
@@ -28,7 +28,7 @@ You write it once. It serves all four purposes. There is no separate "planning d
|
|
|
28
28
|
|
|
29
29
|
```
|
|
30
30
|
Docs → What the system IS (final state)
|
|
31
|
-
|
|
31
|
+
Progress → What's been done, what's left (development state)
|
|
32
32
|
Code → The actual implementation
|
|
33
33
|
```
|
|
34
34
|
|
|
@@ -36,9 +36,9 @@ These three layers never overlap in responsibility:
|
|
|
36
36
|
|
|
37
37
|
**Docs** describe the finished design. They answer: what does this module do? How does it connect to other modules? What data does it manage? What are the contracts at its boundaries? Docs never contain "planned", "coming soon", "TODO", or "v2". If it's in the docs, it's built and working.
|
|
38
38
|
|
|
39
|
-
**
|
|
39
|
+
**Progress files** track the journey. They record which features are implemented (checked), which are not yet built (unchecked), and which are blocked (via `depends-on:` annotations). They hold the decisions made during implementation and the notes that let an agent resume work after a context reset. Progress files are the development state — committed to git, branching and merging with the code they track.
|
|
40
40
|
|
|
41
|
-
**Code** is the implementation. It doesn't need to explain itself beyond what's necessary for maintenance. The architecture lives in docs. The progress lives in
|
|
41
|
+
**Code** is the implementation. It doesn't need to explain itself beyond what's necessary for maintenance. The architecture lives in docs. The progress lives in `.ystack/progress/`. The code just works.
|
|
42
42
|
|
|
43
43
|
## Why Human-Readable Markdown
|
|
44
44
|
|
|
@@ -62,7 +62,7 @@ This matters because:
|
|
|
62
62
|
2. **Docs change.** A reference always points to the current version. Inlined content is stale the moment it's pasted.
|
|
63
63
|
3. **Agents can navigate.** A doc page with cross-references lets the agent follow links to related modules, just like a human developer would.
|
|
64
64
|
|
|
65
|
-
The module registry (
|
|
65
|
+
The module registry (`.ystack/config.json`) exists to give agents a map: "payments lives here in the code, here in the docs, and here in the progress files." From that map, the agent reads what it needs, when it needs it.
|
|
66
66
|
|
|
67
67
|
## Connected Documentation
|
|
68
68
|
|
|
@@ -91,21 +91,21 @@ The module registry bridges three worlds:
|
|
|
91
91
|
"packages/payments/**",
|
|
92
92
|
"packages/db/src/schema/transactions.*",
|
|
93
93
|
"apps/api/src/routes/payments.*"
|
|
94
|
-
]
|
|
95
|
-
"epic": "bd-a1b2"
|
|
94
|
+
]
|
|
96
95
|
}
|
|
97
96
|
}
|
|
98
97
|
```
|
|
99
98
|
|
|
100
99
|
- **doc** → where to read the spec (and where to write updates when features complete)
|
|
101
100
|
- **scope** → where the code lives, as glob patterns. A module doesn't have to be a package — it can span files across multiple packages, or live within a subdirectory of one. This is what to scan when planning and what to verify when done.
|
|
102
|
-
- **epic** → where progress lives (which features are built, which are pending)
|
|
103
101
|
|
|
104
|
-
|
|
102
|
+
Progress is tracked by convention in `.ystack/progress/<module-key>.md` — one file per module, with feature checklists, decisions, and notes.
|
|
105
103
|
|
|
106
|
-
|
|
104
|
+
The registry tracks **modules only**. Sub-modules are tracked by the docs site (sub-pages within a module). Features are tracked in progress files (checklist items in the module's progress file). Each layer has its own hierarchy — the registry connects the top level.
|
|
107
105
|
|
|
108
|
-
|
|
106
|
+
When a feature is checked off in a progress file, ystack knows which doc page might need updating. When `/build` starts planning, it knows which files across the repo are relevant. When `/import` scans an existing repo, it builds this map automatically.
|
|
107
|
+
|
|
108
|
+
The registry is small, stable, and rarely changes. It's the index — the docs, code, and progress files are the content.
|
|
109
109
|
|
|
110
110
|
## Documentation Reflects Only Completed Work
|
|
111
111
|
|
|
@@ -119,7 +119,7 @@ This means:
|
|
|
119
119
|
- There's no "planned" section that's been "planned" for six months
|
|
120
120
|
- The gap between docs and reality is always zero for documented features
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
Progress files track what's planned and in progress. That's their role. Docs track what's done. The boundary is clean.
|
|
123
123
|
|
|
124
124
|
## Why This Works for Teams
|
|
125
125
|
|
package/README.md
CHANGED
|
@@ -1,81 +1,134 @@
|
|
|
1
1
|
# ystack
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
```
|
|
4
|
+
_ _
|
|
5
|
+
_ _ ___| |_ __ _ ___| | __
|
|
6
|
+
| | | / __| __/ _` |/ __| |/ /
|
|
7
|
+
| |_| \__ \ || (_| | (__| <
|
|
8
|
+
\__, |___/\__\__,_|\___|_|\_\
|
|
9
|
+
|___/
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
[](https://www.npmjs.com/package/ystack)
|
|
13
|
+
[](./LICENSE)
|
|
14
|
+
|
|
15
|
+
**An agent harness for doc-driven development** — with git-native progress tracking.
|
|
4
16
|
|
|
5
17
|
> **Status:** Early release (v0.1) — Claude Code only. Multi-runtime support is planned.
|
|
6
18
|
|
|
19
|
+
```bash
|
|
20
|
+
# Interactive setup guide
|
|
21
|
+
npx ystack
|
|
22
|
+
|
|
23
|
+
# New project with opinionated defaults
|
|
24
|
+
npx ystack create my-app
|
|
25
|
+
|
|
26
|
+
# Add to an existing project
|
|
27
|
+
cd your-project && npx ystack init
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
7
32
|
## Why
|
|
8
33
|
|
|
9
|
-
AI coding agents are capable but unstructured. Without guardrails
|
|
34
|
+
AI coding agents are capable but unstructured. Without guardrails:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
Without ystack With ystack
|
|
38
|
+
────────────── ──────────────
|
|
39
|
+
|
|
40
|
+
"Build auth" "Build auth"
|
|
41
|
+
│ │
|
|
42
|
+
▼ ▼
|
|
43
|
+
┌────────────┐ ┌────────────┐
|
|
44
|
+
│ Hallucinate│ │ Read spec │
|
|
45
|
+
│ a design │ │ first │
|
|
46
|
+
└─────┬──────┘ └─────┬──────┘
|
|
47
|
+
▼ ▼
|
|
48
|
+
┌────────────┐ ┌────────────┐
|
|
49
|
+
│ Code it all│ │ Plan tasks │
|
|
50
|
+
│ at once │ │ you confirm│
|
|
51
|
+
└─────┬──────┘ └─────┬──────┘
|
|
52
|
+
▼ ▼
|
|
53
|
+
┌────────────┐ ┌────────────┐
|
|
54
|
+
│ "Done!" │ │ Execute + │
|
|
55
|
+
│ (is it?) │ │ verify │
|
|
56
|
+
└─────┬──────┘ └─────┬──────┘
|
|
57
|
+
▼ ▼
|
|
58
|
+
┌────────────┐ ┌────────────┐
|
|
59
|
+
│ Docs? What │ │ Update │
|
|
60
|
+
│ docs? │ │ docs │
|
|
61
|
+
└────────────┘ └────────────┘
|
|
62
|
+
```
|
|
10
63
|
|
|
11
|
-
|
|
12
|
-
- **Silently simplify** — deliver a "v1" of what you asked for instead of the real thing
|
|
13
|
-
- **Lose context** — forget decisions from 20 minutes ago as the context window fills
|
|
14
|
-
- **Skip verification** — mark tasks done without checking the code actually works
|
|
15
|
-
- **Ignore docs** — write code that drifts from the documented design, or never update docs at all
|
|
64
|
+
See [PHILOSOPHY.md](./PHILOSOPHY.md) for the full design rationale.
|
|
16
65
|
|
|
17
|
-
|
|
66
|
+
---
|
|
18
67
|
|
|
19
68
|
## How It Works
|
|
20
69
|
|
|
21
70
|
Three layers, connected by a module registry:
|
|
22
71
|
|
|
23
72
|
```
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
73
|
+
┌──────────────────────────────────────────────────────────┐
|
|
74
|
+
│ .ystack/config.json │
|
|
75
|
+
│ (Module Registry) │
|
|
76
|
+
├──────────────────┬──────────────────┬────────────────────┤
|
|
77
|
+
│ │ │ │
|
|
78
|
+
│ Docs (MDX) │ Progress │ Code │
|
|
79
|
+
│ ━━━━━━━━━━ │ (.ystack/) │ ━━━━ │
|
|
80
|
+
│ What it IS │ ━━━━━━━━━━ │ The actual │
|
|
81
|
+
│ Final specs │ What's DONE │ implementation │
|
|
82
|
+
│ Design truth │ What's LEFT │ Lives here │
|
|
83
|
+
│ │ State layer │ │
|
|
84
|
+
│ agents read <──┼── tracks ───────>┼── agents write │
|
|
85
|
+
│ │ │ │
|
|
86
|
+
└──────────────────┴──────────────────┴────────────────────┘
|
|
31
87
|
```
|
|
32
88
|
|
|
33
|
-
|
|
34
|
-
|-------|------|
|
|
35
|
-
| **Docs** | The spec agents read, the reference your team reads, the contract between modules. Written once, serves all three. |
|
|
36
|
-
| **Beads** | Development state machine. What's built, in progress, or blocked. Persistent memory that survives context resets. |
|
|
37
|
-
| **Code** | The implementation. Architecture lives in docs, progress lives in Beads. |
|
|
38
|
-
|
|
39
|
-
Each module in `ystack.config.json` maps a doc page, code scope (glob patterns), and a Beads epic:
|
|
89
|
+
Each module maps a doc page and code scope:
|
|
40
90
|
|
|
41
91
|
```json
|
|
42
92
|
{
|
|
43
93
|
"modules": {
|
|
44
94
|
"payments": {
|
|
45
95
|
"doc": "shared/payments",
|
|
46
|
-
"scope": ["packages/payments/**", "apps/api/src/routes/payments.*"]
|
|
47
|
-
"epic": "bd-a1b2"
|
|
96
|
+
"scope": ["packages/payments/**", "apps/api/src/routes/payments.*"]
|
|
48
97
|
}
|
|
49
98
|
}
|
|
50
99
|
}
|
|
51
100
|
```
|
|
52
101
|
|
|
53
|
-
|
|
102
|
+
---
|
|
54
103
|
|
|
55
|
-
|
|
104
|
+
## The Workflow
|
|
56
105
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
106
|
+
```
|
|
107
|
+
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
|
|
108
|
+
│/scaffold │───>│ /build │───>│ /go │───>│ /review │───>│ /docs │───>│ /pr │
|
|
109
|
+
│ or │ │ │ │ │ │ │ │ │ │ │
|
|
110
|
+
│/import │ │ Plan & │ │ Execute │ │ Verify │ │ Update │ │ Ship │
|
|
111
|
+
│ │ │ confirm │ │ tasks w/ │ │ against │ │ docs for │ │ it │
|
|
112
|
+
│ Scan or │ │ with │ │ fresh │ │ success │ │completed │ │ │
|
|
113
|
+
│ scaffold │ │ user │ │subagents │ │ criteria │ │ work │ │ │
|
|
114
|
+
└──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘
|
|
115
|
+
```
|
|
61
116
|
|
|
62
|
-
###
|
|
117
|
+
### Commands
|
|
63
118
|
|
|
64
119
|
| Command | What it does |
|
|
65
120
|
|---------|-------------|
|
|
121
|
+
| `/scaffold` | Takes a big plan, splits into module doc stubs + diagrams + progress files |
|
|
122
|
+
| `/import` | Scans existing repo, generates module registry, flags doc gaps |
|
|
66
123
|
| `/build <feature>` | Reads docs + code, surfaces assumptions, creates a plan. You confirm. |
|
|
67
|
-
| `/go` | Executes the plan — fresh subagent per task, atomic commits
|
|
68
|
-
| `/
|
|
69
|
-
| `/
|
|
70
|
-
| `/
|
|
71
|
-
| `/
|
|
124
|
+
| `/go` | Executes the plan — fresh subagent per task, atomic commits |
|
|
125
|
+
| `/quick` | Fast path for bug fixes, chores, small changes — skip planning and progress |
|
|
126
|
+
| `/review` | Code review + goal-backward verification against success criteria |
|
|
127
|
+
| `/docs` | Updates documentation for completed work (only completed, never planned) |
|
|
128
|
+
| `/pr` | Verify, docs check, create PR |
|
|
129
|
+
| `/address-review` | Fetch PR review comments, triage by priority, address approved fixes |
|
|
72
130
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
```
|
|
76
|
-
New project: big plan → /scaffold → /build → /go → /review → /docs → /pr
|
|
77
|
-
Existing project: repo → /import → /build → /go → /review → /docs → /pr
|
|
78
|
-
```
|
|
131
|
+
---
|
|
79
132
|
|
|
80
133
|
## Getting Started
|
|
81
134
|
|
|
@@ -96,7 +149,14 @@ See [INSTALL.md](./INSTALL.md) for full setup options, prerequisites, and config
|
|
|
96
149
|
- [INSTALL.md](./INSTALL.md) — Installation and default stack
|
|
97
150
|
- [LINTING.md](./LINTING.md) — Agent linting rules
|
|
98
151
|
- [RUNTIMES.md](./RUNTIMES.md) — Multi-runtime support
|
|
99
|
-
|
|
152
|
+
|
|
153
|
+
## Contributing
|
|
154
|
+
|
|
155
|
+
Issues and PRs welcome. Please open an issue before starting large changes.
|
|
156
|
+
|
|
157
|
+
## Changelog
|
|
158
|
+
|
|
159
|
+
See [CHANGELOG.md](./CHANGELOG.md) for release history.
|
|
100
160
|
|
|
101
161
|
## License
|
|
102
162
|
|
package/RUNTIMES.md
CHANGED
|
@@ -58,10 +58,10 @@ ystack/
|
|
|
58
58
|
### Core (agent-agnostic)
|
|
59
59
|
|
|
60
60
|
The prompts in `core/prompts/` are the actual skill logic. They reference:
|
|
61
|
-
-
|
|
62
|
-
-
|
|
61
|
+
- `.ystack/config.json` for the module registry
|
|
62
|
+
- `.ystack/progress/` for development state
|
|
63
63
|
- Doc page paths (resolved from the registry)
|
|
64
|
-
- `.context/<
|
|
64
|
+
- `.context/<feature-slug>/` for temporary state
|
|
65
65
|
|
|
66
66
|
These are pure markdown instructions that any LLM can follow. They don't use Claude-specific features, tool names, or XML tags.
|
|
67
67
|
|
|
@@ -105,7 +105,7 @@ Not all runtimes can do everything. ystack degrades gracefully:
|
|
|
105
105
|
| **Runtimes** | Claude Code, Gemini CLI | Codex, Cursor | Copilot, Windsurf |
|
|
106
106
|
| **Subagents** | Yes — fresh context per task | No — inline execution | No |
|
|
107
107
|
| **Hooks** | Yes — pre/post tool use | No — rules embedded in prompts | No |
|
|
108
|
-
| **
|
|
108
|
+
| **Progress files** | Git-native markdown | Git-native markdown | Git-native markdown |
|
|
109
109
|
| **Docs reading** | Selective (agent navigates) | Selective | Selective |
|
|
110
110
|
| **Plan-checker** | Separate agent validates | Self-check in same context | Self-check |
|
|
111
111
|
| **Parallel execution** | Yes (wave-based) | Sequential | Sequential |
|
|
@@ -121,7 +121,7 @@ Claude Code and Gemini CLI support subagents and hooks. They get the full experi
|
|
|
121
121
|
|
|
122
122
|
### Tier 2: Inline Execution
|
|
123
123
|
|
|
124
|
-
Codex and Cursor can
|
|
124
|
+
Codex and Cursor can read files, but have no subagent support. The harness adapts:
|
|
125
125
|
- `/go` executes tasks sequentially in the same context
|
|
126
126
|
- Plan-checker runs as a self-review step (not a separate agent)
|
|
127
127
|
- Lint rules are embedded in the prompt ("before editing, verify you've read the spec")
|
|
@@ -134,22 +134,22 @@ This is still valuable. The workflow (build → go → review → docs → pr) w
|
|
|
134
134
|
Copilot and Windsurf have minimal configuration. They get the workflow as natural language instructions:
|
|
135
135
|
- No slash commands — the instructions describe the process to follow
|
|
136
136
|
- The agent is told: "When asked to build a feature, first read the module's doc page..."
|
|
137
|
-
-
|
|
137
|
+
- Progress files are just markdown — any agent can read and write them
|
|
138
138
|
- Verification is self-check only
|
|
139
139
|
|
|
140
|
-
Even at this tier, having
|
|
140
|
+
Even at this tier, having progress files + docs + module registry is a significant upgrade over nothing.
|
|
141
141
|
|
|
142
142
|
## What Stays Universal
|
|
143
143
|
|
|
144
144
|
Regardless of runtime, every agent gets:
|
|
145
145
|
|
|
146
|
-
1. **
|
|
146
|
+
1. **Progress files** — any agent can read and write markdown. The progress tracking layer (`.ystack/progress/`) is just files in git.
|
|
147
147
|
|
|
148
148
|
2. **Docs** — every agent can read markdown files. The documentation-as-spec pattern is runtime-agnostic.
|
|
149
149
|
|
|
150
|
-
3. **Module registry** —
|
|
150
|
+
3. **Module registry** — `.ystack/config.json` is JSON. Any agent can parse it to find the right doc page and code scope.
|
|
151
151
|
|
|
152
|
-
4. **`.context/<
|
|
152
|
+
4. **`.context/<feature-slug>/`** — PLAN.md and DECISIONS.md are markdown files. Any agent can read and write them.
|
|
153
153
|
|
|
154
154
|
5. **The workflow** — build → go → review → docs → pr is a process, not a tool feature. It works in any agent that can follow multi-step instructions.
|
|
155
155
|
|