last30days-Skill ์ž…๋ฌธ ๊ฐ€์ด๋“œ: Reddit/HN/Polymarket์„ ์•„์šฐ๋ฅด๋Š” ์ •๋ณด ์ˆ˜์ง‘๊ธฐ

March 25, 2026

์ž…๋ฌธ | 15๋ถ„ | ํ”Œ๋žซํผ ๊ฐ„ ์ •๋ณด ์ˆ˜์ง‘ ๋งˆ์Šคํ„ฐ, ์กฐ์‚ฌ ํšจ์œจ ๋ฐฐ๊ฐ€

TIP

last30days-Skill์€ ํ˜„์žฌ ClawHub์—์„œ ๊ฐ€์žฅ ํฌ๊ด„์ ์ธ AI ์กฐ์‚ฌ์šฉ Skill๋กœ, 10๊ฐœ ์ด์ƒ์˜ ์‹ ํ˜ธ์›์„ ๋ณ‘๋ ฌ๋กœ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ค‘๋ณต ์ œ๊ฑฐ ๋ฐ ์ ์ˆ˜ ์‚ฐ์ •์„ ์ž๋™ํ™”ํ•˜๋ฉฐ ์ธ์šฉ๊ตฌ๊ฐ€ ํฌํ•จ๋œ ์‚ฌ์‹ค ๊ธฐ๋ฐ˜ ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

GitHub: mvanhorn/last30days-skill


๋Œ€์ƒ ๋…์ž ํ”„๋กœํ•„

  • 1~5๋…„ ์ฐจ ๊ฐœ๋ฐœ์ž
  • ์ผ์ƒ์ ์œผ๋กœ AI ๋„๊ตฌ ์„ ์ •, ๊ฒฝ์Ÿ์‚ฌ ์กฐ์‚ฌ, ๊ธฐ์ˆ  ํŠธ๋ Œ๋“œ ์ถ”์ ์ด ํ•„์š”ํ•œ ๋ถ„
  • ๊ธฐ๋ณธ์ ์ธ ์ปค๋งจ๋“œ ๋ผ์ธ ์ง€์‹์ด ์žˆ๊ณ  Claude Code ๋˜๋Š” Codex CLI์— ์ต์ˆ™ํ•œ ๋ถ„
  • Reddit/HN์„ ์ผ์ผ์ด ํ›‘์œผ๋ฉฐ ์ •๋ณด๋ฅผ ์ฐพ๋Š” ํŒŒํŽธํ™”๋œ ๊ณผ์ •์—์„œ ๋ฒ—์–ด๋‚˜๊ณ  ์‹ถ์€ ๋ถ„

ํ•ต์‹ฌ ์˜์กด์„ฑ ๋ฐ ํ™˜๊ฒฝ

์˜์กด์„ฑ์„ค๋ช…ํ•„์ˆ˜ ์—ฌ๋ถ€
Node.js 18+Skill ์‹คํ–‰ ํ™˜๊ฒฝ์˜ˆ
Python 3.10+๊ธฐ๋ณธ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์˜ˆ
ScrapeCreators API KeyReddit/TikTok/Instagram ํ†ตํ•ฉ ํ‚ค์˜ˆ
Claude Code ๋˜๋Š” Codex CLISkill ์‹คํ–‰ ๋งค๊ฐœ์ฒด์˜ˆ
X AUTH_TOKEN / CT0X ๊ฒ€์ƒ‰ ์ธ์ฆ (์„ ํƒ ์‚ฌํ•ญ)์•„๋‹ˆ์š”
Bluesky App PasswordBluesky ๊ฒ€์ƒ‰ (์„ ํƒ ์‚ฌํ•ญ)์•„๋‹ˆ์š”
Polymarket Gamma API์˜ˆ์ธก ์‹œ์žฅ ๋ฐ์ดํ„ฐ (๋ฌด๋ฃŒ)์•„๋‹ˆ์š”

์ „์ฒด ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ํŠธ๋ฆฌ

last30days-skill/
โ”œโ”€โ”€ SKILL.md                    # Skill ์ •์˜ ํŒŒ์ผ (~/.claude/skills/ ์— ๋ฐฐํฌ)
โ”œโ”€โ”€ SPEC.md                     # ์ „์ฒด ๊ธฐ์ˆ  ์‚ฌ์–‘ ๋ฌธ์„œ
โ”œโ”€โ”€ CLAUDE.md                   # Claude Code ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ
โ”œโ”€โ”€ scripts/
โ”‚   โ”œโ”€โ”€ last30days.py           # Python ๋ฉ”์ธ ์—”ํŠธ๋ฆฌ (๋ฆฌ์„œ์น˜ ์—”์ง„)
โ”‚   โ”œโ”€โ”€ sync.sh                 # ๋ฐฐํฌ ๋™๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ
โ”‚   โ””โ”€โ”€ lib/
โ”‚       โ”œโ”€โ”€ __init__.py         # ํŒจํ‚ค์ง€ ์—”ํŠธ๋ฆฌ (Eager import ๊ธˆ์ง€)
โ”‚       โ”œโ”€โ”€ env.py              # ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋กœ๋“œ
โ”‚       โ”œโ”€โ”€ dates.py            # ๋‚ ์งœ ๋ฒ”์œ„ ๋ฐ ์‹ ๋ขฐ๋„ ๊ณ„์‚ฐ
โ”‚       โ”œโ”€โ”€ cache.py            # 24h TTL ์บ์‹œ
โ”‚       โ”œโ”€โ”€ http.py             # ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ HTTP ํด๋ผ์ด์–ธํŠธ
โ”‚       โ”œโ”€โ”€ models.py           # OpenAI/xAI ๋ชจ๋ธ ์ž๋™ ์„ ํƒ
โ”‚       โ”œโ”€โ”€ openai_reddit.py    # Reddit ๊ฒ€์ƒ‰ (OpenAI Responses API)
โ”‚       โ”œโ”€โ”€ xai_x.py            # X ๊ฒ€์ƒ‰ (xAI Responses API)
โ”‚       โ”œโ”€โ”€ reddit_enrich.py    # Reddit ํฌ์ŠคํŠธ ์‹ฌ์ธต ์ง€ํ‘œ ์ถ”์ถœ
โ”‚       โ”œโ”€โ”€ hackernews.py       # Hacker News (Algolia ๋ฌด๋ฃŒ API)
โ”‚       โ”œโ”€โ”€ polymarket.py       # Polymarket ์˜ˆ์ธก ์‹œ์žฅ (Gamma API)
โ”‚       โ”œโ”€โ”€ bluesky.py          # Bluesky/AT Protocol ๊ฒ€์ƒ‰
โ”‚       โ”œโ”€โ”€ truthsocial.py      # Truth Social ๊ฒ€์ƒ‰
โ”‚       โ”œโ”€โ”€ normalize.py        # ์›์‹œ ์‘๋‹ต โ†’ ๊ทœ๊ฒฉํ™”๋œ Schema
โ”‚       โ”œโ”€โ”€ score.py            # ๋‹ค์ค‘ ์‹ ํ˜ธ ์ ์ˆ˜ ๋ชจ๋ธ
โ”‚       โ”œโ”€โ”€ dedupe.py           # ์œ ์‚ฌ ์ค‘๋ณต ํƒ์ง€
โ”‚       โ”œโ”€โ”€ render.py           # Markdown / JSON ๋ณด๊ณ ์„œ ๋ Œ๋”๋ง
โ”‚       โ””โ”€โ”€ schema.py           # ํƒ€์ž… ์ •์˜ ๋ฐ ๊ฒ€์ฆ
โ”œโ”€โ”€ skills/last30days/
โ”‚   โ””โ”€โ”€ last30days.sh            # Shell ๋ž˜ํผ (Claude Code Skill ์—”ํŠธ๋ฆฌ)
โ””โ”€โ”€ fixtures/                   # ํ…Œ์ŠคํŠธ์šฉ ํ”ผ์Šค์ฒ˜ ๋ฐ์ดํ„ฐ

Step 1 ์„ค์น˜ ๋ฐ ์ธ์ฆ ์„ค์ •

1.1 Claude Code ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐฉ์‹ ์„ค์น˜ (๊ถŒ์žฅ)

์ด๋ฏธ Claude Code๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ช…๋ น์–ด๋กœ ์ง์ ‘ ์„ค์น˜ํ•˜์„ธ์š”:

/plugin marketplace add mvanhorn/last30days-skill
/plugin install last30days@last30days-skill

๋˜๋Š” ๊ณต์‹ ๋„๊ตฌ์ธ ClawHub๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

clawhub install last30days-official

WARNING

ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ ๋ฐฉ์‹์€ ์‚ฌ์šฉ ์ค‘์ธ Claude Code ๋ฒ„์ „์ด /plugin ๋ช…๋ น์–ด๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € claude --version >= 1.0 ์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”.

1.2 ์ˆ˜๋™ Git Clone ์„ค์น˜

ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด ๋กœ์ปฌ๋กœ ์ง์ ‘ ํด๋ก ํ•˜์„ธ์š”:

# Claude Code skills ๋””๋ ‰ํ† ๋ฆฌ๋กœ ํด๋ก 
git clone https://github.com/mvanhorn/last30days-skill.git \
  ~/.claude/skills/last30days

# ๋””๋ ‰ํ† ๋ฆฌ ์ด๋™ ํ›„ ํŒŒ์ผ ํ™•์ธ
cd ~/.claude/skills/last30days
ls -la scripts/

1.3 ScrapeCreators API Key ์„ค์ • (ํ•„์ˆ˜)

Reddit/TikTok/Instagram ์„ธ ํ”Œ๋žซํผ์„ ์œ„ํ•œ ํ†ตํ•ฉ ์—”ํŠธ๋ฆฌํฌ์ธํŠธ๋กœ, ํ•˜๋‚˜์˜ ํ‚ค๋กœ ๋ชจ๋‘ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค:

  1. scrapecreators.com์— ์ ‘์†ํ•˜์—ฌ ๊ฐ€์ž… ํ›„ API Key๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์Šต๋‹ˆ๋‹ค.
  2. ์„ค์ • ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:
mkdir -p ~/.config/last30days

cat > ~/.config/last30days/.env << 'EOF'
# ํ•„์ˆ˜: Reddit + TikTok + Instagram ํ†ตํ•ฉ Key
SCRAPECREATORS_API_KEY=sc_xxxxxxxxxxxxxxxxxxxx

# ์„ ํƒ: OpenAI API (Codex ๋กœ๊ทธ์ธ ํ›„์—๋Š” ์ƒ๋žต ๊ฐ€๋Šฅ)
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx
EOF

chmod 600 ~/.config/last30days/.env  # ๋ฏผ๊ฐํ•œ ํŒŒ์ผ ๋ณดํ˜ธ

1.4 X / Bluesky ์„ ํƒ์  ์ธ์ฆ ์„ค์ •

X ๊ฒ€์ƒ‰ (๊ถŒ์žฅ ๋ฐฉ์‹):

# 1. x.com์— ๋กœ๊ทธ์ธํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋„๊ตฌ(F12)๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
# 2. Application โ†’ Cookies โ†’ auth_token ๋ฐ ct0 ๊ฐ’์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
# 3. .env ํŒŒ์ผ์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

cat >> ~/.config/last30days/.env << 'EOF'

# X ๊ฒ€์ƒ‰ ์ธ์ฆ (cookie ๋ฐฉ์‹)
AUTH_TOKEN=xxxxxxxxxxxxxxxxxxxx
CT0=xxxxxxxxxxxxxxxxxxxx

# X ๋Œ€์•ˆ: xAI API (cookie ๋ถˆํ•„์š”)
XAI_API_KEY=xai-xxxxxxxxxxxxxxxxxxxx
EOF

Bluesky ๊ฒ€์ƒ‰:

# 1. bsky.app/settings/app-passwords์—์„œ ์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
# 2. .env ํŒŒ์ผ์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

cat >> ~/.config/last30days/.env << 'EOF'

# Bluesky/AT Protocol
BSKY_HANDLE=yourhandle.bsky.social
BSKY_APP_PASSWORD=xxxx-xxxx-xxxx-xxxx
EOF

TIP

X cookie์™€ Bluesky ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์„ค์ •์ด ์‹ซ๋‹ค๋ฉด ๋ฌด๋ฃŒ์ธ Polymarket, Hacker News, Reddit๋งŒ์œผ๋กœ๋„ ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1.5 ์„ค์น˜ ์„ฑ๊ณต ํ™•์ธ

# ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ ์‹คํ–‰ (--mock์€ ๋กœ์ปฌ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ํ• ๋‹น๋Ÿ‰์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ)
python3 ~/.claude/skills/last30days/scripts/last30days.py "Claude Code tips" --mock --emit=compact

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถœ๋ ฅ์ด ๋ณด์ด๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค:

=== last30days Report: Claude Code tips ===
Sources: reddit, hackernews | Time: 2026-03-25 | Mode: mock
[results...]

Step 2 ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

2.1 /last30days ์ปค๋งจ๋“œ ๋ผ์ธ

Claude Code์—์„œ ์ง์ ‘ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”:

/last30days best Claude Code prompts

Codex CLI ๋ฐฉ์‹:

python3 ~/.claude/skills/last30days/scripts/last30days.py "best Claude Code prompts" --emit=compact

TIP

๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ๊ทผ 30์ผ๊ฐ„์˜ ์ธ๊ธฐ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉฐ, Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, Bluesky ๋“ฑ 10๊ฐœ ์ด์ƒ์˜ ์‹ ํ˜ธ์›์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ํ•œ ๋ฒˆ์— ๋ณดํ†ต 2~8๋ถ„์ด ์†Œ์š”๋˜๋ฉฐ, ๋‹ˆ์น˜(Niche)ํ•œ ์ฃผ์ œ๋Š” ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2.2 ๋ณด๊ณ ์„œ ๊ตฌ์กฐ ํ•ด์„

์‹คํ–‰์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐํ™”๋œ ๋ณด๊ณ ์„œ๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค:

# last30days Report: best Claude Code prompts

## Sources Searched (6 active)
reddit | x | hackernews | polymarket | youtube | reddit_threads

## Top Findings
...

## Best Practices (์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฒ€์ฆ ๋ฐฉ๋ฒ•)
...

## Prompt Pack (๋ณต์‚ฌ ๊ฐ€๋Šฅ)
...

## Recent Developments
...

## References (์ถœ์ฒ˜ ๋งํฌ ํฌํ•จ)
...

๋ณด๊ณ ์„œ๋Š” ์ž๋™์œผ๋กœ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:

  • ์ˆ˜๋ ด ํƒ์ง€: ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์—์„œ ๋™์‹œ์— ์–ธ๊ธ‰๋œ ์ฝ˜ํ…์ธ ์— ๋” ๋†’์€ ๊ฐ€์ค‘์น˜ ๋ถ€์—ฌ
  • ์ค‘๋ณต ์ฒ˜๋ฆฌ: ์˜๋ฏธ์ƒ ์œ ์‚ฌํ•œ ํฌ์ŠคํŠธ ์ค‘ ๊ฐ€์žฅ ์šฐ์ˆ˜ํ•œ ํ•˜๋‚˜๋งŒ ์œ ์ง€
  • ์‹œํšจ์„ฑ ๊ฐ์‡„: ์ตœ์‹  ์ฝ˜ํ…์ธ ์ผ์ˆ˜๋ก ์ƒ๋‹จ์— ๋ฐฐ์น˜
  • ์ธ์šฉ ํ‘œ๊ธฐ: ๋ชจ๋“  ๊ฒฐ๋ก ์— ์›๋ณธ ๋งํฌ ์ฒจ๋ถ€

2.3 --quick ๋น ๋ฅธ ๋ชจ๋“œ

์‹œ๊ฐ„์ด ์—†๋‹ค๋ฉด --quick์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ผ๋ถ€ ์‹ฌ์ธต ๊ฒ€์ƒ‰์„ ๊ฑด๋„ˆ๋›ฐ์„ธ์š”:

python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "Cursor AI vs Windsurf" \
  --quick \
  --emit=compact

2.4 --days=N ์‚ฌ์šฉ์ž ์ •์˜ ์‹œ๊ฐ„ ๋ฒ”์œ„

30์ผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ธฐ๊ฐ„์„ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "OpenClaw latest news" \
  --days=7 \
  --emit=compact

2.5 --refresh ์บ์‹œ ๊ฐ•์ œ ์ƒˆ๋กœ๊ณ ์นจ

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฒฐ๊ณผ๋Š” 24์‹œ๊ฐ„ ๋™์•ˆ ์บ์‹ฑ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด:

python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "AI code editors comparison" \
  --refresh \
  --emit=compact

Step 3 ๋‹ค์ค‘ ์†Œ์Šค ๋ณ‘๋ ฌ ๊ฒ€์ƒ‰ ๋ฉ”์ปค๋‹ˆ์ฆ˜

3.1 Reddit ๊ฒ€์ƒ‰ ์›๋ฆฌ

Reddit์€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์‹ ํ˜ธ์›์ž…๋‹ˆ๋‹ค. Skill์€ ๋‘ ๋‹จ๊ณ„๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:

# scripts/lib/openai_reddit.py (๊ฐ„๋žต๋ณธ)
def search_reddit(query: str, days: int = 30) -> list[dict]:
    # 1๋‹จ๊ณ„: OpenAI Responses API + web_search๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์ดˆ ๋ฐœ๊ฒฌ
    response = openai.responses.create(
        model="gpt-4o",
        input=f"Find active Reddit discussions about: {query}",
        tools=[{"type": "web_search"}],
        max_tokens=2000
    )
    # 2๋‹จ๊ณ„: ์›์‹œ ํฌ์ŠคํŠธ JSON์„ ๊ฐ€์ ธ์™€ ์‹ค์ œ ์ถ”์ฒœ/๋Œ“๊ธ€ ์ˆ˜ ํš๋“
    enriched = reddit_enrich.fetch_threads(response.urls, days)
    return enriched

TIP

v2.9 ์ดํ›„ Reddit์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ScrapeCreators๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ‚ค๋กœ Reddit + TikTok + Instagram์„ ๋ชจ๋‘ ์ปค๋ฒ„ํ•˜๋ฏ€๋กœ ์ด์ „์˜ ๋…๋ฆฝํ˜• ๋ฐฉ์‹๋ณด๋‹ค ํ›จ์”ฌ ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค.

3.2 Hacker News ํ†ตํ•ฉ

๋ณ„๋„์˜ API Key ์—†์ด ๋ฌด๋ฃŒ๋กœ ์—ฐ๋™๋ฉ๋‹ˆ๋‹ค:

# scripts/lib/hackernews.py
def search_hackernews(query: str, days: int = 30) -> list[dict]:
    # HN Algolia API๋Š” ๋ฌด๋ฃŒ ๊ฐœ๋ฐฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    url = "https://hn.algolia.com/api/v1/search"
    params = {
        "query": query,
        "tags": "story",
        "numericFilters": f"created_at_i>{cutoff_timestamp(days)}"
    }
    resp = requests.get(url, params=params)
    items = resp.json()["hits"]
    # points + num_comments๋ฅผ ํ•ฉ์‚ฐํ•˜์—ฌ ์ •๋ ฌ
    return sorted(items, key=lambda x: x["points"] + x["num_comments"] * 2, reverse=True)

3.3 Polymarket ์˜ˆ์ธก ์‹œ์žฅ ๋ฐ์ดํ„ฐ

์ด๊ฒƒ์€ last30days๊ฐ€ ๋‹ค๋ฅธ ์กฐ์‚ฌ ๋„๊ตฌ์™€ ์ฐจ๋ณ„ํ™”๋˜๋Š” ํ•ต์‹ฌ ํ•˜์ด๋ผ์ดํŠธ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ "์‚ฌ๋žŒ๋“ค์ด ๋ฌด์—‡์„ ๋งํ•˜๋Š”๊ฐ€"๋ฟ๋งŒ ์•„๋‹ˆ๋ผ "์‚ฌ๋žŒ๋“ค์ด ๋ˆ์„ ์–ด๋””์— ๊ฑฐ๋Š”๊ฐ€"๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค:

# scripts/lib/polymarket.py
def search_polymarket(query: str) -> list[dict]:
    # Gamma API ๋ฌด๋ฃŒ ์ ‘์†
    url = "https://gamma-api.polymarket.com/markets"
    resp = requests.get(url, params={"topic": query, "limit": 20})
    markets = resp.json()

    # 5์š”์†Œ ์ ์ˆ˜ ๋ชจ๋ธ
    for m in markets:
        m["composite_score"] = (
            m["text_relevance"] * 0.30 +
            m["volume_24h"] * 0.30 +
            m["liquidity"] * 0.15 +
            m["price_velocity"] * 0.15 +
            m["outcome_competitiveness"] * 0.10
        )
    return sorted(markets, key=lambda x: x["composite_score"], reverse=True)

์‹ค์ œ ํšจ๊ณผ: "OpenClaw"๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด Reddit ํฌ์ŠคํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, Polymarket์—์„œ "OpenClaw ์›”๊ฐ„ ํ™œ์„ฑ ์‚ฌ์šฉ์ž ์ˆ˜"์— ๋Œ€ํ•œ ์˜ˆ์ธก ๋ฐ์ดํ„ฐ๋„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ์ž๋ณธ์ด ํˆฌ์ž…๋œ ๋ฐฐ๋‹น๋ฅ ์€ ๊ทธ ์–ด๋–ค ํฌ์ŠคํŠธ๋ณด๋‹ค ์„ค๋“๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

3.4 ๋‹ค์ค‘ ์‹ ํ˜ธ ์ ์ˆ˜ ๋ชจ๋ธ ๋ถ„์„

๋ชจ๋“  ์†Œ์Šค์˜ ๊ฒฐ๊ณผ๋Š” ํ†ตํ•ฉ ์ ์ˆ˜ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๋ชจ์ž…๋‹ˆ๋‹ค:

# scripts/lib/score.py
def compute_composite_score(item: dict, query: str, days: int) -> float:
    # 1. ํ…์ŠคํŠธ ๊ด€๋ จ์„ฑ (์–‘๋ฐฉํ–ฅ ์œ ์‚ฌ๋„ + ์œ ์˜์–ด ํ™•์žฅ)
    text_score = bidirectional_similarity(item["text"], query)

    # 2. ์ƒํ˜ธ์ž‘์šฉ ์—ด๊ธฐ ์ •๊ทœํ™”
    engagement_score = normalize_velocity(item["engagement"])

    # 3. ์†Œ์Šค ๊ถŒ์œ„ ๊ฐ€์ค‘์น˜ (HN > Reddit > X > TikTok)
    authority_score = SOURCE_WEIGHTS[item["source"]]

    # 4. ํ”Œ๋žซํผ ๊ฐ„ ์ˆ˜๋ ด ๋ณด๋„ˆ์Šค (๋‹ค์ˆ˜ ํ”Œ๋žซํผ ๋™์‹œ ์–ธ๊ธ‰ ์‹œ ๊ฐ€์ค‘์น˜ ๋ถ€์—ฌ)
    convergence_score = detect_convergence(item, all_results)

    # 5. ์‹œํšจ์„ฑ ๊ฐ์‡„ (๋งค์ผ 0.98์˜ ์ง€์ˆ˜ ๊ฐ์‡„ ์ ์šฉ)
    recency_score = 0.98 ** days_since_post(item["timestamp"])

    return (
        text_score * 0.35 +
        engagement_score * 0.25 +
        authority_score * 0.20 +
        convergence_score * 0.10 +
        recency_score * 0.10
    )

v2.5์˜ ๋ธ”๋ผ์ธ๋“œ ํ…Œ์ŠคํŠธ ์ ์ˆ˜๋Š” v1์˜ 3.73/5.0์—์„œ 4.38/5.0์œผ๋กœ ์•ฝ 17% ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


Step 4 ๋น„๊ต ๋ชจ๋“œ (X vs Y)

4.1 "Cursor vs Windsurf" ์‚ฌ๋ก€

last30days์˜ ๊ฐ€์žฅ ๋ฉ‹์ง„ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋กœ, ๋‘ ๋„๊ตฌ๋ฅผ ์ง์ ‘ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค:

/last30days cursor vs windsurf

๋˜๋Š” ์ปค๋งจ๋“œ ๋ผ์ธ์—์„œ:

python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "cursor vs windsurf" \
  --emit=compact

4.2 ๋ณ‘๋ ฌ 3๋กœ ์กฐ์‚ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜

๋น„๊ต ๋ชจ๋“œ๋Š” ์„ธ ๋ฒˆ์˜ ๋…๋ฆฝ์ ์ธ ์กฐ์‚ฌ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค:

# scripts/lib/score.py (๋น„๊ต ๋ชจ๋“œ ๋ธŒ๋žœ์น˜)
def run_comparative_mode(query_a: str, query_b: str, base_query: str):
    # 3๋กœ ๋ณ‘๋ ฌ ๊ฒ€์ƒ‰
    results_a = run_research(query_a)       # 1: Cursor๋งŒ ๊ฒ€์ƒ‰
    results_b = run_research(query_b)       # 2: Windsurf๋งŒ ๊ฒ€์ƒ‰
    results_base = run_research(base_query) # 3: ๋‘ ํ•ญ๋ชฉ์˜ ๋น„๊ต ํ† ๋ก  ๊ฒ€์ƒ‰

    # ๋ณ‘๋ ฌ ๋น„๊ต ๋ณด๊ณ ์„œ ์ƒ์„ฑ
    return render_comparison(results_a, results_b, results_base)

4.3 ๋น„๊ต ๋ณด๊ณ ์„œ ํ•ด์„

์ถœ๋ ฅ๋˜๋Š” ๋ณด๊ณ ์„œ ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

## Comparative Analysis: Cursor vs Windsurf

### Strengths

| Dimension | Cursor | Windsurf |
|---|---|---|
| ์ฝ”๋“œ ์™„์„ฑ ์†๋„ | โญโญโญโญโญ | โญโญโญ |
| ์ปจํ…์ŠคํŠธ ์ดํ•ด | โญโญโญโญ | โญโญโญโญโญ |
| ๋‹ค์ค‘ ํŒŒ์ผ ํŽธ์ง‘ | โญโญโญโญ | โญโญโญ |
| ์ปค๋ฎค๋‹ˆํ‹ฐ ์ƒํƒœ๊ณ„ | โญโญโญโญโญ | โญโญโญ |

### Weaknesses

| Dimension | Cursor | Windsurf |
|---|---|---|
| ๋ฉ”๋ชจ๋ฆฌ ์ ์œ ์œจ | ๋†’์Œ | ์ค‘๊ฐ„ |
| ์˜คํ”„๋ผ์ธ ์ง€์› | ๋ฏธํก | ์–‘ํ˜ธ |

### Community Sentiment (30-day)
- Cursor: 78% positive (1,240 discussions)
- Windsurf: 65% positive (890 discussions)

### Data-Driven Verdict
Cursor๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฐธ์—ฌ๋„์™€ ์ฝ”๋“œ ์™„์„ฑ ํ’ˆ์งˆ ๋ฉด์—์„œ ์•ž์„œ ์žˆ์Šต๋‹ˆ๋‹ค.
Windsurf๋Š” ๋ณต์žกํ•œ ๋ฆฌํŒฉํ„ฐ๋ง์„ ์œ„ํ•œ ์ปจํ…์ŠคํŠธ ์ดํ•ด ๋Šฅ๋ ฅ์ด ํƒ์›”ํ•ฉ๋‹ˆ๋‹ค.
**Recommendation**: ์ผ์ƒ์ ์ธ ์ฝ”๋”ฉ์—๋Š” Cursor๋ฅผ, ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„์—๋Š” Windsurf๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

Step 5 ๋‹ค๋ฅธ Skill / CI ํŒŒ์ดํ”„๋ผ์ธ์— ์ž„๋ฒ ๋”ฉ

5.1 ์ปจํ…์ŠคํŠธ ์ฃผ์ž…์œผ๋กœ ์‚ฌ์šฉ

๋‹ค๋ฅธ Skill์—์„œ last30days์˜ ์—ฐ๊ตฌ ๊ฒฐ๊ณผ๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

## Recent Research Context
!python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "your research topic" \
  --emit=context

5.2 ํŒŒ์ผ์—์„œ ์ปจํ…์ŠคํŠธ ์ฝ๊ธฐ

## Research Context
!cat ~/.local/share/last30days/out/last30days.context.md

5.3 CI/CD์— JSON ์ถœ๋ ฅ ํ†ตํ•ฉ

์กฐ์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์— ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค:

# ํ”„๋กœ๊ทธ๋žจ์šฉ JSON ํ˜•์‹ ์ถœ๋ ฅ
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "best LLM for code review 2026" \
  --emit=json > research.json

# ์ถ”์ฒœ Top 3 ๋ชจ๋ธ ํ™•์ธ
python3 -c "
import json
data = json.load(open('research.json'))
for r in data['top_results'][:3]:
    print(f\"- {r['title']} (score: {r['score']:.2f})\")
"

5.4 ํ”„๋กœ์ ํŠธ ๋ ˆ๋ฒจ .env ๋ฎ์–ด์“ฐ๊ธฐ

์ „์—ญ ์„ค์ •์„ ์›ํ•˜์ง€ ์•Š๋‚˜์š”? ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— .claude/last30days.env๋ฅผ ๋‘๋ฉด ์ „์—ญ ์„ค์ •์„ ๋ฎ์–ด์”๋‹ˆ๋‹ค:

mkdir -p .claude

cat > .claude/last30days.env << 'EOF'
# ์ด ํ”„๋กœ์ ํŠธ์—๋งŒ ์ ์šฉ๋˜๋Š” API Key
SCRAPECREATORS_API_KEY=sc_project_specific_key
OPENAI_API_KEY=sk-project-specific-key
EOF

TIP

ํŒ€ ํ˜‘์—… ์‹œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ž ์ž์‹ ์˜ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ๋„ Skill์˜ ๋™์ž‘์€ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5.5 ์„ธ์…˜ ์‹œ์ž‘ ์‹œ ์ž๋™ ๊ฒ€์ฆ

v2.9.5์— ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ์œผ๋กœ, Claude Code๊ฐ€ ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค .env ์„ค์ •์˜ ์™„๊ฒฐ์„ฑ์„ ์ž๋™์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค:

# ์ˆ˜๋™ ๊ฒ€์ฆ ์‹คํ–‰
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  --validate-config

ํ•„์ˆ˜ ํ‚ค๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ ๋ช…ํ™•ํ•˜๊ฒŒ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค:

โŒ SCRAPECREATORS_API_KEY is missing (required)
โœ… OPENAI_API_KEY found
โš ๏ธ  BSKY_HANDLE is missing (optional)

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ(FAQ) ๋ฐ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

Q1: SCRAPECREATORS_API_KEY ๋ˆ„๋ฝ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์›์ธ: ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์ œ๋Œ€๋กœ ๋กœ๋“œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ:

# ํ‚ค ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ
cat ~/.config/last30days/.env | grep SCRAPECREATORS_API_KEY

# ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด ์ˆ˜๋™ ๋™๊ธฐํ™” ์‹œ๋„
bash ~/.claude/skills/last30days/scripts/sync.sh

Q2: X ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ๊ณ„์† ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์›์ธ: AUTH_TOKEN / CT0 ์ฟ ํ‚ค๊ฐ€ ๋งŒ๋ฃŒ๋˜์—ˆ๊ฑฐ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ:

# 1. x.com์— ๋‹ค์‹œ ๋กœ๊ทธ์ธ
# 2. ์ตœ์‹  auth_token๊ณผ ct0๋ฅผ ๋‹ค์‹œ ๋ณต์‚ฌ
# 3. .env ์—…๋ฐ์ดํŠธ

# ๋˜๋Š” xAI API ๋Œ€์•ˆ ์‚ฌ์šฉ (์ฟ ํ‚ค ๋ถˆํ•„์š”)
echo "XAI_API_KEY=xai-your_key" >> ~/.config/last30days/.env

Q3: ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๋„ˆ๋ฌด ๋А๋ฆฝ๋‹ˆ๋‹ค (10๋ถ„ ์ด์ƒ).

์›์ธ: ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ๋Œ€ 10๊ฐœ์˜ ์†Œ์Šค๋ฅผ ๋ณ‘๋ ฌ ๊ฒ€์ƒ‰ํ•˜๋ฉฐ, ๋‹ˆ์น˜ํ•œ ์ฃผ์ œ์˜ ๊ฒฝ์šฐ API ์žฌ์‹œ๋„๊ฐ€ ๋งŽ์•„์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ:

# 1. --quick์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ฌ์ธต ๊ฒ€์ƒ‰ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "niche topic" \
  --quick

# 2. ํŠน์ • ์†Œ์Šค์—์„œ ํƒ€์ž„์•„์›ƒ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธ
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "topic" \
  --sources=reddit  # Reddit๋งŒ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋””๋ฒ„๊น… ๊ฐ€์†ํ™”

Q4: Polymarket์—์„œ ๊ด€๋ จ ์—†๋Š” ์‹œ์žฅ ์ •๋ณด๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

์›์ธ: ์ฃผ์ œ ๋งค์นญ์ด ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜์ด์–ด์„œ ์ผ๋ถ€ ์ฃผ์ œ์—๋Š” ํ™œ์„ฑ ์‹œ์žฅ์ด ์—†์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ:

# ์ˆ˜๋™ ํ‚ค์›Œ๋“œ ํ™•์žฅ ์ง€์ •
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "AI coding assistant" \
  --polymarket-tags="artificial intelligence,llm,gpt" \
  --emit=compact

Q5: Claude Code์—์„œ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•ด Permission denied ์˜ค๋ฅ˜๊ฐ€ ๋œน๋‹ˆ๋‹ค.

์›์ธ: ์‰˜ ์Šคํฌ๋ฆฝํŠธ์— ์‹คํ–‰ ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ:

chmod +x ~/.claude/skills/last30days/skills/last30days.sh
chmod +x ~/.claude/skills/last30days/scripts/last30days.py

Q6: Reddit์— ํ† ๋ก ์ด ๋งŽ์€๋ฐ ๋ณด๊ณ ์„œ์—๋Š” ํฌ์ŠคํŠธ๊ฐ€ ์ ๊ฒŒ ๋‚˜์˜ต๋‹ˆ๋‹ค.

์›์ธ: v2.9 ์ดํ›„ ๊ธฐ๋ณธ์ ์œผ๋กœ ScrapeCreators๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, Key๊ฐ€ ์„ค์ •๋˜์—ˆ์–ด๋„ ํ˜•์‹์ด ์ž˜๋ชป๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ:

# ScrapeCreators Key ์œ ํšจ์„ฑ ํ™•์ธ
curl -H "x-api-key: sc_your_key" \
  https://api.scrapecreators.com/v1/reddit/search?q=test

# Key๊ฐ€ ์œ ํšจํ•œ๋ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด OpenAI ๋Œ€์•ˆ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธ
# .env์— ScrapeCreators ๊ฐ•์ œ ์‚ฌ์šฉ ์„ค์ • ์ถ”๊ฐ€
echo "FORCE_SCRAPECREATORS=1" >> ~/.config/last30days/.env

์ถ”๊ฐ€ ์ฝ์„๊ฑฐ๋ฆฌ / ์‹ฌํ™” ํ•™์Šต

1. ์ ์ˆ˜ ๋ชจ๋ธ ์ƒ์„ธ ํŠœ๋‹

scripts/lib/score.py์˜ ๊ฐ€์ค‘์น˜๋Š” ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ์†Œ์Šค๋ฅผ ์„ ํ˜ธํ•œ๋‹ค๋ฉด ํฌํฌ(fork) ํ›„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

# Hacker News์˜ ๊ถŒ์œ„ ๊ฐ€์ค‘์น˜๋ฅผ 0.20์—์„œ 0.35๋กœ ์ƒํ–ฅ
SOURCE_WEIGHTS = {
    "hackernews": 0.35,   # โ†‘ 0.20์—์„œ ๋ณ€๊ฒฝ
    "reddit": 0.25,
    "x": 0.15,
    "polymarket": 0.15,
    "youtube": 0.10,
}

2. ์‚ฌ์šฉ์ž ์ •์˜ ์†Œ์Šค ์ถ”๊ฐ€

GitHub Issues๋‚˜ LinkedIn์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‚˜์š”? hackernews.py์˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ทœ๊ฒฉ์„ ์ฐธ๊ณ ํ•˜์—ฌ scripts/lib/์— ์ƒˆ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค๊ณ  last30days.py์— ๋“ฑ๋กํ•˜์„ธ์š”. SPEC.md์— ์ƒ์„ธํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ์ •๊ธฐ ์กฐ์‚ฌ ์ž๋™ํ™”

cron์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๊ธฐ์ ์œผ๋กœ ์กฐ์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ฆฌ์„œ์น˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”:

# ๋งค์ผ ์˜ค์ „ 8์‹œ์— "AI tools weekly" ์กฐ์‚ฌ ์‹คํ–‰
0 8 * * * python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "AI developer tools weekly" \
  --days=7 \
  --emit=md \
  --output ~/Documents/Last30Days/ai-tools-weekly-$(date +\%Y-\%m-\%d).md

4. ์ง€์‹ ๋ฒ ์ด์Šค(KB) ์—ฐ๋™

์กฐ์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฐœ์ธ ์ง€์‹ ๋ฒ ์ด์Šค(RAG ํŒŒ์ดํ”„๋ผ์ธ)์— ์ง์ ‘ ์ฃผ์ž…ํ•˜์„ธ์š”:

# ์ธ์šฉ๊ตฌ๊ฐ€ ํฌํ•จ๋œ context๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋‹ค๋ฅธ Skill์— ์ „๋‹ฌ
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "Claude Code advanced techniques" \
  --emit=context > ~/.knowledge/last30_context.md

๊ด€๋ จ ๋ฆฌ์†Œ์Šค

Updated March 25, 2026
    last30days-Skill ์ž…๋ฌธ ๊ฐ€์ด๋“œ: Reddit/HN/Polymarket์„ ์•„์šฐ๋ฅด๋Š” ์ •๋ณด ์ˆ˜์ง‘๊ธฐ | OpenClaw API ๋ฌธ์„œ - ์˜คํ”ˆ์†Œ์Šค AI ์–ด์‹œ์Šคํ„ดํŠธ ํ†ตํ•ฉ ๊ฐ€์ด๋“œ