mcpField
P
ppw:team

ppw:team

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

ppw:team について

ppw:team は、translation、polish、de-ai Skills を使う論文のセクション処理を調整します。現在は論文を分割し、選択した1セクションをサブエージェントで処理して品質を確認する段階で、全セクションの並列処理は未実装です。

主な機能

  1. 01LaTeXまたはMarkdown論文の分割
  2. 02guidedモードとdirectモード
  3. 03対象Skillとファイル形式の検証
  4. 04単一セクションでの概念実証
  5. 05マニフェスト、バックアップ、状態の記録

活用シーン

  1. 01論文セクションの翻訳
  2. 02セクションの推敲やAI風文体の低減
  3. 03続行前のサブエージェント出力の品質確認

インストール

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

$npx skills add https://github.com/lylll9436/paper-polish-workflow-skill --skill ppw:team

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

詳細

目的

このスキルは、論文を H1 セクションに分割し、対象となるスキルをサブエージェントに割り当てることで、論文処理を並列で調整します。フェーズ 19(現在)では、1 つのセクションで単一のサブエージェントを実行し、概念実証のゲートを検証します。すべてのセクションへの完全な並列割り当てはフェーズ 20 で行います。

トリガー

次の場合に起動します: ppw:team [skill] [file] の呼び出し。

例:

  • "ppw:team polish paper.tex" / "团队模式润色论文"
  • "ppw:team translation draft.md" / "并行翻译论文各章节"
  • "ppw:team de-ai paper.tex"

モード

モードデフォルト動作
guidedはい分割 -> ユーザーがセクションを確認 -> ユーザーが PoC セクションを選択 -> PoC を実行 -> ユーザーが品質を確認
direct確認を省略し、本文の全セクションを自動選択して、PoC 用に最初のセクションを選択

モードの推定: トリガーに「直接」または「direct」が含まれる場合、direct モードに切り替わります。

参照資料

required: [] -- このスキル自体は学術テキストを作成しません。他のスキルを調整し、それらのスキルが実行時に独自の参照資料を読み込みます。調整役が必要とする参照ファイルはありません。

質問の方法

Guided モード -- AskUserQuestion を介した 3 つの対話ポイント:

  1. 分割後のセクション選択(複数選択)
  2. 選択されたセクションからの PoC セクション選択(単一選択)
  3. PoC の品質確認(承認/再試行/終了)

Direct モード -- 3 つすべてを省略:本文の全セクション(前文と参考文献を除く)を自動選択し、PoC 用に最初の本文セクションを自動選択して、PoC の出力を自動承認します。

ワークフロー

ステップ 0:ワークフローの記録(記録のみ)
  • パターン検出は省略します。調整役は自動 direct モードの推奨には適していません。
  • 記録はステップ 1 の検証後に行います(ステップ 1 を参照)。
ステップ 1:引数の解析と検証
  • $ARGUMENTS を解析して、スキル名(最初の語)とファイルパス(残りの語)を抽出します。
  • スキル名を許可リスト ["translation", "polish", "de-ai"] と照合して検証します。
  • スキルが許可リストにない場合は、次の正確なメッセージを表示して拒否します:「[Skill] requires full-paper context and cannot run in parallel. Please run /ppw:[skill] directly.」
  • ファイルが存在し、形式が .tex または .md であることを検証します。ファイルが見つからない場合、または形式が異なる場合は、エラーを報告して停止します。
  • 論文ファイルの内容を読み込みます。
  • ワークフローを記録します: {"skill": "ppw:team", "ts": "<ISO timestamp>"} を .planning/workflow-memory.json に追記します。ファイルが存在しない場合は [] として作成します。ログの長さが 50 以上の場合、最も古いエントリを削除します。
ステップ 2:作業ディレクトリの作成
  • .paper-team/ ディレクトリ構造として、sections/ と output/ を作成します。
  • .paper-team/ がすでに存在する場合:guided モードでは上書きするかキャンセルするかを尋ね、direct モードでは確認なしで上書きします。
  • 元の論文のバックアップを作成します:.paper-team/{filename}-backup-{YYYYMMDD-HHmm}.{ext}(再実行時の上書きを防ぐため、タイムスタンプを付けます)。
  • .paper-team/manifest.json を初期化します:
{
  "version": "1.0",
  "created": "<ISO timestamp>",
  "source_file": "<original file path>",
  "source_format": "tex|md",
  "target_skill": "<skill name>",
  "sections": [],
  "poc": { "section_id": null, "status": "pending", "timestamp": null },
  "backup": "<backup filename>"
}
ステップ 3:論文をセクションに分割する

.tex ファイルの場合:

  • プリアンブル:先頭から \begin{document} まで(これを含む)。「00 - プリアンブル」というラベルを付けます。
  • 参考文献:\bibliography{} または \printbibliography から \end{document} まで。「99 - 参考文献」というラベルを付けます。
  • セクション境界:各 \section コマンドです。 \section の後に任意の *、任意の [...]、続いて {...} があるパターンに一致させます。% で始まる行(LaTeX のコメント)は無視します。
  • \begin{document} から最初の \section{} までの内容は「00 - セクション前の内容」とします(トリミング後に空でない場合)。
  • 各セクション:その \section{Title} の行から、次の \section{ または参考文献の境界の直前の行までの内容です。

.md ファイルの場合:

  • フロントマター:最初の # 見出しより前の内容です。「00 - フロントマター」というラベルを付けます(空でない場合)。
  • # で始まる行(H1 見出し)で分割します。
  • 各 H1 見出しと、次の # までの内容を 1 つのセクションとします。

セクションのファイル名: {NN}-{sanitized-title}.{ext}。NN はゼロ埋めの連番、sanitized-title はタイトルを小文字にし、スペースをハイフンに置き換え、特殊文字を削除したもの(最大 50 文字)です。プリアンブル:00-preamble.{ext}。セクション前:00-presection.{ext}。参考文献:99-bibliography.{ext}。フロントマター:00-frontmatter.md。

エッジケース:

  • \section{} コマンドがない場合:本文全体を「01 - 全文」として扱います。
  • セクションが 1 つだけの場合:並列処理の利点がないことを警告し、それでも PoC を続行します。
  • 空のセクション(境界間に内容がない場合):スキップし、ファイルを作成しません。

各セクションを .paper-team/sections/{filename} に書き込みます。manifest.json の sections 配列を、各セクションについて { "id": "NN", "title": "...", "file": "sections/filename", "selected": false, "status": "pending" } で更新します。

ステップ 4:セクションの選択

ガイドモード: 検出されたすべてのセクションを AskUserQuestion の複数選択で提示します。

AskUserQuestion({
  question: "Select sections to process with ppw:{skill}:\n选择要用 ppw:{skill} 处理的章节:",
  multiSelect: true,
  options: [
    { label: "NN - Title", description: "brief description or first line" }
  ]
})

選択したセクションの selected: true を設定して manifest.json を更新します。

ダイレクトモード: id が "00"(プリアンブル/セクション前/フロントマター)および "99"(参考文献)のセクションを除き、すべてのセクションを自動選択します。それに応じてマニフェストを更新します。選択したセクションをユーザーに表示します。

ステップ 5:PoC セクションの選択

ガイドモード: 選択したセクションを AskUserQuestion(単一選択)で提示します。

AskUserQuestion({
  question: "Select one section for proof-of-concept test:\n选择一个章节进行概念验证测试:",
  options: [
    { label: "NN - Title", description: "will be processed by a subagent" }
  ]
})

ダイレクトモード: 選択したセクションのうち、番号 NN が最も小さいセクションを自動選択します。

ステップ 6:PoC ゲートの実行
  • 対象の Skill の SKILL.md を .claude/skills/ppw-{skill}/SKILL.md から読み込みます。見つからない場合は、エラー「.claude/skills/ppw-{skill}/SKILL.md に Skill ppw:{skill} が見つかりません」と報告して停止します。
  • 選択したセクションファイルを .paper-team/sections/{file} から読み込みます。
  • サブエージェントのプロンプトを作成します(このテンプレートをそのまま使用し、プレースホルダーを埋めます)。
You are executing a paper section processing task in direct mode.

## Skill Instructions

{FULL CONTENT OF TARGET SKILL.MD INSERTED HERE}

## Task

Process the following paper section file using the Skill instructions above.

- Input file: .paper-team/sections/{section-filename}
- Mode: direct (skip all AskUserQuestion calls, skip Workflow Memory Step 0)
- Write output to: .paper-team/output/{section-filename}
- Do NOT ask the user any questions. Proceed with defaults.
- Load all required references as specified in the Skill instructions.
- Produce output as if you were running the Skill directly on this section.
- If the Skill normally edits in-place, instead write the processed output to the output path above.
  • このプロンプトを使用して、Agent ツール経由で単一のサブエージェントを起動します。
  • サブエージェントの完了を待ちます。
  • manifest.json を更新します。poc.section_id を設定し、poc.status を "completed" に、poc.timestamp を現在の ISO タイムスタンプに設定します。該当セクションの status を "completed" に設定します。
ステップ 7:PoC の品質確認

ガイドモード: .paper-team/output/{file} からサブエージェントの出力を読み込みます。冒頭の短い抜粋(最初の 20~30 行)をユーザーに表示します。その後、次のように質問します。

AskUserQuestion({
  question: "PoC gate: Is the subagent output quality acceptable?\n概念验证:子代理输出质量是否可接受?",
  options: [
    { label: "Approved - PoC gate passed", description: "Quality is comparable to main-session execution" },
    { label: "Retry", description: "Re-run PoC on the same section" },
    { label: "Exit", description: "Stop orchestration, quality is not acceptable" }
  ]
})
  • 承認: manifest.json の poc.status を "passed" に更新します。次のメッセージを表示します:「PoC ゲートに合格しました。ppw:team オーケストレーターの検証が完了しました。すべてのセクションを並列処理するには、Phase 20 の並列ディスパッチを使用してください(近日公開)。」
  • 再試行: ステップ 6 に戻ります。最大 3 回までループし、その後 Exit を提案します。
  • 終了: manifest.json の poc.status を "failed" に更新します。メッセージを表示し、Skill を直接実行するよう提案します:「/ppw:{skill} {file}」

ダイレクトモード: 自動承認し(poc.status を "passed" に設定)、出力の最初の 10 行と成功メッセージを表示します。

出力契約

出力形式条件
section_files.paper-team/sections/ 内の個別ファイルStep 3 の後に必ず生成
manifest.paper-team/manifest.json必ず生成され、ワークフロー全体を通して更新
poc_output.paper-team/output/ 内の単一ファイルStep 6 の後に生成

エッジケース

状況対応
論文に \section{} コマンドがない本文全体を「01 - Full Body」という1つのセクションとして扱います
論文のセクションが1つだけ並列処理にメリットがないことを警告し、PoC に進みます
ファイルパスにスペースが含まれるすべての Read/Write 操作でファイルパスを引用符で囲みます
.paper-team/ がすでに存在する上書きするかキャンセルするかを確認します(ガイド付き)/黙って上書きします(直接実行)
サブエージェントが失敗またはタイムアウトするエラーを報告し、再試行または終了を提案します
\section*{}(番号なし)セクション境界として認識します(パターンには省略可能な * が含まれます)
\section[short]{long}(省略可能な引数)セクション境界として認識します(パターンには省略可能な [...] が含まれます)
空のセクション(境界間に内容がない)空のセクションをスキップし、ファイルを作成しません

フォールバック

シナリオフォールバック
Structured Interaction を利用できないセクション選択についてプレーンテキストで質問します
Agent ツールが失敗するエラーを報告し、セクションに対して Skill を直接実行するよう提案します
対象の Skill SKILL.md が見つからない次のように報告します:「.claude/skills/ppw-{skill}/SKILL.md に Skill ppw:{skill} が見つかりません」
.planning/workflow-memory.json が見つからない追記する前に [] として作成します

Skill: ppw-team 規約: references/skill-conventions.md

コメント