Claude Skills Guide

Claude Code for GitHub Actions Self-Hosted Runner Guide

GitHub Actions provides powerful automation capabilities, but when you need more control over your build environment, persistent caching, or specialized tooling, self-hosted runners become essential. This guide shows you how to integrate Claude Code into your self-hosted runner infrastructure to enable AI-assisted development workflows directly within your CI/CD pipelines.

Why Use Claude Code on Self-Hosted Runners?

Self-hosted runners offer several advantages over GitHub-hosted runners:

When you add Claude Code to this mix, you gain AI-powered code review, automated refactoring, test generation, and documentation creation—all running within your controlled environment.

Setting Up Claude Code on Your Self-Hosted Runner

Prerequisites

Before installing Claude Code, ensure your runner meets these requirements:

Installation Steps

First, SSH into your self-hosted runner machine and run the following commands:

# Download and install Claude Code
curl -fsSL https://github.com/anthropics/claude-code/releases/latest/download/claude-code-linux-x64.tar.gz -o claude.tar.gz
tar -xzf claude.tar.gz
sudo mv claude-code /usr/local/bin/

# Verify installation
claude --version

Next, configure your Anthropic API key for the runner:

export ANTHROPIC_API_KEY="your-api-key-here"

Add this to the runner service’s environment file for persistence across sessions.

Configuring GitHub Actions to Use Claude Code

Now you need to create workflows that invoke Claude Code on your self-hosted runners. The key is targeting the self-hosted label in your workflow.

Basic Workflow Example

Create a new workflow file in your repository:

name: AI Code Review with Claude

on:
  pull_request:
    branches: [main, develop]

jobs:
  claude-review:
    runs-on: self-hosted
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Run Claude Code review
        run: |
          claude --print "Review the changes in this repository as a code review assistant. Focus on: 1. Potential bugs or logic errors, 2. Security vulnerabilities, 3. Code style inconsistencies, 4. Missing error handling. Provide a detailed report in markdown format."
        env:
          ANTHROPIC_API_KEY: ${{ secrets.CLAUDE_API_KEY }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

This workflow triggers on pull requests and uses Claude Code to review your code changes.

Advanced: Using Claude Code Skills in CI/CD

You can use Claude Code skills for more specialized tasks. Here’s how to use custom skills in your workflows:

name: Claude Skill Execution

on:
  workflow_dispatch:
    inputs:
      skill_name:
        description: 'Skill to execute'
        required: true
        default: 'code-analyzer'
      target_path:
        description: 'Path to analyze'
        required: true
        default: '.'

jobs:
  execute-skill:
    runs-on: self-hosted
    steps:
      - uses: actions/checkout@v4

      - name: Copy skill file
        run: cp ./skills/${{ github.event.inputs.skill_name }}.md ./.claude/

      - name: Execute skill
        run: claude --print "Using the /${{ github.event.inputs.skill_name }} skill, analyze ${{ github.event.inputs.target_path }}"

Best Practices for Running Claude Code on Self-Hosted Runners

1. Manage API Costs Effectively

Claude Code makes API calls that incur costs. Implement these strategies to manage expenses:

jobs:
  claude-task:
    runs-on: self-hosted
    steps:
      - name: Cache Claude responses
        uses: actions/cache@v4
        with:
          path: .claude-cache
          key: claude-cache-${{ github.sha }}
          restore-keys: |
            claude-cache-

      - name: Run with budget limits
        run: |
          claude --max-turns 10 --print "${{ github.event.inputs.prompt }}"

2. Secure Your Credentials

Never expose sensitive data in workflow files. Use GitHub secrets:

steps:
  - name: Claude Code with secure context
    run: |
      claude --print "You are working with sensitive data. Do not log any secrets. Task: ${{ github.event.inputs.task }}"
    env:
      ANTHROPIC_API_KEY: ${{ secrets.CLAUDE_API_KEY }}
      DATABASE_URL: ${{ secrets.DATABASE_URL }}

3. Handle Rate Limits

GitHub API rate limits apply to Claude Code when it interacts with GitHub. Use these mitigation strategies:

steps:
  - name: Wait for rate limit reset if needed
    if: github.event_name == 'schedule'
    run: |
      # Check remaining API calls
      REMAINING=$(gh api rate_limit --jq '.resources.core.remaining')
      if [ "$REMAINING" -lt 50 ]; then
        echo "Rate limit low, waiting..."
        sleep 3600
      fi

4. Set Up Proper Logging

Maintain audit trails for AI-assisted operations:

steps:
  - name: Capture Claude output
    run: |
      claude --print "${{ github.event.inputs.prompt }}" 2>&1 | \
        tee claude-output.log
    
  - name: Upload logs
    uses: actions/upload-artifact@v4
    with:
      name: claude-logs
      path: claude-output.log

Troubleshooting Common Issues

Claude Code Not Found

If Claude Code isn’t recognized, check your PATH:

echo $PATH
which claude

Add to PATH if needed:

export PATH="$PATH:/usr/local/bin"

Authentication Failures

If your API key is invalid or expired, update it:

export ANTHROPIC_API_KEY="new-api-key-here"

Memory Issues

If Claude Code crashes due to memory constraints, add a swap file:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Conclusion

Integrating Claude Code with GitHub Actions self-hosted runners unlocks powerful AI-assisted development workflows while maintaining control over your infrastructure. Start with the basic workflow examples above, then customize them to match your team’s needs. Remember to monitor API usage, secure your credentials, and implement proper logging for production deployments.

With proper configuration, Claude Code becomes a valuable team member—handling code reviews, generating documentation, and assisting with complex refactoring tasks—all executing securely within your own infrastructure.

Built by theluckystrike — More at zovo.one