CLI 入門 | 詳細チュートリアル | CLI リファレンス
この手順は、CommandAgentを初めて触る人が、依頼の確認、無対話実行、 検収シートの判定までを自力で1周し、その後にpackのパラメータだけを 変えたローカルA/Bを1回行うためのものです。リポジトリrootから実行して ください。Ollamaと記載モデルが利用できる健全なセッションを前提にします。
ここで行う自己実演は操作確認です。第三者P-3計測や正式bandへの登録には 数えません。
入門と画面チュートリアルで使う共通サンプル目標は
Create a CLI --pattern filter command です。ここからは別の
ingest profile を詳しく確認するため、意図的に自治体イベント抽出の依頼を
使います。
固定入力を一時workspaceへコピーし、製品binaryをbuildします。既存の workspaceや履歴を混ぜないよう、作業領域とstate領域を分けます。
export D3C_LOOP_ROOT=/tmp/commandagent-first-loop
export D3C_LOOP_STATE=/tmp/commandagent-first-loop-state
mkdir -p "$D3C_LOOP_ROOT/data/snapshots"
cp workspace/management/bench/assets/ingest/list/data/snapshots/events-list.html "$D3C_LOOP_ROOT/data/snapshots/events-list.html"
ollama ps
cargo build --release --bin commandagent境界シェルを含むREPLを起動します。
cargo run --release --bin commandagent -- --cwd "$D3C_LOOP_ROOT" --state-dir "$D3C_LOOP_STATE" --planner-provider ollama --planner-model qwen3.6:27b-coding-nvfp4 --provider ollama --model gemma4:31b-cloudREPLへ次の依頼を1行で入力します。
data/snapshots/ 配下のHTMLイベント一覧から自治体イベント情報を抽出し、JSON形式(name, date, location, source_file)でoutput/records.jsonへ整形するパイプラインを作成してください。候補検出セレクタを宣言し、抽出不能候補は理由付きで除外し、output/report.mdに件数と要約を記載してください。
Gate 1は実行結果ではなく提案カードです。依頼内容、各必須チェックの説明、 類似実行の合格件数、ファイル変更範囲、モデル、検証パック、確認 ID を 読みます。shakedownでは次の形でした(workspaceと確認 ID は実行ごとに 変わります)。
# Gate 1 — 実行前の確認
## 実行する内容
- 作業内容: 新しい機能を作成 (create): データ取り込みパイプライン (ingest) / 一覧 (list)
- 契約の参照先: docs/ingest-profile-contract.md
## 必須チェック
- N1 — パイプライン実行: 有界な取り込みコマンドが正常に完了する
- N2 — 入力元の正確さ: すべての出力値が選択した入力レコードに結び付く
- N3 — 候補の勘定: すべての検出候補が採用または明示的な除外になる
- N4 — 形式の正確さ: 出力フィールドと型が必須スキーマと一致する
- N5 — 再現性: 取り込みを再実行しても同じ結果になる
## 類似実行の結果
- 全必須チェックに合格した実行: 6件中4件 (66.7%)
## 確認
- 確認 ID (内容が1つでも変わると ID も変わります): sha256:<card-hash>
これは提案であり、実行結果ではありません。
実行前にこの ID と完全一致する内容を確認してください。CLI では /confirm sha256:<card-hash> を使用します。
内容が依頼と一致するときだけ、画面に出たhashをそのまま入力します。
/confirm sha256:<card-hash>
確認を拒否するなら、/confirmを入力しません。依頼を修正して新しいGate 1を
出し、古いhashは捨てます。確認記録が永続化されるまでdispatchはできません。
確認後は次の境界表示が出て、同じカードに束縛された実行が始まります。 途中で追加の会話判断は要求されません。
Persisted confirmation: `sha256:<card-hash>`
Dispatching ingest × create × list.
fullならGate 3が検収シート全文とともに表示されます。会話の要約ではなく、 次の5節を順に確認します。
# Gate 3 — Acceptance
## 1. Confirmed identity
## 2. Terminal projection
- Assurance: full
- Runtime acceptance: pass
- Final acceptance: full_success
- Release gate: pass
## 3. Definition of done
- Contract checks: N1, N2, N3, N4, N5
## 4. Machine evidence
## 5. Stop reason
completed
fullという一語だけで判定せず、節1が確認した依頼と一致すること、節2の
投影、節3のN1〜N5、節4のevidence path、節5の停止理由を照合します。
今回の機械証拠では、特にN2の出典束縛とN3の
detected = accepted + excludedを読みます。
記録はstate領域に残ります。
find "$D3C_LOOP_STATE" -maxdepth 2 -type f -print終了時はREPLで/exitを入力します。現在のREPLは1セッション内の複数依頼を
未サポートなので、次の依頼は再起動して新しいGate 1から始めます。
fullでなければGate 4がシート全文、節5、typed next actionsを表示します。 選択肢の意味は次のとおりです。
# Gate 4 — Failure and next action
## Section 5
<machine-recorded stop reason>
## Typed next actions
- retry: available|unavailable — <reason>
- recovery_circle: available|unavailable — <reason>
- elevated_model: available|unavailable — <reason>
- pack_change: available|unavailable — <reason>
- human_directive: available — persisted confirmation required
- close: available — records no further action
retry: 同じ構成でもう一度Gate 1から確認する。recovery_circle: 失敗証拠を引き継ぐ回復円環へ切り替える。elevated_model: 上位モデル構成を新しい値札とpinで確認する。pack_change:/pack <id@version>でcompatibleなadmitted packへ変更し、 新しいGate 1カードを再確認する。human_directive: 失敗runへ追加指示を保存・確認して同じworkspaceで継続する。close: 実行を増やさず閉じる。
現行REPLでは、失敗runに限り/directive <instruction>で追加指示を
提案できます。指示は資格情報検査後にhash付きで保存され、表示された
/confirm-directive <hash>を明示実行するまで継続runへ渡りません。
pack_changeがavailableなら、たとえば/pack cli-assist@1.0.0を入力します。
selector、exact-byte hash、検証箇所、供給元を含む新しいGate 1が表示され、
新しい/confirm <hash>なしには次のrunへ進みません。再試行・elevatedなど、
その他のconsequentialなGate 4選択肢にも新しいGate 1確認が必要です。
packの効果は、同じsuiteでpack pinだけを変えて測ります。ここでは既存
cli-assist@1.1.0を1.1.1へ複製し、C1出力の有界長だけを4,000から
2,000 byteへ狭めます。ローカル実験packはconformanceを通っても未admitted
です。境界シェルでは選択せず、bench A/Bだけに使います。
複製元の実体はpacks/cli-assist/1.1.0/assist.yamlです。
現在利用できる承認済みpackとローカルpackは、profileとintentを固定して一覧できます。
各行のSOURCEはadmittedまたはlocalです。
commandagent --extension-root packs --profile python-cli --intent create --packs同じprofile/intentでREPLを起動している場合、/packsはこの--packsと同一内容を
表示します。最初のGate 1からpackを使う依頼は次のように入力します。
Python CLIのfilterを作る --pack cli-assist@1.1.0
Gate 1にはcli-assist@1.1.0、sha256:付きhash、検証箇所、供給元が表示されます。
/confirm後は完全一致packがrunへ導入され、eventsにpack_injectedが残ります。
python3 workspace/management/scripts/scaffold.py pack cli-assist --from-version 1.1.0 --version 1.1.1生成されたpacks/cli-assist/1.1.1/assist.yamlで、次の1行だけを変更します。
max_bytes_per_stream: 2000他のsource、point、fields、C3 bindingは変えません。次にstrict decoder、
語彙、契約floor、exact-byte hashを検査し、greenになったbytesをpinします。
既存pack.sha256を上書きする操作ではなく、scaffoldの未pin directoryに
初回pinを作るコマンドです。
commandagent --pack-pin packs/cli-assist/1.1.1管理用Python wrapperを使う代替経路は次です。
python3 workspace/management/scripts/pack_conformance.py --pack packs/cli-assist/1.1.1 --write-pin新しいCLI直接アクションを通常は使い、管理用Python wrapperとの互換性確認が必要な場合だけ 後者を使います。どちらも既存pinの不一致を上書きしません。
出力のexact_byte_hashとpacks/cli-assist/1.1.1/pack.sha256が一致することを
確認します。
commandagent --pack-verify packs/cli-assist/1.1.1同じreportは管理用wrapperからも確認できます。
python3 workspace/management/scripts/pack_conformance.py --pack packs/cli-assist/1.1.1既存A/B suiteを一時ファイルへ複製します。
cp workspace/management/bench/suites/cli-create-elevated-cli-assist-v1-1.toml /tmp/cli-assist-local-1.1.1.toml一時suiteでは、次の3値だけを変更します。<exact-byte-hash>はconformanceが
出したsha256:付きの値です。モデル、goal、6run、入力は変えません。
id = "cli-assist-local-1-1-1"
pack_version = "1.1.1"
pack_hash = "<exact-byte-hash>"まずdry-runでpinと6run計画を読み、その後に同じsuiteを実行します。
export D3C_PACK_RUN_ROOT=/tmp/commandagent-cli-pack-loop
python3 workspace/management/scripts/bench.py run --suite /tmp/cli-assist-local-1.1.1.toml --workspace-root "$D3C_PACK_RUN_ROOT" --dry-run
python3 workspace/management/scripts/bench.py run --suite /tmp/cli-assist-local-1.1.1.toml --workspace-root "$D3C_PACK_RUN_ROOT"
find "$D3C_PACK_RUN_ROOT" -maxdepth 2 -name uat-meta.json -print実行が表示したcampaign directoryをD3C_CAMPAIGNへ設定し、自動分類します。
次の値は例なので、末尾を実際に表示されたdirectory名へ置き換えます。
export D3C_CAMPAIGN=/tmp/commandagent-cli-pack-loop/cli-assist-local-1-1-1-20260731-000000
python3 workspace/management/scripts/classify_runs.py "$D3C_CAMPAIGN" --out "$D3C_CAMPAIGN/classification.json"正式な比較基準は次の行で確認できます。
rg -n "Pack v1.1.0 pin|Pack arm full|Pack runs reaching|Pack renderer exposure|Reach-rate comparison" workspace/management/runs/band_summary_cli.md新campaignについても、同じ順序で次を比べます。
- pack ID、version、exact-byte hashが意図したpinか。
- 6runの正直終端数とC系到達数。
- renderer露出数。露出ゼロならpack効果はまだ観測していない。
- full率とC3 violation分布。到達率差と合否差を混同しない。
- family/executorの分母が同じか。
未admittedのローカルpackは正式band_summary_cli.mdへ自動加算しません。
レビュー、admission、計測レポート登録後にだけ正式bandへ入れます。差がゼロでも
失敗ではなく、pin以外を固定した効果量ゼロという観測です。
実行は始まりません。曖昧な依頼へprofile、intent、材料、成果物を足します。
この例ならdata/snapshots/、HTML、抽出、output/records.jsonを明記します。
登録外の語を推測でIDにせず、修正版のGate 1を待ちます。
正常な安全動作です。確認記録がないためdispatchされません。モデル、値札、 contract、pack pin、または依頼が違う箇所を直し、新しいカードhashだけを 確認します。
同条件の偶発失敗だけならretry、失敗証拠を保った修復なら
recovery_circle、能力階級を変えるならelevated_model、援助材料だけを
変えるA/Bならpack_change、追加費用を使わないならcloseです。いずれも
次の実行前に新しいGate 1の値札とpinを読み直します。