Ghost — GitでプロンプトをコミットするCLI
概要
Ghostは「Commit intentions, not code.」をスローガンに、従来のGitワークフローを逆転させるCLIツールです。開発者はコードやファイルを直接コミットするのではなく、AIに与えるプロンプト(=意図)をコミットします。AIエージェントがプロンプトに基づいてアーティファクト(コード、ドキュメントなど)を生成し、その結果とプロンプトのペアがGit履歴として残ります。claude、gemini、codex、opencodeといった複数エージェントに対応し、コミットごとにエージェントを切り替え可能。Shellベースの軽量実装で、hooksやlibディレクトリを通して既存ワークフローに組み込みやすい設計です。(約300字)
リポジトリの統計情報
- スター数: 23
- フォーク数: 0
- ウォッチャー数: 23
- コミット数: 5
- ファイル数: 5
- メインの言語: Shell
主な特徴
- プロンプト中心のコミット: 意図(プロンプト)とAIの出力をペアで履歴化
- マルチエージェント対応: claude、gemini、codex、opencodeをサポートし、コミットごとに切替可能
- 軽量なShell実装: gitフックやスクリプトから容易に呼び出せる
- 拡張と検証のためのhooks/test構成: 開発・CIへ組み込みやすい構造
技術的なポイント
Ghostはシンプルなシェルスクリプト群で構成され、GitとAIエージェントの橋渡しを行います。キーアイデアは「コミットメタデータとしてのプロンプト保存」で、通常のソース管理が追いにくい“なぜその変更が生まれたのか”という意図を履歴に残します。技術的には、CLI(bin)から入力されたプロンプトを選定し、指定したAIエージェント(claude/gemini/codex/opencode)へHTTP/API経由で送信、返却された生成物とプロンプトを組み合わせてGitコミットを作成します。コミットメッセージや付随ファイルにはプロンプトの全文、エージェント名、レスポンスの要約や出力ファイルが格納され、将来的なレビューやロールバックで意図と結果を突き合わせられます。
設計上の注目点としては、エージェントをプラグイン的に切り替え可能な点、そしてGitフック(hooksディレクトリ)による自動化です。例えばコミット前に自動でAIに問い合わせ、生成結果をワーキングツリーに反映してからコミットするフローが想定されています。またShell実装のため依存が少なく、CIや既存のGitワークフローへ導入しやすい反面、APIキー管理、ネットワーク遅延、生成結果の検証やセキュリティ(機密情報の送信防止)といった運用課題は設計・運用で配慮が必要です。テストディレクトリは基本的な動作確認向けに用意されており、libディレクトリには再利用可能なユーティリティやエージェント別ラッパーが配置されている想定です。将来的には出力の差分管理、生成履歴の可視化、ローカルでの再現機能(seedやモデルバージョン管理)などの拡張が価値を生みます。(約700字)
プロジェクトの構成
主要なファイルとディレクトリ:
- README.md: file
- bin: dir
- hooks: dir
- lib: dir
- test: dir
まとめ
AI生成物と意図を同時に記録する新しいGitワークフローを提案する実験的CLIです。(約50字)
リポジトリ情報:
- 名前: ghost
- 説明: Git is the coding agent
- スター数: 23
- 言語: Shell
- URL: https://github.com/adamveld12/ghost
- オーナー: adamveld12
- アバター: https://avatars.githubusercontent.com/u/2166475?v=4
READMEの抜粋:
Ghost
Commit intentions, not code.
Ghost is a CLI that flips the git workflow: instead of committing code, you commit prompts. An AI coding agent generates the artifacts; the commit captures both the intent and the output. Your git history becomes a chain of prompts + their results.
Supports claude, gemini, codex, and opencode — swap agents per-commit or set a default.