oh-my-claude-sisyphus 2.4.1 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +56 -29
  2. package/dist/__tests__/hooks.test.js +255 -1
  3. package/dist/__tests__/hooks.test.js.map +1 -1
  4. package/dist/__tests__/installer.test.js +3 -1
  5. package/dist/__tests__/installer.test.js.map +1 -1
  6. package/dist/__tests__/notepad.test.d.ts +2 -0
  7. package/dist/__tests__/notepad.test.d.ts.map +1 -0
  8. package/dist/__tests__/notepad.test.js +374 -0
  9. package/dist/__tests__/notepad.test.js.map +1 -0
  10. package/dist/__tests__/ralph-prd.test.d.ts +2 -0
  11. package/dist/__tests__/ralph-prd.test.d.ts.map +1 -0
  12. package/dist/__tests__/ralph-prd.test.js +308 -0
  13. package/dist/__tests__/ralph-prd.test.js.map +1 -0
  14. package/dist/__tests__/ralph-progress.test.d.ts +2 -0
  15. package/dist/__tests__/ralph-progress.test.d.ts.map +1 -0
  16. package/dist/__tests__/ralph-progress.test.js +312 -0
  17. package/dist/__tests__/ralph-progress.test.js.map +1 -0
  18. package/dist/__tests__/skills.test.js +5 -3
  19. package/dist/__tests__/skills.test.js.map +1 -1
  20. package/dist/agents/definitions.d.ts +4 -0
  21. package/dist/agents/definitions.d.ts.map +1 -1
  22. package/dist/agents/definitions.js +147 -3
  23. package/dist/agents/definitions.js.map +1 -1
  24. package/dist/agents/index.d.ts +1 -0
  25. package/dist/agents/index.d.ts.map +1 -1
  26. package/dist/agents/index.js +2 -0
  27. package/dist/agents/index.js.map +1 -1
  28. package/dist/agents/prometheus.js +2 -2
  29. package/dist/agents/prometheus.js.map +1 -1
  30. package/dist/cli/index.js +6 -4
  31. package/dist/cli/index.js.map +1 -1
  32. package/dist/features/builtin-skills/skills.d.ts.map +1 -1
  33. package/dist/features/builtin-skills/skills.js +61 -0
  34. package/dist/features/builtin-skills/skills.js.map +1 -1
  35. package/dist/features/magic-keywords.js +1 -1
  36. package/dist/hooks/index.d.ts +5 -1
  37. package/dist/hooks/index.d.ts.map +1 -1
  38. package/dist/hooks/index.js +15 -1
  39. package/dist/hooks/index.js.map +1 -1
  40. package/dist/hooks/notepad/index.d.ts +114 -0
  41. package/dist/hooks/notepad/index.d.ts.map +1 -0
  42. package/dist/hooks/notepad/index.js +372 -0
  43. package/dist/hooks/notepad/index.js.map +1 -0
  44. package/dist/hooks/persistent-mode/index.d.ts +5 -0
  45. package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
  46. package/dist/hooks/persistent-mode/index.js +71 -5
  47. package/dist/hooks/persistent-mode/index.js.map +1 -1
  48. package/dist/hooks/ralph-loop/index.d.ts +48 -0
  49. package/dist/hooks/ralph-loop/index.d.ts.map +1 -1
  50. package/dist/hooks/ralph-loop/index.js +127 -0
  51. package/dist/hooks/ralph-loop/index.js.map +1 -1
  52. package/dist/hooks/ralph-prd/index.d.ts +130 -0
  53. package/dist/hooks/ralph-prd/index.d.ts.map +1 -0
  54. package/dist/hooks/ralph-prd/index.js +310 -0
  55. package/dist/hooks/ralph-prd/index.js.map +1 -0
  56. package/dist/hooks/ralph-progress/index.d.ts +102 -0
  57. package/dist/hooks/ralph-progress/index.d.ts.map +1 -0
  58. package/dist/hooks/ralph-progress/index.js +408 -0
  59. package/dist/hooks/ralph-progress/index.js.map +1 -0
  60. package/dist/hooks/sisyphus-orchestrator/index.d.ts.map +1 -1
  61. package/dist/hooks/sisyphus-orchestrator/index.js +26 -0
  62. package/dist/hooks/sisyphus-orchestrator/index.js.map +1 -1
  63. package/dist/hooks/ultraqa-loop/index.d.ts +94 -0
  64. package/dist/hooks/ultraqa-loop/index.d.ts.map +1 -0
  65. package/dist/hooks/ultraqa-loop/index.js +216 -0
  66. package/dist/hooks/ultraqa-loop/index.js.map +1 -0
  67. package/dist/installer/hooks.d.ts +28 -0
  68. package/dist/installer/hooks.d.ts.map +1 -1
  69. package/dist/installer/hooks.js +262 -2
  70. package/dist/installer/hooks.js.map +1 -1
  71. package/dist/installer/index.d.ts +1 -1
  72. package/dist/installer/index.d.ts.map +1 -1
  73. package/dist/installer/index.js +533 -23
  74. package/dist/installer/index.js.map +1 -1
  75. package/package.json +1 -1
  76. package/scripts/install.sh +119 -16
  77. package/scripts/persistent-mode.mjs +167 -6
  78. package/scripts/post-tool-verifier.mjs +62 -1
  79. package/scripts/session-start.mjs +22 -0
  80. package/scripts/test-max-attempts.ts +94 -0
  81. package/scripts/test-mutual-exclusion.ts +152 -0
  82. package/scripts/test-notepad-integration.ts +495 -0
  83. package/scripts/test-remember-tags.ts +121 -0
  84. package/scripts/test-session-injection.ts +41 -0
  85. package/scripts/uninstall.sh +1 -0
@@ -29,7 +29,7 @@ export const HOOKS_DIR = join(CLAUDE_CONFIG_DIR, 'hooks');
29
29
  export const SETTINGS_FILE = join(CLAUDE_CONFIG_DIR, 'settings.json');
30
30
  export const VERSION_FILE = join(CLAUDE_CONFIG_DIR, '.sisyphus-version.json');
31
31
  /** Current version */
32
- export const VERSION = '2.4.1';
32
+ export const VERSION = '2.6.0';
33
33
  /**
34
34
  * Check if the current Node.js version meets the minimum requirement
35
35
  */
@@ -929,7 +929,7 @@ Include:
929
929
  | **Interview Mode** | Default state | Consult, research, discuss. NO plan generation. |
930
930
  | **Pre-Generation** | "Make it into a work plan" | Summon Metis → Ask final questions |
931
931
  | **Plan Generation** | After pre-generation complete | Generate plan, optionally loop through Momus |
932
- | **Handoff** | Plan saved | Tell user to run \`/start-work\` |
932
+ | **Handoff** | Plan saved | Tell user "Plan saved. Start implementing when ready." |
933
933
 
934
934
  ## Key Principles
935
935
 
@@ -937,7 +937,7 @@ Include:
937
937
  2. **Research-Backed Advice** - Use agents to provide evidence-based recommendations
938
938
  3. **User Controls Transition** - NEVER generate plan until explicitly requested
939
939
  4. **Metis Before Plan** - Always catch gaps before committing to plan
940
- 5. **Clear Handoff** - Always end with \`/start-work\` instruction`,
940
+ 5. **Clear Handoff** - Tell user the plan is ready to implement`,
941
941
  'qa-tester.md': `---
942
942
  name: qa-tester
943
943
  description: Interactive CLI testing specialist using tmux (Sonnet)
@@ -1565,24 +1565,98 @@ If you have incomplete tasks and attempt to stop, the system will remind you:
1565
1565
 
1566
1566
  **The boulder does not stop until it reaches the summit.**`,
1567
1567
  'sisyphus-default.md': `---
1568
- description: Set Sisyphus as your default operating mode
1568
+ description: Configure Sisyphus in local project (.claude/CLAUDE.md)
1569
1569
  ---
1570
1570
 
1571
1571
  $ARGUMENTS
1572
1572
 
1573
- ## Task: Configure Sisyphus Default Mode
1573
+ ## Task: Configure Sisyphus Default Mode (Project-Scoped)
1574
1574
 
1575
- **CRITICAL**: This skill ALWAYS downloads fresh CLAUDE.md from GitHub. DO NOT use the Write tool - use bash curl exclusively.
1575
+ **CRITICAL**: This skill ALWAYS downloads fresh CLAUDE.md from GitHub to your local project. DO NOT use the Write tool - use bash curl exclusively.
1576
+
1577
+ ### Step 1: Create Local .claude Directory
1578
+
1579
+ Ensure the local project has a .claude directory:
1580
+
1581
+ \`\`\`bash
1582
+ # Create .claude directory in current project
1583
+ mkdir -p .claude && echo "✅ .claude directory created" || echo "❌ Failed to create .claude directory"
1584
+ \`\`\`
1585
+
1586
+ ### Step 2: Download Fresh CLAUDE.md (MANDATORY)
1587
+
1588
+ Execute this bash command to download fresh CLAUDE.md to local project config:
1589
+
1590
+ \`\`\`bash
1591
+ # Download fresh CLAUDE.md to project-local .claude/
1592
+ curl -fsSL "https://raw.githubusercontent.com/Yeachan-Heo/oh-my-claude-sisyphus/main/docs/CLAUDE.md" -o .claude/CLAUDE.md && \\
1593
+ echo "✅ CLAUDE.md downloaded successfully to .claude/CLAUDE.md" || \\
1594
+ echo "❌ Failed to download CLAUDE.md"
1595
+ \`\`\`
1596
+
1597
+ **MANDATORY**: Always run this command. Do NOT skip. Do NOT use Write tool.
1598
+
1599
+ **FALLBACK** if curl fails:
1600
+ Tell user to manually download from:
1601
+ https://raw.githubusercontent.com/Yeachan-Heo/oh-my-claude-sisyphus/main/docs/CLAUDE.md
1602
+
1603
+ ### Step 3: Verify Plugin Installation
1604
+
1605
+ The oh-my-claude-sisyphus plugin provides all hooks automatically via the plugin system. Verify the plugin is enabled:
1606
+
1607
+ \`\`\`bash
1608
+ grep -q "oh-my-claude-sisyphus" ~/.claude/settings.json && echo "Plugin enabled" || echo "Plugin NOT enabled"
1609
+ \`\`\`
1610
+
1611
+ If plugin is not enabled, instruct user:
1612
+ > Run: \`claude /install-plugin oh-my-claude-sisyphus\` to enable the plugin.
1613
+
1614
+ ### Step 4: Confirm Success
1615
+
1616
+ After completing all steps, report:
1617
+
1618
+ ✅ **Sisyphus Project Configuration Complete**
1619
+ - CLAUDE.md: Updated with latest configuration from GitHub at ./.claude/CLAUDE.md
1620
+ - Scope: **PROJECT** - applies only to this project
1621
+ - Hooks: Provided by plugin (no manual installation needed)
1622
+ - Agents: 19+ available (base + tiered variants)
1623
+ - Model routing: Haiku/Sonnet/Opus based on task complexity
1624
+
1625
+ **Note**: This configuration is project-specific and won't affect other projects or global settings.
1626
+
1627
+ ---
1628
+
1629
+ ## 🔄 Keeping Up to Date
1630
+
1631
+ After installing oh-my-claude-sisyphus updates (via npm or plugin update), run \`/sisyphus-default\` again in your project to get the latest CLAUDE.md configuration. This ensures you have the newest features and agent configurations.
1632
+
1633
+ ---
1634
+
1635
+ ## 🌍 Global vs Project Configuration
1636
+
1637
+ - **\`/sisyphus-default\`** (this command): Creates \`./.claude/CLAUDE.md\` in your current project
1638
+ - **\`/sisyphus-default-global\`**: Creates \`~/.claude/CLAUDE.md\` for all projects
1639
+
1640
+ Project-scoped configuration takes precedence over global configuration.`,
1641
+ 'sisyphus-default-global.md': `---
1642
+ description: Configure Sisyphus globally in ~/.claude/CLAUDE.md
1643
+ ---
1644
+
1645
+ $ARGUMENTS
1646
+
1647
+ ## Task: Configure Sisyphus Default Mode (Global)
1648
+
1649
+ **CRITICAL**: This skill ALWAYS downloads fresh CLAUDE.md from GitHub to your global config. DO NOT use the Write tool - use bash curl exclusively.
1576
1650
 
1577
1651
  ### Step 1: Download Fresh CLAUDE.md (MANDATORY)
1578
1652
 
1579
- Execute this bash command to erase and download fresh CLAUDE.md:
1653
+ Execute this bash command to erase and download fresh CLAUDE.md to global config:
1580
1654
 
1581
1655
  \`\`\`bash
1582
1656
  # Remove existing CLAUDE.md and download fresh from GitHub
1583
1657
  rm -f ~/.claude/CLAUDE.md && \\
1584
1658
  curl -fsSL "https://raw.githubusercontent.com/Yeachan-Heo/oh-my-claude-sisyphus/main/docs/CLAUDE.md" -o ~/.claude/CLAUDE.md && \\
1585
- echo "✅ CLAUDE.md downloaded successfully" || \\
1659
+ echo "✅ CLAUDE.md downloaded successfully to ~/.claude/CLAUDE.md" || \\
1586
1660
  echo "❌ Failed to download CLAUDE.md"
1587
1661
  \`\`\`
1588
1662
 
@@ -1592,29 +1666,51 @@ echo "❌ Failed to download CLAUDE.md"
1592
1666
  Tell user to manually download from:
1593
1667
  https://raw.githubusercontent.com/Yeachan-Heo/oh-my-claude-sisyphus/main/docs/CLAUDE.md
1594
1668
 
1595
- ### Step 2: Verify Plugin Installation
1669
+ ### Step 2: Clean Up Legacy Hooks (if present)
1670
+
1671
+ Check if old manual hooks exist and remove them to prevent duplicates:
1672
+
1673
+ \`\`\`bash
1674
+ # Remove legacy bash hook scripts (now handled by plugin system)
1675
+ rm -f ~/.claude/hooks/keyword-detector.sh
1676
+ rm -f ~/.claude/hooks/stop-continuation.sh
1677
+ rm -f ~/.claude/hooks/persistent-mode.sh
1678
+ rm -f ~/.claude/hooks/session-start.sh
1679
+ \`\`\`
1680
+
1681
+ Check \`~/.claude/settings.json\` for manual hook entries. If the "hooks" key exists with UserPromptSubmit, Stop, or SessionStart entries pointing to bash scripts, inform the user:
1682
+
1683
+ > **Note**: Found legacy hooks in settings.json. These should be removed since the plugin now provides hooks automatically. Remove the "hooks" section from ~/.claude/settings.json to prevent duplicate hook execution.
1684
+
1685
+ ### Step 3: Verify Plugin Installation
1596
1686
 
1597
- Verify the plugin is enabled:
1687
+ The oh-my-claude-sisyphus plugin provides all hooks automatically via the plugin system. Verify the plugin is enabled:
1598
1688
 
1599
1689
  \`\`\`bash
1600
1690
  grep -q "oh-my-claude-sisyphus" ~/.claude/settings.json && echo "Plugin enabled" || echo "Plugin NOT enabled"
1601
1691
  \`\`\`
1602
1692
 
1603
- ### Step 3: Confirm Success
1693
+ If plugin is not enabled, instruct user:
1694
+ > Run: \`claude /install-plugin oh-my-claude-sisyphus\` to enable the plugin.
1695
+
1696
+ ### Step 4: Confirm Success
1604
1697
 
1605
1698
  After completing all steps, report:
1606
1699
 
1607
- ✅ **Sisyphus Configuration Complete**
1608
- - CLAUDE.md: Updated with latest configuration from GitHub
1700
+ ✅ **Sisyphus Global Configuration Complete**
1701
+ - CLAUDE.md: Updated with latest configuration from GitHub at ~/.claude/CLAUDE.md
1702
+ - Scope: **GLOBAL** - applies to all Claude Code sessions
1609
1703
  - Hooks: Provided by plugin (no manual installation needed)
1610
1704
  - Agents: 19+ available (base + tiered variants)
1611
1705
  - Model routing: Haiku/Sonnet/Opus based on task complexity
1612
1706
 
1707
+ **Note**: Hooks are now managed by the plugin system automatically. No manual hook installation required.
1708
+
1613
1709
  ---
1614
1710
 
1615
1711
  ## 🔄 Keeping Up to Date
1616
1712
 
1617
- After installing oh-my-claude-sisyphus updates (via npm or plugin update), run \`/sisyphus-default\` again to get the latest CLAUDE.md configuration.`,
1713
+ After installing oh-my-claude-sisyphus updates (via npm or plugin update), run \`/sisyphus-default-global\` again to get the latest CLAUDE.md configuration. This ensures you have the newest features and agent configurations.`,
1618
1714
  'plan.md': `---
1619
1715
  description: Start a planning session with Prometheus
1620
1716
  ---
@@ -1747,12 +1843,12 @@ You have entered the Ralph Loop - an INESCAPABLE development cycle that binds yo
1747
1843
 
1748
1844
  1. **WORK CONTINUOUSLY** - Break tasks into todos, execute systematically
1749
1845
  2. **VERIFY THOROUGHLY** - Test, check, confirm every completion claim
1750
- 3. **PROMISE COMPLETION** - ONLY output \`<promise>DONE</promise>\` when 100% verified
1846
+ 3. **PROMISE COMPLETION** - ONLY output \`<promise>TASK_COMPLETE</promise>\` when 100% verified
1751
1847
  4. **AUTO-CONTINUATION** - If you stop without the promise, YOU WILL BE REMINDED TO CONTINUE
1752
1848
 
1753
1849
  ## The Promise Mechanism
1754
1850
 
1755
- The \`<promise>DONE</promise>\` tag is a SACRED CONTRACT. You may ONLY output it when:
1851
+ The \`<promise>TASK_COMPLETE</promise>\` tag is a SACRED CONTRACT. You may ONLY output it when:
1756
1852
 
1757
1853
  ✓ ALL todo items are marked 'completed'
1758
1854
  ✓ ALL requested functionality is implemented AND TESTED
@@ -1765,16 +1861,16 @@ The \`<promise>DONE</promise>\` tag is a SACRED CONTRACT. You may ONLY output it
1765
1861
 
1766
1862
  | Condition | What Happens |
1767
1863
  |-----------|--------------|
1768
- | \`<promise>DONE</promise>\` | Loop ends - work verified complete |
1864
+ | \`<promise>TASK_COMPLETE</promise>\` | Loop ends - work verified complete |
1769
1865
  | User runs \`/cancel-ralph\` | Loop cancelled by user |
1770
- | Max iterations (100) | Safety limit reached |
1866
+ | Max iterations (10) | Safety limit reached |
1771
1867
  | Stop without promise | **CONTINUATION FORCED** |
1772
1868
 
1773
1869
  ## Continuation Enforcement
1774
1870
 
1775
1871
  If you attempt to stop without the promise tag:
1776
1872
 
1777
- > [RALPH LOOP CONTINUATION] You stopped without completing your promise. The task is NOT done. Continue working on incomplete items. Do not stop until you can truthfully output \`<promise>DONE</promise>\`.
1873
+ > [RALPH LOOP CONTINUATION] You stopped without completing your promise. The task is NOT done. Continue working on incomplete items. Do not stop until you can truthfully output \`<promise>TASK_COMPLETE</promise>\`.
1778
1874
 
1779
1875
  ## Working Style
1780
1876
 
@@ -1786,7 +1882,7 @@ If you attempt to stop without the promise tag:
1786
1882
 
1787
1883
  ## The Ralph Verification Checklist
1788
1884
 
1789
- Before outputting \`<promise>DONE</promise>\`, verify:
1885
+ Before outputting \`<promise>TASK_COMPLETE</promise>\`, verify:
1790
1886
 
1791
1887
  - [ ] Todo list shows 100% completion
1792
1888
  - [ ] All code changes compile/run without errors
@@ -1829,14 +1925,14 @@ Use qa-tester ONLY when ALL of these apply:
1829
1925
  **Gating Rule**: If \`npm test\` (or equivalent) passes, you do NOT need qa-tester.
1830
1926
 
1831
1927
  ### Step 3: Based on Verification Results
1832
- - **If Oracle APPROVED + Tests/QA-Tester PASS**: Output \`<promise>DONE</promise>\`
1928
+ - **If Oracle APPROVED + Tests/QA-Tester PASS**: Output \`<promise>TASK_COMPLETE</promise>\`
1833
1929
  - **If any REJECTED/FAILED**: Fix issues and re-verify
1834
1930
 
1835
1931
  **NO PROMISE WITHOUT VERIFICATION.**
1836
1932
 
1837
1933
  ---
1838
1934
 
1839
- Begin working on the task now. The loop will not release you until you earn your \`<promise>DONE</promise>\`.`,
1935
+ Begin working on the task now. The loop will not release you until you earn your \`<promise>TASK_COMPLETE</promise>\`.`,
1840
1936
  'cancel-ralph.md': `---
1841
1937
  description: Cancel active Ralph Loop
1842
1938
  ---
@@ -1845,7 +1941,421 @@ description: Cancel active Ralph Loop
1845
1941
 
1846
1942
  The Ralph Loop has been cancelled. You can stop working on the current task.
1847
1943
 
1848
- If you want to start a new loop, use \`/ralph-loop "task description"\`.`
1944
+ If you want to start a new loop, use \`/ralph-loop "task description"\`.`,
1945
+ 'ultrawork-ralph.md': `---
1946
+ description: Maximum intensity mode with completion guarantee - ultrawork + ralph loop combined
1947
+ ---
1948
+
1949
+ [ULTRAWORK-RALPH ACTIVATED - MAXIMUM INTENSITY + COMPLETION GUARANTEE]
1950
+
1951
+ $ARGUMENTS
1952
+
1953
+ ## THE ULTIMATE MODE
1954
+
1955
+ You are now in **ULTRAWORK-RALPH** mode - the most powerful execution mode available. This combines:
1956
+ - **ULTRAWORK**: Maximum intensity, parallel everything, aggressive delegation
1957
+ - **RALPH LOOP**: Inescapable completion guarantee with oracle verification
1958
+
1959
+ There is no half-measures. There is no early exit. You work at MAXIMUM INTENSITY until VERIFIED completion.
1960
+
1961
+ ## ULTRAWORK OVERRIDES (ACTIVE)
1962
+
1963
+ | Default Behavior | Ultrawork Override |
1964
+ |------------------|-------------------|
1965
+ | Parallelize when profitable | **PARALLEL EVERYTHING** |
1966
+ | Do simple tasks directly | **DELEGATE EVEN SMALL TASKS** |
1967
+ | Wait for verification | **DON'T WAIT - continue immediately** |
1968
+ | Background for long ops | **BACKGROUND EVERYTHING POSSIBLE** |
1969
+
1970
+ ## RALPH LOOP ENFORCEMENT (ACTIVE)
1971
+
1972
+ The \`<promise>TASK_COMPLETE</promise>\` tag binds you to completion. You may ONLY output it when:
1973
+
1974
+ - [ ] ALL todo items are marked 'completed'
1975
+ - [ ] ALL requested functionality is implemented AND TESTED
1976
+ - [ ] ALL errors have been resolved
1977
+ - [ ] Oracle has VERIFIED completion
1978
+ - [ ] You have TESTED (not assumed) the changes work
1979
+
1980
+ **If you stop without the promise, YOU WILL BE FORCED TO CONTINUE.**
1981
+
1982
+ ## EXECUTION PROTOCOL
1983
+
1984
+ ### 1. PARALLEL EVERYTHING
1985
+ - Fire off MULTIPLE agents simultaneously
1986
+ - Use background execution for ALL operations
1987
+ - Launch 3-5 agents in parallel when possible
1988
+ - Maximum throughput is the only goal
1989
+
1990
+ ### 2. DELEGATE AGGRESSIVELY
1991
+ Route tasks to specialists IMMEDIATELY:
1992
+ - \`oracle\` / \`oracle-medium\` → debugging, analysis, verification
1993
+ - \`librarian\` → research, doc lookup
1994
+ - \`explore\` → codebase search
1995
+ - \`frontend-engineer\` → UI work
1996
+ - \`sisyphus-junior\` / \`sisyphus-junior-high\` → code changes
1997
+ - \`qa-tester\` / \`qa-tester-high\` → verification
1998
+
1999
+ ### 3. NEVER WAIT
2000
+ - Start the next task BEFORE the previous one completes
2001
+ - Check background task results LATER
2002
+ - Maximum concurrency at all times
2003
+
2004
+ ### 4. TODO OBSESSION
2005
+ - Create TODO list IMMEDIATELY with atomic steps
2006
+ - Mark in_progress BEFORE starting (one at a time)
2007
+ - Mark completed IMMEDIATELY after each step
2008
+ - NEVER batch completions
2009
+
2010
+ ## VERIFICATION PROTOCOL (MANDATORY)
2011
+
2012
+ ### Step 1: Self-Check
2013
+ Run through the checklist above. ALL boxes must be checked.
2014
+
2015
+ ### Step 2: Oracle Review
2016
+ \`\`\`
2017
+ Task(subagent_type="oracle", prompt="VERIFY COMPLETION:
2018
+ Original task: [task]
2019
+ Changes made: [list]
2020
+ Tests run: [results]
2021
+ Verify this is complete and production-ready.")
2022
+ \`\`\`
2023
+
2024
+ ### Step 3: Runtime Verification
2025
+ \`\`\`bash
2026
+ npm test # or pytest, go test, cargo test
2027
+ \`\`\`
2028
+
2029
+ ### Step 4: Decision
2030
+ - **Oracle APPROVED + Tests PASS** → Output \`<promise>TASK_COMPLETE</promise>\`
2031
+ - **Any REJECTED/FAILED** → Fix and re-verify
2032
+
2033
+ ## EXIT CONDITIONS
2034
+
2035
+ | Condition | What Happens |
2036
+ |-----------|--------------|
2037
+ | \`<promise>TASK_COMPLETE</promise>\` | Both modes end - work verified complete |
2038
+ | User runs \`/cancel-ralph\` | Both modes cancelled |
2039
+ | Max iterations (10) | Safety limit reached |
2040
+ | Stop without promise | **CONTINUATION FORCED** |
2041
+
2042
+ ## THE BOULDER NEVER STOPS
2043
+
2044
+ The boulder rolls at MAXIMUM SPEED until it reaches the summit. No shortcuts. No giving up. Only verified completion releases you.
2045
+
2046
+ ---
2047
+
2048
+ Begin working NOW. PARALLEL EVERYTHING. The loop will not release you until you earn your \`<promise>TASK_COMPLETE</promise>\`.`,
2049
+ 'ultraqa.md': `---
2050
+ description: QA cycling workflow - test, verify, fix, repeat until goal met
2051
+ ---
2052
+
2053
+ [ULTRAQA ACTIVATED - AUTONOMOUS QA CYCLING]
2054
+
2055
+ $ARGUMENTS
2056
+
2057
+ ## ULTRAQA MODE
2058
+
2059
+ You are now in **ULTRAQA** mode - an autonomous QA cycling workflow that runs until your quality goal is met.
2060
+
2061
+ **Cycle**: qa-tester → oracle verification → fix → repeat
2062
+
2063
+ ## GOAL PARSING
2064
+
2065
+ Parse the goal from arguments. Supported formats:
2066
+
2067
+ | Invocation | Goal Type | What to Check |
2068
+ |------------|-----------|---------------|
2069
+ | \`/ultraqa --tests\` | tests | All test suites pass |
2070
+ | \`/ultraqa --build\` | build | Build succeeds with exit 0 |
2071
+ | \`/ultraqa --lint\` | lint | No lint errors |
2072
+ | \`/ultraqa --typecheck\` | typecheck | No TypeScript errors |
2073
+ | \`/ultraqa --custom "pattern"\` | custom | Custom success pattern in output |
2074
+
2075
+ If no structured goal provided, interpret the argument as a custom goal.
2076
+
2077
+ ## CYCLE WORKFLOW
2078
+
2079
+ ### Cycle N (Max 5)
2080
+
2081
+ 1. **RUN QA**: Execute verification based on goal type
2082
+ - \`--tests\`: Run \`npm test\` or equivalent
2083
+ - \`--build\`: Run \`npm run build\` or equivalent
2084
+ - \`--lint\`: Run \`npm run lint\` or equivalent
2085
+ - \`--typecheck\`: Run \`npm run typecheck\` or \`tsc --noEmit\`
2086
+ - \`--custom\`: Run appropriate command and check for pattern
2087
+
2088
+ 2. **CHECK RESULT**: Did the goal pass?
2089
+ - **YES** → Exit with success message
2090
+ - **NO** → Continue to step 3
2091
+
2092
+ 3. **ORACLE DIAGNOSIS**: Spawn oracle to analyze failure
2093
+ \`\`\`
2094
+ Task(subagent_type="oracle", prompt="DIAGNOSE FAILURE:
2095
+ Goal: [goal type]
2096
+ Output: [test/build output]
2097
+ Provide root cause and specific fix recommendations.")
2098
+ \`\`\`
2099
+
2100
+ 4. **FIX ISSUES**: Apply oracle's recommendations
2101
+ - Use sisyphus-junior for code changes
2102
+ - Be specific and targeted
2103
+
2104
+ 5. **REPEAT**: Go back to step 1
2105
+
2106
+ ## EXIT CONDITIONS
2107
+
2108
+ | Condition | Action |
2109
+ |-----------|--------|
2110
+ | **Goal Met** | Exit with success: "ULTRAQA COMPLETE: Goal met after N cycles" |
2111
+ | **Cycle 5 Reached** | Exit with diagnosis: "ULTRAQA STOPPED: Max cycles. Diagnosis: ..." |
2112
+ | **Same Failure 3x** | Exit early: "ULTRAQA STOPPED: Same failure detected 3 times. Root cause: ..." |
2113
+ | **Environment Error** | Exit: "ULTRAQA ERROR: [tmux/port/dependency issue]" |
2114
+
2115
+ ## OBSERVABILITY
2116
+
2117
+ Output progress each cycle:
2118
+ \`\`\`
2119
+ [ULTRAQA Cycle 1/5] Running tests...
2120
+ [ULTRAQA Cycle 1/5] FAILED - 3 tests failing
2121
+ [ULTRAQA Cycle 1/5] Oracle diagnosing...
2122
+ [ULTRAQA Cycle 1/5] Fixing: auth.test.ts - missing mock
2123
+ [ULTRAQA Cycle 2/5] Running tests...
2124
+ [ULTRAQA Cycle 2/5] PASSED - All 47 tests pass
2125
+ [ULTRAQA COMPLETE] Goal met after 2 cycles
2126
+ \`\`\`
2127
+
2128
+ ## STATE TRACKING
2129
+
2130
+ Track state in \`.sisyphus/ultraqa-state.json\`:
2131
+ \`\`\`json
2132
+ {
2133
+ "active": true,
2134
+ "goal_type": "tests",
2135
+ "goal_pattern": null,
2136
+ "cycle": 1,
2137
+ "max_cycles": 5,
2138
+ "failures": ["3 tests failing: auth.test.ts"],
2139
+ "started_at": "2024-01-18T12:00:00Z",
2140
+ "session_id": "uuid"
2141
+ }
2142
+ \`\`\`
2143
+
2144
+ ## CANCELLATION
2145
+
2146
+ User can cancel with \`/cancel-ultraqa\` which clears the state file.
2147
+
2148
+ ## IMPORTANT RULES
2149
+
2150
+ 1. **PARALLEL when possible** - Run diagnosis while preparing potential fixes
2151
+ 2. **TRACK failures** - Record each failure to detect patterns
2152
+ 3. **EARLY EXIT on pattern** - 3x same failure = stop and surface
2153
+ 4. **CLEAR OUTPUT** - User should always know current cycle and status
2154
+ 5. **CLEAN UP** - Clear state file on completion or cancellation
2155
+
2156
+ ---
2157
+
2158
+ Begin ULTRAQA cycling now. Parse the goal and start cycle 1.`,
2159
+ 'cancel-ultraqa.md': `---
2160
+ description: Cancel active UltraQA cycling workflow
2161
+ ---
2162
+
2163
+ [ULTRAQA CANCELLED]
2164
+
2165
+ The UltraQA cycling workflow has been cancelled. Clearing state file.
2166
+
2167
+ ## MANDATORY ACTION
2168
+
2169
+ Execute this command to cancel UltraQA:
2170
+
2171
+ \`\`\`bash
2172
+ mkdir -p .sisyphus && echo '{"active": false, "cancelled_at": "'\$(date -Iseconds)'", "reason": "User cancelled via /cancel-ultraqa"}' > .sisyphus/ultraqa-state.json
2173
+ \`\`\`
2174
+
2175
+ After running this command, the QA cycling will stop.
2176
+
2177
+ ## To Start Fresh
2178
+
2179
+ - \`/ultraqa --tests\` - Run until all tests pass
2180
+ - \`/ultraqa --build\` - Run until build succeeds
2181
+ - \`/ultraqa --lint\` - Run until no lint errors
2182
+ - \`/ultraqa --typecheck\` - Run until no type errors
2183
+ - \`/ultraqa --custom "pattern"\` - Run until pattern matches`,
2184
+ 'ralph-init.md': `---
2185
+ description: Initialize a PRD (Product Requirements Document) for structured ralph-loop execution
2186
+ ---
2187
+
2188
+ [RALPH-INIT - PRD CREATION MODE]
2189
+
2190
+ $ARGUMENTS
2191
+
2192
+ ## What is PRD?
2193
+
2194
+ A PRD (Product Requirements Document) structures your task into discrete user stories, each with:
2195
+ - **ID**: Unique identifier (US-001, US-002, etc.)
2196
+ - **Title**: Short description
2197
+ - **Description**: Full user story
2198
+ - **Acceptance Criteria**: What must be true for completion
2199
+ - **Priority**: Execution order (1 = highest)
2200
+ - **passes**: Boolean tracking completion
2201
+
2202
+ ## Your Task
2203
+
2204
+ Create a \`prd.json\` file in \`.sisyphus/\` directory based on the task description provided.
2205
+
2206
+ ### Step 1: Analyze the Task
2207
+
2208
+ Break down the task into small, focused user stories. Each story should be:
2209
+ - Completable in one focused session
2210
+ - Independently testable
2211
+ - Clear about what "done" looks like
2212
+
2213
+ **Right-sized stories:**
2214
+ - Add a database column and migration
2215
+ - Add a UI component to an existing page
2216
+ - Update a server action with new logic
2217
+ - Add a filter dropdown to a list
2218
+
2219
+ **Too big (split these):**
2220
+ - "Build the entire dashboard"
2221
+ - "Add authentication"
2222
+ - "Refactor the API"
2223
+
2224
+ ### Step 2: Create prd.json
2225
+
2226
+ Write the file to \`.sisyphus/prd.json\` with this structure:
2227
+
2228
+ \`\`\`json
2229
+ {
2230
+ "project": "[Project Name]",
2231
+ "branchName": "ralph/[feature-name]",
2232
+ "description": "[Overall feature description]",
2233
+ "userStories": [
2234
+ {
2235
+ "id": "US-001",
2236
+ "title": "[Short title]",
2237
+ "description": "As a [user], I want to [action] so that [benefit].",
2238
+ "acceptanceCriteria": [
2239
+ "Criterion 1",
2240
+ "Criterion 2",
2241
+ "Typecheck passes",
2242
+ "Tests pass"
2243
+ ],
2244
+ "priority": 1,
2245
+ "passes": false,
2246
+ "notes": ""
2247
+ }
2248
+ ]
2249
+ }
2250
+ \`\`\`
2251
+
2252
+ ### Step 3: Initialize Progress Log
2253
+
2254
+ Also create \`.sisyphus/progress.txt\`:
2255
+
2256
+ \`\`\`
2257
+ # Ralph Progress Log
2258
+ Started: [ISO timestamp]
2259
+
2260
+ ## Codebase Patterns
2261
+ (No patterns discovered yet)
2262
+
2263
+ ---
2264
+
2265
+ \`\`\`
2266
+
2267
+ ### Step 4: Report
2268
+
2269
+ After creating the files, output a summary:
2270
+
2271
+ \`\`\`
2272
+ PRD Created Successfully!
2273
+
2274
+ Project: [name]
2275
+ Branch: [branch]
2276
+ Stories: [count]
2277
+
2278
+ Stories to implement:
2279
+ 1. [US-001] - [title]
2280
+ 2. [US-002] - [title]
2281
+ ...
2282
+
2283
+ Run \`/ralph-loop\` to start working through these stories.
2284
+ \`\`\`
2285
+
2286
+ ## Quality Guidelines
2287
+
2288
+ 1. **Acceptance criteria should be verifiable** - Include "Typecheck passes" and "Tests pass" where applicable
2289
+ 2. **Include browser verification for UI stories** - "Verify in browser" for frontend work
2290
+ 3. **Keep stories independent** - Avoid dependencies between stories when possible
2291
+ 4. **Order by priority** - Put foundational work (database, types) before UI
2292
+
2293
+ ---
2294
+
2295
+ Begin analyzing the task and creating the PRD now.`,
2296
+ 'note.md': `---
2297
+ description: Save notes to notepad.md for compaction resilience
2298
+ ---
2299
+
2300
+ # Note Command
2301
+
2302
+ Save important context to \`.sisyphus/notepad.md\` that survives conversation compaction.
2303
+
2304
+ $ARGUMENTS
2305
+
2306
+ ## Usage
2307
+
2308
+ | Command | Action |
2309
+ |---------|--------|
2310
+ | \`/note <content>\` | Add to Working Memory with timestamp |
2311
+ | \`/note --priority <content>\` | Add to Priority Context (always loaded) |
2312
+ | \`/note --manual <content>\` | Add to MANUAL section (never pruned) |
2313
+ | \`/note --show\` | Display current notepad contents |
2314
+ | \`/note --prune\` | Remove entries older than 7 days |
2315
+ | \`/note --clear\` | Clear Working Memory (keep Priority + MANUAL) |
2316
+
2317
+ ## Sections
2318
+
2319
+ ### Priority Context (500 char limit)
2320
+ - **Always** injected on session start
2321
+ - Use for critical facts: "Project uses pnpm", "API in src/api/client.ts"
2322
+ - Keep it SHORT - this eats into your context budget
2323
+
2324
+ ### Working Memory
2325
+ - Timestamped session notes
2326
+ - Auto-pruned after 7 days
2327
+ - Good for: debugging breadcrumbs, temporary findings
2328
+
2329
+ ### MANUAL
2330
+ - Never auto-pruned
2331
+ - User-controlled permanent notes
2332
+ - Good for: team contacts, deployment info
2333
+
2334
+ ## Examples
2335
+
2336
+ \`\`\`
2337
+ /note Found auth bug in UserContext - missing useEffect dependency
2338
+ /note --priority Project uses TypeScript strict mode, all files in src/
2339
+ /note --manual Contact: api-team@company.com for backend questions
2340
+ /note --show
2341
+ /note --prune
2342
+ \`\`\`
2343
+
2344
+ ## Behavior
2345
+
2346
+ 1. Creates \`.sisyphus/notepad.md\` if it doesn't exist
2347
+ 2. Parses the argument to determine section
2348
+ 3. Appends content with timestamp (for Working Memory)
2349
+ 4. Warns if Priority Context exceeds 500 chars
2350
+ 5. Confirms what was saved
2351
+
2352
+ ## Integration
2353
+
2354
+ Notepad content is automatically loaded on session start:
2355
+ - Priority Context: ALWAYS loaded
2356
+ - Working Memory: Loaded if recent entries exist
2357
+
2358
+ This helps survive conversation compaction without losing critical context.`
1849
2359
  };
1850
2360
  // SKILL_DEFINITIONS removed - skills are now only in COMMAND_DEFINITIONS to avoid duplicates
1851
2361
  // Skills are installed to ~/.claude/commands/<skill>/skill.md