worktree
/worktree — Isolated Work
Branch without fear. Experiment without risk. Nothing touches main until you say so.
Create an isolated git worktree for safe, parallel work. Changes stay in the worktree until you explicitly merge. If it goes wrong, remove it — main is untouched.
Usage
/worktree # Create worktree (auto-named)
/worktree <name> # Create named worktree
/worktree list # Show active worktrees
/worktree exit # Leave worktree, keep changes
/worktree exit --remove # Leave worktree, delete it
/worktree clean # Find and remove orphaned worktrees
Create Worktree (/worktree or /worktree <name>)
Use the EnterWorktree tool:
EnterWorktree({ name: "<name>" })
If no name given, one is auto-generated.
What happens:
- Creates
.claude/worktrees/<name>/with a new git branch - Switches session working directory to the worktree
- Branch name:
worktree-<name> - Based on current HEAD
Show the user:
🌿 Worktree created
Name: <name>
Branch: worktree-<name>
Path: .claude/worktrees/<name>/
Based on: <current-branch> @ <short-hash>
You're now working in the worktree.
Main is untouched — edit freely.
💡 /worktree exit — leave (keep changes)
💡 /worktree exit --remove — leave (delete everything)
Exit Worktree (/worktree exit)
Keep changes (default)
ExitWorktree({ action: "keep" })
🌿 Left worktree — changes preserved
Branch: worktree-<name> (still exists)
Path: .claude/worktrees/<name>/ (still on disk)
💡 git merge worktree-<name> — merge when ready
💡 /worktree clean — remove later
Remove (/worktree exit --remove)
ExitWorktree({ action: "remove" })
If uncommitted changes exist, tool will refuse. Confirm with user, then:
ExitWorktree({ action: "remove", discard_changes: true })
🌿 Worktree removed
Branch: worktree-<name> (deleted)
Path: .claude/worktrees/<name>/ (deleted)
Back on: <original-branch>
List Worktrees (/worktree list)
echo "🌿 Active Worktrees"
echo ""
git worktree list 2>/dev/null | while read path hash branch; do
if echo "$path" | grep -q '.claude/worktrees'; then
name=$(basename "$path")
dirty=$(cd "$path" 2>/dev/null && git status --porcelain | wc -l)
echo " $name $branch (dirty: $dirty files)"
fi
done
# Also check for orphans (worktree dir exists but git doesn't know about it)
for dir in .claude/worktrees/*/; do
[ -d "$dir" ] || continue
name=$(basename "$dir")
if ! git worktree list 2>/dev/null | grep -q "$name"; then
echo " ⚠️ $name (orphaned — git doesn't know about it)"
fi
done
Show:
🌿 Active Worktrees
Name Branch Dirty
──────────────── ─────────────────────────── ─────
fix-auth worktree-fix-auth 2 files
spike-new-ui worktree-spike-new-ui 0 files
agent-a377b5bd worktree-agent-a377b5bd 0 files (from team-agents)
💡 /worktree exit — leave current
💡 /worktree clean — remove orphans
Clean Worktrees (/worktree clean)
Find and remove orphaned worktrees (from crashed agents, old sessions, etc.):
echo "🧹 Worktree Cleanup"
echo ""
CLEANED=0
for dir in .claude/worktrees/*/; do
[ -d "$dir" ] || continue
name=$(basename "$dir")
dirty=$(cd "$dir" 2>/dev/null && git status --porcelain | wc -l)
if [ "$dirty" -eq 0 ]; then
echo " ✅ $name — clean, removing"
git worktree remove "$dir" --force 2>/dev/null
CLEANED=$((CLEANED + 1))
else
echo " ⚠️ $name — $dirty dirty files, keeping"
fi
done
[ "$CLEANED" -eq 0 ] && echo " No orphans found"
echo ""
echo " Cleaned: $CLEANED worktrees"
WAIT for user confirmation before removing dirty worktrees.
When to Use
| Situation | Use |
|---|---|
| Experimental feature | /worktree spike-feature — try it, remove if bad |
| Bug fix while mid-feature | /worktree hotfix — fix on clean branch, merge, return |
| Team agents need isolation | /team-agents --isolated (uses worktrees internally) |
| Code review in parallel | /worktree review-pr-123 — read code without switching branches |
| Learning/studying | /worktree study — make notes, edit, throwaway |
How It Connects
/worktree — human creates isolated workspace
/team-agents — agents create worktrees via isolation:"worktree"
team-ops doctor — detects orphaned worktrees from crashed agents
/worktree clean — removes orphans (same as doctor --fix for worktrees)
Rules
- Main is untouched — worktree is a separate directory + branch
- Confirm before delete — never remove dirty worktrees without asking
- Clean orphans —
/worktree cleanonly removes clean worktrees - Name is identity — use descriptive names (not auto-generated) when possible
- Nothing is Deleted — worktree branches stay until explicitly removed
ARGUMENTS: $ARGUMENTS
More from soul-brews-studio/oracle-skills-cli
philosophy
Display Oracle philosophy — the 5 Principles + Rule 6. Use when user asks about principles, "nothing deleted", "patterns over intentions", Oracle philosophy, or needs alignment check. Do NOT trigger for "who are you" (use /who-are-you), "what is oracle" (use /about-oracle), or session status questions.
50feel
Capture how the system feels — energy, momentum, burnout, breakthrough. Emotional intelligence for Oracle-human collaboration. Use when user says 'feel', 'how are we', 'energy check', 'burnout', 'momentum', or wants emotional awareness of the work.
36template
Skill template with Bun Shell pattern. Copy this folder to create new skills.
29schedule
Query schedule via Oracle API (Drizzle DB). Use when user says "schedule", "upcoming events", "what's on today", "calendar".
29forward
Create handoff + enter plan mode for next session. Use when user says "forward", "handoff", "wrap up", or before ending session.
29trace
Find projects, code, and knowledge across git history, repos, docs, and Oracle. Use when user asks "trace", "find project", "where is [project]", "search history", or needs to locate something across the codebase. Supports --oracle (fast), --smart (default), --deep (wave execution), --deep --dig (combo). Do NOT trigger for session mining or "past sessions" (use /dig), or codebase exploration "learn repo" (use /learn).
28