~ / rigs / ChrisWiles / claude-code-showcase

ChrisWiles/claude-code-showcase

Comprehensive Claude Code project configuration example with hooks, skills, agents, commands, and GitHub Actions workflows

↗ GitHub ★ 6,072 no license updated 9mo ago project Claude Code
share on X
ARCHETYPE
MCP Hoarder
Six or more MCP servers wired in. Every tool, always in context.
CONTEXT TAX · EVERY TURN
~29.4k tokens
Context hog · median rig: 2.3k · breakdown
GUARDRAILS
2/5
Pre-tool screening hook · No YOLO mode · details

Copy this rig

# review before running: this installs third-party code
$ claude mcp add jira -e JIRA_API_<redacted> -e JIRA_EMAIL=YOUR_JIRA_EMAIL -e JIRA_HOST=YOUR_JIRA_HOST -- npx -y @anthropic/mcp-jira
$ claude mcp add github -e GITHUB_<redacted> -- npx -y @anthropic/mcp-github
$ claude mcp add linear -e LINEAR_<redacted> -- npx -y @anthropic/mcp-linear
$ claude mcp add sentry -e SENTRY_AUTH_<redacted> -e SENTRY_ORG=YOUR_SENTRY_ORG -- npx -y @anthropic/mcp-sentry
$ claude mcp add postgres -e DATABASE_URL=YOUR_DATABASE_URL -- npx -y @anthropic/mcp-postgres
$ claude mcp add slack -e SLACK_BOT_<redacted> -e SLACK_TEAM_ID=YOUR_SLACK_TEAM_ID -- npx -y @anthropic/mcp-slack
$ claude mcp add notion -e NOTION_<redacted> -- npx -y @anthropic/mcp-notion
$ claude mcp add memory -- npx -y @anthropic/mcp-memory
$ npx degit ChrisWiles/claude-code-showcase/.claude ./rig-claude-code-showcase  # 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 jira -e JIRA_API_<redacted> -e JIRA_EMAIL=YOUR_JIRA_EMAIL -e JIRA_HOST=YOUR_JIRA_HOST -- npx -y @anthropic/mcp-jira
$ claude mcp add github -e GITHUB_<redacted> -- npx -y @anthropic/mcp-github
$ claude mcp add linear -e LINEAR_<redacted> -- npx -y @anthropic/mcp-linear
$ claude mcp add sentry -e SENTRY_AUTH_<redacted> -e SENTRY_ORG=YOUR_SENTRY_ORG -- npx -y @anthropic/mcp-sentry
$ claude mcp add postgres -e DATABASE_URL=YOUR_DATABASE_URL -- npx -y @anthropic/mcp-postgres
$ claude mcp add slack -e SLACK_BOT_<redacted> -e SLACK_TEAM_ID=YOUR_SLACK_TEAM_ID -- npx -y @anthropic/mcp-slack
$ claude mcp add notion -e NOTION_<redacted> -- npx -y @anthropic/mcp-notion
$ claude mcp add memory -- npx -y @anthropic/mcp-memory
$ npx degit ChrisWiles/claude-code-showcase/.claude/skills/core-components .claude/skills/core-components
$ npx degit ChrisWiles/claude-code-showcase/.claude/skills/formik-patterns .claude/skills/formik-patterns
$ npx degit ChrisWiles/claude-code-showcase/.claude/skills/graphql-schema .claude/skills/graphql-schema
$ npx degit ChrisWiles/claude-code-showcase/.claude/skills/react-ui-patterns .claude/skills/react-ui-patterns
$ npx degit ChrisWiles/claude-code-showcase/.claude/skills/systematic-debugging .claude/skills/systematic-debugging
$ npx degit ChrisWiles/claude-code-showcase/.claude/skills/testing-patterns .claude/skills/testing-patterns
$ curl -fsSL --create-dirs -o .claude/agents/code-reviewer.md https://raw.githubusercontent.com/ChrisWiles/claude-code-showcase/main/.claude/agents/code-reviewer.md
$ curl -fsSL --create-dirs -o .claude/agents/github-workflow.md https://raw.githubusercontent.com/ChrisWiles/claude-code-showcase/main/.claude/agents/github-workflow.md

Merge into .claude/settings.json (project) or ~/.claude/settings.json (user). Hook commands reference scripts in the source repo — copy those too.

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|MultiEdit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "# Prevent editing on main branch\n[ \"$(git branch --show-current)\" != \"main\" ] || { echo '{\"block\": true, \"message\": \"Cannot edit files on main branch. Create a feature branch first.\"}' >&2; exit 2; }"
          }
        ]
      }
    ]
  }
}

MCP servers (8)

serversourceest. tokens
@anthropic/mcp-jira · "jira"
env: JIRA_API_TOKEN, JIRA_EMAIL, JIRA_HOST
npm 2.5k
@anthropic/mcp-github · "github"
env: GITHUB_TOKEN
npm 2.5k
Linear
env: LINEAR_API_KEY
npm 5.5k
Sentry
env: SENTRY_AUTH_TOKEN, SENTRY_ORG
npm 4.5k
@anthropic/mcp-postgres · "postgres"
env: DATABASE_URL
npm 2.5k
@anthropic/mcp-slack · "slack"
env: SLACK_BOT_TOKEN, SLACK_TEAM_ID
npm 2.5k
Notion
env: NOTION_API_KEY
npm 6.0k
@anthropic/mcp-memory · "memory" npm 2.5k

Skills (6)

Subagents (2)

code-reviewer
model: opus
MUST BE USED PROACTIVELY after writing or modifying any code. Reviews against project standards, TypeScript strict mode, and coding conventions. Checks for anti-patterns, security issues, and performa
github-workflow
model: sonnet
Git workflow agent for commits, branches, and PRs. Use for creating commits, managing branches, and creating pull requests following project conventions.

Hooks (6)

eventmatcherruns
UserPromptSubmit*"$CLAUDE_PROJECT_DIR"/.claude/hooks/skill-eval.sh
PreToolUseEdit|MultiEdit|Write# Prevent editing on main branch [ "$(git branch --show-current)" != "main" ] || { echo '{"block": true, "message": "Cannot edit files on main branch. Create a feature branch first."}' >&2; exit 2; }
PostToolUseEdit|MultiEdit|Write# Auto-format JS/TS files with Prettier (or Biome) if [[ "$CLAUDE_TOOL_INPUT_FILE_PATH" =~ \.(js|jsx|ts|tsx)$ ]]; then file_path="${CLAUDE_TOOL_INPUT_FILE_PATH}" # Use prettier (swap for biome if preferred) npx prettier --write "$file
PostToolUseEdit|MultiEdit|Write# Auto-install dependencies when package.json changes if [[ "$CLAUDE_TOOL_INPUT_FILE_PATH" =~ package\.json$ ]]; then echo '{"feedback": "Installing dependencies..."}' >&2 npm install >/dev/null 2>&1 && echo '{"feedback": "Dependencies
PostToolUseEdit|MultiEdit|Write# Auto-run tests when test files change if [[ "$CLAUDE_TOOL_INPUT_FILE_PATH" =~ \.test\.(js|jsx|ts|tsx)$ ]]; then echo '{"feedback": "Running tests..."}' >&2 npm test -- --findRelatedTests "${CLAUDE_TOOL_INPUT_FILE_PATH}" --passWithNoTe
PostToolUseEdit|MultiEdit|Write# Type-check TypeScript files if [[ "$CLAUDE_TOOL_INPUT_FILE_PATH" =~ \.(ts|tsx)$ ]]; then echo '{"feedback": "Checking TypeScript types..."}' >&2 output=$(npx tsc --noEmit 2>&1) exit_code=$? if [ $exit_code -eq 0 ]; then echo '

Slash commands (6)

/code-quality/docs-sync/onboard/pr-review/pr-summary/ticket

Similar rigs

copied ✓