/rrr
"Reflect to grow, document to remember."
/rrr # Quick retro, main agent
/rrr --detail # Full template, main agent
/rrr --dig # Reconstruct past timeline from session .jsonl
/rrr --deep # 5 parallel subagents
/rrr --deep --teammate # 3 coordinated team agents (requires AGENT_TEAMS)NEVER spawn subagents or use the Task tool. Only --deep and --deep --teammate may use subagents. /rrr, /rrr --detail, and /rrr --dig = main agent only. Zero subagents. Zero Task calls.
Oracle Root Detection (REQUIRED — run before any ψ/ write)
Every skill that writes to ψ/ MUST detect the oracle root first. Do not assume pwd is the oracle repo.
# Step 1: Find git root
ORACLE_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
# Step 2: Cross-check — oracle repo has CLAUDE.md + ψ/
if [ -n "$ORACLE_ROOT" ] && [ -f "$ORACLE_ROOT/CLAUDE.md" ] && { [ -d "$ORACLE_ROOT/ψ" ] || [ -L "$ORACLE_ROOT/ψ" ]; }; then
PSI="$ORACLE_ROOT/ψ"
elif [ -f "$(pwd)/CLAUDE.md" ] && { [ -d "$(pwd)/ψ" ] || [ -L "$(pwd)/ψ" ]; }; then
# Fallback: pwd has oracle markers
ORACLE_ROOT="$(pwd)"
PSI="$ORACLE_ROOT/ψ"
else
# Last resort: warn and use pwd
echo "⚠️ Not in oracle repo (no CLAUDE.md + ψ/ at git root). Writing to pwd."
ORACLE_ROOT="$(pwd)"
PSI="$ORACLE_ROOT/ψ"
fiWhy: prevents retros writing to ~/ψ/ (home) or incubated repo's ψ/ instead of the oracle's own vault.
All paths below use $PSI/ instead of bare ψ/.
/rrr (Default)
1. Gather
date "+%H:%M %Z (%A %d %B %Y)"
git log --oneline -10 && git diff --stat HEAD~51.5. Detect Session (optional)
ENCODED_PWD=$(echo "$ORACLE_ROOT" | sed 's|^/|-|; s|[/.]|-|g')
PROJECT_DIR="$HOME/.claude/projects/${ENCODED_PWD}"
LATEST_JSONL=$(ls -t "$PROJECT_DIR"/*.jsonl 2>/dev/null | head -1)
if [ -n "$LATEST_JSONL" ]; then
SESSION_ID=$(basename "$LATEST_JSONL" .jsonl)
echo "SESSION: ${SESSION_ID:0:8}"
fiIf detected, include in retrospective header:
📡 Session: 74c32f34 | repo-name | Xh XXmIf detection fails, skip silently.
2. Write Retrospective
Path: $PSI/memory/retrospectives/YYYY-MM/DD/HH.MM_slug.md
mkdir -p "$PSI/memory/retrospectives/$(date +%Y-%m/%d)"Write immediately, no prompts. Include:
- Session Summary
- Timeline
- Files Modified
- AI Diary (150+ words, first-person)
- Honest Feedback (100+ words, 3 friction points)
- Lessons Learned
- Next Steps
3. Write Lesson Learned
Path: $PSI/memory/learnings/YYYY-MM-DD_slug.md
4. Oracle Sync
arra_learn({ pattern: [lesson content], concepts: [tags], source: "rrr: REPO" })5. Save
Retro files are written to vault (wherever ψ symlink resolves).
Do NOT git add ψ/ — it may be a symlink to the vault. Vault files are shared state, not committed to repos.
/rrr --detail
Same flow as default but use full template:
# Session Retrospective
**Session Date**: YYYY-MM-DD
**Start/End**: HH:MM - HH:MM GMT+7
**Duration**: ~X min
**Focus**: [description]
**Type**: [Feature | Bug Fix | Research | Refactoring]
## Session Summary
## Timeline
## Files Modified
## Key Code Changes
## Architecture Decisions
## AI Diary (150+ words, vulnerable, first-person)
## What Went Well
## What Could Improve
## Blockers & Resolutions
## Honest Feedback (100+ words, 3 friction points)
## Lessons Learned
## Next Steps
## Metrics (commits, files, lines)Then steps 3-5 same as default.
/rrr --dig
Retrospective powered by session goldminer. No subagents.
1. Run dig to get session timeline
Discover project dirs using full-path encoding (same as Claude's .claude/projects/ naming), including worktree dirs:
ENCODED_PWD=$(echo "$ORACLE_ROOT" | sed 's|^/|-|; s|[/.]|-|g')
PROJECT_BASE=$(ls -d "$HOME/.claude/projects/${ENCODED_PWD}" 2>/dev/null | head -1)
export PROJECT_DIRS="$PROJECT_BASE"
for wt in "${PROJECT_BASE}"-wt*; do [ -d "$wt" ] && export PROJECT_DIRS="$PROJECT_DIRS:$wt"; doneThen run dig.py to get session JSON:
python3 ~/.claude/skills/dig/scripts/dig.py 0Also gather git context:
date "+%H:%M %Z (%A %d %B %Y)"
git log --oneline -10 && git diff --stat HEAD~52. Write Retrospective with Timeline
Use the session timeline data to write a full retrospective using the --detail template. Add the Past Session Timeline table after Session Summary, before Timeline.
3-5. Same as default steps 3-5
Write lesson learned, oracle sync.
Do NOT git add ψ/ — vault files are shared state, not committed to repos.
/rrr --deep
Read DEEP.md in this skill directory. Only mode that uses subagents (5 parallel agents).
/rrr --deep --teammate
Read TEAMMATE.md in this skill directory. Coordinated team retro (3 agents + lead). Requires CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1.
Wizard v2 Context
If the Oracle was born via /awaken wizard v2, CLAUDE.md may contain:
- Memory consent: If
auto,/rrrruns are expected and welcomed. Ifmanual, only run when explicitly asked. - Experience level: Adjust diary depth (beginner = simpler language, senior = technical depth)
- Team context: If multi-Oracle team, note cross-Oracle learnings and handoff relevance
Check CLAUDE.md for these fields. If not present, use defaults (auto memory, standard depth).
Anti-Rationalization Guard
"You didn't come here to make the choice. You've already made it. You're here to try to understand why."
Before writing the final retrospective, scan your own draft for these excuse patterns:
Common Rationalizations
| Excuse | Reality |
|---|---|
| "This was too complex to finish" | Was it complex, or did you skip the hard part? Show the specific blocker. |
| "I ran out of context" | Context is a resource. Did you spend it well, or spiral on side quests? |
| "The API/tool didn't work" | Show the error. Show what you tried. "Didn't work" is not a diagnosis. |
| "I already tested it manually" | Manual testing doesn't persist. Where's the proof? |
| "I'll fix it next session" | Is there a concrete plan, or is this a polite way to abandon it? |
| "It's mostly done" | Define "mostly." What percentage? What's left? Be specific. |
| "The user changed direction" | Did they change, or did you misunderstand? Check the original request. |
| "This is a known issue" | Known by whom? Is there an issue filed? A workaround documented? |
Red Flags in Your Own Retro
Stop and re-examine if your retrospective contains:
- Vague success claims: "Made good progress" — on what? Show commits or it didn't happen.
- Blame-shifting: "The build was broken" — did you break it? Did you fix it?
- Missing friction: Zero "What Could Improve" items = you're not being honest.
- Inflated metrics: Counting config changes as "features shipped."
- Scope creep excuses: "I also refactored X" — was that in scope? Did you choose it over the actual task?
- Missing evidence: Claims without git hashes, file paths, or concrete output.
Verification Checklist
Before saving the retrospective, verify:
[ ] Every "shipped" item has a commit hash or file path
[ ] Every "blocked" item has a specific error or reason
[ ] AI Diary contains at least ONE uncomfortable truth
[ ] Honest Feedback has 3+ friction points (not softball ones)
[ ] "Next Steps" are specific enough to start immediately
[ ] No excuse from the table above appears unexaminedIf you catch yourself rationalizing: name it. Write "I noticed I was rationalizing about X because Y" in the AI Diary. Catching the pattern is more valuable than hiding it.
Rules
- NO SUBAGENTS: Never use Task tool or spawn subagents (only
--deepmay) - AI Diary: 150+ words, vulnerability, first-person
- Honest Feedback: 100+ words, 3 friction points
- Oracle Sync: REQUIRED after every lesson learned
- Time Zone: GMT+7 (Bangkok)
- Anti-rationalization: Scan draft against excuse table before saving