| name | rn-harness |
| description | React Native app launch harness โ from market research to App Store & Google Play submission. One command takes you from idea to store review. |
| argument-hint | <app description> [--resume] [--status] [--rounds <N>] [--ref <url-or-image>] [--strict] [--with-spec] [--skip-research] [--skip-admob] |
| allowed-tools | ["Agent","Read","Write","Edit","Bash","Glob","Grep","WebFetch","WebSearch","AskUserQuestion","TaskCreate","TaskUpdate"] |
/rn-harness โ RN Launch Harness
React Native ๋ชจ๋ฐ์ผ ์ฑ์ ์์ด๋์ด๋ถํฐ ์คํ ์ด ์ถ์๊น์ง ์๋ํํ๋ ๋ฉ์ธ ์ค์ผ์คํธ๋ ์ดํฐ.
Arguments
"์ฑ ์ค๋ช
" โ ์ ํ์ดํ๋ผ์ธ ์์ (์์ด๋์ด๊ฐ ์์ ๋)
- (์ธ์ ์์) โ ์์ด๋์ด ๋ฐ๊ตด๋ถํฐ ์์ (์คํ ์ด ํ์ฐจํธ ์กฐ์ฌ โ 1์ธ๊ฐ๋ฐ ๊ฐ๋ฅํ ์ฑ ์ถ์ฒ)
--resume โ Resume paused pipeline
--status โ Check progress
--rounds <N> โ Max QA rounds per phase (default: 3)
--ref <url-or-image> โ Reference material (repeatable)
--skip-research โ Skip market research
--skip-admob โ Skip AdMob integration
--skip-acceptance โ Skip the Phase 7.5 human acceptance gate (unattended/CI โ logs a loud warning)
--strict โ Enable full 3-phase QA + Agent Team (costs more tokens)
--with-spec โ Enable Phase 2.5 spec planning with task checklists
Execution
Step 0: Argument Parsing
if --status โ Skill("rn-harness-status")
if --resume โ Skill("rn-harness-resume")
Save app description as $APP_IDEA.
Step 1: Bootstrap
Project structure: During Phase 5, the Expo project is created as a subdirectory named after the app (kebab-case). All harness artifacts (docs/harness/) live inside the Expo project so everything stays in one git repo.
Before Phase 5 (research/plan/design), docs/harness/ is created in the current working directory temporarily. When the Expo project is created in Phase 5, the Generator moves docs/harness/ into the project directory.
current-directory/ โ claude session here (history preserved)
โโโ .claude/ โ session history (stays here)
โโโ $APP_SLUG/ โ Expo project (created in Phase 5)
โโโ app/
โโโ src/
โโโ docs/harness/ โ pipeline artifacts (inside project)
โ โโโ specs/
โ โโโ plans/
โ โโโ handoff/
โ โโโ feedback/
โ โโโ references/
โ โโโ screenshots/
โ โโโ store-assets/
โ โโโ config.md
โ โโโ state.md
โ โโโ build-log.md
โ โโโ pipeline-log.md
โโโ scripts/
โ โโโ publish.js
โโโ credentials/
โโโ .env
โโโ .gitignore
โโโ ...
$APP_SLUG is derived from the app name in kebab-case (e.g., "๊ฐ๊ณ๋ถ ์ฑ" โ budget-book, "์ปคํผ ๊ตฌ๋
" โ coffee-tracker). Determined during Phase 2 (Plan) and stored in config.md as app_slug.
Phase 1~4: docs/harness/ is in the current directory (temporary).
Phase 5 (Generator): After create-expo-app, move docs/harness/ into the project:
mv docs/harness/ $APP_SLUG/docs/harness/
Phase 6+: All work happens inside $APP_SLUG/.
Step 2: Reference Capture
--ref๊ฐ ์์ผ๋ฉด:
- URL โ WebFetch๋ก ๋ด์ฉ ํ์ธ + ๋ฉ๋ชจ
- ์ด๋ฏธ์ง ํ์ผ โ
docs/harness/references/์ ๋ณต์ฌ
Step 3: ์ฌ์ฉ์ ์ ๋ณด ์์ง
AskUserQuestion์ผ๋ก ํ์ ์ ๋ณด ์์ง:
์ฑ ๊ฐ๋ฐ์ ์์ํ๊ธฐ ์ ์ ๋ช ๊ฐ์ง ์ ๋ณด๊ฐ ํ์ํฉ๋๋ค:
1. ํ์ฌ/๊ฐ๋ฐ์๋ช
(Bundle ID์ฉ, ์: gonigon)
โ com.{ํ์ฌ๋ช
}.{์ฑ์ด๋ฆ} ํํ๋ก iOS/Android ๋์ผํ๊ฒ ์ฌ์ฉ
2. ์ฑ ๊ธฐ๋ณธ ์ธ์ด: (๊ธฐ๋ณธ: ko โ ํ๊ตญ์ด)
3. ๊ฐ์ธ์ ๋ณด์ฒ๋ฆฌ๋ฐฉ์นจ URL:
4. ์ง์ ์ด๋ฉ์ผ:
5. ํํ์ด์ง URL: (Android ํํ์ด์ง + iOS ๋ง์ผํ
URL๋ก ์ฌ์ฉ)
6. ์ ์๊ถ ํ๊ธฐ: (์: Copyright 2026. ํ๊ธธ๋ all rights reserved.)
7. iOS ์ฌ์ฌ ์ฐ๋ฝ์ฒ:
- ์ด๋ฆ (First Name):
- ์ฑ (Last Name):
- ์ ํ๋ฒํธ: (๊ตญ๊ฐ์ฝ๋ ํฌํจ, ์: +821012345678)
8. AdMob ์ฌ์ฉ ์ฌ๋ถ: (yes/no)
์ด๋ฏธ ์ค์ ๋ ๊ฐ์ด ์์ผ๋ฉด ์๋ ค์ฃผ์ธ์.
Step 4: Config ์์ฑ
docs/harness/config.md ์์ฑ:
app_idea: "$APP_IDEA"
auto_resume: true
max_rounds: 3
strict_mode: false
with_spec: false
skip_research: false
skip_admob: false
skip_acceptance: false
has_references: false
default_language: ko
developer:
company_name: ""
email: ""
privacy_url: ""
homepage_url: ""
copyright: ""
ios_review:
first_name: ""
last_name: ""
phone: ""
bundle_id: ""
build:
method: eas
ios:
enabled: true
asc_api_key_id: ""
asc_issuer_id: ""
asc_private_key_path: ""
android:
enabled: true
service_account_json: ""
admob:
enabled: true
ios_app_id: ""
android_app_id: ""
ad_units: []
Step 5: State ์ด๊ธฐํ
docs/harness/state.md ์์ฑ:
status: running
current_phase: research
current_round: 0
next_role: rn-harness-research
created_at: YYYY-MM-DD HH:mm
updated_at: YYYY-MM-DD HH:mm
Step 6: Git Commit
git add docs/harness/
git commit -m "chore: bootstrap harness pipeline"
Step 7: Role Loop
Pipeline phase order depends on mode:
Default Mode (token-efficient, ~$30-60)
1. Research โ Skill("rn-harness-research") # Market research
2. Plan โ Skill("rn-harness-plan") # PRD
3. Design โ Skill("rn-harness-design") # Design system
4. Contract โ Skill("rn-harness-contract") # 1-pass: propose โ confirm โ done
5. Generator โ Skill("rn-harness-generator") # Build app (3 sub-phases)
6. Evaluator โ Skill("rn-harness-evaluator") # Functional QA only (Phase 6.1)
โณ FAIL โ Generator fix โ re-evaluate (max 3 rounds)
โณ PASS โ Next phase
7. AdMob โ Skill("rn-harness-admob") # Smart ad placement
7.5 Accept โ Skill("rn-harness-acceptance") # E2E smoke + human approval (PAUSE)
8. Build โ EAS: Skill("rn-harness-build") / EAS-free: Skill("rn-harness-build-local")
9. Screenshot โ Skill("rn-harness-screenshot") # Store screenshots
10. Submit โ Skill("rn-harness-submit") # App Store + Google Play
--strict Mode (thorough, ~$100-160)
1. Research โ Skill("rn-harness-research") # Market research
2. Plan โ Skill("rn-harness-plan") # PRD
2.5 Spec โ Skill("rn-harness-spec") # Task checklists (if --with-spec)
3. Design โ Skill("rn-harness-design") # Design system
4. Contract โ Skill("rn-harness-contract") # Multi-round negotiation
5. Generator โ Skill("rn-harness-generator") # Build app (3 sub-phases)
6. Evaluator โ 3-Phase Progressive QA:
6.1 Functional โ Does it WORK? (typecheck, lint, contract)
6.2 Quality โ Is it GOOD? (design 4-axis, states)
6.3 Edge Cases โ Can it SURVIVE? (6 Agent Team + simulator)
Each: FAIL โ Generator fix โ re-evaluate (max rounds per phase)
7. AdMob โ Skill("rn-harness-admob")
7.5 Accept โ Skill("rn-harness-acceptance") # E2E smoke + human approval (PAUSE)
8. Build โ EAS: Skill("rn-harness-build") / EAS-free: Skill("rn-harness-build-local")
9. Screenshot โ Skill("rn-harness-screenshot")
10. Submit โ Skill("rn-harness-submit")
11. Retro โ Skill("rn-harness-retro") # Pipeline retrospective
๊ฐ Phase ์คํ ํ:
state.md์ next_role ์
๋ฐ์ดํธ
pipeline-log.md์ ์ด๋ฒคํธ ๊ธฐ๋ก
build-log.md์ ๋ผ์ด๋ ๊ฒฐ๊ณผ ๊ธฐ๋ก
Role Loop ๊ท์น
Phase ์ ํ ์:
- Agent subprocess๋ก ์คํ (์ปจํ
์คํธ ๋ฆฌ์
)
- ์ด์ Phase ์ฐ์ถ๋ฌผ์ ํ์ผ๋ก ํธ๋์คํ
GeneratorโEvaluator Loop:
Default mode:
- Evaluator runs Phase 6.1 (Functional) only
- FAIL โ Generator fixes โ re-evaluate
- Max
max_rounds (default 3) then force PASS
- Single-phase keeps costs low
Strict mode (--strict):
- Phase 6.1 (Functional) โ 6.2 (Quality) โ 6.3 (Edge Cases)
- Each phase has its own round limit
- Phase 6.3 launches 6 parallel Agent Team
max_rounds per QA phase โ force advance to next phase
Build Method ์ ํ (Phase 8 ์ง์
์):
AdMob(Phase 7) ์๋ฃ ํ Build๋ก ๋์ด๊ฐ๊ธฐ ์ ์ AskUserQuestion์ผ๋ก ๋น๋ ๋ฐฉ์์ ๊ฒฐ์ :
| ์ ํ์ง | ๋ผ์ฐํ
| ์กฐ๊ฑด |
|---|
| EAS Build (๊ธฐ๋ณธ) | rn-harness-build | EAS ๊ณ์ ์ ํ๋ก์ ํธ ์ฌ๋กฏ ์ฌ์ ์์ |
| EAS ์์ด ๋ก์ปฌ ๋น๋ | rn-harness-build-local | EAS ๋ฌด๋ฃ ํ๋ ๊ฝ ์ฐธ(3๊ฐ ์ ํ) / EAS ์ฌ์ฉ ์์น ์์ |
- ์ ํ ๊ฒฐ๊ณผ๋ฅผ
config.md์ build.method(eas | local)์ ๊ธฐ๋ก.
local์ด๋ฉด Submit ๋จ๊ณ์ iOS ๋ฐ์ด๋๋ฆฌ ์
๋ก๋๋ fastlane/Transporter ๊ฒฝ๋ก ์ฌ์ฉ (Android๋ ์๋ Google Play API๋ผ ๋์ผ).
PAUSE ์ฒ๋ฆฌ:
- ์๋ ์์
ํ์ ์ (AdMob, Android Play Console)
state.md status๋ฅผ paused๋ก ๋ณ๊ฒฝ
- AskUserQuestion์ผ๋ก ์ฌ์ฉ์์๊ฒ ์๋ด
- ์ฌ์ฉ์ ํ์ธ ํ
status: running์ผ๋ก ๋ณ๊ฒฝํ๊ณ ๊ณ์
Pipeline Log Format
docs/harness/pipeline-log.md:
| Time | Event | Phase | Details |
|------|-------|-------|---------|
| 14:30 | DISPATCH | research | Agent subprocess started |
| 14:35 | COMPLETE | research | Spec generated |
| 14:36 | DISPATCH | plan | Agent subprocess started |
Build Log Format
docs/harness/build-log.md:
| Round | Phase | Score | Duration | Notes |
|-------|-------|-------|----------|-------|
| 1 | Build | - | 45m | Initial build |
| 1 | QA | 5/10 | 8m | 7 criteria failed |
| 2 | Build | - | 20m | Fix round |
| 2 | QA | 8/10 | 6m | PASS |
HARD GATES
- config.md ํ์: config ์์ผ๋ฉด ์งํ ๋ถ๊ฐ
- state.md ๋๊ธฐํ: ๋งค Phase ์ ํ ์ ๋ฐ๋์ ์
๋ฐ์ดํธ
- Git commit per phase: ๊ฐ Phase ์๋ฃ ์ ์ปค๋ฐ
- PAUSE ์กด์ค: ์๋ ์์
ํ์ ์ ๋ฐ๋์ ์ฌ์ฉ์ ํ์ธ ๋๊ธฐ
- ์ฌ์ฉ์ ์น์ธ ๊ฒ์ดํธ: Phase 7.5์์ ์ฌ์ฉ์๊ฐ ๋ช
์์ ์ผ๋ก ์น์ธํ๊ธฐ ์ ์๋ ๋น๋/์ ์ถ ์คํ ๊ธ์ง (
skip_acceptance: true๊ฐ ์๋ ํ)