Creates GitHub Actions composite actions. Use when building reusable action.yml files, integrating github-script, or setting up action inputs/outputs.
View on GitHubskills/github-actions-composite/SKILL.md
February 1, 2026
Select agents to install to:
npx add-skill https://github.com/lbussell/agent-skills/blob/main/skills/github-actions-composite/SKILL.md -a claude-code --skill github-actions-compositeInstallation paths:
.claude/skills/github-actions-composite/# GitHub Actions Composite Actions
Composite actions bundle multiple workflow steps into a reusable `action.yml` file. Use composite actions when orchestrating shell commands, calling other actions, or adding JavaScript via `github-script`. This guide covers composite actions only (not JavaScript or Docker actions).
## action.yml Structure
| Field | Required | Description |
|-------|----------|-------------|
| `name` | Yes | Display name for the action |
| `description` | Yes | Short description of what the action does |
| `inputs.<id>.description` | Yes | Description of the input |
| `inputs.<id>.required` | No | Whether input is required (default: false) |
| `inputs.<id>.default` | No | Default value when not provided |
| `outputs.<id>.description` | Yes | Description of the output |
| `outputs.<id>.value` | Yes | Value expression (usually from step output) |
| `runs.using` | Yes | Must be `"composite"` |
| `runs.steps` | Yes | Array of steps to execute |
## Minimal Example
```yaml
name: 'Greet User'
description: 'Greets a user by name'
inputs:
name:
description: 'Name to greet'
required: true
outputs:
greeting:
description: 'The greeting message'
value: ${{ steps.greet.outputs.greeting }}
runs:
using: "composite"
steps:
- id: greet
shell: bash
run: |
MESSAGE="Hello, ${{ inputs.name }}!"
echo "greeting=$MESSAGE" >> "$GITHUB_OUTPUT"
```
## Step Properties
| Property | Required | Description |
|----------|----------|-------------|
| `id` | No* | Step identifier. Required if other steps reference this steps outputs. |
| `name` | No | Display name in workflow logs |
| `run` | No** | Shell command to execute |
| `shell` | Yes*** | Required when using `run` (`bash`, `pwsh`, `python`, etc.) |
| `uses` | No** | Call another action. `run` and `uses` are mutually exclusive. |
| `with` | No | Inputs to pass when using `uses` |
| `env` | No | Environment variables for this step |
| `if` | No | Conditional expre