Gait intercepts git push, runs your pipeline locally, and only
forwards to the remote when all checks pass. Catch failures in seconds, not minutes.
Every push blocked by Gait is 3–10 minutes saved waiting for cloud CI to fail.
Drop-in support for your existing CI config. No rewrites required.
Reads your existing GitHub Actions, GitLab CI, Buildkite, Jenkins, or native Gait configs. Zero migration required.
Topological scheduler runs independent jobs concurrently while respecting dependency chains. Fast by default.
Cloud-only features like marketplace actions are skipped and reported clearly. You always know exactly what ran and what didn't.
Only runs jobs affected by your changes. Docs-only commits skip test suites automatically. Smart path-matching with glob patterns.
Set a default_image and every job runs in a Linux container via Lima, just like cloud CI. Override per job or opt out with execution: host.
Automatic cache detection for 12+ package managers — npm, yarn, pnpm, Go, Cargo, pip, Bundler, Composer, and more. SHA-256 validated.
Native macOS app with multi-repo monitoring, job logs, and deploy controls. Or run gait watch for a live terminal dashboard.
Load secrets from .gait-secrets with automatic log masking. Collect build artifacts via glob patterns, persisted per run.
Fire HTTP webhooks or shell scripts on pipeline completion. Get notified of pass/fail with full run context including job results and duration.
Define matrix strategies in your config and Gait expands them into parallel job combinations — just like cloud CI matrix builds.
Spin up databases, caches, and other services alongside your pipeline. Automatic health checks ensure services are ready before jobs run.
Automatically detects and skips dangerous jobs like deploys, publishes, and notifications. Configurable skip/include overrides.
Monitor pipelines across multiple repos, inspect jobs, view artifacts, and trigger deploys from a native macOS app. Or use gait watch for a live terminal TUI.
Gait Desktop App — macOS (midnight theme)
Terminal TUI — gait watch
Use whichever fits your workflow. Both read from the same local SQLite database with per-run history and retention.
gait watch for a live dashboard with hook and container status. Press enter for run details, r to retry failed runsA lightweight pre-push hook and local daemon. Nothing leaves your machine until checks pass.
git pushGait's pre-push hook intercepts the push before anything reaches the remote.
The daemon loads your CI config, builds a dependency graph, and runs jobs in parallel inside Linux containers — the same environment as cloud CI. Results stream back in real-time.
If all checks pass, the push continues to the remote. If any fail, the push is blocked and you get instant feedback with the exact error.
git pushgait hookgait daemonremoteGait reads your existing CI configs directly. No translation layer, no vendor lock-in.
Gait runs your shell commands, env vars, and dependency chains locally — the stuff that catches most failures.
Cloud-only features like marketplace actions and conditional expressions are skipped and clearly reported per run.
Choose the CLI for your terminal workflow, or the desktop app for a full GUI.
brew install nstalgic/tap/gait
cd your-project && gait init
git push origin main
Native macOS app with multi-repo monitoring, pipeline visualization, deploy controls, and artifact browsing. Includes the CLI automatically.
Both include a 14-day free trial with full feature access. No credit card required.
Add a deploy section to gait.yml and Gait will deploy locally after a successful push.
Define a default_image and every job runs in a Linux container via Lima — just like cloud CI. Override per job with docker_image, or opt out with execution: host for macOS-native scripts.
When your pipeline passes, trigger deploys to local or remote targets from the desktop app. Images are pre-pulled and cached automatically.
script Shell commandcopy Local file copyrsync SSH syncdocker-compose Compose updocker-export Build + savedocker-remote SCP + SSH loaddocker-push Registry pushkubernetes kubectl / HelmGait will require a license key. Pricing details coming soon.
Everything you need to know about Gait.
No. Gait is a complement to cloud CI, not a replacement. It catches the most common failures locally so you waste less time waiting for remote builds. Cloud CI still runs the full pipeline with everything Gait can't replicate locally.
Gait supports GitHub Actions, GitLab CI, Buildkite, Jenkins, and its own native gait.yml format. It reads your existing config files directly — no translation or migration needed.
Cloud-only features like marketplace actions (uses: steps in GitHub Actions), GitHub Environments, and conditional expressions are skipped. Shell commands, environment variables, dependencies, matrix builds, and services all run locally. After each run, Gait reports exactly what was skipped so there are no surprises.
Yes. Set the environment variable before your push: GAIT_SKIP=1 git push. This bypasses the local pipeline and pushes directly to the remote.
Set default_image in your gait.yml and every job runs inside a Linux container via Lima (Apple's Virtualization.framework), matching cloud CI. Jobs can specify their own image to override the default, or use execution: host to run natively. Images are pre-pulled before the pipeline starts, and cached automatically for subsequent runs. Cloud-only features like marketplace actions are skipped and reported after each run.
Gait checks which files changed in your commit and skips jobs that aren't affected. For example, if you only changed markdown files, test suites are automatically skipped. Jobs can declare paths patterns to control when they run. This makes repeat pushes even faster.
Gait supports 8 deploy target types: shell scripts, local copy, rsync, docker-compose, docker-export, docker-push, docker-remote, and Kubernetes (kubectl/helm). Deployments can be triggered manually from the desktop app or set to auto-deploy when a pipeline passes.
Yes. Gait automatically detects lock files for 12+ package managers (npm, yarn, pnpm, Go, Cargo, pip, Bundler, Composer, and more) and caches resolved dependencies. Caches are validated with SHA-256 hashes and cleaned up based on configurable retention.