opendraft は何をしますか?
1行のトピックから、実際の文献データベースに基づいた完成済みの論文を生成します。
OpenDraft(github.com/federicodeponte/opendraft、MITライセンス)から移植されたもので、元のプロジェクトはホスト型エンジンとして動作します。ここでは、エンジンはあなた自身です。18のステージ(各ステージはagents/内のプロンプト)と、言語モデルが手作業で行ってはいけない部分を担当する5つのスクリプトで構成されています。
あなた自身がモデルです。 キーも、サービスも、アカウントも必要ありません。唯一のネットワーク呼び出しは、Crossref、OpenAlex、DataCiteのオープンなエンドポイントに対して行われます。
たった一つのコマンド
<トピック>について論文を書いて
以下はすべてこのコマンドに従います。ユーザーにステージを自分で実行するよう依頼しないでください。実行してください。
最初に4つのことを尋ねる
ステージ5の前で、ユーザーがまだ伝えていない場合、次の4つを尋ねてください:
- 対象となる発表場所(venue)、または「なし、一般的な学術論文」。
- 総文字数制限。
- 引用スタイル。
references/citation-styles.mdにある6つのスタイルのうちの1つ。 - 文書タイプ。
references/paper-types.mdにあるタイプのうちの1つ。
これらは1回のメッセージで尋ねる4つの質問であり、面談ではありません。これらがパイプラインが尋ねる唯一の質問です。その他はすべてパイプラインが決定します。
なぜ尋ねるのか。推測の代償は最後に発生し、そこで支払うことはできません。150語の厳格なアブストラクト制限がある発表場所の場合、ステージ6で強制されるか、あるいはまったく強制されません。ステージ17でアブストラクトを書く頃には、各セクションが草案されたときの単語予算はすでに間違っています。ステージ6ではなくゲートで選択された引用スタイルは、ドラフト全体が間違ったマーカー密度に対して書かれたことを意味します。
ユーザーが答えることを拒否した場合、または「あなたが選んで」と言った場合、references/paper-types.mdのデフォルト値を進め、それらをステージ6の発表場所フォーマットブロックに書き込み、使用したデフォルト値を1行で伝えてください。示していない暗黙の前提で先に進まないでください。
スクリプトが担当し、あなたは担当しない4つのこと
言語モデルは判断は得意ですが、帳簿付けは苦手です。この分割は意図的なものであり、これを越えると出力が壊れます。これらの各項目は、ゼロ以外の終了コードで終了するスクリプトによって強制されるため、ゲートでの意見の問題ではありません。
レンダリングされた引用マーカーを手動で決して書かないでください。 [3]や(Smith, 2020)などです。ドラフト作成中は、主張の正確な箇所にインラインで{cite_<doi>}を記述します。scripts/citations.py compileがこれらをマーカーに変換し、辞書検索によって参考文献リストを構築します。これは決定論的であるため、散文と参考文献リストのマッピングは機械的であり、記憶に頼りません。
裏付けできない主張に対してソースを決して invent しないでください。 主張が本物であり、そのソースが見つからない場合は、{cite_MISSING: 主張の簡単な説明}と書いて続行してください。compileはそれをレンダリングすることを拒否し、名前を付け、ゼロ以外で終了します。integrity.pyはそれをクリティカルとしてカウントするため、完成した論文に残ることはありません。それがポイントです。裏付けのない主張を出荷する方法ではなく、ドラフト作成中に正直になる方法であり、主張を静かに削除したり、捏造したDOIに結び付けたりしません。sources.py findで実際のソースを見つけるか、意図的に主張を削除することによって、ゲートの前にそれぞれをクリアしてください。
セクションを手動でドラフトにマージしないでください。 scripts/assemble.pyが数値順にこれを行い、番号付きセクションではないものを論文に結合することを拒否します。1つのセクションを落とす手動マージは、読者が気づくまで誰も気づかない失敗です。
論文が内部的に一貫しているかどうかを目視で判断しないでください。 scripts/integrity.pyがチェックし、ゼロ以外で終了します。実行して終了コードを読んでください。
セットアップ
mkdir -p research sections review
APIキーも、アカウントも、インストール手順も不要です。スクリプトはPython標準ライブラリのみに依存します。オプションの環境変数が1つ存在し、これがここで読み取る唯一の変数です。OPENDRAFT_CONTACT_EMAILを自分のメールアドレスに設定すると、sources.pyがそれをUser-Agentに追加し、Crossrefリクエストをポライトプールに移動させ、より良いレート制限を受けられます。設定しなくてもすべてのステージは動作します。デフォルトのメールアドレスは組み込まれていません。出荷時のデフォルトはすべてのインストーラーを1つのIDにプールし、レート制限の問題を見知らぬ人の受信箱にルーティングするからです。
パイプラインは固定パスに書き込み、各ステージは以前のステージが書いたものを読み取ります。パスはステージ間の契約です:
research/sources.md research/sources.json research/summaries.md
research/gaps.md research/citations.json research/citation-notes.md
outline.md outline_formatted.md
sections/*.md full_draft.md final.md
review/thread.md review/narrator.md review/skeptic.md
review/verifier.md review/referee.md review/voice.md
review/entropy.md review/polish.md
これらのパスに関する4つのルールがあり、それぞれ以前に破られたことがあります:
sections/は論文セクションのみを保持し、それ以外は何も保持しません。 その中のすべてのファイルはscripts/assemble.pyによって完成した論文に結合されます。そこに置かれたステージレポートは、誰かの論文の中に紛れ込むことになります。レポートはreview/に配置してください。research/sources.jsonは機械入力であり、research/sources.mdは人間が読むためのものです。 ステージ1が両方を書き込みます。citations.py buildはJSONファイルを読み取ります。- 手書きのものは決して
research/citations.jsonに入れないでください。 これはcitations.py buildによって構築され、buildを再実行することによってのみ変更されます。スクリプトが判断できない事項(DOIのないソース、レビューが必要なエントリ、プレースホルダーに変換できなかった言及)は、research/citation-notes.mdに記述します。これは散文であり、スクリプトによって読み取られることはありません。手作業で編集されたデータベースは、verifiedフラグがゲートを通るために反転される方法であり、未解決のDOIがチェック済みのように見えて参考文献リストに到達する方法です。 - ステージ9.5以降、
full_draft.mdが唯一のドラフトです。 ダウンストリームはsection/*.mdを再度読み取らないため、アセンブリ後にセクションファイルを編集しても何も変わらず、静かに編集内容が失われます。
パイプライン
順番に実行してください。1つのステージを除き、すべてのステージはagents/内のファイルです。そのファイルを読み、その指示に従い、指定された出力を書き、次に進みます。例外はステージ9.5で、これは実行するスクリプトです。トピックが簡単そうに見えても、ステージをスキップしないでください。
| # | ステージ | エージェントファイルまたはスクリプト | 書き込み先 |
|---|---|---|---|
| 1 | ソースを見つける | agents/01-scout.md | research/sources.md, research/sources.json |
| 2 | それらを読んで要約する | agents/02-scribe.md | research/summaries.md |
| 3 | 論文を書く価値のあるギャップを見つける | agents/03-signal.md | research/gaps.md |
| 4 | 引用データベースを構築する | agents/04-citation-manager.md | research/citations.json, research/citation-notes.md |
| 5 | 議論のアウトラインを作成する | agents/05-architect.md | outline.md |
| 6 | 発表場所のフォーマットと単語予算を適用する | agents/06-formatter.md | outline_formatted.md |
| 7 | 各セクションを書く | agents/07-crafter.md | sections/*.md、research/gaps.mdに追記 |
| 8 | セクション間の一貫性をチェックする | agents/08-thread.md | sections/*.md内の修正、review/thread.md |
| 9 | 声を統一する | agents/09-narrator.md | sections/*.md内の修正、review/narrator.md |
| 9.5 | セクションを1つのドラフトにアセンブルする | scripts/assemble.py | full_draft.md |
| 10 | 議論を攻撃する | agents/10-skeptic.md | review/skeptic.md、その後修正 |
| 11 | 主張をソースに対してチェックする | agents/11-verifier.md | review/verifier.md、その後修正 |
| 12 | ピアレビューをシミュレートする | agents/12-referee.md | review/referee.md、その後修正 |
| 13 | 著者の声に合わせる(オプション) | agents/13-voice.md | full_draft.md内の修正、review/voice.md |
| 14 | 散文のリズムを変える | agents/14-entropy.md | full_draft.md内の修正、review/entropy.md |
| 15 | 文法と最終的な磨き上げ | agents/15-polish.md | full_draft.md, review/polish.md |
| 16 | 付属情報を追加する(オプション) | agents/16-enhancer.md | full_draft.md |
| 17 | アブストラクトを書く | agents/17-abstract.md | full_draft.mdの先頭に追加 |
| 18 | タイトルを書く | agents/18-titlemaker.md | full_draft.mdの先頭に追加 |
ステージ7は論文ごとではなく、セクションごとに1回実行されます。ステージ10から12は問題リストを生成します。誰も適用しない問題リストは何もしないのと同じなので、修正を適用し、クリティカルな問題がなくなるまでそのステージを再実行してください。
ステージ12には数値があり、感覚ではありません。新しい実行でクリティカルな問題がゼロで報告され、全体の平均が5点満点中少なくとも3.0であり、かつ3.0未満の次元がない場合に停止します。その理由をreview/referee.mdに記録しない限り、「送るのに十分良い」は停止条件ではありません。自分のドラフトを判断するよう求められたモデルは、3回目のパスで常に十分良いと判断するからです。
ステージ13は、パイプラインが決して生成しない入力を持つ唯一のステージです。これはドラフトを著者自身の散文に合わせるもので、ワーキングディレクトリ内のsamples/ディレクトリからその散文を読み取ります。2、3の過去の論文、章、または長文の投稿で、.mdまたは.txt形式です。そのディレクトリを作成するものはなく、それを要求するものもないため、作成しない実行はステージ13をクリーンにスキップします。これが通常の結果であり、失敗ではありません。論文を自分が書いたように見せたい場合は、実行前に自分の文章をそこに置いてください。
ステージ9.5は、エージェントプロンプトではなくスクリプトであるため、および18のエージェントステージがすでに持っている番号を保持するため、ハーフステップとして番号が付けられています。これはオプションではありません。ステージ1から9はsections/*.mdで動作し、ステージ10から18はfull_draft.mdで動作します。このコマンド以外にそのファイルを生成するものはありません:
python3 scripts/assemble.py sections -o full_draft.md
これはセクションファイルを数値順にマージし、番号付きセクションではないファイルを含めることを拒否し、番号の欠落、重複番号、または空のディレクトリがある場合はゼロ以外で終了します。--checkは書き込まずに何をするかを報告します。
また、名前にreport、review、notes、checklist、logを含む番号付きファイルはスキップします。これは、古いステージレポートが論文の中に紛れ込むのを防ぐメカニズムです。これはファイル名のヒューリスティックであるため、鋭いエッジが1つあります。「Review of the literature」という実際のセクションはスキップされ、エラーとしてではなく標準出力の「Skipped」行としてのみ表示されます。そのセクションにはrelated-workまたはliteratureという名前を付けてください。スキップ行を読んでください。ここで消えたセクションは静かに消えます。
full_draft.mdが存在する状態で再実行するには--forceが必要であり、--forceはステージ10以降でドラフトに行われたすべての編集を破棄するため、セクションから再開するつもりがある場合にのみ再アセンブルしてください。
規模
要求されたものにパイプラインを合わせてください。ステージは同じですが、深さは異なります。
- 短い作品、1,500~3,000語。 ステージ1から7、次に9.5、10、11、15。10~15のソース。
- フルペーパー、デフォルト。 全18ステージと9.5。25~50のソース、または論文が文献レビューの場合は50以上(その場合、独自の下限がより高い方で適用されます(
references/paper-types.md))。 - 論文の一章または長いレビュー。 全18ステージと9.5、ソースは50以上、ステージ7はセクションごとではなくサブセクションごとに1回実行されます。
ステージ9.5はこれらのすべてのリストに含まれています。論文が自己アセンブルする規模はありません。
2つの参照ファイル
references/paper-types.mdは、各文書タイプのセクション骨格、単語予算、ソース数を保持します。ステージ5で読んでください。references/citation-styles.mdは、6つのスタイルすべての実際のコンパイル済み出力(文中マーカーと参考文献エントリ)を示しているため、発表場所に適したスタイルを選択し、それがどのように見えるかを知ることができます。ステージ6で読んでください。また、引用が予期しない方法でレンダリングされた場合は、ゲートの前にもう一度読んでください。また、コンパイラが保持しないもの(巻号、ページ番号、雑誌の略称なし)も記載されています。指導教員がこれらを要求する場合、ここで正直に述べられている場所であり、後で見つける場所ではありません。
どちらのファイルも、参照として偽装されたオプションの読み物ではありません。2つ目のファイルを読まずに選択されたスタイルは、記憶から選択されたスタイルであり、コンパイラはAPAのあなたの記憶を実装しません。
スクリプト
python3 scripts/sources.py find "<query>" --n 15 # Crossref plus OpenAlex
python3 scripts/sources.py find "<query>" --json # 機械可読
python3 scripts/sources.py verify <doi> <doi> ... # Crossref plus DataCite
python3 scripts/citations.py build research/sources.json -o research/citations.json
python3 scripts/citations.py verify -d research/citations.json
python3 scripts/citations.py compile full_draft.md -d research/citations.json --style apa -o final.md
python3 scripts/citations.py bibtex -d research/citations.json -o refs.bib
python3 scripts/assemble.py sections -o full_draft.md
python3 scripts/assemble.py sections -o full_draft.md --check
python3 scripts/integrity.py final.md -d research/citations.json --target 8000
python3 scripts/integrity.py final.md -c research/summaries.md # 助言的な数値チェック
python3 scripts/export.py final.md --format docx -o final.docx
これらのそれぞれは、失敗時にゼロ以外で終了します。その終了コードがシグナルです。出力をざっと読むのではなく、それを読んでください。
sources.py findは、APIにまったく到達できなかった場合に終了コード1で終了します。これは、APIに到達したがヒットがなかった場合とは異なります。agents/01-scout.mdは、その終了コードの読み方と、ステージ1が進行を停止するソースの下限についての権威です。空の結果を信頼するのではなく、そこで読んでください。
citations.py buildは、ステージ1がresearch/sources.jsonに書き込んだJSON配列を受け取ります。research/sources.mdのマークダウンではありません。マークダウンファイルを渡すのはエラーであり、そう言われます。
最初のパスが薄い場合は、2、3のより狭いサブクエリも検索してください。5つのソースを持つ論文は、5つのソースを持つ論文のように読めます。
検証、およびそれが証明することとしないこと
citations.py verifyは、すべてのDOIを4つの状態のいずれかに置きます。unknownは決して静かにabsentに変わりません:
- resolved. CrossrefまたはDataCiteがレコードを返しました。引用してください。
- absent. 両方が404を返しました。削除してください。修復しないで、置換DOIを推測しないでください。元に戻って、
sources.py findでソースを再検索するか、または主張を削除してください。 - redirected. DOIは別のDOIにリダイレクトされました。元のDOIを、リダイレクト先が
10.で始まる場合はリダイレクト先に置き換え、そうでない場合はそのままにしておきます。ログに記録してください。 - unknown. APIは応答しましたが、このDOIの状態を判断できませんでした(レート制限、一時的なエラーなど)。そのままにして、後で再試行するようにメモしてください。静かに
absentに変換しないでください。
verifyの出力はresearch/citations.jsonを変更せず、別のパスに書き込みます。これをscripts/citations.py buildと混同しないでください。buildはソースJSONをデータベースに変えます。verifyはそのデータベースをチェックし、変更しません。
検証が証明しないもの
検証は、DOIが存在し、解決することを証明します。主張がソースに実際に含まれていること、または要約が正確であることは証明しません。ステージ2が書いた要約は、適切な場合を除き、信頼しないでください。
検証は、ステージ5で書いたアウトラインの論理的一貫性を証明しません。アウトラインは従うための計画であり、証明するための定理ではありません。
検証は、ステージ1が論文のすべての適切なソースを見つけたことを証明しません。それはあなたの分野の知識と比較して判断するためのものです。
最終出力のエクスポート
scripts/export.pyは、final.mdを.docxまたは.latexに変換します。内部ではpandocを呼び出します。pandocがインストールされていない場合、そのコマンドは失敗します。{
"name": "opendraft",
"description": "1行のトピックから完成した学術論文を生成する、18エージェントからなるパイプラインです。",
"aiSummary": "opendraftは、ユーザーが与えた1行のトピックをもとに、実際の文献データベースを活用した完成度の高い学術論文を自動生成する、18段階のエージェントパイプラインです。元々はホスト型エンジンとして提供されていたOpenDraft(federicodeponte/opendraft、MITライセンス)を、AIエージェント(Claude Code、Cursor、Codexなど)が直接実行できる形式に移植したもので、APIキーや外部サービスへの登録は一切不要です。ネットワーク通信はCrossref、OpenAlex、DataCiteといったオープンな学術情報APIとの通信のみで行われます。各段階はagents/ディレクトリ内のプロンプトファイルとして定義されており、引用管理、セクション構成、相互参照チェック、査読シミュレーション、文体調整など、論文作成の全工程をカバーします。特に、引用マーカーの自動コンパイル、セクションのアセンブル、内部整合性の検証など、言語モデルが苦手とする「帳簿付け」の部分はPythonスクリプトが担当し、品質を担保します。",
"skillMarkdown": "# opendraft\n\n1行のトピックから、実際の文献データベースに基づいた完成済みの論文を生成します。\n\nOpenDraft(github.com/federicodeponte/opendraft、MITライセンス)から移植されたもので、元のプロジェクトはホスト型エンジンとして動作します。ここでは、エンジンはあなた自身です。18のステージ(各ステージはagents/内のプロンプト)と、言語モデルが手作業で行ってはいけない部分を担当する5つのスクリプトで構成されています。\n\nあなた自身がモデルです。 キーも、サービスも、アカウントも必要ありません。唯一のネットワーク呼び出しは、Crossref、OpenAlex、DataCiteのオープンなエンドポイントに対して行われます。\n\n## たった一つのコマンド\n\n\n<トピック>について論文を書いて\n\n\n以下はすべてこのコマンドに従います。ユーザーにステージを自分で実行するよう依頼しないでください。実行してください。\n\n## 最初に4つのことを尋ねる\n\nステージ5の前で、ユーザーがまだ伝えていない場合、次の4つを尋ねてください:\n\n1. 対象となる発表場所(venue)、または「なし、一般的な学術論文」。\n2. 総文字数制限。\n3. 引用スタイル。references/citation-styles.mdにある6つのスタイルのうちの1つ。\n4. 文書タイプ。references/paper-types.mdにあるタイプのうちの1つ。\n\nこれらは1回のメッセージで尋ねる4つの質問であり、面談ではありません。これらがパイプラインが尋ねる唯一の質問です。その他はすべてパイプラインが決定します。\n\nなぜ尋ねるのか。推測の代償は最後に発生し、そこで支払うことはできません。150語の厳格なアブストラクト制限がある発表場所の場合、ステージ6で強制されるか、あるいはまったく強制されません。ステージ17でアブストラクトを書く頃には、各セクションが草案されたときの単語予算はすでに間違っています。ステージ6ではなくゲートで選択された引用スタイルは、ドラフト全体が間違ったマーカー密度に対して書かれたことを意味します。\n\nユーザーが答えることを拒否した場合、または「あなたが選んで」と言った場合、references/paper-types.mdのデフォルト値を進め、それらをステージ6の発表場所フォーマットブロックに書き込み、使用したデフォルト値を1行で伝えてください。示していない暗黙の前提で先に進まないでください。\n\n## スクリプトが担当し、あなたは担当しない4つのこと\n\n言語モデルは判断は得意ですが、帳簿付けは苦手です。この分割は意図的なものであり、これを越えると出力が壊れます。これらの各項目は、ゼロ以外の終了コードで終了するスクリプトによって強制されるため、ゲートでの意見の問題ではありません。\n\nレンダリングされた引用マーカーを手動で決して書かないでください。 [3]や(Smith, 2020)などです。ドラフト作成中は、主張の正確な箇所にインラインで{cite_<doi>}を記述します。scripts/citations.py compileがこれらをマーカーに変換し、辞書検索によって参考文献リストを構築します。これは決定論的であるため、散文と参考文献リストのマッピングは機械的であり、記憶に頼りません。\n\n裏付けできない主張に対してソースを決して invent しないでください。 主張が本物であり、そのソースが見つからない場合は、{cite_MISSING: 主張の簡単な説明}と書いて続行してください。compileはそれをレンダリングすることを拒否し、名前を付け、ゼロ以外で終了します。integrity.pyはそれをクリティカルとしてカウントするため、完成した論文に残ることはありません。それがポイントです。裏付けのない主張を出荷する方法ではなく、ドラフト作成中に正直になる方法であり、主張を静かに削除したり、捏造したDOIに結び付けたりしません。sources.py findで実際のソースを見つけるか、意図的に主張を削除することによって、ゲートの前にそれぞれをクリアしてください。\n\nセクションを手動でドラフトにマージしないでください。 scripts/assemble.pyが数値順にこれを行い、番号付きセクションではないものを論文に結合することを拒否します。1つのセクションを落とす手動マージは、読者が気づくまで誰も気づかない失敗です。\n\n論文が内部的に一貫しているかどうかを目視で判断しないでください。 scripts/integrity.pyがチェックし、ゼロ以外で終了します。実行して終了コードを読んでください。\n\n## セットアップ\n\nbash\nmkdir -p research sections review\n\n\nAPIキーも、アカウントも、インストール手順も不要です。スクリプトはPython標準ライブラリのみに依存します。オプションの環境変数が1つ存在し、これがここで読み取る唯一の変数です。OPENDRAFT_CONTACT_EMAILを自分のメールアドレスに設定すると、sources.pyがそれをUser-Agentに追加し、Crossrefリクエストをポライトプールに移動させ、より良いレート制限を受けられます。設定しなくてもすべてのステージは動作します。デフォルトのメールアドレスは組み込まれていません。出荷時のデフォルトはすべてのインストーラーを1つのIDにプールし、レート制限の問題を見知らぬ人の受信箱にルーティングするからです。\n\nパイプラインは固定パスに書き込み、各ステージは以前のステージが書いたものを読み取ります。パスはステージ間の契約です:\n\n\nresearch/sources.md research/sources.json research/summaries.md\nresearch/gaps.md research/citations.json research/citation-notes.md\noutline.md outline_formatted.md\nsections/*.md full_draft.md final.md\nreview/thread.md review/narrator.md review/skeptic.md\nreview/verifier.md review/referee.md review/voice.md\nreview/entropy.md review/polish.md\n\n\nこれらのパスに関する4つのルールがあり、それぞれ以前に破られたことがあります:\n\n- sections/は論文セクションのみを保持し、それ以外は何も保持しません。 その中のすべてのファイルはscripts/assemble.pyによって完成した論文に結合されます。そこに置かれたステージレポートは、誰かの論文の中に紛れ込むことになります。レポートはreview/に配置してください。\n- research/sources.jsonは機械入力であり、research/sources.mdは人間が読むためのものです。 ステージ1が両方を書き込みます。citations.py buildはJSONファイルを読み取ります。\n- 手書きのものは決してresearch/citations.jsonに入れないでください。 これはcitations.py buildによって構築され、buildを再実行することによってのみ変更されます。スクリプトが判断できない事項(DOIのないソース、レビューが必要なエントリ、プレースホルダーに変換できなかった言及)は、research/citation-notes.mdに記述します。これは散文であり、スクリプトによって読み取られることはありません。手作業で編集されたデータベースは、verifiedフラグがゲートを通るために反転される方法であり、未解決のDOIがチェック済みのように見えて参考文献リストに到達する方法です。\n- ステージ9.5以降、full_draft.mdが唯一のドラフトです。 ダウンストリームはsection/*.mdを再度読み取らないため、アセンブリ後にセクションファイルを編集しても何も変わらず、静かに編集内容が失われます。\n\n## パイプライン\n\n順番に実行してください。1つのステージを除き、すべてのステージはagents/内のファイルです。そのファイルを読み、その指示に従い、指定された出力を書き、次に進みます。例外はステージ9.5で、これは実行するスクリプトです。トピックが簡単そうに見えても、ステージをスキップしないでください。\n\n| # | ステージ | エージェントファイルまたはスクリプト | 書き込み先 |\n| --- | --- | --- | --- |\n| 1 | ソースを見つける | agents/01-scout.md | research/sources.md, research/sources.json |\n| 2 | それらを読んで要約する | agents/02-scribe.md | research/summaries.md |\n| 3 | 論文を書く価値のあるギャップを見つける | agents/03-signal.md | research/gaps.md |\n| 4 | 引用データベースを構築する | agents/04-citation-manager.md | research/citations.json, research/citation-notes.md |\n| 5 | 議論のアウトラインを作成する | agents/05-architect.md | outline.md |\n| 6 | 発表場所のフォーマットと単語予算を適用する | agents/06-formatter.md | outline_formatted.md |\n| 7 | 各セクションを書く | agents/07-crafter.md | sections/*.md、research/gaps.mdに追記 |\n| 8 | セクション間の一貫性をチェックする | agents/08-thread.md | sections/*.md内の修正、review/thread.md |\n| 9 | 声を統一する | agents/09-narrator.md | sections/*.md内の修正、review/narrator.md |\n| 9.5 | セクションを1つのドラフトにアセンブルする | scripts/assemble.py | full_draft.md |\n| 10 | 議論を攻撃する | agents/10-skeptic.md | review/skeptic.md、その後修正 |\n| 11 | 主張をソースに対してチェックする | agents/11-verifier.md | review/verifier.md、その後修正 |\n| 12 | ピアレビューをシミュレートする | agents/12-referee.md | review/referee.md、その後修正 |\n| 13 | 著者の声に合わせる(オプション) | agents/13-voice.md | full_draft.md内の修正、review/voice.md |\n| 14 | 散文のリズムを変える | agents/14-entropy.md | full_draft.md内の修正、review/entropy.md |\n| 15 | 文法と最終的な磨き上げ | agents/15-polish.md | full_draft.md, review/polish.md |\n| 16 | 付属情報を追加する(オプション) | agents/16-enhancer.md | full_draft.md |\n| 17 | アブストラクトを書く | agents/17-abstract.md | full_draft.mdの先頭に追加 |\n| 18 | タイトルを書く | agents/18-titlemaker.md | full_draft.mdの先頭に追加 |\n\nステージ7は論文ごとではなく、セクションごとに1回実行されます。ステージ10から12は問題リストを生成します。誰も適用しない問題リストは何もしないのと同じなので、修正を適用し、クリティカルな問題がなくなるまでそのステージを再実行してください。\n\nステージ12には数値があり、感覚ではありません。新しい実行でクリティカルな問題がゼロで報告され、全体の平均が5点満点中少なくとも3.0であり、かつ3.0未満の次元がない場合に停止します。その理由をreview/referee.mdに記録しない限り、「送るのに十分良い」は停止条件ではありません。自分のドラフトを判断するよう求められたモデルは、3回目のパスで常に十分良いと判断するからです。\n\nステージ13は、パイプラインが決して生成しない入力を持つ唯一のステージです。これはドラフトを著者自身の散文に合わせるもので、ワーキングディレクトリ内のsamples/ディレクトリからその散文を読み取ります。2、3の過去の論文、章、または長文の投稿で、.mdまたは.txt形式です。そのディレクトリを作成するものはなく、それを要求するものもないため、作成しない実行はステージ13をクリーンにスキップします。これが通常の結果であり、失敗ではありません。論文を自分が書いたように見せたい場合は、実行前に自分の文章をそこに置いてください。\n\nステージ9.5は、エージェントプロンプトではなくスクリプトであるため、および18のエージェントステージがすでに持っている番号を保持するため、ハーフステップとして番号が付けられています。これはオプションではありません。ステージ1から9はsections/*.mdで動作し、ステージ10から18はfull_draft.mdで動作します。このコマンド以外にそのファイルを生成するものはありません:\n\nbash\npython3 scripts/assemble.py sections -o full_draft.md\n\n\nこれはセクションファイルを数値順にマージし、番号付きセクションではないファイルを含めることを拒否し、番号の欠落、重複番号、または空のディレクトリがある場合はゼロ以外で終了します。--checkは書き込まずに何をするかを報告します。\n\nまた、名前にreport、review、notes、checklist、logを含む番号付きファイルはスキップします。これは、古いステージレポートが論文の中に紛れ込むのを防ぐメカニズムです。これはファイル名のヒューリスティックであるため、鋭いエッジが1つあります。「Review of the literature」という実際のセクションはスキップされ、エラーとしてではなく標準出力の「Skipped」行としてのみ表示されます。そのセクションにはrelated-workまたはliteratureという名前を付けてください。スキップ行を読んでください。ここで消えたセクションは静かに消えます。\nfull_draft.mdが存在する状態で再実行するには--forceが必要であり、--forceはステージ10以降でドラフトに行われたすべての編集を破棄するため、セクションから再開するつもりがある場合にのみ再アセンブルしてください。\n\n## 規模\n\n要求されたものにパイプラインを合わせてください。ステージは同じですが、深さは異なります。\n\n- 短い作品、1,500~3,000語。 ステージ1から7、次に9.5、10、11、15。10~15のソース。\n- フルペーパー、デフォルト。 全18ステージと9.5。25~50のソース、または論文が文献レビューの場合は50以上(その場合、独自の下限がより高い方で適用されます(references/paper-types.md))。\n- 論文の一章または長いレビュー。 全18ステージと9.5、ソースは50以上、ステージ7はセクションごとではなくサブセクションごとに1回実行されます。\n\nステージ9.5はこれらのすべてのリストに含まれています。論文が自己アセンブルする規模はありません。\n\n## 2つの参照ファイル\n\n- references/paper-types.md は、各文書タイプのセクション骨格、単語予算、ソース数を保持します。ステージ5で読んでください。\n- references/citation-styles.md は、6つのスタイルすべての実際のコンパイル済み出力(文中マーカーと参考文献エントリ)を示しているため、発表場所に適したスタイルを選択し、それがどのように見えるかを知ることができます。ステージ6で読んでください。また、引用が予期しない方法でレンダリングされた場合は、ゲートの前にもう一度読んでください。また、コンパイラが保持しないもの(巻号、ページ番号、雑誌の略称なし)も記載されています。指導教員がこれらを要求する場合、ここで正直に述べられている場所であり、後で見つける場所ではありません。\n\nどちらのファイルも、参照として偽装されたオプションの読み物ではありません。2つ目のファイルを読まずに選択されたスタイルは、記憶から選択されたスタイルであり、コンパイラはAPAのあなたの記憶を実装しません。\n\n## スクリプト\n\nbash\npython3 scripts/sources.py find \"<query>\" --n 15 # Crossref plus OpenAlex\npython3 scripts/sources.py find \"<query>\" --json # 機械可読\npython3 scripts/sources.py verify <doi> <doi> ... # Crossref plus DataCite\n\npython3 scripts/citations.py build research/sources.json -o research/citations.json\npython3 scripts/citations.py verify -d research/citations.json\npython3 scripts/citations.py compile full_draft.md -d research/citations.json --style apa -o final.md\npython3 scripts/citations.py bibtex -d research/citations.json -o refs.bib\n\npython3 scripts/assemble.py sections -o full_draft.md\npython3 scripts/assemble.py sections -o full_draft.md --check\n\npython3 scripts/integrity.py final.md -d research/citations.json --target 8000\npython3 scripts/integrity.py final.md -c research/summaries.md # 助言的な数値チェック\npython3 scripts/export.py final.md --format docx -o final.docx\n\n\nこれらのそれぞれは、失敗時にゼロ以外で終了します。その終了コードがシグナルです。出力をざっと読むのではなく、それを読んでください。\n\nsources.py findは、APIにまったく到達できなかった場合に終了コード1で終了します。これは、APIに到達したがヒットがなかった場合とは異なります。agents/01-scout.mdは、その終了コードの読み方と、ステージ1が進行を停止するソースの下限についての権威です。空の結果を信頼するのではなく、そこで読んでください。\n\ncitations.py buildは、ステージ1がresearch/sources.jsonに書き込んだJSON配列を受け取ります。research/sources.mdのマークダウンではありません。マークダウンファイルを渡すのはエラーであり、そう言われます。\n\n最初のパスが薄い場合は、2、3のより狭いサブクエリも検索してください。5つのソースを持つ論文は、5つのソースを持つ論文のように読めます。\n\n## 検証、およびそれが証明することとしないこと\n\ncitations.py verifyは、すべてのDOIを4つの状態のいずれかに置きます。unknownは決して静かにabsentに変わりません:\n\n- resolved. CrossrefまたはDataCiteがレコードを返しました。引用してください。\n- absent. 両方が404を返しました。削除してください。修復しないで、置換DOIを推測しないでください。元に戻って、sources.py findでソースを再検索するか、または主張を削除してください。\n- redirected. DOIは別のDOIにリダイレクトされました。元のDOIを、リダイレクト先が10.で始まる場合はリダイレクト先に置き換え、そうでない場合はそのままにしておきます。ログに記録してください。\n- unknown. APIは応答しましたが、このDOIの状態を判断できませんでした(レート制限、一時的なエラーなど)。そのままにして、後で再試行するようにメモしてください。静かにabsentに変換しないでください。\n\nverifyの出力はresearch/citations.jsonを変更せず、別のパスに書き込みます。これをscripts/citations.py buildと混同しないでください。buildはソースJSONをデータベースに変えます。verifyはそのデータベースをチェックし、変更しません。\n\n### 検証が証明しないもの\n\n検証は、DOIが存在し、解決することを証明します。主張がソースに実際に含まれていること、または要約が正確であることは証明しません。ステージ2が書いた要約は、適切な場合を除き、信頼しないでください。\n\n検証は、ステージ5で書いたアウトラインの論理的一貫性を証明しません。アウトラインは従うための計画であり、証明するための定理ではありません。\n\n検証は、ステージ1が論文のすべての適切なソースを見つけたことを証明しません。それはあなたの分野の知識と比較して判断するためのものです。\n\n## 最終出力のエクスポート\n\nscripts/export.pyは、final.mdを.docxまたは.latexに変換します。内部ではpandocを呼び出します。pandocがインストールされていない場合、そのコマンドは失敗します。"
}