Skip to content
Back to skills

Ending An Iteration

ASecurity

Use when concluding work on an open-ended goal to write iteration journal entry documenting work performed, decisions made, and state changes

  • 666 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added February 8, 2026
researchgobashtestinggitapici/cddocumentation

Works with

  • claude code
  • api

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill ending-an-iteration --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ending An Iteration?

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

Security grade badge for Ending An Iteration
[![Security: A β€” Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-ending-an-iteration/badge)](https://www.skillsdirectory.com/skills/majiayu000-ending-an-iteration)

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: ending-an-iteration
description: Use when concluding work on an open-ended goal to write iteration journal entry documenting work performed, decisions made, and state changes
---

# Ending an Iteration

## Overview

Conclude the current iteration by reviewing the conversation, documenting what happened, and preparing state for the next iteration.

**Core principle:** Comprehensive journaling enables continuity. Future iterations depend on accurate state capture.

## When to Use

Use this skill when:
- User runs `/end-iteration` command
- Agent suggests natural stopping point and user confirms
- Context limit approaching and good time to pause
- Subtask complete and ready to hand off to next iteration

**DO NOT use for:**
- Middle of active work (finish current subtask first)
- Before resolving critical blockers (unless blocked externally)

## Quick Reference

| Step | Action | Tool |
|------|--------|------|
| 1. Review conversation | Extract skills, decisions, artifacts | Manual review |
| 2. Identify stopping point | Why is this iteration ending? | User confirmation |
| 3. Complete journal entry | Update existing journal file | Read, Edit |
| 4. Update summary | If iteration 5, 10, 15, etc. | Task (journal-summarizer) |
| 5a. Git commit and tag | Commit journal to current branch | Bash |
| 5b. Announce completion | Confirm next steps | Direct output |

## Process

### Step 1: Review Conversation

Review the full conversation to extract key information:

**Skills & Workflows Used:**
- Scan conversation for `<invoke name="Skill">` tool calls
- Note which skills were used and for what purpose
- Generic detection - works with any plugin skills

Example findings:
```markdown
### Skills & Workflows Used
- `brainstorming`: Designed pricing tier alternatives
- `hypothesis-testing`: Validated annual billing preference
- `internet-researcher`: Found competitor pricing data
```

**Key Decisions Made:**
- Identify major choices: architecture, strategy, approach
- Note rationale: why was this chosen?
- Record alternatives considered

Example:
```markdown
### Key Decisions Made
- **Decision:** Implement usage-based pricing tier
  **Rationale:** Research showed power users want to scale gradually
  **Alternatives:** Flat enterprise tier (rejected: less flexible)
```

**Artifacts Created/Modified:**
- Files created or changed (use git status/diff if applicable)
- Git commits made during iteration
- Pull requests opened
- Documentation written

Example:
```markdown
### Artifacts Created/Modified
- `src/pricing/usage-tier.ts`: New usage-based pricing calculator
- `docs/pricing-strategy.md`: Documented pricing decision rationale
- Git commit: abc123f "Add usage-based pricing tier"
```

**External Context Gathered:**
- Web research findings
- User feedback received
- Documentation consulted
- Competitor analysis

Example:
```markdown
### External Context Gathered
- Research: Competitor X charges $0.10/unit, Competitor Y charges $0.15/unit
- User feedback: "Annual discount of 20% drives conversions"
- Documentation: Stripe API supports usage-based billing natively
```

**Reasoning & Strategy Changes:**
- Why certain approaches were chosen
- What alternatives were explored
- Where strategy pivoted and why

Example:
```markdown
### Reasoning & Strategy Changes
- Initially planned flat enterprise tier
- Research showed power users prefer scaling gradually
- Pivoted to usage-based model to reduce friction
- This aligns with SaaS best practices for 2026
```

**Blockers Encountered:**
- What's preventing progress?
- Dependencies on external factors
- Questions needing answers

Example:
```markdown
### Blockers Encountered
- Stripe webhook integration unclear: need to consult API docs
- Finance team needs to approve pricing before launch
- Usage tracking infrastructure not yet built (dependency)
```

**Open Questions:**
- What needs to be resolved next?
- Decisions deferred to future iterations
- Unknowns requiring investigation

Example:
```markdown
### Open Questions
- Should we offer annual discount on usage-based tier?
- What's the right per-unit price point?
- Do we need a minimum monthly commit?
```

### Step 2: Identify Stopping Point

Determine why this iteration is ending:

**Ask user to confirm:**
```
"Suggested stopping point: [reason]. Should we end this iteration?"

Reasons:
- Subtask complete: [what was finished]
- Blocked on: [external dependency]
- Context approaching limit
- Natural break point: [why this makes sense]
```

**User confirms** β†’ Proceed to write journal

**User wants to continue** β†’ Return to work, don't end iteration yet

### Step 3: Complete Journal Entry

The journal file was created by starting-an-iteration. Now complete it:

1. **Find current journal file:**
   ```bash
   # Use Glob to find iteration files
   pattern: "autonomy/*/iteration-*.md"
   ```

   Sort by iteration number and identify the most recent (should be today's date).

2. **Read existing journal:**
   ```bash
   # Use Read to load current content
   file: "autonomy/[goal-name]/iteration-NNNN-YYYY-MM-DD.md"
   ```

   Journal will have:
   - Beginning State (from starting-an-iteration)
   - Iteration Intention (from starting-an-iteration)
   - Work Performed (may be filled by checkpointing, or still empty)
   - Ending State (empty - we'll fill this)
   - Iteration Metadata (empty - we'll fill this)

3. **Update Work Performed section:**

   Using findings from Step 1, update the Work Performed subsections.

   **If Work Performed is empty:**
   Replace entire section with Step 1 findings.

   **If Work Performed has content (from checkpointing):**
   Merge Step 1 findings with existing:
   - Add any new skills/workflows used since checkpoint
   - Add any new decisions made since checkpoint
   - Add new artifacts created since checkpoint
   - Append new context gathered since checkpoint
   - Note any additional blockers or questions
   - Preserve all existing checkpoint content

4. **Fill Ending State section:**
   ```markdown
   ## Ending State
   [What is the state NOW at iteration end?]
   - Progress made during this iteration
   - What's complete vs. what remains
   - Updated metrics (if applicable)
   - How well did we achieve the iteration intention?
   - Recommended next steps for iteration N+1
   ```

5. **Fill Iteration Metadata section:**
   ```markdown
   ## Iteration Metadata
   - Context usage: [Note if approaching limits, if compaction occurred]
   - Checkpoints: [How many times was checkpoint-iteration used?]
   - Suggested next action: [What should iteration N+1 work on?]
   ```

6. **Update file using Edit tool:**
   - Replace Work Performed section (merge with existing)
   - Replace Ending State section (fill in)
   - Replace Iteration Metadata section (fill in)
   - Preserve Beginning State and Iteration Intention sections

### Step 4: Update Summary (if needed)

Check if summary update is needed:

**Update summary every 5 iterations:** 5, 10, 15, 20, etc.

```
If current iteration number % 5 == 0:
   Dispatch journal-summarizer agent to update summary.md
```

**Dispatch journal-summarizer:**
```
Task tool with subagent_type: "autonomy:journal-summarizer"
Prompt: "Update summary.md for goal '[goal-name]' to include iterations 1-[N].
        Previous summary covered iterations 1-[N-5].
        Add new learnings, update metrics, note new blockers."
Model: haiku
```

**Wait for agent** to update summary.md

### Step 5a: Git Commit and Tag

After journal is complete and summary is updated (if needed), commit to git:

1. **Extract iteration metadata:**
   - Goal name from journal path: `autonomy/[goal-name]/`
   - Iteration number from filename: `iteration-NNNN-YYYY-MM-DD.md`
   - Extract 2-3 line summary from Ending State section

2. **Determine iteration status:**

   Analyze Ending State section to determine status:
   - Look for explicit status indicators: "This is a dead end", "Approach invalidated", "Successfully completed", "Blocked by", etc.
   - **active** (default) - Normal progression, work continuing
   - **blocked** - Contains phrases like "blocked by", "waiting on", "cannot proceed until"
   - **concluded** - Contains phrases like "successfully completed", "goal achieved", "experiment succeeded"
   - **dead-end** - Contains phrases like "dead end", "not working", "abandoning approach", "invalidated"

3. **Extract quantitative metrics:**

   Parse Ending State for metrics with numbers:
   - Look for patterns like "MRR: $62k (+12%)", "Build time: 3.2min (-40%)", "Churn: 8% (from 13%)"
   - Collect all quantitative progress indicators
   - Format as single line: `Metrics: [metric1], [metric2], ...` or "None" if no metrics

4. **Summarize journal content:**

   Create 4-6 sentence summary from Work Performed and Ending State:
   - What was accomplished this iteration
   - Key decisions made and rationale
   - Major learnings or discoveries
   - How this iteration moved toward the goal
   - Be substantive but concise - this is for git log readers

5. **Build enhanced commit message:**
   ```
   journal: [goal-name] iteration NNNN

   [2-3 line summary from Ending State - as before]

   ## Journal Summary

   [4-6 sentence summary from step 4 above - what happened, what was learned, what changed]

   ## Iteration Metadata

   Status: [active|blocked|concluded|dead-end]
   Metrics: [quantitative metrics from step 3, or "None"]
   Blockers: [summary from Blockers Encountered section, or "None"]
   Next: [next iteration intention from Iteration Metadata section]

   πŸ€– Generated with [Claude Code](https://claude.com/claude-code)

   Co-Authored-By: Claude <noreply@anthropic.com>
   ```

6. **Stage files:**
   ```bash
   # Always stage journal file
   git add autonomy/[goal-name]/iteration-NNNN-YYYY-MM-DD.md

   # If summary was updated this iteration (iteration % 5 == 0)
   git add autonomy/[goal-name]/summary.md
   ```

7. **Create commit:**
   ```bash
   # Use heredoc for multi-line message with enhanced format
   git commit -m "$(cat <<'EOF'
   journal: [goal-name] iteration NNNN

   [2-3 line summary from Ending State]

   ## Journal Summary

   [4-6 sentence summary of iteration]

   ## Iteration Metadata

   Status: [active|blocked|concluded|dead-end]
   Metrics: [metrics or "None"]
   Blockers: [blockers or "None"]
   Next: [next iteration intention]

   πŸ€– Generated with [Claude Code](https://claude.com/claude-code)

   Co-Authored-By: Claude <noreply@anthropic.com>
   EOF
   )"
   ```

8. **Create annotated tag with branch-aware naming:**
   ```bash
   # Get current branch name
   current_branch=$(git branch --show-current)

   # Extract strategy name from branch
   # For autonomy branches: "autonomy/experiment-a" β†’ "experiment-a"
   # For non-autonomy branches: use goal name as strategy
   if [[ "$current_branch" =~ ^autonomy/ ]]; then
     strategy_name=${current_branch#autonomy/}
   else
     # Use goal name from journal path
     strategy_name="[goal-name]"
   fi

   # Tag format: autonomy/<strategy-name>/iteration-NNNN (4 digits, zero-padded)
   git tag -a "autonomy/${strategy_name}/iteration-$(printf '%04d' NNNN)" \
     -m "journal: [goal-name] iteration NNNN"
   ```

9. **Handle errors gracefully:**
   - If git operations fail (not a repo, detached HEAD, permissions, etc.):
     - Capture error message
     - Continue to Step 5b anyway (journal is written, that's critical)
     - Report warning to user with manual commands

**Error reporting format:**
```markdown
⚠️ **Git Integration Warning:**
Failed to commit journal: [error message]

You can manually commit with:
  git add autonomy/[goal-name]/iteration-NNNN-YYYY-MM-DD.md
  git commit -m "journal: [goal-name] iteration NNNN ..."
  git tag -a "autonomy/[strategy-name]/iteration-NNNN" -m "journal: [goal-name] iteration NNNN"
```

**Success indicator:**
- If git operations succeed, note success for Step 5b announcement
- Tag `autonomy/[strategy-name]/iteration-NNNN` marks this iteration in git history

### Step 5b: Announce Completion

Report to user with git status:

**If git operations succeeded:**
```markdown
**Iteration [N] complete for goal: [goal-name]**

βœ“ Journal committed and tagged: `autonomy/[strategy-name]/iteration-NNNN`

Journal entry: `autonomy/[goal-name]/iteration-NNNN-YYYY-MM-DD.md`
Branch: [current-branch-name]
Status: [active|blocked|concluded|dead-end]

## Summary of This Iteration
- **Work completed:** [Brief summary]
- **Key decisions:** [Major choices made]
- **Blockers:** [What's preventing progress]
- **Next steps:** [Recommended for iteration N+1]

---

**Ready to resume in next conversation with `/start-iteration`**
```

**If git operations failed:**
```markdown
**Iteration [N] complete for goal: [goal-name]**

Journal entry written: `autonomy/[goal-name]/iteration-NNNN-YYYY-MM-DD.md`

⚠️ **Git Integration Warning:**
Failed to commit journal: [error message]

You can manually commit with:
  git add autonomy/[goal-name]/iteration-NNNN-YYYY-MM-DD.md
  git commit -m "journal: [goal-name] iteration NNNN ..."
  git tag -a "autonomy/[strategy-name]/iteration-NNNN" -m "journal: [goal-name] iteration NNNN"

## Summary of This Iteration
- **Work completed:** [Brief summary]
- **Key decisions:** [Major choices made]
- **Blockers:** [What's preventing progress]
- **Next steps:** [Recommended for iteration N+1]

---

**Ready to resume in next conversation with `/start-iteration`**
```

## Important Notes

### Journal File Already Exists

The journal file was created by starting-an-iteration with:
- Beginning State (from context loading)
- Iteration Intention (from user input)
- Empty Work Performed sections (to be filled)

Your job is to **complete** the journal, not create it from scratch.

### Merging with Checkpoint Content

If user ran `/checkpoint-iteration` during the iteration:
- Work Performed section will have partial content
- Merge your Step 1 findings with existing content
- Add new information discovered since checkpoint
- Don't overwrite or lose checkpoint data

### Comprehensive Documentation

**Critical:** Future iterations depend entirely on this journal. Include:
- Enough detail that iteration N+1 can pick up seamlessly
- Rationale for decisions (not just what, but why)
- All blockers, even minor ones
- Specific next steps, not vague "continue working"

### Date in Filename

Always use today's date (YYYY-MM-DD format):
```bash
# Get current date
date +%Y-%m-%d
```

### Don't Skip Sections

Even if a section is empty, include it with a note:
```markdown
### Blockers Encountered
None - iteration progressed smoothly
```

This shows the section was considered, not forgotten.

### Git Integration

**Automatic commits to current branch:**
- Journal file is committed to whatever branch you're currently on
- Does NOT create new branch or switch branches
- Uses enhanced commit message format with:
  - Brief summary (2-3 lines)
  - Journal Summary section (4-6 sentences)
  - Iteration Metadata section (status, metrics, blockers, next steps)
- Tags commit as `autonomy/<strategy-name>/iteration-NNNN` for branch-aware navigation

**Branch-aware tagging:**
- On autonomy branches: Tag uses branch name (e.g., `autonomy/experiment-a/iteration-0015`)
- On non-autonomy branches: Tag uses goal name (backward compatibility)
- Each branch has its own iteration namespace
- No tag collisions when multiple branches have same iteration number

**Error handling:**
- Git failures do NOT block iteration completion
- Journal is always written, even if commit fails
- User receives manual commands if git fails
- Graceful degradation ensures state is preserved

**What gets committed:**
- Always: `iteration-NNNN-YYYY-MM-DD.md` journal file
- Sometimes: `summary.md` (if iteration % 5 == 0)
- Never: Other files in working directory

**Tag benefits:**
- Navigate to iteration on specific branch: `git checkout autonomy/experiment-a/iteration-0042`
- List all iterations on a branch: `git tag -l 'autonomy/experiment-a/*'`
- List all autonomy iterations: `git tag -l 'autonomy/*/*'`
- Immutable history markers for CI/CD integration
- Enables branch management commands to query git log for metadata

## Common Mistakes

| Mistake | Reality |
|---------|---------|
| "I'll create new journal file instead of updating existing" | NO. Journal was created by starting-an-iteration. Update it with Edit tool. |
| "I'll overwrite Work Performed that has checkpoint content" | NO. Merge with existing. Preserve checkpoint data. |
| "Journal is too detailed, I'll abbreviate" | NO. Be comprehensive. Future iterations need full context. |
| "No blockers this time, I'll skip that section" | NO. Write "None" to show you checked. |
| "Summary update can wait" | NO. If iteration % 5 == 0, update summary. |
| "I'll skip comparing against iteration intention" | NO. Ending State should assess how well intention was achieved. |
| "Git commit failed, so iteration failed" | NO. Journal writing is critical, git commit is helpful. Warn about git error but complete iteration. |
| "I'll create a new branch for the commit" | NO. Commit to current branch. User controls branching strategy. |

## After Ending

Once iteration is ended:
- Journal file completed with Ending State and Iteration Metadata
- Summary updated if needed (every 5 iterations)
- Git commit created and tagged as `autonomy/iteration-NNNN` (if git operations succeeded)
- Full iteration story captured for next iteration
- Can start new iteration anytime with `/start-iteration`

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.