web-crawl について
web-crawl は、ウェブページを取得して Markdown に変換し、素材フォルダーや wiki の下書きに保存するスキルです。内蔵バックエンドは単一の静的ページに対応し、別のバックエンドを設定すると JavaScript レンダリングやサイト全体のクロールも可能です。
主な機能
- 01ウェブページの内容を Markdown に変換
- 02単一の静的ページを取得
- 03ローカル HTML ファイルを変換
- 04素材または下書きに保存
- 05別のクロールバックエンドを設定
活用シーン
- 01記事を Markdown の資料として取得
- 02外部ドキュメントを wiki の下書きに整理
- 03ローカル HTML を Markdown に変換
MCP 対応
README では、Firecrawl がエージェントのワークフロー向け MCP を提供すると説明されています。web-crawl 自体は設定可能なアダプターを介してクロールバックエンドを利用します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ rheinmir/ setup --skill web-crawlインストール後、Claude Code で/web-crawlを入力して読み込まれたか確認します。
詳細
スキル:web-crawl
Web ページを取得し、wiki/LLM 向けのクリーンな Markdown に変換します。バックエンドは隔離されたアダプター(harness/web-crawl.config.yaml、verified:false)です。組み込み機能は現在動作しており、キーは不要です。
WHAT
目的と背景
- 目的: URL(またはサイト)をクリーンな Markdown に変換し、
raw/または wiki の下書きに保存します。生の HTML は使用しません。 - 使用するタイミング:
- ユーザーが URL を提示し、その内容を求めている場合(「これをクロールして」「スクレイピングして」「ページを取得して」「このページを読んで」)。
- 外部のドキュメント/記事を
raw/または wiki の下書きに取り込む場合。 - 調査のために多数のページをまとめて読む場合(その場合はプレミアムバックエンドを優先してください)。
- 対象外: ページの UI/見た目の複製(それは
/web-cloneです)、wiki/への直接書き込み(/propose/ingestを経由します)、認証で保護されたコンテンツや許可されていないコンテンツのクロール。
基本的な考え方
URL → バックエンド(セッション内の WebFetch・組み込み urllib+regex・プレミアムアダプター firecrawl/crawl4ai/jina)→ Markdown → raw/ または wiki の下書き → /propose または ingest → wiki。バックエンドは、まず構築して後から適応するための隔離環境です。組み込み機能はオフライン時のフォールバックで、プレミアム機能は単一の設定ファイルで有効化する実際のアップグレードです。
入力と出力の仕様
| フィールド | 必須? | 意味 | |
|---|---|---|---|
| 入力 | URL | はい | 取得するページまたはサイト。md モードではローカルの .html ファイルも指定できます |
| 入力 | --out path | いいえ | 保存先。規定の形式は raw/<slug>.md です |
| 入力 | プレミアムバックエンドの設定 | いいえ | harness/web-crawl.config.yaml の backend と api_key_env/endpoint、および verified:true |
| 出力 | Markdown ファイル | はい | raw/ または wiki の下書きに保存するクリーンなテキスト |
| 出力 | バックエンドの明示 | はい | 使用したバックエンドを明示します。組み込み機能の品質上の制限も記載し、プレミアム機能であるかのように装ってはいけません |
ルールと機能
- RULE-01(必須):生の HTML ではなく Markdown を使用します。これが目的です(トークンの節約とクリーンなテキスト)。
- RULE-02(必須):robots.txt/サイトの利用規約を遵守してください。認証で保護されたコンテンツや許可されていないコンテンツをクロールしてはいけません。
- RULE-03(必須):組み込みバックエンドはオフライン時のフォールバックで、プレミアムバックエンドは BNAL アダプターです。配線されていないプレミアムバックエンドを、動作するものとして示してはいけません。
- RULE-04(必須):セルフテストを実行します:
python3 harness/scripts/web-crawl.py --self-test。 - 機能:外部 HTTP 取得(または JS レンダリングを伴うセッション内の Web 取得)、HTML から Markdown への変換、
raw/または wiki の下書きへの書き込みのみ。
失敗時の対応
- サイトが JS でレンダリングされ、組み込み機能しか利用できない → 一部取得(組み込み機能は JS をレンダリングできません)。セッション内の WebFetch を優先するか、プレミアム機能を接続してください。
- 接続済みのプレミアムバックエンドがない状態でサイト全体のクロールを要求された → 設定が必要なためブロック(組み込み機能は単一ページのみ対応)。その旨を伝え、実行したふりをしてはいけません。
- robots.txt/利用規約で禁止されている、またはページが認証で保護されている → ブロックし、クロールしてはいけません。
- 取得エラー → 失敗。URL とエラーを報告してください。
HOW
主なワークフロー
| ステップ | 種類 | 入力 | アクション | 出力/終了条件 | 失敗時/次のステップ |
|---|---|---|---|---|---|
| W01 | 判定 | URL、セッションの種類 | エージェントセッション内でのJSを多用するサイト/レンダリング済みサイト → WebFetch ツール(B01) | markdown | セッション外 → W02 |
| W02 | 実行 | URL | スクリプトによる単一の静的ページの取得:web-crawl.py fetch 組み込みバックエンド(またはローカルHTMLの場合は md) | raw/<slug>.md | JS/サイト全体の取得が必要 → W03 |
| W03 | 実行 | 設定 | 実際のクロール → harness/web-crawl.config.yaml でプレミアムバックエンドを接続し、verified:true に切り替える(B02) | プレミアムバックエンドの出力 | 未接続 → 制限を報告し、実行したと主張しない |
| W04 | 実行 | markdown | raw/ またはWikiの下書きに保存し、その後 /propose / ingest を実行 | ファイルを保存 | wiki/ に直接保存しない |
各ステップの詳細(W01~W04の正確な情報源):
- JSを多用するサイト/レンダリング済みサイトですか? エージェントセッション内では、セッション内の WebFetch ツールを優先してください (JSをレンダリングし、markdownを返します)。最も機能が豊富な方法で、セットアップも不要です。
- スクリプトによる単一の静的ページの取得(オフライン、キー不要):
python3 harness/scripts/web-crawl.py fetch "<URL>" --out raw/<slug>.md⚠️builtinバックエンドは意図的に 基本機能のみ です:urllibによる取得と正規表現によるHTML→markdown変換のみで、JSレンダリングなし、単一ページのみ、スマートな抽出なし です。オフライン用の代替手段であり、Firecrawlと同等の品質ではありません。 ローカルのHTMLをすでにダウンロードしていますか?web-crawl.py md <file.html>を使用してください。 - 実際のクロール(JSレンダリング、サイト全体、クリーンな抽出)→ 実際のエンジンを接続: 品質を高めるのはプレミアムバックエンドです。
harness/web-crawl.config.yamlにbackend: firecrawl|crawl4ai|jinaとapi_key_env/endpointを設定し、verified:trueに切り替えてください。Firecrawl(マネージド、クロール結果をmarkdownに変換、トークンを約5~10分の1に削減、エージェントのループ向けの MCP を提供)または Crawl4AI(オープンソース、セルフホスト、適応型セレクター)を使用できます。組み込みバックエンドがあるため、このスキルはすぐに実行できます。これらが本格的なアップグレードです。 - 保存する: markdownを
raw/(人間が確認するための受け取り場所)またはWikiの下書きに保存し、その後/propose/ingestを実行して、抽出した内容をWikiに取り込みます。wiki/に直接書き込まないでください(R1/R2)。
分岐
| ID | 種類 | 条件 | 動作 | スキップ/失敗 | 合流先 |
|---|---|---|---|---|---|
| B01 | 任意の機能 | WebFetchを使えるエージェントセッション内で実行しており、ページがJSを多用している | 組み込みスクリプトの代わりにWebFetchを使用する | WebFetchが使えない → W02の組み込みバックエンド(JSレンダリングなし、一部のみ) | W04 |
| B02 | 任意の機能 | プレミアムバックエンドが設定され、verified:true になっている | firecrawl/crawl4ai/jinaアダプターでクロールする(JS、サイト全体) | 未接続 → 組み込みバックエンドを使用し、その制限を明示する(RULE-03) | W04 |
| B03 | 任意のユーザー操作 | ローカルのHTMLをすでにダウンロードしている | fetchの代わりに web-crawl.py md <file.html> を使用する | — | W04 |
検証と終了条件
python3 harness/scripts/web-crawl.py --self-test が成功すれば、バックエンドは正常です。markdownファイルが raw/ または下書きに存在し、返信で使用したバックエンドを明記したら完了です。組み込みバックエンドの出力品質(抽出、JSコンテンツ)は確認対象ですが、保証するものではありません。
例
- 成功例:「https://example.com/blog/post を raw にクロールして」(静的ページ、キー不要)→
python3 harness/scripts/web-crawl.py fetch "https://example.com/blog/post" --out raw/example-post.md→ markdownを保存し、その後ingestを提案します。 - 制限/失敗例:
verified:falseの状態で「ドキュメントサイト全体をスクレイピングして」→ 組み込みバックエンドは単一ページのみ →harness/web-crawl.config.yamlでプレミアムバックエンドを接続する必要があると報告し、サイト全体をクロールしたと主張しないでください。
参考 — 関連項目
harness/scripts/web-crawl.py+harness/web-crawl.config.yaml(バックエンドアダプター)。- 実際のエンジン(アップグレード先): Firecrawl(
github.com/mendableai/firecrawl、マネージド + MCP)、 Crawl4AI(github.com/unclecode/crawl4ai、オープンソース、セルフホスト)、Jina Reader。PDF/ドキュメントにはMinerU(お気に入りに登録済み)を使用できます。 /web-clone— テキストではなく、ページのUI/見た目が必要な場合に使用します。build-now-adapt-later— このバックエンドが採用している隔離パターン。