~ / rigs / qepilot / qepilot-stack

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.

↗ GitHub ★ 0 MIT updated today project Claude CodeCodex
share on X
ARCHETYPE
YOLO Cowboy
Permissions? Never heard of 'em. Ships at the speed of `--dangerously-skip-permissions`.
CONTEXT TAX · EVERY TURN
~78.0k tokens
Context hog · median rig: 2.3k · breakdown
GUARDRAILS
2/5
Blocks destructive commands · Pre-tool screening hook · details

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)

serversourceest. 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-expertUse 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-writerUse 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-generatorRegenerates 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-expertUse 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
deployerAssists 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-expertUse 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)

eventmatcherruns
PreToolUseBashjq -r '"\(.tool_input.command) - \(.tool_input.description // "No description")"' >> ~/.claude/bash-command-log.txt
PreToolUseWriteFILE=$(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
PreToolUseWriteFILE=$(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
PostToolUseWrite|Edit|MultiEditFILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // ""'); if [[ "$FILE" =~ \.(js|jsx|ts|tsx)$ ]]; then npx prettier --write "$FILE"; fi
PostToolUseWrite|Edit|MultiEditFILE=$(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
PostToolUseWrite|Edit|MultiEditFILE=$(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
PostToolUseWrite|Edit|MultiEditFILE=$(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 >
PreToolUseBashjq -r '"\(.tool_input.command) - \(.tool_input.description // "No description")"' >> ~/.claude/bash-command-log.txt
PreToolUseWriteFILE=$(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
PreToolUseWriteFILE=$(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
PostToolUseWrite|Edit|MultiEditFILE=$(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
PostToolUseWrite|Edit|MultiEditFILE=$(echo $STDIN_JSON | jq -r '.tool_input.file_path // ""'); if [[ "$FILE" =~ \.py$ ]]; then isort "$FILE" 2>/dev/null || echo 'isort skipped (not installed)'; fi
PostToolUseWrite|Edit|MultiEditFILE=$(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
PostToolUseWrite|Edit|MultiEditFILE=$(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
PostToolUseWrite|Edit|MultiEditFILE=$(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

copied ✓