Skip to content
Deployment
Skill

/flame-harness

Orchestrator — bootstrap a Flutter/Flame game pipeline (idea→playable game) and dispatch each phase skill. Use when starting or continuing a flame-harness run.

From plugin
flutter-flame-harness
6014 skills1 hook
Install
$ npx -y skills add tjdrhs90/flutter-flame-harness --skill flame-harness --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

Context preview

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

Orchestrator — bootstrap a Flutter/Flame game pipeline (idea→playable game) and dispatch each phase skill. Use when starting or continuing a flame-harness run.

SKILL.md

flame-harness.SKILL.md
name: flame-harness
description: Orchestrator — bootstrap a Flutter/Flame game pipeline (idea→playable game) and dispatch each phase skill. Use when starting or continuing a flame-harness run.
argument-hint: "[game idea] [--strict] [--rounds N] [--skip-research] [--skip-admob] [--auto-idea] [--auto-deploy] [--resume]"
allowed-tools: [Agent, Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion, Skill]

flame-harness Orchestrator

This skill bootstraps and drives the full Flutter/Flame game pipeline from idea to playable game. All file schemas (`config.md`, `state.md`, `contract.md`, log tables) and the phase transition table are defined in `docs/harness-protocol.md` — refer to that document as the single source of truth. Do not redefine schemas here.

---

Argument Parsing

Parse the invocation arguments before doing anything else.

| Argument | Config key (in `config.md`) | Default | |---|---|---| | `[game idea]` | `app_idea` | optional — if omitted, research generates & recommends ideas from scratch | | `--strict` | `strict_mode: true` | `false` | | `--rounds N` | `max_rounds: N` | `3` | | `--skip-research` | `skip_research: true` | `false` | | `--skip-admob` | `skip_admob: true` | `false` | | `--auto-idea` | `auto_idea: true` | `false` | | `--auto-deploy` | `auto_deploy: true` | `false` | | `--resume` | (delegates to resume handler; see Resume section) | — |

**Guard:** if `--skip-research` is set AND no idea is given, abort immediately with: `flame-harness: --skip-research needs a game idea (nothing to build without research or an idea).`

Key-to-file mapping follows the `config.md` schema in `docs/harness-protocol.md` Section 1.

  • `--strict` → set `strict_mode: true` in `config.md`
  • `--rounds N` → set `max_rounds: N` in `config.md`
  • `--skip-research` → set `skip_research: true` in `config.md`. On first run `next_role` is still

`research` (NOT `plan`): the research skill honors `skip_research` by skipping market discovery and idea generation, but it still runs the App Store 4.3 clone-avoidance check on the provided idea and writes the research spec — so the clone check is never silently skipped.

  • `--skip-admob` → set `skip_admob: true` in `config.md`
  • `--auto-idea` → set `auto_idea: true` in `config.md`. The research skill then auto-scores its

generated concepts and selects the best WITHOUT asking the user. No effect with `--skip-research` (which already takes the idea verbatim — nothing to select).

  • `--auto-deploy` → set `auto_deploy: true` in `config.md`. Skips the post-QA human-review pause:

on QA PASS the pipeline continues straight to deploy (admob→build→screenshot→submit) without stopping for the user to play/approve the game. Default `false` — by default the harness PAUSES after QA so the user can check the built game before deploy. (`--auto-idea --auto-deploy` together = fully hands-off idea→deploy.)

  • `--resume` → skip bootstrap entirely, delegate straight to `flame-harness-resume` (see Resume)

---

Bootstrap (First Run)

Bootstrap runs only when `docs/harness/state.md` does not yet exist.

1. Create directory tree

docs/harness/
docs/harness/handoff/
docs/harness/feedback/
docs/harness/specs/
docs/harness/plans/

2. Write `docs/harness/config.md`

Determine `credentials_dir`: use the `--credentials-dir <path>` flag if given, else a `credentials/` directory beside the harness, else `~/AndroidStudioProjects/credentials`. **Never hard-code a company, developer name, contact, or signing identity into the schema or skills** — every such value is the *user's own* and must be sourced at runtime.

Look for `<credentials_dir>/store-metadata.md` and read the `developer`, `ios`, and `android` blocks from it. **If that file does not exist** (e.g. a new user who just installed the plugin), do NOT fall back to any placeholder/sample identity — instead **ask the user** for their own values (company, first/last name, support email, contact phone, privacy-policy URL, support/marketing URL, copyright; and — only when a deploy is intended — Apple `team_id`/`asc_key_id`/`asc_issuer_id`/key path and the Android keystore path/alias). Offer to save them to `<credentials_dir>/store-metadata.md` for reuse. The signing/store-credential answers may be deferred (left blank) until the build/submit phase if the user only wants to generate and play the game now. Then write `docs/harness/config.md` with the full schema from `docs/harness-protocol.md` Section 1.

Populate the game-specific keys from the parsed arguments:

  • `default_language` — the language the user is conversing in: detect it from the user's request/messages (Korean request → `ko`, English request → `en`). If there's no conversational signal yet (e.g. a bare `/flame-harness` with no idea), **fall back to the OS locale** — run `defaults read -g AppleLanguages 2>/dev/null || echo $LANG` and map the first locale (`ko*` → `ko`, otherwise `en`). Only default to `en` if even that is unavailable. The whole pipeline (PRD, copy, l10n primary) is authored in this language. Not fixed to `ko`.
  • `app_idea` — from the positional argument; if no positional argument was given, write `app_idea: ""` (blank is valid — research will generate and recommend concepts). Do NOT abort on an empty idea.
  • `app_name` — derive a short display name from the idea (ask the user if ambiguous); if NO idea was given, write `app_name: ""` — the plan phase sets the name after research confirms the concept.
  • `app_slug` — kebab-case of `app_name`; write `app_slug: ""` if `app_name` is blank.
  • `bundle_id` — `com.<company>.<id>` where `<id>` is `app_slug` with hyphens/underscores removed (bundle-id segments must be `[a-z0-9]+`; hyphens/underscores break signing). Blank if `app_slug` is blank.
  • `strict_mode`, `max_rounds`, `skip_research`, `skip_admob`, `auto_idea`, `auto_deploy` — from flags (defaults per table above)
  • `developer`, `ios`, `android` — from `credentials/store-metadata.md`
  • `credentials_dir` — `<projects
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.