Neckbeard — エージェント向けDevOps/platform/SREプラグイン
原題: Neckbeard – a DevOps/platform/SRE plugin for your agent
日本語訳
# タイトル
Neckbeard – あなたのエージェントのための DevOps/プラットフォーム/SRE プラグイン
# 本文
Neckbeardがインフラを管理するので、あなたは手間をかける必要がありません。
コーディングエージェント用のプラグインであり、アプリケーションを「レビュー可能なクラウドインフラ」と「月額コスト見積もり」へと変換します。AWS、GCP、またはAzure。GitHub Actions または GitLab CI。サーバーレスコンテナ、またはKubernetes。これらはすべて、テスト済みのOpenTofuモジュールのバンドルカタログからレンダリングされます。エージェントはアプリを読み取って説明し、プランニング、レンダリング、およびバリデーションは決定論的なコードによって行われます。エージェントがインフラを勝手に作り出すことはありません。
ponytailにインスパイアされています。
Claude Codeでの使用方法(2つの個別のプロンプトとして):
/plugin marketplace add bealesh/neckbeard
/plugin install neckbeard@neckbeard
その後、アプリのリポジトリで: /neckbeard:analyze
最初の `/neckbeard:` コマンドを実行すると、プラグインが駆動する小さな `neckbeard` CLIがインストールされます(sha256で検証済みのリリースバイナリ、またはGoがインストールされている場合は `go install`)。これ以外にセットアップは不要です。コスト見積もりと静的バリデーションには、既にお使いのツール(Infracost、OpenTofu、Checkov)を使用します。`/neckbeard:doctor` を実行すると、何が不足しているか、それぞれのツールによって何が可能になるかが表示されます。
Codex、Cursor、またはSKILL.mdを解釈できるあらゆるエージェントについては、INSTALL.mdを参照してください。
あなた: `/neckbeard:analyze`
エージェント: リポジトリを読み取る → 証拠に基づいたプロファイルを作成 → コードからは判別できない事項を質問する
あなた: 質問に答え、クラウドとティア(階層)を選択する
あなた: `/neckbeard:estimate`
エージェント: カタログに基づいてプランを作成 → 「予想月額は77ドルです。こちらが内訳の表です。また、Infracostでは価格付けできない項目は以下の通りです」
あなた: `/neckbeard:sync`
エージェント: スキャフォールディング(雛形作成) → バリデーション → 「V0合格; V1/V2は未実施; 次のステップは docs/bootstrap.md です」
あなた: 通常のPR(プルリクエスト)と同様にファイルを確認し、環境ごとのランブックに従う
コーディングエージェントはアプリのコードは得意ですが、インフラを場当たり的に作成するのは苦手です。失敗のパターンは常に同じです。もっともらしく見えるが、微妙に壊れていて、デフォルトでセキュリティが脆弱で、コスト見積もりが不可能なHCL(HashiCorp Configuration Language)です。neckbeardは役割を逆転させます。
- **人間**は「ゴールデンパス(黄金の道)」を維持します。バージョン管理されたOpenTofuモジュール、パイプラインテンプレート、GitOpsレイアウトを、クラウドごとに用意し、変更のたびにCIでテストします。
- **エージェント**は分析、パラメータ化、および説明を行います。アプリを読み取り、何が必要かを判断し、すべての主張に証拠を添えて、カタログの入力値へとマッピングします。
- **その間にあるすべて**は決定論的です。同じ入力からは同じバイトが出力されます。プランナーはハッシュ検証済みの `blueprint.yaml` ロックファイルを生成し、レンダラーはそれに基づく純粋関数として動作します。再生成によって、あなたの編集内容が黙って上書きされることはありません。
カタログでは表現できないニーズは、無理に既存のモジュールに当てはめるのではなく、名前付きの「ファインディング(指摘事項)」(例:「Redisがワークロードの契約範囲外です」)として報告されます。
同じリファレンスアプリ(HTTPサービス + ワーカー + cron + Postgres)、最小ティア、3つの環境すべて、Infracostによるリアルタイム価格:
* InfracostはまだContainer Appsのコンピューティングコストを算出できません。neckbeardは、低い数字で嘘をつく代わりに、価格付けできなかったすべてのリソースをレポートに明記します。これが当社のスタイルです。アイドル時のベースラインコスト、編集可能な明示的な使用想定、低/予想/高のシナリオ、およびプロバナンス(根拠)のフッター。また、あなたの決定に対するコストも算出します。この表があるからこそ、neckbeardは個人開発者に対して「まだKubernetesは必要ありません」と、根拠(レシート)を持って伝えることができるのです。
インフラツールは、証明できていないことまで示唆しがちです。neckbeardは3つの判定で報告しますが、3番目の判定こそが重要です。
V0 PASSED tofu validate [prd]
V0 PASSED checkov policy [prd] ← すべてのスキップには書面による理由が伴います
V0 PASSED kubeconform (clusters/)
V1 NOT EXERCISED 認証済みプランにはクラウドの認証情報が必要です
V2 NOT EXERCISED デプロイ検証にはクラウドの認証情報が必要です
- 静的バリデーションは、デプロイ可能であることを決して保証しません。V0/V1/V2は明確に異なるレベルであり、それぞれが「実施済み」か「未実施」かとして報告されます。
- 生成された `.checkov.yaml` 内のすべてのCheckovスキップには、その理由が記載されます。理由のないスキップは、セキュリティ体制に関する嘘です。
- ライブ実行が失敗した場合、その失敗は公開されたファインディングとなり、カタログの修正へとつながります。私たちの最初の実際のデプロイでは10件の指摘が出ましたが、そのうち5件はその日のうちに修正されました。
- 低下したパス(Degraded paths)については、その理由が表示されます(例:「Azure + GitLabのmerge-requestプランはフェデレーションできません」。パイプラインが謎の失敗をする代わりに、その旨を伝えます)。
- 独立したステートを持つ3つの隔離された環境(dev/stg/prd)。これらは、トラフィック、可用性、RPO/RTO、運用キャパシティといった明示的な次元に基づくティアのプリセットによってサイズが決まります。すべての値はカタログのテスト済み範囲内で可視化され、上書き可能です。範囲外の値は「承認」されるのではなく「マーク」されます。
- クラウドごとに2つのランタイムを提供:サーバーレスコンテナ(Cloud Run / ECS Fargate / Container Apps)または、Fluxマニフェストを使用したKubernetes(EKS / GKE / AKS)。
- 単一のモデルからGitHub ActionsまたはGitLab CI用のCI/CDを生成:テスト → ビルド → スキャン(trivyがHIGH/CRITICALをブロック) → プッシュ。PR上のインフラプランは読み取り専用のアイデンティティで行い、mainへの適用は書き込み権限を持つアイデンティティで行います。本番環境は環境保護機能によってゲート制御されます。静的なクラウドキーは一切使用しません。すべてにおいてOIDCフェデレーションを使用し、レンダリングされたパイプラインに `AWS_SECRET_ACCESS_KEY` が含まれていれば失敗するテストによって強制されます。
- 明示的なコントロールとしてのセキュリティ体制:デフォルトでプライベートなネットワーク、オペレーターが値を入力する名前のみを保持するシークレットマネージャー(値はneckbeard、そのステート、またはGit履歴には一切触れません)、スコープを絞ったCIアイデンティティ、ティアが有効な場合に適用されるマネージドWAFルール。
- ブートストラップ・ランブック(`docs/bootstrap.md`)により、権限を持つ人間を、環境ごとのステートバックエンド → OIDC信頼関係 → CIアイデンティティの設定へと導きます。`validate` 以降のすべては、意図的に「ヒューマン・イン・ザ・ループ(人間が介在する仕組み)」となっています。
サポートされるワークロードは、1つのイメージ、最大10のHTTP/worker/cronプロセス、Postgres、オブジェクトストレージ、シークレットであり、既存のアカウント、プロジェクト、またはサブスクリプションにデプロイされます。それ以外のものは、明示的な「サポート対象外のファインディング」となります。
**何が証明されており、どのように証明するか:**
本プラグインの現在のプロダクトは、オンボーディングの半分です。つまり、レビュー可能なインフラ、パイプライン、コスト見積もり、および人間に渡せるブートストラップ・ランブックです。デプロイメント・ライフサイクル(skillに記載されている `neckbeard release ...`)は実験段階であり、ローンチプランにおいてゲートごとに追跡されています。
静的バリデーションをデプロイの証明として扱わないでください。ランディングゾーン(組織構造、ガードレール — DESIGN.mdのPath F)は、構築するものではなく、設計するものです。
あなた / あなたのエージェント 決定論的コア
┌──────────────────────┐ ┌───────────────────────────┐
repo ──▶│ analyze: 事実と │ profile │ plan: カタログ @ 固定 │
│ 証拠、質問、 ├───────────▶│ 設定 │ バージョン → blueprint.yaml │
│ 判断、回答 │ config │ (ハッシュ検証済みロックファイル) │
└──────────────────────┘ └─────────┬─────────────────┘
┌──────────────┼──────────────┐
▼ ▼ ▼
estimate scaffold validate
Infracost、 │ V0 静的、 │ V1 プラン、 │
シナリオ、 │ V2 デプロイ — │
所有権、 │ 名前付きで │ 各レベルを │
未算出は │ 上書きせず │ 報告 │
黙って上書きしない │
リポジトリのルートがプラグインです:`skills/neckbeard/SKILL.md` はエージェントの操作マニュアル、`commands/` はスラッシュコマンド、そして `cmd/` にあるGo CLIと `catalog/` にあるモジュールカタログが決定論的な部分を担います。CLIはエージェントなしでもすべてを駆動できます:
`go install github.com/bealesh/neckbeard/cmd/neckbeard@latest`
`neckbeard analyze && $EDITOR app-profile.yaml neckbeard.yaml`
`neckbeard plan && neckbeard estimate && neckbeard scaffold && neckbeard validate`
詳細:DESIGN.md(初日から誠実さを保っている完全な設計図) · docs/findings/(現実から学んだこと) · CONTRIBUTING.md
Apache-2.0 — LICENSEを参照してください。
原文(英語)を表示
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
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.yaml
lockfile, 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:
* 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.yaml
states 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 aftervalidate
is 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:
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 validate
Deep dives: DESIGN.md (the full design, kept honest since day one) · docs/findings/ (what reality taught us) · CONTRIBUTING.md.
Apache-2.0 — see LICENSE.