qepilot/qepilot-stack
QEPilot Stack — a browsable catalogue of Claude Code agents, commands, skills, MCPs and hooks. Fork of the MIT-licensed claude-code-templates by Daniel (San) Ávila.
ARCHETYPE
YOLO Cowboy
Permissions? Never heard of 'em. Ships at the speed of `--dangerously-skip-permissions`.
Copy this rig
# review before running: this installs third-party code $ claude mcp add linear -- npx -y mcp-remote https://mcp.linear.app/mcp $ claude mcp add --transport http neon https://mcp.neon.tech/mcp $ claude mcp add memory-bank -- server-memory $ claude mcp add sequential-thinking -- code-reasoning $ claude mcp add brave-search -- server-brave-search $ claude mcp add google-maps -e GOOGLE_MAPS_<redacted> -- server-google-maps $ claude mcp add deep-graph -- mcp-code-graph $ claude mcp add go-sdk -- go-sdk-server $ claude mcp add language-server -- mcp-language-server $ claude mcp add gin -- gin-mcp $ claude mcp add mysql -e MYSQL_DSN=YOUR_MYSQL_DSN -- go-mcp-mysql $ claude mcp add archer -- go-archer $ claude mcp add postgres -e POSTGRES_CONNECTION_STRING=YOUR_POSTGRES_CONNECTION_STRING -- npx -y @modelcontextprotocol/server-postgres $ claude mcp add bundler -- bundle exec ruby -e 'require '\''json'\''; puts JSON.generate({tools: [{name: '\''bundle_audit'\'', description: '\''Security audit for gems'\''}]})' $ npx degit qepilot/qepilot-stack/cli-tool/templates/javascript-typescript/.claude ./rig-qepilot-stack # inspect, then merge into .claude/
MCP servers are added to Claude Code at local scope; env vars are shown as YOUR_… placeholders — we never store values. Files are fetched with degit into a separate folder so you can review before merging.
$ claude mcp add linear -- npx -y mcp-remote https://mcp.linear.app/mcp $ claude mcp add --transport http neon https://mcp.neon.tech/mcp $ claude mcp add memory-bank -- server-memory $ claude mcp add sequential-thinking -- code-reasoning $ claude mcp add brave-search -- server-brave-search $ claude mcp add google-maps -e GOOGLE_MAPS_<redacted> -- server-google-maps $ claude mcp add deep-graph -- mcp-code-graph $ claude mcp add go-sdk -- go-sdk-server $ claude mcp add language-server -- mcp-language-server $ claude mcp add gin -- gin-mcp $ claude mcp add mysql -e MYSQL_DSN=YOUR_MYSQL_DSN -- go-mcp-mysql $ claude mcp add archer -- go-archer $ claude mcp add postgres -e POSTGRES_CONNECTION_STRING=YOUR_POSTGRES_CONNECTION_STRING -- npx -y @modelcontextprotocol/server-postgres $ claude mcp add bundler -- bundle exec ruby -e 'require '\''json'\''; puts JSON.generate({tools: [{name: '\''bundle_audit'\'', description: '\''Security audit for gems'\''}]})'
$ npx degit qepilot/qepilot-stack/.claude-plugin/skills/owasp-security .claude/skills/owasp-security $ npx degit qepilot/qepilot-stack/cli-tool/components/skills/design-to-code .claude/skills/design-to-code $ npx degit qepilot/qepilot-stack/cli-tool/components/skills/gmod-addon-maker .claude/skills/gmod-addon-maker
$ curl -fsSL --create-dirs -o .claude/agents/agent-expert.md https://raw.githubusercontent.com/qepilot/qepilot-stack/my-changes/.claude/agents/agent-expert.md $ curl -fsSL --create-dirs -o .claude/agents/blog-writer.md https://raw.githubusercontent.com/qepilot/qepilot-stack/my-changes/.claude/agents/blog-writer.md $ curl -fsSL --create-dirs -o .claude/agents/build-checker.md https://raw.githubusercontent.com/qepilot/qepilot-stack/my-changes/.claude/agents/build-checker.md $ curl -fsSL --create-dirs -o .claude/agents/catalog-generator.md https://raw.githubusercontent.com/qepilot/qepilot-stack/my-changes/.claude/agents/catalog-generator.md $ curl -fsSL --create-dirs -o .claude/agents/cli-ui-designer.md https://raw.githubusercontent.com/qepilot/qepilot-stack/my-changes/.claude/agents/cli-ui-designer.md $ curl -fsSL --create-dirs -o .claude/agents/command-expert.md https://raw.githubusercontent.com/qepilot/qepilot-stack/my-changes/.claude/agents/command-expert.md $ curl -fsSL --create-dirs -o .claude/agents/component-improver.md https://raw.githubusercontent.com/qepilot/qepilot-stack/my-changes/.claude/agents/component-improver.md $ curl -fsSL --create-dirs -o .claude/agents/component-migrator.md https://raw.githubusercontent.com/qepilot/qepilot-stack/my-changes/.claude/agents/component-migrator.md $ curl -fsSL --create-dirs -o .claude/agents/component-researcher.md https://raw.githubusercontent.com/qepilot/qepilot-stack/my-changes/.claude/agents/component-researcher.md $ curl -fsSL --create-dirs -o .claude/agents/component-reviewer.md https://raw.githubusercontent.com/qepilot/qepilot-stack/my-changes/.claude/agents/component-reviewer.md $ curl -fsSL --create-dirs -o .claude/agents/deployer.md https://raw.githubusercontent.com/qepilot/qepilot-stack/my-changes/.claude/agents/deployer.md $ curl -fsSL --create-dirs -o .claude/agents/docusaurus-expert.md https://raw.githubusercontent.com/qepilot/qepilot-stack/my-changes/.claude/agents/docusaurus-expert.md $ curl -fsSL --create-dirs -o .claude/agents/frontend-developer.md https://raw.githubusercontent.com/qepilot/qepilot-stack/my-changes/.claude/agents/frontend-developer.md $ curl -fsSL --create-dirs -o .claude/agents/linear-tracker.md https://raw.githubusercontent.com/qepilot/qepilot-stack/my-changes/.claude/agents/linear-tracker.md $ curl -fsSL --create-dirs -o .claude/agents/mcp-expert.md https://raw.githubusercontent.com/qepilot/qepilot-stack/my-changes/.claude/agents/mcp-expert.md
Merge into .claude/settings.json (project) or ~/.claude/settings.json (user). Hook commands reference scripts in the source repo — copy those too.
{
"permissions": {
"deny": [
"Bash(curl:*)",
"Bash(wget:*)",
"Bash(rm -rf:*)",
"Bash(curl:*)",
"Bash(wget:*)",
"Bash(rm -rf:*)"
]
},
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "jq -r '\"\\(.tool_input.command) - \\(.tool_input.description // \"No description\")\"' >> ~/.claude/bash-command-log.txt"
},
{
"type": "command",
"command": "jq -r '\"\\(.tool_input.command) - \\(.tool_input.description // \"No description\")\"' >> ~/.claude/bash-command-log.txt"
}
]
},
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // \"\"); CONTENT=$(echo $STDIN_JSON | jq -r '.tool_input.content // \"\"); if [[ \"$FILE\" =~ \\.(js|jsx|ts|tsx)$ ]] && echo \"$CONTENT\" | grep -q 'console\\.log'; then echo 'Warning: console.l"
},
{
"type": "command",
"command": "FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // \"\"'); if [[ \"$FILE\" == \"package.json\" ]]; then echo 'Checking for vulnerable dependencies...'; npm audit --audit-level=moderate; fi"
},
{
"type": "command",
"command": "FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // \"\"); CONTENT=$(echo $STDIN_JSON | jq -r '.tool_input.content // \"\"); if [[ \"$FILE\" =~ \\.py$ ]] && echo \"$CONTENT\" | grep -q 'print('; then echo 'Warning: print() statements should be"
},
{
"type": "command",
"command": "FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // \"\"'); if [[ \"$FILE\" == \"requirements.txt\" ]] || [[ \"$FILE\" == \"pyproject.toml\" ]] || [[ \"$FILE\" == \"setup.py\" ]]; then echo 'Checking for vulnerable dependencies...'; if command -v s"
}
]
}
]
}
} MCP servers (27)
| server | source | est. tokens |
|---|---|---|
| Linear | remote | 5.5k |
| mcp.neon.tech · "neon" | remote · remote | 2.5k |
| server-memory · "memory-bank" | binary | 2.5k |
| code-reasoning · "sequential-thinking" | binary | 2.5k |
| Brave Search · "brave-search" | binary | 900 |
| server-google-maps · "google-maps" env: GOOGLE_MAPS_API_KEY | binary | 2.5k |
| mcp-code-graph · "deep-graph" | binary | 2.5k |
| go-sdk-server · "go-sdk" | binary | 2.5k |
| mcp-language-server · "language-server" | binary | 2.5k |
| gin-mcp · "gin" | binary | 2.5k |
| go-mcp-mysql · "mysql" env: MYSQL_DSN | binary | 2.5k |
| go-archer · "archer" | binary | 2.5k |
| typescript-sdk | local / custom | 2.5k |
| github env: GITHUB_TOKEN | local / custom | 2.5k |
| puppeteer | local / custom | 2.5k |
| slack env: SLACK_TOKEN | local / custom | 2.5k |
| filesystem | local / custom | 2.5k |
| python-sdk | local / custom | 2.5k |
| docker | local / custom | 2.5k |
| jupyter | local / custom | 2.5k |
| postgresql env: DATABASE_URL | local / custom | 2.5k |
| opik | local / custom | 2.5k |
| Postgres env: POSTGRES_CONNECTION_STRING | npm | 600 |
| ruby-docs | local / custom | 2.5k |
| rails-docs | local / custom | 2.5k |
| rubygems | local / custom | 2.5k |
| bundle · "bundler" | binary | 2.5k |
Skills (3)
Subagents (15)
| agent-expert | Use this agent when creating specialized Claude Code agents for the claude-code-templates components system. Specializes in agent design, prompt engineering, domain expertise modeling, and agent best |
| blog-writer | Use this agent to create blog articles for aitmpl.com from Claude Code Templates components. Reads the component, asks the user to confirm details, generates SVG cover, HTML article, and updates blog- |
| build-checker model: sonnet | Runs pre-deploy build checks on the dashboard. Validates Astro build, checks for common esbuild/JSX issues, verifies API endpoints compile, and reports errors with fixes. Use before merging PRs that t |
| catalog-generator | Regenerates the component catalog (docs/components.json) by running the Python script. Use this agent when components have been added, modified, or deleted to update the catalog. Handles the full rege |
| cli-ui-designer model: sonnet | CLI interface design specialist. Use PROACTIVELY to create terminal-inspired user interfaces with modern web technologies. Expert in CLI aesthetics, terminal themes, and command-line UX patterns. |
| command-expert | Use this agent when creating CLI commands for the claude-code-templates components system. Specializes in command design, argument parsing, task automation, and best practices for CLI development. Exa |
| component-improver model: sonnet | Applies researched improvements to Claude Code components, validates changes with the component-reviewer agent, and creates pull requests. The only agent that modifies files and creates PRs. |
| component-migrator model: sonnet | Migrates components (agents, commands, skills, hooks, settings, MCPs) from external GitHub repositories to claude-code-templates, validates them with component-reviewer, and regenerates the catalog |
| component-researcher model: sonnet | Investigates best practices and improvement opportunities for Claude Code components using web search and codebase analysis. Returns structured research reports without modifying files. |
| component-reviewer model: sonnet | Expert component reviewer for Claude Code Templates. Use PROACTIVELY when adding or modifying components in cli-tool/components/ directory (agents, commands, MCPs, hooks, settings, skills, loops). Val |
| deployer | Assists with deploy verification and troubleshooting. Deployments happen automatically via GitHub Actions on push to main. Use when the user needs to check deploy status or debug deploy issues. |
| docusaurus-expert model: sonnet | Docusaurus documentation specialist. Use PROACTIVELY when working with Docusaurus documentation in the docs_to_claude folder for site configuration, content management, theming, build troubleshooting, |
| frontend-developer model: sonnet | Frontend development specialist for React applications and responsive design. Use PROACTIVELY for UI components, state management, performance optimization, accessibility implementation, and modern fr |
| linear-tracker model: haiku | Manages Linear issues for the Component Reviews project. Handles CRUD operations for review tracking, finding next components to review, and reporting results. |
| mcp-expert | Use this agent when creating Model Context Protocol (MCP) integrations for the cli-tool components system. Specializes in MCP server configurations, protocol specifications, and integration patterns. |
Hooks (21)
| event | matcher | runs |
|---|---|---|
| PreToolUse | Bash | jq -r '"\(.tool_input.command) - \(.tool_input.description // "No description")"' >> ~/.claude/bash-command-log.txt |
| PreToolUse | Write | FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // ""); CONTENT=$(echo $STDIN_JSON | jq -r '.tool_input.content // ""); if [[ "$FILE" =~ \.(js|jsx|ts|tsx)$ ]] && echo "$CONTENT" | grep -q 'console\.log'; then echo 'Warning: console.l |
| PreToolUse | Write | FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // ""'); if [[ "$FILE" == "package.json" ]]; then echo 'Checking for vulnerable dependencies...'; npm audit --audit-level=moderate; fi |
| PostToolUse | Write|Edit|MultiEdit | FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // ""'); if [[ "$FILE" =~ \.(js|jsx|ts|tsx)$ ]]; then npx prettier --write "$FILE"; fi |
| PostToolUse | Write|Edit|MultiEdit | FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // ""'); if [[ "$FILE" =~ \.(ts|tsx)$ ]]; then RESULT=$(npx tsc --noEmit 2>&1); if [ $? -ne 0 ]; then echo "TypeScript errors found: $RESULT" >&2; exit 2; fi; fi |
| PostToolUse | Write|Edit|MultiEdit | FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // ""'); if [[ "$FILE" =~ \.(js|jsx|ts|tsx)$ ]] && grep -q 'import \* from' "$FILE"; then echo 'Warning: Avoid wildcard imports for better tree-shaking' >&2; exit 2; fi |
| PostToolUse | Write|Edit|MultiEdit | FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // ""'); if [[ "$FILE" =~ \.(js|jsx|ts|tsx)$ && "$FILE" != *".test."* && "$FILE" != *".spec."* ]]; then DIR=$(dirname "$FILE"); BASENAME=$(basename "$FILE" | sed -E 's/\.(js|jsx|ts|tsx) |
| Notification | * | echo "Claude Code notification: $(date)" >> ~/.claude/notifications.log |
| Stop | * | if [[ -f package.json && $(git status --porcelain | grep -E '\.js$|\.jsx$|\.ts$|\.tsx$') ]]; then echo 'Running linter on changed files...'; npx eslint $(git diff --name-only --diff-filter=ACMR | grep -E '\.js$|\.jsx$|\.ts$|\.tsx$'); fi |
| Stop | * | if [[ -f package.json && $(git status --porcelain | grep -E '\.js$|\.jsx$|\.ts$|\.tsx$') ]]; then echo 'Analyzing bundle size impact...'; if command -v bundlesize >/dev/null 2>&1; then npx bundlesize; elif npm list webpack-bundle-analyzer > |
| PreToolUse | Bash | jq -r '"\(.tool_input.command) - \(.tool_input.description // "No description")"' >> ~/.claude/bash-command-log.txt |
| PreToolUse | Write | FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // ""); CONTENT=$(echo $STDIN_JSON | jq -r '.tool_input.content // ""); if [[ "$FILE" =~ \.py$ ]] && echo "$CONTENT" | grep -q 'print('; then echo 'Warning: print() statements should be |
| PreToolUse | Write | FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // ""'); if [[ "$FILE" == "requirements.txt" ]] || [[ "$FILE" == "pyproject.toml" ]] || [[ "$FILE" == "setup.py" ]]; then echo 'Checking for vulnerable dependencies...'; if command -v s |
| PostToolUse | Write|Edit|MultiEdit | FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // ""'); if [[ "$FILE" =~ \.py$ ]]; then black "$FILE" 2>/dev/null || echo 'Black formatting skipped (not installed)'; fi |
| PostToolUse | Write|Edit|MultiEdit | FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // ""'); if [[ "$FILE" =~ \.py$ ]]; then isort "$FILE" 2>/dev/null || echo 'isort skipped (not installed)'; fi |
| PostToolUse | Write|Edit|MultiEdit | FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // ""'); if [[ "$FILE" =~ \.py$ ]]; then RESULT=$(flake8 "$FILE" 2>&1); if [ $? -ne 0 ] && command -v flake8 >/dev/null 2>&1; then echo "Flake8 linting issues found: $RESULT" >&2; exit |
| PostToolUse | Write|Edit|MultiEdit | FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // ""'); if [[ "$FILE" =~ \.py$ ]]; then RESULT=$(mypy "$FILE" 2>&1); if [ $? -ne 0 ] && command -v mypy >/dev/null 2>&1; then echo "MyPy type checking issues found: $RESULT" >&2; exit |
| PostToolUse | Write|Edit|MultiEdit | FILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // ""'); if [[ "$FILE" =~ \.py$ && "$FILE" != *"test_"* && "$FILE" != *"_test.py" ]]; then DIR=$(dirname "$FILE"); BASENAME=$(basename "$FILE" .py); for TEST_FILE in "$DIR/test_$BASENAM |
| Notification | * | echo "Claude Code notification: $(date)" >> ~/.claude/notifications.log |
| Stop | * | if [[ -f requirements.txt || -f pyproject.toml || -f setup.py ]] && [[ $(git status --porcelain | grep '\.py$') ]]; then echo 'Running linter on changed Python files...'; if command -v flake8 >/dev/null 2>&1; then flake8 $(git diff --name-o |
| Stop | * | if [[ -f requirements.txt || -f pyproject.toml || -f setup.py ]] && [[ $(git status --porcelain | grep '\.py$') ]]; then echo 'Running type checking on changed files...'; if command -v mypy >/dev/null 2>&1; then mypy $(git diff --name-only |
Slash commands (47)
/cleanup-cache/create-blog-article/lint/test/worktree-check/worktree-cleanup/worktree-deliver/worktree-init/git-workflow/project-setup/api-endpoint/debug/lint/npm-scripts/refactor/test/typescript-migrate/components/services/api-endpoint/database/middleware/route/component/hooks/state-management/components/composables/lint/test/admin/django-model/views/api-endpoints/auth/database/deployment/testing/app-factory/blueprint/database/deployment/flask-route/testing/model/test/authentication
Permissions
deny (6)
Bash(curl:*)
Bash(wget:*)
Bash(rm -rf:*)
Bash(curl:*)
Bash(wget:*)
Bash(rm -rf:*)
ask (0)
—
allow (32)
Bash
Edit
MultiEdit
Write
Bash(npm:*)
Bash(yarn:*)
Bash(npx:*)
Bash(node:*)
Bash(git:*)
Bash(eslint:*)
Bash(prettier:*)
Bash(tsc:*)
Bash(jest:*)
Bash(vitest:*)
Bash(webpack:*)
Bash(vite:*)
Bash
Edit
MultiEdit
Write
Bash(python:*)
Bash(pip:*)
Bash(pytest:*)
Bash(black:*)
Bash(isort:*)
Bash(flake8:*)
Bash(mypy:*)
Bash(django-admin:*)
Bash(flask:*)
Bash(uvicorn:*)
Bash(gunicorn:*)
Bash(git:*)
Similar rigs
davila7/claude-code-templates
CLI tool for configuring and monitoring Claude Code
YOLO Cowboy 80.9k tok ·
Cordycepsers/vscode-claude-setup-2025
Complete configuration for Python, Node.js, React, and TypeScript development with VS Code, Claude Desktop, and Claude Code
MCP Hoarder 53.0k tok ·
agamm/claude-code-owasp
Claude Code skill for OWASP security best practices (2025-2026). Includes Top 10:2025, ASVS 5.0, Agentic AI security, and 20+ language-specific security quirks.
Minimalist 380 tok ·
brettdavies/cursor-template
Starter template of Cursor rules and MCP config for new projects: opinionated .mdc rulesets for git conventions and workflow, SQL (formatting, functions, migrations, RLS policies), and current-datetime handling.
Pragmatist 7.4k tok ·