web-to-markdown
npx skills add https://github.com/bear2u/my-skills --skill web-to-markdown
Agent 安装分布
Skill 文档
Web to Markdown Converter
ì¹íì´ì§ì URLì ì ë ¥ë°ì í´ë¹ íì´ì§ì ë´ì©ì ë§í¬ë¤ì´ íìì¼ë¡ ë³ííì¬ ì ì¥íë ì¤í¬ì ëë¤.
When to Use
ë¤ìê³¼ ê°ì ìì²ì´ ìì ë ì´ ì¤í¬ì ì¬ì©íì¸ì:
- “ì¹íì´ì§ë¥¼ ë§í¬ë¤ì´ì¼ë¡ ë³íí´ì¤”
- “ì´ URLì ë§í¬ë¤ì´ì¼ë¡ ì ì¥í´ì¤”
- “ì¹ì¬ì´í¸ ë´ì©ì ë§í¬ë¤ì´ íì¼ë¡ ë§ë¤ì´ì¤”
- “ì¹íì´ì§ ìì¹´ì´ë¹í´ì¤”
- “ë¸ë¡ê·¸ ê¸ì ë§í¬ë¤ì´ì¼ë¡ ì ì¥í´ì¤”
- “AIê° ì½ê¸° ì¢ê² ë³íí´ì¤” (AI ìµì í 모ë)
- “컨í ì¤í¸ë¡ ì¬ì©í기 ì¢ê² ë³íí´ì¤” (AI ìµì í 모ë)
- “ì본ì´ë AI ìµì í ë²ì ë ë¤ ë§ë¤ì´ì¤” (ëì¼ ëª¨ë) â NEW
Core Workflow
Step 1: URL ì ë ¥ë°ê¸°
ì¬ì©ììê² ë³ííê³ ì íë ì¹íì´ì§ì URLì ì ë ¥ë°ìµëë¤.
Example:
Claude: ë³ííì¤ ì¹íì´ì§ì URLì ì
ë ¥í´ì£¼ì¸ì.
User: https://example.com/article
Important:
- URLì
http://ëëhttps://ë¡ ììí´ì¼ í©ëë¤ - HTTP URLì ìëì¼ë¡ HTTPSë¡ ì ê·¸ë ì´ëë©ëë¤
- ì í¨íì§ ìì URLì ìë¬ë¥¼ ë°íí©ëë¤
Step 2: ë³í 모ë ì í
ì¬ì©ìì ìì²ì ë¶ìíì¬ ì ì í ë³í 모ë를 ì íí©ëë¤.
ë³í 모ë:
- ì¼ë° 모ë (기본): ì¹íì´ì§ë¥¼ ì½ê¸° ì¢ì ë§í¬ë¤ì´ì¼ë¡ ë³í
- AI ìµì í 모ë: AI ìì´ì í¸ê° 컨í ì¤í¸ë¡ íì©í기 ìµì íë ííë¡ ë³í
- ëì¼ ëª¨ë â NEW: ì본 + AI ìµì í ë²ì 2ê° íì¼ ìì±
ìë ê°ì§ í¤ìë:
- “AIê° ì½ê¸° ì¢ê²”, “컨í ì¤í¸ë¡ ì¬ì©”, “AI íìµì©” â AI ìµì í 모ë
- “ì본ì´ë”, “ë 뤔, “2ê°”, “both”, “ì본ë ì 쥔 â ëì¼ ëª¨ë
- 기í â ì¼ë° 모ë
Example 1 (AI ìµì í):
User: https://example.com/article AIê° ì½ê¸° ì¢ê² ë³íí´ì¤
Claude: AI ìµì í 모ëë¡ ë³ííê² ìµëë¤. 구조íë í¬ë§·ê³¼ ë©íë°ì´í°ë¥¼ ì¶ê°í©ëë¤.
Example 2 (ëì¼ ëª¨ë):
User: https://example.com/article ì본ì´ë AI ìµì í ë²ì ë ë¤ ë§ë¤ì´ì¤
Claude: ëì¼ ëª¨ëë¡ ë³ííê² ìµëë¤.
- ì본 ë§í¬ë¤ì´ (article.md)
- AI ìµì í ë²ì (article.context.md)
2ê° íì¼ì ìì±í©ëë¤.
Step 3: ì ì¥ ìµì íì¸
ì¬ì©ììê² ì ì¥ ìì¹ì íì¼ëª ì íì¸í©ëë¤.
Example:
Claude: ë§í¬ë¤ì´ íì¼ì ì´ëì ì ì¥í ê¹ì?
ìµì
:
1. íì¬ ëë í 리 (./)
2. í¹ì ê²½ë¡ ì§ì
3. íì¼ë¡ ì ì¥íì§ ìê³ ë´ì©ë§ 보기
íì¼ëª
ì? (기본ê°: webpage.md)
User: íì¬ ëë í 리ì article.mdë¡ ì ì¥í´ì¤
Step 4: ì¹íì´ì§ ê°ì ¸ì¤ê¸° ë° ë³í
WebFetch ë구를 ì¬ì©íì¬ ì¹íì´ì§ë¥¼ ê°ì ¸ì¤ê³ ë§í¬ë¤ì´ì¼ë¡ ë³íí©ëë¤.
ì¼ë° 모ë í롬íí¸
url = "https://example.com/article"
prompt = "ì¹íì´ì§ì ì ì²´ ë´ì©ì ë§í¬ë¤ì´ íìì¼ë¡ ë³íí´ì£¼ì¸ì. ì 목, 본문, ë§í¬, ì´ë¯¸ì§ ë± ëª¨ë ìì를 í¬í¨íë, ë¶íìí ë¤ë¹ê²ì´ì
ì´ë ê´ê³ ë ì ì¸í´ì£¼ì¸ì."
AI ìµì í 모ë í롬íí¸ (CRITICAL)
url = "https://example.com/article"
prompt = """ì´ ì¹íì´ì§ë¥¼ AI ìì´ì í¸ê° 컨í
ì¤í¸ë¡ íì©í기 ìµì íë ííë¡ ë³íí´ì£¼ì¸ì:
**íì 구조:**
1. **íë¡ í¸ë§¤í° (YAML íì)**
---
title: "íì´ì§ ì 목"
url: "ì본 URL"
author: "ìì±ì (ìë ê²½ì°)"
date: "ë°íì¼ (ìë ê²½ì°)"
word_count: ëëµì ì¸ ë¨ì´ ì
topics: ["주ì 1", "주ì 2", "주ì 3"]
summary: |
ì´ ê¸ì íµì¬ì 3-5ì¤ë¡ ìì½
AIê° ë¹ ë¥´ê² íì
í ì ìëë¡
main_points:
- íµì¬ í¬ì¸í¸ 1
- íµì¬ í¬ì¸í¸ 2
- íµì¬ í¬ì¸í¸ 3
content_type: "tutorial|guide|article|documentation|news|blog"
difficulty: "beginner|intermediate|advanced"
---
2. **본문 구조**
# [ì본 ì 목]
## íµì¬ ìì½
[3-5ì¤ë¡ ì´ ê¸ì´ 무ìì ë¤ë£¨ëì§ ëª
ííê²]
## 주ì ë´ì©
[ëª
íí ê³ì¸µ êµ¬ì¡°ë¡ ì¹ì
구ë¶, H2/H3 ì¬ì©]
### ì¹ì
1
[ë´ì©]
### ì¹ì
2
[ë´ì©]
## íµì¬ ì¸ì¬ì´í¸
- ì¸ì¬ì´í¸ 1
- ì¸ì¬ì´í¸ 2
- ì¸ì¬ì´í¸ 3
## ì¤ì©ì ì ì©
[ì´ ë´ì©ì ì´ë»ê² íì©í ì ìëì§]
## ê´ë ¨ 리ìì¤
[ë§í¬ê° ìë¤ë©´ ì¤ëª
ê³¼ í¨ê»]
## ê²°ë¡
[ë§ë¬´ë¦¬ ìì½]
**ë³í ê·ì¹:**
- ê´ê³ , ë¤ë¹ê²ì´ì
, í¸í°, ì¬ì´ëë° ìì ì ê±°
- ì½ë ë¸ë¡ì ì¸ì´ ëª
ì (```python, ```javascript ë±)
- ë§í¬ë [ì¤ëª
](URL) íìì¼ë¡ ëª
ííê²
- ì´ë¯¸ì§ë  íìì¼ë¡
- ë¶íìí ììì´ ì ê±°, ê°ê²°íê²
- 리ì¤í¸ë ëª
íí bullet pointsë¡
- ì¤ìí ê°ë
ì **êµµê²** ê°ì¡°
**ìµì¢
목í:**
AIê° ì´ ë¬¸ì를 ì½ê³ íµì¬ì 3ì´ ìì íì
íê³ ,
ì¬ì©ìì ì§ë¬¸ì ì ííê² ëµë³í ì ìëë¡ ìµì í
"""
Important:
- WebFetchë HTMLì ìëì¼ë¡ ë§í¬ë¤ì´ì¼ë¡ ë³íí©ëë¤
- 15ë¶ ìºìê° ì ì©ëì´ ê°ì URLì ë°ë³µ ìì²í´ë ë¹ ë¦ ëë¤
- 리ë¤ì´ë í¸ê° ë°ìíë©´ ìë¡ì´ URLë¡ ë¤ì ìì²í©ëë¤
- AI ìµì í 모ëë í í°ì 30-50% ì ê°íê³ êµ¬ì¡°ë¥¼ ëª ííê² í©ëë¤
Step 5: ë§í¬ë¤ì´ ì ì¥
ë³íë ë§í¬ë¤ì´ì íì¼ë¡ ì ì¥í©ëë¤.
# Write ë구를 ì¬ì©íì¬ íì¼ ì ì¥
Write {
file_path: "/Users/symverse/workspaces-skill-test/my-skills-hub/article.md"
content: "[ë³íë ë§í¬ë¤ì´ ë´ì©]"
}
AI ìµì í 모ë íì¼ëª ê¶ì¥:
- ì¼ë°:
article.md - AI ìµì í:
article-ai-optimized.mdëëarticle.context.md
Step 6: ê²°ê³¼ íì¸
ì ì¥ë íì¼ì ê²½ë¡ì ê°ë¨í íµê³ë¥¼ ì¬ì©ììê² ë³´ì¬ì¤ëë¤.
â
ì¹íì´ì§ë¥¼ ë§í¬ë¤ì´ì¼ë¡ ë³ííìµëë¤!
ð íì¼: article.md
ð ê²½ë¡: /Users/symverse/workspaces-skill-test/my-skills-hub/article.md
ð í¬ê¸°: ì½ 1,234 ê¸ì
[View file](computer:///Users/symverse/workspaces-skill-test/my-skills-hub/article.md)
ëì¼ ëª¨ë ìí¬íë¡ì° â NEW
ëì¼ ëª¨ëë ì본 ë§í¬ë¤ì´ê³¼ AI ìµì í ë²ì ì 모ë ìì±í©ëë¤. ì¬ëì´ ì½ì ìë£ì AIê° ì²ë¦¬í ìë£ë¥¼ ëìì íë³´í ì ììµëë¤.
ëì¼ ëª¨ë Step 1: URL ë° íì¼ëª íì¸
User: https://react.dev/reference/react/useState ì본ì´ë AI ìµì í ë²ì ë ë¤ ë§ë¤ì´ì¤
Claude: ëì¼ ëª¨ëë¡ ë³ííê² ìµëë¤.
기본 íì¼ëª
ì? (기본: webpage)
ëì¼ ëª¨ë Step 2: ì본 ë§í¬ë¤ì´ ìì±
ì¼ë° 모ë í롬íí¸ë¡ WebFetch를 ì¬ì©íì¬ ì본 ë§í¬ë¤ì´ì ìì±í©ëë¤.
url = "https://react.dev/reference/react/useState"
prompt = "ì¹íì´ì§ì ì ì²´ ë´ì©ì ë§í¬ë¤ì´ íìì¼ë¡ ë³íí´ì£¼ì¸ì. ì 목, 본문, ë§í¬, ì´ë¯¸ì§ ë± ëª¨ë ìì를 í¬í¨íë, ë¶íìí ë¤ë¹ê²ì´ì
ì´ë ê´ê³ ë ì ì¸í´ì£¼ì¸ì."
ì본 íì¼ ì ì¥:
Write {
file_path: "/path/to/useState.md"
content: "[ì본 ë§í¬ë¤ì´ ë´ì©]"
}
ëì¼ ëª¨ë Step 3: AI ìµì í ë²ì ìì±
CRITICAL: ê°ì URLì ëí´ AI ìµì í í롬íí¸ë¡ ë¤ì WebFetch를 í¸ì¶í©ëë¤.
url = "https://react.dev/reference/react/useState" # ëì¼í URL
prompt = """ì´ ì¹íì´ì§ë¥¼ AI ìì´ì í¸ê° 컨í
ì¤í¸ë¡ íì©í기 ìµì íë ííë¡ ë³íí´ì£¼ì¸ì:
**íì 구조:**
1. **íë¡ í¸ë§¤í° (YAML íì)**
---
title: "íì´ì§ ì 목"
url: "ì본 URL"
author: "ìì±ì (ìë ê²½ì°)"
date: "ë°íì¼ (ìë ê²½ì°)"
word_count: ëëµì ì¸ ë¨ì´ ì
topics: ["주ì 1", "주ì 2", "주ì 3"]
summary: |
ì´ ê¸ì íµì¬ì 3-5ì¤ë¡ ìì½
AIê° ë¹ ë¥´ê² íì
í ì ìëë¡
main_points:
- íµì¬ í¬ì¸í¸ 1
- íµì¬ í¬ì¸í¸ 2
- íµì¬ í¬ì¸í¸ 3
content_type: "tutorial|guide|article|documentation|news|blog"
difficulty: "beginner|intermediate|advanced"
---
2. **본문 구조**
# [ì본 ì 목]
## íµì¬ ìì½
[3-5ì¤ë¡ ì´ ê¸ì´ 무ìì ë¤ë£¨ëì§ ëª
ííê²]
## 주ì ë´ì©
[ëª
íí ê³ì¸µ êµ¬ì¡°ë¡ ì¹ì
구ë¶, H2/H3 ì¬ì©]
### ì¹ì
1
[ë´ì©]
### ì¹ì
2
[ë´ì©]
## íµì¬ ì¸ì¬ì´í¸
- ì¸ì¬ì´í¸ 1
- ì¸ì¬ì´í¸ 2
- ì¸ì¬ì´í¸ 3
## ì¤ì©ì ì ì©
[ì´ ë´ì©ì ì´ë»ê² íì©í ì ìëì§]
## ê´ë ¨ 리ìì¤
[ë§í¬ê° ìë¤ë©´ ì¤ëª
ê³¼ í¨ê»]
## ê²°ë¡
[ë§ë¬´ë¦¬ ìì½]
**ë³í ê·ì¹:**
- ê´ê³ , ë¤ë¹ê²ì´ì
, í¸í°, ì¬ì´ëë° ìì ì ê±°
- ì½ë ë¸ë¡ì ì¸ì´ ëª
ì (```python, ```javascript ë±)
- ë§í¬ë [ì¤ëª
](URL) íìì¼ë¡ ëª
ííê²
- ì´ë¯¸ì§ë  íìì¼ë¡
- ë¶íìí ììì´ ì ê±°, ê°ê²°íê²
- 리ì¤í¸ë ëª
íí bullet pointsë¡
- ì¤ìí ê°ë
ì **êµµê²** ê°ì¡°
**ìµì¢
목í:**
AIê° ì´ ë¬¸ì를 ì½ê³ íµì¬ì 3ì´ ìì íì
íê³ ,
ì¬ì©ìì ì§ë¬¸ì ì ííê² ëµë³í ì ìëë¡ ìµì í
"""
AI ìµì í íì¼ ì ì¥:
Write {
file_path: "/path/to/useState.context.md"
content: "[AI ìµì í ë§í¬ë¤ì´ ë´ì©]"
}
ëì¼ ëª¨ë Step 4: ê²°ê³¼ ìì½
2ê° íì¼ ìì± ê²°ê³¼ë¥¼ ì¬ì©ììê² ë³´ì¬ì¤ëë¤.
â
ëì¼ ëª¨ë ë³í ìë£! 2ê° íì¼ì´ ìì±ëììµëë¤.
ð ì본 ë§í¬ë¤ì´:
- íì¼: useState.md
- ê²½ë¡: /path/to/useState.md
- í¬ê¸°: ì½ 3,500 ê¸ì
- ì©ë: ì¬ëì´ ì½ê¸° ì¢ì ì본 ë³´ì¡´
[View file](computer:///path/to/useState.md)
ð AI ìµì í ë²ì :
- íì¼: useState.context.md
- ê²½ë¡: /path/to/useState.context.md
- í¬ê¸°: ì½ 2,100 ê¸ì (40% ì ê°)
- ì©ë: AI 컨í
ì¤í¸ë¡ íì©
[View file](computer:///path/to/useState.context.md)
ð¡ í:
- ì본(.md)ì ì¬ëì´ ì½ì ë ì¬ì©
- AI ìµì í(.context.md)ë RAG ìì¤í
ì´ë AI ìì´ì í¸ ì»¨í
ì¤í¸ë¡ ì¬ì©
ëì¼ ëª¨ë íì¼ëª ê·ì¹
í¨í´ 1: íì¥ì êµ¬ë¶ (ê¶ì¥)
- ì본:
article.md - AI ìµì í:
article.context.md
í¨í´ 2: ì ë¯¸ì¬ êµ¬ë¶
- ì본:
article.md - AI ìµì í:
article-ai-optimized.md
í¨í´ 3: í´ë 구ë¶
/docs
âââ original/
â âââ article.md
âââ optimized/
âââ article.md
ëì¼ ëª¨ë ì¥ì
- ì본 ë³´ì¡´: ì¬ëì´ ì½ì ìë£ë ì본 ê·¸ëë¡ ì ì§
- AI í¨ì¨ì±: AIì©ì í í° ì ê° ë° êµ¬ì¡°í
- ì©ëë³ ë¶ë¦¬: 목ì ì ë§ë íì¼ ì¬ì©
- ë°±ì í¨ê³¼: 2ê°ì§ ííë¡ ëì ë°±ì
- ë¹êµ ê°ë¥: ì본과 ìµì í ë²ì ë¹êµ ë¶ì ê°ë¥
ëì¼ ëª¨ë ì¬ì© ìë리ì¤
ìëë¦¬ì¤ 1: 기ì 문ì ìì¹´ì´ë¹
User: ì´ React 문ìë¤ ì본ì´ë AI ìµì í ë²ì ë ë¤ ë§ë¤ì´ì¤
- https://react.dev/reference/react/useState
- https://react.dev/reference/react/useEffect
Claude: ëì¼ ëª¨ëë¡ 4ê° íì¼ ìì±í©ëë¤.
- useState.md (ì본)
- useState.context.md (AI ìµì í)
- useEffect.md (ì본)
- useEffect.context.md (AI ìµì í)
ìëë¦¬ì¤ 2: ë¸ë¡ê·¸ ê¸ ë°±ì
User: ë´ ë¸ë¡ê·¸ ê¸ì ë°±ì
íëë° ì본ë ì ì¥íê³ AIê° ì½ì ì ìë ë²ì ë ë§ë¤ì´ì¤
Claude: ëì¼ ëª¨ëë¡ ë³ííê² ìµëë¤.
- ì본: ì¬ëì´ ë¤ì ì½ì ë
- AI ìµì í: ëì¤ì AIìê² ì§ë¬¸í ë
ìëë¦¬ì¤ 3: íìµ ìë£ êµ¬ì¶
User: ì´ íí 리ì¼ë¤ì ë ë¤ ë²ì ì¼ë¡ ì ì¥í´ì¤
Claude:
study-materials/
âââ original/ # ì¬ëì´ íìµì©
â âââ intro.md
â âââ advanced.md
âââ ai-optimized/ # AI ì§ë¬¸ ëµë³ì©
âââ intro.context.md
âââ advanced.context.md
Advanced Options
ì¬ë¬ URL ì¼ê´ ë³í
ì¬ë¬ ì¹íì´ì§ë¥¼ í ë²ì ë³íí ì ììµëë¤.
Example:
User: ì´ URLë¤ì ì ë¶ ë§í¬ë¤ì´ì¼ë¡ ì ì¥í´ì¤
- https://example.com/article1
- https://example.com/article2
- https://example.com/article3
Claude: 3ê°ì ì¹íì´ì§ë¥¼ ë³ííê² ìµëë¤. íì¼ëª
ì ìëì¼ë¡ ìì±í ê¹ì, ìëë©´ ê°ê° ì§ì íìê² ì´ì?
User: ìëì¼ë¡
Claude: [ê° URLì ìì°¨ì ì¼ë¡ ë³ííì¬ article1.md, article2.md, article3.mdë¡ ì ì¥]
í¹ì ì¹ì ë§ ì¶ì¶
ì¹íì´ì§ì í¹ì ë¶ë¶ë§ ì¶ì¶í ì ììµëë¤.
Example:
User: https://example.com/docs ìì "Installation" ì¹ì
ë§ ë§í¬ë¤ì´ì¼ë¡ ì ì¥í´ì¤
Claude: [WebFetch í롬íí¸ì "Installation ì¹ì
ë§ ì¶ì¶"ì ëª
ìíì¬ í´ë¹ ë¶ë¶ë§ ë³í]
ë§í¬ë¤ì´ í¬ë§· 커ì¤í°ë§ì´ì§
ë³í ì ìíë ë§í¬ë¤ì´ ì¤íì¼ì ì§ì í ì ììµëë¤.
Example:
User: ì´ ë¸ë¡ê·¸ ê¸ì ë§í¬ë¤ì´ì¼ë¡ ë³ííë, 모ë ì 목ì H2(##)ë¡ ììíê³ ì½ë ë¸ë¡ì syntax highlighting í¬í¨í´ì¤
Claude: [WebFetch í롬íí¸ì í¬ë§· ì구ì¬íì ëª
ì]
Error Handling
ì못ë URL
User: htp://wrong-url
Claude: â ì¬ë°ë¥´ì§ ìì URLì
ëë¤. http:// ëë https://ë¡ ììíë ì ì²´ URLì ì
ë ¥í´ì£¼ì¸ì.
ì ê·¼ ë¶ê°ë¥í íì´ì§
Claude: â í´ë¹ ì¹íì´ì§ì ì ê·¼í ì ììµëë¤.
- íì´ì§ê° ìì ëìê±°ë
- ì ê·¼ ê¶íì´ íìíê±°ë
- ë¤í¸ìí¬ ì¤ë¥ê° ë°ìíì ì ììµëë¤.
íì¼ ì ì¥ ì¤ë¥
Claude: â íì¼ì ì ì¥í ì ììµëë¤.
- ê²½ë¡ê° ì¬ë°ë¥¸ì§ íì¸í´ì£¼ì¸ì
- ì°ê¸° ê¶íì´ ìëì§ íì¸í´ì£¼ì¸ì
- ëë í ë¦¬ê° ì¡´ì¬íëì§ íì¸í´ì£¼ì¸ì
Example Workflows
Example 1: ë¨ì¼ ì¹íì´ì§ ë³í
User: https://docs.python.org/3/tutorial/index.html ì´ê±° ë§í¬ë¤ì´ì¼ë¡ ì ì¥í´ì¤
Claude: íì´ì¬ íí ë¦¬ì¼ íì´ì§ë¥¼ ë§í¬ë¤ì´ì¼ë¡ ë³ííê² ìµëë¤.
íì¼ëª
ì ì´ë»ê² í ê¹ì? (기본: webpage.md)
User: python-tutorial.md
Claude: [WebFetchë¡ íì´ì§ ê°ì ¸ì¤ê¸°]
Claude: [ë§í¬ë¤ì´ì¼ë¡ ë³í]
Claude: [íì¼ ì ì¥]
â
ì¹íì´ì§ë¥¼ ë§í¬ë¤ì´ì¼ë¡ ë³ííìµëë¤!
ð íì¼: python-tutorial.md
ð ê²½ë¡: /Users/symverse/workspaces-skill-test/my-skills-hub/python-tutorial.md
ð í¬ê¸°: ì½ 15,234 ê¸ì
[View file](computer:///Users/symverse/workspaces-skill-test/my-skills-hub/python-tutorial.md)
Example 2: ë¸ë¡ê·¸ ê¸ ìì¹´ì´ë¹
User: ì´ ë¸ë¡ê·¸ ê¸ë¤ì ì ë¶ ë§í¬ë¤ì´ì¼ë¡ ì ì¥í´ì ìì¹´ì´ë¸ í´ëì ë£ì´ì¤
- https://blog.example.com/post1
- https://blog.example.com/post2
Claude: 2ê°ì ë¸ë¡ê·¸ ê¸ì archive í´ëì ì ì¥íê² ìµëë¤.
[ëë í 리 ìì±]
[ê° URLì ìì°¨ì ì¼ë¡ ë³í]
â
2ê°ì ì¹íì´ì§ë¥¼ ë³ííìµëë¤!
ð archive/
âââ post1.md
âââ post2.md
Example 3: 문ì ë´ì©ë§ 보기 (ì ì¥ ì í¨)
User: https://github.com/anthropics/claude-code ì´ íì´ì§ ë´ì©ì ë§í¬ë¤ì´ì¼ë¡ ë³´ì¬ì¤ë§ íê³ ì ì¥ì íì§ë§
Claude: [WebFetchë¡ íì´ì§ ê°ì ¸ì¤ê¸°]
ë¤ìì í´ë¹ íì´ì§ì ë§í¬ë¤ì´ ë³í ë´ì©ì
ëë¤:
---
# Claude Code
Claude Code is an official CLI...
[ì ì²´ ë´ì© ì¶ë ¥]
---
ì ì¥íì§ ìê³ ë´ì©ë§ ë³´ì¬ëë ¸ìµëë¤.
Technical Details
WebFetch ì¬ì©
- ìë ë³í: HTML â ë§í¬ë¤ì´ ìë ë³í
- ìºì±: 15ë¶ ìê° ì 리 ìºì
- 리ë¤ì´ë í¸ ì²ë¦¬: ìëì¼ë¡ ì URLë¡ ì¬ìì²
ë§í¬ë¤ì´ ë³í íì§
WebFetchë ë¤ì ìì를 ë§í¬ë¤ì´ì¼ë¡ ë³íí©ëë¤:
- ì 목 (H1-H6)
- ë¨ë½ê³¼ í ì¤í¸ í¬ë§· (bold, italic, code)
- ë§í¬ì ì´ë¯¸ì§
- 리ì¤í¸ (ordered, unordered)
- ì½ë ë¸ë¡
- ì¸ì©êµ¬
- í ì´ë¸
ë¶íìí ììë ì ì¸ë©ëë¤:
- ë¤ë¹ê²ì´ì ë©ë´
- í¸í°
- ê´ê³
- ì¬ì´ëë° (ìí©ì ë°ë¼)
íì¼ ì ì¥
- 기본 ê²½ë¡: íì¬ ìì ëë í 리
- íì¼ íì¥ì:
.md - ì¸ì½ë©: UTF-8
- ë®ì´ì°ê¸°: 기존 íì¼ì´ ìì¼ë©´ íì¸ í ë®ì´ì
Best Practices
- ëª íí íì¼ëª ì¬ì©: ë´ì©ì ì ëíë´ë íì¼ëª ì¬ì©
- í´ë 구조í: ì¬ë¬ íì´ì§ë¥¼ ë³íí ëë 주ì ë³ë¡ í´ë ì 리
- URL íì¸: ë³í ì URLì´ ì¬ë°ë¥¸ì§ íì¸
- ì ìê¶ ì£¼ì: ì¹íì´ì§ ë´ì©ì ì ìê¶ì ì¡´ì¤
- ê°ì¸ì ìì¹´ì´ë¹: ì£¼ë¡ ê°ì¸ì ì¸ ì°¸ê³ ìë£ë¡ ì¬ì©
Dynamic Content Handling (ëì ì½í ì¸ ì²ë¦¬)
문ì : JavaScript ë ëë§ íì´ì§
WebFetchë ì ì HTMLë§ ê°ì ¸ì¤ë¯ë¡ React, Vue, Next.js ë± JavaScriptë¡ ë ëë§ëë íì´ì§ë ë¹ ë´ì©ì´ ë°íë ì ììµëë¤.
ì¦ì:
- ë³íë ë§í¬ë¤ì´ì´ ê±°ì ë¹ì´ìì
- “Loading…” ê°ì íë ì´ì¤íëë§ ë³´ì
- íµì¬ ì½í ì¸ ê° ëë½ë¨
í´ê²°ì± : Playwright í´ë°±
WebFetchë¡ ê°ì ¸ì¨ ë´ì©ì´ ë¹ì´ìê±°ë ë¶ì¶©ë¶íë©´, AskUserQuestionì ì¬ì©íì¬ ì¬ì©ììê² Playwright ì¬ì© ì¬ë¶ë¥¼ 물ì´ë´ ëë¤.
Step 1: WebFetch ê²°ê³¼ ê²ì¦
# WebFetchë¡ ê°ì ¸ì¨ ë§í¬ë¤ì´ ë´ì© íì¸
if len(markdown_content.strip()) < 500: # ë무 ì§§ì¼ë©´
# ëì ì½í
ì¸ ì¼ ê°ë¥ì± ëì
Step 2: ì¬ì©ììê² ë¬¼ì´ë³´ê¸°
AskUserQuestion ì¬ì©:
AskUserQuestion {
questions: [
{
question: "ì´ íì´ì§ë ëì ì½í
ì¸ (JavaScript)를 ì¬ì©íë ê² ê°ìµëë¤. Playwright를 ì¤íí´ì ë¸ë¼ì°ì ë¡ ë°ì´í°ë¥¼ ê°ì ¸ì¬ê¹ì?",
header: "Playwright",
multiSelect: false,
options: [
{
label: "Yes, Playwrightë¡ ì¬ìë",
description: "Chromium ë¸ë¼ì°ì 를 ì¤íí´ì JavaScript ë ëë§ í ì½í
ì¸ ê°ì ¸ì¤ê¸° (ë림, ì íí¨)"
},
{
label: "No, íì¬ ë´ì©ë§ ì ì¥",
description: "WebFetch ê²°ê³¼ë§ ì ì¥ (ë¹ ë¦, ë¶ìì í ì ìì)"
}
]
}
]
}
Step 3-A: MCP Playwright ì¬ì© (ê¶ì¥ â)
ì¬ì ì¤ë¹: MCP Playwright ìë²ê° ì¤ì¹ëì´ ìì´ì¼ í©ëë¤.
# ìµì´ 1íë§ ì¤ì¹
npx @modelcontextprotocol/server-playwright
ì¤í¬ìì ì¬ì©:
// 1. íì´ì§ ì´ë
mcp__playwright__navigate({
url: "https://example.com"
})
// 2. JavaScript ë ëë§ ë기
mcp__playwright__waitForLoadState({
state: "networkidle"
})
// 3. HTML ì½í
ì¸ ê°ì ¸ì¤ê¸°
const htmlContent = mcp__playwright__getContent()
// 4. ë§í¬ë¤ì´ì¼ë¡ ë³í (WebFetch í롬íí¸ ì¬ì¬ì©)
// htmlContent를 ë§í¬ë¤ì´ì¼ë¡ ë³ííë ë¡ì§
Step 3-B: Node Playwright ì¬ì© (ëì)
MCP Playwrightê° ìë ê²½ì° Node.jsë¡ ì§ì ì¤í:
# Playwright ì¤í¬ë¦½í¸ ì¤í
node << 'EOF'
const playwright = require('playwright');
(async () => {
const browser = await playwright.chromium.launch({ headless: true });
const page = await browser.newPage();
console.log('â³ íì´ì§ ë¡ë© ì¤...');
await page.goto('https://example.com', { waitUntil: 'networkidle' });
console.log('â³ JavaScript ë ëë§ ë기 ì¤...');
await page.waitForTimeout(3000); // 3ì´ ë기
const content = await page.content();
console.log(content);
await browser.close();
})();
EOF
ì¶ë ¥ì íì¼ë¡ ì ì¥:
# HTMLì ìì íì¼ë¡ ì ì¥
node playwright-script.js > temp.html
# ì´ì ì´ HTMLì ë§í¬ë¤ì´ì¼ë¡ ë³í
# (WebFetch ëì ì§ì ë³í ë¡ì§ ì¬ì©)
Step 4: ë³í ë° ì ì¥
Playwrightë¡ ê°ì ¸ì¨ HTMLì ë§í¬ë¤ì´ì¼ë¡ ë³íí©ëë¤.
Option A: WebFetch í롬íí¸ ì¬ì¬ì©
Playwrightë¡ ê°ì ¸ì¨ ì ì²´ HTMLì WebFetch í롬íí¸ì ë£ì´ ë§í¬ë¤ì´ì¼ë¡ ë³íí©ëë¤.
Option B: ì§ì íì±
HTML â ë§í¬ë¤ì´ ë³í ë¼ì´ë¸ë¬ë¦¬ ì¬ì© (ì: turndown, html-to-markdown)
ìí¬íë¡ì° ìì½
1. WebFetchë¡ ìë (ë¹ ë¦)
â
2. ê²°ê³¼ ê²ì¦ (ë´ì©ì´ ì¶©ë¶íê°?)
â NO
3. AskUserQuestion (Playwright ì¬ì©í ê¹ì?)
â YES
4. Playwrightë¡ ì¬ìë
ââ MCP Playwright (ê¶ì¥) ëë
ââ Node Playwright (ëì)
â
5. ë§í¬ë¤ì´ ë³í ë° ì ì¥
MCP Playwright vs Node Playwright ë¹êµ
| í목 | MCP Playwright â | Node Playwright |
|---|---|---|
| ì¤ì¹ | MCP ìë² ì¤ì¹ íì | npm install playwright |
| í¸ì¶ ë°©ì | MCP ë구 í¸ì¶ | Bash ëª ë ¹ì´ ì¤í |
| ì¸ì ê´ë¦¬ | ìë | ìë (ì¤í¬ë¦½í¸ ìì±) |
| ìë¬ í¸ë¤ë§ | ê¹ëí¨ | ë³µì¡í¨ |
| Claude Code íµí© | ë¤ì´í°ë¸ ì§ì | ê°ì ì¤í |
| ì¶ì²ë | âââââ | âââ |
ì¤ì ìì
ìë리ì¤: React ê³µì 문ì ë³í
User: https://react.dev/reference/react/useState ë§í¬ë¤ì´ì¼ë¡ ë³íí´ì¤
Claude: [WebFetch ìë]
Claude: â ï¸ ì´ íì´ì§ë JavaScriptë¡ ë ëë§ëë ê² ê°ìµëë¤.
ë´ì©ì´ ê±°ì ë¹ì´ìë¤ì.
[AskUserQuestion í¸ì¶]
User: Yes, Playwrightë¡ ì¬ìë
Claude: â³ Playwrightë¡ íì´ì§ ë¡ë© ì¤...
Claude: â
JavaScript ë ëë§ ìë£
Claude: â
ë§í¬ë¤ì´ ë³í ìë£
ð íì¼: useState.md
ð ê²½ë¡: /path/to/useState.md
ð í¬ê¸°: ì½ 5,234 ê¸ì (ì ì²´ ì½í
ì¸ í¬í¨)
ì¶ê° ìµì : ìë ê°ì§ 모ë
ê³ ê¸ ì¬ì©ì를 ìí´ --auto-playwright íë그를 ì§ìí ì ììµëë¤:
User: https://react.dev/reference/react/useState ë§í¬ë¤ì´ì¼ë¡ ë³íí´ì¤ (ìëì¼ë¡ Playwright ì¬ì©í´ë ë¼)
Claude: [WebFetch ìë]
Claude: [ìëì¼ë¡ Playwright í´ë°±]
Claude: â
ë§í¬ë¤ì´ ë³í ìë£
Tips
- 긴 문ì: ë§¤ì° ê¸´ ì¹íì´ì§ë ìì½ì´ í¬í¨ë ì ììµëë¤
- ëì ì½í ì¸ : JavaScriptë¡ ë ëë§ëë ì½í ì¸ ë Playwrightë¡ í´ê²° ê°ë¥ â NEW
- ì´ë¯¸ì§: ì´ë¯¸ì§ë ì본 URL ë§í¬ë¡ í¬í¨ë©ëë¤ (ë¤ì´ë¡ëëì§ ìì)
- ì¬ë³í: ê°ì URLì 15ë¶ ë´ì ë¤ì ìì²íë©´ ìºìë ë²ì ì ì¬ì©í©ëë¤
- MCP Playwright: ëì ì½í ì¸ ê° ë§ì ê²½ì° MCP Playwright ìë² ì¤ì¹ ê¶ì¥