HN 日本語サマリー

← 一覧へ戻る
プログラミング

Show HN: Docx-CLI: エージェントがWord文書を半分の時間とトークンで読み書き

Show HN: Docx-CLI: agents read/edit Word docs using 1/2 the time and tokens (github.com)

41 pointsby kirillklimuk15 コメント

要約

Docx-CLIは、AIエージェントがWord文書(.docx)を効率的に読み書きするためのコマンドラインインターフェースです。フォーマットを維持しつつ、コメントの追加、変更提案(redlines)、編集を可能にし、人間がWordで最終確認できます。AIがOOXMLを直接操作する代わりに、構造化されたコマンドとMarkdownビューを使用するため、トークン消費が少なく、Wordで開けないファイルが生成されるリスクが低減されます。

全文翻訳

docx-cli AIエージェントのために構築された.docx CLI。 フォーマットを壊したりコンテンツを失ったりすることなく、コメントを残したり、変更を提案したり、Word文書を編集したりできます。人間が後でWordで承認または却下します。 ClaudeやCodexに.docxを渡すと、コメント付きの赤線(redlined)コピーが返ってきます。それをWordで開くと、通常通り承認または却下できます。 エージェントは、文字オフセット付きの安定したロケーター(p3:5-20)でテキストを処理します。人間はディスク上の通常のWordフォーマットを見ます。 カスタムスタイル、テーマカラー、埋め込みオブジェクトなど、すべてがそのまま残ります。 CLIは、損失のあるモデルから再生成するのではなく、XMLをインプレースで変更します。 なぜdocx-cliなのか? エージェントがWord文書を編集するデフォルトの方法は、.docxを解凍して内部のOOXMLを直接書き込むことです。これには強力なモデルが必要で、トークンを消費し、通常はWordで開けないファイルが生成されます。 docx-cliは、エージェントにプレーンなコマンドと注釈付きMarkdownの読み取りビューを渡すため、XMLについて推論する必要がありません。 測定しました — 管理されたA/Bテスト:6つの実際の文書タスク(NDAの記入、請求書の記入、履歴書の再スタイル設定、契約書の赤線引き、契約書の最終化、ジャーナルの作成)、同じ開始ファイル、およびWordでレンダリングされたページから各結果を採点する独立した審査員。 各モデルティア(Haiku(弱い、安い)、Sonnet(強い))で各アーム3回実行。 | docx-cli default skill | docx-cli default skill | |---|---| | Tasks solved (of 6) 4.3 (4–5) | 0.7 (0–1) | | Rendered correctly (of 6) 6 | 3.7 | | Outright-broken documents 0 | ~1/run (up to 2) | | Input tokens 2.4M | 6.1M (2.6×) | | Wall-clock 924 s | 1,882 s (2.0× slower) | | docx-cli | docx-cli | |---|---| | Tasks solved (of 6) 6.0 (6–6) | 4.0 (4–4) | | Rendered correctly (of 6) 6.0 | 4.7 | | Outright-broken documents 0 | 0 | | Input tokens 1.6M | 3.6M (2.2×) | | Wall-clock 1,175 s | 2,029 s (1.7× slower) | 正確性のギャップは、安価なHaikuティアで最も大きくなっています(約6倍)。フロンティアモデルでもそれを埋めることはできません。デフォルトスキルは4/6でキャップされ、契約書の赤線引きと履歴書のタスクをSonnetの各実行で失います。 コストと速度のペナルティはモデルに依存しません。トークンは約2.2〜2.6倍、両ティアで約1.7〜2倍遅くなります。トークン/時間の範囲は重複しません。 Wordはデフォルトスキルの作業を確実に開くことができませんでした。36個の出力のうち5個を開けませんでしたが、docx-cliのすべての36個は最初の試行で開きました。 完全な方法論、タスクごとのルーブリック、およびサイドバイサイドレンダリング:ベイクオフの書き込み。 インストール npm — 最も簡単な方法(Bun >= 1.3が必要): bun add -g bun-docx # またはインストールせずに実行: bunx bun-docx read doc.docx スタンドアロンバイナリ(Bun不要)。 各リリースは、プリビルドバイナリとSHA256SUMSマニフェストを公開します。インストーラーは、インストール前にバイナリのSHA-256を検証します。 curl -fsSL https://raw.githubusercontent.com/kklimuk/docx-cli/main/install.sh | sh PREFIX(デフォルト$HOME/.local/bin)とVERSION(デフォルトlatest)を尊重します。 linux/x64、linux/arm64、darwin/x64、darwin/arm64、windows/x64用にプリビルドされています。 最初に確認したいですか?最新リリースからdocx-<platform> + SHA256SUMSをダウンロードし、検証し、chmod +xしてPATHに配置します。 簡単な例:NDAの記入 リポジトリには、tests/fixtures/mnda.docxにCommon Paper Mutual NDAテンプレートが含まれています。 以下は、エージェントがカバーページを記入し、赤線編集を残すために構成するプリミティブです。ビデオに示されているのと同じフローです。 各コマンドはフィクスチャに対してエンドツーエンドで検証されました。 # まずコピーを作成 — 元に戻すことはできません(gitが履歴です。CLIはインプレースで上書きします) cp tests/fixtures/mnda.docx mnda-filled.docx # カバーページテーブルを読み取り、エージェントがプレースホルダーの存在を知るようにする docx read mnda-filled.docx --from t1 --to t1 # 黄色でハイライトされた括弧付きプレースホルダーを記入する docx replace mnda-filled.docx "Fill in: today's date" "May 6, 2026" docx replace mnda-filled.docx "fill in state and/or county" "California" docx replace mnda-filled.docx "fill in state" "California" docx replace mnda-filled.docx "Fill in, if any." "None." # 記入すべきものが残っていないか確認する(ベアロケーター行、一致ごとに1行。何もなければ終了コード0) docx find mnda-filled.docx '[(Fill|fill)[^]]*]' --regex --all # 赤線引きパスのために変更履歴をオンにする docx track-changes mnda-filled.docx on # 使用と保護条項の "having a reasonable need to know" をタイトにする docx replace mnda-filled.docx "having a reasonable need to know" "with a documented need to know" # 人間のレビュー担当者のためにコメントを残す — --atで既存のスパンを対象とする docx comments add mnda-filled.docx --at p7:0-30 --text "Should we narrow 'representatives' to a named list?" Wordでmnda-filled.docxを開きます:変更履歴とコメントがレビューペインに表示され、承認、却下、または返信の準備ができています。 または、CLIからそれらを適用するために docx track-changes accept mnda-filled.docx --all を実行します。 エージェントスキルとしての使用 docx-cliはエージェントスキルとして提供されます — Claude Code、Codex、Pi、およびオープンなスキル形式を読み取る他のハーネス全体で機能する1つのSKILL.md。 スキルはロケーターモデルと赤線/コメント/記入ワークフローを教え、実行時に docx <command> --help に委譲するため、古くなることはありません。 なぜスキルなのか? docx-cliは最も弱い、最も安価なエージェントのために構築されています。私たちの弱いエージェントベンチマーク(6つの実際の文書タスク(契約書の記入、赤線引き、コメント、再スタイル設定、ゼロからの作成)、Wordレンダリングに対して採点、各3回実行)では、Haikuがdocx-cliを駆動した場合、デフォルトのClaudeスキルで0.7/6だったのに対し、4.3/6のタスクを完了しました。トークンは約2.5倍少なくなっています。Sonnetでは6/6対4/6で、トークンは約2倍少なくなっています。 そして、docx-cliのすべての出力は最初の試行でWordでクリーンに開かれました — レンダラーが拒否するファイルを生成することはありません。(方法論とハーネス:.claude/skills/weak-agent-test。) インストール 任意の(skills.sh)エージェント — 1行のクロスハーネスコマンドで、使用中のエージェントにインストールされます。 npx skills add kklimuk/docx-cli Claude Code — 1行のプラグインインストール: /plugin marketplace add kklimuk/docx-cli /plugin install docx-cli@docx-cli Codex — マーケットプレイスを追加します(プラグインのスキルは自動検出されます): codex plugin marketplace add kklimuk/docx-cli Pi — 1コマンドインストール(package.jsonのpiマニフェストがスキルをプルします)、その後 /skill:docx-cli: を呼び出します。 pi install git:github.com/kklimuk/docx-cli # グローバル;プロジェクト(チーム共有)インストールには -l を追加します。 # 手動代替:pi --skill /path/to/docx-cli/skills/docx-cli 任意のハーネス / 手動 — skills/docx-cli/ をエージェントのスキルディレクトリ(例:~/.claude/skills/ またはクロスツール ~/.agents/skills/)にドロップします。 最初の起動時に、スキルのscripts/bootstrap.shがdocxバイナリをインストールします(そして古いものを自己更新します)。 スキルを最新の状態に保つ バイナリが真実の情報源です: docx info skill は、インストールされたバージョンの正規のSKILL.mdを印刷し、コミットされたコピーがドリフトした場合、CIテストは失敗します。 変更後は次のコマンドで再生成します。 docx info skill > skills/docx-cli/SKILL.md docx <command> --help は権威ある契約です エージェント:呼び出しを構成する前に docx <command> --help を実行してください。 各コマンドの --help は、フラグ、ロケーター形式、および正確な出力形状の真実の情報源です — このREADMEはマップであり、領土ではありません。 さらに2つの必読項目: docx info locators — 正規のロケーター文法(マシン可読形式の場合は --json)。 トップレベルの docx --help はそれを直接述べています:「エージェントは、その機能性を理解するために docx info locators を実行することを強く推奨します。」 docx info schema — read --ast が出力するAST型定義(TypeScriptソースの場合は --ts)。 コマンドリファレンス docx <verb> および docx <noun> <verb>。 各コマンドには --help があります。 2つのグループ:read/queryコマンドは標準出力にデータを表示します。mutateコマンドはファイルを変更します(そして --dry-run, -o/--output PATH, -v/--verbose を受け入れます)。 読み取りとクエリ(標準出力に表示、ファイルを書き込まない) docx read FILE [--from LOC] [--to LOC] [--accepted | --baseline | --current] [--comments] docx read FILE --ast # Markdownの代わりにJSON-AST(markdownのみのフラグを無効にする) docx find FILE QUERY [--regex] [--ignore-case] [--all] [--nth N] [--current | --baseline] [--exact] [--json] docx find FILE (--highlight COLOR|any | --color HEX | --bold | --italic | --underline) [--all] [--json] # フォーマットで検索(QUERYなし) docx wc FILE [LOCATOR] [--accepted | --baseline | --current] [--json] docx outline FILE [--style-prefix S] [--json] docx styles FILE [--used] [--at STYLEID] [--json]