writer-selfloop について
writer-selfloopは、章の品質ゲートに通らない論文草稿を修正するスキルです。問題を最初に直すべき成果物へ振り分け、失敗したファイルだけを書き直し、根拠不足は上流へ戻します。
主な機能
- 01失敗の分類と振り分け
- 02失敗した章ファイルのみを書き換え
- 03論旨・引用範囲・文体の確認
- 04TODOレポートの作成と再実行
活用シーン
- 01章のゲートで対比や根拠の不足が示された場合
- 02定型的な章の書き出しや本文の修正
- 03範囲外の引用や未定義キーへの対処
- 04文章と根拠資料のどちらを直すか判断
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ willoscar/ research-units-pipeline-skills --skill writer-selfloopインストール後、Claude Code で/writer-selfloopを入力して読み込まれたか確認します。
同梱ファイルscripts/run.py
詳細
Writer Self-loop(失敗した箇所のみ修正)
トリガーとルーティング
- トリガー:writer self-loop、writing loop、quality gate loop、rewrite failing sections、自循环、反复改到 PASS.
- 使用する場面:セクションごとのファイルは存在するが、C5 が FAIL/BLOCKED(内容の薄いセクション、リードやフロントマターの欠落、引用範囲の違反、ジェネレーターのような文体)。
目的:論文全体を書き直さずに、執筆を収束させます。
これは、執筆のための自己修復ループです。
デフォルトモード:意味的なトリアージ(LLM 優先)
ゲートはすべてを書き直す理由ではなく、ルーターとして扱います。
- まず、各失敗を「エビデンス基盤」「執筆の実行」「文体の混入」「引用の衛生管理」に分類します。
- 次に、最も早い段階で原因となっている成果物を修正します(多くの場合、結合済みのドラフトではありません)。
- 失敗したファイルのみを書き直し、問題なく機能しているセクションには手を加えません。
ヘルパースクリプトを実行しない場合でも、sections/*.md とパックを読み込み、同じ PASS/FAIL 形式で output/WRITER_SELFLOOP_TODO.md を手動で作成すれば、このスキルを実行できます。
ロールカード(明示的に使用)
Writing Manager(トリアージと収束)
ミッション:失敗した単位のみを修正し、必要に応じて問題を上流にルーティングすることで、ドラフトを収束させます。
実行すること:
- ゲートでフラグが付いたファイルのみを、一度に 1 つずつ書き直します。
- エビデンスが不十分な場合は、文章を水増しせず、上流にルーティングします。
- 書き直しの間、引用キーと対象範囲を維持します。
避けること:
- 問題なく機能しているセクションに手を加える、全体的な書き直し。
- 汎用的な埋め草でエビデンスの不足を補うこと。
Router(原因となっている最も早い段階の成果物)
ミッション:表面化した執筆上の失敗を、上流で最も早く対応すべき修正に結び付けます。
実行すること:
- テンプレートのような文体 -> ローカルな書き直し(subsection-polisher / front-matter-writer / chapter-lead-writer)。
- エビデンス不足 -> evidence-selfloop(ノート/バインディング/パック)。
避けること:
- パックが裏付けられない同じセクションを、繰り返し書き直すこと。
ロールプロンプト:Writing Manager(トリアージと収束)
You are the writing manager for a survey draft.
Your job is to make the draft converge by fixing only what fails, and by routing issues to the earliest responsible artifact.
Rules:
- If a section fails because the evidence is thin or out-of-scope pressure is high, do NOT pad prose.
Route upstream to evidence-selfloop (notes/bindings/packs) and unblock the substrate.
- If a section fails because the prose is templated (narration openers, slide navigation, repeated disclaimer spam), rewrite locally.
- Never change citation keys during rewrites; keep scope local.
Working style:
- small, auditable edits
- one failing file at a time
- every fix either (a) improves argument moves, or (b) restores paper voice
- ゲートは決定論的です(
sections/とsections/sections_manifest.jsonlを検査します)。 - 修正は意味的なものです(論旨を展開し、論文らしい文体を取り戻すように文章を書き直します)。
入力
sections/sections_manifest.jsonl(想定ファイルと使用可能な引用)sections/*.md(実際の文章単位)outline/writer_context_packs.jsonl(H3 ごとに優先されるパック)outline/evidence_bindings.jsonlcitations/ref.bib
任意のルーティングコンテキスト:
output/EVIDENCE_SELFLOOP_TODO.md(エビデンスの不足がすでに判明している場合)outline/subsection_briefs.jsonl、outline/chapter_briefs.jsonl
出力
output/WRITER_SELFLOOP_TODO.md(レポート形式。必ず作成します)
ワークフロー
- ゲートを実行する
- writer self-loop スクリプトを実行します(下記の「スクリプト」セクションを参照)。
sections/sections_manifest.jsonlと実際のsections/*.mdファイルを読み込みます。
- TODO レポートを読む
output/WRITER_SELFLOOP_TODO.mdを開き、失敗しているファイルパスを特定します。- 1つの H3 内で根拠を示す文が繰り返されている場合は、ブロッキング要因として扱います。引用の範囲を変えずに、根拠の選択を修正するか、重複を削除します。
- 失敗している各 H3 について、
outline/writer_context_packs.jsonlからパックを読み込みます。 - パックがない場合、またはスコープの確認が必要な場合は、
outline/subsection_briefs.jsonlを参照します。章レベルの文脈(導入部/論旨の流れ)については、outline/chapter_briefs.jsonlを参照します。
- トリアージ(執筆か根拠か)
次の場合は上流に回します(evidence-selfloop を実行):
output/EVIDENCE_SELFLOOP_TODO.mdに、同じサブセクションのアンカー/比較の不足がすでに示されている- 議論の展開に推測を加えず対応するには、
outline/writer_context_packs.jsonlのパックが不十分である outline/evidence_bindings.jsonlの範囲外の引用を使いたくなる状態が続いている
次の場合はローカルで書き直します:
- パックには十分な情報があるが、文章がテンプレート的である(説明の書き出し、スライド内の案内、繰り返される談話表現)
- セクションに内容はあるが、主張、対比、評価の根拠、または制約が不足している
- 失敗したファイルの種類に合った手順を使う
- 前付け(
sections/abstract.md、導入/関連研究のsections/S<sec_id>.md、sections/discussion.md、sections/conclusion.md):front-matter-writerを使います。 - 章の導入部(
sections/S<sec_id>_lead.md):chapter-lead-writerを使います。 - H3 本文(
sections/S<sub_id>.md):下書きにはsubsection-writer、ローカルでの修正にはsubsection-polisherを使います。
- スコープと引用を維持する
- 引用キーは変更せず、
citations/ref.bibに照らして検証します。 outline/evidence_bindings.jsonlに従ってスコープ内にとどめます(サブセクションを優先)。
- PASS になるまでゲートを再実行する
PASS 後(マージを考慮した文体の安全性):
style-harmonizer→opener-variator→section-logic-polisher→paragraph-curator→evaluation-anchor-checker→ 最終的なargument-selfloopスナップショット → 必要に応じてtransition-weaver→section-merger→post-merge-voice-gateの順に進みます。post-merge-voice-gateがsource: transitionsで FAIL になった場合、トランジションの挿入が明示的に有効化されています。outline/transitions.mdを修正して再マージします。
PASS 後(すべての survey-family プロファイルで必須のスタイル調整):
output/WRITER_SELFLOOP_TODO.mdを開き、## Style Smellsを読みます。- 一覧にある
sections/*.mdファイルに対してstyle-harmonizerを実行します。 - 導入部のリズム/
overviewの説明について指摘された場合は、一覧にあるファイルに対してopener-variatorを実行します。 - 数に基づく制約の枠(例:
Two limitations ...)について指摘された場合は、一覧にあるファイルに対してlimitation-weaverを実行します。 - 論理と段落を簡潔にした後、確定した H3 ファイルに対して
evaluation-anchor-checkerを実行し、議論/マニフェストのスナップショットを再生成します。 - 意味と引用は固定し、これは新しい内容の追加ではなく、表層的な書き直しとして扱います。
失敗した H3 の修正方法(意味上の手順)
- パックの
tension_statementとthesisを使って第1段落を書き直し、最後を thesis で締めくくります。 comparison_cardsを使って、A と B を明示的に対比する文を書きます。evaluation_anchor_minimal/プロトコルの抜粋を使って、タスク/指標/制約の文脈を加えます。- 定型文ではなく、実質的な留保を加えるために制約に関するヒントを使います。
論文らしい表現への修正(効果が高く、リスクが低い)
説明的な書き出し → 内容の主張:
- 悪い例:
This subsection surveys ... - 良い例:緊張関係/判断/視点を示す文から始め、第1段落の最後を論旨で締めます。
スライドの進行案内 → 論旨をつなぐ橋渡し:
- 悪い例:
Next, we move from X to Y. - 良い例:
Having established X, we can now examine how Y changes the trade-offs under comparable protocols.
メタ的な「サーベイでは〜すべき」 → 文献に即した観察:
- 悪い例:
Therefore, survey comparisons should ... - 良い例:
Across reported protocols, ... varies, which makes ... fragile unless ...
免責文の乱発 → 方針を1つの段落にまとめ、必要な箇所にのみ注意書きを付けます:
- 根拠に関する方針は前付けに一度だけ記載し、H3内で繰り返される「要旨のみ」に関する定型文は削除します。
停止条件(書き換えが適切でない場合)
次の場合は停止し、上流に差し戻します:
- 推測せずに対比や評価の軸を書けない
- サブセクションの核心となる主張に必要なベンチマーク/指標/プロトコルの詳細がパックにない
- 1つのH3を修正すると、スコープ外の引用が繰り返し必要になる
失敗コード → 対応先(ゲートの読み方)
ライターゲートは短い問題コードを出力します。これらを対応先を示すコードとして扱い、根拠が足りない箇所を文章で埋めようとするのはやめてください。
まず、失敗を分類します:
- 根拠基盤:パック/アンカー/比較が不十分で、推測なしに論旨を組み立てられません。上流(
evidence-selfloop)に差し戻します。 - 執筆の実行:パックには十分な情報がありますが、セクションで論旨の展開(主張/対比/評価/限界)が行われていません。該当箇所をローカルで書き直します。
- 文体の混入:説明調/スライド調/パイプライン調の文体です。引用には触れず、ローカルで書き直します(書き出し+橋渡し)。
- 引用の整合性:未定義キー/スコープ外の懸念があります。引用/対応付けを修正するか、スコープ内に収まるよう書き直します。新しいキーは追加しません。
クイック対応表(よくあるコード):
missing_sections_manifest、empty_sections_manifest、sections_missing_files:subsection-writerを実行します(不足ファイルを作成し、マニフェストを更新)。sections_h3_has_headings:見出しを削除します。H3本文は本文のみで構成します。sections_intro_*、sections_related_work_*:front-matter-writerを使って前付けを書き直します(密度の高い位置付け+方法論に関する注記を1つ)。sections_h3_too_few_paragraphs、sections_h3_too_short:パックが充実している場合は、対比+評価のアンカー+限界を展開して補足します。パックが不十分な場合は、evidence-selfloopに差し戻します。sections_h3_missing_contrast:comparison_cardsを使ってA対Bの比較を明示します。カードがない場合は、evidence-selfloop(ブリーフ/パック)に差し戻します。sections_h3_missing_eval_anchor、sections_h3_missing_cited_numeric:同じ段落に最小限のプロトコル情報(タスク/指標/制約)を追加します。不明な場合は上流に差し戻すか、主張を弱めます。sections_h3_missing_limitation:サブセクション固有の限界を追加します。パックに限界の記述がなければ、上流に差し戻します。sections_h3_narration_template_opener、sections_h3_slide_narration、sections_contains_pipeline_voice:書き出し/橋渡しを論文らしい文体に書き直します(進行案内の説明は含めません)。sections_h3_evidence_policy_disclaimer_spam:繰り返しを削除し、根拠に関する方針は前付けに一度だけ記載します。sections_cites_missing_in_bib:citation-verifierを再実行します(キーを捏造しないでください)。sections_cites_outside_mapping:スコープ内に収まるよう書き直すか、対応付け/バインディング(C2/C4)を修正してパックを再構築します。統合ドラフトでは修正しないでください。sections_h3_sparse_citations:スコープが許せば、citation-diversifierで追加を計画し、その後citation-injectorで適用します。スコープが狭すぎる場合は、上流で対応付け/バインディングを拡張します。
スクリプト(任意;決定論的なゲート)
クイックスタート
uv run python .codex/skills/writer-selfloop/scripts/run.py --workspace <workspace>
すべてのオプション
--workspace <dir>--unit-id <U###>--inputs <semicolon-separated>--outputs <semicolon-separated>--checkpoint <C#>
例
- 失敗した
sections/*.md向けに、実行可能なTODOリストを生成します:uv run python .codex/skills/writer-selfloop/scripts/run.py --workspace <workspace>