agentic-loop 3.23.0 → 3.26.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/.claude/commands/color.md +74 -0
- package/.claude/commands/tab-rename.md +53 -0
- package/.claude/commands/tour.md +2 -2
- package/.claude/commands/vibe-help.md +1 -1
- package/.claude/commands/vibe-list.md +7 -7
- package/.claude/skills/color/SKILL.md +74 -0
- package/.claude/skills/prd/SKILL.md +97 -21
- package/.claude/skills/prd-check/SKILL.md +67 -10
- package/.claude/skills/tour/SKILL.md +2 -2
- package/.claude/skills/vibe-help/SKILL.md +1 -1
- package/.claude/skills/vibe-list/SKILL.md +8 -8
- package/README.md +40 -38
- package/package.json +1 -1
- package/ralph/hooks/install.sh +47 -63
- package/ralph/init.sh +6 -6
- package/ralph/loop.sh +127 -3
- package/ralph/prd-check.sh +5 -5
- package/ralph/prd.sh +1 -1
- package/ralph/setup/feature-tour.sh +1 -1
- package/ralph/setup/tutorial.sh +3 -3
- package/ralph/setup.sh +14 -6
- package/ralph/utils.sh +48 -0
- package/templates/examples/CLAUDE-fullstack.md +3 -3
- package/.claude/commands/idea.md +0 -216
- package/.claude/skills/idea/SKILL.md +0 -272
package/ralph/utils.sh
CHANGED
|
@@ -34,6 +34,7 @@ readonly BROWSER_PAGE_TIMEOUT_MS=30000
|
|
|
34
34
|
readonly CURL_TIMEOUT_SECONDS=10
|
|
35
35
|
readonly SIGN_EXTRACTION_TIMEOUT_SECONDS=30
|
|
36
36
|
readonly PREFLIGHT_CACHE_TTL_SECONDS=600
|
|
37
|
+
readonly UPDATE_CHECK_TTL_SECONDS=86400 # Check for updates once per day
|
|
37
38
|
|
|
38
39
|
# Common project directories (avoid duplication across files)
|
|
39
40
|
readonly FRONTEND_DIRS=("apps/web" "frontend" "client" "web")
|
|
@@ -49,6 +50,51 @@ YELLOW='\033[1;33m'
|
|
|
49
50
|
BLUE='\033[0;34m'
|
|
50
51
|
NC='\033[0m' # No Color
|
|
51
52
|
|
|
53
|
+
# Terminal background theming for Ralph
|
|
54
|
+
# Saves original background color and applies a teal tint to visually
|
|
55
|
+
# distinguish the Ralph terminal from Claude Code.
|
|
56
|
+
# Only works in macOS Terminal.app — no-op on Linux, iTerm2, VS Code, etc.
|
|
57
|
+
# Note: AppleScript targets "front window" (focused window) not the specific
|
|
58
|
+
# window running the script. In practice this works because the user just
|
|
59
|
+
# ran the command, but rapid window switching can cause a mismatch.
|
|
60
|
+
_ORIGINAL_TERMINAL_BG=""
|
|
61
|
+
|
|
62
|
+
set_terminal_bg() {
|
|
63
|
+
local hex="${1:-#1a2e2e}" # Default: subtle dark teal
|
|
64
|
+
|
|
65
|
+
# Only works in Terminal.app
|
|
66
|
+
[[ "$TERM_PROGRAM" != "Apple_Terminal" ]] && return 0
|
|
67
|
+
|
|
68
|
+
# Save current background color for restore
|
|
69
|
+
_ORIGINAL_TERMINAL_BG=$(osascript -e 'tell application "Terminal" to get background color of front window' 2>/dev/null) || return 0
|
|
70
|
+
|
|
71
|
+
# Parse hex to 16-bit RGB values (Terminal.app uses 0-65535 range)
|
|
72
|
+
local r=$((16#${hex:1:2} * 257))
|
|
73
|
+
local g=$((16#${hex:3:2} * 257))
|
|
74
|
+
local b=$((16#${hex:5:2} * 257))
|
|
75
|
+
|
|
76
|
+
osascript -e "tell application \"Terminal\" to set background color of front window to {$r, $g, $b}" 2>/dev/null || true
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
restore_terminal_bg() {
|
|
80
|
+
[[ -z "$_ORIGINAL_TERMINAL_BG" ]] && return 0
|
|
81
|
+
[[ "$TERM_PROGRAM" != "Apple_Terminal" ]] && return 0
|
|
82
|
+
|
|
83
|
+
osascript -e "tell application \"Terminal\" to set background color of front window to {$_ORIGINAL_TERMINAL_BG}" 2>/dev/null || true
|
|
84
|
+
_ORIGINAL_TERMINAL_BG=""
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
# Set terminal tab title (works in Terminal.app, iTerm2, and most xterm-compatible terminals)
|
|
88
|
+
set_tab_title() {
|
|
89
|
+
local title="$1"
|
|
90
|
+
printf '\033]0;%s\007' "$title"
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
# Restore tab title to default (empty = terminal decides)
|
|
94
|
+
restore_tab_title() {
|
|
95
|
+
printf '\033]0;\007'
|
|
96
|
+
}
|
|
97
|
+
|
|
52
98
|
# Get existing frontend directories in this project
|
|
53
99
|
get_frontend_dirs() {
|
|
54
100
|
local dirs=()
|
|
@@ -410,6 +456,8 @@ create_temp_file() {
|
|
|
410
456
|
|
|
411
457
|
# Clean up only tracked temp files on exit
|
|
412
458
|
cleanup() {
|
|
459
|
+
restore_tab_title
|
|
460
|
+
restore_terminal_bg
|
|
413
461
|
if [[ ${#RALPH_TEMP_FILES[@]} -gt 0 ]]; then
|
|
414
462
|
for f in "${RALPH_TEMP_FILES[@]}"; do
|
|
415
463
|
rm -f "$f" 2>/dev/null
|
|
@@ -249,9 +249,9 @@ make typecheck # Check TypeScript types
|
|
|
249
249
|
|
|
250
250
|
## Workflow
|
|
251
251
|
|
|
252
|
-
1. **
|
|
253
|
-
2. **
|
|
254
|
-
3. **
|
|
252
|
+
1. **PRD** - Run `/prd "feature description"` to generate stories
|
|
253
|
+
2. **Review** - Review generated stories in `.ralph/prd.json`
|
|
254
|
+
3. **Validate** - PRD validation checks story coherence
|
|
255
255
|
4. **Run** - Execute `ralph run` for autonomous coding
|
|
256
256
|
5. **Audit** - Run `/vibe-check` before shipping
|
|
257
257
|
6. **Commit** - Pre-commit hooks catch remaining issues
|
package/.claude/commands/idea.md
DELETED
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Brainstorm a feature idea, then generate PRDs for Ralph autonomous execution.
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# /idea - From Brainstorm to PRD
|
|
6
|
-
|
|
7
|
-
You are helping the user go from a rough idea to executable PRDs for Ralph.
|
|
8
|
-
|
|
9
|
-
**CRITICAL: This command does NOT write code. It produces documentation files only.**
|
|
10
|
-
|
|
11
|
-
## When to Use
|
|
12
|
-
|
|
13
|
-
| Workflow | Best For |
|
|
14
|
-
|----------|----------|
|
|
15
|
-
| **`/idea`** | Structured brainstorming with guided questions - Claude leads |
|
|
16
|
-
| **Plan mode → save to `docs/ideas/`** | Free-form exploration - you lead the thinking |
|
|
17
|
-
| **`/prd "description"`** | Quick PRD, no docs artifact needed |
|
|
18
|
-
|
|
19
|
-
**Both `/idea` and plan mode can produce `docs/ideas/*.md` files.** The difference is who drives the conversation:
|
|
20
|
-
- `/idea` asks you structured questions (scope, UX, edge cases, etc.)
|
|
21
|
-
- Plan mode lets you explore freely with Claude's help
|
|
22
|
-
|
|
23
|
-
Use `/idea` when you want the structured checklist. Use plan mode when you prefer to think through it your way.
|
|
24
|
-
|
|
25
|
-
## User Input
|
|
26
|
-
|
|
27
|
-
```text
|
|
28
|
-
$ARGUMENTS
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Workflow
|
|
32
|
-
|
|
33
|
-
### Step 1: Start Brainstorming
|
|
34
|
-
|
|
35
|
-
If `$ARGUMENTS` is empty, ask: "What feature or idea would you like to brainstorm?"
|
|
36
|
-
|
|
37
|
-
If `$ARGUMENTS` has content, acknowledge it and proceed.
|
|
38
|
-
|
|
39
|
-
Say: "Let's brainstorm this idea. I'll help you think it through, then we'll create documentation for Ralph to execute."
|
|
40
|
-
|
|
41
|
-
### Step 2: Explore and Ask Questions
|
|
42
|
-
|
|
43
|
-
Help the user flesh out the idea through conversation:
|
|
44
|
-
|
|
45
|
-
1. **Understand the goal** - What problem does this solve? Who benefits?
|
|
46
|
-
2. **Explore the codebase** - Use Glob/Grep/Read to understand what exists and what patterns to follow
|
|
47
|
-
3. **Ask clarifying questions** about:
|
|
48
|
-
|
|
49
|
-
**Scope & UX:**
|
|
50
|
-
- What's in scope vs out of scope?
|
|
51
|
-
- What does the user see/do? (ask for mockup if UI)
|
|
52
|
-
- What are the edge cases?
|
|
53
|
-
|
|
54
|
-
**Security (IMPORTANT - ask if feature involves):**
|
|
55
|
-
- Authentication: Who can access this? Login required?
|
|
56
|
-
- Passwords: How stored? (must be hashed, never plain text)
|
|
57
|
-
- User input: What validation needed? (SQL injection, XSS, command injection)
|
|
58
|
-
- Sensitive data: What should NEVER be in API responses?
|
|
59
|
-
- Rate limiting: Should this be rate limited? (login attempts, API calls)
|
|
60
|
-
|
|
61
|
-
**Scale (IMPORTANT - ask if feature involves lists/data):**
|
|
62
|
-
- How many items expected? (10s, 1000s, millions?)
|
|
63
|
-
- Pagination needed? What's the max per page?
|
|
64
|
-
- Caching needed? How fresh must data be?
|
|
65
|
-
- Database indexes: What will be queried/sorted frequently?
|
|
66
|
-
|
|
67
|
-
### Step 3: Summarize Before Writing
|
|
68
|
-
|
|
69
|
-
When you have enough information, summarize what you've learned:
|
|
70
|
-
|
|
71
|
-
Say: "Here's what I understand about the feature:
|
|
72
|
-
|
|
73
|
-
**Problem:** [summary]
|
|
74
|
-
**Solution:** [summary]
|
|
75
|
-
**Key decisions:** [list]
|
|
76
|
-
|
|
77
|
-
Ready to write this to `docs/ideas/{feature-name}.md`? Say **'yes'** or tell me what to adjust."
|
|
78
|
-
|
|
79
|
-
**STOP and wait for user confirmation before writing any files.**
|
|
80
|
-
|
|
81
|
-
### Step 4: Write the Idea File
|
|
82
|
-
|
|
83
|
-
Once the user confirms, write the idea file:
|
|
84
|
-
|
|
85
|
-
1. Create the directory if needed:
|
|
86
|
-
```bash
|
|
87
|
-
mkdir -p docs/ideas
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
2. Write to `docs/ideas/{feature-name}.md` with this structure:
|
|
91
|
-
```markdown
|
|
92
|
-
# {Feature Name}
|
|
93
|
-
|
|
94
|
-
## Problem
|
|
95
|
-
What problem does this solve?
|
|
96
|
-
|
|
97
|
-
## Solution
|
|
98
|
-
High-level description of the solution.
|
|
99
|
-
|
|
100
|
-
## User Stories
|
|
101
|
-
- As a [user], I want to [action] so that [benefit]
|
|
102
|
-
- ...
|
|
103
|
-
|
|
104
|
-
## Scope
|
|
105
|
-
### In Scope
|
|
106
|
-
- ...
|
|
107
|
-
|
|
108
|
-
### Out of Scope
|
|
109
|
-
- ...
|
|
110
|
-
|
|
111
|
-
## Architecture
|
|
112
|
-
### Directory Structure
|
|
113
|
-
- Where new files should go (be specific: `src/components/forms/`, not just `src/`)
|
|
114
|
-
|
|
115
|
-
### Patterns to Follow
|
|
116
|
-
- Existing components/utilities to reuse
|
|
117
|
-
- Naming conventions
|
|
118
|
-
|
|
119
|
-
### Do NOT Create
|
|
120
|
-
- List things that already exist (avoid duplication)
|
|
121
|
-
|
|
122
|
-
## Security Requirements
|
|
123
|
-
- **Authentication**: Who can access? Login required?
|
|
124
|
-
- **Password handling**: Must be hashed with bcrypt (cost 10+), never in responses
|
|
125
|
-
- **Input validation**: What must be validated/sanitized?
|
|
126
|
-
- **Rate limiting**: What should be rate limited?
|
|
127
|
-
- **Sensitive data**: What must NEVER appear in logs/responses?
|
|
128
|
-
|
|
129
|
-
## Scale Requirements
|
|
130
|
-
- **Expected volume**: How many users/items/requests?
|
|
131
|
-
- **Pagination**: Max items per page (recommend 100)
|
|
132
|
-
- **Caching**: What can be cached? For how long?
|
|
133
|
-
- **Database**: What indexes are needed?
|
|
134
|
-
|
|
135
|
-
## UI Mockup (if applicable)
|
|
136
|
-
```
|
|
137
|
-
┌─────────────────────────────────┐
|
|
138
|
-
│ [ASCII mockup of the UI] │
|
|
139
|
-
└─────────────────────────────────┘
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
## Open Questions
|
|
143
|
-
- Any unresolved decisions
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
3. Say: "I've written the idea to `docs/ideas/{feature-name}.md`.
|
|
147
|
-
|
|
148
|
-
Review it and let me know:
|
|
149
|
-
- **'approved'** - Ready to generate PRD
|
|
150
|
-
- **'edit [changes]'** - Tell me what to change"
|
|
151
|
-
|
|
152
|
-
**STOP and wait for user response. Do not proceed until they say 'approved' or 'done'.**
|
|
153
|
-
|
|
154
|
-
### Step 5: Generate PRD
|
|
155
|
-
|
|
156
|
-
**Only proceed here after user explicitly approves the idea file.**
|
|
157
|
-
|
|
158
|
-
Say: "Now I'll generate the PRD from your idea file."
|
|
159
|
-
|
|
160
|
-
**Use the Skill tool** to invoke `/prd` with the idea file path:
|
|
161
|
-
```
|
|
162
|
-
Skill: prd
|
|
163
|
-
Args: docs/ideas/{feature-name}.md
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
This hands off to `/prd` which handles:
|
|
167
|
-
- Reading the idea file
|
|
168
|
-
- Splitting into stories
|
|
169
|
-
- Writing `.ralph/prd.json`
|
|
170
|
-
- All PRD schema details (testing, testSteps, MCP tools, etc.)
|
|
171
|
-
|
|
172
|
-
**DO NOT duplicate the PRD schema or guidelines here - /prd is the single source of truth.**
|
|
173
|
-
|
|
174
|
-
---
|
|
175
|
-
|
|
176
|
-
## Error Handling
|
|
177
|
-
|
|
178
|
-
- If user provides no arguments, ask what they want to brainstorm
|
|
179
|
-
- If user abandons mid-flow, the idea file is still saved for later
|
|
180
|
-
- If /prd fails, check the idea file has enough detail
|
|
181
|
-
|
|
182
|
-
---
|
|
183
|
-
|
|
184
|
-
## Guidelines
|
|
185
|
-
|
|
186
|
-
### Idea File Quality
|
|
187
|
-
|
|
188
|
-
A good idea file has:
|
|
189
|
-
- **Clear problem statement** - What's broken or missing?
|
|
190
|
-
- **Specific solution** - Not vague ("improve UX") but concrete ("add inline validation")
|
|
191
|
-
- **Scope boundaries** - What's explicitly out of scope?
|
|
192
|
-
- **Architecture hints** - Where do files go? What patterns to follow?
|
|
193
|
-
|
|
194
|
-
### ASCII Art for UI
|
|
195
|
-
|
|
196
|
-
If the feature involves UI, include ASCII mockups in the idea file:
|
|
197
|
-
|
|
198
|
-
```
|
|
199
|
-
┌─────────────────────────────────────┐
|
|
200
|
-
│ Dashboard [⚙️] │
|
|
201
|
-
├─────────────────────────────────────┤
|
|
202
|
-
│ │
|
|
203
|
-
│ ┌─────────┐ ┌─────────┐ │
|
|
204
|
-
│ │ Card 1 │ │ Card 2 │ │
|
|
205
|
-
│ │ $1,234 │ │ 89% │ │
|
|
206
|
-
│ └─────────┘ └─────────┘ │
|
|
207
|
-
│ │
|
|
208
|
-
│ ┌─────────────────────────────┐ │
|
|
209
|
-
│ │ Recent Activity │ │
|
|
210
|
-
│ │ • Item 1 │ │
|
|
211
|
-
│ │ • Item 2 │ │
|
|
212
|
-
│ └─────────────────────────────┘ │
|
|
213
|
-
└─────────────────────────────────────┘
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
Ralph will read these from the idea file via `story.contextFiles`.
|
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Brainstorm a feature idea, then generate PRDs for Ralph autonomous execution.
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# /idea - From Brainstorm to PRD
|
|
6
|
-
|
|
7
|
-
You are helping the user go from a rough idea to executable PRDs for Ralph.
|
|
8
|
-
|
|
9
|
-
**CRITICAL: This command does NOT write code. It produces documentation files only.**
|
|
10
|
-
|
|
11
|
-
## When to Use
|
|
12
|
-
|
|
13
|
-
| Workflow | Best For |
|
|
14
|
-
|----------|----------|
|
|
15
|
-
| **`/idea`** | Structured brainstorming with guided questions - Claude leads |
|
|
16
|
-
| **Plan mode → save to `docs/ideas/`** | Free-form exploration - you lead the thinking |
|
|
17
|
-
| **`/prd "description"`** | Quick PRD, no docs artifact needed |
|
|
18
|
-
|
|
19
|
-
**Both `/idea` and plan mode can produce `docs/ideas/*.md` files.** The difference is who drives the conversation:
|
|
20
|
-
- `/idea` asks you structured questions (scope, UX, edge cases, etc.)
|
|
21
|
-
- Plan mode lets you explore freely with Claude's help
|
|
22
|
-
|
|
23
|
-
Use `/idea` when you want the structured checklist. Use plan mode when you prefer to think through it your way.
|
|
24
|
-
|
|
25
|
-
## User Input
|
|
26
|
-
|
|
27
|
-
```text
|
|
28
|
-
$ARGUMENTS
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Workflow
|
|
32
|
-
|
|
33
|
-
### Step 1: Start Brainstorming
|
|
34
|
-
|
|
35
|
-
If `$ARGUMENTS` is empty, ask: "What feature or idea would you like to brainstorm?"
|
|
36
|
-
|
|
37
|
-
If `$ARGUMENTS` has content, acknowledge it and proceed.
|
|
38
|
-
|
|
39
|
-
Say: "Let's brainstorm this idea. I'll help you think it through, then we'll create documentation for Ralph to execute."
|
|
40
|
-
|
|
41
|
-
### Step 2: Explore and Ask Questions
|
|
42
|
-
|
|
43
|
-
Help the user flesh out the idea through conversation:
|
|
44
|
-
|
|
45
|
-
1. **Understand the goal** - What problem does this solve? Who benefits?
|
|
46
|
-
2. **Explore the codebase** - Use Glob/Grep/Read to understand what exists and what patterns to follow
|
|
47
|
-
3. **Ask clarifying questions** about:
|
|
48
|
-
|
|
49
|
-
**Scope & UX:**
|
|
50
|
-
- What's in scope vs out of scope?
|
|
51
|
-
- What does the user see/do? (ask for mockup if UI)
|
|
52
|
-
- What are the edge cases?
|
|
53
|
-
|
|
54
|
-
**Security (IMPORTANT - ask if feature involves):**
|
|
55
|
-
- Authentication: Who can access this? Login required?
|
|
56
|
-
- Passwords: How stored? (must be hashed, never plain text)
|
|
57
|
-
- User input: What validation needed? (SQL injection, XSS, command injection)
|
|
58
|
-
- Sensitive data: What should NEVER be in API responses?
|
|
59
|
-
- Rate limiting: Should this be rate limited? (login attempts, API calls)
|
|
60
|
-
|
|
61
|
-
**Scale (IMPORTANT - ask if feature involves lists/data):**
|
|
62
|
-
- How many items expected? (10s, 1000s, millions?)
|
|
63
|
-
- Pagination needed? What's the max per page?
|
|
64
|
-
- Caching needed? How fresh must data be?
|
|
65
|
-
- Database indexes: What will be queried/sorted frequently?
|
|
66
|
-
|
|
67
|
-
**Migration/Refactoring (IMPORTANT - ask if moving or restructuring code):**
|
|
68
|
-
- Source paths: Where does the code currently live?
|
|
69
|
-
- Destination paths: Where should it end up? (be explicit, not vague)
|
|
70
|
-
- Phases: What's the logical order? (move files → update imports → verify)
|
|
71
|
-
- Verification: What commands prove each phase worked?
|
|
72
|
-
|
|
73
|
-
### Step 3: Summarize Before Writing
|
|
74
|
-
|
|
75
|
-
When you have enough information, summarize what you've learned:
|
|
76
|
-
|
|
77
|
-
Say: "Here's what I understand about the feature:
|
|
78
|
-
|
|
79
|
-
**Problem:** [summary]
|
|
80
|
-
**Solution:** [summary]
|
|
81
|
-
**Key decisions:** [list]
|
|
82
|
-
|
|
83
|
-
Ready to write this to `docs/ideas/{feature-name}.md`? Say **'yes'** or tell me what to adjust."
|
|
84
|
-
|
|
85
|
-
**STOP and wait for user confirmation before writing any files.**
|
|
86
|
-
|
|
87
|
-
### Step 4: Write the Idea File
|
|
88
|
-
|
|
89
|
-
Once the user confirms, write the idea file:
|
|
90
|
-
|
|
91
|
-
1. Create the directory if needed:
|
|
92
|
-
```bash
|
|
93
|
-
mkdir -p docs/ideas
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
2. Write to `docs/ideas/{feature-name}.md` with this structure:
|
|
97
|
-
```markdown
|
|
98
|
-
# {Feature Name}
|
|
99
|
-
|
|
100
|
-
## Problem
|
|
101
|
-
What problem does this solve?
|
|
102
|
-
|
|
103
|
-
## Solution
|
|
104
|
-
High-level description of the solution.
|
|
105
|
-
|
|
106
|
-
## User Stories
|
|
107
|
-
- As a [user], I want to [action] so that [benefit]
|
|
108
|
-
- ...
|
|
109
|
-
|
|
110
|
-
## Scope
|
|
111
|
-
### In Scope
|
|
112
|
-
- ...
|
|
113
|
-
|
|
114
|
-
### Out of Scope
|
|
115
|
-
- ...
|
|
116
|
-
|
|
117
|
-
## Architecture
|
|
118
|
-
### Directory Structure
|
|
119
|
-
- Where new files should go (be specific: `src/components/forms/`, not just `src/`)
|
|
120
|
-
|
|
121
|
-
### Patterns to Follow
|
|
122
|
-
- Existing components/utilities to reuse
|
|
123
|
-
- Naming conventions
|
|
124
|
-
|
|
125
|
-
### Do NOT Create
|
|
126
|
-
- List things that already exist (avoid duplication)
|
|
127
|
-
|
|
128
|
-
## Security Requirements
|
|
129
|
-
- **Authentication**: Who can access? Login required?
|
|
130
|
-
- **Password handling**: Must be hashed with bcrypt (cost 10+), never in responses
|
|
131
|
-
- **Input validation**: What must be validated/sanitized?
|
|
132
|
-
- **Rate limiting**: What should be rate limited?
|
|
133
|
-
- **Sensitive data**: What must NEVER appear in logs/responses?
|
|
134
|
-
|
|
135
|
-
## Scale Requirements
|
|
136
|
-
- **Expected volume**: How many users/items/requests?
|
|
137
|
-
- **Pagination**: Max items per page (recommend 100)
|
|
138
|
-
- **Caching**: What can be cached? For how long?
|
|
139
|
-
- **Database**: What indexes are needed?
|
|
140
|
-
|
|
141
|
-
## Migration Mapping (if moving/restructuring code)
|
|
142
|
-
For refactoring or migration tasks, explicitly map source to destination:
|
|
143
|
-
|
|
144
|
-
| Source | Destination |
|
|
145
|
-
|--------|-------------|
|
|
146
|
-
| `~/Sites/old-project/src/` | `apps/new-location/src/` |
|
|
147
|
-
| `~/Sites/old-project/tests/` | `apps/new-location/tests/` |
|
|
148
|
-
|
|
149
|
-
## Phases & Verification
|
|
150
|
-
Break complex work into phases with explicit verification commands:
|
|
151
|
-
|
|
152
|
-
### Phase 1: [Name]
|
|
153
|
-
**What:** Description of what this phase accomplishes
|
|
154
|
-
**Exit Criteria:**
|
|
155
|
-
```bash
|
|
156
|
-
# These commands must pass before phase is complete
|
|
157
|
-
test -d apps/new-location/src
|
|
158
|
-
cd apps/new-location && uv run pytest -x
|
|
159
|
-
cd apps/new-location && npm run build
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### Phase 2: [Name]
|
|
163
|
-
**What:** Description
|
|
164
|
-
**Exit Criteria:**
|
|
165
|
-
```bash
|
|
166
|
-
# Verification commands for phase 2
|
|
167
|
-
docker-compose config | grep -q 'service-name:'
|
|
168
|
-
curl -s http://localhost:8000/health | jq -e '.status == "ok"'
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
## UI Mockup (if applicable)
|
|
172
|
-
```
|
|
173
|
-
┌─────────────────────────────────┐
|
|
174
|
-
│ [ASCII mockup of the UI] │
|
|
175
|
-
└─────────────────────────────────┘
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
## Open Questions
|
|
179
|
-
- Any unresolved decisions
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
3. Say: "I've written the idea to `docs/ideas/{feature-name}.md`.
|
|
183
|
-
|
|
184
|
-
Review it and let me know:
|
|
185
|
-
- **'approved'** - Ready to generate PRD
|
|
186
|
-
- **'edit [changes]'** - Tell me what to change"
|
|
187
|
-
|
|
188
|
-
**STOP and wait for user response. Do not proceed until they say 'approved' or 'done'.**
|
|
189
|
-
|
|
190
|
-
### Step 5: Generate PRD
|
|
191
|
-
|
|
192
|
-
**Only proceed here after user explicitly approves the idea file.**
|
|
193
|
-
|
|
194
|
-
Say: "Now I'll generate the PRD from your idea file."
|
|
195
|
-
|
|
196
|
-
**Use the Skill tool** to invoke `/prd` with the idea file path:
|
|
197
|
-
```
|
|
198
|
-
Skill: prd
|
|
199
|
-
Args: docs/ideas/{feature-name}.md
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
This hands off to `/prd` which handles:
|
|
203
|
-
- Reading the idea file
|
|
204
|
-
- Splitting into stories
|
|
205
|
-
- Writing `.ralph/prd.json`
|
|
206
|
-
- All PRD schema details (testing, testSteps, MCP tools, etc.)
|
|
207
|
-
|
|
208
|
-
**DO NOT duplicate the PRD schema or guidelines here - /prd is the single source of truth.**
|
|
209
|
-
|
|
210
|
-
---
|
|
211
|
-
|
|
212
|
-
## Error Handling
|
|
213
|
-
|
|
214
|
-
- If user provides no arguments, ask what they want to brainstorm
|
|
215
|
-
- If user abandons mid-flow, the idea file is still saved for later
|
|
216
|
-
- If /prd fails, check the idea file has enough detail
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
|
-
## Guidelines
|
|
221
|
-
|
|
222
|
-
### Idea File Quality
|
|
223
|
-
|
|
224
|
-
A good idea file has:
|
|
225
|
-
- **Clear problem statement** - What's broken or missing?
|
|
226
|
-
- **Specific solution** - Not vague ("improve UX") but concrete ("add inline validation")
|
|
227
|
-
- **Scope boundaries** - What's explicitly out of scope?
|
|
228
|
-
- **Architecture hints** - Where do files go? What patterns to follow?
|
|
229
|
-
- **Verification commands** - How do we know it worked? (executable commands, not prose)
|
|
230
|
-
|
|
231
|
-
### Migration/Refactoring Ideas
|
|
232
|
-
|
|
233
|
-
For ideas that involve moving or restructuring code, MUST include:
|
|
234
|
-
|
|
235
|
-
1. **Explicit path mapping** - Source → Destination for every directory
|
|
236
|
-
```
|
|
237
|
-
❌ "Move GOPA to apps folder"
|
|
238
|
-
✅ "~/Sites/gopa/src/gopa/ → apps/gopa/src/gopa/"
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
2. **Phase-based verification** - Each phase has exit criteria with commands
|
|
242
|
-
```
|
|
243
|
-
❌ "Verify everything still works"
|
|
244
|
-
✅ "cd apps/gopa && uv run pytest -x && uv run python -c 'from gopa.server import mcp'"
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
3. **Order of operations** - What must happen before what?
|
|
248
|
-
- Move files → Update imports → Update configs → Verify
|
|
249
|
-
|
|
250
|
-
### ASCII Art for UI
|
|
251
|
-
|
|
252
|
-
If the feature involves UI, include ASCII mockups in the idea file:
|
|
253
|
-
|
|
254
|
-
```
|
|
255
|
-
┌─────────────────────────────────────┐
|
|
256
|
-
│ Dashboard [⚙️] │
|
|
257
|
-
├─────────────────────────────────────┤
|
|
258
|
-
│ │
|
|
259
|
-
│ ┌─────────┐ ┌─────────┐ │
|
|
260
|
-
│ │ Card 1 │ │ Card 2 │ │
|
|
261
|
-
│ │ $1,234 │ │ 89% │ │
|
|
262
|
-
│ └─────────┘ └─────────┘ │
|
|
263
|
-
│ │
|
|
264
|
-
│ ┌─────────────────────────────┐ │
|
|
265
|
-
│ │ Recent Activity │ │
|
|
266
|
-
│ │ • Item 1 │ │
|
|
267
|
-
│ │ • Item 2 │ │
|
|
268
|
-
│ └─────────────────────────────┘ │
|
|
269
|
-
└─────────────────────────────────────┘
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
Ralph will read these from the idea file via `story.contextFiles`.
|