# 「CLI名を1行書くと使う道具が変わるか」実験の素材と再集計

2026-10-14に実施した実験の記録です。Claude Code 2.1.291（Haiku 4.5・Sonnet 5.5）270回と、Codex CLI 0.160.0（gpt-6-astra、medium）105回。保存した結果の再集計にモデル呼び出しは要りません。

## まず保存結果を確認する（API不要）

[実験一式](./experiment.zip)を展開します。Python 3の標準ライブラリだけを使います。

```bash
unzip experiment.zip
cd experiment
python3 analyze.py        # 表と主要な比較（正確検定）を出し、summary.json を作る
```

`analyze.py` は `results*/` の保存JSONを読み直し、採点（`tasks.py` の `grade`）と使った道具の判定（`classify`）を毎回やり直します。図版は、展開した直下の `make_figures.py` で再生成できます（`experiment/` の保存結果を読みます）。

## 何を測ったか

- 条件：`none`（指示ファイルなし）／`five`（`CLAUDE.md` または `AGENTS.md` に `使えるCLI: gh, git, jq, rg, curl` の1行）／`decoy`（関係ない5本 `bat, fd, fzf, zoxide, eza` の1行）。
- 課題：`tasks.py` に全文。Set A（`gh` `git` `jq` `rg` `curl`）は、それぞれの道具が得意な課題。Set B・C（`nat-*`）は、道具の形を匂わせないふつうの依頼。
- 測ったもの：その道具をBashで実際に呼んだか（コマンド位置の語で判定）、答えが正解か（名前と数字が同じ行にあるものだけ正解）、ターン数。
- 結果の置き場：`results`（A）、`results-b`（B）、`results-c`（C）、`results-codex`（Codex）。`results-with-grep-*` は、`--tools` に Grep と Glob も足した最初の実行（rg の節で使用）。
- Claude Codeの道具は `Bash, Read, Write, Edit, WebFetch`。macOSの既定のClaude Codeには Grep・Glob が無いため足していません。`--setting-sources project --strict-mcp-config --permission-mode acceptEdits`。
- 素材は `make_fixtures.py` が作ります。jq 1.8.2のソース、固定シードで生成した `orders.json`（2万件）と `app.jsonl`（6万行）、RFC 9110、JSONPlaceholderの公開データ。ghの課題は cli/cli の固定のPR・リリースです。

## 記録の限界

- 1つのセルは5〜15回です。割合の比較ではなく、「挙動が変わったか」の確認として読んでください。
- 課題は5本の道具に合わせて作ったので、「5本で足りる」ことの証明にはなりません。
- 判定は文字列の照合です。`rg --type c` が `.h` も含む（367行になる）ような差は、正解の定義（`.c` だけ＝366行）で不正解にしています。
- 3回の試行（Sonnetのcurl課題）が、作業フォルダの外の親フォルダ（私の作業用の一時フォルダ）にRFCをダウンロードしました。手元に置いた素材を読んだ記録はありません。
- `cost_usd_equiv` はAPI料金の換算額で、請求額ではありません。
- 保存JSONの個人環境のパスは `<home>` などに置き換えています。
