Add Ralph skill for autonomous PRD creation and implementation

This commit is contained in:
Echo
2026-02-09 08:56:16 +00:00
parent 59abff1bce
commit e82a786885
27 changed files with 2673 additions and 67 deletions

View File

@@ -0,0 +1,361 @@
---
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
```bash
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`:
```javascript
// 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
```bash
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.
```bash
mkdir -p .claude
```
**Template settings.json per stack:**
#### Next.js / TypeScript:
```json
{
"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:
```json
{
"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:
```json
{
"permissions": {
"allow": [
"Bash(uvicorn:*)",
"Bash(python -m pytest:*)",
"Bash(pytest:*)",
"Bash(ruff check:*)",
"Bash(ruff format:*)",
"Bash(mypy:*)",
"Bash(pip install:*)",
"Bash(alembic:*)"
]
}
}
```
#### Go:
```json
{
"permissions": {
"allow": [
"Bash(go run:*)",
"Bash(go build:*)",
"Bash(go test:*)",
"Bash(golangci-lint:*)",
"Bash(go mod:*)"
]
}
}
```
#### Generic (fără config detectat):
```json
{
"permissions": {
"allow": [
"Bash(npm run:*)",
"Bash(npm test)",
"Bash(npm start)"
]
}
}
```
**Verifică și merging:**
- Dacă `.claude/settings.json` există 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ă:
```json
{
"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 detectat
- `techStack.commands` - comenzile reale din proiect
- `techStack.port` - portul pentru dev server
- `requiresBrowserCheck` - 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ă:
1. Schema/Database changes (priority: 1-10)
2. Backend logic (priority: 11-20)
3. API endpoints (priority: 21-30)
4. UI components (priority: 31-40)
5. 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:**
```bash
# 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
```bash
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 info
- `scripts/ralph/progress.txt` - log inițializat
- `scripts/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
1. **NU începe implementarea** - acest skill doar convertește PRD-ul
2. **Detectează tech stack** - pentru comenzi și settings.json
3. **Validează mărimea stories** - sparge-le dacă sunt prea mari
4. **Prioritizează corect** - dependențele trebuie respectate
5. **Criterii verificabile** - nu vagi, ci specifice
6. **Inițializează `passes: false`** pentru toate stories
7. **Generează settings.json** - pentru allow-list permissions
8. **COPIAZĂ template-urile din plugin** - NU le genera manual, folosește `find` pentru a localiza plugin-ul și copiază `prompt.md` și `ralph.sh` din templates/

View File

@@ -0,0 +1,462 @@
---
description: Generează un Product Requirements Document (PRD) structurat pentru o funcționalitate nouă. Folosește acest skill când utilizatorul vrea să planifice și documenteze cerințele pentru un feature înainte de implementare.
---
# Skill: PRD Generator
Generează un Product Requirements Document (PRD) detaliat prin detecție automată a contextului și întrebări adaptive.
## Când să folosești acest skill
- Utilizatorul vrea să adauge o funcționalitate nouă
- Vrea să planifice înainte de a implementa
- Menționează "PRD", "requirements", "cerințe", "planifică feature"
## Workflow
### FAZA 1: Detecție Context Proiect
**Verifică existența fișierelor de config pentru a determina modul:**
```
package.json → Node.js/JavaScript ecosystem
pyproject.toml → Python
requirements.txt → Python (legacy)
go.mod → Go
Cargo.toml → Rust
pom.xml → Java (Maven)
build.gradle → Java (Gradle)
composer.json → PHP
Gemfile → Ruby
```
**DACĂ găsit config file:**
1. Citește fișierul de config pentru a extrage:
- Dependențe principale (framework-uri, librării)
- Scripturi disponibile (pentru package.json)
- Versiuni
2. Analizează structura directoarelor:
- `src/`, `app/`, `components/`, `pages/`, `api/`
- Identifică patterns: Next.js, React, Express, etc.
3. Raportează utilizatorului:
```
Am detectat un proiect existent:
- Stack: Next.js 14, TypeScript, Prisma, TailwindCSS
- Structură: App Router (app/), API routes (app/api/)
- Scripts: dev, build, lint, typecheck
```
4. Setează: **FEATURE_MODE**
**DACĂ NU găsit config file:**
1. Raportează: "Nu am detectat un proiect existent. Vom crea PRD pentru proiect nou."
2. Setează: **NEW_PROJECT_MODE**
---
### FAZA 2: Întrebări Adaptive cu AskUserQuestion
**IMPORTANT**: Folosește tool-ul `AskUserQuestion` pentru întrebări interactive, NU text simplu.
---
#### IF NEW_PROJECT_MODE:
**Întrebarea 1** (AskUserQuestion):
```json
{
"question": "Ce tip de proiect vrei să creezi?",
"header": "Tip proiect",
"options": [
{"label": "Web Application", "description": "Frontend + Backend, UI interactiv"},
{"label": "API / Backend", "description": "REST/GraphQL API, servicii backend"},
{"label": "CLI Tool", "description": "Command-line application"},
{"label": "Library / SDK", "description": "Cod reutilizabil pentru alți developeri"}
],
"multiSelect": false
}
```
**Întrebarea 2** (AskUserQuestion):
```json
{
"question": "Cine sunt utilizatorii țintă?",
"header": "Audiență",
"options": [
{"label": "End users", "description": "Clienți finali, public larg"},
{"label": "Developers", "description": "API/SDK consumers, tehnici"},
{"label": "Admin / Staff", "description": "Utilizatori interni, back-office"},
{"label": "Sistem automatizat", "description": "Integrări machine-to-machine"}
],
"multiSelect": false
}
```
**Întrebarea 3** (AskUserQuestion):
```json
{
"question": "Ce tech stack preferi?",
"header": "Stack",
"options": [
{"label": "Next.js + TypeScript (Recommended)", "description": "Full-stack React, App Router, API routes"},
{"label": "Node.js + Express", "description": "Backend flexibil, REST API"},
{"label": "Python + FastAPI", "description": "API modern, async, type hints"},
{"label": "Go", "description": "Performance, simplitate, concurrency"}
],
"multiSelect": false
}
```
**Întrebarea 4** (AskUserQuestion):
```json
{
"question": "Ce arhitectură de date preferi?",
"header": "Database",
"options": [
{"label": "PostgreSQL + Prisma (Recommended)", "description": "Relațional, ORM type-safe"},
{"label": "MongoDB", "description": "Document store, schema flexibilă"},
{"label": "SQLite", "description": "Simplitate, embedded, local-first"},
{"label": "Fără persistență", "description": "In-memory, stateless"}
],
"multiSelect": false
}
```
**Întrebarea 5** (AskUserQuestion):
```json
{
"question": "Cum va arăta interfața?",
"header": "UI/UX",
"options": [
{"label": "Dashboard / Admin Panel", "description": "Tabele, grafice, forms complexe"},
{"label": "Landing + App simplu", "description": "Marketing + funcționalitate core"},
{"label": "API only (no UI)", "description": "Doar backend, documentație API"},
{"label": "CLI interface", "description": "Terminal-based interaction"}
],
"multiSelect": false
}
```
**Întrebarea 6** (AskUserQuestion):
```json
{
"question": "Ce tip de autentificare e necesar?",
"header": "Auth",
"options": [
{"label": "Email + Password", "description": "Classic login, JWT sessions"},
{"label": "OAuth / Social login", "description": "Google, GitHub, etc."},
{"label": "API Keys", "description": "Pentru servicii și integrări"},
{"label": "Fără autentificare", "description": "Public access"}
],
"multiSelect": true
}
```
**Întrebarea 7** (AskUserQuestion):
```json
{
"question": "Ce integrări externe sunt necesare?",
"header": "Integrări",
"options": [
{"label": "Payment (Stripe)", "description": "Procesare plăți, subscriptions"},
{"label": "Email (Resend/SendGrid)", "description": "Trimitere emails tranzacționale"},
{"label": "Storage (S3/Cloudflare)", "description": "Upload fișiere, imagini"},
{"label": "Niciuna", "description": "Self-contained, fără dependențe externe"}
],
"multiSelect": true
}
```
**Întrebarea 8** (AskUserQuestion):
```json
{
"question": "Care e prioritatea acestui proiect?",
"header": "Prioritate",
"options": [
{"label": "MVP rapid", "description": "Funcționalitate minimă, lansare rapidă"},
{"label": "Produs complet", "description": "Feature-complete, production-ready"},
{"label": "Proof of concept", "description": "Validare idee, poate fi refăcut"},
{"label": "Learning project", "description": "Experimentare, nu contează calitatea"}
],
"multiSelect": false
}
```
**Întrebarea 9** (AskUserQuestion):
```json
{
"question": "Cum definim succesul? Ce criterii trebuie îndeplinite?",
"header": "Success",
"options": [
{"label": "Funcționalitate completă", "description": "Toate features funcționează conform spec"},
{"label": "Performance targets", "description": "Timp răspuns < X ms, throughput > Y"},
{"label": "User adoption", "description": "N utilizatori activi, engagement"},
{"label": "Code quality", "description": "Test coverage > 80%, no critical bugs"}
],
"multiSelect": true
}
```
**Întrebarea 10** (text liber - cere descriere):
```
Descrie pe scurt proiectul în 2-3 propoziții:
- Ce problemă rezolvă?
- Care e funcționalitatea principală?
```
**Întrebarea 11 - Web Research** (AskUserQuestion):
```json
{
"question": "Vrei să cercetez best practices și patterns pentru acest stack?",
"header": "Research",
"options": [
{"label": "Da, cercetează", "description": "WebSearch pentru patterns și recomandări"},
{"label": "Nu, continuă", "description": "Am experiență cu acest stack"}
],
"multiSelect": false
}
```
**DACĂ utilizatorul alege "Da, cercetează":**
- Folosește `WebSearch` pentru: "[stack] best practices 2026"
- Integrează findings în secțiunea "Considerații Tehnice" din PRD
---
#### IF FEATURE_MODE:
**Întrebarea 1** (text liber):
```
Descrie feature-ul pe care vrei să-l adaugi:
- Ce funcționalitate nouă?
- Care e scopul principal?
```
**Întrebarea 2** (AskUserQuestion):
```json
{
"question": "Ce tip de feature este acesta?",
"header": "Tip feature",
"options": [
{"label": "Funcționalitate nouă", "description": "Ceva ce nu există în app"},
{"label": "Îmbunătățire UX", "description": "Flow mai bun, mai intuitiv"},
{"label": "Performance", "description": "Optimizare viteză, eficiență"},
{"label": "Integrare externă", "description": "Conectare cu alt sistem/serviciu"}
],
"multiSelect": false
}
```
**Întrebarea 3** (AskUserQuestion):
```json
{
"question": "Implică modificări de UI?",
"header": "UI changes",
"options": [
{"label": "Da - componente noi", "description": "Pagini sau secțiuni noi"},
{"label": "Da - modificări existente", "description": "Update la UI existent"},
{"label": "Nu - doar backend", "description": "Logic, API, fără UI"}
],
"multiSelect": false
}
```
**Întrebarea 4** (AskUserQuestion):
```json
{
"question": "Necesită modificări în baza de date?",
"header": "DB changes",
"options": [
{"label": "Da - tabele noi", "description": "Noi entități de stocat"},
{"label": "Da - coloane noi", "description": "Câmpuri noi pe tabele existente"},
{"label": "Da - relații noi", "description": "Legături între tabele"},
{"label": "Nu", "description": "Schema rămâne neschimbată"}
],
"multiSelect": true
}
```
**Întrebarea 5** (AskUserQuestion):
```json
{
"question": "Sunt necesare integrări noi cu servicii externe?",
"header": "Integrări",
"options": [
{"label": "Da - API extern", "description": "Conectare la serviciu terț"},
{"label": "Da - Webhooks", "description": "Primire/trimitere events"},
{"label": "Nu", "description": "Self-contained în app"}
],
"multiSelect": true
}
```
**Întrebarea 6** (AskUserQuestion):
```json
{
"question": "Există considerații speciale de security?",
"header": "Security",
"options": [
{"label": "Autorizare/permisiuni", "description": "Cine poate accesa ce"},
{"label": "Date sensibile", "description": "PII, payment, credentials"},
{"label": "Rate limiting", "description": "Protecție abuse"},
{"label": "Nu, standard", "description": "Fără cerințe speciale"}
],
"multiSelect": true
}
```
**Întrebarea 7** (text liber):
```
Cum verificăm că feature-ul funcționează corect?
Descrie acceptance criteria (ce trebuie să se întâmple când e gata):
```
---
### FAZA 3: Generează PRD-ul
După răspunsuri, creează documentul în `/tasks/prd-[feature-name].md`:
```markdown
# PRD: [Feature Name]
## 1. Introducere
[Context și motivație pentru feature - 2-3 propoziții bazate pe răspunsuri]
## 2. Context Tehnic
[DOAR pentru FEATURE_MODE - include stack-ul detectat]
- **Stack**: [detectat din config]
- **Structură**: [detectat din directoare]
- **Comenzi disponibile**: [din package.json scripts]
## 3. Obiective
### Obiectiv Principal
- [Ce problemă rezolvă - din răspunsuri]
### Obiective Secundare
- [Beneficii adiționale]
### Metrici de Succes
- [Din răspunsul la întrebarea despre success criteria]
## 4. User Stories
### US-001: [Titlu Descriptiv]
**Ca** [tip utilizator - din răspunsuri]
**Vreau** [funcționalitate]
**Pentru că** [beneficiu]
**Acceptance Criteria:**
- [ ] Criteriu 1 specific și testabil
- [ ] Criteriu 2 specific și testabil
- [ ] {TYPECHECK_COMMAND} passes
- [ ] [Pentru UI] Verificare vizuală cu browser: [comportament specific]
### US-002: [Titlu]
...
## 5. Cerințe Funcționale
1. [REQ-001] Sistemul trebuie să...
2. [REQ-002] Utilizatorul poate să...
3. [REQ-003] Când X se întâmplă, Y trebuie să...
## 6. Non-Goals (Ce NU facem)
- [Explicit ce nu e în scope pentru a evita scope creep]
- [Funcționalități similare care NU sunt incluse]
## 7. Considerații Tehnice
### Stack/Tehnologii
- [Din detecție sau răspunsuri]
### Patterns de Urmat
- [Patterns existente în codebase - din analiză]
### Dependențe
- [De ce depinde acest feature]
### Riscuri Tehnice
- [Potențiale probleme]
### Best Practices
[Dacă s-a făcut WebSearch, include findings aici]
## 8. Considerații UI/UX
[Dacă UI changes != "Nu - doar backend"]
- Layout și flow
- Stări (loading, error, empty, success)
- Accesibilitate
## 9. Considerații Security
[Din răspunsul la întrebarea despre security]
## 10. Open Questions
- [ ] [Întrebări nerezolvate care necesită clarificare]
```
---
### FAZA 4: Validare și salvare
1. **Afișează preview** al PRD-ului generat
2. **Întreabă** utilizatorul:
- "PRD-ul acoperă tot ce ai în minte?"
- "Vrei să adaugi sau să modifici ceva?"
- "Stories-urile sunt de mărime potrivită pentru implementare incrementală?"
3. **Salvează** în `/tasks/prd-[feature-name].md`
4. **Sugerează următorul pas**:
```
PRD salvat în tasks/prd-[feature-name].md
**Următorii pași:**
1. Revizuiește PRD-ul și adaugă detalii dacă e nevoie
2. Când ești gata, folosește `/ralph:convert` pentru a converti în prd.json
3. Apoi rulează `./scripts/ralph/ralph.sh` pentru implementare autonomă
```
---
## Reguli pentru User Stories bune
### Mărime potrivită (1 context window):
- Adaugă un câmp în DB + migration
- Creează un component React simplu
- Implementează un endpoint API
- Scrie unit tests pentru o funcție
### Prea mare (trebuie spart):
- "Implementează autentificarea" → sparge în: login form, register form, JWT middleware, session management
- "Creează dashboard" → sparge în: layout, charts component, data fetching, filtering
### Ordine dependențe:
1. Database/Schema (nu depind de nimic)
2. Backend logic (depind de schema)
3. API endpoints (depind de backend)
4. UI components (depind de API)
5. Integration (depind de toate)
### Acceptance Criteria:
- Specifice: "Butonul Submit trimite form data la POST /api/users"
- NU vagi: "Funcționează corect"
- Verificabile: "După submit, redirect la /dashboard"
- NU subiective: "UX plăcut"
- Include ÎNTOTDEAUNA comanda de typecheck din proiect
- Pentru UI: "Verificare vizuală cu browser că [behavior]"
---
## Output așteptat
- Fișier `/tasks/prd-[feature-name].md` cu documentație completă
- User stories clare, atomice, cu acceptance criteria verificabile
- Non-goals explicit definite
- Context tehnic detectat (pentru FEATURE_MODE)
## Important
1. **NU începe implementarea** - acest skill doar generează documentație
2. **Folosește AskUserQuestion** pentru întrebări interactive
3. **Detectează contextul** înainte de a pune întrebări
4. **Stories atomice** - fiecare trebuie să fie independent completabil
5. **Acceptance criteria verificabile** - nu vagi
6. **Kebab-case** pentru nume fișiere