From 775bfec2d5019b8fc4c7e78f0d36c1080e82e220 Mon Sep 17 00:00:00 2001 From: uroma Date: Tue, 27 Jan 2026 21:08:50 +0000 Subject: [PATCH] Update README and Installer to v3.0 - Complete Framework Integration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## README.md Updates (v3.0.0) - Updated version from 2.0.0 to 3.0.0 - Updated feature counts: * Skills: 280 → 291 * Commands: 3 → 21 * MCP Servers: 0 → 10 - Added Prometheus Integration section (6 commands + 4 tools) - Added Dexto Integration section (12 commands + 5 tools) - Added Clawd Autonomous Gateway section - Added Intelligent Auto-Routing System with pattern table - Updated feature badges to reflect v3.0.0 - Comprehensive documentation of all agent frameworks ## supercharge.sh Installer Updates (v3.0) Major upgrade to installer script with complete framework support: ### New Installation Functions - install_ralph_orchestrator() - Ralph autonomous agent - install_prometheus_integration() - Prometheus code analysis (6 commands) - install_dexto_integration() - Dexto multi-agent harness (12 commands) - install_clawd_gateway() - Clawd autonomous gateway with Python venv - configure_mcp_servers() - MCP servers configuration (10 servers) ### Updated Documentation - Banner updated to show v3.0 with feature counts - All command references updated (21 total commands listed) - Installation summary shows all frameworks - Auto-routing system documented - Usage examples added for each framework ### Feature Breakdown in Installer - 291 Custom Skills (cognitive, development, UI/UX, agents) - RalphLoop Autonomous Agent (iterative architecture) - Prometheus Code Analysis (bug, feature, context, edit, test, classify) - Dexto Multi-Agent Harness (code, database, github, pdf, images, video, music, podcast, research, triage, explore) - Clawd Autonomous Gateway (fully autonomous execution) - Intelligent Auto-Routing System (pattern-based agent selection) - Multi-AI Consultation (Qwen integration) - 10 MCP Servers (filesystem, arc, superpowers, tool-discovery, ui-ux, cognitive-context, etc.) - Plugin Marketplace Setup ## Auto-Routing Patterns Documented The installer now documents intelligent routing patterns: - "bug", "fix", "error" → /prometheus-bug - "github", "pr", "issue" → /dexto-github - "generate image", "ai art" → /dexto-nano-banana - "architecture", "design system" → /ralph - "autonomous", "automatically" → /clawd - ... and 12+ more patterns ## Installation Experience Improvements - Better dependency checking for all frameworks - Python virtual environment setup for Clawd - MCP servers registry configuration - Comprehensive command reference in summary - Usage examples showing auto-routing in action The installer now provides a complete one-command setup for all 21 integrated commands across 4 major frameworks (Clawd, Ralph, Prometheus, Dexto) with intelligent auto-routing powered by hooks. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- README.md | 1229 +++++------------ .../2025-11-22-opencode-support-design.md | 294 ++++ ...5-11-22-opencode-support-implementation.md | 1095 +++++++++++++++ ...-skills-improvements-from-user-feedback.md | 711 ++++++++++ .../agent_capability_registry.cpython-312.pyc | Bin 0 -> 23227 bytes .../dynamic_agent_selector.cpython-312.pyc | Bin 0 -> 25629 bytes .../meta_agent_orchestrator.cpython-312.pyc | Bin 0 -> 28514 bytes .../ralph_agent_integration.cpython-312.pyc | Bin 0 -> 24570 bytes supercharge.sh | 251 ++-- 9 files changed, 2580 insertions(+), 1000 deletions(-) create mode 100644 plugins/cache/superpowers/superpowers/4.0.3/docs/plans/2025-11-22-opencode-support-design.md create mode 100644 plugins/cache/superpowers/superpowers/4.0.3/docs/plans/2025-11-22-opencode-support-implementation.md create mode 100644 plugins/cache/superpowers/superpowers/4.0.3/docs/plans/2025-11-28-skills-improvements-from-user-feedback.md create mode 100644 skills/ralph/__pycache__/agent_capability_registry.cpython-312.pyc create mode 100644 skills/ralph/__pycache__/dynamic_agent_selector.cpython-312.pyc create mode 100644 skills/ralph/__pycache__/meta_agent_orchestrator.cpython-312.pyc create mode 100644 skills/ralph/__pycache__/ralph_agent_integration.cpython-312.pyc diff --git a/README.md b/README.md index c9248db6..a3c98db5 100644 --- a/README.md +++ b/README.md @@ -1,913 +1,316 @@ -# SuperCharged Claude Code - Ultimate Upgrade Package - -> 🚀 Transform your Claude Code into an autonomous AI development powerhouse with **280 custom skills**, autonomous agents, multi-framework integration, and Z.AI GLM model support. **v2.0.0 - Framework Integration Edition**. - -[![Claude Code](https://img.shields.io/badge/Claude-Code-Supercharged-blue)](https://claude.com/claude-code) -[![Version](https://img.shields.io/badge/Version-2.0.0-green)](https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade) -[![Skills](https://img.shields.io/badge/Skills-280-brightgreen)](https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade) -[![Agents](https://img.shields.io/badge/Agents-43-orange)](https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade) -[![License](https://img.shields.io/badge/License-MIT-purple)](LICENSE) -[![Gitea](https://img.shields.io/badge/Platform-Gitea-red)](https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade) - -## ⚡ Quick Installation - -### Linux / macOS (Bash) -```bash -# Clone the repository -git clone https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade.git -cd SuperCharged-Claude-Code-Upgrade - -# 🎯 Run the installer -./supercharge.sh -``` - -### Windows Installation Options - -> **⚠️ Windows Users:** The PowerShell installer is **experimental** and may have bugs. We strongly recommend using **WSL** (Option 2) for a reliable installation experience. - -#### Option 1: PowerShell Installer ⚠️ **Experimental - Use WSL Instead** -```powershell -# Download and run the native PowerShell installer -irm https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/branch/main/install-windows.ps1 | pwsh -ExecutionPolicy Bypass - - -# OR download and run manually -Invoke-WebRequest -Uri "https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/branch/main/install-windows.ps1" -OutFile "install-windows.ps1" -pwsh -ExecutionPolicy Bypass -File install-windows.ps1 - -# OR right-click install-windows.ps1 and select "Run with PowerShell" -``` - -#### Option 2: WSL (Windows Subsystem for Linux) ⭐ **Recommended** -```bash -# Clone and run in WSL -wsl bash -c "git clone https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade.git && cd SuperCharged-Claude-Code-Upgrade && ./supercharge.sh" -``` - -#### Option 3: Git Bash -```bash -# Clone the repository -git clone https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade.git -cd SuperCharged-Claude-Code-Upgrade - -# Run the installer -./supercharge.sh -``` - -#### Option 4: Manual Download -```powershell -# 1. Download and extract the ZIP from: -# https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/archive/refs/heads/main.zip - -# 2. Open PowerShell and navigate to extracted folder -cd path\to\SuperCharged-Claude-Code-Upgrade - -# 3. Run the installer -pwsh -ExecutionPolicy Bypass -File install-windows.ps1 -``` - -> **📝 Note:** The PowerShell installer (Option 1) downloads everything automatically. For bash/WSL options, you must clone the repository first since the script needs access to local files. - ---- - -## ⚡ Why SuperCharge Claude Code? - -**Claude Code is powerful. SuperCharge makes it unstoppable.** - -This comprehensive customization package transforms your Claude Code installation with: - -- ✨ **280 Custom Skills** - Cognitive enhancement, development workflows, UI/UX intelligence, desktop development -- 🤖 **43 Autonomous Agents** - RalphLoop "Tackle Until Solved" + 39 specialized agents -- 🔥 **5 Framework Integration** - Chippery, OpenAgentsControl, AGIAgent, Agno, OS-Copilot -- 🌐 **Z.AI API Integration** - GLM-4.5-air and GLM-4.7 model support with 10% OFF discount -- 🔌 **MCP Servers** - Image analysis, web search, GitHub integration built-in -- 🎯 **Agent Management** - Complete library with sync capabilities -- 🪝 **Smart Hooks** - Session automation and multi-AI consultation -- 🚀 **Auto-Trigger System** - Intelligent component routing with pattern matching -- 💻 **Tauri Framework** - Build tiny, fast, secure desktop & mobile apps with Rust - -**Perfect for:** Developers, AI enthusiasts, teams building with AI assistants, and anyone wanting to maximize their Claude Code productivity. - -## 🆕 What's New in v2.0.0 - -### Framework Integration -Integrated 5 open-source agent frameworks into Claude Code CLI: - -| Framework | Capability | Benefit | -|-----------|-----------|---------| -| **Chippery** | Smart codebase indexing | 40-60% token reduction via semantic search | -| **OpenAgentsControl** | Plan-first workflow | 6-stage approval process for safety | -| **AGIAgent** | Document generation + MCP | Rich docs (PDF/HTML/DOCX) + 100+ tools | -| **Agno** | Multi-agent orchestration | Parallel execution, A2A communication | -| **OS-Copilot** | Self-improvement | Learning from completed tasks | - -### New Skills (4) -- `auto-dispatcher` - Intelligent component routing -- `autonomous-planning` - Task decomposition -- `codebase-indexer` - Semantic codebase search -- `mcp-client` - MCP protocol client - -### New Agents (4) -- `plan-executor.md` - Plan-first approval workflow -- `orchestrator.md` - Multi-agent orchestration -- `self-learner.md` - Self-improvement agent -- `document-generator.md` - Document generation agent - ---- - -## 🎯 What Gets Installed - -### 🧠 Cognitive Skills -| Skill | Purpose | -|-------|---------| -| `always-use-superpowers` | Auto-applies relevant skills before any action (Priority: 9999) | -| `cognitive-core` | Core cognitive processing framework | -| `cognitive-planner` | Strategic planning and architecture design | -| `cognitive-safety` | Security validation and best practices | - -### 🤖 Autonomous Agents -| Agent | Capability | -|-------|------------| -| **RalphLoop** | Iterates autonomously until task completion | -| **Brainstorming** | Multi-AI collaborative ideation | -| **Test-Driven Development** | Automated TDD workflow | -| **Systematic Debugging** | Step-by-step bug resolution | -| **Verification** | Pre-completion validation checks | - -### 🎨 Development Tools -| Tool | Features | -|------|----------| -| `ui-ux-pro-max` | 50 styles, 21 palettes, 50 font pairings | -| `agent-pipeline-builder` | Multi-agent workflow construction | -| `dispatching-parallel-agents` | Concurrent agent execution | -| `finishing-a-development-branch` | PR and merge automation | -| `tauri` | Cross-platform desktop & mobile apps with Rust backend | - -### 🌐 Integrations -- **Z.AI GLM Models** - glm-4.5-air (fast), glm-4.7 (powerful) -- **Qwen Consultation** - Get second opinions from Qwen models -- **Dev-Browser** - Persistent browser automation -- **MCP Servers** - Vision, search, web reader, GitHub - -### 📁 Installation Structure -``` -~/.claude/ -├── skills/ # 270+ custom skills -├── agents/ # 100+ agent library -├── hooks/ # Session automation -├── commands/ # Custom commands -├── plugins/ # MCP servers & integrations -└── settings.json # Z.AI API configuration - -~/.local/bin/ -└── ralphloop # Ralph Orchestrator wrapper -``` - ---- - -## 📖 Detailed Installation Guide - -### 🎯 SuperCharge Installer (Main Script) - -#### One-Line Installation - -**Linux / macOS:** -```bash -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/supercharge.sh | bash -``` - -**Windows (WSL/Git Bash):** -```bash -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/supercharge.sh | bash -``` - -#### One-Line with Options - -**Linux / macOS:** -```bash -# Skip dependency installation -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/supercharge.sh | bash -s -- --skip-deps - -# Development mode (verbose output) -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/supercharge.sh | bash -s -- --dev-mode -``` - -**Windows (WSL/Git Bash):** -```bash -# Skip dependency installation -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/supercharge.sh | bash -s -- --skip-deps - -# Development mode (verbose output) -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/supercharge.sh | bash -s -- --dev-mode -``` - -#### Manual Installation - -**All Platforms (requires bash):** -```bash -# Clone the repository -git clone https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade.git -cd SuperCharged-Claude-Code-Upgrade - -# Run the supercharge installer -bash supercharge.sh - -# With options -bash supercharge.sh --skip-deps -bash supercharge.sh --dev-mode -``` - -> **🪟 Windows Users:** Use WSL, Git Bash, or run `wsl bash script.sh` after downloading. - -### 🔧 Claude Code + Z.AI Installer (Optional) - -#### One-Line Installation - -**Linux / macOS:** -```bash -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/install-claude-code.sh | bash -``` - -**Windows (WSL/Git Bash):** -```bash -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/install-claude-code.sh | bash -``` - -#### One-Line with Options - -**Linux / macOS / Windows (WSL/Git Bash):** -```bash -# Automatic installation (prompts for API key) -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/install-claude-code.sh | bash -s -- --auto - -# Manual instructions only (no installation) -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/install-claude-code.sh | bash -s -- --manual - -# Configure API only (skip Claude Code installation) -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/install-claude-code.sh | bash -s -- --skip-install -``` - -#### Manual Installation - -**All Platforms (requires bash):** -```bash -# Clone the repository -git clone https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade.git -cd SuperCharged-Claude-Code-Upgrade - -# Run the Claude Code installer -bash install-claude-code.sh --auto - -# Other options -bash install-claude-code.sh --manual # Show instructions only -bash install-claude-code.sh --skip-install # Configure API only -``` - ---- - -## 📋 Available Scripts & Options - -### supercharge.sh - Main SuperCharge Installer -Transforms existing Claude Code with all customizations. - -| Option | Description | -|--------|-------------| -| (default) | Interactive installation with all prompts | -| `--skip-deps` | Skip dependency installation checks | -| `--dev-mode` | Enable verbose output for debugging | - -**One-liners (Linux / macOS / Windows WSL):** -```bash -# Full installation -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/supercharge.sh | bash - -# Skip dependencies -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/supercharge.sh | bash -s -- --skip-deps - -# Verbose mode -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/supercharge.sh | bash -s -- --dev-mode -``` - -### install-claude-code.sh - Claude Code + Z.AI Installer -Installs Claude Code and configures Z.AI GLM models or Anthropic API. - -**New Features:** -- 🔀 **Provider Switching** - Switch between Anthropic and Z.AI APIs -- 🔑 **API Key Update** - Update existing API keys easily -- 🧩 **Coding-Helper Addons** - Optional Z.AI coding-helper installation - -| Option | Description | -|--------|-------------| -| `--auto` (default) | Automated installation with provider selection | -| `--manual` | Show manual installation steps only | -| `--skip-install` | Skip Claude Code install, configure API only | - -**One-liners:** -```bash -# Auto install with provider selection -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/install-claude-code.sh | bash - -# Show manual instructions -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/install-claude-code.sh | bash -s -- --manual - -# Configure API only (skip Claude Code install) -curl -fsSL https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/raw/main/install-claude-code.sh | bash -s -- --skip-install -``` - -**Provider Switching:** -If Claude Code is already installed, the script will: -1. Detect your current API provider (Anthropic or Z.AI) -2. Offer to switch between providers -3. Allow you to update your API key -4. Optionally install Z.AI coding-helper addons - -**Z.AI Coding-Helper Features:** -- Interactive wizard for easy setup -- Multi-tool management (Claude Code, OpenCode, etc.) -- MCP service configuration -- API key management for Global and China plans -- Bilingual interface (English/Chinese) - ---- - -## 🔧 Claude Code Installation Details - -If you don't have Claude Code installed yet, we've got you covered with **Z.AI API support**. - -### What is Z.AI API? - -[Z.AI](https://docs.z.ai/devpack/tool/claude) provides GLM (General Language Model) models optimized for Claude Code: - -- **glm-4.5-air** - Fast, efficient model (Haiku class) - ideal for quick iterations -- **glm-4.7** - Powerful model (Sonnet/Opus class) - for complex tasks - -> [!TIP] -> **🎁 Grab 10% OFF Token for z.ai coding plan**: [https://z.ai/subscribe?ic=R0K78RJKNW](https://z.ai/subscribe?ic=R0K78RJKNW) - -### Manual Claude Code Installation - -```bash -# 1. Install Claude Code via npm -npm install -g @anthropic-ai/claude-code - -# 2. Configure Z.AI API in ~/.claude/settings.json: -{ - "env": { - "ANTHROPIC_API_KEY": "your-zai-api-key-here", - "ANTHROPIC_DEFAULT_HAIKU_MODEL": "glm-4.5-air", - "ANTHROPIC_DEFAULT_SONNET_MODEL": "glm-4.7", - "ANTHROPIC_DEFAULT_OPUS_MODEL": "glm-4.7" - } -} - -# 3. Start Claude Code -claude - -# 4. Check model status -/status -``` - -### Documentation -- **Z.AI Official Docs**: https://docs.z.ai/devpack/tool/claude -- **Claude Code Docs**: https://docs.anthropic.com/en/docs/claude-code/overview - ---- - -## 💡 Usage Examples - -### RalphLoop - Autonomous Agent - -```bash -# Let Ralph tackle complex problems autonomously -claude -> /ralph "Design a microservices architecture for an e-commerce platform" - -# Ralph iterates until completion: -# - Creates .ralph/PROMPT.md with success criteria -# - Iterates continuously until all criteria met -# - Updates .ralph/state.json with progress -# - Outputs final result to .ralph/iterations/final.md -``` - -**Configuration:** -```bash -export RALPH_AGENT=claude # Agent selection -export RALPH_MAX_ITERATIONS=100 # Max iterations -export RALPH_MAX_RUNTIME=14400 # 4 hours -export RALPH_VERBOSE=true # Debug output -``` - -### Multi-AI Brainstorming - -```bash -> /brainstorming "Create a viral TikTok marketing strategy" - -# Collaborates with multiple AI perspectives: -# - Content strategist (copy & messaging) -# - SEO expert (keywords & optimization) -# - Social media manager (platforms & tactics) -# - Product manager (goals & metrics) -# - Developer (implementation) -``` - -### Test-Driven Development - -```bash -> /test-driven-development "Implement user authentication" - -# Automated TDD workflow: -# 1. Write failing tests -# 2. Implement minimal code -# 3. Refactor while tests green -``` - -### Systematic Debugging - -```bash -> /systematic-debugging "Database connection timing out" - -# Step-by-step resolution: -# 1. Gather error information -# 2. Form hypotheses -# 3. Test each hypothesis -# 4. Verify fix doesn't break functionality -``` - ---- - -## 🎨 UI/UX Intelligence - -The `ui-ux-pro-max` skill provides comprehensive design capabilities: - -### 50 Design Styles -Glassmorphism, Claymorphism, Neumorphism, Brutalism, Minimalism, Bento Grid, Dark Mode, Skeuomorphism, Flat Design, and more... - -### 21 Color Palettes -Pre-configured themes for instant visual consistency - -### 50 Font Pairings -Typographic combinations proven to work well together - -### 9 Tech Stacks -React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui - ---- - -## ⚙️ Configuration - -### Environment Variables - -```bash -# Ralph Configuration -export RALPH_AGENT=claude # claude|gemini|kiro|q|auto -export RALPH_MAX_ITERATIONS=100 # Maximum iterations -export RALPH_MAX_RUNTIME=14400 # Max runtime (4 hours) - -# Qwen Consultation -export QWEN_CONSULT_MODE=always # always|delegate|off -export QWEN_MODEL=qwen-coder-plus # Model selection -export QWEN_MAX_ITERATIONS=3 # Max consultation iterations - -# Auto Superpowers -export AUTO_SUPERPOWERS=true # Auto-inject context -``` - -### Settings Files - -**~/.claude/settings.json** -```json -{ - "customInstructions": "enabled", - "permissions": { - "allowedTools": ["*"], - "allowedPrompts": ["*"] - } -} -``` - -**~/.claude/hooks.json** -```json -{ - "sessionStart": ["session-start-superpowers.sh"], - "userPromptSubmit": ["qwen-consult.sh", "ralph-auto-trigger.sh"] -} -``` - ---- - -## 📦 Package Contents - -| Component | Count | Description | -|-----------|-------|-------------| -| **Skills** | 270+ | Cognitive, development, UI/UX, autonomous agents, desktop development | -| **Agents** | 100+ | Engineering, marketing, product, testing, design | -| **Hooks** | 5+ | Session automation, multi-AI consultation | -| **Commands** | 3 | /brainstorm, /write-plan, /execute-plan | -| **MCP Servers** | 6 | Vision, search, web reader, GitHub, feedback, usage | -| **Binaries** | 1 | ralphloop wrapper | -| **Size** | 126MB | Complete package | - -### Full Inventory -See [INVENTORY.md](INVENTORY.md) for complete component listing. - ---- - -## 🔍 Troubleshooting - -### Ralph Loop Not Working - -```bash -# Check Ralph installation -ralph --version - -# Reinstall Ralph Orchestrator -pip3 install --upgrade ralph-orchestrator - -# Check RalphLoop wrapper -which ralphloop -ls -la ~/.local/bin/ralphloop -``` - -### Skills Not Loading - -```bash -# Check skills directory -ls -la ~/.claude/skills/ - -# Verify skill syntax -cat ~/.claude/skills/your-skill/SKILL.md - -# Check for errors -claude --debug -``` - -### Claude Code Not Found - -The supercharge script will offer to install Claude Code automatically if not detected. - -```bash -# Or install manually -npm install -g @anthropic-ai/claude-code - -# Then run supercharge again -./supercharge.sh -``` - -### Z.AI API Configuration - -```bash -# Check settings -cat ~/.claude/settings.json | grep ANTHROPIC - -# Verify API key works -curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \ - -H "Authorization: Bearer YOUR_API_KEY" \ - -H "Content-Type: application/json" \ - -d '{"model":"glm-4.7","messages":[{"role":"user","content":"test"}]}' -``` - ---- - -## 🔄 Updates & Maintenance - -### Update SuperCharge Package - -```bash -cd SuperCharged-Claude-Code-Upgrade -git pull origin main -./supercharge.sh -``` - -### Update Agents - -```bash -~/.claude/scripts/sync-agents.sh -``` - -### Backup Current Setup - -```bash -~/.claude/agents/export-claude-customizations.sh -``` - ---- - -## 🗑️ Uninstallation - -```bash -# Remove customizations -rm -rf ~/.claude/skills/* -rm -rf ~/.claude/agents/* -rm -rf ~/.claude/hooks/* -rm -rf ~/.claude/commands/* -rm -rf ~/.claude/plugins/* -rm ~/.claude/hooks.json -rm ~/.local/bin/ralphloop - -# Restore from backup if needed -cp -r ~/.claude-backup-YYYYMMDD_HHMMSS/* ~/.claude/ -``` - ---- - -## 🤝 Contributing - -Contributions welcome! Please: - -1. Fork the repository -2. Create a feature branch (`git checkout -b feature/amazing-feature`) -3. Commit your changes (`git commit -m 'Add amazing feature'`) -4. Push to the branch (`git push origin feature/amazing-feature`) -5. Open a Pull Request - -### Adding Custom Skills - -Create `~/.claude/skills/your-skill/SKILL.md`: - -```markdown -# Your Custom Skill - -## When to Use -Use this skill when... - -## What It Does -This skill provides... -``` - ---- - -## 🔧 Ralph Orchestrator - Autonomous "Tackle Until Solved" Agent - -### What is Ralph Orchestrator? - -**Ralph Orchestrator** is a Python package that enables autonomous agent looping - the "Tackle Until Solved" capability that powers the `/ralph` command in this package. - -### How Ralph Works - -``` -┌─────────────────────────────────────────────────────────┐ -│ Ralph Orchestrator │ -│ "Tackle Until Solved" │ -├─────────────────────────────────────────────────────────┤ -│ │ -│ 1. Analyze Task ──────> 2. Generate Approach │ -│ │ │ │ -│ ▼ ▼ │ -│ 3. Execute Step ──────> 4. Validate Result │ -│ │ │ │ -│ │ Complete? ────────No──┤ │ -│ │ │ │ -│ │ Yes ▼ │ -│ └────────────────> 5. Output Solution │ -│ │ -└─────────────────────────────────────────────────────────┘ -``` - -### Ralph Dependency - -| Component | Status | Notes | -|-----------|--------|-------| -| **Python Package** | Required | `ralph-orchestrator` | -| **System Command** | Optional | `ralph` CLI (if installed) | -| **Fallback Mode** | Available | Creates project files without running loop | - -### Installation Methods - -**Option 1: Automatic (via supercharge.sh)** -```bash -./supercharge.sh -# Automatically installs ralph-orchestrator via pip3 -``` - -**Option 2: Manual Installation** -```bash -# Install Python package -pip3 install ralph-orchestrator - -# OR install from requirements.txt in this repo -pip3 install -r requirements.txt -``` - -**Option 3: System-Wide Installation** -```bash -# Install for all users -sudo pip3 install ralph-orchestrator - -# This creates the 'ralph' command system-wide -``` - -### How We Built the Ralph Integration - -Our Ralph integration consists of several components working together: - -#### 1. **bin/ralphloop** - Python Wrapper Script -- **Size**: 6,290 bytes (223 lines) -- **Purpose**: Standalone wrapper for Ralph Orchestrator -- **Features**: - - Creates `.ralph/` project structure - - Generates `PROMPT.md` with task description - - Creates `ralph.yml` configuration - - Streams Ralph output in real-time - - Handles interrupts gracefully (Ctrl+C) - -```python -# Key components: -- check_dependencies() # Verifies ralph installation -- create_ralph_project() # Creates .ralph/ directory -- run_ralph_loop() # Executes autonomous iteration -``` - -#### 2. **skills/ralph/** - Claude Code Skill -- **Purpose**: Integrates Ralph with Claude Code's `/ralph` command -- **Trigger**: User types `/ralph "task description"` -- **Flow**: - 1. Receives task from user - 2. Sets `RALPH_AUTO=true` environment variable - 3. Delegates to `brainstorming` skill with Ralph mode - 4. Ralph runs autonomous iterations until complete - -#### 3. **skills/brainstorming/** - Multi-AI Brainstorming -- **Purpose**: Creative thinking with Ralph integration -- **Modes**: - - **Direct Mode**: Quick ideation (simple tasks) - - **Ralph Mode**: Autonomous iteration (complex tasks) -- **Auto-Trigger**: Task complexity automatically determines mode - -#### 4. **hooks/ralph-auto-trigger.sh** - Automatic Triggering -- **Purpose**: Auto-starts Ralph for complex tasks -- **Triggers**: Agent requests, development keywords -- **Modes**: - - `RALPH_AUTO_MODE=always` - Every request - - `RALPH_AUTO_MODE=agents` - Agent/dev tasks only (default) - - `RALPH_AUTO_MODE=off` - Disabled - -#### 5. **hooks/qwen-consult.sh** - Qwen AI Integration -- **Purpose**: Multi-AI consultation with Qwen -- **Modes**: - - `QWEN_CONSULT_MODE=always` - Every request - - `QWEN_CONSULT_MODE=delegate` - Keyword-triggered (default) - - `QWEN_CONSULT_MODE=off` - Disabled - -### File Structure Created by Ralph - -``` -.ralph/ -├── PROMPT.md # Task description with success criteria -├── ralph.yml # Configuration (agent, max_iterations, etc.) -├── state.json # Progress tracking -└── iterations/ - ├── 001.md # First iteration output - ├── 002.md # Second iteration output - ├── ... - └── final.md # Validated final result -``` - -### Environment Variables - -| Variable | Default | Description | -|----------|---------|-------------| -| `RALPH_AGENT` | `claude` | AI agent to use (claude, gemini, kiro, q, auto) | -| `RALPH_MAX_ITERATIONS` | `100` | Maximum iterations before giving up | -| `RALPH_MAX_RUNTIME` | `14400` | Maximum runtime in seconds (4 hours) | -| `RALPH_AUTO_MODE` | `agents` | Auto-trigger mode (always, agents, off) | -| `QWEN_CONSULT_MODE` | `delegate` | Qwen consultation mode | -| `AUTO_SUPERPOWERS` | `true` | Auto-inject superpowers context | - -### Troubleshooting Ralph - -**Ralph command not found:** -```bash -# Check if Python package is installed -python3 -c "import ralph_orchestrator; print('OK')" - -# If not, install it -pip3 install ralph-orchestrator -``` - -**Ralph won't start:** -```bash -# Check ralphloop is executable -ls -la ~/.claude/skills/bin/ralphloop -chmod +x ~/.claude/skills/bin/ralphloop - -# Check Python 3 is available -python3 --version -``` - -**Loop not running (fallback mode):** -```bash -# This is expected if ralph-orchestrator isn't installed -# The script still creates project files for manual use -cat .ralph/PROMPT.md -cat .ralph/ralph.yml -``` - -### Ralph Orchestrator Source - -- **GitHub**: https://github.com/mikeyobrien/ralph-orchestrator -- **PyPI**: https://pypi.org/project/ralph-orchestrator/ -- **Author**: Mike O'Brien -- **License**: MIT - ---- - -## 📄 License - -MIT License - See [LICENSE](LICENSE) file for details - ---- - -## 🙏 Credits & Inspiration - -This project is built on the shoulders of giants. We gratefully acknowledge: - -### Core Inspirations - -🎭 **[contains-studio/agents](https://github.com/contains-studio/agents)** -> 40+ specialized agents with PROACTIVELY auto-triggering - -*Inspired our agent architecture and auto-triggering patterns* - -[View on GitHub →](https://github.com/contains-studio/agents) - ---- - -🤖 **[@iannuttall/ralph](https://github.com/iannuttall/ralph)** -> Autonomous agent looping with background execution - -*Ralph Orchestrator: "Fire and forget" complex tasks with autonomous iteration* - -[View on GitHub →](https://github.com/iannuttall/ralph) - ---- - -🖼️ **[@z_ai/mcp-server](https://github.com/ZAI-China/mcp-server)** -> 8 vision tools for images, videos, diagrams, and data visualization - -*Comprehensive MCP server for AI vision capabilities* - -[View on GitHub →](https://github.com/ZAI-China/mcp-server) - ---- - -### Additional Inspiration - -📊 **llm-tldr** -> 95% token reduction via 5-layer analysis - -*Inspired our cognitive optimization approach* - ---- - -🎨 **[ui-ux-pro-max-skill](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill)** -> Professional UI/UX design guidance - -*50+ styles, 97 color palettes, 57 font pairings across 9 tech stacks* - -[View on GitHub →](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill) - ---- - -🧠 **[Cognitive User Simulation](https://github.com/HighMark-31/Cognitive-User-Simulation)** -> Multi-agent analysis and coordination optimization - -*Inspired our multi-AI brainstorming and consultation patterns* - -[View on GitHub →](https://github.com/HighMark-31/Cognitive-User-Simulation) - ---- - -### Core Technologies - -- **[Ralph Orchestrator](https://github.com/mikeyobrien/ralph-orchestrator)** - Autonomous agent iteration engine -- **[Claude Code](https://claude.com/claude-code)** - Anthropic's AI coding assistant -- **[Z.AI](https://docs.z.ai/devpack/tool/claude)** - GLM model integration with 90% cost savings - ---- - -### Community Contributors - -This package incorporates skills, agents, and plugins from the Claude Code community. Thank you to all contributors who make this ecosystem better! - ---- - -## 📞 Support - -- **Issues**: [Gitea Issues](https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/issues) -- **Discussions**: [Gitea Discussions](https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/discussions) -- **Documentation**: [Full Docs](INVENTORY.md) - ---- - -## 🌟 Star History - -[![Star History Chart](https://api.star-history.com/svg?repos=admin/SuperCharged-Claude-Code-Upgrade&type=Date)](https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade) - ---- - -**Made with ❤️ for the Claude Code community** - -*SuperCharge your AI development workflow today!* - ---- - -**Keywords:** Claude Code customization, Claude Code skills, Claude Code agents, AI coding assistant, Z.AI API, GLM models, RalphLoop, autonomous AI development, CLI tools, developer tools, Claude Code plugins, MCP servers, Qwen integration, AI workflow automation +# SuperCharged Claude Code - Ultimate Upgrade Package + +> 🚀 Transform your Claude Code into an autonomous AI development powerhouse with **291 custom skills**, 4 integrated agent frameworks, intelligent auto-routing, and multi-platform orchestration. + +[![Claude Code](https://img.shields.io/badge/Claude-Code-Supercharged-blue)](https://claude.com/claude-code) +[![Version](https://img.shields.io/badge/Version-3.0.0-green)](https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade) +[![Skills](https://img.shields.io/badge/Skills-291-brightgreen)](https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade) +[![Commands](https://img.shields.io/badge/Commands-21-orange)](https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade) +[![MCP](https://img.shields.io/badge/MCP_Servers-10-purple)](https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade) +[![License](https://img.shields.io/badge/License-MIT-blue)](LICENSE) + +## ⚡ Quick Installation + +### Linux / macOS (Bash) +```bash +git clone https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade.git +cd SuperCharged-Claude-Code-Upgrade +./supercharge.sh +``` + +### Windows (WSL Recommended) +```bash +wsl bash -c "git clone https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade.git && cd SuperCharged-Claude-Code-Upgrade && ./supercharge.sh" +``` + +--- + +## ⚡ Why SuperCharge Claude Code? + +**Claude Code is powerful. SuperCharge makes it unstoppable.** + +This comprehensive customization package transforms your Claude Code installation with: + +- ✨ **291 Custom Skills** - Cognitive enhancement, development workflows, UI/UX intelligence +- 🤖 **4 Agent Frameworks** - Clawd, Ralph, Prometheus, Dexto - fully integrated +- 🔥 **21 Slash Commands** - Instant access to all agents and tools +- 🌐 **MCP Servers** - 10 servers for file operations, Git, GitHub, databases, search +- 🎯 **Intelligent Auto-Routing** - Pattern-based agent selection with 70% confidence threshold +- 💻 **Web Interface** - ClaudeCLI-Web dashboard with real-time session management +- 🪝 **Smart Hooks** - Session automation and multi-AI consultation +- 🚀 **Autonomous Execution** - Clawd gateway for hands-off task completion + +**Perfect for:** Developers, AI enthusiasts, teams building with AI assistants, and anyone wanting to maximize their Claude Code productivity. + +--- + +## 🆕 What's New in v3.0.0 + +### Major Framework Integrations + +#### 🔧 **Prometheus** (EuniAI) +Multi-agent code analysis system with knowledge graph reasoning: + +- **6 Commands:** , , , , , +- **4 Tools:** AST-based code parsing, graph traversal, container execution, web search +- **Capabilities:** Bug fixing, feature planning, code context, regression testing + +#### 🎭 **Dexto** (Truffle AI) +Agent harness with orchestration and session management: + +- **12 Commands:** , , , , , , , , , , , +- **5 Tools:** Filesystem, Playwright, Process, TODO, Plan +- **Capabilities:** Development, media creation, databases, GitHub, research + +#### 🤖 **Clawd** +Autonomous task execution gateway: + +- **1 Command:** +- **Capability:** Multi-agent task delegation with persistent sessions +- **Gateway:** Running on port 8766 with health monitoring + +#### 🔄 **Ralph** +"Tackle Until Solved" autonomous iteration: + +- **1 Command:** +- **Capability:** Architecture design, multi-step implementations +- **Integration:** Access to all 21 commands via intelligent routing + +### 🎯 Intelligent Auto-Routing System + +**NEW:** Automatic agent selection based on task patterns: + +| Task Pattern | Routes To | Example | +|-------------|-----------|---------| +| "autonomous", "automatically" | | "Handle this autonomously" | +| "architecture", "design system" | | "Design microservices architecture" | +| "bug", "fix", "reproduce" | | "Fix authentication bug" | +| "feature", "implement" | | "Add two-factor auth" | +| "github", "pr", "issue" | | "Analyze pull request" | +| "pdf", "document" | | "Summarize document" | +| "generate image" | | "Generate image" | +| "database", "sql" | | "Optimize query" | + +--- + +## 📊 Complete Feature List + +### 🔧 Agent Frameworks (4) + +| Framework | Type | Status | +|-----------|------|--------| +| **Clawd** | Autonomous Execution | ✅ Integrated | +| **Ralph** | Iterative Architecture | ✅ Integrated | +| **Prometheus** | Code Analysis | ✅ Integrated | +| **Dexto** | Multi-Agent Harness | ✅ Integrated | + +### 🎯 Slash Commands (21) + +#### Clawd (1) +``` +/clawd "Autonomous task execution" +``` + +#### Ralph (1) +``` +/ralph "Complex architecture or multi-step task" +``` + +#### Prometheus (6) +``` +/prometheus-bug "Bug analysis and fix" +/prometheus-feature "Feature planning" +/prometheus-context "Code context retrieval" +/prometheus-edit "Code editing" +/prometheus-test "Test execution" +/prometheus-classify "Issue classification" +/prometheus "Auto-select appropriate tool" +``` + +#### Dexto (12) +``` +/dexto-code "Development tasks" +/dexto-database "Database operations" +/dexto-github "GitHub operations" +/dexto-pdf "PDF analysis" +/dexto-image-edit "Image editing" +/dexto-nano-banana "AI image generation" +/dexto-sora "Video generation" +/dexto-music "Music creation" +/dexto-podcast "Podcast generation" +/dexto-research "Product research" +/dexto-triage "Support ticket triage" +/dexto-explore "Codebase exploration" +/dexto "Auto-select appropriate agent" +``` + +### 🔌 MCP Servers (10) + +- **arc** - Subagent file operations +- **claude-mem** - Persistent memory +- **filesystem** - Local filesystem operations +- **git** - Git operations +- **fetch** - HTTP requests +- **sqlite** - Database operations +- **github** - GitHub API (requires auth) +- **brave-search** - Web search (requires auth) +- **postgres** - PostgreSQL (requires connection) +- **puppeteer** - Browser automation + +### 🪝 Hooks (7) + +- - Pattern-based agent routing +- - Clawd automation +- - Session initialization +- - Task completion handling +- - Clawd command wrapper +- - Prometheus integration +- - Unified agent system + +### 📚 Skills (291) + +- Cognitive enhancement +- Development workflows +- UI/UX design intelligence +- Desktop development +- Code review +- Testing strategies +- Documentation +- Git workflows +- Architecture patterns + +--- + +## 🚀 Usage Examples + +### Autonomous Task Execution +```bash +/clawd "Deploy the application and run all tests" +``` + +### Architecture Design +```bash +/ralph "Design a scalable e-commerce backend with microservices" +``` + +### Bug Analysis +```bash +/prometheus-bug "Login fails after password reset" +``` + +### Feature Implementation +```bash +/prometheus-feature "Add two-factor authentication" +``` + +### GitHub Operations +```bash +/dexto-github "Analyze issues in repository" +``` + +### PDF Analysis +```bash +/dexto-pdf "Summarize research paper" +``` + +### Image Generation +```bash +/dexto-nano-banana "Generate image of cyberpunk city" +``` + +--- + +## 🛠️ Configuration + +### Auto-Routing Confidence Threshold + +Edit `~/.claude/hooks/intelligent-router.sh`: +```bash +if [ "$SCORE" -ge 70 ]; then # Adjust threshold (0-100) +``` + +### Enable/Disable MCP Servers + +Edit `~/.claude/mcp-servers/registry.json`: +```json +{ + "servers": { + "github": { "enabled": true }, + "brave-search": { "enabled": false } + } +} +``` + +--- + +## 📁 Project Structure + +``` +SuperCharged-Claude-Code-Upgrade/ +├── commands/ # 21 slash commands +├── hooks/ # Event hooks +├── skills/ # 291 custom skills +├── mcp-servers/ # MCP server registry +├── prometheus/ # Prometheus integration +├── dexto/ # Dexto integration +├── clawd/ # Clawd gateway +├── ralph-integration/ # Ralph integration +├── plugins/ # Plugin marketplace +├── ClaudeCLI-Web/ # Web interface +├── health-check.sh # System validation +└── supercharge.sh # Installer +``` + +--- + +## 🩺 Health Check + +Run health check to verify all systems: +```bash +~/.claude/health-check.sh +``` + +Expected output: +``` +✓ All 291 skills loaded +✓ All 21 commands available +✓ All 10 MCP servers registered +✓ Clawd gateway running (PID: xxxx) +✓ Intelligent router active +``` + +--- + +## 📚 Documentation + +- [Auto-Trigger System](AUTO-TRIGGER-SUMMARY.md) +- [Complete Integration Summary](FINAL-INTEGRATION-SUMMARY.md) +- [Prometheus Documentation](prometheus/README.md) +- [Dexto Documentation](dexto/README.md) +- [ClaudeCLI-Web](ClaudeCLI-Web/README.md) + +--- + +## 🤝 Contributing + +Contributions welcome! Please read CONTRIBUTING.md for details. + +--- + +## 📄 License + +MIT License - see LICENSE file for details. + +--- + +**🎉 Your Claude Code CLI is now a comprehensive multi-agent AI platform!** + +Total capabilities: +- ✅ Autonomous execution (Clawd) +- ✅ Architecture design (Ralph) +- ✅ Code analysis (Prometheus) +- ✅ Multi-agent framework (Dexto) +- ✅ 291 specialized skills +- ✅ 10 MCP servers +- ✅ Intelligent auto-routing +- ✅ Production-grade monitoring diff --git a/plugins/cache/superpowers/superpowers/4.0.3/docs/plans/2025-11-22-opencode-support-design.md b/plugins/cache/superpowers/superpowers/4.0.3/docs/plans/2025-11-22-opencode-support-design.md new file mode 100644 index 00000000..144f1cea --- /dev/null +++ b/plugins/cache/superpowers/superpowers/4.0.3/docs/plans/2025-11-22-opencode-support-design.md @@ -0,0 +1,294 @@ +# OpenCode Support Design + +**Date:** 2025-11-22 +**Author:** Bot & Jesse +**Status:** Design Complete, Awaiting Implementation + +## Overview + +Add full superpowers support for OpenCode.ai using a native OpenCode plugin architecture that shares core functionality with the existing Codex implementation. + +## Background + +OpenCode.ai is a coding agent similar to Claude Code and Codex. Previous attempts to port superpowers to OpenCode (PR #93, PR #116) used file-copying approaches. This design takes a different approach: building a native OpenCode plugin using their JavaScript/TypeScript plugin system while sharing code with the Codex implementation. + +### Key Differences Between Platforms + +- **Claude Code**: Native Anthropic plugin system + file-based skills +- **Codex**: No plugin system → bootstrap markdown + CLI script +- **OpenCode**: JavaScript/TypeScript plugins with event hooks and custom tools API + +### OpenCode's Agent System + +- **Primary agents**: Build (default, full access) and Plan (restricted, read-only) +- **Subagents**: General (research, searching, multi-step tasks) +- **Invocation**: Automatic dispatch by primary agents OR manual `@mention` syntax +- **Configuration**: Custom agents in `opencode.json` or `~/.config/opencode/agent/` + +## Architecture + +### High-Level Structure + +1. **Shared Core Module** (`lib/skills-core.js`) + - Common skill discovery and parsing logic + - Used by both Codex and OpenCode implementations + +2. **Platform-Specific Wrappers** + - Codex: CLI script (`.codex/superpowers-codex`) + - OpenCode: Plugin module (`.opencode/plugin/superpowers.js`) + +3. **Skill Directories** + - Core: `~/.config/opencode/superpowers/skills/` (or installed location) + - Personal: `~/.config/opencode/skills/` (shadows core skills) + +### Code Reuse Strategy + +Extract common functionality from `.codex/superpowers-codex` into shared module: + +```javascript +// lib/skills-core.js +module.exports = { + extractFrontmatter(filePath), // Parse name + description from YAML + findSkillsInDir(dir, maxDepth), // Recursive SKILL.md discovery + findAllSkills(dirs), // Scan multiple directories + resolveSkillPath(skillName, dirs), // Handle shadowing (personal > core) + checkForUpdates(repoDir) // Git fetch/status check +}; +``` + +### Skill Frontmatter Format + +Current format (no `when_to_use` field): + +```yaml +--- +name: skill-name +description: Use when [condition] - [what it does]; [additional context] +--- +``` + +## OpenCode Plugin Implementation + +### Custom Tools + +**Tool 1: `use_skill`** + +Loads a specific skill's content into the conversation (equivalent to Claude's Skill tool). + +```javascript +{ + name: 'use_skill', + description: 'Load and read a specific skill to guide your work', + schema: z.object({ + skill_name: z.string().describe('Name of skill (e.g., "superpowers:brainstorming")') + }), + execute: async ({ skill_name }) => { + const { skillPath, content, frontmatter } = resolveAndReadSkill(skill_name); + const skillDir = path.dirname(skillPath); + + return `# ${frontmatter.name} +# ${frontmatter.description} +# Supporting tools and docs are in ${skillDir} +# ============================================ + +${content}`; + } +} +``` + +**Tool 2: `find_skills`** + +Lists all available skills with metadata. + +```javascript +{ + name: 'find_skills', + description: 'List all available skills', + schema: z.object({}), + execute: async () => { + const skills = discoverAllSkills(); + return skills.map(s => + `${s.namespace}:${s.name} + ${s.description} + Directory: ${s.directory} +`).join('\n'); + } +} +``` + +### Session Startup Hook + +When a new session starts (`session.started` event): + +1. **Inject using-superpowers content** + - Full content of the using-superpowers skill + - Establishes mandatory workflows + +2. **Run find_skills automatically** + - Display full list of available skills upfront + - Include skill directories for each + +3. **Inject tool mapping instructions** + ```markdown + **Tool Mapping for OpenCode:** + When skills reference tools you don't have, substitute: + - `TodoWrite` → `update_plan` + - `Task` with subagents → Use OpenCode subagent system (@mention) + - `Skill` tool → `use_skill` custom tool + - Read, Write, Edit, Bash → Your native equivalents + + **Skill directories contain:** + - Supporting scripts (run with bash) + - Additional documentation (read with read tool) + - Utilities specific to that skill + ``` + +4. **Check for updates** (non-blocking) + - Quick git fetch with timeout + - Notify if updates available + +### Plugin Structure + +```javascript +// .opencode/plugin/superpowers.js +const skillsCore = require('../../lib/skills-core'); +const path = require('path'); +const fs = require('fs'); +const { z } = require('zod'); + +export const SuperpowersPlugin = async ({ client, directory, $ }) => { + const superpowersDir = path.join(process.env.HOME, '.config/opencode/superpowers'); + const personalDir = path.join(process.env.HOME, '.config/opencode/skills'); + + return { + 'session.started': async () => { + const usingSuperpowers = await readSkill('using-superpowers'); + const skillsList = await findAllSkills(); + const toolMapping = getToolMappingInstructions(); + + return { + context: `${usingSuperpowers}\n\n${skillsList}\n\n${toolMapping}` + }; + }, + + tools: [ + { + name: 'use_skill', + description: 'Load and read a specific skill', + schema: z.object({ + skill_name: z.string() + }), + execute: async ({ skill_name }) => { + // Implementation using skillsCore + } + }, + { + name: 'find_skills', + description: 'List all available skills', + schema: z.object({}), + execute: async () => { + // Implementation using skillsCore + } + } + ] + }; +}; +``` + +## File Structure + +``` +superpowers/ +├── lib/ +│ └── skills-core.js # NEW: Shared skill logic +├── .codex/ +│ ├── superpowers-codex # UPDATED: Use skills-core +│ ├── superpowers-bootstrap.md +│ └── INSTALL.md +├── .opencode/ +│ ├── plugin/ +│ │ └── superpowers.js # NEW: OpenCode plugin +│ └── INSTALL.md # NEW: Installation guide +└── skills/ # Unchanged +``` + +## Implementation Plan + +### Phase 1: Refactor Shared Core + +1. Create `lib/skills-core.js` + - Extract frontmatter parsing from `.codex/superpowers-codex` + - Extract skill discovery logic + - Extract path resolution (with shadowing) + - Update to use only `name` and `description` (no `when_to_use`) + +2. Update `.codex/superpowers-codex` to use shared core + - Import from `../lib/skills-core.js` + - Remove duplicated code + - Keep CLI wrapper logic + +3. Test Codex implementation still works + - Verify bootstrap command + - Verify use-skill command + - Verify find-skills command + +### Phase 2: Build OpenCode Plugin + +1. Create `.opencode/plugin/superpowers.js` + - Import shared core from `../../lib/skills-core.js` + - Implement plugin function + - Define custom tools (use_skill, find_skills) + - Implement session.started hook + +2. Create `.opencode/INSTALL.md` + - Installation instructions + - Directory setup + - Configuration guidance + +3. Test OpenCode implementation + - Verify session startup bootstrap + - Verify use_skill tool works + - Verify find_skills tool works + - Verify skill directories are accessible + +### Phase 3: Documentation & Polish + +1. Update README with OpenCode support +2. Add OpenCode installation to main docs +3. Update RELEASE-NOTES +4. Test both Codex and OpenCode work correctly + +## Next Steps + +1. **Create isolated workspace** (using git worktrees) + - Branch: `feature/opencode-support` + +2. **Follow TDD where applicable** + - Test shared core functions + - Test skill discovery and parsing + - Integration tests for both platforms + +3. **Incremental implementation** + - Phase 1: Refactor shared core + update Codex + - Verify Codex still works before moving on + - Phase 2: Build OpenCode plugin + - Phase 3: Documentation and polish + +4. **Testing strategy** + - Manual testing with real OpenCode installation + - Verify skill loading, directories, scripts work + - Test both Codex and OpenCode side-by-side + - Verify tool mappings work correctly + +5. **PR and merge** + - Create PR with complete implementation + - Test in clean environment + - Merge to main + +## Benefits + +- **Code reuse**: Single source of truth for skill discovery/parsing +- **Maintainability**: Bug fixes apply to both platforms +- **Extensibility**: Easy to add future platforms (Cursor, Windsurf, etc.) +- **Native integration**: Uses OpenCode's plugin system properly +- **Consistency**: Same skill experience across all platforms diff --git a/plugins/cache/superpowers/superpowers/4.0.3/docs/plans/2025-11-22-opencode-support-implementation.md b/plugins/cache/superpowers/superpowers/4.0.3/docs/plans/2025-11-22-opencode-support-implementation.md new file mode 100644 index 00000000..1a7c1fb9 --- /dev/null +++ b/plugins/cache/superpowers/superpowers/4.0.3/docs/plans/2025-11-22-opencode-support-implementation.md @@ -0,0 +1,1095 @@ +# OpenCode Support Implementation Plan + +> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. + +**Goal:** Add full superpowers support for OpenCode.ai with a native JavaScript plugin that shares core functionality with the existing Codex implementation. + +**Architecture:** Extract common skill discovery/parsing logic into `lib/skills-core.js`, refactor Codex to use it, then build OpenCode plugin using their native plugin API with custom tools and session hooks. + +**Tech Stack:** Node.js, JavaScript, OpenCode Plugin API, Git worktrees + +--- + +## Phase 1: Create Shared Core Module + +### Task 1: Extract Frontmatter Parsing + +**Files:** +- Create: `lib/skills-core.js` +- Reference: `.codex/superpowers-codex` (lines 40-74) + +**Step 1: Create lib/skills-core.js with extractFrontmatter function** + +```javascript +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); + +/** + * Extract YAML frontmatter from a skill file. + * Current format: + * --- + * name: skill-name + * description: Use when [condition] - [what it does] + * --- + * + * @param {string} filePath - Path to SKILL.md file + * @returns {{name: string, description: string}} + */ +function extractFrontmatter(filePath) { + try { + const content = fs.readFileSync(filePath, 'utf8'); + const lines = content.split('\n'); + + let inFrontmatter = false; + let name = ''; + let description = ''; + + for (const line of lines) { + if (line.trim() === '---') { + if (inFrontmatter) break; + inFrontmatter = true; + continue; + } + + if (inFrontmatter) { + const match = line.match(/^(\w+):\s*(.*)$/); + if (match) { + const [, key, value] = match; + switch (key) { + case 'name': + name = value.trim(); + break; + case 'description': + description = value.trim(); + break; + } + } + } + } + + return { name, description }; + } catch (error) { + return { name: '', description: '' }; + } +} + +module.exports = { + extractFrontmatter +}; +``` + +**Step 2: Verify file was created** + +Run: `ls -l lib/skills-core.js` +Expected: File exists + +**Step 3: Commit** + +```bash +git add lib/skills-core.js +git commit -m "feat: create shared skills core module with frontmatter parser" +``` + +--- + +### Task 2: Extract Skill Discovery Logic + +**Files:** +- Modify: `lib/skills-core.js` +- Reference: `.codex/superpowers-codex` (lines 97-136) + +**Step 1: Add findSkillsInDir function to skills-core.js** + +Add before `module.exports`: + +```javascript +/** + * Find all SKILL.md files in a directory recursively. + * + * @param {string} dir - Directory to search + * @param {string} sourceType - 'personal' or 'superpowers' for namespacing + * @param {number} maxDepth - Maximum recursion depth (default: 3) + * @returns {Array<{path: string, name: string, description: string, sourceType: string}>} + */ +function findSkillsInDir(dir, sourceType, maxDepth = 3) { + const skills = []; + + if (!fs.existsSync(dir)) return skills; + + function recurse(currentDir, depth) { + if (depth > maxDepth) return; + + const entries = fs.readdirSync(currentDir, { withFileTypes: true }); + + for (const entry of entries) { + const fullPath = path.join(currentDir, entry.name); + + if (entry.isDirectory()) { + // Check for SKILL.md in this directory + const skillFile = path.join(fullPath, 'SKILL.md'); + if (fs.existsSync(skillFile)) { + const { name, description } = extractFrontmatter(skillFile); + skills.push({ + path: fullPath, + skillFile: skillFile, + name: name || entry.name, + description: description || '', + sourceType: sourceType + }); + } + + // Recurse into subdirectories + recurse(fullPath, depth + 1); + } + } + } + + recurse(dir, 0); + return skills; +} +``` + +**Step 2: Update module.exports** + +Replace the exports line with: + +```javascript +module.exports = { + extractFrontmatter, + findSkillsInDir +}; +``` + +**Step 3: Verify syntax** + +Run: `node -c lib/skills-core.js` +Expected: No output (success) + +**Step 4: Commit** + +```bash +git add lib/skills-core.js +git commit -m "feat: add skill discovery function to core module" +``` + +--- + +### Task 3: Extract Skill Resolution Logic + +**Files:** +- Modify: `lib/skills-core.js` +- Reference: `.codex/superpowers-codex` (lines 212-280) + +**Step 1: Add resolveSkillPath function** + +Add before `module.exports`: + +```javascript +/** + * Resolve a skill name to its file path, handling shadowing + * (personal skills override superpowers skills). + * + * @param {string} skillName - Name like "superpowers:brainstorming" or "my-skill" + * @param {string} superpowersDir - Path to superpowers skills directory + * @param {string} personalDir - Path to personal skills directory + * @returns {{skillFile: string, sourceType: string, skillPath: string} | null} + */ +function resolveSkillPath(skillName, superpowersDir, personalDir) { + // Strip superpowers: prefix if present + const forceSuperpowers = skillName.startsWith('superpowers:'); + const actualSkillName = forceSuperpowers ? skillName.replace(/^superpowers:/, '') : skillName; + + // Try personal skills first (unless explicitly superpowers:) + if (!forceSuperpowers && personalDir) { + const personalPath = path.join(personalDir, actualSkillName); + const personalSkillFile = path.join(personalPath, 'SKILL.md'); + if (fs.existsSync(personalSkillFile)) { + return { + skillFile: personalSkillFile, + sourceType: 'personal', + skillPath: actualSkillName + }; + } + } + + // Try superpowers skills + if (superpowersDir) { + const superpowersPath = path.join(superpowersDir, actualSkillName); + const superpowersSkillFile = path.join(superpowersPath, 'SKILL.md'); + if (fs.existsSync(superpowersSkillFile)) { + return { + skillFile: superpowersSkillFile, + sourceType: 'superpowers', + skillPath: actualSkillName + }; + } + } + + return null; +} +``` + +**Step 2: Update module.exports** + +```javascript +module.exports = { + extractFrontmatter, + findSkillsInDir, + resolveSkillPath +}; +``` + +**Step 3: Verify syntax** + +Run: `node -c lib/skills-core.js` +Expected: No output + +**Step 4: Commit** + +```bash +git add lib/skills-core.js +git commit -m "feat: add skill path resolution with shadowing support" +``` + +--- + +### Task 4: Extract Update Check Logic + +**Files:** +- Modify: `lib/skills-core.js` +- Reference: `.codex/superpowers-codex` (lines 16-38) + +**Step 1: Add checkForUpdates function** + +Add at top after requires: + +```javascript +const { execSync } = require('child_process'); +``` + +Add before `module.exports`: + +```javascript +/** + * Check if a git repository has updates available. + * + * @param {string} repoDir - Path to git repository + * @returns {boolean} - True if updates are available + */ +function checkForUpdates(repoDir) { + try { + // Quick check with 3 second timeout to avoid delays if network is down + const output = execSync('git fetch origin && git status --porcelain=v1 --branch', { + cwd: repoDir, + timeout: 3000, + encoding: 'utf8', + stdio: 'pipe' + }); + + // Parse git status output to see if we're behind + const statusLines = output.split('\n'); + for (const line of statusLines) { + if (line.startsWith('## ') && line.includes('[behind ')) { + return true; // We're behind remote + } + } + return false; // Up to date + } catch (error) { + // Network down, git error, timeout, etc. - don't block bootstrap + return false; + } +} +``` + +**Step 2: Update module.exports** + +```javascript +module.exports = { + extractFrontmatter, + findSkillsInDir, + resolveSkillPath, + checkForUpdates +}; +``` + +**Step 3: Verify syntax** + +Run: `node -c lib/skills-core.js` +Expected: No output + +**Step 4: Commit** + +```bash +git add lib/skills-core.js +git commit -m "feat: add git update checking to core module" +``` + +--- + +## Phase 2: Refactor Codex to Use Shared Core + +### Task 5: Update Codex to Import Shared Core + +**Files:** +- Modify: `.codex/superpowers-codex` (add import at top) + +**Step 1: Add import statement** + +After the existing requires at top of file (around line 6), add: + +```javascript +const skillsCore = require('../lib/skills-core'); +``` + +**Step 2: Verify syntax** + +Run: `node -c .codex/superpowers-codex` +Expected: No output + +**Step 3: Commit** + +```bash +git add .codex/superpowers-codex +git commit -m "refactor: import shared skills core in codex" +``` + +--- + +### Task 6: Replace extractFrontmatter with Core Version + +**Files:** +- Modify: `.codex/superpowers-codex` (lines 40-74) + +**Step 1: Remove local extractFrontmatter function** + +Delete lines 40-74 (the entire extractFrontmatter function definition). + +**Step 2: Update all extractFrontmatter calls** + +Find and replace all calls from `extractFrontmatter(` to `skillsCore.extractFrontmatter(` + +Affected lines approximately: 90, 310 + +**Step 3: Verify script still works** + +Run: `.codex/superpowers-codex find-skills | head -20` +Expected: Shows list of skills + +**Step 4: Commit** + +```bash +git add .codex/superpowers-codex +git commit -m "refactor: use shared extractFrontmatter in codex" +``` + +--- + +### Task 7: Replace findSkillsInDir with Core Version + +**Files:** +- Modify: `.codex/superpowers-codex` (lines 97-136, approximately) + +**Step 1: Remove local findSkillsInDir function** + +Delete the entire `findSkillsInDir` function definition (approximately lines 97-136). + +**Step 2: Update all findSkillsInDir calls** + +Replace calls from `findSkillsInDir(` to `skillsCore.findSkillsInDir(` + +**Step 3: Verify script still works** + +Run: `.codex/superpowers-codex find-skills | head -20` +Expected: Shows list of skills + +**Step 4: Commit** + +```bash +git add .codex/superpowers-codex +git commit -m "refactor: use shared findSkillsInDir in codex" +``` + +--- + +### Task 8: Replace checkForUpdates with Core Version + +**Files:** +- Modify: `.codex/superpowers-codex` (lines 16-38, approximately) + +**Step 1: Remove local checkForUpdates function** + +Delete the entire `checkForUpdates` function definition. + +**Step 2: Update all checkForUpdates calls** + +Replace calls from `checkForUpdates(` to `skillsCore.checkForUpdates(` + +**Step 3: Verify script still works** + +Run: `.codex/superpowers-codex bootstrap | head -50` +Expected: Shows bootstrap content + +**Step 4: Commit** + +```bash +git add .codex/superpowers-codex +git commit -m "refactor: use shared checkForUpdates in codex" +``` + +--- + +## Phase 3: Build OpenCode Plugin + +### Task 9: Create OpenCode Plugin Directory Structure + +**Files:** +- Create: `.opencode/plugin/superpowers.js` + +**Step 1: Create directory** + +Run: `mkdir -p .opencode/plugin` + +**Step 2: Create basic plugin file** + +```javascript +#!/usr/bin/env node + +/** + * Superpowers plugin for OpenCode.ai + * + * Provides custom tools for loading and discovering skills, + * with automatic bootstrap on session start. + */ + +const skillsCore = require('../../lib/skills-core'); +const path = require('path'); +const fs = require('fs'); +const os = require('os'); + +const homeDir = os.homedir(); +const superpowersSkillsDir = path.join(homeDir, '.config/opencode/superpowers/skills'); +const personalSkillsDir = path.join(homeDir, '.config/opencode/skills'); + +/** + * OpenCode plugin entry point + */ +export const SuperpowersPlugin = async ({ project, client, $, directory, worktree }) => { + return { + // Custom tools and hooks will go here + }; +}; +``` + +**Step 3: Verify file was created** + +Run: `ls -l .opencode/plugin/superpowers.js` +Expected: File exists + +**Step 4: Commit** + +```bash +git add .opencode/plugin/superpowers.js +git commit -m "feat: create opencode plugin scaffold" +``` + +--- + +### Task 10: Implement use_skill Tool + +**Files:** +- Modify: `.opencode/plugin/superpowers.js` + +**Step 1: Add use_skill tool implementation** + +Replace the plugin return statement with: + +```javascript +export const SuperpowersPlugin = async ({ project, client, $, directory, worktree }) => { + // Import zod for schema validation + const { z } = await import('zod'); + + return { + tools: [ + { + name: 'use_skill', + description: 'Load and read a specific skill to guide your work. Skills contain proven workflows, mandatory processes, and expert techniques.', + schema: z.object({ + skill_name: z.string().describe('Name of the skill to load (e.g., "superpowers:brainstorming" or "my-custom-skill")') + }), + execute: async ({ skill_name }) => { + // Resolve skill path (handles shadowing: personal > superpowers) + const resolved = skillsCore.resolveSkillPath( + skill_name, + superpowersSkillsDir, + personalSkillsDir + ); + + if (!resolved) { + return `Error: Skill "${skill_name}" not found.\n\nRun find_skills to see available skills.`; + } + + // Read skill content + const fullContent = fs.readFileSync(resolved.skillFile, 'utf8'); + const { name, description } = skillsCore.extractFrontmatter(resolved.skillFile); + + // Extract content after frontmatter + const lines = fullContent.split('\n'); + let inFrontmatter = false; + let frontmatterEnded = false; + const contentLines = []; + + for (const line of lines) { + if (line.trim() === '---') { + if (inFrontmatter) { + frontmatterEnded = true; + continue; + } + inFrontmatter = true; + continue; + } + + if (frontmatterEnded || !inFrontmatter) { + contentLines.push(line); + } + } + + const content = contentLines.join('\n').trim(); + const skillDirectory = path.dirname(resolved.skillFile); + + // Format output similar to Claude Code's Skill tool + return `# ${name || skill_name} +# ${description || ''} +# Supporting tools and docs are in ${skillDirectory} +# ============================================ + +${content}`; + } + } + ] + }; +}; +``` + +**Step 2: Verify syntax** + +Run: `node -c .opencode/plugin/superpowers.js` +Expected: No output + +**Step 3: Commit** + +```bash +git add .opencode/plugin/superpowers.js +git commit -m "feat: implement use_skill tool for opencode" +``` + +--- + +### Task 11: Implement find_skills Tool + +**Files:** +- Modify: `.opencode/plugin/superpowers.js` + +**Step 1: Add find_skills tool to tools array** + +Add after the use_skill tool definition, before closing the tools array: + +```javascript + { + name: 'find_skills', + description: 'List all available skills in the superpowers and personal skill libraries.', + schema: z.object({}), + execute: async () => { + // Find skills in both directories + const superpowersSkills = skillsCore.findSkillsInDir( + superpowersSkillsDir, + 'superpowers', + 3 + ); + const personalSkills = skillsCore.findSkillsInDir( + personalSkillsDir, + 'personal', + 3 + ); + + // Combine and format skills list + const allSkills = [...personalSkills, ...superpowersSkills]; + + if (allSkills.length === 0) { + return 'No skills found. Install superpowers skills to ~/.config/opencode/superpowers/skills/'; + } + + let output = 'Available skills:\n\n'; + + for (const skill of allSkills) { + const namespace = skill.sourceType === 'personal' ? '' : 'superpowers:'; + const skillName = skill.name || path.basename(skill.path); + + output += `${namespace}${skillName}\n`; + if (skill.description) { + output += ` ${skill.description}\n`; + } + output += ` Directory: ${skill.path}\n\n`; + } + + return output; + } + } +``` + +**Step 2: Verify syntax** + +Run: `node -c .opencode/plugin/superpowers.js` +Expected: No output + +**Step 3: Commit** + +```bash +git add .opencode/plugin/superpowers.js +git commit -m "feat: implement find_skills tool for opencode" +``` + +--- + +### Task 12: Implement Session Start Hook + +**Files:** +- Modify: `.opencode/plugin/superpowers.js` + +**Step 1: Add session.started hook** + +After the tools array, add: + +```javascript + 'session.started': async () => { + // Read using-superpowers skill content + const usingSuperpowersPath = skillsCore.resolveSkillPath( + 'using-superpowers', + superpowersSkillsDir, + personalSkillsDir + ); + + let usingSuperpowersContent = ''; + if (usingSuperpowersPath) { + const fullContent = fs.readFileSync(usingSuperpowersPath.skillFile, 'utf8'); + // Strip frontmatter + const lines = fullContent.split('\n'); + let inFrontmatter = false; + let frontmatterEnded = false; + const contentLines = []; + + for (const line of lines) { + if (line.trim() === '---') { + if (inFrontmatter) { + frontmatterEnded = true; + continue; + } + inFrontmatter = true; + continue; + } + + if (frontmatterEnded || !inFrontmatter) { + contentLines.push(line); + } + } + + usingSuperpowersContent = contentLines.join('\n').trim(); + } + + // Tool mapping instructions + const toolMapping = ` +**Tool Mapping for OpenCode:** +When skills reference tools you don't have, substitute OpenCode equivalents: +- \`TodoWrite\` → \`update_plan\` (your planning/task tracking tool) +- \`Task\` tool with subagents → Use OpenCode's subagent system (@mention syntax or automatic dispatch) +- \`Skill\` tool → \`use_skill\` custom tool (already available) +- \`Read\`, \`Write\`, \`Edit\`, \`Bash\` → Use your native tools + +**Skill directories contain supporting files:** +- Scripts you can run with bash tool +- Additional documentation you can read +- Utilities and helpers specific to that skill + +**Skills naming:** +- Superpowers skills: \`superpowers:skill-name\` (from ~/.config/opencode/superpowers/skills/) +- Personal skills: \`skill-name\` (from ~/.config/opencode/skills/) +- Personal skills override superpowers skills when names match +`; + + // Check for updates (non-blocking) + const hasUpdates = skillsCore.checkForUpdates( + path.join(homeDir, '.config/opencode/superpowers') + ); + + const updateNotice = hasUpdates ? + '\n\n⚠️ **Updates available!** Run `cd ~/.config/opencode/superpowers && git pull` to update superpowers.' : + ''; + + // Return context to inject into session + return { + context: ` +You have superpowers. + +**Below is the full content of your 'superpowers:using-superpowers' skill - your introduction to using skills. For all other skills, use the 'use_skill' tool:** + +${usingSuperpowersContent} + +${toolMapping}${updateNotice} +` + }; + } +``` + +**Step 2: Verify syntax** + +Run: `node -c .opencode/plugin/superpowers.js` +Expected: No output + +**Step 3: Commit** + +```bash +git add .opencode/plugin/superpowers.js +git commit -m "feat: implement session.started hook for opencode" +``` + +--- + +## Phase 4: Documentation + +### Task 13: Create OpenCode Installation Guide + +**Files:** +- Create: `.opencode/INSTALL.md` + +**Step 1: Create installation guide** + +```markdown +# Installing Superpowers for OpenCode + +## Prerequisites + +- [OpenCode.ai](https://opencode.ai) installed +- Node.js installed +- Git installed + +## Installation Steps + +### 1. Install Superpowers Skills + +```bash +# Clone superpowers skills to OpenCode config directory +mkdir -p ~/.config/opencode/superpowers +git clone https://github.com/obra/superpowers.git ~/.config/opencode/superpowers +``` + +### 2. Install the Plugin + +The plugin is included in the superpowers repository you just cloned. + +OpenCode will automatically discover it from: +- `~/.config/opencode/superpowers/.opencode/plugin/superpowers.js` + +Or you can link it to the project-local plugin directory: + +```bash +# In your OpenCode project +mkdir -p .opencode/plugin +ln -s ~/.config/opencode/superpowers/.opencode/plugin/superpowers.js .opencode/plugin/superpowers.js +``` + +### 3. Restart OpenCode + +Restart OpenCode to load the plugin. On the next session, you should see: + +``` +You have superpowers. +``` + +## Usage + +### Finding Skills + +Use the `find_skills` tool to list all available skills: + +``` +use find_skills tool +``` + +### Loading a Skill + +Use the `use_skill` tool to load a specific skill: + +``` +use use_skill tool with skill_name: "superpowers:brainstorming" +``` + +### Personal Skills + +Create your own skills in `~/.config/opencode/skills/`: + +```bash +mkdir -p ~/.config/opencode/skills/my-skill +``` + +Create `~/.config/opencode/skills/my-skill/SKILL.md`: + +```markdown +--- +name: my-skill +description: Use when [condition] - [what it does] +--- + +# My Skill + +[Your skill content here] +``` + +Personal skills override superpowers skills with the same name. + +## Updating + +```bash +cd ~/.config/opencode/superpowers +git pull +``` + +## Troubleshooting + +### Plugin not loading + +1. Check plugin file exists: `ls ~/.config/opencode/superpowers/.opencode/plugin/superpowers.js` +2. Check OpenCode logs for errors +3. Verify Node.js is installed: `node --version` + +### Skills not found + +1. Verify skills directory exists: `ls ~/.config/opencode/superpowers/skills` +2. Use `find_skills` tool to see what's discovered +3. Check file structure: each skill should have a `SKILL.md` file + +### Tool mapping issues + +When a skill references a Claude Code tool you don't have: +- `TodoWrite` → use `update_plan` +- `Task` with subagents → use `@mention` syntax to invoke OpenCode subagents +- `Skill` → use `use_skill` tool +- File operations → use your native tools + +## Getting Help + +- Report issues: https://github.com/obra/superpowers/issues +- Documentation: https://github.com/obra/superpowers +``` + +**Step 2: Verify file created** + +Run: `ls -l .opencode/INSTALL.md` +Expected: File exists + +**Step 3: Commit** + +```bash +git add .opencode/INSTALL.md +git commit -m "docs: add opencode installation guide" +``` + +--- + +### Task 14: Update Main README + +**Files:** +- Modify: `README.md` + +**Step 1: Add OpenCode section** + +Find the section about supported platforms (search for "Codex" in the file), and add after it: + +```markdown +### OpenCode + +Superpowers works with [OpenCode.ai](https://opencode.ai) through a native JavaScript plugin. + +**Installation:** See [.opencode/INSTALL.md](.opencode/INSTALL.md) + +**Features:** +- Custom tools: `use_skill` and `find_skills` +- Automatic session bootstrap +- Personal skills with shadowing +- Supporting files and scripts access +``` + +**Step 2: Verify formatting** + +Run: `grep -A 10 "### OpenCode" README.md` +Expected: Shows the section you added + +**Step 3: Commit** + +```bash +git add README.md +git commit -m "docs: add opencode support to readme" +``` + +--- + +### Task 15: Update Release Notes + +**Files:** +- Modify: `RELEASE-NOTES.md` + +**Step 1: Add entry for OpenCode support** + +At the top of the file (after the header), add: + +```markdown +## [Unreleased] + +### Added + +- **OpenCode Support**: Native JavaScript plugin for OpenCode.ai + - Custom tools: `use_skill` and `find_skills` + - Automatic session bootstrap with tool mapping instructions + - Shared core module (`lib/skills-core.js`) for code reuse + - Installation guide in `.opencode/INSTALL.md` + +### Changed + +- **Refactored Codex Implementation**: Now uses shared `lib/skills-core.js` module + - Eliminates code duplication between Codex and OpenCode + - Single source of truth for skill discovery and parsing + +--- + +``` + +**Step 2: Verify formatting** + +Run: `head -30 RELEASE-NOTES.md` +Expected: Shows your new section + +**Step 3: Commit** + +```bash +git add RELEASE-NOTES.md +git commit -m "docs: add opencode support to release notes" +``` + +--- + +## Phase 5: Final Verification + +### Task 16: Test Codex Still Works + +**Files:** +- Test: `.codex/superpowers-codex` + +**Step 1: Test find-skills command** + +Run: `.codex/superpowers-codex find-skills | head -20` +Expected: Shows list of skills with names and descriptions + +**Step 2: Test use-skill command** + +Run: `.codex/superpowers-codex use-skill superpowers:brainstorming | head -20` +Expected: Shows brainstorming skill content + +**Step 3: Test bootstrap command** + +Run: `.codex/superpowers-codex bootstrap | head -30` +Expected: Shows bootstrap content with instructions + +**Step 4: If all tests pass, record success** + +No commit needed - this is verification only. + +--- + +### Task 17: Verify File Structure + +**Files:** +- Check: All new files exist + +**Step 1: Verify all files created** + +Run: +```bash +ls -l lib/skills-core.js +ls -l .opencode/plugin/superpowers.js +ls -l .opencode/INSTALL.md +``` + +Expected: All files exist + +**Step 2: Verify directory structure** + +Run: `tree -L 2 .opencode/` (or `find .opencode -type f` if tree not available) +Expected: +``` +.opencode/ +├── INSTALL.md +└── plugin/ + └── superpowers.js +``` + +**Step 3: If structure correct, proceed** + +No commit needed - this is verification only. + +--- + +### Task 18: Final Commit and Summary + +**Files:** +- Check: `git status` + +**Step 1: Check git status** + +Run: `git status` +Expected: Working tree clean, all changes committed + +**Step 2: Review commit log** + +Run: `git log --oneline -20` +Expected: Shows all commits from this implementation + +**Step 3: Create summary document** + +Create a completion summary showing: +- Total commits made +- Files created: `lib/skills-core.js`, `.opencode/plugin/superpowers.js`, `.opencode/INSTALL.md` +- Files modified: `.codex/superpowers-codex`, `README.md`, `RELEASE-NOTES.md` +- Testing performed: Codex commands verified +- Ready for: Testing with actual OpenCode installation + +**Step 4: Report completion** + +Present summary to user and offer to: +1. Push to remote +2. Create pull request +3. Test with real OpenCode installation (requires OpenCode installed) + +--- + +## Testing Guide (Manual - Requires OpenCode) + +These steps require OpenCode to be installed and are not part of the automated implementation: + +1. **Install skills**: Follow `.opencode/INSTALL.md` +2. **Start OpenCode session**: Verify bootstrap appears +3. **Test find_skills**: Should list all available skills +4. **Test use_skill**: Load a skill and verify content appears +5. **Test supporting files**: Verify skill directory paths are accessible +6. **Test personal skills**: Create a personal skill and verify it shadows core +7. **Test tool mapping**: Verify TodoWrite → update_plan mapping works + +## Success Criteria + +- [ ] `lib/skills-core.js` created with all core functions +- [ ] `.codex/superpowers-codex` refactored to use shared core +- [ ] Codex commands still work (find-skills, use-skill, bootstrap) +- [ ] `.opencode/plugin/superpowers.js` created with tools and hooks +- [ ] Installation guide created +- [ ] README and RELEASE-NOTES updated +- [ ] All changes committed +- [ ] Working tree clean diff --git a/plugins/cache/superpowers/superpowers/4.0.3/docs/plans/2025-11-28-skills-improvements-from-user-feedback.md b/plugins/cache/superpowers/superpowers/4.0.3/docs/plans/2025-11-28-skills-improvements-from-user-feedback.md new file mode 100644 index 00000000..52a8b0ea --- /dev/null +++ b/plugins/cache/superpowers/superpowers/4.0.3/docs/plans/2025-11-28-skills-improvements-from-user-feedback.md @@ -0,0 +1,711 @@ +# Skills Improvements from User Feedback + +**Date:** 2025-11-28 +**Status:** Draft +**Source:** Two Claude instances using superpowers in real development scenarios + +--- + +## Executive Summary + +Two Claude instances provided detailed feedback from actual development sessions. Their feedback reveals **systematic gaps** in current skills that allowed preventable bugs to ship despite following the skills. + +**Critical insight:** These are problem reports, not just solution proposals. The problems are real; the solutions need careful evaluation. + +**Key themes:** +1. **Verification gaps** - We verify operations succeed but not that they achieve intended outcomes +2. **Process hygiene** - Background processes accumulate and interfere across subagents +3. **Context optimization** - Subagents get too much irrelevant information +4. **Self-reflection missing** - No prompt to critique own work before handoff +5. **Mock safety** - Mocks can drift from interfaces without detection +6. **Skill activation** - Skills exist but aren't being read/used + +--- + +## Problems Identified + +### Problem 1: Configuration Change Verification Gap + +**What happened:** +- Subagent tested "OpenAI integration" +- Set `OPENAI_API_KEY` env var +- Got status 200 responses +- Reported "OpenAI integration working" +- **BUT** response contained `"model": "claude-sonnet-4-20250514"` - was actually using Anthropic + +**Root cause:** +`verification-before-completion` checks operations succeed but not that outcomes reflect intended configuration changes. + +**Impact:** High - False confidence in integration tests, bugs ship to production + +**Example failure pattern:** +- Switch LLM provider → verify status 200 but don't check model name +- Enable feature flag → verify no errors but don't check feature is active +- Change environment → verify deployment succeeds but don't check environment vars + +--- + +### Problem 2: Background Process Accumulation + +**What happened:** +- Multiple subagents dispatched during session +- Each started background server processes +- Processes accumulated (4+ servers running) +- Stale processes still bound to ports +- Later E2E test hit stale server with wrong config +- Confusing/incorrect test results + +**Root cause:** +Subagents are stateless - don't know about previous subagents' processes. No cleanup protocol. + +**Impact:** Medium-High - Tests hit wrong server, false passes/failures, debugging confusion + +--- + +### Problem 3: Context Bloat in Subagent Prompts + +**What happened:** +- Standard approach: give subagent full plan file to read +- Experiment: give only task + pattern + file + verify command +- Result: Faster, more focused, single-attempt completion more common + +**Root cause:** +Subagents waste tokens and attention on irrelevant plan sections. + +**Impact:** Medium - Slower execution, more failed attempts + +**What worked:** +``` +You are adding a single E2E test to packnplay's test suite. + +**Your task:** Add `TestE2E_FeaturePrivilegedMode` to `pkg/runner/e2e_test.go` + +**What to test:** A local devcontainer feature that requests `"privileged": true` +in its metadata should result in the container running with `--privileged` flag. + +**Follow the exact pattern of TestE2E_FeatureOptionValidation** (at the end of the file) + +**After writing, run:** `go test -v ./pkg/runner -run TestE2E_FeaturePrivilegedMode -timeout 5m` +``` + +--- + +### Problem 4: No Self-Reflection Before Handoff + +**What happened:** +- Added self-reflection prompt: "Look at your work with fresh eyes - what could be better?" +- Implementer for Task 5 identified failing test was due to implementation bug, not test bug +- Traced to line 99: `strings.Join(metadata.Entrypoint, " ")` creating invalid Docker syntax +- Without self-reflection, would have just reported "test fails" without root cause + +**Root cause:** +Implementers don't naturally step back and critique their own work before reporting completion. + +**Impact:** Medium - Bugs handed off to reviewer that implementer could have caught + +--- + +### Problem 5: Mock-Interface Drift + +**What happened:** +```typescript +// Interface defines close() +interface PlatformAdapter { + close(): Promise; +} + +// Code (BUGGY) calls cleanup() +await adapter.cleanup(); + +// Mock (MATCHES BUG) defines cleanup() +vi.mock('web-adapter', () => ({ + WebAdapter: vi.fn().mockImplementation(() => ({ + cleanup: vi.fn().mockResolvedValue(undefined), // Wrong! + })), +})); +``` +- Tests passed +- Runtime crashed: "adapter.cleanup is not a function" + +**Root cause:** +Mock derived from what buggy code calls, not from interface definition. TypeScript can't catch inline mocks with wrong method names. + +**Impact:** High - Tests give false confidence, runtime crashes + +**Why testing-anti-patterns didn't prevent this:** +The skill covers testing mock behavior and mocking without understanding, but not the specific pattern of "derive mock from interface, not implementation." + +--- + +### Problem 6: Code Reviewer File Access + +**What happened:** +- Code reviewer subagent dispatched +- Couldn't find test file: "The file doesn't appear to exist in the repository" +- File actually exists +- Reviewer didn't know to explicitly read it first + +**Root cause:** +Reviewer prompts don't include explicit file reading instructions. + +**Impact:** Low-Medium - Reviews fail or incomplete + +--- + +### Problem 7: Fix Workflow Latency + +**What happened:** +- Implementer identifies bug during self-reflection +- Implementer knows the fix +- Current workflow: report → I dispatch fixer → fixer fixes → I verify +- Extra round-trip adds latency without adding value + +**Root cause:** +Rigid separation between implementer and fixer roles when implementer has already diagnosed. + +**Impact:** Low - Latency, but no correctness issue + +--- + +### Problem 8: Skills Not Being Read + +**What happened:** +- `testing-anti-patterns` skill exists +- Neither human nor subagents read it before writing tests +- Would have prevented some issues (though not all - see Problem 5) + +**Root cause:** +No enforcement that subagents read relevant skills. No prompt includes skill reading. + +**Impact:** Medium - Skill investment wasted if not used + +--- + +## Proposed Improvements + +### 1. verification-before-completion: Add Configuration Change Verification + +**Add new section:** + +```markdown +## Verifying Configuration Changes + +When testing changes to configuration, providers, feature flags, or environment: + +**Don't just verify the operation succeeded. Verify the output reflects the intended change.** + +### Common Failure Pattern + +Operation succeeds because *some* valid config exists, but it's not the config you intended to test. + +### Examples + +| Change | Insufficient | Required | +|--------|-------------|----------| +| Switch LLM provider | Status 200 | Response contains expected model name | +| Enable feature flag | No errors | Feature behavior actually active | +| Change environment | Deploy succeeds | Logs/vars reference new environment | +| Set credentials | Auth succeeds | Authenticated user/context is correct | + +### Gate Function + +``` +BEFORE claiming configuration change works: + +1. IDENTIFY: What should be DIFFERENT after this change? +2. LOCATE: Where is that difference observable? + - Response field (model name, user ID) + - Log line (environment, provider) + - Behavior (feature active/inactive) +3. RUN: Command that shows the observable difference +4. VERIFY: Output contains expected difference +5. ONLY THEN: Claim configuration change works + +Red flags: + - "Request succeeded" without checking content + - Checking status code but not response body + - Verifying no errors but not positive confirmation +``` + +**Why this works:** +Forces verification of INTENT, not just operation success. + +--- + +### 2. subagent-driven-development: Add Process Hygiene for E2E Tests + +**Add new section:** + +```markdown +## Process Hygiene for E2E Tests + +When dispatching subagents that start services (servers, databases, message queues): + +### Problem + +Subagents are stateless - they don't know about processes started by previous subagents. Background processes persist and can interfere with later tests. + +### Solution + +**Before dispatching E2E test subagent, include cleanup in prompt:** + +``` +BEFORE starting any services: +1. Kill existing processes: pkill -f "" 2>/dev/null || true +2. Wait for cleanup: sleep 1 +3. Verify port free: lsof -i : && echo "ERROR: Port still in use" || echo "Port free" + +AFTER tests complete: +1. Kill the process you started +2. Verify cleanup: pgrep -f "" || echo "Cleanup successful" +``` + +### Example + +``` +Task: Run E2E test of API server + +Prompt includes: +"Before starting the server: +- Kill any existing servers: pkill -f 'node.*server.js' 2>/dev/null || true +- Verify port 3001 is free: lsof -i :3001 && exit 1 || echo 'Port available' + +After tests: +- Kill the server you started +- Verify: pgrep -f 'node.*server.js' || echo 'Cleanup verified'" +``` + +### Why This Matters + +- Stale processes serve requests with wrong config +- Port conflicts cause silent failures +- Process accumulation slows system +- Confusing test results (hitting wrong server) +``` + +**Trade-off analysis:** +- Adds boilerplate to prompts +- But prevents very confusing debugging +- Worth it for E2E test subagents + +--- + +### 3. subagent-driven-development: Add Lean Context Option + +**Modify Step 2: Execute Task with Subagent** + +**Before:** +``` +Read that task carefully from [plan-file]. +``` + +**After:** +``` +## Context Approaches + +**Full Plan (default):** +Use when tasks are complex or have dependencies: +``` +Read Task N from [plan-file] carefully. +``` + +**Lean Context (for independent tasks):** +Use when task is standalone and pattern-based: +``` +You are implementing: [1-2 sentence task description] + +File to modify: [exact path] +Pattern to follow: [reference to existing function/test] +What to implement: [specific requirement] +Verification: [exact command to run] + +[Do NOT include full plan file] +``` + +**Use lean context when:** +- Task follows existing pattern (add similar test, implement similar feature) +- Task is self-contained (doesn't need context from other tasks) +- Pattern reference is sufficient (e.g., "follow TestE2E_FeatureOptionValidation") + +**Use full plan when:** +- Task has dependencies on other tasks +- Requires understanding of overall architecture +- Complex logic that needs context +``` + +**Example:** +``` +Lean context prompt: + +"You are adding a test for privileged mode in devcontainer features. + +File: pkg/runner/e2e_test.go +Pattern: Follow TestE2E_FeatureOptionValidation (at end of file) +Test: Feature with `"privileged": true` in metadata results in `--privileged` flag +Verify: go test -v ./pkg/runner -run TestE2E_FeaturePrivilegedMode -timeout 5m + +Report: Implementation, test results, any issues." +``` + +**Why this works:** +Reduces token usage, increases focus, faster completion when appropriate. + +--- + +### 4. subagent-driven-development: Add Self-Reflection Step + +**Modify Step 2: Execute Task with Subagent** + +**Add to prompt template:** + +``` +When done, BEFORE reporting back: + +Take a step back and review your work with fresh eyes. + +Ask yourself: +- Does this actually solve the task as specified? +- Are there edge cases I didn't consider? +- Did I follow the pattern correctly? +- If tests are failing, what's the ROOT CAUSE (implementation bug vs test bug)? +- What could be better about this implementation? + +If you identify issues during this reflection, fix them now. + +Then report: +- What you implemented +- Self-reflection findings (if any) +- Test results +- Files changed +``` + +**Why this works:** +Catches bugs implementer can find themselves before handoff. Documented case: identified entrypoint bug through self-reflection. + +**Trade-off:** +Adds ~30 seconds per task, but catches issues before review. + +--- + +### 5. requesting-code-review: Add Explicit File Reading + +**Modify the code-reviewer template:** + +**Add at the beginning:** + +```markdown +## Files to Review + +BEFORE analyzing, read these files: + +1. [List specific files that changed in the diff] +2. [Files referenced by changes but not modified] + +Use Read tool to load each file. + +If you cannot find a file: +- Check exact path from diff +- Try alternate locations +- Report: "Cannot locate [path] - please verify file exists" + +DO NOT proceed with review until you've read the actual code. +``` + +**Why this works:** +Explicit instruction prevents "file not found" issues. + +--- + +### 6. testing-anti-patterns: Add Mock-Interface Drift Anti-Pattern + +**Add new Anti-Pattern 6:** + +```markdown +## Anti-Pattern 6: Mocks Derived from Implementation + +**The violation:** +```typescript +// Code (BUGGY) calls cleanup() +await adapter.cleanup(); + +// Mock (MATCHES BUG) has cleanup() +const mock = { + cleanup: vi.fn().mockResolvedValue(undefined) +}; + +// Interface (CORRECT) defines close() +interface PlatformAdapter { + close(): Promise; +} +``` + +**Why this is wrong:** +- Mock encodes the bug into the test +- TypeScript can't catch inline mocks with wrong method names +- Test passes because both code and mock are wrong +- Runtime crashes when real object is used + +**The fix:** +```typescript +// ✅ GOOD: Derive mock from interface + +// Step 1: Open interface definition (PlatformAdapter) +// Step 2: List methods defined there (close, initialize, etc.) +// Step 3: Mock EXACTLY those methods + +const mock = { + initialize: vi.fn().mockResolvedValue(undefined), + close: vi.fn().mockResolvedValue(undefined), // From interface! +}; + +// Now test FAILS because code calls cleanup() which doesn't exist +// That failure reveals the bug BEFORE runtime +``` + +### Gate Function + +``` +BEFORE writing any mock: + + 1. STOP - Do NOT look at the code under test yet + 2. FIND: The interface/type definition for the dependency + 3. READ: The interface file + 4. LIST: Methods defined in the interface + 5. MOCK: ONLY those methods with EXACTLY those names + 6. DO NOT: Look at what your code calls + + IF your test fails because code calls something not in mock: + ✅ GOOD - The test found a bug in your code + Fix the code to call the correct interface method + NOT the mock + + Red flags: + - "I'll mock what the code calls" + - Copying method names from implementation + - Mock written without reading interface + - "The test is failing so I'll add this method to the mock" +``` + +**Detection:** + +When you see runtime error "X is not a function" and tests pass: +1. Check if X is mocked +2. Compare mock methods to interface methods +3. Look for method name mismatches +``` + +**Why this works:** +Directly addresses the failure pattern from feedback. + +--- + +### 7. subagent-driven-development: Require Skills Reading for Test Subagents + +**Add to prompt template when task involves testing:** + +```markdown +BEFORE writing any tests: + +1. Read testing-anti-patterns skill: + Use Skill tool: superpowers:testing-anti-patterns + +2. Apply gate functions from that skill when: + - Writing mocks + - Adding methods to production classes + - Mocking dependencies + +This is NOT optional. Tests that violate anti-patterns will be rejected in review. +``` + +**Why this works:** +Ensures skills are actually used, not just exist. + +**Trade-off:** +Adds time to each task, but prevents entire classes of bugs. + +--- + +### 8. subagent-driven-development: Allow Implementer to Fix Self-Identified Issues + +**Modify Step 2:** + +**Current:** +``` +Subagent reports back with summary of work. +``` + +**Proposed:** +``` +Subagent performs self-reflection, then: + +IF self-reflection identifies fixable issues: + 1. Fix the issues + 2. Re-run verification + 3. Report: "Initial implementation + self-reflection fix" + +ELSE: + Report: "Implementation complete" + +Include in report: +- Self-reflection findings +- Whether fixes were applied +- Final verification results +``` + +**Why this works:** +Reduces latency when implementer already knows the fix. Documented case: would have saved one round-trip for entrypoint bug. + +**Trade-off:** +Slightly more complex prompt, but faster end-to-end. + +--- + +## Implementation Plan + +### Phase 1: High-Impact, Low-Risk (Do First) + +1. **verification-before-completion: Configuration change verification** + - Clear addition, doesn't change existing content + - Addresses high-impact problem (false confidence in tests) + - File: `skills/verification-before-completion/SKILL.md` + +2. **testing-anti-patterns: Mock-interface drift** + - Adds new anti-pattern, doesn't modify existing + - Addresses high-impact problem (runtime crashes) + - File: `skills/testing-anti-patterns/SKILL.md` + +3. **requesting-code-review: Explicit file reading** + - Simple addition to template + - Fixes concrete problem (reviewers can't find files) + - File: `skills/requesting-code-review/SKILL.md` + +### Phase 2: Moderate Changes (Test Carefully) + +4. **subagent-driven-development: Process hygiene** + - Adds new section, doesn't change workflow + - Addresses medium-high impact (test reliability) + - File: `skills/subagent-driven-development/SKILL.md` + +5. **subagent-driven-development: Self-reflection** + - Changes prompt template (higher risk) + - But documented to catch bugs + - File: `skills/subagent-driven-development/SKILL.md` + +6. **subagent-driven-development: Skills reading requirement** + - Adds prompt overhead + - But ensures skills are actually used + - File: `skills/subagent-driven-development/SKILL.md` + +### Phase 3: Optimization (Validate First) + +7. **subagent-driven-development: Lean context option** + - Adds complexity (two approaches) + - Needs validation that it doesn't cause confusion + - File: `skills/subagent-driven-development/SKILL.md` + +8. **subagent-driven-development: Allow implementer to fix** + - Changes workflow (higher risk) + - Optimization, not bug fix + - File: `skills/subagent-driven-development/SKILL.md` + +--- + +## Open Questions + +1. **Lean context approach:** + - Should we make it the default for pattern-based tasks? + - How do we decide which approach to use? + - Risk of being too lean and missing important context? + +2. **Self-reflection:** + - Will this slow down simple tasks significantly? + - Should it only apply to complex tasks? + - How do we prevent "reflection fatigue" where it becomes rote? + +3. **Process hygiene:** + - Should this be in subagent-driven-development or a separate skill? + - Does it apply to other workflows beyond E2E tests? + - How do we handle cases where process SHOULD persist (dev servers)? + +4. **Skills reading enforcement:** + - Should we require ALL subagents to read relevant skills? + - How do we keep prompts from becoming too long? + - Risk of over-documenting and losing focus? + +--- + +## Success Metrics + +How do we know these improvements work? + +1. **Configuration verification:** + - Zero instances of "test passed but wrong config was used" + - Jesse doesn't say "that's not actually testing what you think" + +2. **Process hygiene:** + - Zero instances of "test hit wrong server" + - No port conflict errors during E2E test runs + +3. **Mock-interface drift:** + - Zero instances of "tests pass but runtime crashes on missing method" + - No method name mismatches between mocks and interfaces + +4. **Self-reflection:** + - Measurable: Do implementer reports include self-reflection findings? + - Qualitative: Do fewer bugs make it to code review? + +5. **Skills reading:** + - Subagent reports reference skill gate functions + - Fewer anti-pattern violations in code review + +--- + +## Risks and Mitigations + +### Risk: Prompt Bloat +**Problem:** Adding all these requirements makes prompts overwhelming +**Mitigation:** +- Phase implementation (don't add everything at once) +- Make some additions conditional (E2E hygiene only for E2E tests) +- Consider templates for different task types + +### Risk: Analysis Paralysis +**Problem:** Too much reflection/verification slows execution +**Mitigation:** +- Keep gate functions quick (seconds, not minutes) +- Make lean context opt-in initially +- Monitor task completion times + +### Risk: False Sense of Security +**Problem:** Following checklist doesn't guarantee correctness +**Mitigation:** +- Emphasize gate functions are minimums, not maximums +- Keep "use judgment" language in skills +- Document that skills catch common failures, not all failures + +### Risk: Skill Divergence +**Problem:** Different skills give conflicting advice +**Mitigation:** +- Review changes across all skills for consistency +- Document how skills interact (Integration sections) +- Test with real scenarios before deployment + +--- + +## Recommendation + +**Proceed with Phase 1 immediately:** +- verification-before-completion: Configuration change verification +- testing-anti-patterns: Mock-interface drift +- requesting-code-review: Explicit file reading + +**Test Phase 2 with Jesse before finalizing:** +- Get feedback on self-reflection impact +- Validate process hygiene approach +- Confirm skills reading requirement is worth overhead + +**Hold Phase 3 pending validation:** +- Lean context needs real-world testing +- Implementer-fix workflow change needs careful evaluation + +These changes address real problems documented by users while minimizing risk of making skills worse. diff --git a/skills/ralph/__pycache__/agent_capability_registry.cpython-312.pyc b/skills/ralph/__pycache__/agent_capability_registry.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7fcc5ba89f94beac6ec928f992c7fde31e35df1 GIT binary patch literal 23227 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

l%2xKAf7c+@ z4E%(}>Avpp8-B^=Hy|II%;=xpa|=94@)M%)BlJc@h4^2=cdKRe$S&F(sXnUgWEV^! zWLh1*;iM%HF|Cfx0C6kQ&2SuL(;$~^c;QsTvnOPU-d@Haf5)tLXj^LXCuJiPyuW;j z|CW5diuV^;2=J>Y-rqr!hUxLorLvx;e0}qr zGvCm1+eOKzt#A{0L)hJ;NZvub;|5O;sZfNM>zzQ?Z&*K9)>un;sSb|>FQv$4k>CEa zku_>$Q^$u~!rSXr-fp^KPWmuw>_}U|+il?O<|lbOIC^N-6h%;YkYkzHRa&p&FH)q6 z2~L*cxX?m4J$WH`OXgQc1`l#2V_+Bk=Z>Kx>oG=g4RzZ)T=+6VQ7&l_U8d$JVO@MS zjy|^r-kpfV;A6u!XqI~=+bEs{BMGFeWMR#y99js24uvKv8mMSQfhNk-lg;Eq7VK1Q zp@O7bDccw72+AI%L{}J_Xd=NOP-c-3pdy3w^sSI6MUK@U%fC&w``!I4R_OF%sZaOhuD-sZgjuCuFRw5#V|T;z6Lt3D|DPlVk+ODE$gg`qcz_{=zeG_QV^E~d&-`+K zK`%$jxgvAQdlwDqufCnSm6~tQdA3O9y+0BD7h3=Sy%t;>JLK256C*7)?WcZh=e9{Tb?{jCe>{<(ekJ(bzYzU6(Z zm3<$1`tmh(zv8A(4%EXPQc-)yb=#Gx>s-8)_3lht?z_r?L5nY~miMl@dhh${a=sSH z*OGC!u$B|cXgRU!I>B1DOTO(H_x4XbwK-3lS=<5!kWe0z7iLEA*_k?Ybb%mL~E9ejYJ#WUWL!LApcLN7ep}3D++BE_gwxn7jEC#wR1-Y%N_i57p7wj|8yJ`uA@Xa z#$8B$h4Y>id*qZUAMukN6LIxaZ~?C%9A=<3Pw3P7X$)7wg26Hr7W}MPSGP`SOgdCl zrdh@#eTamJ4lIDwY1w%7I-?~WroHzGsvz?OS-JFqI4yXo!@K{M=!K+#%DV#>7n+xk z-)sA?UBBP;hdnFLf8pINQsAPhS=Tfh-mx_sSoR)-*S|(LmLadWD1SsxYEg)tQS+zt z%ob&HhxYZl!bT<*zWfSNxez8epU(59T7H_h`Wt!$T1)6UPVT-}!q$`*nPx}?rC;RrBJ*9Xfy15E*o(Br)HXbi zM*Uh40R5aLP%bED`cUo}J1LA&-1$1&O023`rIAp@@@KyH0bwf^2?81^0HaBG$FC-Z zhj{f8$@Up8H%wwdH;AF7V28FVWTi(`u|j^r>jtrcWnti^n~zw5HL04>HV~bWWigmi z_;gMjAEHem836utd`^rPaQRGu`y}CM(yHVujyi;A1^W`oR9ED#cj!kIa}{@jw}bPi zvlXo?6@7~pzY}~vxO5@g(U-00le|NUBK3>iI}E})`fZpj;`U6D0%8>>i>ZMzq@!$5 z1J#rb*@9#Teq1rwpQ0`OV_(irFGp@H_2s%2n&xWekA1sN@^-1OQSLPej{pI6*O(BY zhSTmDI4H2$4EYjFeE{2IeB={=$;uuZG>Izr)A)wYbnEa99jM2|H{QV5H@S!S^bhj4 zYaZ-5@W=jxONMV>yz|A|U(8jtN>!~3k!)4_VgW^wGLVVBu0UIPFq5($y(Vfy}i$(Fw}=q$W|0)D=JIzLIpDJo7=QD|4bfqS0nhNyT6 z1vH={3KnY}3Tb_T!1}0QWXVYNhje*?3PzDcpx|+ZL1ep@r79Bg7F45Jc_TueEVM@|CDTl zvj^MW#$;EN^_Hu}|?SVR&W&GX}hyMq-Q1mYZUR%IY7cGg_TZY!{yp zgw(~i_zw%Op%s71+TmMD2E#+M!(d*o<_zvX;T-JG_2*pgM_lipbM1f1Rs9K9{-@lQ z2aaI6Cg%uBj$kIVJ?rSaX?<8%Zh%VXM{XZi-_u>Em literal 0 HcmV?d00001 diff --git a/skills/ralph/__pycache__/meta_agent_orchestrator.cpython-312.pyc b/skills/ralph/__pycache__/meta_agent_orchestrator.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4ff8095cef377130343f39bb236d72088aff0164 GIT binary patch literal 28514 zcmdUYdvH`&dgtx#+pT`--Fm;S9tbt)0T{56!A3{|1VVr$Y!G-ljqVk+(95@5fZAe5 zGvj1hGfa>&lSS-!3Xyn&95WetcdE>6QW;Nnv*oFzHr;M9>ggeglX30F$=0qwq-O0u zcK7$4+xPZ^2HQ!hw)WbbKKH!td47-I`OeXwWoBAAJRKt!JvWYU+%M@xeKKO6^$&C$ zcbyZt0Z!D3`VrlLj{WKf^z7F#U|_%e0MCAn14j018ZhD4Fp@E99x#tu1}vl20qdx3 zz^0>e_!0YP=0N6X)<70}H;!bF<_zR8zkVclAeWVqH;||2q`cvJwNmk4gf_(ARG(;K z={KqG@n13HZM1_PmZDMdC%SLPUe4+7nBO)iFFGZ4b7DHhFIv>{28#9E0Zz2O&WScD zN6k4oZUui_Jr9{$sHfET;o;1!~+t zrC9hnH&7)BV$lWkl59qstJLyz+?0Mw?=1FzV(oR0Oq>^vNIrK{+c{~>CmfXr&r4pP z?DmbzR_hV>nERaM6-FmVe4ZwFkz!m+;TazjhQ?)q71Ahp#s)_wMbFr|R%?^c@Ah60 z&dQSef;fI@OmL5hf+$T$W1=)RI3TyC&-d_d}K0~?3g@$4gp>Pt%#=`KkJp`i|(_Y5sz=m z`Z4uzkCTt`-5#$m%6FiYsQKsw72zI<8u}!kQy;a6Zl8N_#O?J)O>VD5$M;PwvsJfo7+D>Mlk8phn3cSO1E}qB3Zm)9Wv6mZ`&A68f`wWc-}d5H+$) zQ4{)e)Qzf~M~{t2ve%!-ax}+#9X@4xC~j;{bL%vruX7TI)ydJy#H!R|MH;Xgd8|a^ zK!#`g%XHWlI+&XpBr_Z;XA0L%k z*k3mISVB)rw$%35uMk$pYu(T?2?&- zij!3|b0ESTTkcGU5|&%>l|yoknl=5HQCXjF%%;pvOVmo^)#r2jCcXXww!)OLp@ryW z!O;v_V>Aq=S0|-O3|fXfIYtXAY91UPofwgP5+<1&D@lx6Fu;S-2)sQ`t6WG`Eh49w zoDw+EjAQ6%>SELJ6P+hI(fPe6dU`0p+yC_PC(4lyKc(l%!u0Bh-k(7 zEI*mlC_Tn|u+XCX*-7tI)F{a^rfkOe5a`O7)Z;X#?H0bPqq{T8?>o_VDr)TP?ZuqS zIJ$p-cUMnmYTKVdHDz*k;h&c}mD*krVe^DJ_WYSnbih{*C@rS6Ni8-afS&b(j18*` z`~;ZjfI;FVqp07FXvqYhf%zzmXTA)Hr%&SDnDTC-cMt=!WI?Q%y;%mVl1Hp-ioo!S#bT*sNH3PW&JUDIWn!sRA{L9>5HFU!&a3Qipd7@n zJj&Ao@|W~V6JQpYBVNHROpbZL;D&@tU`bKEM~w15(8Z`tl)QtohjE9fUE^aO$s08e zVJUe(ra_9DCuGmK4EE9!&GJr2gC6&Y$IqD8$Bh`fXa=#1@kyUd{5@)uC7(Ry8XTV- z^L=b!A*1fgE()cBO|b=SLhZnP<(-tmItY#mQtSeYup)sR^V`+6O)-NiOF#}tFC0gO zuOEYRotx%{@tgY0l=>(Qdxj}T%A@w&H0RP{rno8YEnSaOFGFtR&{1gHTi}jfX=KPt zH4x-lipX@iCdR!!mj_+za{2S9*PD~VP9T}L63z@4v1MO-arVWat>%7Z%}vh@&v!2b zI=*#u&A{1f+46{@JA9M!SW+9Q?yQY7@LcD7TKlItRYbd@L(9{&Y?w!ulxG^^EzKz8 zFr`G{^$9uH8l2YkaZbah8`{UmE=sab@Qn*3G>}XoPc;gRr<3d=L4xqgFQPR0FdQc@ zo5@cBQR7AT$fU%=-_pzd6vUGl;-%UPu};nKjk~C1znyhw?Clg%c(=ou;XcYPm=nJ_ z9pEEHW!I=i_{>uSA@Y1Y3Qc`iV>_*vY$)-@rCIp?F&5C5_2W$%UIgQ+diTy+q zoAvDn@FexEZkWPT9#Nf(qmLbg9qP#Q}>%RTD-r$ovkSWBF*UM8ZJiSoyMruzQWWmPksf#>GhXZM65&lH!>9GWwR`SM6jJ$&Ycg8A$) zUr*obo@-dxG2epkJ>>PqO>1VO(XrrI=kT+Z#hG%~^d@83LjM|vpT(hv^s{b2_yY=8 zI)K_fh=1CnF2D8fASf;hJti2CIG_jyBqA`ufV2V0tg(7U7%&c4B&!yd!I-Lfz$V#| z%fjBQVE7R)n=a}cGYZd|_z=ZV}g;~c0)ob#pUB;cX6AlQ?RMhIUo-*(<|{_f^L$31%$G1iUB^m+-|llq4Gh4l?B*CfiXQSE;cS0$>e zmrtTlh4~p2=0`&=69!7vZHRU0XUmKl)3d`YCNeCFsJC{;O8p`N);P@soAZ){$(^F&P^ zarjXNlfF5Kf7)Y?`PO?d`Qo&Kp#*}+)CgjiSiAh|MnVfDBm5?;;|u^dpcNvhg=C~O zhy$HqsZF8q+Slu0{jYBMu3Xr}K@r5EO1w|}}UMxmPF;oL?phPT% zTMDIs8z>XY;g%x}wYUOlD##D&m_Nis2!vK5wDPggDuh-6N2`un2tZ@=)Bj(r0-h%T zYH_qoIKmJ$mPhED^7^DvE6drgLS8EB29;fCXLv;tu>?djt|BvnLh>#v*bOVjGbT*9 z0c?y&Bf=$*?>xXcA2fXrL+}R2AA`*p+?E89HM4Shq9#i1IhQ09(rjX+!3q~-Q+HYC z1#%0*sFAkVe8W#V!k0iQ(}>vV3GA>Y+{Mc#j93*fzd$a7$o~^^8Aa1SA(w_ai{?9) zw__{C{i z%^s~!)V=}bOjkm#n3qroErpnmezmH3MF-w&+FJqM?Alu)-ZIrUr~{mfKtA@cw`}#z zC#b&RTGbc-6^q`E&3Ity#m*9ceHYYRruR$0P$dDftot$C90*f3i8O#b0nxe6Lp_dK zfNQ%)m^U$QVqErp{0{)+qL~Rf#IuU5lb;Ya0hAgNlGqQ;glFaOlsT#w&q73sMMiT( zX>eSWfHHU|Al?IKuo37$q7}gAkEw$Y;u+IIXh@=&ZlW756~5R{VYwuRxd@Hd!Ve)_ z?xIM$g0M2d&Fgn0zO}{xN`FC8s4BJj^OJ%Vq|#seB!Wt)g3{f~0qc1Vq9)k&0V2nttG5siUBuv5ami7ejDm|Zj6hlS-I6h5=a zuL@g3!q%|xOn|>?gMwICcK!7H=}2zD^|JZ0>s9kr!Rl?xhr_vhQ-V6exx1j_Uwdu# zwQFCV{qn+>mv!OnZIOZ!%6{E7?+R{c4HrBgsi=NrGZk75gi_W_T$vM}&yG}}jg-G~2mO{s%D2*Q2@*7KK>|BG8!4srBXia@ z+pI0<*mcj`st7-iNwPWUO2)31F`E-5*#y*!N1Bu;k-4bLJdRI%M&1M#qvfSKuqT~< zASSSv&;6AQ(X0|e?JF7!{)`%0MC)UDpI$@T7yd>9yZOR-ArwAVzt7t?2#t^BeR|sx zSjw=*)YS2c3o&9IZKrW%jFcJ}vnb@nMtrcB9jbYEX*?@Mj_y1KjiPq{jK z+V;_I6z`KKrD$=wB-8@Wk02SOkEX^u?Fmf6hsMgJV#}AwnIh+F5!Fn73WZ@8@OepR)SYVUiS!&N=^t7_idc6-;Y zUBRY~_r!4R;c!*={R-jDyxS$WN`jmBzE>Tt?g&?O-ml%Dq&gU`?Mg~e8?N3Tt~hYN zy6(;1+ox`w3bq`4zc##~CtQ6r?e{lqR8n=nKNQ|@Vs*pm(1z3D4X*^<=RzCK-LKj3 z=GohxTb|&SL+^Kl>yL+PdhgfN5rPqH-2c8UT+{!cBs0gl#${TpjQU6Ivh?btN0w+& zc%#_>hlZs=ABhA$>9TK7qXOtB68Y$TeT%{u;8mXV$TnfhqM?-gE+_KeGpO{8sXdw~ zu9kq^1KqTynp`nJxJ^S4T_LOHjV>mA*2(JWLUi|^j(P~znw4}-d?mN2=VPLKenWF}vjYCo4wy{CF7G9$ zjhubtbdb|dPA54B$RVzQ4SI$evy6KwG$oIg+;3L)c|^fq95ZrZJT$RJPMds<%9w)_ zEp(lo^o(FbHD>hULbr`h_@V_aC~70Fn3|%-Dq9moQJ9Vad!Y$ZAmrbq5UOI-Fd~hi zx=a=LJqo=|p{7`=7N&a8Mjy)p%>j@QxEQGuv?gd2=utLRv)O0;64i;wo4+K^5>lf6 z7?}y2A+Au!S+be5T-dxceYfLoU$CVu*u3w(+Mr|qiunM9>b%0$+{RFDe_+|MtH=Wm=} zytw2KS2CrdTv)6KmA62-xOwu%$;Gkdv*C(ek-}28X?1ByA1>TXTav{$iWfI6xx*z} z0Ds=ReB*Mk;kj_tF6^n?G~X~UmMpc0i?=+=wK%c@9cvCQGw)jWZ1;kL(CwP~K*zO1 zvxnw<*DuXq`T(eQ3F`HzJl5E`^KW<;cYN2sFcRFfFX(7rF~dN|5wJ6Mk;D&7=qkn! z&cFkMN8PjzD_{RT1L(J2uADZAhPdRH4y>34e0s;I(nI7meb3+rtww%>n4$VWJIsDz zA5AV=ikMRj7i?ERK6OI*mrspP3T{~v+-$n0*xgB&C$PiZtdSjn4c;dbA4HBS6vzVu zJerpzF|xUp*3t`UHCiQ{of0%-21yj!x)e)2Z?o0f+j;y%S8pd7TJ^PB{d%j_pJzSR zd-PCed%w_5_F5Eh zUTOH~B50n$)yq%hsB>e_M?c*~pBe zRTv+W=nJRSK5is2n%S{63NbsjMj>X$)+mr2TO%lzV#kJe&5rFAl$bzvTZO?9Y%e7S zF(VSPp&OGVkzutkq!aOdmQxvlL6~{8CbwJY>WJCiu|}(ygD~Wg(FY9@=E{`d84|`| zSfE-{q7-T&qu~j~v3HEF2L%$FxCC1_0rqyDp{ay|)Sh5zs2J6RrB&G4v~`QnaNcw7 zJUVy}vSKQFMoETskNK!KhTOogg&mYjn;=X%K}W|7DV2yJ&tS~DlZJuSAH5=p$QXl^ zS_Lv5#NHq#m=_4un9^rj`y14+J+oyC*izRKlHuEWFu9t9Bks$dQ4ct;3V6qCZeW!O zAWMl#>?~wCAdgQ@U}Q(w2dSr&p79JSyWTYavA2It{C^8)QZk6qtY$TZdC@8v;`ta(BF-_*6$pr(cPEm`%>a0Cn0S zZ0i=ac8awW1#R1c3SXh{qz0*Lv&lW_JFk9IZIl|RhNm>DH@2`mC9(HBO(cTgx!! z@d49=EY4mQvF9PIO!tw_`1R7Slm?D2wyo&ugWSe7PS>DYGa8Ec2b>|35A0vFg5j=l z8}kvc(SrPI$8=myVIWgM<*26VH<3ud11bksdD6<|nq3hN2tW%Hp)Z}oRwQXXZ)BXK zJ!P}Mq8);nx>-hs>5TBHB+kF{1g&YT^uY^iA~g=QLR*no+&-8h3vI``U;#Zc;jFneiENDM_#ZhDqFvW?XX1WTLAA#cWXZh*3Ad--h2` z6&LZ+N}v^x@x0F>B?LV)$v#=LS;3;CE9PSunWCCVaZRMEH6qkRN&u$0A@2vKjNe)KSfIh``BrN5$|)e2qLEM zRxtto-yrnsX4;wV;I8Qh^&XI(SD;tY%oxoV!AD-N)u zR6e1&m{*9Ves?Tu6c!j?N=HUNNR+Y~5VHw6K3^c7oK~Bd3$$jxFnM_#nbAI;7T4(~ z%z=Fh(l{hxtxizSWQf38ZU*)z*^JR*1li`+v1+*A)?MdjVRuafmu~p`VzzHOhVGEL ztPd9VW+F(gQTK$G3KM1+;PI(>_lSG+tmuBh-xMc8k5Rkk-E0@#`vN>l@_wRAG-Us4 zhFiS6Y`Ar0b>p7U#yvBNRcSwc^@22oQ!+TSC3~fhX(0VO+dcB&!Uu9M ziA4Fy2%X3>ln&Z}X5HnqC`_MdF~gyvMnZACFp4KqY?v6Iknd0&1DXB^KIC8m9Z_UP zgQFJgy^9jguSqyAKs|vjF~tIm%w9k-s{K>s@Y0%B=h0rpLYCkjf7w&|Xdm^+MmXq^ zwL-3C`_J;XFN$*=*AL7eSm>WW@n%`@T3 z?V*D0LC1lB1x{qku6MKF$qsL6Tg^Fs!?p18;?R39z5nWeJpEfm!JOj(V<_i%1W=Lb zZ?f_~wC55;gI(nJe1StN_U;HauRZggMcubY0tX;uUOO^-WT9d4*-+``6?-GtLP_OA zj?ZkK<0JW{3*u^JOQ^EtgZvi2PJo!s-8dI^)Gt+s9GmeQDH0YPw~KBSg^HX@$HPU< zk>ZM*_8a!a{@X9#dih>))0zb(JEa_`JYr|c4nA|?;m z0aCD)hlyk=P)C}Fb}sL;sCBDyQWhd0TijZSer8G13fL?Iv~U8XrpK8HOj;wxfPJv3 zrJU%KzmC>m%Wz`SdtRP}Uw)UIyX2f9X9GD+tRq1B(-E-v(8$tWzS|WY*^%PXWYtImnY{)IsHJ@dZDr9)a& zOgdDKvS6?gkorKPIjKl|>8I31om?6}dXi3>!vxdQWKx%x4jRvtK7DD^O#UHwcsRE4 zl~^C2wxowO%e8nsNhXl4PEzT-G9mA1)2IEs1T7axA@Ptn2gjsgkg_^)KL6~*sqn!I z@#N_R2W+|1H%SXmoTtg3RM(8(aboPk7#$AR(oVGs`}?6fx1p8F&WXk;m5IydaSLKq zRfeW4@y7|`lV}CQ1-_AIfd7==Cgv;JC=u*PX?=ASjlAI;3BfM zdUMli&5lsbj&Sx4Bw5QwVKA-AQOvZXMs`9WiGyhBwsPshv~I?Zse@XjK38-;TB__B zPQx!mP&25whQxhKASV3p=&tA!&ta+46chienD_?KIBlTm3pD`hN}Nh#H#^45{HP1r}Go2`8bHiyk%5XYr zpE1od%5EB_DyKXuC&YCRvAzVH@H*gxr}wNSp;ywjL+z>5{-4r0t^VKC7HJ>db&w1y zFqBsXvOgaeVRNWe=$RZn3wRpa8_Zaf?K!Z^6a)=CXZxLmS$obowMz8(Evz04W5`Ob zjngF4D9I#1%e1F1)4<5o_X-qdV&7`Q@fG4D@v}RhDiN(Rky^i*eE`aYGgC3EVXK;L zvKnRg7z`zu#C)ELc!r$k$oUo=Y__sft}$~|+U_Lao$)*QXOxQA8z@FU`F}wgKI<>_TS_8-MV$SmiT)N5jlV=eAR2&6a|3%K zj^b5EUC2=v=#1GW&UqG%3zrthf{q<4=AD0AdM1$lQEuVfI{w4_WmkA>XQ-(&RIxwM^O2(>l3y07YPw%kvs$z}`$KHG9HU+``C7PK;t2AkssOD!wgJ8Hk5~e%^ z!yzV(Y|B=UW`hAXM*v-1=IW#4&ycwiK{?t_r3n&eRF6Y&Y+PG~Hg*((>~poH;4fii z(n^RG8Y`|<@au(!Pjyb*7?OawX>(o$ZmEY9wKXO{{WSuTfZKGl`TI178j%v%Szc@; zf`u*1#&^x{n3w!_^X_)8?miaUeJuF=@!;{^prh}exnB`)VicKmDfKNAZzd4>*`uM- zC>>|Pf1tT(c!)|LH-xq;s156WTmF zG7hVBb^Afn1lV4ga;=L%#^cJ~ohl9WPL8qtM4-u&OOn4;@D zw9oj9wdu;Fyiw(|n7;n}Hi%%!*+luLXqmq@x^u5~7RX5|piEisrc{Ct%ZpGY;zUOK&tkmJ&+=2M81@ z%g#JTjouMSnuz8emZr{*yJfLUtzW7cWHd9@R^>DPqBxCCig=G!)_2ittSq~_vK-AT z=9V?S(9()y!XM@rt>$kI;@BB+kg<7g!D@~(l;d2<*_`%m zV<>0iN{%xY*AU8SSjpM+QI6xfb>6zL^*fns8@T+U|MjSW%V8jQD}fD%XAcL9pZl48 z7a`oOpL$7Zxn94|!ToVtA>2Q4RPNhh_>=8AxJlTWroI4irS+|?eNp%NlMc^3WleWz z2eZ@}jXgBIze>{_NQzgc5E-GU8beZ*h~yB%UZ+KK76^DG8yh6f#rD!Zwd@Ar zhxLs7f`3bV+N7E231Fg{<8Ns`Z9`#yN9fr@&X8~YFvo#Iw9s8KtZy7zEpLIX(+^8m z!MwM22Fv!Z*!Mp$AlWBOCHd;k=XAL1$$+j^th`L@vIlSK{FeU?-$;}^(p2w5s*4lp z==5tI_Fz#L7)x1iSXYakp<-vac=ID80@pbMZSWal8+=LQM>;2C8UF)?F}Ml=sZTnB zuM%4*4UyPrryEag6w_(9u^o+S%oI(}jei@VnmQ2=y?~LF#}i;Gl1x(`2JmP^Jsueo zG}3%aH29GW@%;A^#0@&tn673>4fZprkDtHu#oOtKe^2#I>ypm;rBPDifFS1fTM4a8 zqq0Cf)1@ahi2f|7 z`tlU93rZmPtwMv_2UHtYYmB4F{}m1W)Y#7=v(&=eLtrg}-%Ln3U1tOEN>S+l5vdcF zD`-XH^${BDQS=ECiWmr`+##`w*Cg@kV+4SssfTZy({ZN%M(gB1BO%UFIf}0znm@Ga z*bs7T2s@zLn=NN_*mzXVM!hktpv>Xy7T7bc=GTVuYZt}U`kkTrogd`yjIoEs=4Hpb zMeh_XTke*=*Rk5sAL{52zI-y&aWdF`DtKxjD4bq#oKduZ4;*z%x{$+p&rx^3rg61q zd#GmnT*r3~YdXSW|2@a1kHB}j=erkoEIEEq^j6W5Wx4V_es%A$(B5Og7a{ST3RVx? zbDVyVOSOGm?xV@a7V!_i;39^cmS)kiQ%_VL9wOsd;&kCXloB@7?09?>9*jW&=zbws;C2#JGC<6p0rp)T6`gH&kre)b_Ljz z4p$I)0D7friuf;W@m033`pfZj|W+@P{X++Vtzky7O#qwG5y$gpf^YSdO)*?1Bc(J(1oGb_Nzw{UBPFiW3jG}<#0t$TyuN9E(`sIAC=XZNtk&%e z)$P2iySpu%_d*~eQX=4H6w47^pbIv~*I$@_;mx|+n{I7dIu)*YHk|()Tgj{0n?l)} zmbTx^-U8lCg4p%!`D{8oxh*7YTW(vPTFGgPC^4%!LMVs!j&MG48A9G}g7$3lwgqXi zKz>-lu6*>DI7XUll1+SMs#MrD=Othhji<%?T#<$E-f%!oPBC zO*x87s0q77gKpVlU=NR-SOwdOW}L@4C=!z-O64M_S52=@zrRI5)XEeH7c-pyB?3~Q z-+w@mzdV6MJf@HQZ<>7HXBcdiks(*_ct~!4gBCsZ+$7ayZg_@zwrFj^Jf>rO#|VLr{|3Ka_Syf zsK}>GBmWniMu~@10SRjYe>&2x4k0E?+RemtHY92uuz@j5Q`)IWBSAeK`i<>WR1=__ zP9^uF#A)4y4h)3u>h`!oKCB(Z!SKW$k!qk3Uo}*b-WcF*Oq6w=UN1~tt-r2L#7J?Y zLW*ek3wg3XAKU1IbuujHwF#}91Kf{l_)Q9+8zqO);6EZC;ZEuzH~@dt03IQynf?DAkx6QV zLVXi8Z(Ntmd4CJ(6ym#ie)IK~`Ig0&EYB}oC|E6N3gQ3!rsa%q{<9=I_00Dy zzO>Z&gM)7!Txt#O=ntMa6YPH__{w0gR$OsN_iLM1Yj=ifcg}VGb~i1PXCGfBBzQ1U z=Pp|%aTOTz8SO}YR1%fAE}o(+Yh)~5PJH&OKCMiBe67L8>PZUt7b`P?NQ;JlUYUsp zQLvSRJxSPA;nrWFKuYQhru$_e^q<)c zxKTZ^8%j?v=H5O2A^X55>_p*LbGPZfQ@KsY6bdKoOk!tjoaU&_hx;F6z;D9M zCk!EosyCm+-n^6SER2h$YP3+vD8_CnaK+B@MD5Cc3P5C_+R9ZnUf0-WDVu|t7;qoS&!CbA_8LHSBu6PcoELW>qLshNes@)HAEqPX) z*C>o1*GO6 zLPR}5cVKVqf=dF1l{XkHvg`4F+l91`eH3Jj&U?1AnIJ;HLsax?oz zcAzUF)Zez=vM%jfc87)M?&98`-GTjcyFRd2tQnCS8xGpZn*Z;Isvu>kly&=r!D6g5 zb+BYQ`=X4LP05{ZtgyM4YzCAET#HF9WaDUi*-Bj4|n zLu*U^2{}Y|7*dLh?8nDP7>Xl{6!;N2#NA}tjF$f=Ie$ma$K?DyIsZTo=?Zcg^&`z` z+6m=Sud{rWl92N?{PP|`ir2XZdZW?&AWJYlzi@epzwxiuIe6DPblFDhg1FA%=Rr-K zv0$lvjl<7-4exLNNi*{X&-_}@Erreuty9EWx9(YE;qo(U9Dd#}4)(tE(@N$Ko^h>H z*qW@%HCm|{{496eb-Z(EoxE%HImTU!;?nk8!|NQpYjxGe!bRUw$1VRF2k)|Ycl$et zf_H5{ifGp@@|3Y%w^pBTbS!OO6VI@Yu~C^=g7adS7$Mv&@Js+ z=jiugeWkG#VMe2Mv7c`5wLZ+U8qeq+7F&!*bPo$n>mOIu295sD<+ys(RDyeHJ zkID_M;7AVWyFMM5AU_jFqSB{O6_On|9`p3w{%LK$9+qu-`cLH?z;N@`%EeJu z4yZ>O&_S&SEZU6eaNs1HHREuZ`n~us$}Nw-sXnz_jE!-)N)3(ws=dhKtK;FSPmRBl z;j2}{aGO?aUZCY#XhQGRsVU>X(-~sc9qqcuc>XDUEw>e5%_SUkImMBI>($#aJBS=` zLpKhM049NMHZcwx17_3K-rWTQ10X7luJ`yWdY|@}hnzZjFRCH`9vpuz+gnPyrvray z;Jh?4;kPt3DUzkvUlcchOSA~`!ZwF7_*%5yZ*FQ*?BD!3IM59{IORC^gxh!CUt-;} zXOGZ%va|g}e-|z!=c@GE#bPk1|9?lPn3)K-O*Q@NMxh+nw6r_9HB`Cmw1II-h4@yFaw$ zuG-2&w(_v8a;5{UFe?W|X4t;|+E-t@pP4&XcOAG>I1?0KXQ^4Nz7M47)cmQ1SHFEG zu>V)ElBmIfR-F5IDV$$7L-ya9C9C#^kiB8avFdCMIa|Z_=Vv+*Zp>Zft3!PC;)WHz zA@*Ju;_DXsZ=bn!W`*At3#$zAl`Fh}x2)3DOlK(58P3EF@Ar92&|1I3Z-nP+-L*}# zo914^ac67&J$~b_HlrG>exG{n7=%AD7k2W7Kjn>`nHhAEBlV@r<*a6ZH%BqQ|6Llv zufxHg>X2Tk{#vgFGt8k zSAmebz2`?fXQLT(*Cfh`+Hf}CGpNk#DBsny|7g^_CO0s)Pt!yZSgI*q4LL+ba578zBTg^KdyoYGb6x{n7`Nzj z4|ubVUw3di`!6`lFF3flzu>ID;B0@*HHNvyzvi5O$rb#9%fkN{3!P&oW0lJfarqHz z?zP6*#)z%$LvvXmW7S+1GM5F*w};I;BIXJTs0f)W!e+=;hAh)RW@PB}ID}v=3lyzd zN<)^?U|CDpvSr5f$Yj=427He={5&em(3Q{Ol5G4uau{{Rb9Ik6{2-&=_AC7cUD+B3 zXWf9;HTHT8fBOwF1vGsH(aWAQ5E3UfpKPh3H?5_8!_CDWV zch8K(Xzjb?{z!v<^XuRH^?iST{XaY&Cx@qQy{9=tY0*TI6Y&k>hT1JlDtZ z2HqGk^cmQ%vCqhUO?@WzYwk0%UrV2b{aX91_%%gr!}dP=u%pj0?Cf(6yZT(i?moAH z+A>Ex!$o~X!`?pcu&>X@(kzkU;gY@*7Pm%9hfDiP4V+*aYSV|6`yE=Fi|aAoAQ%gl z?bJ);epe{DE>}X22~{5$)Ohw6YeEkjr!7)FT+>%GT-#U6-tCdP;rhP%;fB73;l{qk zVSk_Bz!^EgISR@|qR0nrV?7t|WEjB#l9T&ubs5l%N=@ zS^+7!g)EEYGLim+2 zEUe->g~9K`Oogj)#YekBo6$;qWByM6>Naer9*qc>g-G7}un>!3 zjRG+Y)WR|qE8DDiqFAH@*Ohmo`tw1Fv6x~Ng&3emu?V6V z6_t`04t{JP#2_me!>|O5*dAn^27`(-7#xoBV-W#ycQE)XV5#tZ9Wm%@=qY#lorY8X`4B=4MbjgE^I)EWguQDPAUzsddBye8xE{l?*puk<&L zWlG9Z=JHHQWy)NcX>Pst;*@=+eA=5bw`N+}t{t9go7pnGE@f`Zl+<23Fu5;fuFcf> z5j!|_^7@gK*`KLxytaRG`_#Vc&!xS+aTb_mXU)+{w}3GQrpc6M0_PhN?lyb|mrKU2ah z__A#{=!8DgOEKCgVQ1aOv-8hNl;-tPCX{28ZlQuo4H&huDqI-*D)VN=;DXh!8d^_F zvGmDnvs$RYycx{!MMC+2k@voB?yC`Md7n_u7xCPHnJ<3ZtkbH#I#8+-#m#WIhMN*y zK>a|kaUxlSnSrnTz%DAHUlRj5?+?dtJpIEVA__+VDr2HZ5Jmu}*heEc!UQW$27sd% zfyaSey}U3G0>}gjN`N|*qJeNkh!I?bfsuK|qrS(ZW1vKMC1AQNs0THsl;j{g2qMH< zC>hNWDHZ5qiW_8Q2ox?DA0HJIPYkFMV+}IMCa8^%i6i|Q!@`!)jF8ac)7=Pea`9|l zlGBgOgdwgYPA&-skG4wBqjx$0NyAAlU`(vRDqa>u5bvm;$P4-oiQ{bjfOx{8NI1b@ zTilE~0i#GPrecm@Lcrx_5X}L_Or$DC{Ego)5*r6h77bEkiL(5S>e5n)LyEN^xW;|v zEuZ3lD>-R?7ABSB>XCFV>v|f#qIP?2T*Y_CS@2rUz8X3Q8F!% zx@~kAL}J!iK-FUz1calv6E-INyJ@B8RJip-IdF|*_?@a0Rp_F;& zr;RQ1Cl?xbTstzgdB!xoBW2$4X~U}deG3iSk+f+lHoZM%-u~(OEf4sG^)C^IHqQj* zDzy93ryI6Dh%an7tR|kEZJ8aryH=|2l&iW@=EFY7z-HCR$pyx%i z*-|!B_LRfVqMNf8FB(mj+L=>}9DZg;zM!9{CZs>1bam1+-+ugMA6i;^o_>iSM-PaD z;p=$D#Snnu0KgccJgFko1mxxP<9SA`(0KNI zJkB@(e{>1o&nlk~Vx!BVk~De;&?fr9*sZG_Eza zFA9DzJVLl;n8`Nk9Ir&hOW>ofsC|OZQ%3+?A`+j+NL-MpPd@>t{?Iw2_oo*a-;qZc z3?FDjBFP1_t|q ze)HsIgN6c9b~xJ}pRgT{hIpL5 zM7eeVRdOV1BJ|Nfk?6so6}z4y(lRS{&}1e`izV!pNuLndL?SkdCkXbO4{D=PYE zFqmj42>xAq{(01j{T2d72dmf5J5yEQ0^adFs_K|K^{3~*dp`T#ma1x}oJA{FANaVg zN9yRAG%whzGnKXJ%79!MNL8*yz8m>_dJL4+_?f-vhU>aZD%-JO?|!7dOby=dpKW=+ z^KNIldAHoWJJtMrs-Z`!-z)8XMJjvs6Z=^eneV`$mT+HL#^cvjAVa?T6at~4ENJMZ zz;|&&SIX}F(ZS__tZ-T0ptCYtIB&HF2JTpFE>=I z$8x{Fngy_vTs#ZFI#`_KR&g7+nBfY*{VZp|zjxZMn$B`p46C>}9X$55aN^nt)7OD# z()2F(UbZ)Ck2g-3-ZB;HRn56#xWcKu17&xBy*o@F?XVzT7@oE+BU**vDUQz6XNVSc*)yawT6yV!pe%XG zCF{_}8}1qN;2{f1g=_I9y)1(}LcZ)7%EFPJ!l2xjd(&e>rFty)t3wpzGV?vl2O6mb z5e56lTlF46aIDKAZrrNDfGyE@GIUue1Ot%j2m(%#wvZj|VDyq=xbivC`|lbQYj}jm z89W+rif56c*dZbd;4)%jAHCWTB`p*K2k{(|L_*b&4#tK@#pCo&G62LvMg~HNFOh&e z!5GG+Q=1h}{gOh|#vlTmdb^YG_V4b!`NH%IH;+vpo9#`vY>`{Gq{_BFDEq{I;4@G0 zR7<*Km0YrF_GHQvz!7%roO}6^+jry8^+Qwq&B$~lUC}OAw5KXM=0f)kpSZgL3yz&X zp@L5+_$o$7^TYBDd%dQQyq3LHHpQlCE19gcgux=#g!bpD9T+@c=o~`g@<-p-2~*N2 zZcQ3-rV21w!E9RL{6e&1D9a+{`b_5GPqgIB<>;}Y?0MBwNC%)p!i0H+T3O7WUkePL zF`T7B6P6X~7N9Cg)Kr4Xw&c)S`M`(vV~Jf7w|~ zni4n}N%K(4vu!0U1yilO>9&bC-!@M;lJ=q2XY28nOF#_bzeg@936?#)mF0d1E3JZW~dLsXODOEMdt-71pwbuf0uU zVmtgbW2(!oI8H5T&6Yhn)ET&>1M0&1kO!=blQ=wjj*HQL=y3fZRqdb=6DIldu+E6X z;Ss?fh6RY(40H09ABM^i7(4~unQf~_9MqHs-<-` zb+@0ajAV0S>HZ4>xKx-lRVB8+jfOHZ9>{fif~lOB^{c5^1f~u3UkS%A`c>PJKCw_Z zqG~H>1dMbBEULDVbc~93R1_|Uqhm2$J+9idG{rd6EW+psc7(L}iiPRm6{l*_x(drN z?3NBvJVGr#JgOPRw6&nN*^*;kK`Nuzb&KogWOo|e#Gb#~1DmR5*d=2sQ+1OmmYLbm z)yO~?yimWOSeQ9Xu|Wq6&L5h5^cset7?w4DOtm*F7Pft0d`LCH%v*{xx0eY|uig{s z)e}Yjwp{z&{)DM(YX7NpGEJ?ux1#clpw7obAc0p~`uQzvZdsoDd>pxP$1`3dJqH4asRV!a6aHUuK8YG+Gy9*z2+(R4xi zKQ_X5_*q#xEZ_p6QHYE~+|P~>>lTd*iFF65!Tdu0wvj?@sz*BzXb|_))EMtbc$TT4 z73NKrflCoqU;hXFQE_NtzVQhhVPRg%4v4u?|J&-C>{RrNvU6Adm@r8i-2 zcErRZ)V^CSrk+HR_&>!o61}20!m+4ol~yd5Ly<8--38hYr6j1Yco0?$w)rBl18k4P zU!_>~Brt(cJV|L01Ob=I9S>6iO<6PBva>4w3Z;q^#3-xynJFlaY!az@n5I(@e+`9W zE(8Q_+M_C6$~0&QGQ+V3BZ>CH3YbD=S<`F<)(=EH@mffkw zJ(;=&SaI(hzI8ZVw?(eo^2BA`<9y0l>s^w)da;BrPVKGQOhelf zo4LB^iNjImoU|`iaPIOOd#>-9x$v>eKYKR4dWXDv$NiHZuYUeB)HTmM>rVdz{UzObrkE@!}RUL9wN2Xy-x?!W-urX8Je5dhNW2UwxUE3koc4S)D zrCayPt$Q((rXo~(MRwOO`nbB*bZw_x+nK4+v;t2ordG;7C%c=!baI~38!ugdX{K|| zk#5^1x9yVFJa_-~hlkRK-;fW#A%%G9B|#Dfq^iMB+!r5vDsBX?2WO2Rdzv3NwSVKW zJ#koaLvnL%Ck)bw*U~2jmZ1FnQ9zg4>_3JIE@{-vSYbV;nifaTDe|`>DB*7Ek8^bY5Y?63=QMl9r^Q zkk%n-%+u8skkIrt@0mW(MmS*w2SNyH*;7d4P)LVYcpUne!M_x4y<}N;cpb{hV!6Cz z)QP}p=arnNHX(LkV}Sf85XA2MH0ON z9>qL17Uo6blNAd^H>+MEtXz)v5KT}_A)aSOPw)eydSQ94FFT;u-EUiw)HOyoC* zriZ>ANtLXcw0&0Ik}0drRQl7EYvszdnd;S#s_XAm->QDM_DhGQ!a3;#VsLnFxUaj@ z_Ga1MoVK^h_SV_)^qQUWnw<;wT^YMu&0Qng*QD)Tvb}3A0o8bB?UqS%+TJMJ8)t2@ zy-kB9RvY;nAA75TKUHv|c`h-?XW{4sG$c2nStuljP8c0z95NI#LKV{J=@5Y$XjOgU zS$*CR(Z6L6Z$!@pAO><4^f1sfo0pvaLfQ>#p@8l#E9FBP{(qW5R%??qp?((r(OUs{ zLn?Gk%O8^7nWl!$+Oh{4CYX)kTBEHL^!vYjrEDv%lpQTOAbmRXrO(2p0olZ3FMBQn z8VctWZsj?`L`};Y!K=Ri(0+PhS0E5(59|uD2@CJ~r|m;LYxYZKrEIjA)#hSM1=pE( z^W=P0Xq^jadZ5!-=|mPKElW=%EFazp%UhOrzOVk~**ScPRr{HN8SFn?QX#&;CGQy_ z5<<%u^JPkutECxdp7lWVC)}Fs#)MDBq4Lm>Y)C;2L8PBV*Mv*M!a#T=yJQQI=^V1l zh5^L@>)-%HK7nV*_&~zpS6{pRM+3zwXH4fpW%g;E^O#~$w=DY(ng!p8~?wDu-=Vu`(egwQtsjU6;)1*WQA^wVhwdKw&P(*x zq%l2G&ANGKdi`E`{a$I^z6ZOc<9!d4Qq{Qy_j%yiikftJn_S*DS2N$2-f~#payV6f zWb(jc|5~-h*7oSb5` zY+1T#yNv&??O@&0zBRIM&73pc)-AVnOTL|t?I172W_@C>`{|dpoUi%|&c+s@t-z2U zH8#&~c=s~p)IH7{Uh)0?Y?T!PjrXOtT2^?rL{Y8@nFKquwc4yumOVsydj3uCbI*9-z ziW|Z{E`Rb=;-;i2=FKsJM7Tgkj5#lWUpK_FtYjhM6G+Z7(FRJD?p*+gA2fZI)Ch~epFI7b9r`X_S}4pRKF`# z@|@&;PIn}zK)JaNschSVefy%5E2)~XO^r+b?e}Z$yB{2oye~=iml&H=m_xdcu39SOkL9#oUwTOR4+V#X4_}$=1x-2l^Y&4Hr=^$ z>&l(vt>j$qd`qfv+uu}edtyP+Cnhwo=t6IcWt^`}6=dGW9K=6FutY0BXq}OYzh|(T zG>Nz#Hv-)NxNno_Pa1jCrCwC5&7ECB?FmREe9j(d$>k<-jZQyZXaf#%1)-k$UG`iy zh}A1vBny;Js@~n-xcwya4lhK$l6kVy5}zauO7aI-p1Q& zREj+AXNp73KX#Q&U7c-MdtE zaoW9BcCVd#QFdmC?F2bIUKkN6Yz?;knW?9wh%rW7GN=Ui3b?Q4h*BcX&Sri8*$qOb&DqS zRzP#XLqAdjESNw&-g-OFFXf#xW`binpUa-1vSkT)1>BozxL)ptwcj`hYJC0z<_MZ! zP|Ij7;?y@Kq^;CZ$O)KIGS9xnF%R3b#x;8&D1tZ@+Dx zHon7~F&E6k$g^u$E38Lzu5~^3HK$-p_7s2{0te)Xuhwhkd`QzLBLjN4EpCkJhblo;|c~HflO0hc1{NA0o zhZ|S3#RsSrC>0M=Tc;^th@06nH{(^YgmF(grr7oAh|^Svq4RcJ871>)6P`=u1s?a z{a>{jmZ}oxq!re-<~Azvod(hmcwx7id~wEt3z;{&rn}N5t#V20&`BruI(Tt+ve3V}Bj_?~$38@4SBN^^fbj@5TRg{JY~Hym>$L=aD~) zd|daU^alUbVeu4wVM0rjR>`|cwzt3lxN41Rn(UFAd(zD>$jvXLnh$-!Ssf+dj4^Sm z;w}HIsb%)ecWUp&=C^+Errgy1D9|x?=7ZWybK6|W-FDcvo-3j0cgViZxuK7JI~Fad z4jI)~G3oi)7i-XA%!b|nudbdo2P({pnJz6Z5j2VMVFc|zfGm8=bQ8pck&%3&ha&Xo zsOw*wa(a$Q(*UjrzHR4?z1e)7Fo~Oz#)6_LkiM$bc+Uu=Zz86RcaTt~y*qgq@6LPo z;BKck_db}%Y7%N$HX0vBQ(Ry)8&@1n316CPos9-JmoP3TU(Q$L<+ILa@LxH00nC>6gvAc15C4k;Qg*Wt+K0RDi6yKmA|aPp@$w7oC~iJ1I`}EqEK{ zqBB2xO5)dV6crnw%(Gk=3)4p`R8JiE($EqQgYdwKoW2HuPiN3ofka6R-_RI|cOs06 zxI9IllCU1f4QyP*FsY6(*HBLUYXpiFn-d-!Nw~(sooW=Ny}c~afBFz@ez#vK%J#)> zDkn;yizGiX9(7pHsN_1Nj|UZOadILW8B7#Yr1J{KA&8v=;j1*3Q%LIe|5LY3{Fo*Y zpdf`{$v%l`r2I4O&>t?_A>Z-Y3sWUiiG|`O*?0VBVg_AdcT6yEE7svCZb%A>DU9nb zHt3kdXqZp<#L#G%$9_b?_uvXT*6O$(he8*gY_tV*HxetJC{f$!#A_$pag?|1rL9L< zJFOj+Bwx7ENOYX`KT%3$>HfRW83j)^%(lFOK6*k?6@bw=EAcO7+3zi1_S1RGemZ~I z!;0+!ZinJDf=v@dT(xJPZ3&TnE>Wyyb&}=|hY&aB-P(Hh96y8=#aCy-opeaC%kQ-j*iAUwGY@t#e}n$t+yY!|5BFlKQ3RwVBQi2vrA|Ug%#s)B;gwlVTs^68-bdW zeXXI0bQi-oV(=UU-c7hd;Z9*>5M{7f#e`D)JwOq-$PaZ5*3!#PXD;bq%0m6;MREMruF3P;_R&btdC3yK(ILF*wk{D*N!Vbf!-_{o2Ez>^q;SX`Va(AgZQFz2{g` zyR_wybQ-R6g7n6KbaGJkUCh+1lDc{xo{>(yDxEz0aF6VJZP8(=FZzg&====lw`=V94*I#Z)|cuqPWlFnU_ zPWH<_UhD8x+4oAOrd8T-Kss?z_6;q%tkkI$o$l2--N5=hEp?n)@SR@poX+oa@56}n zT2ShHLpmIieHU0y2c=U%NH$VXkl?@P8$?fYkq2n}IO}NN!^G0bb*Xb}WZeX%j@K7_ z!39q+*Uj97bP#&F*QK*T>A)MZFNAL9&p*7RCBY4mlGyrT;;%2-%rpfvrckFg?PX0L zkva}9_>L@ij%1r|o(oC`^<_DrE(`WcI&emMsg1&))7`nM6bW`vdq<_ZSR=Vp2jogpG&Y5wK7p8lvTo zK6d=Fal-;xNapywUuCG)=A0O|!j8ER-J{5qN9ta^O-gDJ>m1!xHwgfDR{ic57 zF64caw!|XTFVgGt-u(I_9_0B7=e_e|=(kLC!#Q_D8XiZlD) zXo>iw`V%k#0UW%hyvs>O|I9KK2ok<~0ZK%7wVC$=({yEr$V@4)eh@7Y{}BPXcCac+ zk*259uVfT!?n|IgL3URlhA%WRA0_QIQJnLMVg>wbn81;+!C8TBw20TJ7uMC!C`Kx5 z#Wpr_3AY1Apj{lN#D9eVS6f7iU!#EO5}6wB59#$Q3Vx2@b2`T2|3;ATF_#7s6SaO5 zrZwIE10a;SX8cr|TA<6gm8tRQWTN)tQFIOjC2FzTt_-R_dIzK~-3etLM#* zuF2j-W0R+gZlJrST~fokdGq`$-}B7<>ixk7{KIV@4nGJ=b*C46XFjWMx^wo{*>_)? za)Qj)`O~$VrI zbzcARw`Cey??i4z=C;qDO*QPvG_GM*TNcXJKQ61CIR;bNyg@G8 zfZv}kZoqUG4}xA-P8R+2%W`)4-mXsFJ?)knb5rks(Da~Gs^7ohJCOM$vmljh@w;cB z9ED>(4c3Cex-r-pZ_3v;*8{C$+Sexg+J3%RjE+=qs=M%}G8lhgaO`ih{J_~$x__1B zzpb+1C15;yl!>x|s)ApfBD;%)AU(P6Pasqk9*471zk_T7DM zk)!y7tJ3k4A5J`FFN@7iOT$d^DTkjgsw|eBPm0bPELC&+7CHKTQ1+nz!)i4Srtc|B zeDapD+){IY)gp%gSI=1B&;<(6G@{nYBN`={B@!&B7uuEnl)OT}!nlngV|2d%vU~)vtjTs2_jX$BG#3#nTxOvFt?$ zGRRTtvWGX_%aR(>Oci8c@CB)RS(h0Q>%yg=2j-pkTse2y70SV>mM^;J{n~Oqlq+6V zF3Z;Brjccij5*hZY#P|KLRaL)4M|fWCMH|Yockn6Jj(zSGJ=8;D7javGd?;AhkF6s zrV1H5#a-yRGBqmwAMQWYiU+!0*CD_Yv zIvVRrqY0EH8rY}6Kx*(6!cn+Cso!$kclZ!wR%l+;%O8nKMv|WWf>OXBeuSZk!w3?U zbV*jfGE0{vwd-#1bv9oVBBKdgC$xUJ5u_N}6J-Y|w(NQ=zU^nh_YenTq6v5=;pyzm z`%D+z2lfsG$bmKzxMSfV~r%FlL7EMf06hlf(fkHi#hL#T8a@ za5N;w1f>WZ*BB|%j?*i?|Ajj%LFBSD#mNfMdyL^k)kH`L6qjg8(W-v1!$KeIh$*f- zy|2h{E3K1?ooA?Hn`py46)S5M{%6##;zBbz(O27N+z~Mp%o3%s5voXU9)>5WSd3Oo zz%vXz;~I;(^s%Qr?P-xcEz*V;B~MGr^U}2g8M8BOu9VH7$x>U7WUgE=@6Ah_E0s1K zVyQ3YQoZwTY2SI4`g$(aIk!vN{W42E@z_eTwIqf&YChG**)*@H-@ec%~Z@87K++Gv9HbG0-2-wV@LJllKOPX7P(~0JpcX3 z_i+1W-=r;9zH+X3p=j+V_6~3!WsT|5O>*g``QGmz{@&pSEq~emVSB3d$fP}2ylSp# zp{U~%dnZHB?4jaf9qe47Gk2El8M*TKHMqb%h4jqbL`%$>T!r$*Em>l)z8otx)385 zLUA62lxk+{fN5U;f;Zgq)h~FnZ;y%Ouc=h<>ZiOldxGj11rJ`r1|r?05eZkSpCfZY z?-}mjN0+S!74xB^2aYKY*q#rwFO8`jFJluJC&4H^9VM0bVA}L{YHBTluk5?jFBI<< z{V0O}TM&^aMXL`@<#`m|~-S+;TyL;xhr&jGsl|Hw??f#$K z;U94qQ{2VJTDh#!Y90Dx^v7c-lu^K9$a1?&Qduj|_i`|^rJ(>8} TRQ;*h{+kCDO`KW%9O(Z6ruu&k literal 0 HcmV?d00001 diff --git a/supercharge.sh b/supercharge.sh index c6399005..494328c4 100755 --- a/supercharge.sh +++ b/supercharge.sh @@ -1,28 +1,26 @@ #!/bin/bash ################################################################################ -# SuperCharge Claude Code - Ultimate Installation Script +# SuperCharge Claude Code - Ultimate Installation Script v3.0 ################################################################################ # This script transforms any Claude Code installation into a supercharged # version with all customizations, skills, agents, plugins, and integrations. # -# Features: -# - 30+ Custom Skills (cognitive, development, UI/UX, brainstorming) +# Features v3.0: +# - 291 Custom Skills (cognitive, development, UI/UX, brainstorming, agents) # - RalphLoop autonomous agent integration +# - Prometheus code analysis integration (6 commands) +# - Dexto multi-agent harness (12 commands) +# - Clawd autonomous gateway +# - Intelligent auto-routing system # - Multi-AI consultation (Qwen integration) # - Agent management system with sync capabilities # - Custom hooks for session management -# - MCP servers integration +# - MCP servers integration (10 servers) # - Plugin marketplace setup -# - Optional Claude Code installation with Z.AI API support # # Usage: ./supercharge.sh [options] # --skip-deps Skip dependency installation # --dev-mode Development mode (verbose output) -# -# For Claude Code installation: ./install-claude-code.sh [options] -# --auto Automatic installation with API key prompt (default) -# --manual Show manual installation steps only -# --skip-install Skip Claude Code installation, just configure API ################################################################################ set -e @@ -93,6 +91,8 @@ print_banner() { ║ ╚══════╝╚═╝╚═╝╚═╝╚══════╝╚═╝ ╚═══╝ ║ ║ ║ ║ Ultimate Installation Script ║ +║ Version 3.0 ║ +║ 291 Skills • 21 Commands • 10 MCP Servers ║ ║ ║ ╚═══════════════════════════════════════════════════════════════╝ EOF @@ -189,16 +189,32 @@ install_dependencies() { log_success "Git found: $(git --version)" fi - # Install Ralph Orchestrator (Python package for /ralph autonomous agent) + # Install Ralph Orchestrator + install_ralph_orchestrator + + # Install Prometheus Integration + install_prometheus_integration + + # Install Dexto Integration + install_dexto_integration + + # Install Clawd Gateway + install_clawd_gateway + + # Configure MCP Servers + configure_mcp_servers +} + +install_ralph_orchestrator() { + log_step "Installing Ralph Orchestrator..." + RALPH_INSTALLED=false - # Check if ralph command exists if command -v ralph &> /dev/null; then - log_success "Ralph Orchestrator found: $(ralph --version 2>/dev/null || echo 'installed')" + log_success "Ralph Orchestrator found: $(ralph --version 2>/dev/null || echo installed)" RALPH_INSTALLED=true fi - # Check if Python package is installed if python3 -c "import ralph_orchestrator" 2>/dev/null; then if [ "$RALPH_INSTALLED" = false ]; then log_success "Ralph Orchestrator Python package found" @@ -206,50 +222,105 @@ install_dependencies() { fi fi - # Install if not found if [ "$RALPH_INSTALLED" = false ]; then log_info "Installing Ralph Orchestrator..." if command -v pip3 &> /dev/null; then - # Try installing from requirements.txt if it exists in script dir if [ -f "$SCRIPT_DIR/requirements.txt" ]; then log_info "Installing from requirements.txt..." pip3 install -r "$SCRIPT_DIR/requirements.txt" 2>/dev/null && { log_success "Ralph Orchestrator installed from requirements.txt" } || { - # Fallback to direct install log_warn "requirements.txt install failed, trying direct install..." pip3 install ralph-orchestrator pyyaml 2>/dev/null || { - log_error "Failed to install Ralph Orchestrator" - echo "" - echo -e "${YELLOW}Ralph Orchestrator is required for /ralph command${NC}" - echo "Install manually:" - echo " pip3 install ralph-orchestrator" - echo "" - echo "The /ralph command will not work without it." + log_warn "Failed to install Ralph Orchestrator" } } else - # Direct install - pip3 install ralph-orchestrator pyyaml 2>/dev/null && { - log_success "Ralph Orchestrator installed" - } || { + pip3 install ralph-orchestrator pyyaml 2>/dev/null || { log_warn "Failed to install Ralph Orchestrator" } fi else log_warn "pip3 not found. Skipping Ralph Orchestrator installation." - echo "" - echo -e "${YELLOW}Install pip3 first:${NC}" - echo " sudo apt-get install python3-pip" - echo " Then: pip3 install ralph-orchestrator" fi fi - # Verify installation if command -v ralph &> /dev/null || python3 -c "import ralph_orchestrator" 2>/dev/null; then - log_success "Ralph Orchestrator ready for /ralph command" + log_success "Ralph Orchestrator ready" else - log_warn "Ralph Orchestrator not available - /ralph command will use fallback mode" + log_warn "Ralph Orchestrator not available - /ralph will use fallback mode" + fi +} + +install_prometheus_integration() { + log_step "Installing Prometheus Integration..." + + if [ -d "$SCRIPT_DIR/prometheus" ]; then + mkdir -p "$CLAUDE_DIR/prometheus" + cp -r "$SCRIPT_DIR/prometheus/"* "$CLAUDE_DIR/prometheus/" 2>/dev/null || true + log_success "Prometheus integration installed (6 commands)" + else + log_warn "Prometheus directory not found" + fi +} + +install_dexto_integration() { + log_step "Installing Dexto Integration..." + + if [ -d "$SCRIPT_DIR/dexto" ]; then + mkdir -p "$CLAUDE_DIR/dexto" + cp -r "$SCRIPT_DIR/dexto/"* "$CLAUDE_DIR/dexto/" 2>/dev/null || true + log_success "Dexto integration installed (12 commands)" + else + log_warn "Dexto directory not found" + fi +} + +install_clawd_gateway() { + log_step "Installing Clawd Gateway..." + + if [ -d "$SCRIPT_DIR/clawd" ]; then + mkdir -p "$CLAUDE_DIR/clawd" + cp -r "$SCRIPT_DIR/clawd/"* "$CLAUDE_DIR/clawd/" 2>/dev/null || true + + # Setup Python virtual environment if needed + if [ -f "$CLAUDE_DIR/clawd/gateway/requirements.txt" ]; then + if [ ! -d "$CLAUDE_DIR/clawd/gateway/venv" ]; then + log_info "Setting up Clawd gateway virtual environment..." + python3 -m venv "$CLAUDE_DIR/clawd/gateway/venv" 2>/dev/null || { + log_warn "Failed to create virtual environment" + } + fi + + if [ -d "$CLAUDE_DIR/clawd/gateway/venv" ]; then + "$CLAUDE_DIR/clawd/gateway/venv/bin/pip" install -r "$CLAUDE_DIR/clawd/gateway/requirements.txt" 2>/dev/null || { + log_warn "Failed to install Clawd dependencies" + } + fi + fi + + log_success "Clawd gateway installed" + else + log_warn "Clawd directory not found" + fi +} + +configure_mcp_servers() { + log_step "Configuring MCP Servers..." + + mkdir -p "$CLAUDE_DIR/mcp-servers" + + if [ -f "$SCRIPT_DIR/mcp-servers/registry.json" ]; then + cp "$SCRIPT_DIR/mcp-servers/registry.json" "$CLAUDE_DIR/mcp-servers/" + log_success "MCP servers registry configured (10 servers)" + else + log_warn "MCP servers registry not found" + fi + + if [ -f "$SCRIPT_DIR/mcp-servers/manager.sh" ]; then + cp "$SCRIPT_DIR/mcp-servers/manager.sh" "$CLAUDE_DIR/mcp-servers/" + chmod +x "$CLAUDE_DIR/mcp-servers/manager.sh" + log_success "MCP servers manager installed" fi } @@ -258,11 +329,10 @@ install_skills() { mkdir -p "$CLAUDE_DIR/skills" - # Copy all skills if [ -d "$SCRIPT_DIR/skills" ]; then cp -r "$SCRIPT_DIR/skills/"* "$CLAUDE_DIR/skills/" 2>/dev/null || true - local skill_count=$(find "$SCRIPT_DIR/skills" -name "SKILL.md" | wc -l) - log_success "Installed $skill_count custom skills" + local skill_count=$(find "$SCRIPT_DIR/skills" -name "SKILL.md" 2>/dev/null | wc -l) + log_success "Installed ${skill_count:-291} custom skills" else log_warn "Skills directory not found" fi @@ -277,7 +347,6 @@ install_agents() { cp -r "$SCRIPT_DIR/agents/"* "$CLAUDE_DIR/agents/" 2>/dev/null || true log_success "Agent management system installed" - # Make scripts executable find "$CLAUDE_DIR/agents" -name "*.sh" -exec chmod +x {} \; else log_warn "Agents directory not found" @@ -292,18 +361,16 @@ install_hooks() { if [ -d "$SCRIPT_DIR/hooks" ]; then cp -r "$SCRIPT_DIR/hooks/"* "$CLAUDE_DIR/hooks/" 2>/dev/null || true - # Make hook scripts executable find "$CLAUDE_DIR/hooks" -name "*.sh" -exec chmod +x {} \; - log_success "Custom hooks installed" + log_success "Custom hooks installed (intelligent routing enabled)" else log_warn "Hooks directory not found" fi - # Install hooks.json if it doesn't exist - if [ -f "$SCRIPT_DIR/templates/hooks.json" ] && [ ! -f "$CLAUDE_DIR/hooks.json" ]; then - cp "$SCRIPT_DIR/templates/hooks.json" "$CLAUDE_DIR/hooks.json" - log_success "Hooks configuration installed" + if [ -f "$SCRIPT_DIR/hooks.json" ]; then + cp "$SCRIPT_DIR/hooks.json" "$CLAUDE_DIR/hooks.json" + log_success "Hooks configuration (v5) installed" fi } @@ -315,21 +382,20 @@ install_commands() { if [ -d "$SCRIPT_DIR/commands" ]; then cp -r "$SCRIPT_DIR/commands/"* "$CLAUDE_DIR/commands/" 2>/dev/null || true local cmd_count=$(ls -1 "$SCRIPT_DIR/commands" 2>/dev/null | wc -l) - log_success "Installed $cmd_count custom commands" + log_success "Installed ${cmd_count:-21} custom commands" else log_warn "Commands directory not found" fi } install_plugins() { - log_step "Installing plugin references..." + log_step "Installing plugin marketplace..." mkdir -p "$CLAUDE_DIR/plugins" if [ -d "$SCRIPT_DIR/plugins" ]; then cp -r "$SCRIPT_DIR/plugins/"* "$CLAUDE_DIR/plugins/" 2>/dev/null || true - local plugin_count=$(find "$SCRIPT_DIR/plugins" -type d -mindepth 1 | wc -l) - log_success "Installed $plugin_count plugin references" + log_success "Plugin marketplace configured" else log_warn "Plugins directory not found" fi @@ -344,7 +410,6 @@ install_binaries() { cp "$SCRIPT_DIR/bin/ralphloop" "$HOME/.local/bin/" chmod +x "$HOME/.local/bin/ralphloop" - # Add to PATH if not already there if ! echo "$PATH" | grep -q "$HOME/.local/bin"; then echo "" >> "$HOME/.bashrc" echo "# SuperCharge Claude Code - Add local bin to PATH" >> "$HOME/.bashrc" @@ -366,7 +431,6 @@ install_scripts() { if [ -d "$SCRIPT_DIR/scripts" ]; then cp -r "$SCRIPT_DIR/scripts/"* "$CLAUDE_DIR/scripts/" 2>/dev/null || true - # Make scripts executable find "$CLAUDE_DIR/scripts" -name "*.sh" -exec chmod +x {} \; log_success "Utility scripts installed" @@ -379,38 +443,29 @@ install_config_templates() { log_step "Installing configuration templates..." if [ -d "$SCRIPT_DIR/templates" ]; then - # Install config.json if not exists if [ -f "$SCRIPT_DIR/templates/config.json" ] && [ ! -f "$CLAUDE_DIR/config.json" ]; then cp "$SCRIPT_DIR/templates/config.json" "$CLAUDE_DIR/config.json" log_success "config.json installed" fi - # Merge settings.json if [ -f "$SCRIPT_DIR/templates/settings.json" ]; then if [ -f "$CLAUDE_DIR/settings.json" ]; then - # Merge existing settings with template local temp_file=$(mktemp) python3 -c " import json -import sys - try: with open('$CLAUDE_DIR/settings.json', 'r') as f: existing = json.load(f) except: existing = {} - try: with open('$SCRIPT_DIR/templates/settings.json', 'r') as f: template = json.load(f) except: template = {} - -# Merge: template values take precedence for keys that exist in template for key in template: - if key != 'permissions': # Don't override permissions + if key != 'permissions': existing[key] = template[key] - with open('$temp_file', 'w') as f: json.dump(existing, f, indent=2) " 2>/dev/null || cp "$SCRIPT_DIR/templates/settings.json" "$temp_file" @@ -420,12 +475,6 @@ with open('$temp_file', 'w') as f: fi log_success "settings.json configured" fi - - # Install settings.local.json if not exists - if [ -f "$SCRIPT_DIR/templates/settings.local.json" ] && [ ! -f "$CLAUDE_DIR/settings.local.json" ]; then - cp "$SCRIPT_DIR/templates/settings.local.json" "$CLAUDE_DIR/settings.local.json" - log_success "settings.local.json installed" - fi fi } @@ -443,39 +492,70 @@ sync_agents() { print_summary() { echo "" echo -e "${GREEN}${BOLD}╔═══════════════════════════════════════════════════════════════╗${NC}" - echo -e "${GREEN}${BOLD}║ INSTALLATION COMPLETE! ║${NC}" + echo -e "${GREEN}${BOLD}║ INSTALLATION COMPLETE v3.0! ║${NC}" echo -e "${GREEN}${BOLD}╚═══════════════════════════════════════════════════════════════╝${NC}" echo "" echo -e "${BOLD}Your Claude Code installation is now SUPERCHARGED!${NC}" echo "" echo -e "${CYAN}Installed Features:${NC}" - echo -e " ${GREEN}✓${NC} 30+ Custom Skills (cognitive, development, UI/UX)" - echo -e " ${GREEN}✓${NC} RalphLoop Autonomous Agent Integration" + echo -e " ${GREEN}✓${NC} 291 Custom Skills (cognitive, development, UI/UX, agents)" + echo -e " ${GREEN}✓${NC} RalphLoop Autonomous Agent" + echo -e " ${GREEN}✓${NC} Prometheus Code Analysis (6 commands)" + echo -e " ${GREEN}✓${NC} Dexto Multi-Agent Harness (12 commands)" + echo -e " ${GREEN}✓${NC} Clawd Autonomous Gateway" + echo -e " ${GREEN}✓${NC} Intelligent Auto-Routing System" echo -e " ${GREEN}✓${NC} Multi-AI Consultation (Qwen)" - echo -e " ${GREEN}✓${NC} Agent Management System" - echo -e " ${GREEN}✓${NC} Custom Hooks & Commands" - echo -e " ${GREEN}✓${NC} Plugin Marketplace Setup" + echo -e " ${GREEN}✓${NC} 10 MCP Servers Configured" + echo -e " ${GREEN}✓${NC} Plugin Marketplace" echo "" - echo -e "${CYAN}New Commands Available:${NC}" - echo -e " ${YELLOW}/ralph${NC} - Autonomous \"Tackle Until Solved\" agent" - echo -e " ${YELLOW}/brainstorm${NC} - Multi-AI brainstorming session" - echo -e " ${YELLOW}/write-plan${NC} - Create implementation plans" - echo -e " ${YELLOW}/execute-plan${NC} - Execute written plans" + echo -e "${CYAN}Available Commands (21 total):${NC}" + echo "" + echo -e "${BOLD}Autonomous Agents:${NC}" + echo -e " ${YELLOW}/clawd${NC} - Fully autonomous task execution" + echo -e " ${YELLOW}/ralph${NC} - Iterative architecture & orchestration" + echo "" + echo -e "${BOLD}Prometheus (Code Analysis):${NC}" + echo -e " ${YELLOW}/prometheus${NC} - Master command (auto-routes to sub-agent)" + echo -e " ${YELLOW}/prometheus-bug${NC} - Bug analysis and fixing" + echo -e " ${YELLOW}/prometheus-feature${NC} - Feature implementation" + echo -e " ${YELLOW}/prometheus-context${NC} - Code context understanding" + echo -e " ${YELLOW}/prometheus-edit${NC} - Code editing and refactoring" + echo -e " ${YELLOW}/prometheus-test${NC} - Test generation and validation" + echo -e " ${YELLOW}/prometheus-classify${NC} - Issue classification" + echo "" + echo -e "${BOLD}Dexto (Specialized Agents):${NC}" + echo -e " ${YELLOW}/dexto${NC} - Master command (auto-routes to sub-agent)" + echo -e " ${YELLOW}/dexto-code${NC} - Code analysis and generation" + echo -e " ${YELLOW}/dexto-database${NC} - Database optimization" + echo -e " ${YELLOW}/dexto-github${NC} - GitHub PR/issue analysis" + echo -e " ${YELLOW}/dexto-pdf${NC} - PDF document analysis" + echo -e " ${YELLOW}/dexto-image-edit${NC}- Image editing and enhancement" + echo -e " ${YELLOW}/dexto-nano-banana${NC}- AI image generation" + echo -e " ${YELLOW}/dexto-sora${NC} - AI video generation" + echo -e " ${YELLOW}/dexto-music${NC} - AI music/audio generation" + echo -e " ${YELLOW}/dexto-podcast${NC} - AI podcast generation" + echo -e " ${YELLOW}/dexto-research${NC} - Product research and ideation" + echo -e " ${YELLOW}/dexto-triage${NC} - Support ticket triage" + echo -e " ${YELLOW}/dexto-explore${NC} - Codebase exploration" + echo "" + echo -e "${CYAN}Intelligent Auto-Routing:${NC}" + echo -e " The system automatically detects task patterns and suggests" + echo -e " the best agent. Just describe your task naturally!" echo "" echo -e "${CYAN}Quick Start:${NC}" echo -e " 1. Restart your terminal or run: ${YELLOW}source ~/.bashrc${NC}" echo -e " 2. Run Claude Code: ${YELLOW}claude${NC}" - echo -e " 3. Try: ${YELLOW}/ralph \"Design a microservices architecture\"${NC}" + echo -e " 3. Try any command or just describe your task - auto-routing will help!" + echo "" + echo -e "${CYAN}Examples:${NC}" + echo -e " ${YELLOW}claude${NC} \"Fix the authentication bug\" → Auto-routes to /prometheus-bug" + echo -e " ${YELLOW}claude${NC} \"Generate an image of a city\" → Auto-routes to /dexto-nano-banana" + echo -e " ${YELLOW}claude${NC} \"Design a microservices architecture\" → Auto-routes to /ralph" echo "" echo -e "${CYAN}Configuration:${NC}" echo -e " Config dir: ${YELLOW}$CLAUDE_DIR${NC}" echo -e " Backup: ${YELLOW}$BACKUP_DIR${NC}" echo "" - echo -e "${CYAN}Optional Configuration:${NC}" - echo -e " ${YELLOW}export RALPH_AGENT=claude${NC} # Set Ralph agent" - echo -e " ${YELLOW}export RALPH_MAX_ITERATIONS=100${NC} # Set max iterations" - echo -e " ${YELLOW}export QWEN_CONSULT_MODE=always${NC} # Qwen consultation mode" - echo "" echo -e "${GREEN}${BOLD}Enjoy your supercharged Claude Code experience!${NC}" echo "" } @@ -487,7 +567,6 @@ print_summary() { main() { print_banner - # Parse arguments while [[ $# -gt 0 ]]; do case $1 in --skip-deps) @@ -512,7 +591,6 @@ main() { esac done - # Run installation steps if ! check_claude_code; then log_info "Customizations installed. Install Claude Code to use them." echo "" @@ -537,5 +615,4 @@ main() { print_summary } -# Run main function main "$@"