Resume a paused flame-harness run based on pause_reason (rate_limit waits; manual_action confirms with user; error reports).
Scanned 8/31/2026
Install to Claude Code
npx -y skills add tjdrhs90/flutter-flame-harness --skill flame-harness-resume --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Flame Harness Resume?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/tjdrhs90-flame-harness-resume)More formats (shields.io, HTML) on the badges page.
---
name: flame-harness-resume
description: Resume a paused flame-harness run based on pause_reason (rate_limit waits; manual_action confirms with user; error reports).
argument-hint: ""
allowed-tools: [Read, Write, Edit, Bash, AskUserQuestion, Skill]
---
# flame-harness-resume
Resume handler for the flutter-flame-harness pipeline. Reads `state.md`, branches on
`pause_reason`, and re-dispatches the next phase skill when ready to continue.
All file schemas (`state.md`, `pipeline-log.md`) and state transition rules (including the
requirement that `pause_reason` is cleared to `""` when `status` is restored to `running`) are
defined in `docs/harness-protocol.md` — refer to §2 (state.md schema) and §7 (state transition
rules) as the single source of truth. Do not redefine schemas here.
---
## Input
Read `docs/harness/state.md` per the schema in `docs/harness-protocol.md` §2. If `state.md`
does not exist, abort with:
```
flame-harness-resume: nothing to resume — docs/harness/state.md not found.
Run /flame-harness <idea> to start a new pipeline.
```
Extract:
- `status` — expected `paused`; if `running` or `completed`, print a note and exit (nothing to resume).
- `pause_reason` — `rate_limit` | `manual_action` | `error`
- `next_role` — role to dispatch after resuming
- `resume_attempts` — integer; will be incremented on successful resume
- `current_phase`, `updated_at` — for logging
If `status` is `running`:
```
flame-harness-resume: pipeline is already running (status: running, next_role: <next_role>).
No resume needed.
```
If `status` is `completed`:
```
flame-harness-resume: pipeline is already completed. Nothing to resume.
```
---
## Branch on pause_reason
### rate_limit
`pause_reason: rate_limit` means the pipeline hit an API rate limit and paused automatically.
**Procedure:**
1. Print:
```
Pipeline paused due to rate limit (rate_limit).
Checking whether the rate-limit window has passed...
```
2. Read `updated_at` from `state.md`. Calculate elapsed time since that timestamp using Bash
(`date` command). If elapsed time is less than 60 seconds, print a warning:
```
Warning: only <N> seconds have elapsed since the pause. The rate-limit window may not
have passed yet. Proceeding anyway — if another rate limit is hit, the pipeline will
pause again.
```
3. Proceed to **Resume execution** below.
### manual_action
`pause_reason: manual_action` means the pipeline requires a manual step from the user before
it can continue (e.g. **playing/approving the built game at the post-QA review gate**, completing
App Store / Play Console submission steps, uploading a keystore, or configuring a device). The
specific action is recorded in the `pause` event row of `pipeline-log.md`.
**Procedure:**
1. Read `docs/harness/pipeline-log.md` per `docs/harness-protocol.md` §6. Find the most recent
`pause` event row to extract the details string describing what manual action was needed.
If the log is unavailable, use a generic prompt.
2. Use **AskUserQuestion** to confirm the user has completed the required steps:
```
The pipeline was paused for a manual action.
Last recorded reason: <details from pipeline-log, or "see docs/harness/pipeline-log.md">
Have you completed the required steps? (yes / no / describe what's pending)
```
3. If the user answers `no` or describes pending work:
- Print a summary of what they said.
- Abort: do NOT resume. Exit with:
```
flame-harness-resume: manual action not yet complete. Run /flame-harness-resume again
when ready.
```
4. If the user answers `yes`:
- Proceed to **Resume execution** below.
### error
`pause_reason: error` means the pipeline encountered an unrecoverable error in a phase skill.
**Procedure:**
1. Read `docs/harness/pipeline-log.md` per `docs/harness-protocol.md` §6. Find the most recent
`error` event row to extract the error details.
2. Print a clear error report:
```
Pipeline paused due to an error.
Phase : <current_phase>
Next role : <next_role>
Error : <details from pipeline-log, or "see docs/harness/pipeline-log.md">
You must investigate and fix the error before resuming.
Common fixes:
- If it is a Flutter/Dart compile error, fix the code and run `flutter analyze`.
- If it is a missing file, create or restore it.
- If it is a credential error, check docs/harness/config.md and the credentials_dir.
```
3. Use **AskUserQuestion**:
```
Have you resolved the error and are ready to retry? (yes / no)
```
4. If the user answers `no`:
- Abort: do NOT resume. Exit with:
```
flame-harness-resume: error not yet resolved. Run /flame-harness-resume again when fixed.
```
5. If the user answers `yes`:
- Proceed to **Resume execution** below.
### Unknown pause_reason
If `pause_reason` is empty or an unrecognised value, print:
```
flame-harness-resume: unexpected pause_reason "<value>" in state.md.
Expected one of: rate_limit, manual_action, error.
Please inspect docs/harness/state.md manually and correct it before resuming.
```
Then abort without modifying any files.
---
## Resume execution
Reached only after the appropriate branch above confirms it is safe to continue.
Per `docs/harness-protocol.md` §7 rule 4: when `status` is set back to `running`,
`resume_attempts` must be incremented, and per §7 rule 8: `pause_reason` must be cleared
to `""` by this skill.
### 1. Update state.md
Use **Edit** to update `docs/harness/state.md` with the following field changes (leave all other
keys unchanged):
```yaml
status: running
pause_reason: ""
resume_attempts: <previous_value + 1>
updated_at: "<ISO-8601 UTC now>"
```
Both `status: running` and `pause_reason: ""` must be written in the same Edit call (atomic per
`docs/harness-protocol.md` §7 rule 1).
### 2. Append to pipeline-log.md
Append one row to `docs/harness/pipeline-log.md` per the schema in `docs/harness-protocol.md` §6:
```
| <ISO-8601 UTC now> | resume | <current_phase> | resume_attempts=<new_value>; was paused for <pause_reason> |
```
### 3. Dispatch next_role
Read `next_role` from the (now-updated) `state.md` and dispatch:
```
Skill("flame-harness-<next_role>")
```
Valid `next_role` values are listed in the transition table in
`docs/harness-protocol.md` §7. `admob` is a normal dispatchable role and is handled like any
other `next_role` — dispatch `Skill("flame-harness-admob")` without any special boundary check.
If `next_role` is `generator`, the generator resumes safely on its own: it reads `checkpoint` from
`state.md` (§2) and skips the sub-phases whose HARD GATE already passed, so resume needs no special
handling here — just dispatch it.
If `next_role` is empty or unknown, abort with:
```
flame-harness-resume: cannot dispatch — next_role is "<value>".
Inspect docs/harness/state.md and set a valid next_role before retrying.
```
---
## Error handling
- If `state.md` becomes unreadable mid-execution (e.g. concurrent write), abort immediately
and do not write partial state changes.
- Never dispatch `Skill(...)` before `state.md` has been successfully updated to
`status: running` with `pause_reason: ""`. Dispatch is the last step.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!