技術 約2分で読めます

Claude CodeのWebFetchの代替スキルを作った

Claude CodeのWebFetchツールで domain:* のワイルドカードが動作しないバグがあったので、代替スキルを作った。

前回の記事: Claude Codeの権限設定、なんもわからん

問題

Claude Codeの設定ファイル(settings.local.json)でWebFetchを許可しようとした。

{
  "permissions": {
    "allow": [
      "WebFetch(domain:*)"
    ]
  }
}

しかし、この設定をしてもWebFetchを使うたびに許可を求められる。

調べたところ、これは既知のバグだった。

解決策

Bash(curl:*) は正常に動作するので、curlでページを取得してスキルで処理すればいい。

WebFetchの内部動作は:

  1. Axiosでページ取得
  2. Haikuに要約させる
  3. 結果を返す

これをスキルで再現する。

スキルの実装

.claude/skills/web-fetch/SKILL.md を作成:

---
permissionMode: bypassPermissions
tools: Bash
model: claude-haiku-4-5-20251001
---

# WebFetch代替スキル (project)

WebFetchツールの `domain:*` ワイルドカードが動作しないバグの回避策。
サブエージェント + curl で同等の機能を実現。コンテキスト節約。

## 引数: $ARGUMENTS

形式: `URL 質問`
例: `https://example.com このページの概要を教えて`

---

## 実行手順

Taskツールでサブエージェントを起動し、以下を実行させる:

subagent_type: general-purpose
model: haiku
prompt: |
  以下のURLにcurlでアクセスし、質問に回答してください。

  URL: 【$ARGUMENTSの最初のURL部分】
  質問: 【$ARGUMENTSのURL以降の部分】

  手順:
  1. curl -sL "URL" | head -500 でページ取得
  2. HTMLからテキスト内容を抽出
  3. 質問に対して日本語で簡潔に回答

  回答のみ返してください。

サブエージェントの回答をそのままユーザーに返す。

ポイント:

  • permissionMode: bypassPermissions でBashを許可不要に
  • model: claude-haiku-4-5-20251001 でコスト節約(フルモデル名が必要)
  • head -500 でコンテキスト節約

使い方

/web-fetch https://example.com このページの概要を教えて

注意

curlの許可設定

このスキルは内部でcurlを使うため、settings.local.jsonBash(curl:*) の許可が必要。

{
  "permissions": {
    "allow": [
      "Bash(curl:*)"
    ]
  }
}

モデル名

モデル名は環境によって挙動が異なる可能性がある。haiku で動く場合もあれば、claude-haiku-4-5-20251001 のようにフルネームが必要な場合もある。エラーが出たらフルネームを試すこと。

参考