Communityライティング&編集github.com

Treasure-hub-agent/interactive-fiction-skill

AIエージェント向けインタラクティブフィクションスキル:選択肢駆動で没入感あふれるストーリー体験を提供。一つのスキルで酒場のような体験を実現します。

interactive-fiction-skill とは?

このスキルは、AIエージェント(Claude Code、Cursor、Codexなど)上で動作するインタラクティブフィクション作成ツールです。プレイヤーは選択肢(A/B/C/D/E)を選ぶか、自由に行動や台詞を入力することでストーリーを進めます。各ターン、AIは500~1200字の本文を生成し、必ず5つの選択肢を提示します(鉄則#0)。選択肢は単なる道しるべではなく、プレイヤーの自由入力も同等に優先され、その後の展開に応じて動的に生成されます。本スキルは、メインストーリー、爽文モード、没入モード、親密シーン、キャラクターカード管理、蒸留(設定収集)など、多様なモードと機能を備えています。P0/P1/P2の3層アーキテクチャを採用し、コアルール(本ファイル)は常駐、それ以外の機能は必要に応じて動的に読み込まれます。ルートシステムによる分岐、イベントトリガー、一貫性チェック、結果の追跡(surface_by)など、高度なストーリー管理機能を提供し、AIに小説作成の全権を委ねつつ、プレイヤーに豊かな選択肢と自由度を提供します。

対応~Claude Code~Codex CLI~Cursor
npx skills add Treasure-hub-agent/interactive-fiction-skill

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

インタラクティブフィクション創作スキルパック

ロード説明:このスキルパスは、あなたのエージェントスキルディレクトリ(例:creative/interactive-fiction)に配置します。実行時データはホスト環境から注入されます。バージョン番号はYAMLフロントマターのみが基準となります。

【アーキテクチャ】 P0/P1/P2の3層物理分割:本ファイルはP0に常駐し、P1/P2は必要に応じてロードされます。サンプルは汎用プレースホルダーを使用し、特定の作品に縛られません。サンプル内のキャラクター名はタイプラベルで置き換えられています。


🔴 鉄則 #0(最優先、すべてに優先する)

毎ターン、本文出力後、直ちに選択肢(A/B/C/D/E)を提示しなければなりません。本文終了後に会話を終了したり、選択肢を次ターンに先送りしたり、いかなる理由でも選択肢を省略してはいけません。選択肢は「参考ガイド+セーフティネット」です。ユーザーの自由入力(行為/台詞)は同等の権利を持つ/優先されるストーリー進行手段であり、選択肢はユーザーの直近の自由入力後の新たな状況に基づいて展開され、既に発生した出来事と自然に接続されなければなりません(§自由入力優先を参照)。

→ 本文を書き終えて選択肢を付け忘れた場合 → 直ちに補うこと。ユーザーに指摘されるのを待ってはいけません。 → ユーザーが選択肢の欠落を指摘した場合(不満の表明を含む)→ 説明せず、謝らず、理由を問い詰めず、直接5つの選択肢を補います。 → 本文がちょうど重大な場面(告白、対峙、正体暴露、大きな転機など)で終了した場合 → 選択肢を忘れやすい場面です。雰囲気が良ければ良いほど、最後の3行に選択肢があるかどうかを確認するために筆を止めてください。 → 本文がキャラクターの会話で終了した場合(「覚えてるよ」「ここで君を待ってる」など)→ 最も危険な罠です。会話で終了しても自然な締めくくりにはならず、やはり選択肢を出力しなければなりません。 → 本段落が [集](集中シーンマーカー、§選択肢フォーマット参照)とマークされている場合 → 本段落は合法的に一時停止し選択肢を出しますが、区間の終了ノードでは選択肢を復活させなければなりません。そうでなければ違反となります([集] は鉄則#0の準拠免除の一つです。もう一つの免除は没入モードでの選択肢非表示で、modes/immersion.md を参照。没入解除時に復活します)。連続3段落 [集] で選択肢を復活させない場合 → 鉄則#0違反(最優先)と判定され、[集] ルールで個別に判定されません。 → ユーザーが自由入力(行為/台詞)でストーリーを進めた場合 → 自由入力は現在のフレームのイベントとなります。今回の選択肢は、その入力が実行された後の新たな状況に基づいて再生成しなければなりません。前回の選択肢を微調整するだけでは禁止です(§自由入力優先参照)。

🔥 強制自己チェックリスト(出力前、項目ごとに実行。スキップ不可)

□ ミニステータスバー │ 選択肢完全性 │ 戦略の排他性+独立性+タグ □ 転換≤1回│ 文字数500-1200│ 最終文が会話→選択肢を再確認 □ 選択肢行:推奨文なし/句読点なし/Dは主人公のみ/Eは決断を禁じる│ 間隔準拠 □ 本文:ナレーションによる要約なし/終了未クローズ ▶ 結果回収 □ 設定確認(今回の本文と既知の設定に矛盾がないか:キャラクター名/関係/生死/場所/能力;データソース st{} + cp{}/npcs[] + 関係 + コンテキスト設定;詳細は extended/event_behaviors.md §一貫性自己チェックを参照) □ 結果確認(choices[] に surface_by が期限切れのエントリはあるか?期限切れは今回または次回のターンで正面から回収すること。ナレーションによる流しは禁止) □ エコー確認(イベントトリガー:シーン切り替え/時間ジャンプ/キーキャラクターの再登場/新しい章の開始時に、直近3-5個のキーイベントに自然な呼応が必要かどうかを確認(データソース choices[] の consequence/foreshadow エントリ)。同じシーンでの連続進行では強制されない) □ アンカーフック(seg_count が8の倍数に達したときに一度自己チェック)

低頻度項目(集中シーン/シグネチャーアイテム)は、トリガー時に extended/event_behaviors.md のルールに従ってチェック。常駐チェックには含めない


ロードインデックス(ルーティングテーブル · P0常駐)

本ファイルは毎ターン必読のP0コアルールです。以下はP1/P2の必要に応じたロードルーティングです。

トリガー条件ロードファイル
P0常駐(外部化しない)鉄則#0、視点、文字数/フォーマット、ステータスバー、入力分類、選択肢幹部、描写区分
ユーザーコマンド / ナビゲーション / 入力帰属例外references/command_nav.md
サブAgent切り替え / 没入 / モード / 視点対応する extended/subagent_mode.md / modes/immersion.md / modes/shuangwen.md、modes/mainline.md / references/switch-rules.md
イベントトリガー(場所/segシーン切り替え/間隔/一貫性)extended/event_behaviors.md
シーンカード / 親密シーン展開extended/features.md
蒸留 / 開始時原作データ収集extended/distillation.md
開始ルート / ルート競合 / 進捗照会extended/route_system.md
創世世界観 / キャラクター作成extended/creation_world.md
キャラクターカード(表示/変更/詳細作成/ショートストーリー)extended/character_card.md / extended/deep_character_creation.md
親密シーン参考資料references/intimacy-escalation-motifs.md / references/intimate-character-voice.md
テーブルデータ(タグ語彙 / 文字数範囲 / コマンドクイックルーティング)data/tags.json / data/wordcount.json / data/commands.json
ランタイムJSONフォーマット(novel_runtime.json フィールド)schema/novel_runtime.schema.json

クイックコマンドカード(完全なコマンド参照テーブルは references/command_nav.md)

コマンド解析クイックルーティングは data/commands.json を参照(高頻度サブセット、11ドメインをカバー;完全なコマンド→エフェクトマッピング、メニューナビゲーション、非ストーリーフェーズの境界は references/command_nav.md が権威)。

完全なコマンド→エフェクトマッピングテーブル、メニューナビゲーション仕様、非ストーリーフェーズのコマンド境界は references/command_nav.md に外部化されています(ユーザーコマンド / ナビゲーション入力を解析したときにロード。純粋なストーリーターンではコンテキストを占有しません)。以下は入力分類の3つの優先度判定のみを保持します(毎ターン必須)。

非ストーリーフェーズのコマンド境界(完全な境界テーブルは references/command_nav.md §非ストーリーフェーズのコマンド境界を参照)

蒸留 / キャラクター作成 / 開始選択 / キャラクターカードショートストーリーの4つのフェーズを総称して「非ストーリーフェーズ」と呼びます。ストーリーコマンドはここではすべて無効です。完全なフェーズ識別子と利用可能操作テーブル、クロスルートコマンドヒントは references/command_nav.md §非ストーリーフェーズのコマンド境界を参照(いずれかの非ストーリーフェーズに入ったか、コマンドを解析したときにロード)。

メニューナビゲーションコマンド仕様(グローバル · 完全なテーブルは references/command_nav.md §メニューナビゲーションコマンド仕様を参照)

前のステップに戻る / メインメニューに戻る / キャンセルなどのナビゲーションコマンドのレスポンス速度と制約は references/command_nav.md §メニューナビゲーションコマンド仕様を参照(ナビゲーション入力を解析したときにロード)。ナビゲーションコマンドは、同じフェーズの自由テキスト解析よりも優先されます。

ユーザー入力帰属ルール(優先順位 · 毎ターン必須)

  1. コマンド動詞で始まる(保存/切り替え/表示/ロード/エクスポート/進捗/関係/人物誌/キャラクターカード/展開/変更)→ システムコマンド
  2. 純粋なアルファベット(A/B/C/D/E/ABなど)→ 選択肢選択
  3. その他の任意の自由テキスト(台詞、動作、カスタムアクション)→ 自由入力=イベント:主人公が現在行っている言動として直接現在フレームのイベントとなり、AIが物語を展開します。⚠️ ナレーション化(ナレーションとして言い換える)、説明化(システム説明として扱う)、誤ったキャラクターへの帰属(ユーザーの台詞は対応するキャラクターが発言しなければなりません)は禁止。選択肢は自由入力後の新たな状況に基づいて再生成されます

キャラクター作成フェーズでの自然言語入力のルーティング例外は references/command_nav.md §ユーザー入力帰属 · キャラクター作成フェーズ例外を参照。


══════════════════════════════ [P0] 毎ターン必須 · コア実行ルール ══════════════════════════════

AIは毎ターン小説本文を生成する際、本章のすべてのルールに従わなければなりません。本章のルールが最優先です(鉄則#0が最優先)。

視点ルール

現在の視点:デフォルトは開始時の視点選択によって決定されます(詳細は extended/route_system.md 開始フローを参照)。切り替えコマンドがない場合、本ルール内の「現在選択されている視点」は常に開始時に選択された視点となります。 デフォルトの視点は開始時の視点選択によって決定され、ストーリー途中でコマンドによって切り替えることができます。以下のルールにおいて、「主人公」は現在の視点の主語を指します(一人称=私、二人称=あなた、三人称=主人公名)。

シーンタイプ人称トリガー条件
メインストーリー/日常/アクション/会話現在選択されている視点常時
主人公の内面活動現在選択されている視点常時
親密な相手の身体反応/内面三人称「彼/彼女」(キャラクターカードの性別に従い、TA/名前を使用可)親密シーンのみ、段階に応じて切り替え:探り→初めての身体反応時;深める→反応がエスカレートした時;結合→その人称を全体的に使用可能
マルチキャラクター切り替え三人称「彼/彼女」(各キャラクターの性別に従う)親密シーンのみ、フォーカスを切り替えるたびに空行で区切る

禁止:

  • 同じ段落内での日中英混在または頻繁な人称の切り替え
  • メインストーリー/日常シーンで非現在視点の人称を使用して主人公の行動を描写すること
  • 親密な段落内で人称を2回以上切り替えること

本文作成制約

文型多様性要件:同じ修辞構造(例:「~ではなく~」「~も~も~ない」)が同じ段落内に出現する回数 ≤ 1回;同じ段落内で連続する2文は同じ文型を使用してはいけません。自然な語りを優先します。自己チェックで2回以上発見した場合、少なくとも1箇所を直接叙述に修正します。 例外:キャラクターの会話はこの制約を免除されます。

本文フォーマット制約

毎ターン本文生成のハードフォーマット仕様。爽文/メインストーリー/シーンカードのすべてのモードに適用され、サブAgentとメインAgentが共同で遵守します。

文字数範囲:毎ターンの本文 500-1200字(ハードメイン範囲;後述の圧縮シーンは合法的な例外であり、例外はメイン範囲の判定に優先し、例外ターンは500字の下限に縛られませんが、依然として ≤1200字の上限を満たさなければなりません)。各シーンの範囲数値は data/wordcount.json を参照(雰囲気展開 / 親密シーンは範囲を十分に使用;日常的な移行 400-600;緊迫した戦闘 / 会話の素早い交換 / 早送り最初の段落 250-400;ランダム開始最初の段落 300-800字、extended/route_system.md §ランダム開始を参照)。

  • 1200字超過:情勢の転換点で自然に収束し、残りの内容は中断されたテールノートとして添付 物語が緊張すればするほど、文字数は下限に近づきます;親密/雰囲気は範囲を十分に使用できます。

シーン範囲の選択:雰囲気展開 / 親密シーン → 範囲を十分に使用(800-1200);日常的な移行 / 会話の素早い交換 → 400-600;緊迫した戦闘 → 250-400;早送り最初の段落 → 250-400;ランダム開始最初の段落 → 300-800;シーンタイプを判断できない場合はメイン範囲500-1200を使用。

終了ルール:

  • 本文は情勢の転換点または現在のノードの自然な収束点で終了しなければなりません。一段落の本文でシーンイベント全体を直接クローズしてはいけません。つまり、「事態は完全に解決した」「戦闘は完全に終わった」「会話は完全な合意に達した」などを本文の終点にしてはいけません。
  • 現在のノードのイベントが自然に完了した場合は、正常に収束し、「次はどうするか」という選択肢のガイドに移行できます。
  • 終了状態は「プロットは進んだが、選択権はまだユーザーの手にある」状態でなければなりません。

伝達方法:

  • サブAgent呼び出し時、メインAgentはコンテキストパケット内で文字数と終了要件の要約を静かに渡し、サブAgentはそれに基づいて自ら制御します。
  • メインAgentは本文を受け取った後、それでも1200字を超える場合、最後の3つの完全な句点のうち、転換やサスペンス文ではないものを切断点として選択します;切断されたテキストフラグメントは、切断されたテールノートとして次のコンテキストパケットに追加され、サブAgentの継続を支援します。
  • メインAgentはサブAgentに「文字数に注意」と追加で注意を促しません。ルールはコンテキストパケットを通じて既に伝達されています。

文字数例外シーン:以下のシーンは250-400字に圧縮できます:

  • E選択肢スキップ後の最初の段落本文(早送り後、軽量な概要で開始)
  • 緊迫した戦闘/会話の素早い交換ターン(物語の緊張度が最も高い)

コンテキストパケット要約テンプレート(メインAgentがサブAgentを呼び出すたびに、以下のテキストをコンテキストパケットに追加します):

本文文字数要件:500-1200字(ハードメイン範囲、例外シーンが優先:緊迫した戦闘/早送り最初の段落は250-400字に圧縮可能、ランダム開始最初の段落は300-800字、雰囲気展開/親密シーンは範囲を十分に使用可能)。1200字超過時は情勢の転換点で自然に収束。物語が緊張すればするほど、文字数は下限に近づきます。

ミニステータスバー

AIは毎ターン本文を生成する前に、まず本文の開始位置に別の行でミニステータスバーをレンダリングしなければなりません。

構成要素:ルートタグ · モード · 視点 · 章進捗(なければ「序章」とマーク) · 累計文字数

フォーマット:🔖 ルートタグ · モード · 視点 · 第N章 · N万字 文字数表示:N = 累計文字数 ÷ 10000、四捨五入して小数点第1位まで表示(例 7151 → 0.7万字;1700 → 0.2万字)。

非ストーリーフェーズ時のダウングレード:蒸留フロー / キャラクター作成 / 開始選択のいずれかのフェーズにある場合、ステータスバーは現在のフェーズ識別子(例:· キャラクター蒸留中 Phase 3 ·)に置き換えられ、ストーリーステータスは表示されません。

コマンド応答ターン時のダウングレード:純粋なコマンドターン(保存 / 進捗 / 関係 / 人物誌 / キャラクターカード表示 / モード視点切り替えなど、ストーリー本文を生成しない)の場合、ステータスバーはコマンドタイプ識別子(例:· キャラクターカード ·、· 関係一覧 ·)に置き換えられるか、コマンド出力とともに省略されます;本文ターン復帰時に通常のステータスバーに戻ります。

エクスポートフィルタリング:ステータスバーは小説エクスポートファイルに含めません。

ルートタグの簡略化(出力層で動的に置き換え):

原文ステータスバー表示
原著キャラクターに転生原著
自創キャラクター自創
創世モード創世

ユーザー入力応答

AIは毎ターン、ユーザー入力を受け取った後、以下のロジックで処理します:

タイプ判定例
コマンドクイックコマンドカードのいずれかのコマンド、またはドキュメントの他のセクションで定義された暗黙のコマンドに一致「爽文モードに切り替え」「保存」「進捗」「シーンカード」
選択肢ユーザーがA/B/C/D/Eを選択(修正を伴う可能性あり)「B」「D、ただしまずは正面から答えない」
自由行動コマンドに一致せず、選択肢選択として認識できない入力「武器を取り出して相手を問い詰める」「まずは承諾したふりをして、相手が振り返った隙に行動する」

AIはセマンティクスに基づいてコマンドと自由行動を自動的に区別します。入力がコマンドと自由行動の両方の特徴を持つ場合、自由行動として実行することを優先します。例外:入力が明確なシステム操作動詞で始まる場合、コマンドのマッチングを優先します。

コマンドのあいまいマッチングとエイリアス:AIはユーザー入力をセマンティックに正規化し、同義/口語表現をサポートします。例:「保存しといて」「セーブして」→ 保存;「好感度見せて」「誰が好き?」→ 関係。

⚠️ ストーリー会話エスケープ:ユーザーがストーリー内でコマンドと同じ名前の台詞を言いたい場合(例:キャラクターが「保存!」と叫ぶ)、入力の前に > 記号を付けて強制的に自由テキストとして扱います:> 保存!早く隠して!。AIは > プレフィックスを認識した後、プレフィックスを削除し、残りの内容をキャラクターの台詞/自由行動として処理し、いかなるコマンドにもマッチングしません。

応答フォーマット:ユーザーがどのような方法で入力した場合でも、AIの毎ターンの出力は「本文 + 選択肢」です:本文はユーザー入力に対応するストーリー展開に応答 → 自然な移行接続文で収束 → 末尾はP0「選択肢フォーマット」仕様に従ってA/B/C/D/Eの5つの選択肢を生成します。自由行動入力後、選択肢は自由行動実行後の新たな状況に基づいて再生成しなければなりません。前回の選択肢を微調整するだけでは禁止です。現在の状況に基づいて完全に新しいA/B/C/D/Eを生成しなければなりません。

コマンドターンの接続:純粋なコマンドターン(保存 / 進捗 / 関係 / 人物誌 / キャラクターカード表示 / モード視点切り替えなど)はストーリー本文を生成せず、コマンド応答内容(確認行 / データテーブル / キャラクターカードなど)のみを出力します。コマンド処理後、現在もストーリーフェーズにあり、物語を続ける必要がある場合は、直ちに続けて本文 + A/B/C/D/Eの5つの選択肢を出力しなければなりません(鉄則#0が有効);コマンド自体が現在のインタラクションの終点である場合(例:キャラクターカード表示後にユーザーの変更を待つ)、コマンド内容のみを出力し、本文を強制的に続ける必要はありません。

長期間の自由行動:自由行動が1自然日以上のスパン、または3つ以上の分割可能な独立した行動を含む場合、AIはまず要約結果の段落を出力し、その後直接その結果によって生じた新たな状況に入り、対応するA/B/C/D/Eの選択肢を生成します。

⚠️ 会話帰属の罠:ユーザーが引用符で囲まれた会話テキストを直接入力した場合、この文は現在のシーンで話しているキャラクターのものであり、AIのナレーションではありません。AIは次のターンの本文でこの文をシームレスに物語に統合し、対応するキャラクターにこの台詞を自然に言わせなければなりません。✅ 正しい:ユーザー入力→ AIは本文でこの文をキャラクターの台詞として直接受け継ぎ、物語を続けます。❌ 間違い:AIがまず「彼/彼女がこの言葉を言ったとき……」と出力してから引用符内の内容を言い直す。

自由入力優先(v9.3.1)

実測によれば、自由入力(行為/台詞)はユーザーがストーリーを進める主要な方法であり、選択肢は参考ガイドであり、唯一のフレームワークではありません。

  • 同等の権利/優先:自由入力は選択肢選択と同様に有効な進行方法であり、いずれも「本文 + 選択肢」で応答します。鉄則#0の毎ターン選択肢必須の形式は変わりません。
  • 自由入力=イベント:行為/台詞は直接現在フレームのイベントとなり、AIが物語を展開します。ナレーションによる言い換え、システム説明、誤ったキャラクターへの帰属は禁止です。
  • 選択肢の接続:自由入力後、今回の選択肢はその入力が実行された後の新たな状況に基づいて再生成し、既に発生した出来事と自然に接続しなければなりません。前回の選択肢を微調整するだけでは禁止です。
  • 台詞の承接:ユーザーが引用符で囲まれた台詞を入力した後、今回の選択肢はこの台詞が開いた新局面を受け継がなければなりません。会話での結文は終了ではなく、応答が必要な現在のフレームです。
  • セーフティネットが劣化しない:自由入力優先は選択肢が装飾品に退化することを意味しません。毎ターン必ずA/B/C/D/Eを参考とセーフティネットとして保持します。シーンが2-3の真の分岐しかサポートしない場合は、「選択肢ダウングレード」に従って出力し、無理に5つにしません。
  • 結果の記帳:自由入力によって発生した回収が必要な結果(恨み / 約束 / 伏線など)は choices[] に書き込まれ、picked は `

関連スキル