The neckbeard handles your infra so you don't have to.
A plugin for your coding agent that turns an app into reviewable cloud infrastructure and a monthly cost estimate. AWS, GCP, or Azure; GitHub Actions or GitLab CI; serverless containers or Kubernetes — rendered from a bundled catalog of tested OpenTofu modules. The agent reads your app and explains; the planning, rendering, and validation are deterministic code. The agent never invents infrastructure.
Inspired by ponytail.
Claude Code, as two separate prompts:
/plugin marketplace add bealesh/neckbeard
/plugin install neckbeard@neckbeard
Then, in your app's repo: /neckbeard:analyze. Your first /neckbeard: command installs the
small neckbeard CLI the plugin drives (a sha256-verified release binary, or
go install when Go is present) — nothing else to set up. Cost estimates and
static validation use tools you may already have (Infracost, OpenTofu, Checkov);
/neckbeard:doctor tells you which are missing and what each unlocks.
Codex, Cursor, or any SKILL.md-speaking agent: see INSTALL.md.
you: /neckbeard:analyze
agent: reads your repo → evidence-backed profile → asks what code can't tell it
you: answer the questions, pick a cloud and a tier
you: /neckbeard:estimate
agent: plans against the catalog → "$77/mo expected — here's the table, and
here's what Infracost can't price"
you: /neckbeard:sync
agent: scaffold → validate → "V0 PASSED; V1/V2 NOT EXERCISED; next step is
docs/bootstrap.md"
you: review the files like any PR; follow the runbook per environment
| Command | What it does |
|---|---|
/neckbeard:analyze |
Reads the repo into an evidence-backed app-profile.yaml (facts with file:line, inferences with confidence, loud assumptions), asks the open questions, proposes neckbeard.yaml. |
/neckbeard:estimate [comparison] |
Plans against the module catalog and shows the monthly cost table — low/expected/high per environment, usage assumptions, and every unpriced resource — before anything exists. serverless vs kubernetes or solo vs smallteam runs both. |
/neckbeard:sync |
The loop: plan → estimate → scaffold → validate, under the ownership contract (your edits are never silently overwritten). Ends with PASSED / FAILED / NOT EXERCISED. |
/neckbeard:doctor [plan|estimate|validate|all] |
Installs the CLI if missing; reports which prerequisites are present and what each unlocks. |
/neckbeard:help |
The quick reference. |
Coding agents are good at app code and bad at freehanding infrastructure. The failure mode is always the same: plausible-looking HCL that is subtly broken, insecure by default, and unestimable. neckbeard inverts the roles:
- Humans maintain the golden path — versioned OpenTofu modules, pipeline templates, GitOps layouts, per cloud, tested in CI on every change.
- The agent analyzes, parameterizes, and explains. It reads your app, figures out what it needs, and maps that onto catalog inputs — with evidence for every claim it makes.
- Everything in between is deterministic. Same inputs, same bytes: the
planner emits a hash-verified
blueprint.yamllockfile, the renderer is a pure function of it, and regeneration never silently overwrites your edits.
Needs the catalog can't express become named findings ("redis is outside the workload contract"), not force-fits onto the nearest module.
The same reference app (HTTP service + worker + cron + Postgres), smallest tier, all three environments, live prices via Infracost:
| Cloud Run | Container Apps | ECS Fargate | EKS | GKE (regional) | AKS | |
|---|---|---|---|---|---|---|
| monthly | $77 | ~$98* | $250 | $396 | $754 | ~$801* |
* Infracost can't price Container Apps compute yet — and instead of letting a low number lie, the report names every unpriced resource. That's the house style: baseline-while-idle costs, explicit usage assumptions you can edit, low/expected/high scenarios, and a provenance footer. It also prices your decisions: this table is why neckbeard tells solo developers "you don't need Kubernetes yet" — with receipts.
Infrastructure tools love implying more than they've proven. neckbeard reports in three verdicts, and the third one is the point:
V0 PASSED tofu validate [prd]
V0 PASSED checkov policy [prd] ← every skip carries a written reason
V0 PASSED kubeconform (clusters/)
V1 NOT EXERCISED authenticated plan requires cloud credentials
V2 NOT EXERCISED deployment verification requires cloud credentials
- Static validation never claims deployability. V0/V1/V2 are distinct levels, each reported as exercised or not.
- Every Checkov skip in the generated
.checkov.yamlstates its reason. A skip without a reason is a lie about your security posture. - When live runs break, the failures become public findings and then catalog fixes. Our first real deployment produced ten; five became fixes the same day.
- Degraded paths say why (Azure + GitLab merge-request plans can't federate — the pipeline says so instead of failing mysteriously).
- Three isolated environments (dev/stg/prd) with independent state, sized by tier presets over explicit dimensions: traffic, availability, RPO/RTO, operating capacity. Every value is visible and overridable within the catalog's tested envelope; values outside it are marked, not blessed.
- Two runtimes per cloud: serverless containers (Cloud Run / ECS Fargate / Container Apps) or Kubernetes (EKS / GKE / AKS) with Flux manifests.
- CI/CD for GitHub Actions or GitLab CI from one model: test → build →
scan (trivy blocks HIGH/CRITICAL) → push; infra plans on PRs with a
read-only identity, applies on main with a write identity, production gated
by environment protection. Zero static cloud keys — OIDC federation
everywhere, enforced by a test that fails if a rendered pipeline ever
mentions
AWS_SECRET_ACCESS_KEY. - Security posture as explicit controls: private-by-default networks, secret managers holding names the operator fills (values never touch neckbeard, its state, or your git history), scoped CI identities, managed WAF rules where the tier enables them.
- A bootstrap runbook (
docs/bootstrap.md) that walks a human with elevated credentials through state backend → OIDC trust → CI identities, per environment. Everything aftervalidateis deliberately human-in-the-loop.
The supported workload is one image, up to 10 HTTP/worker/cron processes,
Postgres, object storage, secrets, deployed into existing accounts, projects,
or subscriptions. Anything else is an explicit unsupported finding.
What is proven, and how:
| Claim | Evidence |
|---|---|
| analyze → plan → estimate → scaffold → validate on all 12 cloud × VCS × runtime paths | Static matrix runs in CI on every PR; three unrelated fixture apps onboard end to end |
| Live deploy → update → rollback, serverless | Passed on AWS/GitHub and Azure/GitHub with real database checks (evidence) |
| Live deploy on GCP, GitLab lanes, Kubernetes, promotion, recovery drills | Not yet. Implemented, NOT EXERCISED |
The plugin's product today is the onboarding half: reviewable infrastructure,
pipelines, a cost estimate, and a bootstrap runbook you can hand to a human.
The deployment lifecycle (neckbeard release …, documented in the skill) is
experimental and tracked gate by gate in the launch plan.
Do not treat static validation as deployment proof. Landing zones (org
structure, guardrails — Path F in DESIGN.md) are designed, not built.
you / your agent deterministic core
┌──────────────────────┐ ┌───────────────────────────┐
repo ──▶│ analyze: facts w/ │ profile │ plan: catalog @ pinned │
│ evidence, questions, ├───────────▶│ versions → blueprint.yaml │
│ judgment, answers │ config │ (hash-verified lockfile) │
└──────────────────────┘ └─────────┬─────────────────┘
┌──────────────┼──────────────┐
▼ ▼ ▼
estimate scaffold validate
Infracost, ownership V0 static,
scenarios, contract: V1 plan,
unpriced never silently V2 deploy —
named overwrite each reported
The repository root is the plugin: skills/neckbeard/SKILL.md
is the agent's operating manual, commands/ are the slash
commands, and the Go CLI under cmd/ with the module catalog
under catalog/ is the deterministic half. The CLI also drives
everything without an agent:
go install github.com/bealesh/neckbeard/cmd/neckbeard@latest
neckbeard analyze && $EDITOR app-profile.yaml neckbeard.yaml
neckbeard plan && neckbeard estimate && neckbeard scaffold && neckbeard validateDeep dives: DESIGN.md (the full design, kept honest since day one) · docs/findings/ (what reality taught us) · CONTRIBUTING.md.
Apache-2.0 — see LICENSE.
