Skip to content
Deployment
Skill

/flame-harness-plan

Phase 2 — write the game PRD in the project's default_language (core loop, mechanics, content metrics, win/lose, scope guard), map the lib/ structure, and assign app name, slug, and bundle id.

From plugin
flutter-flame-harness
6014 skills1 hook
Install
$ npx -y skills add tjdrhs90/flutter-flame-harness --skill flame-harness-plan --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/flame-harness-plan

Context preview

The summary Claude sees to decide when to auto-load this skill.

Phase 2 — write the game PRD in the project's default_language (core loop, mechanics, content metrics, win/lose, scope guard), map the lib/ structure, and assign app name, slug, and bundle id.

SKILL.md

flame-harness-plan.SKILL.md
name: flame-harness-plan
description: Phase 2 — write the game PRD in the project's default_language (core loop, mechanics, content metrics, win/lose, scope guard), map the lib/ structure, and assign app name, slug, and bundle id.
argument-hint: ""
allowed-tools: [Agent, Read, Write, Edit, Bash]

flame-harness-plan

Phase 2 of the flutter-flame-harness pipeline. Reads the research spec and `config.md`, then produces a comprehensive game PRD in the project's `default_language`, maps the `lib/` directory structure, assigns the app identity (`app_name`, `app_slug`, `bundle_id`), and advances the pipeline state to `design`.

All file schemas (`config.md`, `state.md`, `pipeline-log.md`) are defined in `docs/harness-protocol.md` — refer to that document as the single source of truth. Do not redefine schemas here.

---

Input

1. Read `docs/harness/config.md`

Extract:

| Key | Use | |---|---| | `app_idea` | Refined concept tagline written by the research phase | | `app_name` | Display name (may be blank — set it here if so) | | `app_slug` | Kebab-case identifier (may be blank — derive it here if so) | | `bundle_id` | App bundle ID (may be blank — set it here) | | `default_language` | The user's conversation language (set by the orchestrator); the PRD and all copy are written in it |

If `config.md` does not exist, abort with: `flame-harness-plan: docs/harness/config.md not found — run the orchestrator to bootstrap first.`

2. Read the latest research spec

Find the most recent file matching `docs/harness/specs/*-research.md` (sort by filename descending, take the first). If no spec file exists, abort with: `flame-harness-plan: no research spec found in docs/harness/specs/ — run flame-harness-research first.`

Extract from the spec:

  • **Chosen concept** — title, tagline, core mechanic, differentiator
  • **Monetisation hook** — AdMob integration point (interstitial / rewarded / banner)
  • **Clone-avoidance verdict** — confirm it is SAFE before proceeding

---

Identity assignment

Derive and assign the app identity **before** writing the PRD so that the PRD can reference the final values.

app_name

Use the working title from the research spec as the display name. Capitalise each word. Example: `"space hop"` → `"Space Hop"`.

app_slug

The `app_slug` is a **kebab-case** identifier derived from `app_name`:

1. Lowercase the display name. 2. Replace all spaces and special characters with hyphens. 3. Strip leading/trailing hyphens and collapse consecutive hyphens to one. 4. Example: `"Space Hop!"` → `"space-hop"`.

The slug is used as the last segment of the bundle ID and as the directory name in CI/CD paths. Do not use underscores — kebab-case only.

bundle_id

The bundle id is part of the app's identity and is decided **here, up front** (the user sees it in the PRD). Format — reverse-DNS **`com.<company>.<appname>`**:

  • `<company>` = `developer.company` from `config.md` (no built-in default — it comes from the user's

own `credentials/store-metadata.md`, collected at bootstrap; never a hard-coded company name).

  • `<appname>` = `app_slug` with **all hyphens/underscores removed, lowercase** (each segment must be

`[a-z0-9]+`; hyphens/underscores/uppercase are INVALID and break iOS/Android signing).

So `bundle_id` = `com.<company>.<appname>`. Examples: `app_slug: space-hop` → **`com.<company>.spacehop`**; `app_slug: swing-line` → **`com.<company>.swingline`** (NOT `com.<company>.space-hop`). State the chosen `bundle_id` explicitly in the PRD identity section. It must be byte-identical on iOS and Android (`docs/harness-protocol.md` §1).

orientation

Decide the game's **single** locked orientation from the concept and record it in the PRD: `portrait` (default — most casual/one-hand games) or `landscape` (inherently wide play: side-scroll platformers, twin-stick, landscape racers). The game ships locked to this one orientation (the generator removes the other natively — no rotate-on-launch).

Write to `config.md`

Use `Edit` to update `config.md` with the identity keys + orientation:

app_name: "<display name>"
app_slug: "<kebab-case-slug>"
bundle_id: "com.<company>.<id>"   # <id> = app_slug with hyphens/underscores removed
orientation: portrait            # or "landscape"

Make targeted edits — do not rewrite the entire file.

---

PRD content

Write the PRD **entirely in `default_language`** (the language the user is conversing in). Headings and body in that language. The template below shows Korean headings as an example for a Korean project — translate the headings to `default_language` (e.g. English) when the project language is not Korean. The only exceptions are:

  • Code identifiers, file paths, class names, and technical terms that have no local equivalent.
  • Section headings may include the English technical term in parentheses after the localized heading.

Use the following structure verbatim. A fresh Claude must be able to fill every section from the research spec alone — no guessing required.

PRD 구조 (required sections)

# 게임 기획서 (PRD) — <app_name>

> **버전:** 1.0  
> **작성일:** <YYYY-MM-DD>  
> **작성자:** flame-harness-plan  
> **번들 ID:** com.<company>.<id> (slug에서 하이픈·언더스코어 제거)

---

## 1. 장르 및 컨셉 (Genre & Concept)

- **장르:** <e.g. 하이퍼캐주얼 러너 / 타워 디펜스 / 퍼즐>
- **한 줄 설명:** <tagline from research spec, translated to Korean>
- **핵심 차별점:** <differentiator from research spec, in Korean>
- **대상 연령:** <target age group>

---

## 2. 코어 루프 (Core Loop)

플레이어가 10–30초마다 반복하는 핵심 행동을 단계별로 기술한다.

1. <단계 1>
2. <단계 2>
3. <단계 3>
   ...

---

## 3. 게임 메카닉 (Game Mechanics)

### 3.1 조작 방법 (Controls)

| 플랫폼 | 조작 | 결과 |
|---|---|---|
| iOS/Android | <tap / swipe / hold> | <action> |

### 3.2 핵심 메카닉 (Core Mechanic)

<2-4 sentences describing the primary mechanic in Korean>

### 3.3 보조 메카닉 (Secondary Mechanics)

<Bullet list of 2-4 secondary mechanics>

---

## 4. 콘텐츠 지표 (Content Metrics)

| 항목 | 목표값 |
|---|---|
| 레벨 수 | <number> |
| 적 종류 수 | <
Read more
Ships withflutter-flame-harness

A Claude Code plugin that takes a Flutter/Flame game from raw idea all the way to the app stores.

Get the whole plugin

Other skills on flutter-flame-harness.