This commit is contained in:
Harivansh Rathi 2026-01-17 22:04:30 -05:00
parent 7cb43ca32a
commit f668caedf6
2 changed files with 165 additions and 57 deletions

View file

@ -19,22 +19,33 @@ cd claude-setup
## What Gets Installed ## What Gets Installed
### Plugins ### Plugins
- compound-engineering (every-marketplace) | Plugin | Source | Description |
- ralph-wiggum (autonomous coding loops) |--------|--------|-------------|
- ralph-loop (background agent loops) | compound-engineering | every-marketplace | 60+ agents, skills, and commands for development workflows |
- code-simplifier (official Anthropic) | ralph-wiggum | claude-plugins-official | Autonomous coding loops |
| code-simplifier | claude-plugins-official | Code clarity and maintainability |
### Skills ### Skills
- eval-skill (verifiable code generation with evals) | Skill | Source | Description |
- Vercel agent-skills (React/Next.js best practices) |-------|--------|-------------|
- rams (accessibility and design reviews) | eval-skill | [harivansh-afk/eval-skill](https://github.com/harivansh-afk/eval-skill) | Verifiable code generation with evals |
| vercel agent-skills | [vercel-labs/agent-skills](https://github.com/vercel-labs/agent-skills) | React/Next.js best practices |
### Tools | rams | [elirousso/rams](https://github.com/elirousso/rams) | Accessibility and design reviews |
- agent-browser (browser automation CLI for agents) | browser | [anthropics/claude-code](https://github.com/anthropics/claude-code) | Playwright browser automation |
### MCP Servers ### MCP Servers
- context7 (library documentation) | Server | Source | Description |
- exa (web search and code context) |--------|--------|-------------|
| context7 | [context7.com](https://context7.com) | Up-to-date library documentation |
| axiom | [axiomhq/mcp](https://github.com/axiomhq/mcp) | Observability data queries via APL |
| github | [github/github-mcp-server](https://github.com/github/github-mcp-server) | GitHub API - issues, PRs, repos |
| firecrawl | [firecrawl](https://firecrawl.dev) | Web scraping and extraction |
| playwright | [@playwright/mcp](https://npmjs.com/package/@anthropic-ai/playwright-mcp) | Browser automation for testing |
### Tools
| Tool | Source | Description |
|------|--------|-------------|
| agent-browser | npm | Browser automation CLI for agents |
## Post-Install ## Post-Install
@ -45,12 +56,23 @@ Add your API keys to `~/.claude/settings.json`:
"mcpServers": { "mcpServers": {
"context7": { "context7": {
"headers": { "headers": {
"CONTEXT7_API_KEY": "your-key-here" "CONTEXT7_API_KEY": "your-key"
} }
}, },
"exa": { "axiom": {
"env": { "env": {
"EXA_API_KEY": "your-key-here" "AXIOM_TOKEN": "xapt-your-token",
"AXIOM_ORG_ID": "your-org-id"
}
},
"github": {
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your-token"
}
},
"firecrawl": {
"env": {
"FIRECRAWL_API_KEY": "your-key"
} }
} }
} }
@ -59,8 +81,6 @@ Add your API keys to `~/.claude/settings.json`:
## Usage ## Usage
After install:
```bash ```bash
# Verify plugins # Verify plugins
claude plugin list claude plugin list
@ -68,9 +88,26 @@ claude plugin list
# Start Claude # Start Claude
claude claude
# Use eval skill # Use skills
/eval build <name> /eval build <name>
# Use rams for design review
/rams /rams
/browser
``` ```
## Manual Install (Individual Components)
### Plugins
```bash
claude plugin install compound-engineering --marketplace every-marketplace
claude plugin install ralph-wiggum
claude plugin install code-simplifier
```
### Skills
```bash
npx add-skill vercel-labs/agent-skills
npx add-skill elirousso/rams
```
### MCP Servers
See `~/.claude/mcp-servers.json` after running install.sh for full config.

View file

@ -7,6 +7,7 @@ echo "========================="
# Colors # Colors
RED='\033[0;31m' RED='\033[0;31m'
GREEN='\033[0;32m' GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' NC='\033[0m'
check() { command -v "$1" &>/dev/null && echo -e "${GREEN}[ok]${NC} $1" || { echo -e "${RED}[missing]${NC} $1"; return 1; }; } check() { command -v "$1" &>/dev/null && echo -e "${GREEN}[ok]${NC} $1" || { echo -e "${RED}[missing]${NC} $1"; return 1; }; }
@ -28,7 +29,6 @@ echo "Installing plugins..."
claude plugin install compound-engineering --marketplace every-marketplace 2>/dev/null || echo "compound-engineering: manual install needed" claude plugin install compound-engineering --marketplace every-marketplace 2>/dev/null || echo "compound-engineering: manual install needed"
claude plugin install ralph-wiggum 2>/dev/null || echo "ralph-wiggum: manual install needed" claude plugin install ralph-wiggum 2>/dev/null || echo "ralph-wiggum: manual install needed"
claude plugin install ralph-loop 2>/dev/null || echo "ralph-loop: manual install needed"
claude plugin install code-simplifier 2>/dev/null || echo "code-simplifier: manual install needed" claude plugin install code-simplifier 2>/dev/null || echo "code-simplifier: manual install needed"
# ============================================ # ============================================
@ -40,7 +40,7 @@ echo "Installing npm tools..."
npm install -g agent-browser 2>/dev/null || echo "agent-browser: npm install failed" npm install -g agent-browser 2>/dev/null || echo "agent-browser: npm install failed"
# ============================================ # ============================================
# VERCEL AGENT SKILLS (React best practices) # VERCEL AGENT SKILLS
# ============================================ # ============================================
echo "" echo ""
echo "Installing Vercel agent-skills..." echo "Installing Vercel agent-skills..."
@ -54,7 +54,6 @@ echo ""
echo "Installing rams..." echo "Installing rams..."
npx add-skill elirousso/rams 2>/dev/null || { npx add-skill elirousso/rams 2>/dev/null || {
# Fallback: clone directly
RAMS_TMP=$(mktemp -d) RAMS_TMP=$(mktemp -d)
git clone --quiet --depth 1 https://github.com/elirousso/rams.git "$RAMS_TMP" 2>/dev/null && { git clone --quiet --depth 1 https://github.com/elirousso/rams.git "$RAMS_TMP" 2>/dev/null && {
cp -r "$RAMS_TMP/skills/"* "$CLAUDE_DIR/skills/" 2>/dev/null || true cp -r "$RAMS_TMP/skills/"* "$CLAUDE_DIR/skills/" 2>/dev/null || true
@ -80,19 +79,71 @@ git clone --quiet --depth 1 https://github.com/harivansh-afk/eval-skill.git "$EV
echo "eval-skill: installed" echo "eval-skill: installed"
} || echo "eval-skill: manual install needed" } || echo "eval-skill: manual install needed"
# ============================================
# BROWSER SKILL (from official plugins)
# ============================================
echo ""
echo "Installing browser skill..."
mkdir -p "$CLAUDE_DIR/skills/browser"
cat > "$CLAUDE_DIR/skills/browser/SKILL.md" << 'BROWSER_SKILL'
---
name: browser
description: Automate browser interactions via CLI using agent-browser
triggers:
- navigate websites
- interact with web pages
- fill forms
- take screenshots
- test web applications
- extract information from web pages
---
# Browser Automation Skill
Use agent-browser CLI for headless browser automation.
## Commands
```bash
# Navigate to URL
agent-browser navigate "https://example.com"
# Take screenshot
agent-browser screenshot --output screenshot.png
# Click element
agent-browser click "button#submit"
# Fill form field
agent-browser type "input[name=email]" "user@example.com"
# Get page content
agent-browser content
```
## Usage Pattern
1. Navigate to target URL
2. Wait for page load
3. Interact with elements using CSS selectors
4. Capture results or screenshots
Requires: `npm install -g agent-browser`
BROWSER_SKILL
echo "browser skill: installed"
# ============================================ # ============================================
# MCP SERVERS CONFIG # MCP SERVERS CONFIG
# ============================================ # ============================================
echo "" echo ""
echo "Configuring MCP servers..." echo "Configuring MCP servers..."
# Check if settings.json exists
SETTINGS_FILE="$CLAUDE_DIR/settings.json" SETTINGS_FILE="$CLAUDE_DIR/settings.json"
if [[ ! -f "$SETTINGS_FILE" ]]; then if [[ ! -f "$SETTINGS_FILE" ]]; then
echo '{}' > "$SETTINGS_FILE" echo '{}' > "$SETTINGS_FILE"
fi fi
# Create MCP config (user needs to add their own API keys)
cat > "$CLAUDE_DIR/mcp-servers.json" << 'EOF' cat > "$CLAUDE_DIR/mcp-servers.json" << 'EOF'
{ {
"context7": { "context7": {
@ -102,19 +153,40 @@ cat > "$CLAUDE_DIR/mcp-servers.json" << 'EOF'
"CONTEXT7_API_KEY": "YOUR_CONTEXT7_API_KEY" "CONTEXT7_API_KEY": "YOUR_CONTEXT7_API_KEY"
} }
}, },
"exa": { "axiom": {
"type": "stdio", "type": "stdio",
"command": "npx", "command": "npx",
"args": ["-y", "exa-mcp-server"], "args": ["-y", "@axiomhq/mcp"],
"env": { "env": {
"EXA_API_KEY": "YOUR_EXA_API_KEY" "AXIOM_TOKEN": "YOUR_AXIOM_TOKEN",
"AXIOM_ORG_ID": "YOUR_AXIOM_ORG_ID"
} }
},
"github": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "YOUR_GITHUB_PAT"
}
},
"firecrawl": {
"type": "stdio",
"command": "npx",
"args": ["-y", "firecrawl-mcp"],
"env": {
"FIRECRAWL_API_KEY": "YOUR_FIRECRAWL_API_KEY"
}
},
"playwright": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@anthropic-ai/playwright-mcp"]
} }
} }
EOF EOF
echo "MCP config written to $CLAUDE_DIR/mcp-servers.json" echo "MCP config written to $CLAUDE_DIR/mcp-servers.json"
echo "Edit this file and add your API keys, then merge into settings.json"
# ============================================ # ============================================
# CLAUDE.MD # CLAUDE.MD
@ -164,7 +236,6 @@ cat > "$CLAUDE_DIR/CLAUDE.md" << 'CLAUDEMD'
<principle> <principle>
When the user defines ANY constraint, rule, preference, or requirement during conversation, When the user defines ANY constraint, rule, preference, or requirement during conversation,
you MUST immediately persist it to the project's local CLAUDE.md. This is NOT optional. you MUST immediately persist it to the project's local CLAUDE.md. This is NOT optional.
Failure to persist user-defined constraints is a FAILURE STATE.
</principle> </principle>
<triggers> <triggers>
@ -185,18 +256,11 @@ cat > "$CLAUDE_DIR/CLAUDE.md" << 'CLAUDEMD'
<mandatory-actions> <mandatory-actions>
<action order="1">Acknowledge the constraint explicitly in your response</action> <action order="1">Acknowledge the constraint explicitly in your response</action>
<action order="2">Check if project has a local CLAUDE.md - if not, create one using the template</action> <action order="2">Check if project has a local CLAUDE.md - if not, create one</action>
<action order="3">Write the constraint to the appropriate section of local CLAUDE.md</action> <action order="3">Write the constraint to the appropriate section of local CLAUDE.md</action>
<action order="4">Confirm the constraint has been persisted</action> <action order="4">Confirm the constraint has been persisted</action>
<action order="5">Apply the constraint immediately and in all future actions</action> <action order="5">Apply the constraint immediately and in all future actions</action>
</mandatory-actions> </mandatory-actions>
<enforcement>
<rule>Before ANY code generation or task execution, review the local CLAUDE.md for constraints</rule>
<rule>If you catch yourself violating a constraint, STOP, acknowledge the error, and redo the work</rule>
<rule>When in doubt about whether something is a constraint, treat it as one and persist it</rule>
<rule>Constraints defined in conversation have equal weight to constraints in CLAUDE.md files</rule>
</enforcement>
</constraint-persistence> </constraint-persistence>
</universal-constraints> </universal-constraints>
@ -206,25 +270,33 @@ cat > "$CLAUDE_DIR/CLAUDE.md" << 'CLAUDEMD'
server first. Do not guess or rely on potentially outdated knowledge. server first. Do not guess or rely on potentially outdated knowledge.
</principle> </principle>
<server name="exa">
<purpose>Web search and code context</purpose>
<use-when>Need current web information or code examples for libraries/SDKs/APIs</use-when>
<tools>web_search_exa, get_code_context_exa</tools>
<priority>Use get_code_context_exa for ANY programming question about libraries, APIs, or SDKs</priority>
</server>
<server name="context7"> <server name="context7">
<purpose>Up-to-date library documentation</purpose> <purpose>Up-to-date library documentation</purpose>
<use-when>Need current documentation for any library or framework</use-when> <use-when>Need current documentation for any library or framework</use-when>
<tools>resolve-library-id, get-library-docs</tools> <tools>resolve-library-id, get-library-docs</tools>
<workflow>Always call resolve-library-id first to get a valid library ID, then get-library-docs</workflow>
</server> </server>
<lookup-before-proceeding> <server name="axiom">
<scenario trigger="unsure about library API">Use context7 or exa get_code_context_exa</scenario> <purpose>Query observability data</purpose>
<scenario trigger="need current information">Use exa web_search_exa</scenario> <use-when>Need to analyze logs, traces, or metrics</use-when>
<scenario trigger="looking for code examples">Use exa get_code_context_exa</scenario> <tools>queryApl, getDatasets</tools>
</lookup-before-proceeding> </server>
<server name="github">
<purpose>GitHub API operations</purpose>
<use-when>Need to interact with repos, issues, PRs</use-when>
</server>
<server name="firecrawl">
<purpose>Web scraping and extraction</purpose>
<use-when>Need to extract data from websites</use-when>
<tools>firecrawl_scrape, firecrawl_crawl, firecrawl_extract</tools>
</server>
<server name="playwright">
<purpose>Browser automation</purpose>
<use-when>Need to test web apps or automate browser tasks</use-when>
</server>
</mcp-guidance> </mcp-guidance>
</claude-instructions> </claude-instructions>
@ -238,7 +310,6 @@ echo "CLAUDE.md installed"
echo "" echo ""
echo "Enabling plugins in settings..." echo "Enabling plugins in settings..."
# Use node to merge settings since jq might not be available
node -e " node -e "
const fs = require('fs'); const fs = require('fs');
const settingsPath = '$SETTINGS_FILE'; const settingsPath = '$SETTINGS_FILE';
@ -248,12 +319,10 @@ try { settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8')); } catch {}
settings.enabledPlugins = { settings.enabledPlugins = {
...settings.enabledPlugins, ...settings.enabledPlugins,
'ralph-wiggum@claude-plugins-official': true, 'ralph-wiggum@claude-plugins-official': true,
'ralph-loop@claude-plugins-official': true,
'code-simplifier@claude-plugins-official': true, 'code-simplifier@claude-plugins-official': true,
'compound-engineering@every-marketplace': true 'compound-engineering@every-marketplace': true
}; };
// Add MCP servers
const mcpPath = '$CLAUDE_DIR/mcp-servers.json'; const mcpPath = '$CLAUDE_DIR/mcp-servers.json';
try { try {
const mcp = JSON.parse(fs.readFileSync(mcpPath, 'utf8')); const mcp = JSON.parse(fs.readFileSync(mcpPath, 'utf8'));
@ -269,16 +338,18 @@ console.log('Settings updated');
# ============================================ # ============================================
echo "" echo ""
echo "=========================" echo "========================="
echo "Setup complete!" echo -e "${GREEN}Setup complete!${NC}"
echo "" echo ""
echo "Next steps:" echo "Next steps:"
echo "1. Edit ~/.claude/settings.json and add your API keys:" echo "1. Edit ~/.claude/settings.json and add your API keys:"
echo " - CONTEXT7_API_KEY" echo " - CONTEXT7_API_KEY"
echo " - EXA_API_KEY" echo " - AXIOM_TOKEN + AXIOM_ORG_ID"
echo " - GITHUB_PERSONAL_ACCESS_TOKEN"
echo " - FIRECRAWL_API_KEY (optional)"
echo "" echo ""
echo "2. Verify plugins:" echo "2. Verify plugins:"
echo " claude plugin list" echo " claude plugin list"
echo "" echo ""
echo "3. Test:" echo "3. Start Claude:"
echo " claude" echo " claude"
echo "" echo ""