tags : Claude Code, AI, Agent Skills

Claude Code のスキル(カスタムスラッシュコマンド)。URL の内容を読み取り、コアメッセージがわかるように要約する。

概要

URL を渡すと種別(通常記事、X/Instagram、Reddit)を自動判定し、適切な方法でコンテンツを取得して日本語で要約する Claude Code スキル。 「この記事を要約して」「この URL の内容を教えて」などのリクエストで発火する。Web 開発の検証やブラウザ操作には使わない(それは agent-browser の役割)。

使い方

  1. .claude/skills/url-digest/SKILL.md として配置
  2. X/Instagram の取得に agent-browser CLI ツールが必要( npx agent-browser で利用可能)
  3. フォールバック用に claude-in-chrome MCP サーバーがあるとよい
  4. Reddit は curl + jq を使用(WebFetch はブロックされるため)
  5. 通常記事は WebFetch ツールで直接取得するため追加設定不要

SKILL.md テンプレート(汎用版)

---
name: url-digest
description: URL の内容を要約する。記事要約、ページ要約。「この記事を要約して」「この URL の内容を教えて」「要約して」などのリクエストで発火。Web 開発の検証やブラウザ操作には使わない。
allowed-tools: Bash(npx agent-browser:*), Bash(agent-browser:*)
---
 
# URL要約
 
複数の URL を読み取り、コアメッセージがわかるように要約する。
 
## 入力形式
 
ユーザーから URL が1つ以上渡される。URL は改行区切りまたはスペース区切りで提供される。
 
## 実行手順
 
### 1. URL 種別判定
 
渡された URL を以下のカテゴリに分類:
 
**X (Twitter) / Instagram** (`x.com/*`, `twitter.com/*`, `instagram.com/*`):
- JavaScriptが必要なためWebFetchでは取得不可
- まず agent-browser(CLI)で取得を試みる
- agent-browser で取得できない場合のみ claude-in-chrome(MCP)にフォールバック
 
**Reddit** (`reddit.com/r/*/comments/*` または `www.reddit.com/r/*/comments/*`):
- curlでJSON形式で取得(WebFetchはreddit.comをブロック)
- 元記事とコメントの両方を分析
 
**通常記事**:
- 上記以外のURL
- 直接WebFetchで取得
 
### 2. コンテンツ取得
 
#### 通常記事
WebFetch ツールで内容を取得:
- タイトルと本文を抽出
- コアメッセージを要約
 
#### X (Twitter) / Instagram
 
JavaScript レンダリングが必要なため、ブラウザ自動化ツールを使用する。
 
##### 方法1: agent-browser(優先)
 
```bash
agent-browser open <URL>
agent-browser eval "document.querySelector('article')?.innerText || document.body.innerText"
agent-browser close
```
 
- `eval` で記事本文を直接取得する
- 取得したテキストが空、またはログイン壁で本文が得られない場合は方法2へ
 
##### 方法2: claude-in-chrome(フォールバック)
 
agent-browser で取得できなかった場合のみ使用:
 
1. `tabs_context_mcp`でタブ情報を取得(`createIfEmpty: true`
2. `tabs_create_mcp`で新しいタブを作成
3. `navigate`ツールでURLに移動
4. ページ読み込み完了まで待機(`computer`ツールの`wait`アクション、2-3秒)
5. `get_page_text`で本文を取得
 
##### 抽出する情報
- 投稿本文
- 投稿者名・ハンドル
- 画像/動画の有無(あれば内容を説明)
- リプライ・引用がある場合はその文脈
 
#### Reddit
 
**重要**: 投稿情報とコメントは別々の jq クエリで取得すること(一度に取得すると jq エラーになる)
 
1. **投稿情報の取得**:
   ```bash
   curl -s -H "User-Agent: url-digest/1.0" \
     "https://old.reddit.com/r/{subreddit}/comments/{post_id}.json" \
     | jq '.[0].data.children[0].data | {title, url, selftext, is_self}'
   ```
 
2. **コメントの取得**(別クエリで実行):
   ```bash
   curl -s -H "User-Agent: url-digest/1.0" \
     "https://old.reddit.com/r/{subreddit}/comments/{post_id}.json" \
     | jq '[.[1].data.children[:8][].data | select(.body) | {body: .body[0:500], score}]'
   ```
 
   **注意**: `select(.body != null)`は使わない(感嘆符がシェルでエスケープされるため)。`select(.body)`を使う。
 
3. **元記事取得**:
   - `url`フィールドが外部URLの場合、WebFetchで元記事を取得
   - 自己投稿(`is_self: true`)の場合、`selftext`が本文
 
4. **コメント分析**:
   - 上位コメントから興味深いインサイト、反論、追加情報を抽出
 
### 3. 要約生成
 
各 URL について以下を生成:
 
**タイトル**:
- 記事の元タイトル
- 英語の場合は日本語に翻訳
 
**要約**:
- コアメッセージを3-5行で要約
- 何が重要なのか、なぜ注目に値するのかを明確に
- Redditの場合は以下も含める:
  - コミュニティの反応(賛否、議論のポイント)
  - 興味深いコメントからのインサイト
  - 補足情報や反論
 
**URL**:
- 入力されたURL(Redditの場合はそのまま)
 
### 4. 出力
 
会話内で直接要約を返す。ファイル保存はしない。
 
#### フォーマット
 
```
## [記事タイトル(英語の場合は日本語訳)]
 
要約本文。コアメッセージを3-5行で記述。
Reddit の場合はコミュニティの反応やインサイトも含める。
 
URL
```
 
## 注意事項
 
- **すべての記事にURLを必ず含める**
- **英語タイトルは日本語に翻訳**
- **Redditは元記事とコメントの両方を確認**(これが重要)
- **X.com / Instagram は agent-browser を優先**、取得できない場合のみ claude-in-chrome にフォールバック
- Redditはcurlを使用(WebFetchはブロックされる)
- Reddit APIレート制限に注意(1分あたり60リクエスト程度)
- 要約は簡潔に、核心を突く内容で