You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: DESIGN.md
+35-35Lines changed: 35 additions & 35 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,20 +1,20 @@
1
-
# Forge — Design Document
1
+
# Stonecut — Design Document
2
2
3
-
Forge is a CLI tool that executes PRD-driven development workflows using agentic coding CLIs. It picks up issues (vertical slices from a PRD), spawns headless CLI sessions to implement them, handles bookkeeping, and creates pull requests with execution reports.
3
+
Stonecut is a CLI tool that executes PRD-driven development workflows using agentic coding CLIs. It picks up issues (vertical slices from a PRD), spawns headless CLI sessions to implement them, handles bookkeeping, and creates pull requests with execution reports.
4
4
5
5
This document captures the design decisions for the initial build and future roadmap.
-**Rationale:** A PRD is a blueprint, issues are the pieces, the tool forges them into reality. The primary execution entry point is `forge run`, with source selection handled by flags.
9
+
-**Project name:**Stonecut (repo: stonecut)
10
+
-**CLI command:**`stonecut`
11
+
-**Rationale:** A PRD is a blueprint, issues are the pieces, the tool cuts them precisely into reality. The primary execution entry point is `stonecut run`, with source selection handled by flags.
12
12
13
13
## CLI Commands
14
14
15
15
```
16
-
forge run --local <name> -i <N|all> [--runner <name>]
17
-
forge run --github <number> -i <N|all> [--runner <name>]
16
+
stonecut run --local <name> -i <N|all> [--runner <name>]
17
+
stonecut run --github <number> -i <N|all> [--runner <name>]
-**`forge run --local <name>`** — local PRD. Looks in `.forge/<name>/` for `prd.md` and `issues/`.
33
-
-**`forge run --github <number>`** — GitHub PRD. Issue number on the current repo, tasks are sub-issues.
32
+
-**`stonecut run --local <name>`** — local PRD. Looks in `.stonecut/<name>/` for `prd.md` and `issues/`.
33
+
-**`stonecut run --github <number>`** — GitHub PRD. Issue number on the current repo, tasks are sub-issues.
34
34
35
35
## Runner Architecture
36
36
37
-
Forge uses a runner abstraction to support multiple agentic coding CLIs. The architecture consists of:
37
+
Stonecut uses a runner abstraction to support multiple agentic coding CLIs. The architecture consists of:
38
38
39
39
### Runner Interface
40
40
@@ -81,27 +81,27 @@ Modules throw typed errors. Only `cli.ts` catches errors, formats user-facing me
81
81
- On success: close issue / update `status.json`, log to `progress.txt`.
82
82
- On failure: record error, move on.
83
83
6. Loops until iterations exhausted.
84
-
7. After all iterations: push branch, create PR with Forge Report.
84
+
7. After all iterations: push branch, create PR with Stonecut Report.
85
85
86
86
### Prompt
87
87
88
88
Single `execute.md` template with placeholders. The template is CLI-agnostic — runner-specific behavior is encapsulated in the adapter, not the prompt.
89
89
90
90
## Pre-execution Flow
91
91
92
-
Before spawning the first session, Forge prompts the user:
92
+
Before spawning the first session, Stonecut prompts the user:
93
93
94
-
1.**Branch name** — with a sensible suggestion using the unified `forge/<slug>` convention. Local mode uses the spec name, GitHub mode uses the PRD title slug, and GitHub falls back to `forge/issue-<number>` when needed.
94
+
1.**Branch name** — with a sensible suggestion using the unified `stonecut/<slug>` convention. Local mode uses the spec name, GitHub mode uses the PRD title slug, and GitHub falls back to `stonecut/issue-<number>` when needed.
95
95
2.**Base branch / PR target** — suggests `main`.
96
96
97
97
Interactive prompts use `@clack/prompts`.
98
98
99
99
## PR Report
100
100
101
-
At the end of a run, Forge pushes the branch and creates a PR with a report:
101
+
At the end of a run, Stonecut pushes the branch and creates a PR with a report:
102
102
103
103
```markdown
104
-
## Forge Report
104
+
## Stonecut Report
105
105
106
106
**Runner:** claude
107
107
@@ -114,21 +114,21 @@ In GitHub mode, the PR title is the PRD issue title, with `PRD #<number>` as the
114
114
115
115
## Local Spec Structure
116
116
117
-
Local specs live in `.forge/` at the repo root:
117
+
Local specs live in `.stonecut/` at the repo root:
118
118
119
119
```
120
-
.forge/
120
+
.stonecut/
121
121
└── my-feature/
122
122
├── prd.md # The PRD (created by write-a-prd skill)
Whether `.forge/` is gitignored is the developer's decision per repo. Forge does not touch `.gitignore`.
131
+
Whether `.stonecut/` is gitignored is the developer's decision per repo. Stonecut does not touch `.gitignore`.
132
132
133
133
## GitHub Mode
134
134
@@ -148,7 +148,7 @@ Whether `.forge/` is gitignored is the developer's decision per repo. Forge does
148
148
## Project Structure
149
149
150
150
```
151
-
prd-forge/
151
+
stonecut/
152
152
├── package.json
153
153
├── tsconfig.json
154
154
├── src/
@@ -168,9 +168,9 @@ prd-forge/
168
168
│ ├── templates/
169
169
│ │ └── execute.md # prompt template
170
170
│ └── skills/
171
-
│ ├── forge-interview/
172
-
│ ├── forge-prd/
173
-
│ └── forge-issues/
171
+
│ ├── stonecut-interview/
172
+
│ ├── stonecut-prd/
173
+
│ └── stonecut-issues/
174
174
└── tests/
175
175
├── cli.test.ts
176
176
├── local.test.ts
@@ -190,24 +190,24 @@ Skills remain as Claude Code skills. They are not invoked by the CLI on day one
190
190
191
191
## Pipeline
192
192
193
-
Ideas can come from anywhere — a GitHub issue, a Jira ticket, a Slack thread, an MCP server, or just a conversation. Forge doesn't prescribe where ideas originate. The pipeline starts once you're ready to act on one:
193
+
Ideas can come from anywhere — a GitHub issue, a Jira ticket, a Slack thread, an MCP server, or just a conversation. Stonecut doesn't prescribe where ideas originate. The pipeline starts once you're ready to act on one:
194
194
195
-
1.**Interview** — Stress-test the idea via `/forge-interview`.
196
-
2.**PRD** — Write the spec via `/forge-prd`. Saves to a local file (`.forge/<name>/prd.md`) or a GitHub issue labeled `prd`.
197
-
3.**Issues** — Break the PRD into vertical slices via `/forge-issues`. Creates local markdown files or GitHub sub-issues.
198
-
4.**Execute** — `forge run` picks up the issues and implements them sequentially.
195
+
1.**Interview** — Stress-test the idea via `/stonecut-interview`.
196
+
2.**PRD** — Write the spec via `/stonecut-prd`. Saves to a local file (`.stonecut/<name>/prd.md`) or a GitHub issue labeled `prd`.
197
+
3.**Issues** — Break the PRD into vertical slices via `/stonecut-issues`. Creates local markdown files or GitHub sub-issues.
198
+
4.**Execute** — `stonecut run` picks up the issues and implements them sequentially.
199
199
200
200
### Suggested practice: managing your idea backlog with GitHub labels
201
201
202
202
For projects using GitHub issues, we recommend a label-driven flow to track ideas before they enter the pipeline:
203
203
204
204
1.**Capture** — Create a GitHub issue with the `roadmap` label. This is the idea backlog entry, regardless of where the idea originated.
205
-
2.**Interview** — Run `/forge-interview` on the idea. Discussion happens on the roadmap issue.
206
-
3.**PRD** — Run `/forge-prd`. The roadmap issue is closed with a comment linking forward to the new PRD issue. The PRD issue is created with the `prd` label and links back to the roadmap issue for history.
207
-
4.**Issues** — Run `/forge-issues`. Sub-issues are created and linked to the PRD issue.
208
-
5.**Execute** — `forge run --github <prd_number>` implements the sub-issues. Each is closed on completion.
209
-
6.**PR** — Forge pushes the branch and creates a PR. The PR body includes "Closes #prd_number", so the PRD issue is auto-closed when the PR merges.
205
+
2.**Interview** — Run `/stonecut-interview` on the idea. Discussion happens on the roadmap issue.
206
+
3.**PRD** — Run `/stonecut-prd`. The roadmap issue is closed with a comment linking forward to the new PRD issue. The PRD issue is created with the `prd` label and links back to the roadmap issue for history.
207
+
4.**Issues** — Run `/stonecut-issues`. Sub-issues are created and linked to the PRD issue.
208
+
5.**Execute** — `stonecut run --github <prd_number>` implements the sub-issues. Each is closed on completion.
209
+
6.**PR** — Stonecut pushes the branch and creates a PR. The PR body includes "Closes #prd_number", so the PRD issue is auto-closed when the PR merges.
210
210
211
211
This keeps each artifact (idea, spec, implementation tickets) as a separate issue with a clear purpose and traceable lineage.
212
212
213
-
See [GitHub issues labeled `roadmap`](https://github.com/elkinjosetm/prd-forge/labels/roadmap) for current ideas.
213
+
See [GitHub issues labeled `roadmap`](https://github.com/elkinjosetm/stonecut/labels/roadmap) for current ideas.
Forge has one execution command (`run`) with two sources (`--local` for local PRDs, `--github` for GitHub PRDs). All execution is headless — Forge runs the issues autonomously and creates a PR when done.
71
+
Stonecut has one execution command (`run`) with two sources (`--local` for local PRDs, `--github` for GitHub PRDs). All execution is headless — Stonecut runs the issues autonomously and creates a PR when done.
72
72
73
-
### `forge run --local` — Local PRDs
73
+
### `stonecut run --local` — Local PRDs
74
74
75
75
```sh
76
76
# Run 5 issues, then push and create a PR
77
-
forge run --local my-feature -i 5
77
+
stonecut run --local my-feature -i 5
78
78
79
79
# Run all remaining issues
80
-
forge run --local my-feature -i all
80
+
stonecut run --local my-feature -i all
81
81
```
82
82
83
-
### `forge run --github` — GitHub PRDs
83
+
### `stonecut run --github` — GitHub PRDs
84
84
85
85
```sh
86
86
# Run 5 sub-issues
87
-
forge run --github 42 -i 5
87
+
stonecut run --github 42 -i 5
88
88
89
89
# Run all remaining sub-issues
90
-
forge run --github 42 -i all
90
+
stonecut run --github 42 -i all
91
91
```
92
92
93
93
### Flags
@@ -100,26 +100,26 @@ forge run --github 42 -i all
100
100
101
101
### Pre-execution prompts
102
102
103
-
Before starting, Forge:
103
+
Before starting, Stonecut:
104
104
105
105
1. Checks for a clean working tree
106
-
2. Prompts for a branch name (suggests `forge/<slug>` — local uses the spec name, GitHub uses the PRD title slug, with `forge/issue-<number>` fallback)
106
+
2. Prompts for a branch name (suggests `stonecut/<slug>` — local uses the spec name, GitHub uses the PRD title slug, with `stonecut/issue-<number>` fallback)
107
107
3. Prompts for a base branch / PR target (suggests `main`)
108
108
4. Creates or checks out the branch
109
109
110
110
### After a run
111
111
112
-
Forge automatically pushes the branch, creates a PR, and includes a Forge Report listing each issue with its status (completed or failed with error reason). The report also shows which runner was used. Timing stats are printed per iteration and for the full session.
112
+
Stonecut automatically pushes the branch, creates a PR, and includes a Stonecut Report listing each issue with its status (completed or failed with error reason). The report also shows which runner was used. Timing stats are printed per iteration and for the full session.
113
113
In GitHub mode, the PR title defaults to the PRD issue title with a `PRD #<number>` fallback if the title is unavailable.
114
114
115
115
## Sources
116
116
117
-
### Local mode (`forge run --local <name>`)
117
+
### Local mode (`stonecut run --local <name>`)
118
118
119
-
Expects a local PRD directory at `.forge/<name>/` with this structure:
119
+
Expects a local PRD directory at `.stonecut/<name>/` with this structure:
120
120
121
121
```
122
-
.forge/my-feature/
122
+
.stonecut/my-feature/
123
123
├── prd.md # The full PRD
124
124
├── issues/
125
125
│ ├── 01-setup.md # Issue files, numbered for ordering
@@ -129,7 +129,7 @@ Expects a local PRD directory at `.forge/<name>/` with this structure:
### GitHub mode (`stonecut run --github <number>`)
133
133
134
134
Works with GitHub issues instead of local files:
135
135
@@ -143,20 +143,20 @@ Works with GitHub issues instead of local files:
143
143
The repo ships three Claude Code skills for steps 1–3 of the workflow. Install them with:
144
144
145
145
```sh
146
-
forge setup-skills
146
+
stonecut setup-skills
147
147
```
148
148
149
-
This creates symlinks in `~/.claude/skills/` pointing to the installed package. Once linked, they're available as `/forge-interview`, `/forge-prd`, and `/forge-issues` in any Claude Code session.
149
+
This creates symlinks in `~/.claude/skills/` pointing to the installed package. Once linked, they're available as `/stonecut-interview`, `/stonecut-prd`, and `/stonecut-issues` in any Claude Code session.
150
150
151
151
For non-default Claude Code installations, pass `--target` with the Claude root path:
0 commit comments