web-to-markdown
๐ฏSkillfrom bear2u/my-skills
Converts web pages to markdown format, offering various modes like standard, AI-optimized, and dual version generation for easy archiving and context preparation.
Part of
bear2u/my-skills(19 items)
Installation
npx @modelcontextprotocol/server-playwrightnpm install playwrightSkill Details
์นํ์ด์ง URL์ ์ ๋ ฅ๋ฐ์ ๋งํฌ๋ค์ด ํํ๋ก ๋ณํํ์ฌ ์ ์ฅํฉ๋๋ค. ์น ๋ฌธ์๋ฅผ ๋ก์ปฌ ๋งํฌ๋ค์ด ํ์ผ๋ก ์์นด์ด๋นํ๊ฑฐ๋ ์ ๋ฆฌํ ๋ ์ ์ฉํฉ๋๋ค.
Overview
# 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: ๋งํฌ๋ค์ด ํ์ผ์ ์ด๋์ ์ ์ฅํ ๊น์?
์ต์ :
- ํ์ฌ ๋๋ ํ ๋ฆฌ (./)
- ํน์ ๊ฒฝ๋ก ์ง์
- ํ์ผ๋ก ์ ์ฅํ์ง ์๊ณ ๋ด์ฉ๋ง ๋ณด๊ธฐ
ํ์ผ๋ช ์? (๊ธฐ๋ณธ๊ฐ: webpage.md)
User: ํ์ฌ ๋๋ ํ ๋ฆฌ์ article.md๋ก ์ ์ฅํด์ค
```
Step 4: ์นํ์ด์ง ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ๋ณํ
WebFetch ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์นํ์ด์ง๋ฅผ ๊ฐ์ ธ์ค๊ณ ๋งํฌ๋ค์ด์ผ๋ก ๋ณํํฉ๋๋ค.
#### ์ผ๋ฐ ๋ชจ๋ ํ๋กฌํํธ
```python
url = "https://example.com/article"
prompt = "์นํ์ด์ง์ ์ ์ฒด ๋ด์ฉ์ ๋งํฌ๋ค์ด ํ์์ผ๋ก ๋ณํํด์ฃผ์ธ์. ์ ๋ชฉ, ๋ณธ๋ฌธ, ๋งํฌ, ์ด๋ฏธ์ง ๋ฑ ๋ชจ๋ ์์๋ฅผ ํฌํจํ๋, ๋ถํ์ํ ๋ค๋น๊ฒ์ด์ ์ด๋ ๊ด๊ณ ๋ ์ ์ธํด์ฃผ์ธ์."
```
#### AI ์ต์ ํ ๋ชจ๋ ํ๋กฌํํธ (CRITICAL)
```python
url = "https://example.com/article"
prompt = """์ด ์นํ์ด์ง๋ฅผ AI ์์ด์ ํธ๊ฐ ์ปจํ ์คํธ๋ก ํ์ฉํ๊ธฐ ์ต์ ํ๋ ํํ๋ก ๋ณํํด์ฃผ์ธ์:
ํ์ ๊ตฌ์กฐ:
- ํ๋ก ํธ๋งคํฐ (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"
---
- ๋ณธ๋ฌธ ๊ตฌ์กฐ
# [์๋ณธ ์ ๋ชฉ]
ํต์ฌ ์์ฝ
[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: ๋งํฌ๋ค์ด ์ ์ฅ
๋ณํ๋ ๋งํฌ๋ค์ด์ ํ์ผ๋ก ์ ์ฅํฉ๋๋ค.
```bash
# 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๋ฅผ ์ฌ์ฉํ์ฌ ์๋ณธ ๋งํฌ๋ค์ด์ ์์ฑํฉ๋๋ค.
```python
url = "https://react.dev/reference/react/useState"
prompt = "์นํ์ด์ง์ ์ ์ฒด ๋ด์ฉ์ ๋งํฌ๋ค์ด ํ์์ผ๋ก ๋ณํํด์ฃผ์ธ์. ์ ๋ชฉ, ๋ณธ๋ฌธ, ๋งํฌ, ์ด๋ฏธ์ง ๋ฑ ๋ชจ๋ ์์๋ฅผ ํฌํจํ๋, ๋ถํ์ํ ๋ค๋น๊ฒ์ด์ ์ด๋ ๊ด๊ณ ๋ ์ ์ธํด์ฃผ์ธ์."
```
์๋ณธ ํ์ผ ์ ์ฅ:
```bash
Write {
file_path: "/path/to/useState.md"
content: "[์๋ณธ ๋งํฌ๋ค์ด ๋ด์ฉ]"
}
```
๋์ผ ๋ชจ๋ Step 3: AI ์ต์ ํ ๋ฒ์ ์์ฑ
CRITICAL: ๊ฐ์ URL์ ๋ํด AI ์ต์ ํ ํ๋กฌํํธ๋ก ๋ค์ WebFetch๋ฅผ ํธ์ถํฉ๋๋ค.
```python
url = "https://react.dev/reference/react/useState" # ๋์ผํ URL
prompt = """์ด ์นํ์ด์ง๋ฅผ AI ์์ด์ ํธ๊ฐ ์ปจํ ์คํธ๋ก ํ์ฉํ๊ธฐ ์ต์ ํ๋ ํํ๋ก ๋ณํํด์ฃผ์ธ์:
ํ์ ๊ตฌ์กฐ:
- ํ๋ก ํธ๋งคํฐ (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"
---
- ๋ณธ๋ฌธ ๊ตฌ์กฐ
# [์๋ณธ ์ ๋ชฉ]
ํต์ฌ ์์ฝ
[3-5์ค๋ก ์ด ๊ธ์ด ๋ฌด์์ ๋ค๋ฃจ๋์ง ๋ช ํํ๊ฒ]
์ฃผ์ ๋ด์ฉ
[๋ช ํํ ๊ณ์ธต ๊ตฌ์กฐ๋ก ์น์ ๊ตฌ๋ถ, H2/H3 ์ฌ์ฉ]
์น์ 1
[๋ด์ฉ]
์น์ 2
[๋ด์ฉ]
ํต์ฌ ์ธ์ฌ์ดํธ
- ์ธ์ฌ์ดํธ 1
- ์ธ์ฌ์ดํธ 2
- ์ธ์ฌ์ดํธ 3
์ค์ฉ์ ์ ์ฉ
[์ด ๋ด์ฉ์ ์ด๋ป๊ฒ ํ์ฉํ ์ ์๋์ง]
๊ด๋ จ ๋ฆฌ์์ค
[๋งํฌ๊ฐ ์๋ค๋ฉด ์ค๋ช ๊ณผ ํจ๊ป]
๊ฒฐ๋ก
[๋ง๋ฌด๋ฆฌ ์์ฝ]
๋ณํ ๊ท์น:
- ๊ด๊ณ , ๋ค๋น๊ฒ์ด์ , ํธํฐ, ์ฌ์ด๋๋ฐ ์์ ์ ๊ฑฐ
- ์ฝ๋ ๋ธ๋ก์ ์ธ์ด ๋ช
์ (``
python,``javascript ๋ฑ) - ๋งํฌ๋ [์ค๋ช ](URL) ํ์์ผ๋ก ๋ช ํํ๊ฒ
- ์ด๋ฏธ์ง๋  ํ์์ผ๋ก
- ๋ถํ์ํ ์์์ด ์ ๊ฑฐ, ๊ฐ๊ฒฐํ๊ฒ
- ๋ฆฌ์คํธ๋ ๋ช ํํ bullet points๋ก
- ์ค์ํ ๊ฐ๋ ์ ๊ตต๊ฒ ๊ฐ์กฐ
์ต์ข ๋ชฉํ:
AI๊ฐ ์ด ๋ฌธ์๋ฅผ ์ฝ๊ณ ํต์ฌ์ 3์ด ์์ ํ์ ํ๊ณ ,
์ฌ์ฉ์์ ์ง๋ฌธ์ ์ ํํ๊ฒ ๋ต๋ณํ ์ ์๋๋ก ์ต์ ํ
"""
```
AI ์ต์ ํ ํ์ผ ์ ์ฅ:
```bash
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 ๊ฒฐ๊ณผ ๊ฒ์ฆ
```python
# WebFetch๋ก ๊ฐ์ ธ์จ ๋งํฌ๋ค์ด ๋ด์ฉ ํ์ธ
if len(markdown_content.strip()) < 500: # ๋๋ฌด ์งง์ผ๋ฉด
# ๋์ ์ฝํ ์ธ ์ผ ๊ฐ๋ฅ์ฑ ๋์
```
#### Step 2: ์ฌ์ฉ์์๊ฒ ๋ฌผ์ด๋ณด๊ธฐ
AskUserQuestion ์ฌ์ฉ:
```javascript
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 ์๋ฒ๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
```bash
# ์ต์ด 1ํ๋ง ์ค์น
npx @modelcontextprotocol/server-playwright
```
์คํฌ์์ ์ฌ์ฉ:
```javascript
// 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๋ก ์ง์ ์คํ:
```bash
# 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
```
์ถ๋ ฅ์ ํ์ผ๋ก ์ ์ฅ:
```bash
# 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)
์ํฌํ๋ก์ฐ ์์ฝ
```
- WebFetch๋ก ์๋ (๋น ๋ฆ)
โ
- ๊ฒฐ๊ณผ ๊ฒ์ฆ (๋ด์ฉ์ด ์ถฉ๋ถํ๊ฐ?)
โ NO
- AskUserQuestion (Playwright ์ฌ์ฉํ ๊น์?)
โ YES
- Playwright๋ก ์ฌ์๋
โโ MCP Playwright (๊ถ์ฅ) ๋๋
โโ Node Playwright (๋์)
โ
- ๋งํฌ๋ค์ด ๋ณํ ๋ฐ ์ ์ฅ
```
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 ์๋ฒ ์ค์น ๊ถ์ฅ
More from this repository10
Analyzes project context to automatically expand simple user requests into detailed, comprehensive requirements for more precise AI interactions.
landing-page-guide-v2 skill from bear2u/my-skills
gemini-logo-remover skill from bear2u/my-skills
card-news-generator-v2 skill from bear2u/my-skills
Crafts distinctive, production-grade frontend interfaces with creative design, avoiding generic AI aesthetics and focusing on unique visual experiences.
landing-page-guide skill from bear2u/my-skills
design-prompt-generator-v2 skill from bear2u/my-skills
flutter-init skill from bear2u/my-skills
Automatically documents AI code changes and provides real-time web-based visualization of code modifications.
card-news-generator skill from bear2u/my-skills