From bear2u-my-skills
Converts webpage URLs to Markdown files using standard, AI-optimized (with YAML frontmatter, summaries, key points), or dual modes. Saves locally for archiving web documents or AI context processing.
npx claudepluginhub joshuarweaver/cascade-content-creation-misc-1 --plugin bear2u-my-skillsThis skill uses the workspace's default tool permissions.
์นํ์ด์ง์ URL์ ์ ๋ ฅ๋ฐ์ ํด๋น ํ์ด์ง์ ๋ด์ฉ์ ๋งํฌ๋ค์ด ํ์์ผ๋ก ๋ณํํ์ฌ ์ ์ฅํ๋ ์คํฌ์ ๋๋ค.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
์นํ์ด์ง์ URL์ ์ ๋ ฅ๋ฐ์ ํด๋น ํ์ด์ง์ ๋ด์ฉ์ ๋งํฌ๋ค์ด ํ์์ผ๋ก ๋ณํํ์ฌ ์ ์ฅํ๋ ์คํฌ์ ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์์ฒญ์ด ์์ ๋ ์ด ์คํฌ์ ์ฌ์ฉํ์ธ์:
์ฌ์ฉ์์๊ฒ ๋ณํํ๊ณ ์ ํ๋ ์นํ์ด์ง์ URL์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
Example:
Claude: ๋ณํํ์ค ์นํ์ด์ง์ URL์ ์
๋ ฅํด์ฃผ์ธ์.
User: https://example.com/article
Important:
http:// ๋๋ https://๋ก ์์ํด์ผ ํฉ๋๋ค์ฌ์ฉ์์ ์์ฒญ์ ๋ถ์ํ์ฌ ์ ์ ํ ๋ณํ ๋ชจ๋๋ฅผ ์ ํํฉ๋๋ค.
๋ณํ ๋ชจ๋:
์๋ ๊ฐ์ง ํค์๋:
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๊ฐ ํ์ผ์ ์์ฑํฉ๋๋ค.
์ฌ์ฉ์์๊ฒ ์ ์ฅ ์์น์ ํ์ผ๋ช ์ ํ์ธํฉ๋๋ค.
Example:
Claude: ๋งํฌ๋ค์ด ํ์ผ์ ์ด๋์ ์ ์ฅํ ๊น์?
์ต์
:
1. ํ์ฌ ๋๋ ํ ๋ฆฌ (./)
2. ํน์ ๊ฒฝ๋ก ์ง์
3. ํ์ผ๋ก ์ ์ฅํ์ง ์๊ณ ๋ด์ฉ๋ง ๋ณด๊ธฐ
ํ์ผ๋ช
์? (๊ธฐ๋ณธ๊ฐ: webpage.md)
User: ํ์ฌ ๋๋ ํ ๋ฆฌ์ article.md๋ก ์ ์ฅํด์ค
WebFetch ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์นํ์ด์ง๋ฅผ ๊ฐ์ ธ์ค๊ณ ๋งํฌ๋ค์ด์ผ๋ก ๋ณํํฉ๋๋ค.
url = "https://example.com/article"
prompt = "์นํ์ด์ง์ ์ ์ฒด ๋ด์ฉ์ ๋งํฌ๋ค์ด ํ์์ผ๋ก ๋ณํํด์ฃผ์ธ์. ์ ๋ชฉ, ๋ณธ๋ฌธ, ๋งํฌ, ์ด๋ฏธ์ง ๋ฑ ๋ชจ๋ ์์๋ฅผ ํฌํจํ๋, ๋ถํ์ํ ๋ค๋น๊ฒ์ด์
์ด๋ ๊ด๊ณ ๋ ์ ์ธํด์ฃผ์ธ์."
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:
๋ณํ๋ ๋งํฌ๋ค์ด์ ํ์ผ๋ก ์ ์ฅํฉ๋๋ค.
# Write ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ ์ ์ฅ
Write {
file_path: "/Users/symverse/workspaces-skill-test/my-skills-hub/article.md"
content: "[๋ณํ๋ ๋งํฌ๋ค์ด ๋ด์ฉ]"
}
AI ์ต์ ํ ๋ชจ๋ ํ์ผ๋ช ๊ถ์ฅ:
article.mdarticle-ai-optimized.md ๋๋ article.context.md์ ์ฅ๋ ํ์ผ์ ๊ฒฝ๋ก์ ๊ฐ๋จํ ํต๊ณ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค๋๋ค.
โ
์นํ์ด์ง๋ฅผ ๋งํฌ๋ค์ด์ผ๋ก ๋ณํํ์ต๋๋ค!
๐ ํ์ผ: 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)
๋์ผ ๋ชจ๋๋ ์๋ณธ ๋งํฌ๋ค์ด๊ณผ AI ์ต์ ํ ๋ฒ์ ์ ๋ชจ๋ ์์ฑํฉ๋๋ค. ์ฌ๋์ด ์ฝ์ ์๋ฃ์ AI๊ฐ ์ฒ๋ฆฌํ ์๋ฃ๋ฅผ ๋์์ ํ๋ณดํ ์ ์์ต๋๋ค.
User: https://react.dev/reference/react/useState ์๋ณธ์ด๋ AI ์ต์ ํ ๋ฒ์ ๋ ๋ค ๋ง๋ค์ด์ค
Claude: ๋์ผ ๋ชจ๋๋ก ๋ณํํ๊ฒ ์ต๋๋ค.
๊ธฐ๋ณธ ํ์ผ๋ช
์? (๊ธฐ๋ณธ: webpage)
์ผ๋ฐ ๋ชจ๋ ํ๋กฌํํธ๋ก WebFetch๋ฅผ ์ฌ์ฉํ์ฌ ์๋ณธ ๋งํฌ๋ค์ด์ ์์ฑํฉ๋๋ค.
url = "https://react.dev/reference/react/useState"
prompt = "์นํ์ด์ง์ ์ ์ฒด ๋ด์ฉ์ ๋งํฌ๋ค์ด ํ์์ผ๋ก ๋ณํํด์ฃผ์ธ์. ์ ๋ชฉ, ๋ณธ๋ฌธ, ๋งํฌ, ์ด๋ฏธ์ง ๋ฑ ๋ชจ๋ ์์๋ฅผ ํฌํจํ๋, ๋ถํ์ํ ๋ค๋น๊ฒ์ด์
์ด๋ ๊ด๊ณ ๋ ์ ์ธํด์ฃผ์ธ์."
์๋ณธ ํ์ผ ์ ์ฅ:
Write {
file_path: "/path/to/useState.md"
content: "[์๋ณธ ๋งํฌ๋ค์ด ๋ด์ฉ]"
}
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 ์ต์ ํ ๋งํฌ๋ค์ด ๋ด์ฉ]"
}
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.mdarticle.context.mdํจํด 2: ์ ๋ฏธ์ฌ ๊ตฌ๋ถ
article.mdarticle-ai-optimized.mdํจํด 3: ํด๋ ๊ตฌ๋ถ
/docs
โโโ original/
โ โโโ article.md
โโโ optimized/
โโโ article.md
์๋๋ฆฌ์ค 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
์ฌ๋ฌ ์นํ์ด์ง๋ฅผ ํ ๋ฒ์ ๋ณํํ ์ ์์ต๋๋ค.
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 ํ๋กฌํํธ์ ํฌ๋งท ์๊ตฌ์ฌํญ์ ๋ช
์]
User: htp://wrong-url
Claude: โ ์ฌ๋ฐ๋ฅด์ง ์์ URL์
๋๋ค. http:// ๋๋ https://๋ก ์์ํ๋ ์ ์ฒด URL์ ์
๋ ฅํด์ฃผ์ธ์.
Claude: โ ํด๋น ์นํ์ด์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค.
- ํ์ด์ง๊ฐ ์ญ์ ๋์๊ฑฐ๋
- ์ ๊ทผ ๊ถํ์ด ํ์ํ๊ฑฐ๋
- ๋คํธ์ํฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ์ ์์ต๋๋ค.
Claude: โ ํ์ผ์ ์ ์ฅํ ์ ์์ต๋๋ค.
- ๊ฒฝ๋ก๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํด์ฃผ์ธ์
- ์ฐ๊ธฐ ๊ถํ์ด ์๋์ง ํ์ธํด์ฃผ์ธ์
- ๋๋ ํ ๋ฆฌ๊ฐ ์กด์ฌํ๋์ง ํ์ธํด์ฃผ์ธ์
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)
User: ์ด ๋ธ๋ก๊ทธ ๊ธ๋ค์ ์ ๋ถ ๋งํฌ๋ค์ด์ผ๋ก ์ ์ฅํด์ ์์นด์ด๋ธ ํด๋์ ๋ฃ์ด์ค
- https://blog.example.com/post1
- https://blog.example.com/post2
Claude: 2๊ฐ์ ๋ธ๋ก๊ทธ ๊ธ์ archive ํด๋์ ์ ์ฅํ๊ฒ ์ต๋๋ค.
[๋๋ ํ ๋ฆฌ ์์ฑ]
[๊ฐ URL์ ์์ฐจ์ ์ผ๋ก ๋ณํ]
โ
2๊ฐ์ ์นํ์ด์ง๋ฅผ ๋ณํํ์ต๋๋ค!
๐ archive/
โโโ post1.md
โโโ post2.md
User: https://github.com/anthropics/claude-code ์ด ํ์ด์ง ๋ด์ฉ์ ๋งํฌ๋ค์ด์ผ๋ก ๋ณด์ฌ์ค๋ง ํ๊ณ ์ ์ฅ์ ํ์ง๋ง
Claude: [WebFetch๋ก ํ์ด์ง ๊ฐ์ ธ์ค๊ธฐ]
๋ค์์ ํด๋น ํ์ด์ง์ ๋งํฌ๋ค์ด ๋ณํ ๋ด์ฉ์
๋๋ค:
---
# Claude Code
Claude Code is an official CLI...
[์ ์ฒด ๋ด์ฉ ์ถ๋ ฅ]
---
์ ์ฅํ์ง ์๊ณ ๋ด์ฉ๋ง ๋ณด์ฌ๋๋ ธ์ต๋๋ค.
WebFetch๋ ๋ค์ ์์๋ฅผ ๋งํฌ๋ค์ด์ผ๋ก ๋ณํํฉ๋๋ค:
๋ถํ์ํ ์์๋ ์ ์ธ๋ฉ๋๋ค:
.mdWebFetch๋ ์ ์ HTML๋ง ๊ฐ์ ธ์ค๋ฏ๋ก React, Vue, Next.js ๋ฑ JavaScript๋ก ๋ ๋๋ง๋๋ ํ์ด์ง๋ ๋น ๋ด์ฉ์ด ๋ฐํ๋ ์ ์์ต๋๋ค.
์ฆ์:
WebFetch๋ก ๊ฐ์ ธ์จ ๋ด์ฉ์ด ๋น์ด์๊ฑฐ๋ ๋ถ์ถฉ๋ถํ๋ฉด, AskUserQuestion์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ Playwright ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ๋ฌผ์ด๋ด ๋๋ค.
# WebFetch๋ก ๊ฐ์ ธ์จ ๋งํฌ๋ค์ด ๋ด์ฉ ํ์ธ
if len(markdown_content.strip()) < 500: # ๋๋ฌด ์งง์ผ๋ฉด
# ๋์ ์ฝํ
์ธ ์ผ ๊ฐ๋ฅ์ฑ ๋์
AskUserQuestion ์ฌ์ฉ:
AskUserQuestion {
questions: [
{
question: "์ด ํ์ด์ง๋ ๋์ ์ฝํ
์ธ (JavaScript)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์ต๋๋ค. Playwright๋ฅผ ์คํํด์ ๋ธ๋ผ์ฐ์ ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ๊น์?",
header: "Playwright",
multiSelect: false,
options: [
{
label: "Yes, Playwright๋ก ์ฌ์๋",
description: "Chromium ๋ธ๋ผ์ฐ์ ๋ฅผ ์คํํด์ JavaScript ๋ ๋๋ง ํ ์ฝํ
์ธ ๊ฐ์ ธ์ค๊ธฐ (๋๋ฆผ, ์ ํํจ)"
},
{
label: "No, ํ์ฌ ๋ด์ฉ๋ง ์ ์ฅ",
description: "WebFetch ๊ฒฐ๊ณผ๋ง ์ ์ฅ (๋น ๋ฆ, ๋ถ์์ ํ ์ ์์)"
}
]
}
]
}
์ฌ์ ์ค๋น: 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๋ฅผ ๋งํฌ๋ค์ด์ผ๋ก ๋ณํํ๋ ๋ก์ง
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 ๋์ ์ง์ ๋ณํ ๋ก์ง ์ฌ์ฉ)
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 โญ | 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: โ
๋งํฌ๋ค์ด ๋ณํ ์๋ฃ