Skip to content
TTariq AlwalidiAI Developer Tools Directory
a

act

Active and stableRuns locally ✓No paid API

Run GitHub Actions jobs on your computer before pushing changes, and inspect failures locally with act and Docker.

$brew install act
💡

Ideal use for this tool

Best for a developer or small team that repeatedly edits GitHub Actions workflows and wants to test a job before pushing. It provides a local run log, while a final GitHub check remains necessary. It is not suitable when exact hosted-runner parity is required.

Details and illustrated features

When a GitHub Actions workflow fails after every push, fixing one step can turn into repeated commits and hosted runs. act runs the workflows in .github/workflows on your computer so you can inspect a test job before pushing. Its practical value is a shorter local feedback loop, while GitHub's runner remains the final check.

🧭 What is act?

act is an open-source command-line tool by nektos. It reads GitHub Actions files, selects the jobs matching an event, then uses the Docker API to prepare images and run containers. You keep your existing YAML workflow. The latest release shown during verification was v0.2.89.

Workflow file feeding a local act run and a reviewed result
Workflow file feeding a local act run and a reviewed result
Original explanatory diagram, not a product screenshot.

🎯 How does it help you?

Suppose a job in checks.yml keeps failing on GitHub. Open the repository locally, adjust the workflow, and run that job with act. You can inspect its local log before pushing another commit. This can move trial runs onto your own computer. It does not remove the need for a final GitHub run or bypass an account budget limit on hosted Actions.

It suits an individual developer or small team that already uses GitHub Actions. It is a poor fit when the workflow requires unsupported GitHub features or exact parity with a hosted runner.

🌟 Key features and how to use them

1. Run an event locally

From the repository root, plain act defaults to the push event. You can specify act push or act pull_request. Start with act -l pull_request to list matching jobs before running an unfamiliar workflow. Some workflows need event details that act cannot infer; supply a JSON event file with -e in that case.

  • Value: see the jobs and their execution log before pushing.
  • Limit: event emulation is basic and may not provide every GitHub context field.

2. Select one workflow or job

Use -W to select a workflow file and -j to select a job name. For example, act -W .github/workflows/checks.yml -j test targets a single test job. Replace both names with those in your repository.

Selecting all push jobs, one workflow file, or only the test job
Selecting all push jobs, one workflow file, or only the test job
Explanatory diagram. The file and job names in the example are illustrative.

3. Supply secrets when needed

Run act -s MY_SECRET to read a secret from the environment or prompt securely if it is absent. This avoids typing the value into a shell command that may be saved in history. Secret files are supported too, but you must protect the file. GitHub supplies GITHUB_TOKEN automatically in hosted runs; locally, a token-dependent workflow may need you to supply one.

Interactive secret entry and its use during the local run
Interactive secret entry and its use during the local run
Explanatory diagram. Interactive input does not make an untrusted workflow safe.

4. Choose a runner image and understand the gap

act uses Docker images as runners. You can choose an alternative with -P, but default images may lack tools installed on hosted GitHub runners. More complete images can be very large. Review the local log and perform a final hosted check.

Docker image differences, unsupported GitHub features, and a final GitHub check
Docker image differences, unsupported GitHub features, and a final GitHub check
Explanatory diagram, not a test result from a real project.

🪜 Step-by-step example

Illustrative example; I did not run it on your project:

  1. Open a repository containing .github/workflows/checks.yml.
  2. Ensure Docker is running. On a Mac, install act with brew install act.
  3. List push jobs with act -l push.
  4. Run only the test job: act -W .github/workflows/checks.yml -j test.
  5. Read the failing step, edit the workflow or test, and repeat the same command.
  6. Push the change and review the actual GitHub Actions result before merging.

Inspect the workflow first if it contains deployment, deletion, or external service steps. A job named test is not necessarily harmless.

⚖️ Compared with manual troubleshooting

Without actWith act
Push each edit to learn whether the job changedTry the job locally before pushing
Read YAML and hosted logs onlyAlso get a local execution log
Trial runs consume hosted CI capacityLocal trials use your own computer
Hosted runner provides the final resultA final hosted check is still needed

This describes workflow differences, not a measured cost saving or full parity.

⚙️ Installation and configuration

On macOS or Linux with Homebrew: brew install act. Official release artifacts cover Apple Silicon, Intel Macs, Linux, and Windows. Normal workflow execution needs the Docker Engine API; installing the binary alone is insufficient. The documentation describes direct host execution for selected Windows or macOS jobs, but that removes container isolation and is not a universal substitute. Podman is not officially supported.

Use -P to select another runner image. Put recurring command arguments in .actrc, but keep secrets out of it. An official Darwin_arm64 release artifact exists.

🔗 Compatibility, cost, and privacy

The code is MIT licensed, and act itself does not require a paid subscription or API. Docker resources, image downloads, and services called by your workflow are separate considerations. Jobs execute on your computer, but act may pull images or actions over the network and workflow steps may contact external services. It uses GitHub Actions files but does not reproduce the hosted runner exactly.

⚠️ Limitations and permissions

The official unsupported-feature list includes ignored concurrency, job.permissions, job.environment, OpenID Connect, and job.timeout-minutes. Docker images may also lack hosted runner tools. Do not treat a successful local run as proof that deployment or permissions will behave identically on GitHub. Review third-party actions and images before allowing them to access tokens or local files. Secure secret input protects shell history, not the secret from the workflow step that uses it.

📚 Sources and verification date

Verified on 29 September 2026 against the original repository, installation guide, usage guide, runner images, unsupported functionality, and releases. The latest visible release was v0.2.89, dated 1 June 2026. GitHub displayed approximately 72.1k stars and 2.0k forks for the repository at review time; these changing popularity counts are not quality ratings. I did not install act or run the example.