settings.json permissions must use uppercase tool names with command in parentheses per Claude Code docs (e.g., "Bash(npm run dev)" not "npm run dev"). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
9.8 KiB
description
| description |
|---|
| Convertește un PRD markdown în format prd.json pentru loop-ul autonom Ralph. Folosește acest skill când utilizatorul are un PRD generat și vrea să-l convertească pentru execuție autonomă cu Ralph. |
Skill: Ralph PRD Converter
Convertește un PRD markdown existent în format prd.json pentru sistemul Ralph de execuție autonomă.
Când să folosești acest skill
- Utilizatorul are deja un PRD markdown generat (în
/tasks/prd-*.md) - Vrea să pregătească task-urile pentru execuție autonomă cu Ralph
- Sau vrea să inițializeze structura Ralph într-un proiect
Workflow
Pas 1: Verifică PRD-ul existent
ls tasks/prd-*.md
Dacă nu există un PRD, sugerează să folosească skill-ul /ralph:prd mai întâi.
Pas 2: Citește PRD-ul și extrage user stories
Citește fișierul PRD și identifică:
- Numele proiectului
- User stories cu acceptance criteria
- Dependențe între stories
Pas 3: Detectează Tech Stack
Verifică fișierele de config pentru a determina stack-ul:
package.json → Node.js/JavaScript
pyproject.toml → Python
go.mod → Go
Cargo.toml → Rust
pom.xml → Java
Extrage comenzi din config:
Pentru package.json:
// Citește scripts section:
{
"scripts": {
"dev": "next dev", // → START_COMMAND
"build": "next build", // → BUILD_COMMAND
"lint": "eslint .", // → LINT_COMMAND
"typecheck": "tsc --noEmit" // → TYPECHECK_COMMAND
}
}
Mapare comenzi standard:
| Stack | Start | Build | Lint | Typecheck |
|---|---|---|---|---|
| Next.js | npm run dev | npm run build | npm run lint | npm run typecheck |
| Node/Express | npm start | npm run build | npm run lint | npm run typecheck |
| Python/FastAPI | uvicorn main:app --reload | - | ruff check . | mypy . |
| Go | go run . | go build | golangci-lint run | - |
| Rust | cargo run | cargo build | cargo clippy | - |
Pas 4: Creează structura Ralph
mkdir -p scripts/ralph/logs scripts/ralph/archive scripts/ralph/screenshots
Pas 5: Generează .claude/settings.json
IMPORTANT: Generează configurația pentru permissions allow-list bazat pe tech stack detectat.
mkdir -p .claude
Template settings.json per stack:
Next.js / TypeScript:
{
"permissions": {
"allow": [
"Bash(npm run dev)",
"Bash(npm run build)",
"Bash(npm run lint)",
"Bash(npm run typecheck)",
"Bash(npx prisma:*)",
"Bash(npm test)",
"Bash(npm run test:*)"
]
}
}
Node.js / Express:
{
"permissions": {
"allow": [
"Bash(npm start)",
"Bash(npm run dev)",
"Bash(npm run build)",
"Bash(npm run lint)",
"Bash(npm test)",
"Bash(npm run test:*)"
]
}
}
Python / FastAPI:
{
"permissions": {
"allow": [
"Bash(uvicorn:*)",
"Bash(python -m pytest:*)",
"Bash(pytest:*)",
"Bash(ruff check:*)",
"Bash(ruff format:*)",
"Bash(mypy:*)",
"Bash(pip install:*)",
"Bash(alembic:*)"
]
}
}
Go:
{
"permissions": {
"allow": [
"Bash(go run:*)",
"Bash(go build:*)",
"Bash(go test:*)",
"Bash(golangci-lint:*)",
"Bash(go mod:*)"
]
}
}
Generic (fără config detectat):
{
"permissions": {
"allow": [
"Bash(npm run:*)",
"Bash(npm test)",
"Bash(npm start)"
]
}
}
Verifică și merging:
- Dacă
.claude/settings.jsonexistă deja, citește-l și merge permissions - Nu suprascrie setări existente, doar adaugă cele lipsă
Pas 6: Generează prd.json
Convertește user stories în format JSON cu următoarea structură:
{
"projectName": "feature-name",
"branchName": "ralph/feature-name",
"description": "Descriere din PRD",
"techStack": {
"type": "nextjs",
"commands": {
"start": "npm run dev",
"build": "npm run build",
"lint": "npm run lint",
"typecheck": "npm run typecheck",
"test": "npm test"
},
"port": 3000
},
"userStories": [
{
"id": "US-001",
"title": "Titlu story",
"description": "As a [user], I want [feature] so that [benefit]",
"priority": 1,
"acceptanceCriteria": [
"Criteriu specific și verificabil",
"npm run typecheck passes"
],
"requiresBrowserCheck": true,
"passes": false,
"notes": ""
}
]
}
Câmpuri noi:
techStack- informații despre stack-ul detectattechStack.commands- comenzile reale din proiecttechStack.port- portul pentru dev serverrequiresBrowserCheck- true dacă story-ul are UI
Pas 7: Validează mărimea stories
CRITIC: Fiecare story trebuie să fie completabil într-un singur context window.
Story de mărime corectă:
- Adaugă un câmp în baza de date
- Creează un component UI simplu
- Adaugă un endpoint API
- Scrie tests pentru o funcție specifică
Story prea mare (trebuie spart):
- "Implementează autentificarea completă"
- "Creează dashboard-ul admin"
- "Adaugă sistem de notificări end-to-end"
Dacă găsești stories prea mari, sparge-le în sub-stories mai mici.
Pas 8: Setează prioritățile
Ordinea recomandată:
- Schema/Database changes (priority: 1-10)
- Backend logic (priority: 11-20)
- API endpoints (priority: 21-30)
- UI components (priority: 31-40)
- Integration/polish (priority: 41-50)
Stories care depind de altele trebuie să aibă prioritate mai mare (număr mai mare).
Pas 9: Verifică acceptance criteria
Fiecare story TREBUIE să aibă:
- Criterii specifice și verificabile (NU vagi ca "funcționează bine")
- Comanda reală de typecheck:
{TYPECHECK_COMMAND} passes - Pentru UI:
Verificare vizuală browser: [specific behavior]
Pas 10: Copiază template-urile Ralph din plugin
IMPORTANT: Copiază fișierele template direct din plugin pentru a asigura consistența.
Execută următoarele comenzi:
# Găsește locația plugin-ului Ralph
RALPH_PLUGIN=$(find /workspace -type f -name "ralph.sh" -path "*/plugins/ralph/templates/*" 2>/dev/null | head -1 | xargs dirname 2>/dev/null)
# Verifică că plugin-ul a fost găsit
if [ -z "$RALPH_PLUGIN" ]; then
echo "EROARE: Nu am găsit plugin-ul Ralph în /workspace"
echo "Asigură-te că claude-plugins este clonat în /workspace"
exit 1
fi
echo "Plugin Ralph găsit în: $RALPH_PLUGIN"
# Copiază template-urile
cp "$RALPH_PLUGIN/prompt.md" scripts/ralph/
cp "$RALPH_PLUGIN/ralph.sh" scripts/ralph/
chmod +x scripts/ralph/ralph.sh
echo "Template-uri copiate din plugin"
Dacă plugin-ul NU este găsit:
- Informează utilizatorul că trebuie să cloneze
claude-pluginsîn/workspace - Sau să specifice manual locația plugin-ului
NU genera fișierele manual - copiază-le întotdeauna din plugin pentru a păstra consistența și a beneficia de actualizări.
Pas 11: Inițializează progress.txt
echo "# Ralph Progress Log" > scripts/ralph/progress.txt
echo "Started: $(date)" >> scripts/ralph/progress.txt
echo "Project: [project-name]" >> scripts/ralph/progress.txt
echo "Stack: [detected-stack]" >> scripts/ralph/progress.txt
echo "---" >> scripts/ralph/progress.txt
Pas 12: Verificare finală
Verifică că toate fișierele sunt create:
scripts/ralph/
├── ralph.sh # Script principal
├── prompt.md # Instrucțiuni (cu comenzi reale)
├── prd.json # Task-uri și status
├── progress.txt # Log inițializat
├── logs/ # Director pentru logs
├── archive/ # Director pentru arhivare
└── screenshots/ # Director pentru verificări vizuale
.claude/
└── settings.json # Permissions allow-list
Pas 13: Instrucțiuni finale
După completare, informează utilizatorul:
PRD convertit în scripts/ralph/prd.json
Structură creată:
scripts/ralph/ - Fișiere Ralph
scripts/ralph/screenshots/ - Pentru verificări vizuale
.claude/settings.json - Permissions pentru comenzi
Tech stack detectat: {stack}
Comenzi configurate:
Start: {START_COMMAND}
Build: {BUILD_COMMAND}
Typecheck: {TYPECHECK_COMMAND}
Lint: {LINT_COMMAND}
Test: {TEST_COMMAND}
Pentru a rula Ralph:
cd [project-directory]
./scripts/ralph/ralph.sh [max_iterations]
Monitorizare:
cat scripts/ralph/prd.json | jq '.userStories[] | {id, title, passes}'
cat scripts/ralph/progress.txt
IMPORTANT:
- Ralph va folosi agent-browser pentru verificări vizuale UI
- Screenshots se salvează în scripts/ralph/screenshots/
- Asigură-te că ai agent-browser instalat: npm install -g agent-browser && agent-browser install
Output așteptat
scripts/ralph/prd.json- task-urile în format JSON cu tech stack infoscripts/ralph/progress.txt- log inițializatscripts/ralph/prompt.md- copiat din plugin (single source of truth)scripts/ralph/ralph.sh- copiat din plugin (single source of truth)scripts/ralph/screenshots/- director pentru verificări vizuale.claude/settings.json- permissions allow-list pentru tech stack- Structura de directoare completă
Reguli importante
- NU începe implementarea - acest skill doar convertește PRD-ul
- Detectează tech stack - pentru comenzi și settings.json
- Validează mărimea stories - sparge-le dacă sunt prea mari
- Prioritizează corect - dependențele trebuie respectate
- Criterii verificabile - nu vagi, ci specifice
- Inițializează
passes: falsepentru toate stories - Generează settings.json - pentru allow-list permissions
- COPIAZĂ template-urile din plugin - NU le genera manual, folosește
findpentru a localiza plugin-ul și copiazăprompt.mdșiralph.shdin templates/