プログラミング
Show HN: Kastor – AIエージェントのためのTerraform風仕様
Show HN: Kastor – Terraform-style specs for AI agents (github.com)
要約
Kastorは、AIエージェントの定義を宣言的かつベンダーニュートラルに行うためのツールです。HCL形式の仕様ファイル(.agent, .tool, .prompt)とGoツールチェーンを提供し、LangGraphなどのフレームワーク向けに実行可能なプロジェクトを生成したり、ホストプラットフォーム上のエージェントの状態管理やドリフト検出を行ったりします。現時点では初期段階の概念実証ですが、LangGraphプロジェクトのビルドやローカル状態管理などが計画されています。
全文翻訳
Kastor
Kastorは「AIエージェントのためのTerraform」です。今日のAIエージェントは、フレームワーク(LangGraph、CrewAI)内で命令的に定義されるか、プラットフォームUI(OpenAI Assistants、Bedrock Agents)で組み合わされますが、ベンダーニュートラルでバージョン管理可能、レビュー可能な真実の情報源が存在しません。Kastorはそれを一つ提供します。型付けされた宣言的な仕様(HCL形式の.agent、.tool、.promptファイル)と、2つのパスを持つGoツールチェーンです。kastor buildはターゲットフレームワーク向けの実行可能なプロジェクトを生成し、kastor plan / kastor applyは、状態、差分、ドリフト検出を備えたホストプラットフォーム上の長期的なリソースとしてエージェントを調整します。完全な設計はSPEC.mdにあります。
ステータス
Kastorは初期の概念実証です。
現在動作するもの:
.agent、.tool、.prompt、およびkastor.hclの解析
参照とプロンプト変数の検証
実行可能なLangGraphプロジェクトのビルド
例:天気エージェント、コンテンツスケジューラエージェント
v0で計画されているもの:
kastor plan/apply(ローカル状態ファイルとドリフト検出)
aws/azureプラットフォームへのデプロイ
これは別のエージェントランタイム/フレームワークではありません。
インストール
Homebrew:
brew tap weirdGuy/tap && brew install kastor
インストールスクリプト(リリースチェックサムを検証し、/usr/local/binまたは~/.local/binにインストールします。sudoは不要です):
curl -fsSL https://raw.githubusercontent.com/weirdGuy/kastor/main/scripts/install.sh | sh
Go 1.26+の場合:
go install github.com/weirdguy/kastor/cmd/kastor@latest
または、releasesページからプラットフォーム用のアーカイブをダウンロードし、checksums.txtに対して検証してから、kastorバイナリをPATHに配置してください。
クイックスタート:天気例のビルド
前提条件:Go 1.26+、Python 3.11+、OpenAI APIキー、Tavily APIキー(例の検索ツールはTavilyのホストMCPサーバーに対して実行されます)。
仕様をLangGraphプロジェクトにコンパイル:
go build ./cmd/kastor
./kastor validate examples/weather/
./kastor build examples/weather/
kastor buildは、生成されたプロジェクトをexamples/weather/gen/langgraphに書き込みます(ターゲットの宣言された出力)。生成された出力はコミットされません。仕様から再現可能であり、コード生成の決定性はテストによって強制されます。
生成されたプロジェクトの設定:
cd examples/weather/gen/langgraph
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
例のweb_searchツールは、その仕様URI、mcp://search-server/tavily_searchによってMCPサーバーとツールにピン留めされています。そのサーバーに到達する方法は、仕様ではなくデプロイメント構成です。作業ディレクトリにmcp_servers.jsonを作成するか(またはKASTOR_MCP_CONFIG環境変数を別のファイルに向ける)、KASTOR_MCP_CONFIG環境変数を別のファイルに向けるかしてください。
Tavilyのホストサーバーの場合:
{
"search-server": {
"transport": "streamable_http",
"url": "https://mcp.tavily.com/mcp/?tavilyApiKey=tvly-YOUR-KEY"
}
}
URLにはAPIキーが埋め込まれているため、mcp_servers.jsonはgitignoreされています。秘密情報として扱い、決してコミットしないでください。また、仕様URIの最後のパスセグメント(tavily_search)は、サーバーが実際にアドバタイズするツールを名前付けする必要があることに注意してください。そうでない場合、呼び出しは「does not expose tool」というエラーで失敗します。
モデル認証情報をエクスポートします(例のモデル「fast」ブロックはプロバイダーopenaiを使用します):
export OPENAI_API_KEY=sk-...
エージェントを実行します:
python3 main.py weather --inputs '{"location": "Lisbon", "date": "tomorrow"}'
エージェントの宣言された出力契約をJSONとして出力します:
{
"weather": "..."
}
gen/langgraph内の生成されたREADME.mdは、プロジェクト実行側の全責任を負います。すべてのエージェントの入力と出力、ツールバインディング、MCP構成が含まれます。
v0の注意点(SPEC.md §3.2/§4):agent.weatherのオプションのforecast_context入力は、agent.forecastの出力を参照します。その参照はコンパイル時に検証され、依存関係グラフを順序付けしますが、生成されたコードはアップストリームエージェントを自動的に実行しません。コンテキストが必要な場合は、forecastを自分で実行し、その要約を--inputs経由で渡してください。
開発
go build ./... # すべてをビルド
go test ./... # すべてのテストを実行
SPEC.mdは設計上の決定に関する真実の情報源であり、CLAUDE.mdは日々の慣習を文書化しています。