ShadowPlane is an autonomous CI/CD gatekeeper designed for Agentic DevOps.
As AI coding agents gain the ability to generate and deploy infrastructure (Terraform, AWS CDK, etc.), the risk of an AI hallucinating an invalid configuration and bringing down production skyrockets.
ShadowPlane solves this by providing a deterministic, secure sandbox that intercepts these deployments. Before any infrastructure code reaches your real cloud environment, ShadowPlane provisions it inside an isolated LocalStack container. If the deployment fails (due to a bad bucket name, malformed IAM policy, etc.), ShadowPlane's AI self-healing engine parses the Terraform logs, patches the .tf files, and tries again.
It strictly enforces system exit codes (0 for Pass, 1 for Fail), ensuring your CI/CD runner knows exactly when it is safe to proceed to production.
- Intercept & Sandbox: The CLI targets a directory and triggers an ephemeral LocalStack sandbox using Docker.
- Execute: It runs
terraform initandterraform apply. - Analyze & Self-Heal: If it encounters an AWS API error, it reads the sandbox stderr, matches known fix patterns, and rewrites the Terraform code autonomously.
- Gatekeep:
sys.exit(0): Blast radius contained. Infrastructure verified.sys.exit(1): Maximum retries exhausted. The CI pipeline is hard-blocked.
ShadowPlane is completely headless and Dockerized. You can drop it directly into your .github/workflows/deploy.yml file to gatekeep your Terraform deployments.
name: Deploy Infrastructure
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
verify:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: ShadowPlane Gatekeeper
uses: docker://goldstealth/shadowplane:0.1.0
with:
args: --target-dir ./infra --max-retries 5
env:
# Optional: LocalStack Pro token for advanced AWS features
LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }}To run the gatekeeper locally on your workstation to test infrastructure patches, just run the Docker image. You must bind-mount the Docker socket so ShadowPlane can spin up its LocalStack sandbox.
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(pwd)/infra:/app/infra \
goldstealth/shadowplane:0.1.0 \
--target-dir ./infraShadowPlane strictly follows Semantic Versioning (SemVer).
The current version is defined in the VERSION file. When referencing ShadowPlane in your CI/CD pipelines, always pin your workflows to a specific major/minor tag (e.g., docker://goldstealth/shadowplane:0.1.0) to prevent breaking changes from interrupting your deployments.
Use the included Makefile for local development:
make build: Builds the Docker image based on theVERSIONfile.make run: Runs the container locally against./demo-infra.make test: Tests the Python CLI syntax.