| name | forking-iteration |
| description | Use when user wants to create new autonomy branch from current commit or specific past iteration |
Forking Iteration
Overview
Create new autonomy branch forked from current commit or any iteration tag in git history. Enables "slime mold strategy" of parallel exploration.
Core principle: Branch creation is independent of iteration management. Fork creates branch, start-iteration begins work.
When to Use
Use this skill when:
- User runs
/fork-iterationcommand - User wants to create new exploration branch
- User wants to try alternative approach from past iteration
- User wants to bootstrap autonomy workflow from non-autonomy branch
DO NOT use for:
- Creating non-autonomy branches (use git directly)
- Starting iterations (use starting-an-iteration instead)
Quick Reference
| Step | Action | Tool |
|---|---|---|
| 1. Parse arguments | Extract iteration (optional) and strategy-name | Manual |
| 2. Validate strategy-name | Check kebab-case, not already exists | Bash |
| 3. Resolve fork point | Find iteration tag or use HEAD | Bash |
| 4. Create branch | Checkout fork point, create autonomy branch | Bash |
| 5. Report success | Confirm creation with next steps | Direct output |
Process
Step 1: Parse and Validate Arguments
Extract arguments from command args:
Format: [iteration] <strategy-name>
Parse:
If args contains only one word:
iteration = None
strategy_name = args
Else if args contains two words:
iteration = first word
strategy_name = second word
Else:
Error: "Invalid arguments. Usage: /fork-iteration [iteration] <strategy-name>"
Validate strategy-name:
- Must be kebab-case (lowercase, hyphens, no special chars)
- Must not be empty
- Should be descriptive (warn if too generic like "test" or "new")
Normalize strategy-name:
# Convert to lowercase, replace invalid chars with hyphens
strategy_name=$(echo "$strategy_name" | tr '[:upper:]' '[:lower:]' | tr -cs '[:alnum:]-' '-' | sed 's/^-*//; s/-*$//')
Step 2: Check if Branch Already Exists
Validate that autonomy/<strategy-name> doesn't already exist:
# Check for existing branch (local or remote)
if git branch -a | grep -q "autonomy/$strategy_name\$"; then
# Error: branch exists
fi
If exists:
Error: Branch 'autonomy/<strategy-name>' already exists.
To work on existing branch:
git checkout autonomy/<strategy-name>
To create with different name:
/fork-iteration [iteration] <different-name>
Available autonomy branches:
[List from git branch -a | grep autonomy/]
Stop here if branch exists.
Step 3: Resolve Fork Point
Determine what commit to fork from:
If iteration specified:
# Search for iteration tag in current branch history
matching_tags=$(git tag --merged HEAD | grep "iteration-$(printf '%04d' $iteration)\$")
tag_count=$(echo "$matching_tags" | wc -l)
if [ "$tag_count" -eq 0 ]; then
# Error: iteration not found
echo "Error: Iteration $iteration not found in current branch history."
echo ""
echo "Most recent iterations in current branch:"
git tag --merged HEAD | grep 'iteration-' | tail -5
exit 1
elif [ "$tag_count" -eq 1 ]; then
# Use the tag
fork_point="$matching_tags"
else
# Multiple matches (shouldn't happen with branch-namespaced tags, but handle it)
echo "Multiple iteration tags found for iteration $iteration:"
echo "$matching_tags"
echo ""
# Use AskUserQuestion to let user choose
exit 1
fi
If iteration NOT specified:
# Fork from current HEAD
fork_point=$(git rev-parse HEAD)
fork_description="current commit (HEAD)"
Validate fork point exists:
if ! git rev-parse "$fork_point" >/dev/null 2>&1; then
echo "Error: Fork point '$fork_point' not found in git history."
exit 1
fi
Step 4: Create New Branch
Checkout fork point and create new autonomy branch:
# Checkout fork point (detached HEAD)
git checkout "$fork_point"
# Create and switch to new branch
git checkout -b "autonomy/$strategy_name"
# Confirm creation
current_branch=$(git branch --show-current)
if [ "$current_branch" != "autonomy/$strategy_name" ]; then
echo "Error: Failed to create branch 'autonomy/$strategy_name'"
exit 1
fi
On success:
- Branch created and checked out
- Working directory contains files from fork point
- Ready for
/start-iteration
Step 5: Report Success
Announce successful branch creation:
✓ Branch `autonomy/<strategy-name>` created
Forked from: [tag or commit hash]
Current branch: autonomy/<strategy-name>
Next step: Run `/start-iteration` to begin work on this branch.
Important Notes
Branch Creation Only
This skill ONLY creates branches:
- Does NOT start iterations
- Does NOT modify journal files
- Does NOT determine iteration numbering
start-iterationwill handle iteration logic when user runs it
Works from Any Starting Point
Can fork from:
- Autonomy branches (e.g.,
autonomy/experiment-a) - Non-autonomy branches (e.g.,
main,develop) - Detached HEAD
- Any commit with autonomy iteration tags
No Merge Provisions
Autonomy branches NEVER merge:
- Each branch is independent exploration
- Branches learn from each other via
/analyze-branch(read-only) - No git merge operations
- No rebase operations
- Branches are peers, not hierarchical
Strategy Name Matters
Branch name becomes identity:
- Used in tag names:
autonomy/<strategy-name>/iteration-NNNN - Appears in branch listings
- Should describe exploration direction
- Can't easily change later (would require tag renaming)
Good names:
usage-based-pricingcdn-optimizationreact-migration
Bad names:
test(too generic)new(not descriptive)experiment1(meaningless)
Iteration Numbering Continuity
When start-iteration runs on new branch:
- If forked from iteration tag: continues numbering (fork from 0015 → next is 0016)
- If forked from non-iteration commit: starts at 0001 (if goal exists)
- If no goal exists: user must run
/create-goalfirst
Common Mistakes
| Mistake | Reality |
|---|---|
| "I'll also start the iteration in this skill" | NO. Branch creation is separate. User runs /start-iteration when ready. |
| "User wants to fork, I'll check out the branch for them" | Already doing this. Checkout happens during creation. |
| "Branch name has spaces, I'll keep them" | NO. Normalize to kebab-case. |
| "I'll search all branches for iteration tag" | NO. Only search tags reachable from current HEAD (git tag --merged HEAD). |
| "Branch exists, I'll overwrite it" | NO. Error and show user how to work with existing branch. |
| "No goal found, I'll create one" | NO. User must run /create-goal explicitly. |
After Forking
Once branch is created:
- User is on new
autonomy/<strategy-name>branch - Working directory contains files from fork point
- No iterations started yet
- User runs
/start-iterationto begin work - Iteration numbering determined by start-iteration skill