$npx -y skills add Soul-Brews-Studio/arra-oracle-skills-cli --skill forwardHand off the current session to the next one. Use when user says "forward", "handoff", "wrap up", or before ending a session.
| 1 | # /forward - Handoff to Next Session |
| 2 | |
| 3 | Create context for next session, then enter plan mode to define next steps. |
| 4 | |
| 5 | ## Usage |
| 6 | |
| 7 | ``` |
| 8 | /forward # Create handoff, show plan, wait for approval |
| 9 | /forward asap # Create handoff + commit immediately (no approval needed) |
| 10 | /forward --only # Create handoff only, skip plan mode |
| 11 | ``` |
| 12 | |
| 13 | ## Steps |
| 14 | |
| 15 | 1. **Git status**: Check uncommitted work |
| 16 | 2. **Detect session**: Current session ID for traceability |
| 17 | 3. **Session summary**: What we did (from memory) |
| 18 | 4. **Pending items**: What's left |
| 19 | 5. **Next steps**: Specific actions |
| 20 | |
| 21 | ### Session Detection |
| 22 | |
| 23 | ```bash |
| 24 | ORACLE_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd) |
| 25 | ENCODED_PWD=$(echo "$ORACLE_ROOT" | sed 's|^/|-|; s|[/.]|-|g') |
| 26 | PROJECT_DIR="$HOME/.claude/projects/${ENCODED_PWD}" |
| 27 | LATEST_JSONL=$(ls -t "$PROJECT_DIR"/*.jsonl 2>/dev/null | head -1) |
| 28 | if [ -n "$LATEST_JSONL" ]; then |
| 29 | SESSION_ID=$(basename "$LATEST_JSONL" .jsonl) |
| 30 | echo "SESSION: ${SESSION_ID:0:8}" |
| 31 | fi |
| 32 | ``` |
| 33 | |
| 34 | Include in handoff header if detected: |
| 35 | ```markdown |
| 36 | 📡 Session: 74c32f34 | repo-name | Xh XXm |
| 37 | ``` |
| 38 | Skip silently if detection fails. |
| 39 | |
| 40 | ## Output |
| 41 | |
| 42 | Resolve vault path first: |
| 43 | ```bash |
| 44 | ORACLE_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) |
| 45 | if [ -n "$ORACLE_ROOT" ] && [ -f "$ORACLE_ROOT/CLAUDE.md" ] && { [ -d "$ORACLE_ROOT/ψ" ] || [ -L "$ORACLE_ROOT/ψ" ]; }; then |
| 46 | PSI=$(readlink -f "$ORACLE_ROOT/ψ" 2>/dev/null || echo "$ORACLE_ROOT/ψ") |
| 47 | else |
| 48 | PSI=$(readlink -f ψ 2>/dev/null || echo "ψ") |
| 49 | fi |
| 50 | ``` |
| 51 | |
| 52 | Write to: `$PSI/inbox/handoff/YYYY-MM-DD_HH-MM_slug.md` |
| 53 | |
| 54 | **IMPORTANT**: Always use the resolved `$PSI` path, never the `ψ/` symlink directly. |
| 55 | This ensures handoffs go to the project's vault (wherever ψ points). |
| 56 | Do NOT `git add` vault files — they are shared state, not committed to repos. |
| 57 | |
| 58 | ```markdown |
| 59 | # Handoff: [Session Focus] |
| 60 | |
| 61 | **Date**: YYYY-MM-DD HH:MM |
| 62 | **Context**: [%] |
| 63 | |
| 64 | ## What We Did |
| 65 | - [Accomplishment 1] |
| 66 | - [Accomplishment 2] |
| 67 | |
| 68 | ## Pending |
| 69 | - [ ] Item 1 |
| 70 | - [ ] Item 2 |
| 71 | |
| 72 | ## Next Session |
| 73 | - [ ] Specific action 1 |
| 74 | - [ ] Specific action 2 |
| 75 | |
| 76 | ## Key Files |
| 77 | - [Important file 1] |
| 78 | - [Important file 2] |
| 79 | ``` |
| 80 | |
| 81 | ### Confirm handoff write (announce-mode — absolute paths required) |
| 82 | |
| 83 | # announce-mode → absolute path (no ψ/, no ~/, no $VAR, no ...). |
| 84 | # Use: echo "marker: $RESOLVED_PATH" — bash substitutes. See CONVENTIONS.md. |
| 85 | |
| 86 | ```bash |
| 87 | HANDOFF_FILE="$PSI/inbox/handoff/$(date +%Y-%m-%d_%H-%M)_${SLUG}.md" |
| 88 | echo "📤 Handoff: $HANDOFF_FILE" |
| 89 | ``` |
| 90 | |
| 91 | ## Then: Create Issues from Pending Items |
| 92 | |
| 93 | After writing the handoff file, extract actionable items and offer to create GitHub issues. |
| 94 | |
| 95 | ### Step 1: Extract Items |
| 96 | |
| 97 | From the handoff you just wrote, collect all `- [ ]` items from **Pending** and **Next Session** sections. |
| 98 | |
| 99 | ### Step 2: Filter Actionable Items |
| 100 | |
| 101 | Skip items that are NOT actionable: |
| 102 | - Items containing "monitor", "watch", "track", "deferred", "maybe", "consider" |
| 103 | - Items that are vague (less than 4 words after the checkbox) |
| 104 | |
| 105 | ### Step 3: Check for Duplicates |
| 106 | |
| 107 | ```bash |
| 108 | # For each item, check if an issue already exists with a similar title |
| 109 | gh issue list --state open --search "ITEM_TITLE" --json title --jq '.[].title' 2>/dev/null |
| 110 | ``` |
| 111 | |
| 112 | Skip items that already have a matching open issue (case-insensitive title match). |
| 113 | |
| 114 | ### Step 4: Show and Confirm |
| 115 | |
| 116 | Display the list of new issues to create: |
| 117 | |
| 118 | ``` |
| 119 | 📋 Create GitHub issues from pending items? |
| 120 | |
| 121 | 1. Fix awaken git push auth |
| 122 | 2. /rrr --deep time-based |
| 123 | |
| 124 | Create these 2 issues? [y/N] |
| 125 | ``` |
| 126 | |
| 127 | **NEVER auto-create issues without user approval.** |
| 128 | |
| 129 | If user declines, skip issue creation and continue to plan mode. |
| 130 | |
| 131 | ### Step 5: Create Issues |
| 132 | |
| 133 | If user approves: |
| 134 | |
| 135 | ```bash |
| 136 | # Detect repo for issue creation |
| 137 | REMOTE=$(git remote get-url origin 2>/dev/null) |
| 138 | # Extract owner/repo from remote URL |
| 139 | REPO=$(echo "$REMOTE" | sed -E 's|.*[:/]([^/]+/[^/]+?)(\.git)?$|\1|') |
| 140 | |
| 141 | # For each actionable item: |
| 142 | gh issue create --repo "$REPO" --title "ITEM_TITLE" --body "From /forward handoff on YYYY-MM-DD" |
| 143 | ``` |
| 144 | |
| 145 | Show results: |
| 146 | ``` |
| 147 | Created #115: Fix awaken git push auth |
| 148 | Created #116: /rrr --deep time-based |
| 149 | ``` |
| 150 | |
| 151 | ### Step 6: Write to Outbox |
| 152 | |
| 153 | Regardless of whether issues were created, write items to the outbox: |
| 154 | |
| 155 | ```bash |
| 156 | ORACLE_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) |
| 157 | if [ -n "$ORACLE_ROOT" ] && [ -f "$ORACLE_ROOT/CLAUDE.md" ] && { [ -d "$ORACLE_ROOT/ψ" ] || [ -L "$ORACLE_ROOT/ψ" ]; }; then |
| 158 | PSI=$(readlink -f "$ORACLE_ROOT/ψ" 2>/dev/null || echo "$ORACLE_ROOT/ψ") |
| 159 | else |
| 160 | PSI=$(readlink -f ψ 2>/dev/null || echo "ψ") |
| 161 | fi |
| 162 | OUTBOX_DIR="$PSI/outbox" |
| 163 | mkdir -p "$OUTBOX_DIR" |
| 164 | ``` |
| 165 | |
| 166 | Write to: `$PSI/outbox/YYYY-MM-DD_pending.md` |
| 167 | |
| 168 | ```markdown |
| 169 | # Pending Items — YYYY-MM-DD |
| 170 | |
| 171 | ## From: [repo-name] /forward |
| 172 | |
| 173 | - [ ] Item 1 (issue #115) |
| 174 | - [ ] Item 2 (issue #116) |
| 175 | - [ ] Item 3 (no issue — skipped: vague) |
| 176 | ``` |
| 177 | |
| 178 | ### Confirm outbox write (announce-mode — absolute paths required) |
| 179 | |
| 180 | # announce-mode → absolute path (no ψ/, no ~/, no $VAR, no ...). |