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