This repository is an automated mirror of the base-action directory from anthropics/claude-code-action.
Do not submit PRs or issues to this repository. Instead, please contribute to the main repository:
This GitHub Action allows you to run Claude Code within your GitHub Actions workflows. You can use this to build any custom workflow on top of Claude Code.
For simply tagging @claude in issues and PRs out of the box, check out the Claude Code action and GitHub app.
Add the following to your workflow file:
# Using a direct prompt
- name: Run Claude Code with direct prompt
uses: anthropics/claude-code-base-action@beta
with:
prompt: "Your prompt here"
allowed_tools: "Bash(git:*),View,GlobTool,GrepTool,BatchTool"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
# Or using a prompt from a file
- name: Run Claude Code with prompt file
uses: anthropics/claude-code-base-action@beta
with:
prompt_file: "/path/to/prompt.txt"
allowed_tools: "Bash(git:*),View,GlobTool,GrepTool,BatchTool"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
# Or limiting the conversation turns
- name: Run Claude Code with limited turns
uses: anthropics/claude-code-base-action@beta
with:
prompt: "Your prompt here"
allowed_tools: "Bash(git:*),View,GlobTool,GrepTool,BatchTool"
max_turns: "5" # Limit conversation to 5 turns
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
# Using custom system prompts
- name: Run Claude Code with custom system prompt
uses: anthropics/claude-code-base-action@beta
with:
prompt: "Build a REST API"
system_prompt: "You are a senior backend engineer. Focus on security, performance, and maintainability."
allowed_tools: "Bash(git:*),View,GlobTool,GrepTool,BatchTool"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
# Or appending to the default system prompt
- name: Run Claude Code with appended system prompt
uses: anthropics/claude-code-base-action@beta
with:
prompt: "Create a database schema"
append_system_prompt: "After writing code, be sure to code review yourself."
allowed_tools: "Bash(git:*),View,GlobTool,GrepTool,BatchTool"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
# Using custom environment variables
- name: Run Claude Code with custom environment variables
uses: anthropics/claude-code-base-action@beta
with:
prompt: "Deploy to staging environment"
claude_env: |
ENVIRONMENT: staging
API_URL: https://api-staging.example.com
DEBUG: true
allowed_tools: "Bash(git:*),View,GlobTool,GrepTool,BatchTool"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
# Using fallback model for handling API errors
- name: Run Claude Code with fallback model
uses: anthropics/claude-code-base-action@beta
with:
prompt: "Review and fix TypeScript errors"
model: "claude-opus-4-1-20250805"
fallback_model: "claude-sonnet-4-20250514"
allowed_tools: "Bash(git:*),View,GlobTool,GrepTool,BatchTool"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
# Using OAuth token instead of API key
- name: Run Claude Code with OAuth token
uses: anthropics/claude-code-base-action@beta
with:
prompt: "Update dependencies"
allowed_tools: "Bash(git:*),View,GlobTool,GrepTool,BatchTool"
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
| Input | Description | Required | Default |
|---|---|---|---|
prompt |
The prompt to send to Claude Code | No* | '' |
prompt_file |
Path to a file containing the prompt to send to Claude Code | No* | '' |
allowed_tools |
Comma-separated list of allowed tools for Claude Code to use | No | '' |
disallowed_tools |
Comma-separated list of disallowed tools that Claude Code cannot use | No | '' |
max_turns |
Maximum number of conversation turns (default: no limit) | No | '' |
mcp_config |
Path to the MCP configuration JSON file, or MCP configuration JSON string | No | '' |
settings |
Path to Claude Code settings JSON file, or settings JSON string | No | '' |
system_prompt |
Override system prompt | No | '' |
append_system_prompt |
Append to system prompt | No | '' |
claude_env |
Custom environment variables to pass to Claude Code execution (YAML multiline format) | No | '' |
model |
Model to use (provider-specific format required for Bedrock/Vertex) | No | 'claude-4-0-sonnet-20250219' |
anthropic_model |
DEPRECATED: Use 'model' instead | No | 'claude-4-0-sonnet-20250219' |
fallback_model |
Enable automatic fallback to specified model when default model is overloaded | No | '' |
timeout_minutes |
Timeout in minutes for Claude Code execution | No | '10' |
anthropic_api_key |
Anthropic API key (required for direct Anthropic API) | No | '' |
claude_code_oauth_token |
Claude Code OAuth token (alternative to anthropic_api_key) | No | '' |
use_bedrock |
Use Amazon Bedrock with OIDC authentication instead of direct Anthropic API | No | 'false' |
use_vertex |
Use Google Vertex AI with OIDC authentication instead of direct Anthropic API | No | 'false' |
use_node_cache |
Whether to use Node.js dependency caching (set to true only for Node.js projects with lock files) | No | 'false' |
*Either prompt or prompt_file must be provided, but not both.
| Output | Description |
|---|---|
conclusion |
Execution status of Claude Code ('success' or 'failure') |
execution_file |
Path to the JSON file containing Claude Code execution log |
The following environment variables can be used to configure the action:
| Variable | Description | Default |
|---|---|---|
NODE_VERSION |
Node.js version to use (e.g., '18.x', '20.x', '22.x') | '18.x' |
Example usage:
- name: Run Claude Code with Node.js 20
uses: anthropics/claude-code-base-action@beta
env:
NODE_VERSION: "20.x"
with:
prompt: "Your prompt here"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
You can pass custom environment variables to Claude Code execution using the claude_env input. This allows Claude to access environment-specific configuration during its execution.
The claude_env input accepts YAML multiline format with key-value pairs:
- name: Deploy with custom environment
uses: anthropics/claude-code-base-action@beta
with:
prompt: "Deploy the application to the staging environment"
claude_env: |
ENVIRONMENT: staging
API_BASE_URL: https://api-staging.example.com
DATABASE_URL: ${{ secrets.STAGING_DB_URL }}
DEBUG: true
LOG_LEVEL: debug
allowed_tools: "Bash(git:*),View,GlobTool,GrepTool,BatchTool"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
KEY: value)# are ignored${{ secrets.SECRET_NAME }}# Development configuration
claude_env: |
NODE_ENV: development
API_URL: http://localhost:3000
DEBUG: true
# Production deployment
claude_env: |
NODE_ENV: production
API_URL: https://api.example.com
DATABASE_URL: ${{ secrets.PROD_DB_URL }}
REDIS_URL: ${{ secrets.REDIS_URL }}
# Feature flags and configuration
claude_env: |
FEATURE_NEW_UI: enabled
MAX_RETRIES: 3
TIMEOUT_MS: 5000
You can provide Claude Code settings configuration in two ways:
Provide a path to a JSON file containing Claude Code settings:
- name: Run Claude Code with settings file
uses: anthropics/claude-code-base-action@beta
with:
prompt: "Your prompt here"
settings: "path/to/settings.json"
allowed_tools: "Bash(git:*),View,GlobTool,GrepTool,BatchTool"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
Provide the settings configuration directly as a JSON string:
- name: Run Claude Code with inline settings
uses: anthropics/claude-code-base-action@beta
with:
prompt: "Your prompt here"
settings: |
{
"model": "claude-opus-4-1-20250805",
"env": {
"DEBUG": "true",
"API_URL": "https://api.example.com"
},
"permissions": {
"allow": ["Bash", "Read"],
"deny": ["WebFetch"]
},
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "echo Running bash command..."
}]
}]
}
}
allowed_tools: "Bash(git:*),View,GlobTool,GrepTool,BatchTool"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
The settings file supports all Claude Code settings options including:
model: Override the default modelenv: Environment variables for the sessionpermissions: Tool usage permissionshooks: Pre/post tool execution hooksincludeCoAuthoredBy: Include co-authored-by in git commitsNote: The enableAllProjectMcpServers setting is always set to true by this action to ensure MCP servers work correctly.
You can provide MCP configuration in two ways:
Provide a path to a JSON file containing MCP configuration:
- name: Run Claude Code with MCP config file
uses: anthropics/claude-code-base-action@beta
with:
prompt: "Your prompt here"
mcp_config: "path/to/mcp-config.json"
allowed_tools: "Bash(git:*),View,GlobTool,GrepTool,BatchTool"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
Provide the MCP configuration directly as a JSON string:
- name: Run Claude Code with inline MCP config
uses: anthropics/claude-code-base-action@beta
with:
prompt: "Your prompt here"
mcp_config: |
{
"mcpServers": {
"server-name": {
"command": "node",
"args": ["./server.js"],
"env": {
"API_KEY": "your-api-key"
}
}
}
}
allowed_tools: "Bash(git:*),View,GlobTool,GrepTool,BatchTool"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
The MCP config file should follow this format:
{
"mcpServers": {
"server-name": {
"command": "node",
"args": ["./server.js"],
"env": {
"API_KEY": "your-api-key"
}
}
}
}
You can combine MCP config with other inputs like allowed tools:
# Using multiple inputs together
- name: Run Claude Code with MCP and custom tools
uses: anthropics/claude-code-base-action@beta
with:
prompt: "Access the custom MCP server and use its tools"
mcp_config: "mcp-config.json"
allowed_tools: "Bash(git:*),View,mcp__server-name__custom_tool"
timeout_minutes: "15"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
```yaml name: Claude Code Review
on: pull_request: types: [opened, synchronize]
jobs: code-review: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0
- name: Run Code Review
$ claude mcp add claude-code-base-action \
-- python -m otcore.mcp_server <graph>