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…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.