JRA重賞レースの予想・振り返り・ログ記録をこのリポジトリの評価体系(ベース点×係数+加算層・ルールゲート・荒れ度配分)で実行する。ユーザーが「#準備」「#収録」「#予想」「#更新」「#振り返り」「#集計」「#設計」の起動フレーズを使ったとき、およびレース名を挙げて「予想して」「振り返り」「回顧」「ボードで」「ログ追記」「◎は誰」「買い目」「オッズ更新」「馬場更新」など予想関連の依頼をしたら、内容の大小にかかわらず必ずこのスキルを使う。個別馬の評価照会、荒れ度やR値の計算、analyze.pyでの集計、ルール追加の相談もすべて対象。一般知識で予想を組み立ててはならない。
Install
npx skillscat add atoyr/keiba/keiba-prediction Install via the SkillsCat registry.
SKILL.md
keiba-prediction
このスキルはルーターである。予想の手順・ゲート・出力形式の正本はリポジトリ内にあり、ここには環境差分と絶対原則だけを書く。手順をこのファイルの記憶で代用しないこと。
最初にやること(毎回・省略不可)
プロジェクト指示_v3.mdを読む — 工程0〜12・ゲート・出力順序のすべてがここにあるlog/rules_master.csvを全行読む — 予想確定前のルールゲートの対象(statusが現行/暫定の行)- 工程が参照を要求するファイルを都度
references/から開く(評価ルール・コース補正表・荒れ度配分表・レース別傾向・騎手/血統ルール・脚質認定ルール・隊列シミュレーション手順・ボード出力ルール) - 起動ヘッダを出力する — (a) 読み込んだ手順ファイル名+版数、(b) 該当工程の全行チェックリストを空欄で先出し(
#予想=工程0〜12・冒頭で出走馬プロファイルの存在確認(無ければ本題より先に#収録を提案して中断)、#振り返り=V0〜V7でV4-0・V4.5・V6.5を独立行、#収録=種別がコース系ならC0〜C6・出走馬プロファイルなら『脚質認定ルール.md』§1〜§6の全頭実行、#準備=『週次運用スケジュール.md』第4項の9項目(収録ギャップ表・#収録プロンプト・実行計画表を含む。収録は検知と依頼文の生成までで実行しない))。「V0〜V7」等のまとめ宣言は禁止(中間工程の脱落を隠す)
Claude Code での環境差分
Claude.aiプロジェクト運用との違いはログの書き込み方だけ。手順自体は変えない。
- ログはファイルへ直接追記する:
log/races.csvlog/predictions.csvlog/bets.csvlog/rule_fires.csv。コードブロック出力→手動転記のフローは不要 - ログ追記後・応答確定前に
python3 log/validate.pyを実行し、追記したレースに関する ERROR が 0 であることを確認してから確定を宣言する(#予想#更新#振り返り共通)。ERRORが出たらその場で修正する。セッション冒頭の validate は前回分の事後検出でしかなく、中京記念2026では myomi_score 全16頭未記入が次セッションまで発見されなかった - 買い目確定前(ゲート②)は
python3 log/gate.pyも実行する。買い目系ルールの機械判定可能条文(R48(a)〜(d)・R49・R35。2026-10-02 に旧R23/R31/R36/R37/R42→R48、旧R24/R32→R49 へ統合)はスクリプトが判定し、LLMは裁量ルールの判定とFAIL時の理由記録(欠落理由=軸選定=)に専念する。GATE-FAILが残る買い目は確定しない。欠落理由=は 2026-09-21 以降 R40消し根拠=と同じ機械可読書式で書く(#<馬番>:cat=<閉じた語彙>:<事実タグ>:<自由文>・項目は;区切り。書いた事実タグ(妙味・final順位・本線)が predictions.csv と食い違うと validate.py が ERROR。書式はlog/README.mdが正本) - 追記前に各CSVのカラム定義と宣言タグ規約を
log/README.mdで確認する(列順・記録原則・「予想は最終版のみ」「全頭記録」「数値列空欄はゲートFAIL」、races.notes のband=/券種=/堅実穴=/予算=/計画総額=、rule_fires.notes のas_of=) - 係数・加算層は分解して記録する(記録原則10):
coef_breakdown=枠0.85;適性1.10(積が composite_coef)、additive_breakdown=R+2.0;騎手+1.0(和が additive_total・符号必須・加算層なしはなし)。合成後の1値だけではアブレーション不能になるため validate.py が積と和を照合する - 適性タグを
base_breakdownに併記する(記録原則12・2026-08-17〜):5走距離帯=1600:稍重:6着:G3;1600:良:1着:3勝;…(書式距離:馬場:着順:格・2026-08-17拡張) /父=<種牡馬名>/母父=<種牡馬名>を/区切りで。列は増やさない。未経験の距離帯・コースの適性は血統でしか埋められないが、その判定入力がpredictions.csv に存在しなかったため(母父187行中1行・5走距離帯0行)機械化した。未経験は「不利」でなく「未知」=±0も正当で、R38は加点でなく記録を強制する。取得できなければ父=取得失敗(推測で埋めない)。validate.py が欠落をWARNで検出する - 判断を構造化タグで書き、事実タグと照合させる(遵守検証・2026-10-03〜・ロードマップ§11):工程12 の追記後に
python3 tools/tag_profile.py --slug <race_id>を実行し、プロファイル md から機械脚質=距離帯経験=実距離経験=をbase_breakdownに付ける(手で書かない)。LLM は判断タグ適性行=<係数表の行名>:<事実タグ…>(適性係数を使った馬)・10-7=適用|不適用:<根拠>(ペーススコア≧7)・減点根拠=#<馬番>:<実測|自己実績n|未経験>:<内容>(R34)を書く。書いた事実がプロファイルと違う・距離帯経験ありの馬を「1200m出走0」等で未経験扱い・同確率なのに 10-7 を適用して反転根拠=なし・R34 の有効要素が2未満、は validate.py が ERROR。結果確定後に見つかったら文面を直さず races.notes の逸脱=に記録する。書式はlog/README.md「判断タグ」節が正本 - 振り返りでは
last_3f/corner4_posを全頭転記する(jra_result.pyの出力にある)。「上がり上位なのに着外=展開不利の好走」を機械抽出するための入力で、analyze.pyが次走加点候補として出力する - rule_fires は
capture(予測方向の当否)とoutcome(損益寄与)の2軸(記録原則11)。capture は 的中/空振り/逆行/方向なし で、rules_master.direction=手続きの行は必ず方向なし。R19の降格判定は capture軸(逆行≧的中)で行う - ナレッジ更新(ルール追加・傾向追記・馬メモ)も該当ファイルへ直接編集してよいが、編集内容は必ずチャットで要約提示し、コミットはユーザーが行う
- 集計は
KEIBA_LOCAL=1 bash tools/claude_run.sh(作業コピーで validate+gate+analyze+backtest一括。
リポジトリ外から最新mainを取りに行く場合のみKEIBA_LOCALを外す)。個別実行はpython3 log/validate.py/python3 log/gate.py/python3 log/analyze.py/python3 log/backtest.py/python3 log/calibrate.py - 予想・振り返り・集計・ルール相談の開始時は、依頼がなくても最新mainを取得して validate と指示正本の同期チェックを先に実行する(指示「自動トリガー」節に従う)
- 出走馬プロファイルは
python3 tools/build_profile.py --netkeiba-id <12桁> --slug <race_id> --name <レース名>で生成する(2026-09-11〜)。全頭の近5走・父母父・斤量・騎手・脚質機械認定・末脚指数・**5走時計=(時計/上がり順位/頭数/着差・v2.1/2026-09-20〜)**を1回で出す。LLM は生成物の差分レビュー(未確定馬・ハナ争い・不一致)と主観分類の確認だけを行い、馬1頭ずつ取得しない。必須列が欠けて止まったら「取得失敗」として報告する。過去走の単勝1倍台の走数は JSON にだけ保存して md には出さない(ブラインド評価)。振り返りV6でpython3 tools/tag_odds1x.py --slug <race_id>を実行し、base_breakdownに1倍台=を付ける(仮説32・記録専用・2026-09-15〜) - 印 v4 の paper 並走(2026-09-12〜):
python3 log/mark.py --slug <race_id> --templateで全頭シミュレーション表の雛形を出し、LLM は base・勝ち筋・崩れ筋・sim_score・加算4項・妙味・tags だけを埋める(オッズ・人気を見ずに埋める。根拠欄に人気・オッズ由来の語があると G-O で止まる)。python3 log/mark.py --slug <race_id>の ERROR が 0 になるまで表を直し、--writeで predictions.csv に反映してから validate・gate を回す。並走中の正は従来工程で、v4 は比較記録(README「印 v4 の paper 並走」) - レース結果(着順・配当・ハロンタイム・コーナー通過順・発表馬場)は
python3 tools/jra_result.py --date <YYYY-MM-DD> --course <場> --race <R>で取る。JRA公式の一次ソースで、振り返りV0はこれで確定する。goingを確定したらraces.notesに馬場ソース=を残す(欠けると validate.py がWARN)。含水率・クッション値は結果ページに無いので取れなければ「取得失敗」 - オッズ・出馬表など他の取得は
python3 tools/polite_fetch.py <URL> [--data "cname=..."]を優先する(キャッシュ・ホスト別レート制限・robots遵守つき。生のWebFetch連打をしない)。403等の取得拒否は回避せず、Yahoo競馬denma / netkeiba へ切り替える。取得元の優先順位と失敗時の扱いはプロジェクト指示_v3.mdに従う - 指示・工程・構成に触れる編集をしたら、
README.mdと本SKILL.mdの該当箇所も同じ編集で更新する(三点同期)。CSVのタグ規約に触るならlog/README.mdも同期する - 振り返りは references/振り返り手順.md のV0〜V7に従い、品質ゲート全✓で完了とする。V4 の前に V4-0 遵守監査(判断タグ照合の確認・逃げ道つき条文の再判定・係数表と10-7の適用確認。訂正は
監査訂正=、台帳外の逸脱は逸脱=)を行う。V6.5でreflection/<日付>_<レース名>.md(## サマリー+13セクション)を必ず書き出す(mdはCSVの派生成果物で正本ではない。サマリーの「核心」では原因を独立要素に分解し相互独立かを明記する) reflection/は書き出し専用。工程の入力として読まない。 予想・集計・ルール判定・原因分析の根拠はlog/配下CSVと一次ソースだけから取り、回顧mdを引用しない。開くのはユーザーが回顧そのものを求めたとき(照会・改訂・書き出し)に限る
絶対原則(環境を問わず)
- 計画宣言(工程0)を出力してから予想に着手する。 レース種別・レジーム・参照ファイル・特記ゲートの4行宣言なしで工程1以降へ進むのは禁止
- ゲート②の対象は台帳の
scope列で決まる(買い目/両方の行+status=暫定の全行)。該当場面が無い行もfired=0で記録する。記録が無いと validate.py がチェック漏れとしてWARNを出す - ルールゲート(rules_master全行チェック)を通ってから印・買い目を確定する。 followed=0 が残る状態での確定は禁止。各発火ルールのPASS/FAILには馬名・数値入りの根拠1行を添える
- 検算はプロンプト側で指示しない:式と final の不一致・点数×単価≠金額・宣言と実装の乖離は
validate.pyが機械検出する。応答内で再計算の実施を宣言しない(裁量調整は calc_gap として理由をnotesに残す) - 工程0〜12は1応答で完走する。 途中で許可を求めて止まらない。停止はユーザーにしか出せない入力が必要なときのみ(不足項目を明示して終了)
#更新の再評価範囲を超えない。 「係数のみ/係数+紐/全面」の宣言が触ってよい範囲の上限。馬場やオッズが動いたこと自体は買い目を組み替える理由にならない(R08)。範囲外が必要なら実行せず「範囲外につき要#更新 全面」と提示して止める- 依頼された工程セットを超える作業をしない。 ナレッジ追記・ルール提案・別レースの着手は本題の完走後に回す
- 出力は簡潔に。 各馬評価は1頭1行の表、展開・隊列は各パターン3行以内、ルールゲート結果はcsv形式のみ。「次に〜します」等の予告文を書かない。自分の途中出力の訂正は、印・買い目・ログ値が変わる場合のみ明示する
- 反証パス:ゲート①前に◎○の「最も強い不成立シナリオ」を1行ずつ挙げ、展開・馬場シナリオでの担保を確認する。反証単独では格下げしない(独立根拠2つ要件は不変)
- 独立検証は実購入する重賞では必須(2026-08-03に任意から格上げ)。『予想評論_エージェントルール.md』を別チャットで、予想セッション直後〜買い目確定前に実行する。評論で割れたこと自体は
#更新の再評価範囲を広げる理由にならない(R08)。paperでは任意 - 結果の転記はJRA公式の検索確認後のみ。 記憶からの転記は過去に誤記事故を起こしている。予想時の数値もセッション内の検索・計算結果に紐づくものだけを書き、裏付けなしは「未検証」と明示する
- データ取得に失敗したら「取得失敗」と明示し、推測で埋めない
- 荒れ度はベース点・印の序列に触れない(買い目配分にのみ作用)
- 予想ボードを求められたら
references/予想ボード_出力ルール.md+assets/race-prediction.htmlに従う(全頭掲載・predictions.csvと数値一致が確定条件) - 回答の最後に「馬券は自己責任、予算は無理のない範囲で」を添える
- 買い目確定時に券種ごとの概算的中率・損益分岐配当を出す。 算出法は
references/荒れ度_買い目配分表.md第5項。オッズ未取得なら「未算出」と明記し推測で埋めない。数値の提示のみで、これを理由に券種を採否しない(閾値化は n=10 レビュー)