Add missing repository components for complete supercharge.sh installation
Added all directories and files expected by supercharge.sh: - hooks/ (5 hook scripts for session management and AI consultation) - commands/ (3 custom slash commands: brainstorm, write-plan, execute-plan) - plugins/ (plugin references for glm-plan, rust-analyzer, marketplaces) - bin/ralphloop (Ralph Orchestrator wrapper for autonomous iteration) - scripts/sync-agents.sh (agent synchronization script) - templates/ (config templates: settings, hooks, config.json) This completes the repository structure so supercharge.sh can install all components without warnings. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
282
bin/ralphloop
Executable file
282
bin/ralphloop
Executable file
@@ -0,0 +1,282 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
RalphLoop - Ralph Orchestrator Wrapper for Claude Code
|
||||||
|
|
||||||
|
This wrapper integrates Ralph Orchestrator with Claude Code skills,
|
||||||
|
providing autonomous "Tackle Until Solved" capabilities.
|
||||||
|
|
||||||
|
Environment Variables:
|
||||||
|
RALPH_AGENT Agent to use (claude|gemini|kiro|q|auto)
|
||||||
|
RALPH_MAX_ITERATIONS Maximum iterations (default: 100)
|
||||||
|
RALPH_MAX_RUNTIME Maximum runtime in seconds (default: 14400)
|
||||||
|
RALPH_VERBOSE Enable verbose output (default: false)
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
ralphloop "Design a microservices architecture"
|
||||||
|
ralphloop --agent claude --max-iterations 50 "Implement auth"
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
import argparse
|
||||||
|
import subprocess
|
||||||
|
from pathlib import Path
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
DEFAULT_AGENT = os.getenv("RALPH_AGENT", "claude")
|
||||||
|
DEFAULT_MAX_ITERATIONS = int(os.getenv("RALPH_MAX_ITERATIONS", 100))
|
||||||
|
DEFAULT_MAX_RUNTIME = int(os.getenv("RALPH_MAX_RUNTIME", 14400))
|
||||||
|
VERBOSE = os.getenv("RALPH_VERBOSE", "false").lower() == "true"
|
||||||
|
|
||||||
|
# Ralph directory
|
||||||
|
RALPH_DIR = Path(".ralph")
|
||||||
|
STATE_FILE = RALPH_DIR / "state.json"
|
||||||
|
PROMPT_FILE = RALPH_DIR / "PROMPT.md"
|
||||||
|
CONFIG_FILE = RALPH_DIR / "ralph.yml"
|
||||||
|
ITERATIONS_DIR = RALPH_DIR / "iterations"
|
||||||
|
|
||||||
|
|
||||||
|
def setup_ralph_directory():
|
||||||
|
"""Create .ralph directory structure."""
|
||||||
|
RALPH_DIR.mkdir(exist_ok=True)
|
||||||
|
ITERATIONS_DIR.mkdir(exist_ok=True)
|
||||||
|
|
||||||
|
|
||||||
|
def load_state():
|
||||||
|
"""Load current Ralph state."""
|
||||||
|
if STATE_FILE.exists():
|
||||||
|
with open(STATE_FILE, "r") as f:
|
||||||
|
return json.load(f)
|
||||||
|
return {
|
||||||
|
"iteration": 0,
|
||||||
|
"status": "not_started",
|
||||||
|
"started_at": None,
|
||||||
|
"completed_at": None,
|
||||||
|
"last_error": None
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def save_state(state):
|
||||||
|
"""Save Ralph state."""
|
||||||
|
with open(STATE_FILE, "w") as f:
|
||||||
|
json.dump(state, f, indent=2)
|
||||||
|
|
||||||
|
|
||||||
|
def create_prompt(task, agent, max_iterations, max_runtime):
|
||||||
|
"""Create PROMPT.md with task and success criteria."""
|
||||||
|
prompt = f"""# RalphLoop Task
|
||||||
|
|
||||||
|
## Task
|
||||||
|
{task}
|
||||||
|
|
||||||
|
## Success Criteria
|
||||||
|
- Task fully analyzed and understood
|
||||||
|
- All requirements addressed
|
||||||
|
- Implementation/design complete
|
||||||
|
- Quality standards met
|
||||||
|
- No critical issues remaining
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
- Agent: {agent}
|
||||||
|
- Max Iterations: {max_iterations}
|
||||||
|
- Max Runtime: {max_runtime} seconds ({timedelta(seconds=max_runtime)})
|
||||||
|
- Started: {datetime.now().isoformat()}
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
Run autonomous iterations until all success criteria are met.
|
||||||
|
Update state.json after each iteration.
|
||||||
|
Save final result to iterations/final.md when complete.
|
||||||
|
"""
|
||||||
|
with open(PROMPT_FILE, "w") as f:
|
||||||
|
f.write(prompt)
|
||||||
|
|
||||||
|
|
||||||
|
def create_config(agent, max_iterations, max_runtime):
|
||||||
|
"""Create ralph.yml configuration."""
|
||||||
|
config = f"""# RalphLoop Configuration
|
||||||
|
agent: {agent}
|
||||||
|
max_iterations: {max_iterations}
|
||||||
|
max_runtime: {max_runtime}
|
||||||
|
verbose: {VERBOSE}
|
||||||
|
|
||||||
|
# Output
|
||||||
|
iterations_dir: iterations
|
||||||
|
state_file: state.json
|
||||||
|
final_output: iterations/final.md
|
||||||
|
|
||||||
|
# Claude Code Integration
|
||||||
|
skill_path: ~/.claude/skills/ralph
|
||||||
|
brainstorming_skill: ~/.claude/skills/brainstorming
|
||||||
|
"""
|
||||||
|
with open(CONFIG_FILE, "w") as f:
|
||||||
|
f.write(config)
|
||||||
|
|
||||||
|
|
||||||
|
def run_ralph_iteration(task, iteration, agent):
|
||||||
|
"""Run a single Ralph iteration."""
|
||||||
|
iteration_file = ITERATIONS_DIR / f"{iteration:03d}.md"
|
||||||
|
|
||||||
|
# Check if ralph-orchestrator is installed
|
||||||
|
try:
|
||||||
|
result = subprocess.run(
|
||||||
|
["ralph", "--agent", agent, "--prompt", task],
|
||||||
|
capture_output=True,
|
||||||
|
text=True,
|
||||||
|
timeout=300
|
||||||
|
)
|
||||||
|
|
||||||
|
output = result.stdout or result.stderr
|
||||||
|
|
||||||
|
with open(iteration_file, "w") as f:
|
||||||
|
f.write(f"""# Iteration {iteration}
|
||||||
|
|
||||||
|
## Agent: {agent}
|
||||||
|
## Time: {datetime.now().isoformat()}
|
||||||
|
|
||||||
|
## Output
|
||||||
|
{output}
|
||||||
|
|
||||||
|
## Status
|
||||||
|
{'COMPLETE' if result.returncode == 0 else 'IN_PROGRESS'}
|
||||||
|
""")
|
||||||
|
return result.returncode == 0
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
# Ralph not installed, use placeholder
|
||||||
|
with open(iteration_file, "w") as f:
|
||||||
|
f.write(f"""# Iteration {iteration}
|
||||||
|
|
||||||
|
## Agent: {agent}
|
||||||
|
## Time: {datetime.now().isoformat()}
|
||||||
|
|
||||||
|
## Note
|
||||||
|
Ralph Orchestrator not installed. Install with:
|
||||||
|
pip install ralph-orchestrator
|
||||||
|
|
||||||
|
## Task Analysis
|
||||||
|
{task}
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
1. Install Ralph Orchestrator
|
||||||
|
2. Re-run ralphloop command
|
||||||
|
""")
|
||||||
|
return False
|
||||||
|
except subprocess.TimeoutExpired:
|
||||||
|
with open(iteration_file, "w") as f:
|
||||||
|
f.write(f"""# Iteration {iteration}
|
||||||
|
|
||||||
|
## Agent: {agent}
|
||||||
|
## Time: {datetime.now().isoformat()}
|
||||||
|
|
||||||
|
## Status: TIMEOUT
|
||||||
|
|
||||||
|
Iteration exceeded 300 second timeout.
|
||||||
|
""")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def run_ralph(task, agent, max_iterations, max_runtime):
|
||||||
|
"""Run Ralph autonomous loop."""
|
||||||
|
setup_ralph_directory()
|
||||||
|
|
||||||
|
state = load_state()
|
||||||
|
if state["status"] == "completed":
|
||||||
|
print(f"Task already completed at {state['completed_at']}")
|
||||||
|
print(f"See {ITERATIONS_DIR / 'final.md'} for results")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Initialize
|
||||||
|
state["status"] = "running"
|
||||||
|
state["started_at"] = datetime.now().isoformat()
|
||||||
|
save_state(state)
|
||||||
|
|
||||||
|
create_prompt(task, agent, max_iterations, max_runtime)
|
||||||
|
create_config(agent, max_iterations, max_runtime)
|
||||||
|
|
||||||
|
start_time = datetime.now()
|
||||||
|
completed = False
|
||||||
|
|
||||||
|
for iteration in range(1, max_iterations + 1):
|
||||||
|
# Check runtime
|
||||||
|
elapsed = (datetime.now() - start_time).total_seconds()
|
||||||
|
if elapsed > max_runtime:
|
||||||
|
print(f"Max runtime ({max_runtime}s) exceeded")
|
||||||
|
break
|
||||||
|
|
||||||
|
if VERBOSE:
|
||||||
|
print(f"[Ralph] Iteration {iteration}/{max_iterations}")
|
||||||
|
|
||||||
|
state["iteration"] = iteration
|
||||||
|
save_state(state)
|
||||||
|
|
||||||
|
# Run iteration
|
||||||
|
if run_ralph_iteration(task, iteration, agent):
|
||||||
|
completed = True
|
||||||
|
break
|
||||||
|
|
||||||
|
# Finalize
|
||||||
|
state["status"] = "completed" if completed else "max_iterations_reached"
|
||||||
|
state["completed_at"] = datetime.now().isoformat()
|
||||||
|
save_state(state)
|
||||||
|
|
||||||
|
# Create final output
|
||||||
|
final_file = ITERATIONS_DIR / "final.md"
|
||||||
|
with open(final_file, "w") as f:
|
||||||
|
f.write(f"""# RalphLoop Final Result
|
||||||
|
|
||||||
|
## Task
|
||||||
|
{task}
|
||||||
|
|
||||||
|
## Agent: {agent}
|
||||||
|
## Iterations: {state['iteration']}
|
||||||
|
## Status: {state['status']}
|
||||||
|
## Started: {state['started_at']}
|
||||||
|
## Completed: {state['completed_at']}
|
||||||
|
|
||||||
|
## Result
|
||||||
|
{'Task completed successfully!' if completed else 'Max iterations reached. Manual review needed.'}
|
||||||
|
|
||||||
|
## Output Files
|
||||||
|
- iterations/001.md through iterations/{iteration:03d}.md
|
||||||
|
- state.json - Progress tracking
|
||||||
|
- ralph.yml - Configuration
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
{'Implement the solution from the final iteration.' if completed else 'Review iterations and continue manually or increase max_iterations.'}
|
||||||
|
""")
|
||||||
|
|
||||||
|
print(f"\n[Ralph] {state['status'].upper()}")
|
||||||
|
print(f"[Ralph] Iterations: {state['iteration']}/{max_iterations}")
|
||||||
|
print(f"[Ralph] Output: {final_file}")
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="RalphLoop - Ralph Orchestrator Wrapper",
|
||||||
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||||
|
epilog=__doc__
|
||||||
|
)
|
||||||
|
parser.add_argument("task", help="Task description")
|
||||||
|
parser.add_argument("--agent", default=DEFAULT_AGENT, help="Agent to use")
|
||||||
|
parser.add_argument("--max-iterations", type=int, default=DEFAULT_MAX_ITERATIONS)
|
||||||
|
parser.add_argument("--max-runtime", type=int, default=DEFAULT_MAX_RUNTIME)
|
||||||
|
parser.add_argument("--verbose", action="store_true")
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if args.verbose:
|
||||||
|
global VERBOSE
|
||||||
|
VERBOSE = True
|
||||||
|
|
||||||
|
run_ralph(
|
||||||
|
task=args.task,
|
||||||
|
agent=args.agent,
|
||||||
|
max_iterations=args.max_iterations,
|
||||||
|
max_runtime=args.max_runtime
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
44
commands/brainstorm.md
Normal file
44
commands/brainstorm.md
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# /brainstorm
|
||||||
|
|
||||||
|
Multi-AI brainstorming session with Ralph integration.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```
|
||||||
|
/brainstorm "Design a feature for user authentication"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
Launches a collaborative brainstorming session using multiple AI perspectives:
|
||||||
|
- Claude (primary)
|
||||||
|
- Qwen (consultation)
|
||||||
|
- Ralph Orchestrator (autonomous iteration)
|
||||||
|
|
||||||
|
## Modes
|
||||||
|
|
||||||
|
**Direct Mode** (simple tasks):
|
||||||
|
- Quick ideation
|
||||||
|
- Feature exploration
|
||||||
|
- Design discussions
|
||||||
|
|
||||||
|
**Ralph Mode** (complex tasks):
|
||||||
|
- Architecture design
|
||||||
|
- System planning
|
||||||
|
- Multi-phase projects
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
```bash
|
||||||
|
QWEN_CONSULT_MODE=always|delegate|off
|
||||||
|
RALPH_AUTO=true|false
|
||||||
|
QWEN_MAX_ITERATIONS=3
|
||||||
|
```
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
```
|
||||||
|
/brainstorm "How should we structure the API?"
|
||||||
|
/brainstorm "Design a notification system"
|
||||||
|
/brainstorm "Plan the database schema"
|
||||||
|
```
|
||||||
52
commands/execute-plan.md
Normal file
52
commands/execute-plan.md
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# /execute-plan
|
||||||
|
|
||||||
|
Execute a previously created implementation plan.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```
|
||||||
|
/execute-plan
|
||||||
|
/execute-plan my-plan.md
|
||||||
|
/execute-plan --review
|
||||||
|
```
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
Executes implementation plans created with `/write-plan`:
|
||||||
|
- Reads plan from `.claude/plans/`
|
||||||
|
- Executes each step in order
|
||||||
|
- Creates checkpoints for rollback
|
||||||
|
- Validates each step completion
|
||||||
|
|
||||||
|
## Options
|
||||||
|
|
||||||
|
```
|
||||||
|
--review # Review plan before executing
|
||||||
|
--from=N # Start from step N
|
||||||
|
--to=N # Execute through step N
|
||||||
|
--dry-run # Show what would be done
|
||||||
|
--continue # Continue after error
|
||||||
|
```
|
||||||
|
|
||||||
|
## Execution Process
|
||||||
|
|
||||||
|
1. **Load Plan** - Read and parse plan file
|
||||||
|
2. **Review** (optional) - Show steps and confirm
|
||||||
|
3. **Execute** - Run each step sequentially
|
||||||
|
4. **Validate** - Verify each step completed
|
||||||
|
5. **Checkpoint** - Save progress after each step
|
||||||
|
6. **Report** - Summary of changes
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
```
|
||||||
|
/execute-plan # Execute latest plan
|
||||||
|
/execute-plan auth-plan.md # Execute specific plan
|
||||||
|
/execute-plan --review # Review before executing
|
||||||
|
/execute-plan --from=5 # Start from step 5
|
||||||
|
```
|
||||||
|
|
||||||
|
## Checkpoints
|
||||||
|
|
||||||
|
Each step creates a checkpoint in `.claude/plans/<plan-name>.checkpoint/`
|
||||||
|
Use `--continue` to resume from last checkpoint after failure.
|
||||||
40
commands/write-plan.md
Normal file
40
commands/write-plan.md
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# /write-plan
|
||||||
|
|
||||||
|
Create implementation plans from requirements or specifications.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```
|
||||||
|
/write-plan "Add user authentication with OAuth"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
Creates detailed, step-by-step implementation plans including:
|
||||||
|
- Technical approach
|
||||||
|
- File changes needed
|
||||||
|
- Testing strategy
|
||||||
|
- Dependencies
|
||||||
|
- Risks and mitigations
|
||||||
|
|
||||||
|
## Plan Structure
|
||||||
|
|
||||||
|
1. **Summary** - High-level overview
|
||||||
|
2. **Technical Approach** - Architecture decisions
|
||||||
|
3. **Implementation Steps** - Ordered task list
|
||||||
|
4. **Files to Create/Modify** - Specific files
|
||||||
|
5. **Testing Strategy** - Validation approach
|
||||||
|
6. **Dependencies** - Required packages/changes
|
||||||
|
7. **Risks & Mitigations** - Potential issues
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
```
|
||||||
|
/write-plan "Implement Stripe subscriptions"
|
||||||
|
/write-plan "Add real-time notifications with WebSockets"
|
||||||
|
/write-plan "Migrate from REST to GraphQL"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Output
|
||||||
|
|
||||||
|
Saves plan to `.claude/plans/` directory for later execution with `/execute-plan`.
|
||||||
14
hooks/consult-qwen.sh
Executable file
14
hooks/consult-qwen.sh
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Qwen Consultation Wrapper Hook
|
||||||
|
# Trigger: user-prompt
|
||||||
|
# Wrapper for Qwen consultation functionality
|
||||||
|
|
||||||
|
# This hook integrates with the brainstorming skill
|
||||||
|
# to provide multi-AI consultation capabilities
|
||||||
|
|
||||||
|
QWEN_MAX_ITERATIONS="${QWEN_MAX_ITERATIONS:-3}"
|
||||||
|
|
||||||
|
# Delegate to the brainstorming skill when appropriate
|
||||||
|
# The actual consultation logic is in the skill
|
||||||
|
|
||||||
|
exit 0
|
||||||
11
hooks/demo-qwen-consult.sh
Executable file
11
hooks/demo-qwen-consult.sh
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Demo Qwen Integration Hook
|
||||||
|
# Trigger: user-prompt
|
||||||
|
# Demonstrates Qwen AI consultation capabilities
|
||||||
|
|
||||||
|
# This is a demo hook showing how to integrate
|
||||||
|
# Qwen AI for consultation and multi-AI brainstorming
|
||||||
|
|
||||||
|
# The actual implementation is in the multi-ai-brainstorm skill
|
||||||
|
|
||||||
|
exit 0
|
||||||
22
hooks/qwen-consult.sh
Executable file
22
hooks/qwen-consult.sh
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Qwen AI Consultation Hook
|
||||||
|
# Trigger: user-prompt
|
||||||
|
# Consults Qwen AI for additional perspectives
|
||||||
|
|
||||||
|
QWEN_MODE="${QWEN_CONSULT_MODE:-delegate}"
|
||||||
|
QWEN_MODEL="${QWEN_MODEL:-qwen-coder-plus}"
|
||||||
|
|
||||||
|
# Only run in delegate or always mode
|
||||||
|
if [ "$QWEN_MODE" != "delegate" ] && [ "$QWEN_MODE" != "always" ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if qwen CLI is available
|
||||||
|
if ! command -v qwen &> /dev/null; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run consultation (would be called by the skill, not here directly)
|
||||||
|
# This is a placeholder for the hook mechanism
|
||||||
|
|
||||||
|
exit 0
|
||||||
17
hooks/ralph-auto-trigger.sh
Executable file
17
hooks/ralph-auto-trigger.sh
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Ralph Auto-Trigger Hook
|
||||||
|
# Trigger: user-prompt
|
||||||
|
# Automatically triggers Ralph for complex tasks
|
||||||
|
|
||||||
|
# Analyze task complexity and auto-trigger Ralph
|
||||||
|
# when RALPH_AUTO=true or task appears complex
|
||||||
|
|
||||||
|
RALPH_AUTO="${RALPH_AUTO:-false}"
|
||||||
|
|
||||||
|
if [ "$RALPH_AUTO" = "true" ]; then
|
||||||
|
# Auto-delegate to Ralph for complex tasks
|
||||||
|
# The actual delegation logic is in the ralph skill
|
||||||
|
:
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
14
hooks/session-start-superpowers.sh
Executable file
14
hooks/session-start-superpowers.sh
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Session Start Hook - Auto-inject superpowers context
|
||||||
|
# This hook runs on every session start/resume
|
||||||
|
# Trigger: session-start
|
||||||
|
|
||||||
|
# Check if AUTO_SUPERPOWERS is enabled
|
||||||
|
if [ "${AUTO_SUPERPOWERS:-false}" = "true" ]; then
|
||||||
|
# Inject superpowers context into the session
|
||||||
|
if [ -f "$HOME/.claude/skills/using-superpowers/skill.md" ]; then
|
||||||
|
cat "$HOME/.claude/skills/using-superpowers/skill.md"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
30
plugins/README.md
Normal file
30
plugins/README.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# Plugins Directory
|
||||||
|
|
||||||
|
This directory contains plugin references and configurations for Claude Code.
|
||||||
|
|
||||||
|
## Plugin Categories
|
||||||
|
|
||||||
|
### Agent Plugins
|
||||||
|
- `agent-browse` - Web browsing capabilities for agents
|
||||||
|
- `claude-delegator` - Task delegation system
|
||||||
|
|
||||||
|
### UI/UX Plugins
|
||||||
|
- `claude-hud` - Heads-up display for Claude Code
|
||||||
|
- `frontend-design` - Frontend design tools
|
||||||
|
|
||||||
|
### Safety Plugins
|
||||||
|
- `claude-code-safety-net` - Safety validation layer
|
||||||
|
|
||||||
|
### Marketplace
|
||||||
|
- `marketplaces` - Plugin marketplace references
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Plugins are referenced here and installed via:
|
||||||
|
```bash
|
||||||
|
npm install <plugin-name>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Plugin settings go in `~/.claude/settings.json` under `plugins` section.
|
||||||
12
plugins/glm-plan-bug/plugin.json
Normal file
12
plugins/glm-plan-bug/plugin.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "glm-plan-bug:case-feedback",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Bug case feedback system for GLM Coding Plan",
|
||||||
|
"type": "feedback",
|
||||||
|
"author": "GLM Team",
|
||||||
|
"capabilities": ["case-feedback"],
|
||||||
|
"triggers": ["/glm-plan-bug:case-feedback"],
|
||||||
|
"config": {
|
||||||
|
"endpoint": "https://glm-plan-bug.example.com/api/feedback"
|
||||||
|
}
|
||||||
|
}
|
||||||
12
plugins/glm-plan-usage/plugin.json
Normal file
12
plugins/glm-plan-usage/plugin.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "glm-plan-usage:usage-query",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Usage query system for GLM Coding Plan",
|
||||||
|
"type": "usage",
|
||||||
|
"author": "GLM Team",
|
||||||
|
"capabilities": ["usage-query"],
|
||||||
|
"triggers": ["/glm-plan-usage:usage-query"],
|
||||||
|
"config": {
|
||||||
|
"endpoint": "https://glm-plan-usage.example.com/api/query"
|
||||||
|
}
|
||||||
|
}
|
||||||
30
plugins/marketplaces/README.md
Normal file
30
plugins/marketplaces/README.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# Plugin Marketplace
|
||||||
|
|
||||||
|
References to external plugin marketplaces for Claude Code.
|
||||||
|
|
||||||
|
## Available Marketplaces
|
||||||
|
|
||||||
|
### Superpowers Marketplace
|
||||||
|
- **URL**: https://github.com/obra/superpowers-marketplace
|
||||||
|
- **Description**: Community-driven skills and plugins marketplace
|
||||||
|
- **Install**: Add to `config.json` marketplaces section
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
To add a marketplace, edit `~/.claude/config.json`:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"marketplaces": {
|
||||||
|
"obra/superpowers-marketplace": "/path/to/marketplace"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Featured Plugins
|
||||||
|
|
||||||
|
Browse the marketplace to discover:
|
||||||
|
- Custom skills
|
||||||
|
- Agent templates
|
||||||
|
- Tool integrations
|
||||||
|
- Theme packages
|
||||||
9
plugins/rust-analyzer-lsp/plugin.json
Normal file
9
plugins/rust-analyzer-lsp/plugin.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"name": "rust-analyzer-lsp",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Rust language support via LSP",
|
||||||
|
"type": "lsp",
|
||||||
|
"language": "rust",
|
||||||
|
"capabilities": ["definition", "references", "hover", "completion"],
|
||||||
|
"install": "rust-analyzer"
|
||||||
|
}
|
||||||
270
scripts/sync-agents.sh
Executable file
270
scripts/sync-agents.sh
Executable file
@@ -0,0 +1,270 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
################################################################################
|
||||||
|
# sync-agents.sh - Agent Synchronization Script
|
||||||
|
################################################################################
|
||||||
|
# Synchronizes agents from GitHub/Gitea repositories to local Claude Code
|
||||||
|
# installation.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# ./sync-agents.sh [options]
|
||||||
|
#
|
||||||
|
# Options:
|
||||||
|
# --source URL Source repository URL
|
||||||
|
# --branch NAME Branch to sync from (default: main)
|
||||||
|
# --force Force overwrite existing agents
|
||||||
|
# --dry-run Show what would be done without doing it
|
||||||
|
# --verbose Enable verbose output
|
||||||
|
#
|
||||||
|
# Configuration:
|
||||||
|
# Sources can be configured in ~/.claude/agents/sync-sources.json
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Colors
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
CYAN='\033[0;36m'
|
||||||
|
BOLD='\033[1m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
# Directories
|
||||||
|
CLAUDE_DIR="${HOME}/.claude"
|
||||||
|
AGENTS_DIR="${CLAUDE_DIR}/agents"
|
||||||
|
CONFIG_FILE="${AGENTS_DIR}/sync-sources.json"
|
||||||
|
|
||||||
|
# Flags
|
||||||
|
FORCE=false
|
||||||
|
DRY_RUN=false
|
||||||
|
VERBOSE=false
|
||||||
|
|
||||||
|
# Default sources
|
||||||
|
DEFAULT_SOURCES=(
|
||||||
|
"https://github.com/anthropics/anthropic-agents"
|
||||||
|
"https://github.com/contains-cafe/studio-agents"
|
||||||
|
)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Helper Functions
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
log_info() {
|
||||||
|
echo -e "${BLUE}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_success() {
|
||||||
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_warn() {
|
||||||
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_error() {
|
||||||
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_step() {
|
||||||
|
echo -e "${CYAN}${BOLD}==>${NC} ${BOLD}$1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Agent Synchronization
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
sync_from_source() {
|
||||||
|
local source_url="$1"
|
||||||
|
local branch="${2:-main}"
|
||||||
|
local temp_dir
|
||||||
|
|
||||||
|
log_step "Syncing from $source_url"
|
||||||
|
|
||||||
|
# Create temp directory for clone
|
||||||
|
temp_dir=$(mktemp -d)
|
||||||
|
|
||||||
|
if [ "$DRY_RUN" = true ]; then
|
||||||
|
log_info "[DRY RUN] Would clone $source_url (branch: $branch)"
|
||||||
|
rm -rf "$temp_dir"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clone repository
|
||||||
|
if ! git clone --depth 1 --branch "$branch" "$source_url" "$temp_dir" 2>/dev/null; then
|
||||||
|
log_warn "Failed to clone $source_url"
|
||||||
|
rm -rf "$temp_dir"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Copy agents
|
||||||
|
local agent_count=0
|
||||||
|
local copied_count=0
|
||||||
|
local skipped_count=0
|
||||||
|
|
||||||
|
# Find agent definitions (look for common patterns)
|
||||||
|
while IFS= read -r -d '' agent_file; do
|
||||||
|
((agent_count++))
|
||||||
|
|
||||||
|
local agent_name
|
||||||
|
agent_name=$(basename "$(dirname "$agent_file")")
|
||||||
|
local dest_dir="${AGENTS_DIR}/${agent_name}"
|
||||||
|
|
||||||
|
# Check if already exists
|
||||||
|
if [ -d "$dest_dir" ] && [ "$FORCE" = false ]; then
|
||||||
|
((skipped_count++))
|
||||||
|
[ "$VERBOSE" = true ] && log_info "Skipped: $agent_name (exists)"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create destination and copy
|
||||||
|
mkdir -p "$dest_dir"
|
||||||
|
cp -r "$(dirname "$agent_file")"/* "$dest_dir/" 2>/dev/null || true
|
||||||
|
((copied_count++))
|
||||||
|
|
||||||
|
[ "$VERBOSE" = true ] && log_info "Copied: $agent_name"
|
||||||
|
|
||||||
|
done < <(find "$temp_dir" -type f \( -name "agent.md" -o -name "skill.md" -o -name "AGENT.md" -o -name "SKILL.md" \) -print0 2>/dev/null)
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
rm -rf "$temp_dir"
|
||||||
|
|
||||||
|
log_success "Synced from $source_url: $copied_count copied, $skipped_count skipped (found $agent_count total)"
|
||||||
|
}
|
||||||
|
|
||||||
|
sync_from_config() {
|
||||||
|
local config_file="$1"
|
||||||
|
|
||||||
|
if [ ! -f "$config_file" ]; then
|
||||||
|
log_warn "Config file not found: $config_file"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Parse JSON config (requires jq)
|
||||||
|
if command -v jq &> /dev/null; then
|
||||||
|
local sources
|
||||||
|
sources=$(jq -r '.sources[].url' "$config_file" 2>/dev/null)
|
||||||
|
|
||||||
|
if [ -z "$sources" ]; then
|
||||||
|
log_warn "No sources found in config"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
while IFS= read -r source; do
|
||||||
|
local branch
|
||||||
|
branch=$(jq -r ".sources[] | select(.url==\"$source\") | .branch // \"main\"" "$config_file")
|
||||||
|
sync_from_source "$source" "$branch"
|
||||||
|
done <<< "$sources"
|
||||||
|
else
|
||||||
|
log_warn "jq not found. Cannot parse config file."
|
||||||
|
log_info "Install jq: sudo apt-get install jq"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
sync_default_sources() {
|
||||||
|
log_step "Syncing from default sources"
|
||||||
|
|
||||||
|
for source in "${DEFAULT_SOURCES[@]}"; do
|
||||||
|
sync_from_source "$source" "main"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Main
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
print_usage() {
|
||||||
|
cat << EOF
|
||||||
|
Usage: $0 [options]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--source URL Source repository URL
|
||||||
|
--branch NAME Branch to sync from (default: main)
|
||||||
|
--force Force overwrite existing agents
|
||||||
|
--dry-run Show what would be done without doing it
|
||||||
|
--verbose Enable verbose output
|
||||||
|
-h, --help Show this help message
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
$0 # Sync from default sources
|
||||||
|
$0 --source https://github.com/user/repo
|
||||||
|
$0 --force --verbose # Force overwrite, verbose output
|
||||||
|
$0 --dry-run # Preview changes
|
||||||
|
|
||||||
|
Configuration:
|
||||||
|
Sources can be configured in ~/.claude/agents/sync-sources.json
|
||||||
|
|
||||||
|
Format:
|
||||||
|
{
|
||||||
|
"sources": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/user/repo",
|
||||||
|
"branch": "main"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
local custom_source=""
|
||||||
|
local custom_branch="main"
|
||||||
|
|
||||||
|
# Parse arguments
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
--source)
|
||||||
|
custom_source="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--branch)
|
||||||
|
custom_branch="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--force)
|
||||||
|
FORCE=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--dry-run)
|
||||||
|
DRY_RUN=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--verbose)
|
||||||
|
VERBOSE=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
print_usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log_error "Unknown option: $1"
|
||||||
|
print_usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Ensure agents directory exists
|
||||||
|
mkdir -p "$AGENTS_DIR"
|
||||||
|
|
||||||
|
# Sync
|
||||||
|
if [ -n "$custom_source" ]; then
|
||||||
|
sync_from_source "$custom_source" "$custom_branch"
|
||||||
|
elif [ -f "$CONFIG_FILE" ]; then
|
||||||
|
sync_from_config "$CONFIG_FILE"
|
||||||
|
else
|
||||||
|
sync_default_sources
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
local total_agents
|
||||||
|
total_agents=$(find "$AGENTS_DIR" -mindepth 1 -maxdepth 1 -type d | wc -l)
|
||||||
|
|
||||||
|
log_success "Agent sync complete!"
|
||||||
|
log_info "Total agents in $AGENTS_DIR: $total_agents"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Run main
|
||||||
|
main "$@"
|
||||||
45
templates/README.md
Normal file
45
templates/README.md
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
# Configuration Templates
|
||||||
|
|
||||||
|
This directory contains template configuration files for Claude Code.
|
||||||
|
|
||||||
|
## Files
|
||||||
|
|
||||||
|
| File | Purpose | Location After Install |
|
||||||
|
|------|---------|----------------------|
|
||||||
|
| `settings.json` | Main Claude Code settings | `~/.claude/settings.json` |
|
||||||
|
| `settings.local.json` | Local permissions and settings | `~/.claude/settings.local.json` |
|
||||||
|
| `hooks.json` | Hook configuration | `~/.claude/hooks.json` |
|
||||||
|
| `config.json` | Marketplace and plugins config | `~/.claude/config.json` |
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
The `supercharge.sh` script will install these templates if they don't already exist.
|
||||||
|
|
||||||
|
Existing configurations are preserved - templates are only installed if the target file doesn't exist.
|
||||||
|
|
||||||
|
## Settings Overview
|
||||||
|
|
||||||
|
### settings.json
|
||||||
|
- **cursorFormatting**: How to format code cursors
|
||||||
|
- **skills**: Auto-load skills and priorities
|
||||||
|
- **hooks**: Hook configuration
|
||||||
|
|
||||||
|
### settings.local.json
|
||||||
|
- **permissions**: Allowed prompt patterns
|
||||||
|
- **local**: Local environment settings
|
||||||
|
|
||||||
|
### hooks.json
|
||||||
|
- **session-start**: Hooks that run when session starts
|
||||||
|
- **user-prompt**: Hooks that run on each user prompt
|
||||||
|
- **environment**: Environment variables for hooks
|
||||||
|
|
||||||
|
### config.json
|
||||||
|
- **marketplaces**: Plugin marketplace sources
|
||||||
|
- **plugins**: Plugin sources
|
||||||
|
- **agents**: Agent sync sources
|
||||||
|
|
||||||
|
## Customization
|
||||||
|
|
||||||
|
After installation, edit the files in `~/.claude/` to customize your setup.
|
||||||
|
|
||||||
|
Templates will not be overwritten on subsequent runs - your changes are preserved.
|
||||||
25
templates/config.json
Normal file
25
templates/config.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"marketplaces": {
|
||||||
|
"obra/superpowers-marketplace": "https://github.com/obra/superpowers-marketplace"
|
||||||
|
},
|
||||||
|
"plugins": {
|
||||||
|
"sources": [
|
||||||
|
"https://github.com/anthropics/claude-code-plugins"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"agents": {
|
||||||
|
"syncOnStartup": true,
|
||||||
|
"sources": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/anthropics/anthropic-agents",
|
||||||
|
"branch": "main",
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/contains-cafe/studio-agents",
|
||||||
|
"branch": "main",
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
40
templates/hooks.json
Normal file
40
templates/hooks.json
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"hooks": {
|
||||||
|
"session-start": [
|
||||||
|
{
|
||||||
|
"file": "session-start-superpowers.sh",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Auto-inject superpowers context on session start"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"session-end": [],
|
||||||
|
"user-prompt": [
|
||||||
|
{
|
||||||
|
"file": "qwen-consult.sh",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Qwen AI consultation on complex tasks"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "ralph-auto-trigger.sh",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "Auto-trigger Ralph for autonomous iteration"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "consult-qwen.sh",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Qwen consultation wrapper"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tool-use": [],
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
"environment": {
|
||||||
|
"RALPH_AGENT": "claude",
|
||||||
|
"RALPH_MAX_ITERATIONS": "100",
|
||||||
|
"RALPH_MAX_RUNTIME": "14400",
|
||||||
|
"QWEN_CONSULT_MODE": "delegate",
|
||||||
|
"QWEN_MODEL": "qwen-coder-plus",
|
||||||
|
"QWEN_MAX_ITERATIONS": "3",
|
||||||
|
"AUTO_SUPERPOWERS": "true"
|
||||||
|
}
|
||||||
|
}
|
||||||
28
templates/settings.json
Normal file
28
templates/settings.json
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"cursorFormatting": "compact",
|
||||||
|
"inlineChatPreview": "compact",
|
||||||
|
"ensureConsistency": true,
|
||||||
|
"experimentalFeatures": {
|
||||||
|
"contextMenu": true,
|
||||||
|
"debugTools": true
|
||||||
|
},
|
||||||
|
"permissions": {},
|
||||||
|
"skills": {
|
||||||
|
"autoLoad": [
|
||||||
|
"always-use-superpowers",
|
||||||
|
"auto-superpowers"
|
||||||
|
],
|
||||||
|
"priority": {
|
||||||
|
"always-use-superpowers": 9999
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hooks": {
|
||||||
|
"session-start": [
|
||||||
|
"session-start-superpowers.sh"
|
||||||
|
],
|
||||||
|
"user-prompt": [
|
||||||
|
"qwen-consult.sh",
|
||||||
|
"ralph-auto-trigger.sh"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
10
templates/settings.local.json
Normal file
10
templates/settings.local.json
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"permissions": {
|
||||||
|
"allowedPrompts": []
|
||||||
|
},
|
||||||
|
"local": {
|
||||||
|
"autoSuperpowers": true,
|
||||||
|
"ralphAuto": false,
|
||||||
|
"qwenConsultMode": "delegate"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user