- Use path.dirname() instead of manual string slicing for executable path - Differentiate prepare vs execution errors in catch block so tracking comment accurately reflects which phase failed - Update CLAUDE.md architecture docs to reflect unified run.ts entrypoint and four-phase design
5.7 KiB
5.7 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Development Tools
- Runtime: Bun 1.2.11
- TypeScript with strict configuration
Common Development Tasks
Available npm/bun scripts from package.json:
# Test
bun test
# Formatting
bun run format # Format code with prettier
bun run format:check # Check code formatting
# Type checking
bun run typecheck # Run TypeScript type checker
Architecture Overview
This is a GitHub Action that enables Claude to interact with GitHub PRs and issues. The action runs through a unified entrypoint (src/entrypoints/run.ts) that orchestrates four internal phases within a single composite step:
Phase 1: Prepare
- Authentication Setup: Establishes GitHub token via OIDC or GitHub App
- Permission Validation: Verifies actor has write permissions
- Trigger Detection: Uses mode-specific logic to determine if Claude should respond
- Context Creation: Prepares GitHub context, initial tracking comment, and branch
Phase 2: Install
- Claude Code CLI: Installs the CLI (with retry logic), or uses a custom executable path
Phase 3: Execute
Imports base-action/ functions directly (no subprocess) to run Claude:
- Environment Setup: Validates env vars, configures Claude Code settings, installs plugins
- Prompt Preparation: Writes the context-rich prompt to a temp file
- Claude Integration: Executes via multiple providers (Anthropic API, AWS Bedrock, Google Vertex AI)
The base-action/ directory is also published separately as @anthropic-ai/claude-code-base-action for standalone use.
Phase 4: Cleanup (always runs)
- Comment Update: Updates the tracking comment with job link, branch, and status
- Step Summary: Formats Claude's output into the GitHub Actions step summary
- SSH Signing Cleanup: Removes SSH signing key (separate composite step, runs with
always()) - Token Revocation: Revokes the GitHub App installation token (separate composite step, runs with
always())
Key Architectural Components
Mode System (src/modes/)
- Tag Mode (
tag/): Responds to@claudementions and issue assignments - Agent Mode (
agent/): Direct execution when explicit prompt is provided - Extensible registry pattern in
modes/registry.ts
GitHub Integration (src/github/)
- Context Parsing (
context.ts): Unified GitHub event handling - Data Fetching (
data/fetcher.ts): Retrieves PR/issue data via GraphQL/REST - Data Formatting (
data/formatter.ts): Converts GitHub data to Claude-readable format - Branch Operations (
operations/branch.ts): Handles branch creation and cleanup - Comment Management (
operations/comments/): Creates and updates tracking comments
MCP Server Integration (src/mcp/)
- GitHub Actions Server (
github-actions-server.ts): Workflow and CI access - GitHub Comment Server (
github-comment-server.ts): Comment operations - GitHub File Operations (
github-file-ops-server.ts): File system access - Auto-installation and configuration in
install-mcp-server.ts
Authentication & Security (src/github/)
- Token Management (
token.ts): OIDC token exchange and GitHub App authentication - Permission Validation (
validation/permissions.ts): Write access verification - Actor Validation (
validation/actor.ts): Human vs bot detection
Project Structure
src/
├── entrypoints/ # Action entry points
│ ├── run.ts # Unified entrypoint (orchestrates all phases)
│ ├── update-comment-link.ts # Post-execution comment updates
│ └── format-turns.ts # Claude conversation formatting
├── github/ # GitHub integration layer
│ ├── api/ # REST/GraphQL clients
│ ├── data/ # Data fetching and formatting
│ ├── operations/ # Branch, comment, git operations
│ ├── validation/ # Permission and trigger validation
│ └── utils/ # Image downloading, sanitization
├── modes/ # Execution modes
│ ├── tag/ # @claude mention mode
│ ├── agent/ # Automation mode
│ └── registry.ts # Mode selection logic
├── mcp/ # MCP server implementations
├── prepare/ # Preparation orchestration
└── utils/ # Shared utilities
Important Implementation Notes
Authentication Flow
- Uses GitHub OIDC token exchange for secure authentication
- Supports custom GitHub Apps via
APP_IDandAPP_PRIVATE_KEY - Falls back to official Claude GitHub App if no custom app provided
MCP Server Architecture
- Each MCP server has specific GitHub API access patterns
- Servers are auto-installed in
~/.claude/mcp/github-{type}-server/ - Configuration merged with user-provided MCP config via
mcp_configinput
Mode System Design
- Modes implement
Modeinterface withshouldTrigger()andprepare()methods - Registry validates mode compatibility with GitHub event types
- Agent mode triggers when explicit prompt is provided
Comment Threading
- Single tracking comment updated throughout execution
- Progress indicated via dynamic checkboxes
- Links to job runs and created branches/PRs
- Sticky comment option for consolidated PR comments
Code Conventions
- Use Bun-specific TypeScript configuration with
moduleResolution: "bundler" - Strict TypeScript with
noUnusedLocalsandnoUnusedParametersenabled - Prefer explicit error handling with detailed error messages
- Use discriminated unions for GitHub context types
- Implement retry logic for GitHub API operations via
utils/retry.ts