human-review について
human-reviewは、HTML、Markdown、ローカルのWebページをユーザーと確認するエージェント向けスキルです。ブラウザーで編集やコメントを行い、まとめて送信できます。Markdownの変更は書式を保ってソースに反映します。
主な機能
- 01ブラウザーでの編集と選択範囲へのコメント
- 02フィードバックの一括送信
- 03Markdownをレンダリングして確認
- 04フィードバックの待機と状態確認
- 05ソースファイルへの反映
活用シーン
- 01Markdown文書のユーザーレビュー
- 02ローカルWebページへのコメント収集
- 03複数ページの意見をまとめてソースを修正
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ petergyang/ human-review --skill human-reviewインストール後、Claude Code で/human-reviewを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
anchor-text.jschrome-client.jschrome-session.jschrome.csschrome.htmlcli.jsclick-target.jsediting.jsframe-policy.jshtml-transform.jsmarkdown.jspaths.jssdk.jsserialize.jsserver-entry.jsserver.jssetup.jsstate.js詳細
human-review
ユーザーは実際のブラウザーで、HTML、Markdown、または localhost のページをレビューします。入力して細かな修正を行い、コメントしたい箇所を選択して、フィードバックをまとめて送信します。
Markdown ファイルはレンダリングされた状態で開きます。引用や編集はレンダリングされたテキストを参照しますが、ファイル自体には一切手を加えません。書式構文を維持しながら、すべての変更を Markdown ソースに適用してください。
一連の流れ
-
HTML または Markdown ファイルを書き込むか更新するか、レビュー対象のローカルページを起動します。
-
ユーザーがレビューできるように開きます。
npx -y human-review path/to/file.htmlローカル開発サーバーで配信されるページの場合は、別の HTML ファイルとして作り直すのではなく、実際のルートを開きます。
npx -y human-review http://localhost:3000/wiki -
フィードバックを待ちます。このコマンドは、ユーザーがブラウザーで「送信」を押すまでブロックし、その後、フィードバックの一括分を出力して終了します。
npx -y human-review poll path/to/file.htmlこのコマンドは、ユーザーが「送信」をクリックするか、レビューを閉じたときにのみ終了します。再実行する必要はなく、ポーリングの間隔を設定する必要も、
--timeoutを追加する必要もありません。ローカルサーバーが再起動しても動作し、ポーリングが終了してもフィードバックは保存されるため、失われることはありません。待機方法は、使用しているハーネスによって異なります。-
Claude Code:
run_in_background: trueを指定して実行し、ターンを終了します。コマンドが終了すると、出力とともに Claude Code がすぐに再開します。 -
Codex、Cursor、およびその他すべて: アクティブなターン内でフォアグラウンド実行し、
feedbackまたはclosedが出力されるまで待機します。コマンドをデタッチしたり、バックグラウンドセッションとして起動したりしないでください。デタッチしたコマンドが終了しても、通知されません。レビュー中は、次のようにします。- ユーザーからメッセージが届いたら、解説として返信し、同じターン内ですぐにフォアグラウンドポーリングを再開します。ポーリングが
feedbackまたはclosedを返すまでは、最終応答を送信しないでください。最終応答を送信するとターンが終了し、待機も打ち切られます。 - シェルツールでコマンドの実行時間に上限がある場合は、上限より少し短い時間を
--timeoutに指定し、feedbackまたはclosedが返されるまで、同じアクティブなターン内で上限付きのポーリングを続けて実行します。
制限を把握しておいてください。ターンがアクティブな間に限り、確実に機能します。すでに終了したターンは、ユーザーが「送信」を押しても再開されません。その場合、ユーザーからメッセージを受け取った後に
statusとpollを実行して、フィードバックを取得する必要があります。ポーリングが終了しても、終了したタスクを再開する連携機能はありません。 - ユーザーからメッセージが届いたら、解説として返信し、同じターン内ですぐにフォアグラウンドポーリングを再開します。ポーリングが
{"status":"closed"}が出力された場合、レビューは終了しています。ユーザーがレビューを終了したか、タブを閉じたか、タブが開かれていなかったことを意味します(理由はreasonに示されます)。停止し、ポーリングを再開しないでください。unsentは未送信のフィードバック数です。ゼロでない場合は、保存されており、次回復元または破棄できることをユーザーに一行で伝えてください。{"status":"superseded"}は、新しいポーリングが待機を引き継いだことを意味します。このポーリングは黙って停止してください。{"status":"timeout"}は 12 時間後にのみ出力されます。レビューがまだ開いている場合は、statusを実行して待機を再開してください。 -
-
返された内容を適用し、次のバックグラウンドポーリングを開始します。
--ackを指定すると、処理したフィードバックの一括分が消去されます。npx -y human-review poll path/to/file.html --ack
ユーザーが完了を伝えるまで、手順 3~4 を繰り返します。
新しいターンの開始時など、ポーリングが実行されていない場合に、フィードバックがすでに届いているかどうか確認したい場合は、ブロックせずにすぐ応答する次のコマンドを実行します。
npx -y human-review status path/to/file.html
ポーリングで取得できるフィードバックがある場合は {"status": "feedback-waiting"} が出力され、ブラウザーに残っている未送信のコメントと編集の数も表示されます。
受け取る内容
ユーザーがアクセスしたすべてのページを対象に、ファイルまたは localhost URL ごとにまとめたフィードバックを一括で受け取れます。
{
"status": "feedback",
"pages": [
{
"file": "/abs/path/to/page.html",
"edits_saved": true,
"comments": [
{ "id": "c_1", "kind": "selection", "quote": "the exact text they selected",
"anchor": { "prefix": "...", "quote": "...", "suffix": "..." },
"feedback": "what they want changed" }
],
"edits": [
{ "label": "Problem body", "kind": "edited",
"before": "the original wording",
"after": "their exact new wording",
"after_html": "their exact new wording with <strong>formatting</strong>" }
]
}
],
"overall_note": "feedback not tied to any one page"
}
ルール
editsはユーザーがすでに行った変更です。afterはユーザーが指定した正確な文言です。そのまま引き継ぎ、決して元に戻さないでください。HTML が別の形式(MDX、Markdown、テンプレート)から生成されている場合は、次回のビルドで修正が消えないよう、afterをソースにも適用してください。edits_saved: trueは、編集内容がすでにディスク上のファイルに保存されていることを示します。 プレーンな HTML ファイルはユーザーの入力に応じて自動保存されるため、手元のファイルは古い状態です。変更を加える前にファイルを読み直し、対象を絞って変更してください。以前に作成した内容から再生成すると、ユーザーの作業が消えてしまいます。edits_saved: false(Markdown、localhost ページ、自己レンダリング HTML)の場合、編集内容はこのバッチ内にしかありません。ソースに自分で適用してください。kind: "deleted"の編集は、ユーザーがブロック全体を削除したことを示します。理由を尋ねずに、ソースからも削除してください。truncated: trueとマークされた編集は、テキストが 200k 文字で切り詰められています。after_htmlからではなく、ページ自体からブロックを読み取ってください。before_html/after_htmlがある場合、ユーザーは単語だけでなく書式(太字、斜体、下線、リンク)も変更しています。HTML 版の書式を、ソースの記法に変換して引き継いでください(例:Markdown/MDX では<strong>→**)。kind: "url"のページは、レビュー UI 上で直接編集されています。fileフィールドとurlフィールドは書き込み可能なファイルではなく、localhost のルートを示します。対応するプロジェクトソース(MDX、TSX、テンプレートなど)を見つけ、すべての編集と削除を適用してください。その後、ルートが再読み込みされるよう確認してください。レンダリング済みの HTTP レスポンスをアプリに書き戻してはいけません。- 編集の
after_htmlに<img src="assets/...">が含まれている場合、ユーザーが画像を貼り付けています。ファイルはレビュー対象のファイルと同じ階層のassets/フォルダーにすでにあります。その相対パスを保持し、Markdown ではとして参照してください。画像を再生成したり、インライン化したりしないでください。 - localhost ページでは、貼り付けた画像は
staged_assetsに格納されます。ローカルのpathをアプリの適切なアセットフォルダーにコピーし、after_html内の一時的なプレビュー URL を置き換えて、ユーザーが挿入した位置に画像を保持してください。ソースに一時的なプレビュー URL を残してはいけません。 kind: "moved"の編集は、ユーザーがブロック全体を移動したことを示します。内容を書き換えずに、移動先をソースに反映してください。移動後のブロックは、テキストがmoved_afterで始まるブロックの直後、テキストがmoved_beforeで始まるブロックの直前に配置します(どちらも 90 文字で切り詰められており、末尾が…の場合があります)。moved_afterが空の場合、コンテナー内の先頭に配置します。- 各コメントは
quoteを使って探してください。これはユーザーが選択したレンダリング済みのテキストです。Markdown やテンプレート化された HTML では、書式の記法やタグをまたいでいる場合があります。anchor.prefixとanchor.suffixは、周囲のテキストを使って場所を特定するための情報です。 kind: "element"はブロック全体を指すため、quoteは本文ではなくラベルです。--ackを実行するとstaged_assetsが削除されるため、実行前にファイルをコピーしてください。overall_noteだけを含むバッチでは、pages配列は空です。- 最初のページだけでなく、
pages内のすべてのページを修正してください。 - 返信を書かないでください。 ここにチャットはありません。ファイルを保存するとページは自動的に再読み込みされ、ユーザーはそこで変更を確認できます。
より分かりやすい編集ラベル(任意)
作成するセクションに名前を付けると、ユーザーの編集リストには DOM から推測された名前ではなく、その名前が表示されます。
<p data-block="Problem body">…</p>
<div data-container="Metrics callout">…</div>
data-block は編集リストで使われる領域名を指定します。data-container を付けると、ブロックをコメント対象としてクリックできるようになります。