技術
約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の内部動作は:
- Axiosでページ取得
- Haikuに要約させる
- 結果を返す
これをスキルで再現する。
スキルの実装
.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.json に Bash(curl:*) の許可が必要。
{
"permissions": {
"allow": [
"Bash(curl:*)"
]
}
}
モデル名
モデル名は環境によって挙動が異なる可能性がある。haiku で動く場合もあれば、claude-haiku-4-5-20251001 のようにフルネームが必要な場合もある。エラーが出たらフルネームを試すこと。
参考
- Auto-Approve WebFetch and WebSearch in Claude Code with Hooks - Hooksを使う別の回避策