Skip to content
Back to skills

Resume

ASecurity

Use when you need to resume an interrupted workflow from where it left off.

  • 8 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added May 28, 2026
ai-agentstypescriptfrontendbackend

Security analysis

A100/100

Scanned May 28, 2026

npx -y skills add seokan-jeong/team-shinchan --skill resume --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Resume?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Resume
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/seokan-jeong-resume/badge)](https://www.skillsdirectory.com/skills/seokan-jeong-resume)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: team-shinchan:resume
description: Use when you need to resume an interrupted workflow from where it left off.
user-invocable: true
---

# team-shinchan:resume

Resume a paused/interrupted workflow by loading saved state and delegating to the appropriate agent.

## Step 0: Input Validation

If DOC_ID not provided:

**Active/Paused workflows:**
Scan `.shinchan-docs/*/WORKFLOW_STATE.yaml` (exclude `archived/` subfolder), filter
`status: active|paused`, display list.

**Archived workflows:**
Scan `.shinchan-docs/archived/*/*/WORKFLOW_STATE.yaml`, collect all entries.

Display combined output:
```
Active/Paused:
  1. {DOC_ID} ({status}, {stage})
  ...

Archived:
  A1. {DOC_ID} (expired, {stage}, archived {YYYY-MM})
  ...
```

If both lists empty: suggest `/team-shinchan:start`.

**If user selects an archived entry:**
1. Move `.shinchan-docs/archived/{YYYY-MM}/{DOC_ID}/` → `.shinchan-docs/{DOC_ID}/`
2. In WORKFLOW_STATE.yaml: set `status: paused`
3. Add history event:
   ```yaml
   - timestamp: "{ISO now}"
     event: unarchived
     agent: shinnosuke
     unarchived_at: "{ISO now}"
   ```
4. Proceed to Step 1 with the unarchived DOC_ID

**If DOC_ID provided directly:**
- Check `.shinchan-docs/{DOC_ID}/` first, then `.shinchan-docs/archived/*/{DOC_ID}/`
- If found in archived: unarchive (steps 1-3 above) before proceeding
- Error if not found anywhere: list available workflows

## Step 1: Load Context

1. Read `.shinchan-docs/{DOC_ID}/WORKFLOW_STATE.yaml`
   - Not found: error with list of available DOC_IDs
   - `status: completed`: inform user, suggest `/team-shinchan:start`
   - `status: blocked`: show blocker reason
2. Extract: `current_stage`, `current_phase`, `current_owner`

## Step 1.5: Load Handoff State (Conditional)

Check if `.shinchan-docs/pre-compact-state.json` exists (using Read tool).

**If file exists and readable**:
Parse the JSON and prepend the following block to the context header output in Step 4:

```
[Handoff] Completed: {completed_phases} | Pending: {pending_phases}
Last Decision: {last_decision|none}
Blocking Issues: {blocking_issues|none}
```

- `completed_phases`: array → join with `,`; string → display as-is
- `last_decision`: null → display `none`
- `blocking_issues`: null → display `none`

**If file does not exist or Read fails**: skip silently. Proceed to Step 2 without error.

**If JSON parse fails** (malformed content): skip silently. Proceed to Step 2 without error.

## Step 1.6: Load JSONL Checkpoint (Conditional)

Check if `.shinchan-docs/{DOC_ID}/work-tracker.jsonl` exists (using Read tool). If not found, also check `.shinchan-docs/work-tracker.jsonl` as fallback.

**If file exists**:

Read the last 32KB of the file (tail approach — do NOT read the full file to avoid memory issues on large JSONL logs). Scan lines in reverse order (last line first) for the first entry matching:
- `"event": "phase_complete"` or `"event": "task_complete"`

If a matching entry is found, parse it and store as `{jsonl_checkpoint}`.

Prepend the following block to the Step 4 output header (before the separator line):

```
[Checkpoint] Last: {jsonl_checkpoint.event} | Phase: {jsonl_checkpoint.phase|N/A} | Task: {jsonl_checkpoint.task|N/A} | At: {jsonl_checkpoint.timestamp|unknown}
```

**If file does not exist**: skip silently. Proceed to Step 2 without error.

**If Read fails or no matching event found**: skip silently. Proceed to Step 2 without error.

**If JSON parse fails on a line**: skip that line, continue scanning backward.

## Step 1.7: Backfill Missing ak_gate Block (Conditional)

Check if `current.ak_gate` is present in the loaded WORKFLOW_STATE.yaml.

**Do NOT overwrite existing ak_gate values.** This step only fills in absent fields.

**If `ak_gate` is entirely absent**: write the following default block under `current`:

```yaml
ak_gate:
  requirements:
    status: pending
    retry_count: 0
    last_rejection_reasons: []
  planning:
    status: pending
    retry_count: 0
    last_rejection_reasons: []
```

**If `ak_gate` is present but missing sub-fields** (e.g., `requirements` exists but `planning` is absent, or vice versa): add only the missing sub-fields using the same defaults above. Do NOT modify any sub-fields that already exist.

**If `ak_gate` is fully present with both `requirements` and `planning`**: skip silently. No changes needed.

After any write, proceed to Step 2 without error.

## Step 2: Load Documents

- **Always**: Read `.shinchan-docs/{DOC_ID}/REQUESTS.md` (warn if missing)
- **If stage >= planning**: Read `.shinchan-docs/{DOC_ID}/PROGRESS.md`
- **If requirements stage** with `current.interview`: extract step/collected_count/last_question for Nene handoff

## Step 3: Update State

Add `resumed` event to history, set `status: active`.

## Step 4: Output Status

If handoff state was loaded in Step 1.5, prepend the `[Handoff]` block before the separator:

```
[Handoff] Completed: 1,2 | Pending: 3
Last Decision: Use regex-only parser for PROGRESS.md
Blocking Issues: none
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▶️ Workflow Resumed: {DOC_ID}
Stage: {current_stage} ({n}/4) | Phase: {current_phase|N/A} | Owner: {current_owner}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

If no handoff state (file absent or parse failed):

```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▶️ Workflow Resumed: {DOC_ID}
Stage: {current_stage} ({n}/4) | Phase: {current_phase|N/A} | Owner: {current_owner}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

## Step 5: Delegate to Agent

| Stage | Agent | Model | Context |
|-------|-------|-------|---------|
| requirements | Nene | Opus | REQUESTS.md + interview state |
| planning | Nene | Opus | REQUESTS.md + PROGRESS.md |
| execution | Bo/Specialist | Sonnet | REQUESTS.md + PROGRESS.md + phase tasks |
| completion | Bo + Action Kamen | Sonnet + Opus | All docs |

**Execution routing**: frontend -> Aichan, backend -> Bunta, infra -> Masao, default -> Bo.

```typescript
Task(subagent_type="team-shinchan:{agent}", model="{model}",
  prompt="Resume {DOC_ID}. Stage: {stage}, Phase: {phase}.\n{context}\nContinue from: {last_action}")
```

## Error Recovery

| Error | Recovery |
|-------|----------|
| Missing folder | List available workflows |
| Corrupted YAML | Default: execution, owner: bo, phase: 1 |
| Missing REQUESTS.md | Suggest `/team-shinchan:start` |

## Rules

- Always execute, always read WORKFLOW_STATE.yaml first
- Never skip state update, never invoke agent without context, never continue if completed

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.