Skip to content
Back to skills

Act

ASecurity

Runs GitHub Actions workflows on your own machine in Docker containers with act, so CI can be tested without pushing. Use when a user asks to test GitHub Actions workflows locally, debug a failing CI pipeline, pass secrets or inputs to a local run, or run workflows offline.

  • 142 stars
  • 0 votes
  • 0 copies
  • 6 views
  • Added May 27, 2026
devopsgoshellbashnodedockerawsgit

Works with

  • terminal
  • cli

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 4, 2026

npx -y skills add TerminalSkills/skills --skill act --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Act?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Act
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/terminalskills-act/badge)](https://www.skillsdirectory.com/skills/terminalskills-act)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: act
description: >-
  Runs GitHub Actions workflows on your own machine in Docker containers with act, so CI can be tested without pushing. Use when a user asks to test GitHub Actions workflows locally, debug a failing CI pipeline, pass secrets or inputs to a local run, or run workflows offline.
license: Apache-2.0
compatibility: 'Docker Engine required (podman is not supported); Linux, macOS, Windows'
metadata:
  author: terminal-skills
  version: "1.2.0"
  category: development
  tags:
    - act
    - github-actions
    - ci
    - local
    - docker
  repository: https://github.com/nektos/act
---

# Act

## Overview

act reads `.github/workflows/`, pulls or builds the images the jobs need, and runs each job in a Docker container with the environment variables and filesystem layout GitHub uses. It is a fast feedback loop for workflow edits and a way to use workflows as a local task runner. Current release is v0.2.89 (June 2026). Docs: https://nektosact.com.

## Instructions

### Step 1: Install

Use a package manager: `brew install act` (macOS, Linux), `winget install nektos.act` or `choco install act-cli` (Windows), `pacman -Syu act` (Arch), `nix-shell -p act`, or the GitHub CLI extension `gh extension install https://github.com/nektos/gh-act`. Alternatively download the archive for your platform from the GitHub releases page and verify it against `checksums.txt` from the same release (`sha256sum -c`) before unpacking. Docker Engine must be running.

### Step 2: Pick runner images

The first run without configuration asks you to choose an image size and saves the choice to `~/.config/act/actrc`. Skip the prompt, which also hangs in non-interactive shells, by putting the mapping in a project `.actrc` (one flag per line):

```
-P ubuntu-latest=catthehacker/ubuntu:act-latest
--env-file .env
--action-offline-mode
```

`act-latest` is the "medium" image; it lacks many tools of the real GitHub runner. `catthehacker/ubuntu:full-latest` is closer but is about 17 GB to download (the prompt itself warns of 75 GB of free disk). On Apple Silicon add `--container-architecture linux/amd64`.

### Step 3: Run

```bash
act -l                              # list jobs and their events
act                                 # run the "on: push" workflows
act pull_request                    # run a specific event
act -j test                         # one job (its `needs` jobs run too)
act -W .github/workflows/ci.yml     # one workflow file
act workflow_dispatch --input target=production
act push --matrix node:22          # only matrix entries that include node 22
act -e event.json                   # custom event payload
```

### Step 4: Secrets, variables, local-only behavior

```bash
act --secret-file .secrets          # KEY=value lines; default file is .secrets
act -s NPM_TOKEN                    # take the value from your shell environment
act --var-file .vars                # values for ${{ vars.NAME }}
act --env-file .env                 # plain environment variables
```

act sets `ACT=true`, so a step can skip itself locally with `if: ${{ !env.ACT }}`. Job-level `if:` cannot see `env`; use an event file such as `{"act": true}` with `act -e event.json` and test `!github.event.act`.

### Step 5: Debug

```bash
act -n          # dry run: validates and prints the plan without creating containers
act --validate  # check workflow schema
act -g          # draw the job graph
act -v          # verbose logs
act -r          # keep the container after success to inspect state between runs
act --artifact-server-path .artifacts   # enable upload-artifact/download-artifact
```

## Examples

### Example 1: Reproduce a failing CI job before pushing

**User request:** "My `test` job fails on GitHub but I cannot see why. Run it locally."

```bash
printf -- '-P ubuntu-latest=catthehacker/ubuntu:act-latest\n' > .actrc
act -j test --secret-file .secrets -v
```

**Result:** act pulls the image on the first run, then streams each step as `[CI/test]  | ...`, ending with `Job failed` and the failing step's output, so the fix can be tried and rerun in seconds.

### Example 2: Run a deploy workflow with inputs and without side effects

**User request:** "Dry-run the deploy workflow for production but do not post to Slack"

Workflow step: `- if: ${{ !env.ACT }}` on the Slack notification.

```bash
printf 'AWS_REGION=eu-west-1\n' > .vars
printf 'NPM_TOKEN=npm_localdummy\n' > .secrets
act workflow_dispatch --input target=production
```

**Result:** The job log shows `target=production` and `region=eu-west-1`, the Slack step is skipped, and the run ends with `Job succeeded`.

## Guidelines

- Add `.secrets`, `.vars` and `.env` to `.gitignore`; use throwaway values locally, never production credentials.
- Not everything works: OIDC tokens, GitHub-hosted service features, `systemd`, many preinstalled tools and cross-run artifact downloads are missing or differ. A green local run is not proof for GitHub.
- Podman and other container engines are not supported; `--pull` is on by default, so images are fetched each run; add `--pull=false` or `--action-offline-mode` once images are cached.
- First pulls are large (the medium image is about 500 MB, the large one about 17 GB, the micro one under 200 MB but incompatible with many actions).
- Use `-P ubuntu-latest=-self-hosted` only when you accept jobs running directly on your host.
- Actions fetched by act may need a token to avoid GitHub rate limits; pass it with `-s GITHUB_TOKEN`.
- Delete leftover containers with `docker rm` after `-r` runs.

Files in this skill

  • SKILL.md1.4 KB
  • _scores.json1.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…