ワンクリックで
opinions-md
ワークスペース内における過去の Claude Code 対話ログ (ctx が索引した全 primary セッション) から、ユーザーの durable な意見・信念・判断基準を蒸留して OPINIONS.local.md を生成する。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
ワークスペース内における過去の Claude Code 対話ログ (ctx が索引した全 primary セッション) から、ユーザーの durable な意見・信念・判断基準を蒸留して OPINIONS.local.md を生成する。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
ハンドオーバー文書を読んで作業を引き継ぐ。
ctx (https://ctx.rs/) を使ってコーディングエージェントのトランスクリプトを検索・参照するときに使う。「過去のセッションを調べて」「前にやった作業を確認して」「Claude Code セッションID xxx の内容を教えて」「あのときの経緯を教えて」と依頼されたときに必ず使う。
herdr(ターミナルマルチプレクサ、https://herdr.dev/)の中で動いているときに、workspace・tab・pane・agent をソケット API 経由で操作する。他 pane の出力を読む、コマンドを実行する、出力やエージェント状態の変化を待つ、新しいエージェントを起動する、pane のレイアウトを操作する、git worktree を作る、といった操作をするときに使う。HERDR_ENV=1 で動いているときのみ有効。
OPINIONS.local.md を入力に、全マシン共通の要約版 (dotfiles 版) を蒸留する。
コミット依頼があったら必ず使うスキル。「コミットして」「commit」「変更をコミット」「ここまでの作業をコミット」等の指示を受けたら、このスキルを呼び出してコミットを実行する。直接 git commit を実行せずこのスキルを経由すること。
直前のコミットを修正 (amend) する。コミットメッセージを自動生成し、amend コミットを実行する。
| name | opinions-md |
| description | ワークスペース内における過去の Claude Code 対話ログ (ctx が索引した全 primary セッション) から、ユーザーの durable な意見・信念・判断基準を蒸留して OPINIONS.local.md を生成する。 |
過去の Claude Code 対話ログを唯一のソースに、ユーザーの durable な意見・信念だけを蒸留して、今のワークスペース向けの $WORKSPACE/.claude/OPINIONS.local.md を書く。
ctx CLI がセットアップ済みで、過去セッションを索引していること (ctx-agent-history-search スキルと同じ CLI)。未導入なら先にそちらを立ち上げる。
WORKSPACE を決める。成果物 (local 版) の唯一の置き場所であり、既定で $WORKSPACE/.claude/OPINIONS.local.md に書く:
WORKSPACE="$(git rev-parse --show-toplevel)"
ワークスペースが git 管理下にない場合はユーザーに配置先を確認する (git rev-parse は非 git ディレクトリではエラー終了する)。
中間成果物 (バッチ台帳・抽出候補・ドラフト) はワークスペースに残す必要がないため mktemp -d で作った一時ディレクトリに置く。以降このパスを $OUT と書く:
OUT="$(mktemp -d -t opinions-md)"
mktemp -d は毎回新規の衝突しないディレクトリを作る (同名ワークスペースやブランチ併走との衝突を避けるため、固定パスにはしない)。中断した続きから再開したい場合は、直前に使っていた $OUT のパスをユーザーに確認して変数に入れ直す。
ctx の準備を確認する。
ctx status
ctx sql "SELECT is_primary, COUNT(*) AS sessions FROM ctx_sessions GROUP BY is_primary"
抽出源のスコープをユーザーに確認する。 既定は primary セッションのみ。理由: ユーザー本人の発言 (意見の主源泉) は primary の user メッセージにしか無く、subagent セッションはエージェント同士のやり取りなので本人は喋っていない。primary だけで本人発話は全網羅でき、coverage は落ちない。
is_primary 条件を外して全セッションを対象にする。この差分だけ確認して進める。出力先を確認する。 既定は $WORKSPACE/.claude/OPINIONS.local.md。まず $OUT/OPINIONS.draft.md (中間ドラフト) に出し、ユーザーの確認後に配置する一段クッションを挟む。$WORKSPACE/.claude/OPINIONS.local.md に既存ファイルがある場合は上書き前に必ず退避を確認する (不可逆)。
primary セッションを event 数付きで CSV に吐き、event 数で均等割りして 16 バッチに分ける。
mkdir -p "$OUT/batches" "$OUT/candidates"
# primary セッションを event 数降順で CSV 化 (--max-rows で 100 行キャップを回避)
ctx sql --max-rows 1000 --format csv \
"SELECT s.ctx_session_id,
COUNT(e.ctx_event_id) AS events,
SUM(CASE WHEN e.event_type='message' THEN 1 ELSE 0 END) AS msgs,
COALESCE(s.cwd,'') AS cwd
FROM ctx_sessions s
LEFT JOIN ctx_events e ON e.ctx_session_id = s.ctx_session_id
WHERE s.is_primary = 1
GROUP BY s.ctx_session_id
ORDER BY events DESC" > "$OUT/sessions.csv"
echo "rows (incl header): $(wc -l < "$OUT/sessions.csv")"
# event 数で LPT bin-packing して batch-01..16.txt を生成
python3 "${CLAUDE_SKILL_DIR}/scripts/build-batches.py" "$OUT" 16
補足:
--max-rows 1000 を忘れると ctx sql が 100 行で頭打ちになり、セッションを取りこぼす。build-batches.py の第 2 引数で調整してよい (1 バッチ ~20-25 セッションが目安)。いきなり 16 体流す前に batch-01 を 1 体だけ走らせ、出力 JSON のスキーマ・quote の質・件数感を確認する。ここで確認するスキーマは opinion-extractor.md の「出力」節が正本。抽出方針の調整が要る場合は、opinion-extractor.md 自体は編集せず、フェーズ 2 以降の Agent 呼び出しプロンプトに調整指示を追記して渡す (例: 「テーマ <X> は抽出しすぎなので confidence low 以下は落として」)。
python3 -c "import json;d=json.load(open('$OUT/candidates/batch-01.json'));print('valid,',len(d),'items');[print(x['confidence'],'|',x['theme'],'|',x['opinion']) for x in d[:6]]"
各バッチ 1 体、同梱のカスタムエージェント opinions:opinion-extractor (subagent_type: "opinions:opinion-extractor") を起動する。プロンプトには次を含める:
m-takeda)$OUT/batches/batch-NN.txt)$OUT/candidates/batch-NN.json)run_in_background: true で並列に流す。マシン負荷を見つつ 3-5 体ずつラウンドで回してもよい。各エージェントは担当セッションを自分の context 内で読み、$OUT/candidates/batch-NN.json を書き、返り値の仕様は opinion-extractor.md の「返り値」節を参照。
全バッチの完了を待ってから、ls "$OUT"/candidates/batch-*.json | wc -l で batches/ のバッチ数と一致するか確認する。欠けているバッチがあれば、そのバッチだけ同じ手順で再実行する。
全候補 JSON をバリデートし、1 ファイルに集約してテーマ分布を出す。alias 辞書は実行のたびに実際に出た表記ゆれを見て育てる想定 (opinion-extractor.md の theme 例と語彙が乖離していないか、このタイミングで見ておく)。
python3 - "$OUT" <<'PY'
import json, os, sys, glob
from collections import Counter
out = sys.argv[1]
allc = []
for p in sorted(glob.glob(os.path.join(out, 'candidates', 'batch-*.json'))):
b = os.path.basename(p).replace('.json', '')
try:
d = json.load(open(p))
except Exception as e:
print('BAD JSON:', p, e); continue
for x in d:
x['_batch'] = b
allc.append(x)
# テーマ表記ゆれを寄せる
alias = {'命名哲学':'設計哲学', 'トラブルシューティング':'トラブルシュート',
'データ基盤':'データ基盤/パイプライン', 'データ基盤・パイプライン':'データ基盤/パイプライン'}
for x in allc:
x['theme'] = alias.get((x.get('theme') or '').strip(), (x.get('theme') or '').strip())
json.dump(allc, open(os.path.join(out, 'all-candidates.json'), 'w'), ensure_ascii=False, indent=1)
print('total candidates:', len(allc))
print('--- theme ---')
for t, c in Counter(x['theme'] for x in allc).most_common():
print(f'{c:3d} {t}')
print('--- confidence ---')
for t, c in Counter(x.get('confidence') for x in allc).most_common():
print(f'{c:3d} {t}')
print('contested:', sum(1 for x in allc if x.get('contested')))
PY
$OUT/all-candidates.json だけ を読み込む (生ログは読まない)。次を行い $OUT/OPINIONS.draft.md に日本語で書く:
## セクションにする。対話が偏っているドメイン (例: 特定のドメイン固有の分野) は独立セクションにしてよい。contested: true や矛盾する候補は、撤回・変遷として書くか落とすかを判断する。書式の目安 (実績のドラフト構成):
# OPINIONS.md
<一文の位置づけ>
<このファイルが何を蒸留したものか。ソース = ctx 索引の primary セッション N 本、
落としたもの = 一回限りの指示・コード片・雑談、である旨>
> 蒸留元の時期・分野の偏りに関する断り書き
---
## <テーマ>
### <一文で言い切った信念>
<補足 2-4 文。なぜそう考えるか、どの文脈で繰り返し現れたか>
- Evidence: 「本人発話の引用」(`<ctx_session_id 先頭8桁>`)
- Evidence: ...
ドラフトができたら、次の 3 点をユーザーに確認する:
$OUT/OPINIONS.draft.md を $WORKSPACE/.claude/OPINIONS.local.md へ配置する (mkdir -p "$WORKSPACE/.claude" してから)。この local 版が opinions-md-dotfiles スキルの入力になる。mktemp -d で作った $OUT に残す。ワークスペースには置かない)sessions.csv — primary セッション一覧 (event/msg 数付き)batches/batch-NN.txt — バッチごとのセッション ID 列candidates/batch-NN.json — 各バッチの抽出候補all-candidates.json — 集約済み候補 (統合フェーズの入力)OPINIONS.draft.md — 配置前のドラフトscripts/build-batches.py — CSV を event 数で 16 均等割りするビンパッカーopinions:opinion-extractor (プラグイン同梱カスタムエージェント) — フェーズ 2 の抽出サブエージェント本体