IngaDB 0.1 · 製品ドキュメント
IngaDB/ドキュメントAPI v1
ドキュメントを参照
CLIとエージェント

インスタンス自身のカタログが駆動する、一つのCLI。

ingactl はAPIサーフェスをハードコードしません。接続先インスタンスからコマンドカタログを同期するため、 サーバーが提供するルートは再ビルドなしでCLIに現れます。契約、必要権限、プロジェクトIDの配置場所も含まれます。 人にとって便利な同じ性質が、エージェントによる安全な操作も可能にします。

実際のセッション

以下は、開発インスタンスに対して実行した無編集のセッションです。同期、アーティファクト生成、検索、契約確認、ドライラン——認証情報はCLI自身が伏せ字にします。

ターミナルingactl
$ ingactl syncsynced 87 routes from http://localhost:9876 (version 0c003f47b7b8) $ ingactl skill --format claude-skill --out .claude/skills/ingadb/wrote ./.claude/skills/ingadb/SKILL.md $ ingactl api search "what-if" --json[ { "method": "POST", "path": "/api/pipeline/what-if", "permission": "analysis.run", "title": "What-if analysis" } ] $ ingactl api show pipeline/what-if --method POST --json{ "body": { "overrides": [ { "target_id": "E1", "value": 0.0005 } ], … }, "danger": "mutate", "permission": "analysis.run", "project_scope": { "field": "project_id", "location": "body" } } $ ingactl api call pipeline/what-if --method POST --dry-run{ "method": "POST", "url": "http://localhost:9876/api/pipeline/what-if", "headers": { "authorization": "Bearer cok_1e06…", … }, "body": { "overrides": [ { "target_id": "E1", "value": 0.0005 } ], … } }

インストール

CLIは単一のバイナリクレートとしてリポジトリに含まれます。

ターミナルbash
cargo build --release -p ingactl     # → target/release/ingactl
cp target/release/ingactl ~/.local/bin/

接続

プロファイルは ~/.config/ingadb/config.toml に保存されます。資格情報のスコープは一つのワークスペースです。 複数ワークスペースに所属する場合は、それぞれにプロファイルを作り --profile で切り替えます。

ターミナルbash
# トークン — 長期利用、スコープ付き、失効可能、本人として監査
ingactl auth login --url http://localhost:9876 --token cut_...

# メールアドレスとパスワード — 有効期限付きセッショントークン
ingactl auth login --url http://localhost:9876 --email [email protected]
  # パスワード: INGADB_PASSWORD。未設定なら非表示プロンプト
  # --workspace <name|id>  ワークスペースを選択(既定: 最初のもの)

ingactl auth status   # ID、ワークスペース、権限を表示

CIでは INGADB_URL と INGADB_TOKEN を設定します。環境変数はプロファイルより優先されます。

基本ループ

すべての呼び出しは、ルート検索、正確な契約確認、解決済みリクエストのプレビュー、実行という同じ四段階を通ります。

ターミナルbash
ingactl api search causal            # 1. 候補ルートを検索
ingactl api show data/causal-path    # 2. 契約と権限(本人の ✓/✗)
                                     #    + プロジェクトIDの渡し方
ingactl api call data/causal-path   --project 'packaging-line'   --param node_id=E_BEARING   --dry-run                          # 3. 解決済みリクエストを確認
ingactl api call data/causal-path   --project 'packaging-line'   --param node_id=E_BEARING -o json  # 4. 実行
  • 本文はカタログ例から始まり、--set a.b=value でJSONをマージ、--set-str で文字列を強制、--file body.json で全置換します。
  • --param k=v はクエリパラメータを追加します。
  • --project <name|id> は名前を解決し、ルートが要求する場所へIDを配置します。?id= と ?project_id= を推測する必要はありません。
  • 破壊的ルートは先に確認します。--yes で省略可能です。権限不足は警告しますがブロックせず、最終判断はサーバーが行います。
  • 出力は -o table|json|raw。TTYでは表、パイプ時はJSON。非ゼロ終了コードは {"error": ...} エンベロープを示します。

因果ストアを照会

これらの読み取りルートは、ストアから因果に関する問いへ直接回答します。計算は決定論的で、元のリビジョンが付与されます。

ルート回答内容
data/tree/searchツリーのイベントとゲートをラベルまたはIDで全文検索。
data/tree/summary全ノード、構造、最上位ゲート、最新分析の有無を一回で取得。
data/causal-path任意のノードから最上位ゲートまでの因果経路。
data/importance一つのイベントのFussell-Vesely重要度、寄与、含まれるカットセット。
data/cutset一つのカットセットに含まれるイベントのラベル、確率、親ゲート。
data/event-evidence一つのツリーイベントに関連付けられたインシデント。
data/analysis鮮度状態と正確な changes_since 差分を含む完全な計算済みビュー。
pipeline/what-if入力を上書きしたモデルを、書き込みなしで計算。
projects/overview統計、分析状態、上位寄与要因を含むプロジェクト概要。

エージェント向け

ingactl skill は同期済みカタログから、エージェント向けの操作ガイドを生成します。 環境確認の「ステップ0」、検索 → 表示 → ドライラン → 実行 のループ、インスタンスが実際に 提供するルートから組み立てた実行例、そしてエラー種別と対処の一覧表。 データから生成されるため、ガイドがデプロイの実態からずれることはありません。

ターミナルbash
ingactl skill               # ガイドを標準出力へ
ingactl api schema          # カタログ形式のバージョン — 解析前に確認
ingactl completions zsh     # シェル補完(bash|zsh|fish|powershell|elvish)

--format と --out を使えば、エージェントが参照する場所へ 同じガイドをそのまま書き出せます。

ターミナルbash
mkdir -p .claude/skills/ingadb
ingactl skill --format claude-skill --out .claude/skills/ingadb/
# → wrote .claude/skills/ingadb/SKILL.md(YAMLフロントマター付き)

ingactl skill --format agents-md --out .
# → wrote ./AGENTS.md

ingactl padmin skill --format claude-skill --out .   # プラットフォーム層も同じフラグ

形式は三つ。plain(既定、標準出力)、claude-skill(name/description フロントマター付きのSKILL.md)、agents-md(AGENTS.md)。--out にディレクトリを渡すと既定の ファイル名(SKILL.md / AGENTS.md / ingactl-skill.md)で原子的に書き込み、 書き込んだパスを表示します。実行例とルート一覧はカタログに追従するため、ingactl sync の後に再生成してください。

無人実行を安全にするガードレール:

  • 権限の事前確認。 api show は呼び出し元が各ルートの権限を持つか表示し、最終判断はサーバーが行います。
  • すべてをドライラン。 --dry-run は送信せず、メソッド、URL、本文、秘匿化済み認証を含む解決済みリクエストを表示します。
  • 例示本文ガード。 --set/--file なしの変更呼び出しはカタログ例をそのまま送るため、対話実行では確認し、スクリプトは --yes なしなら明確に失敗します。
  • 破壊的ルートを確認。 カタログで破壊的と指定されたルートだけが確認を求め、読み取りルートは求めません。
  • 型付き失敗。 エラーはJSONエンベロープと非ゼロ終了コードで届き、エージェントは文章ではなくデータで分岐できます。

複合ワークフロー

二つのコマンドが一般的な複数ステップ処理をまとめ、完了まで監視します。

ターミナルbash
ingactl analyze --project 'packaging-line'   # 分析ジョブ → 監視
ingactl jobs list --project 'packaging-line'
ingactl jobs watch <job-id>

正確性を保つ仕組み

カタログはサーバーバイナリ内に含まれ、/api/schema/catalog でバージョン付き提供されます。 ルート別権限はサーバー自身の /api/schema/rbac から取得します。ingactl sync が両方を更新するため、api show は古くなったコピーではなくインスタンスの規則を報告します。サーフェス変更時はカタログバージョンが変わり、 CLIはキャッシュミス時に再同期します。

プラットフォーム管理 — ingactl padmin

ワークスペース、ユーザー、メンバーシップ、プラットフォームトークンを扱うプラットフォーム層は、 独自のプロファイルと資格情報を持つ別コマンド名前空間です。この分離は意図的に構文へ組み込まれています。 同じコマンド文字列が両方で有効になることはなく、ワークスペースコマンドはプラットフォーム資格情報を拒否し、その逆も同様です。 各 padmin コマンドは、実行前に誰として動作するかをstderrへ表示します。

ターミナルbash
# Day 0: 新規インスタンスから利用可能なワークスペースログインまでを一コマンドで
ingactl padmin init --url https://ingadb.example.com   --workspace acme --user-email [email protected]

# 以後の接続: セッション(7日で失効)またはスコープ付きcpt_ トークン
ingactl padmin login --url <url> --email [email protected]
ingactl padmin status

# プロビジョニング
ingactl padmin workspace create 'Acme'
ingactl padmin user create [email protected]   # 仮パスワードを一度だけ表示
ingactl padmin membership assign --user-id <id> --workspace-id <id> --role Analyst
ingactl padmin token mint ci --scope read --scope workspaces --expires-days 90
  • 同じ検索ループ。 ingactl padmin api search|show|call と ingactl padmin skill はプラットフォームカタログ上で動作します。セッションはすべて通過し、トークンはルートのスコープドメインごとに確認されます。
  • 名前入力による確認。 ワークスペース削除では名前の再入力を求め、オートメーションでは --yes を使えます。
  • シークレットは一度だけ表示。 仮パスワードと発行済み cpt_ トークンは一度だけ表示し、キャッシュへ保存しません。
  • 資格情報で資格情報を管理しない。 トークン管理にはプラットフォーム管理者セッションが必要で、トークン自身はトークンを発行・失効できません。
独自エージェントを構築しますか?

CLIのすべての動作はプレーンHTTPです。同じカタログとRBACエンドポイントを任意のクライアントから利用できます。APIリファレンスを参照してください。