# 指示ファイル実験の素材と再集計

2026-10-04に実施した48試行の記録です。2026-10-05には保存データの再集計と編集のみを行い、新しいモデル呼び出しはしていません。

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

[実験一式](./experiment.zip)をダウンロードして展開します。非公開リポジトリへのアクセスは不要です。Python 3の標準ライブラリだけを使います。

```bash
unzip experiment.zip
cd agents-md-instructions
python3 analyze.py
python3 make_figures.py
```

`analyze.py` は `results/*.json` を読み、`summary.json` を作ります。6条件が各8件、合計48件です。`make_figures.py` は図版4ファイルを再生成します。

| モデル指定 | 条件 | slugs.py | 日本語docstring | make check | 型ヒント |
|---|---|---:|---:|---:|---:|
| sonnet | none | 0 | 0 | 8 | 0 |
| sonnet | short | 8 | 8 | 8 | 0 |
| sonnet | long | 8 | 8 | 8 | 8 |
| haiku | none | 0 | 0 | 0 | 0 |
| haiku | short | 8 | 8 | 8 | 0 |
| haiku | long | 8 | 8 | 8 | 8 |

## 何を測ったか

- 題材は `repo/` の小さなPythonリポジトリ。依頼全文は `run_exp.py` の `PROMPT` にあります。
- 指示は `instructions/short.md` の3行、または同じ3行を汎用方針に埋めた `long.md`。`none` は指示ファイルなし。`long.md` は合成文で、型ヒントを付ける指示も含みます。文章量だけを変えた比較ではありません。
- 各試行のソースから、関数の置き場所とdocstringを確認。`make check` はコマンドを呼んだかを測ります。テストが通ったか、実装が正しいかは採点していません。
- 当時の編集記録はClaude Code 2.1.286、Sonnet 5.5（claude-sonnet-5-5）・Haiku 4.5（claude-haiku-4-5-20251001）と報告しています。ただし保存JSONには `sonnet` / `haiku` の指定名しかなく、実際のモデルID・CLI版の独立再確認はできません。
- `total_cost_usd` 由来の費用は参考換算額です。請求額ではなく、モデル間の優劣や最新価格も示しません。

## 記録の限界と公開時の加工

- 48件の終了コードはすべて0ですが、元のstream-json全文、生成されたテスト、テスト出力は保存されていません。古い `tool_calls` は各120文字で打ち切られています。
- `outside_cwd_access` は一部の文字列パターンを探した当時の補助値です。0でも外部アクセスがなかった証明にはなりません。
- 新規記録ではRead・Write・Editの構造化pathを作業フォルダ起点で正規化し、フォルダ内を除外します。Bashは作業フォルダ内の絶対pathを除いた文字列の補助検出です。shell全体の解析や全アクセスの監視ではありません。旧48件の補助値は再計算していません。
- `--setting-sources project` は設定の読み込み元の指定です。ユーザー・管理者の指示ファイルまで除外できた保証はありません。自動メモリは環境変数で無効にしましたが、全指示の読み込みログは保存していません。
- 公開用JSONでは `tool_calls` 内のmacOSの一時フォルダを `<workdir>` に置換しました。ソース、採点値、費用、回数は変更していません。
- 初回の `docstring` / `docstring_ja` は型ヒントに対応していない正規表現で誤判定しました。修正履歴として値は残し、`analyze.py` が保存ソースを `ast` で読み直します。集計にはこの再判定を使います。
- 合言葉による読み込み確認12回は元の出力が残っていないため、記事の実験結果から外しました。読み込み方法は公式資料で説明しています。

## 新しく動かす場合（認証・利用枠が必要）

Python 3、`make`、認証済みのClaude Code CLIが必要です。実行前に `claude --version` を記録し、使うモデルID・指示ファイルの読み込み設定を確認してください。CLI更新やモデルの変更で同じ結果になるとは限りません。指示の混入を避けるには、ユーザー・管理者・親フォルダの指示が管理できる使い捨て環境で行い、読み込まれたファイルも記録してください。

`run_exp.py` は6並列で、1モデルにつき3条件×指定回数を呼び出します。Bash・Read・Write・Editを許可し、一時フォルダに作業コピーを作ります。これは隔離・権限制限の代わりにはならないため、秘密情報のない実験環境を使います。

まず1回ずつ、既存データとは別の空フォルダで確認します。以下はモデル呼び出しが発生するコマンドです。

```bash
python3 run_exp.py sonnet 1 results-new-sonnet
python3 analyze.py results-new-sonnet summary-new-sonnet.json
```

新しいスクリプトは指定名に加えて応答のモデルID・CLI版を記録し、既存結果への上書きを拒否します。モデルIDが空、終了コードが非0、費用が欠落した場合も診断JSONを保存してから実行全体を非ゼロ終了にし、`analyze.py`も集計を拒否します。投入済みの試行がすべて即時停止する保証はありません。通信・認証・モデル指定と保存した診断を確認してください。モデルIDキーがない旧48件は未確認のまま無料再集計でき、指定名からIDを補いません。8回ずつの比較へ進む前に、読み込み設定、費用、保存結果を確認してください。標準の `make_figures.py` は元の2モデル・3条件を想定しているため、新しい集計を図にする場合は条件名と表示名も合わせて編集します。
