mcpField
S
scientific-writer

scientific-writer

github.com/gaasherドキュメント17839 回インストール17 週間前に更新
リポジトリ

scientific-writer について

scientific-writer は、既存の科学論文を複数回の批評、独立した採点、改訂によって改善するスキルです。専門レビュアーと執筆役を連携させ、サンドボックス内のコピーで作業しながら、論文の中心的な発見を維持します。

主な機能

  1. 01専門レビュアーによる並列評価
  2. 02基準を固定した独立した査読
  3. 03文章、図、コードの改訂
  4. 04ユーザー指定コマンドによる図の再生成
  5. 05批評と査読結果の形式検証
  6. 06サンドボックスでの反復とスコア記録

活用シーン

  1. 01定められた品質基準に沿った論文草稿の改善
  2. 02主張、データ、図の不整合の発見
  3. 03中心的な発見を変えずに論文を改訂
  4. 04書き直しを行わない批評ラウンドの実施

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/gaasher/agent-loop-skills --skill scientific-writer

インストール後、Claude Code で/scientific-writerを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

examples/
run.example.yaml
roles/
code_reviewer.md
figures_judge.md
formatting_judge.md
peer_reviewer.md
scientific_judge.md
scientific_writer.md
style_judge.md
schemas/
finding.schema.json
peer_review.schema.json

詳細

Scientific Writer Loop

成果物は科学論文の原稿(草稿とそのデータセット、図、任意のコード)です。 各イテレーションでは、批評 → 採点 → 改訂を行います。5 人の専門家判定役が具体的な指摘を提示し、独立したpeer_reviewerが同じ評価軸に沿って論文を 0〜100 点で採点し、scientific_writerが文章、図、コードを修正して、ユーザーの <plot_command> を実行し、図を再生成します。スコアが <pass_threshold> を超えるか、予算に達するまでループを繰り返します。すべての作業はサンドボックス内のコピーに対して行われ、ユーザーのオリジナルには一切触れません。

役割(すべてこのフォルダー内にあります):

  • roles/figures_judge.md、roles/scientific_judge.md、roles/style_judge.md、 roles/formatting_judge.md、roles/code_reviewer.md — 5 人の批評役。それぞれが共通の schemas/finding.schema.json に準拠した指摘を出力します。
  • roles/peer_reviewer.md — 総合評価を行う採点役(独自の誠実性ルールがあります)。schemas/peer_review.schema.json を出力し、 pass を判定します。
  • roles/scientific_writer.md — 改訂役。コードを修正し → 図を再生成し → 文章を更新します。
  • schemas/finding.schema.json、schemas/peer_review.schema.json — 検証済みの 2 つの出力です。

起動できる場合は起動し、できない場合は代替します。 Claude Code では、実行対象の判定役を実際の Agent サブエージェントとして並列に起動し、次に新しい peer_reviewer を起動してから、scientific_writer を起動します。それ以外の場合は、各役割をその場で引き受けます。あなたがオーケストレーターです。

採点役をこのように設計した理由(誠実性の問題)

peer_reviewer は判定役が批評するのと同じ評価軸で採点します。そのため、判定役の評価への追従、ループを終了させる圧力による採点の水増し、評価基準を攻略しようとする執筆者の出現が懸念されます。roles/peer_reviewer.md はこれらに対処するため、次の要件を設けています。(1)批評を読む前に、論文とデータセットに基づいて各評価軸を再評価し、独立して採点する。(2)「修正済み」という主張を鵜呑みにせず、数値や引用を自ら一部検証する。(3)判定役が見落とした問題を明らかにする。(4)努力や経過したイテレーション数は加点せず、固定され、基準が明確で、再現可能な評価基準を維持する。(5)厳格なゲートを適用し、問題が確認された場合は平均点にかかわらず論文を不合格にする。(6)表面的な要件遵守ではなく、実質を確認する。writer は判定役の具体的な指摘への対応を最適化し、grader は論文を総合的に評価します。そのため、「すべての指摘に対応する」だけで機械的に合格できるわけではありません。

使用する場面

科学論文の草稿がすでにあり、複数の判定役による批評と独立した査読評価を通じて、品質基準を超えるまで改善したい場合に使用します。デフォルトでは、以下の批評 → 採点 → 改訂ループ全体を実行します。例外として、ユーザーが批評のみ(書き直しなし)を希望する場合は、判定役と peer_reviewer による 1 回のラウンドを実行して終了します。白紙の状態から論文を書く場合や、単独の文献調査には使用しません。

セットアップ

バインディングを対話形式で解決します。 作業ディレクトリに loop.run.yaml が存在する場合は読み込み、値を1行で確認して、ループに進みます。それ以外の場合は、Claude Code(AskUserQuestion ツールが利用可能)の場合、各バインディングのもっともらしい値を推定し、推奨オプションとして提示します。他のホストでは、引用符で囲んだプレーンテキストのプロンプトを使って、それぞれを確認します。その後、loop.run.yaml(形式:examples/run.example.yaml)を書き込み、他のファイルを作成する前に、各値(有効な軸の数が4か5か、および文献のライブ/縮退ティアを含む)をすべて確認します。

binding意味デフォルト推定方法
<draft_path>改善対象のドラフト(markdown/text/tex)—作業ディレクトリを調べ、ドラフトらしいファイルを探します
<dataset_paths>主張や図表の根拠となるデータファイル。数値の検証に使います—ドラフトの近くにあるデータファイルを探します
<figures_dir>ドラフトが参照する図の画像があるディレクトリ—ドラフトの近くを調べます。null の場合もあります
<code_paths>プロット/結果を生成するソースファイル。空の場合はコード軸を除外します(n_axes=4、code_reviewer なし)—プロット/分析スクリプトを探します
<plot_command>コードから図/結果を再生成するコマンド。null の場合は図/コードを編集のみとし(「needs regeneration」としてフラグ付けします)—pyproject.toml/.venv/README を確認します。例:python3 code/make_figures.py
<citation_style>formatting_judge が適用する単一のスタイル(APA|MLA)APAユーザーに確認します
<target_venue>任意。スタイル/長さの基準を適用する投稿先—ユーザーに確認します
<length_limits>任意の要旨/論文の語数目標—ユーザーに確認します
<intent>論文の中心的な発見/貢献を1~2文で記述したもの。固定され、ライターが変更することはできません—ドラフトを読み取り、抽出した内容をユーザーに確認します
<pass_threshold>peer_reviewer が到達すべき全体スコア(0~100)。ハードゲートがない場合、ループを停止します85完璧さを求めない、十分に優れた論文の基準です
<budget>最大反復回数6—
<patience>改善のない反復がこの回数連続したら停止します2—
<sandbox_root>作業コピー、批評、レビュー、台帳を格納する場所./sandbox—

文献ツールチェーン。 引用の根拠付け(writer)と検証(scientific_judge、peer_reviewer)は、同階層の literature-search スキルを介して行います。<lit_skill_dir>(同階層にインストールされます。例:~/.claude/skills/literature-search/)、<lit_py> = python3、<lit> = <lit_skill_dir>/tools/lit_search.py を解決します。サブコマンドの後に --cache-dir <sandbox_root>/literature/.cache を追加すると、キャッシュを再利用できます。セットアップ時に <lit> --help が動作することを確認します。スキルがない場合はユーザーに伝え、リポジトリの loops/literature-search フォルダーを ~/.claude/skills/ にコピーしてインストールするか、すべての検索を WebSearch/WebFetch に切り替えます。キー不要の S2 + arXiv コアは、セットアップなしで動作します。無料の S2_API_KEY があれば、snippet/cite の信頼性が高まります。<lit> keys --init を実行し、表示された keys.env はユーザー自身に記入してもらいます。チャットに秘密情報を絶対に貼り付けないでください。 ティアは(有無のみ)loop.run.yaml に記録します。

環境。 writer は、ユーザー自身の環境でユーザーの <plot_command> を実行して図を再生成します。このコードにはサードパーティーの依存関係(matplotlib、pandas など)が必要な場合があります。そのため、スキルにはそれらが含まれず、インストールもしません。ユーザーのコマンドを外部実行し、再生成された出力を読み取ります。スキルが作成するヘルパーコードは、標準ライブラリーのみを使用します。同階層のスキルにある tools/lit_search.py も、標準ライブラリーのみを使用します。

バインディングの確認後、サンドボックスを一度だけ初期化します(オリジナルをコピーし、元のファイルは絶対に編集しないでください):

<sandbox_root>/
├── loop.run.yaml        ← resolved bindings + <intent> + literature_tiers
├── ledger.tsv           ← header only (see Ledger)
├── literature/.cache/   ← lit_search on-disk cache
└── iter1/
    ├── draft.md         ← COPY of <draft_path>
    ├── figures/         ← COPY of <figures_dir>
    └── code/            ← COPY of <code_paths>   (omit if no code)

ループ

<N> は 1 から始まります。反復 1 では、未変更の草稿(ベースライン)を批評して採点します。その前に改訂してはいけません。反復ごとに新たに採点します。スコアは、改訂後の論文に対する新しいピアレビューのみから得られ、前のスコアを引き継ぐことはありません。表面的な変更ではスコアは変わりません。

このチェックリストをコピーして、項目にチェックを付けてください。

  • 批評 — 有効な審査者を並列で起動します(起動できない場合は段階的に縮退)。それぞれが iter<N>/ の作業コピーとデータセットを対象にし、iter<N>/critiques/<reviewer>.json を作成します(schemas/finding.schema.json に照らして検証)。コードがない場合は code_reviewer をスキップします。
  • 採点 — 新規の peer_reviewer を 1 つ起動します(roles/peer_reviewer.md)。独立して採点し(まず自分で読み、その後批評と照合)、数値や引用を抜き取り検証して、見落とされた問題を明らかにします。iter<N>/peer_review.json を作成します(schemas/peer_review.schema.json に照らして検証):有効な軸ごとに 1~5 点、overall_score = 100 × Σscore / (5 × n_axes)、ハードゲート → pass。
  • 記録 — ledger.tsv に 1 行追加します(「台帳」を参照)。
  • 停止判定 — peer_review.pass == true、または N == <budget>、または overall_score が <patience> 回の反復にわたって横ばいの場合は停止します(「停止条件」を参照)。
  • 改訂 — scientific_writer を起動します(roles/scientific_writer.md)。批評、ピアレビュー、<lit>、<plot_command>、<citation_style>、<intent> を渡します。まずブロック項目/ゲート項目を修正し、コードを修正してから(コピーした <plot_command> をサンドボックス内で実行して図を再生成し)、文章を更新します。新しい引用は <lit> で根拠を確認し、iter<N+1>/{draft.md,figures/,code/} と iter<N+1>/revision_notes.md を作成します。
  • N = N + 1 として繰り返します。

審査者の finding と peer_review の形式は次のとおりです(抜粋。完全な形式は schemas/ を参照):

{"reviewer": "code_reviewer", "iteration": 1, "overall": "block",
 "summary": "Block: make_figures.py sorts the two columns independently, fabricating r=0.98 (true r≈0.62).",
 "findings": [{"urgency": "must_fix", "action_type": "replace", "area": "make_figures:broken-pairing",
   "finding": "xs=sorted(study); ys=sorted(score) destroys per-row pairing; r inflated to 0.98 (real ≈0.62).",
   "proposed_action": "Correlate the paired arrays; re-render Fig 1; update r everywhere.",
   "target_artifact": "iter1/code/make_figures.py", "evidence": "code/make_figures.py:~70; paired r=0.62"}]}
{"iteration": 1,
 "axes": {"figures": {"score": 1, "justification": "Fig 1 plots bug-sorted data; numbers != data.", "blocking_issues": ["fig r=0.98 != paired r=0.62"]},
          "scientific": {"score": 1, "justification": "Causal claim from one correlation; r unreproducible."},
          "style": {"score": 2, "justification": "Promotional, AI-flavored prose."},
          "formatting": {"score": 2, "justification": "Mixed APA/MLA; Results before Methods."},
          "code": {"score": 1, "justification": "Independent column sort fabricates r=0.98."}},
 "overall_score": 28.0, "pass": false,
 "gate_failures": ["make_figures.py sort bug makes r=0.98 an artifact (true 0.62)"],
 "issues_judges_missed": ["Methods omits the test used and n."],
 "spotchecks": [{"target": "paired Pearson r", "method": "recomputed from data", "result": "refuted"}],
 "substance_check": "Baseline iteration — nothing revised yet."}

台帳

<sandbox_root>/ledger.tsv はタブ区切りです。自由記述にコンマを使ってはいけません:

iter	overall_score	pass	figures	scientific	style	formatting	code	top_fix	revision_summary
1	28.0	no	1	1	2	2	1	fix make_figures sort bug	baseline (no revision)
2	61.0	no	3	3	3	3	4	report honest r, de-causalize	fixed bug+claims; relabeled fig1
3	88.0	yes	4	5	4	4	5	-	unified APA; trimmed abstract; balanced sleep claim

コード軸がない場合は、code 列に - を使います。反復ごとの critiques/*.json、peer_review.json、revision_notes.md は iter<N>/ に保存します。予算到達/停滞で停止する場合は、必ず最後の反復とは限らない、最も高いスコアの反復を報告してください。サンドボックスは未追跡のままにします。

制約

  • <sandbox_root> の外にあるものは、編集も実行もしないでください — セットアップ時に元ファイルを一度だけ読み込み、コピーしてからはコピーのみを使って作業します。<plot_command> もサンドボックスにコピーし、そこから実行します。
  • データ、数値、図、引用を捏造しないでください — 新しい引用は、実在する <lit>/WebFetch の取得結果から逐語的に引用します。{"error","fallback"} の場合は、WebSearch/WebFetch に切り替えます。
  • 採点基準は固定され、再現可能です — ループを終わらせるために、peer_reviewer が基準を緩めることはありません。確認されたハードゲートは、平均点にかかわらず論文を不合格にします。
  • <intent> を守ってください — writer は同じ発見を強化します。中核となる結果を変更したり、批評を回避するために実際の発見を削除したりしてはいけません。スコアを上げるために結果を削除するのは不正行為です。
  • 反復ごとに一貫性のある改訂を 1 回行い、まずブロック項目/ゲート項目に対処して、スコアの変化を改訂に帰属できるようにします。
  • インストールは禁止です — このスキルには依存関係が含まれていません。<plot_command> はユーザーの環境で実行し、ヘルパーコードは標準ライブラリのみを使います。API キーを表示またはコミットしてはいけません(keys.env は gitignore の対象のままにします)。

停止条件

ループは、次のいずれかに最初に該当した時点で停止します。

  • 合格 — peer_review.pass == true。納品物(iter<N>/ の成果物)、スコア、推移を報告します。
  • 予算 — N == <budget>。最も高いスコアの反復を納品物として報告します。
  • 停滞 — overall_score が <patience> 回の反復にわたって横ばいになります。最も高いスコアの反復と、残っている gate_failures/must_fix の阻害要因を報告します。

最後に必ず、納品物の iter<N>/ パス、その overall_score と合否、軸ごとのスコア、ledger.tsv に記録されたスコアの推移を示してください。不合格の場合は、論文が基準に達するまでに残っている阻害要因(gate_failures と未解決の must_fix)も示してください。

コメント