| name | mystery-novel |
| description | 推理SF小説を一気通貫で書き上げるオーケストレータ。ユーザーの世界観設定(舞台種別など)を起点に、世界観構築→登場人物設計→事件/トリック設計→執筆→含意化(挑戦前の推論間引き/手掛かりは残す)→並列監査→読者検証を自動連結し、フェアプレイ本格推理SF(1万字以上)を完成させる。各フェーズは mystery-world / mystery-characters / mystery-case / mystery-audit / mystery-readers として個別実行も可能。監査fail時は修復ループで再生成する。「推理小説を書いて」「ミステリを書いて」「クローズドサークルもの」等の依頼で使う。 |
mystery-novel — 推理SF小説オーケストレータ
ユーザーの世界観設定を起点に、5フェーズ+執筆+含意化([4.5]推論間引き)を連結して推理SF小説を完成させる。
各フェーズの詳細プロトコルは個別スキルの SKILL.md に従う(このオーケストレータは
それらを順に実行し、共有プロジェクトディレクトリで状態を引き継ぐ)。
入力
- 世界観設定(必須・自由文)。舞台種別中心。例:「温泉旅館」「無人島」「寝台列車」
「軌道ステーション」「ヴィクトリア朝ロンドン」。時代・国・SF度・トーンのヒントがあれば尊重。
trick_complexity(任意・1〜5、既定 3)。トリックの難解度レバー。
「簡単に」「軽め」→1〜2、「本格」→3、「複雑に」「難解に」「凝ったトリック」→4〜5 と解釈。
ユーザー指定を最優先。詳細は ~/.claude/skills/mystery-case/references/trick-complexity.md。
- mode(任意)。
historical(1800年代後半など)か sf(既定)。時代指定から自動判定可。
causal_loop(任意・boolean・既定 false)。true なら因果ループ(ブートストラップ
パラドックス=起源なき情報/物体/行為の自己成立)を設計に組み込む。
- ユーザー明示が常に最優先。自動判定は明確語のみ:「ブートストラップ(パラドックス)」
「因果ループ」「起源のない◯◯が自己成立」等 → true。
- 曖昧語では自動発動しない:「タイムループ」「未来からの手紙」「時間もの」等は
繰り返し型/リセット型(F7 非互換=対象外)や通常のタイムトラベルを指し得るため false の
まま進め、最終報告で「
causal_loop=true を明示すれば閉じた因果ループとして設計する
(繰り返し型タイムループは対象外)」と案内する。
- historical モードとの併用不可。指定が衝突したらエラーとしてユーザーへ報告し停止
(novum が実在技術限定のため)。
- 出力先 slug(任意)。未指定なら作品タイトルから生成し
~/mystery-novels/<slug>/。
事前に必ず読むもの(共有仕様=単一情報源)
references/data-contract.md(ファイル契約・slug・ネタバレ境界・挑戦マーカー・meta.json・settings)
references/knox-and-fairplay.md(Knox 1-10 + SF則 F1-F5。causal_loop 時は F6-F8 も)
references/writing-guide.md(執筆ステップの構造・字数・フェアプレイ手掛かり配置。
causal_loop 時は「因果ループの書き方」も)
~/.claude/skills/mystery-case/references/trick-complexity.md(トリック複雑度レバー)
- causal_loop 時のみ:
~/.claude/skills/mystery-case/references/causal-loop-design-guide.md
パイプライン
各フェーズは対応スキルの SKILL.md を読み、そのプロトコルを共有プロジェクトに対して実行する。
[0] 準備 slug決定・~/mystery-novels/<slug>/ 作成・meta.json 初期化(created_at=date実値)
[1] 世界観 → mystery-world ⇒ world.json
[2] 登場人物 → mystery-characters ⇒ characters.json (探偵1/被害者1/加害者1/候補5以上)
[3] 事件設計 → mystery-case ⇒ case.json + characters.json更新
[4] 執筆 → (本スキルの執筆ステップ, writing-guide.md準拠) ⇒ novel.md (1万字以上, 挑戦マーカー必須)
[4.5] 含意化 → (本スキルの含意化ステップ, subtext-pass-guide.md準拠) ⇒ novel.md上書き (挑戦前の推論を間引く/手掛かりは残す)
[5] 監査 → mystery-audit ⇒ audit/summary.json ──fail──┐
│ 修復ループ
┌───────────────────────────────────────────────────────────┘
▼
修復: blocking_findings に応じて [3]設計 or [4]執筆 を再実行 → [4.5]含意化 → [5]再監査 (iteration++)
最大3周。3周しても fail ならユーザーへ未解決 findings を提示して停止。
▼ pass
[6] 読者検証 → mystery-readers ⇒ readers/aggregate.json (solve_rate)
[7] 最終報告 meta.json 集計・成果物パス一覧・solve_rate/フェアネス所見を提示
ステップ[0] 準備
- data-contract.md に従い slug を決定。
mkdir -p ~/mystery-novels/<slug>。
- 既存ディレクトリなら meta.json を読み、
status を見て未完フェーズから再開(冪等)。
- meta.json を初期化/更新。
settings.mode・settings.trick_complexity(未指定なら3)・
settings.causal_loop(未指定なら false)を記録。created_at は
date -u +%Y-%m-%dT%H:%M:%SZ の実値。
settings.causal_loop == true かつ settings.mode == "historical" はここでエラー停止
(ユーザーへ SF モード必須と報告)。
ステップ[1]〜[3], [5], [6]
各々 ~/.claude/skills/mystery-{world,characters,case,audit,readers}/SKILL.md を読み、
そのプロトコルを当該 slug に対して実行する。各フェーズ完了時に meta.json の対応 status を更新。
(ステップ1のみユーザー設定を渡す。2以降は完全自律。)
- ステップ[1] 世界観には
settings.causal_loop を渡す。true なら mystery-world は
レトロコーザル novum(enables_retrocausation:true・F7/F8 準拠の rules/limits)を必ず設計する。
- ステップ[3] 事件設計には
settings.trick_complexity と settings.causal_loop を渡す。
mystery-case は tier に応じた case.json.trick(見破るべき偽装・偽の解決)を設計し
(A7「単なる実行」を禁止)、causal_loop 時は case.json.causal_loop ブロック
(単純閉路・状態閉包・L1-L6 準拠)も設計する。
- ステップ[5] 監査は D9 trick_quality で偽装の有無・複雑度tier整合を検査する。
causal_loop 時は D11 causal_loop が条件起動し、check_causal_loop.py の preflight と
本文照合(F6-F8/L1-L6)を行う。settings と case の宣言不一致は blocker。
- ステップ[6] 読者検証は tier 別目標 solve_rate帯 でフェアネスを判定する。
causal_loop 時は
loop_seen_rate(ループ看破率)も rubric 採点で集計する。
- 監査/読者で「複雑度未達(too_easy・偽装なし)」が出たら修復ループでトリックを強化する。
ステップ[4] 執筆
references/writing-guide.md に厳密準拠して novel.md を執筆する:
- 入力: world.json + characters.json + case.json(真相を踏まえて書く)。
- 構造: 導入→状況→事件→捜査→撹乱→手掛かり出揃い→
<!-- CHALLENGE-TO-THE-READER -->+
## 読者への挑戦→解決編(deduction_chain準拠)→動機開示。
- clue_ledger の全 clue を、指定 planted_at(挑戦前)の本文に必ず配置する。
- 本文1万字以上(空白除く・writing-guide.md / audit D5 の計測基準)。
- voice(各人物の口調)を守る。挑戦後に新証拠・新登場・新SF設定を出さない。
- 執筆後、
python3 ~/.claude/skills/mystery-audit/references/count_chars.py "<proj>/novel.md" で
字数を自己計測し、不足なら密度を上げて増補。
- meta.json の
phases.novel.status="done"、char_count を記録。
ステップ[4.5] 含意化パス(推論の間引き)
references/subtext-pass-guide.md に準拠し、[4]で完成した novel.md の挑戦マーカー前の本文
から「書かれた推論・含意の明示」だけを薄くし、観察可能な手掛かりは残す(fresh-eyes revision)。
[4]の基準(writing-guide.md「情報の出し惜しみ」)を完成稿に対して強制する第二の眼。読者の
作業を『読む』から『解く』へ戻し、推論の距離を広げる(対照実験: 一発書きの[4]だけでは
solve_rate=1.0 に張り付く)。
- 最上位ルール = フェアプレイ > 難易度。薄めるとその手掛かりが再構成不能になるなら薄めない。
観察事実(clue_ledger の各 clue)は必ず残し、消してよいのは「(a)結論の先食い・(b)重要性フラグ・
(c)過剰決定の冗長・(d)derivable な told・(e)保留パターンの偏在」の5類型のみ。
- 解決編(挑戦マーカー後)は不可侵、設計 json(case/characters/world)は不変。
- 上書き前に
.diffsnap/pre_subtext へ退避し、機械ゲート(count_chars.py ≥1万字・マーカー存置・
挑戦カット再生成・check_prose_tells.py major=0・全 clue の観察事実存置)不通なら巻き戻す
(難易度より公正を優先)。
- 記録:
review/subtext_pass.json(★ネタバレ=writer/auditor のみ)と meta.json の phases.subtext
(status・advisory_before/after)。字数が変動するので phases.novel.char_count も更新。
- 意味レベルのフェアネスは後続 [5] 監査の D4 fairplay_clues / D10 suspense(causal_loop 時は
D11 も)が保証する。二重監査はしない。
修復ループ(監査 fail 時)
audit/summary.json.blocking_findings を重大度順に読む。
- 原因の所在で分岐:
- 設計の問題(矛盾・動機薄弱・Knox違反・トリック破綻・不要殺人)→
mystery-case を
再実行して case.json を修正(必要なら characters.json も)→ 執筆[4]やり直し。
- 本文の問題(手掛かり未配置・字数不足・voiceブレ・挑戦後の後出し)→ 執筆[4]のみ修正。
- いずれの分岐でも
novel.md を改稿したら [4.5] 含意化を再実行してから再監査する
(改稿で推論漏れが復活し phases.subtext が stale になるのを防ぐ)。
- iteration を上げて
mystery-audit を再実行。
- 最大3周。3周しても overall=fail なら、未解決 blocking_findings を整理してユーザーへ提示し停止
(無限ループ防止)。各周の要点を meta.json の
repair_history に追記。
- 修復の不変条件(causal_loop 使用時):
settings.causal_loop・causal_loop.used・
novum_id・bootstrap_artifact.kind を修復で変更・削除しない(used:false に倒して
D11 を回避する修復は禁止=機能を削除して直すことの禁止)。ループ自体が直せない場合は
未解決としてユーザーへ提示する。
- 含意化[4.5]の不変条件: [4.5] は
novel.md の挑戦前本文のみを編集し、clue_ledger の
観察事実・<!-- CHALLENGE-TO-THE-READER --> マーカー・字数下限を保つ。手掛かりを削除/
曖昧化して難しくするのは反則(Knox#8/#9)。フェアプレイを崩さずに薄められない箇所は
そのまま残す(フェアプレイ > 難易度)。設計 json は触らない。
クロスモデル監査(CLAUDE.md 原則4)
監査(ステップ5)と読者検証(ステップ6)では、それぞれ最低1つの subagent_type:"codex-reviewer"
エージェントを並列に含める(単一モデル系統の盲点を排除)。詳細は各スキルの規定どおり。
最終報告(ステップ[7])
- 成果物パス一覧(world/characters/case/novel/audit/readers)。
- 監査: overall=pass、各次元 verdict、char_count。
- 読者検証: solve_rate、fairness_signal、推測分布、見落とされた手掛かり。
- 一言講評(フェアかつ自明でないか=理想帯 0.1〜0.6 に収まったか)。
完了条件(goal 全充足)
- 5スキル分の成果物が揃い、novel.md が1万字以上+挑戦マーカー有り。
- audit/summary.json.overall == "pass"(矛盾なし・動機妥当・Knox順守・不要殺人なし・非安直)。
- readers/aggregate.json に10名以上の読者の solve_rate が集計済み。