Complete setup for the Deep Research ladder on macOS, Linux, and Windows (WSL).
Three installation paths:
| Path | When to use | Time |
|---|---|---|
| A. Quick | You want to try it immediately, already have Claude Code | 5 min |
| B. Full | You want all six tiers including L5 with Codex | 20 min |
| C. Manual | You want to audit each step, or install.sh fails |
30 min |
All paths require:
| Tool | Check with | Install if missing |
|---|---|---|
| Claude Code | claude --version |
claude.com/claude-code |
| git | git --version |
Usually preinstalled; brew install git / apt install git |
| Bash 4+ or Zsh | echo $SHELL |
macOS/Linux default |
Optional but recommended:
| Tool | Used by |
|---|---|
jq |
Install scripts, JSON inspection |
curl |
API tests |
git clone https://github.com/hint-shu/deep-research.git
cd deep-research
bash scripts/install.shThe script:
- Copies each
skills/<name>/to~/.claude/skills/<name>/ - Verifies Claude Code can see them (
claude skill list) - Prints the next steps (API keys, test command)
After the script finishes, skip to API Keys Setup.
macOS (Homebrew):
brew install firecrawlLinux / WSL:
curl -fsSL https://install.firecrawl.dev | bashAlternative (npm, any platform):
npm install -g @mendable/firecrawl-cliVerify:
firecrawl --version
# Should print: 1.12.2 (or higher)Tavily runs as an MCP server that Claude Code connects to. The cleanest way is to add it via your Claude Code MCP config.
Open ~/.claude.json (or create it) and add Tavily under mcpServers:
{
"mcpServers": {
"tavily": {
"type": "http",
"url": "https://mcp.tavily.com/mcp/?tavilyApiKey=YOUR_TAVILY_KEY_HERE"
}
}
}
⚠️ Security note:~/.claude.jsonstays on your machine. Never commit it anywhere. Your API key goes in this file and nowhere else in this project.
Restart Claude Code to pick up the new MCP server.
Adds a third search index (neural semantic search) alongside Tavily and Firecrawl. Free tier: 1,000 searches/month.
- Sign up at exa.ai, get API key
- Install the MCP server with all tools:
claude mcp add --transport http exa \
'https://mcp.exa.ai/mcp?exaApiKey=YOUR_EXA_KEY&tools=web_search_exa,web_search_advanced_exa,get_code_context_exa,crawling_exa,company_research_exa,people_search_exa,deep_researcher_start,deep_researcher_check'- Restart Claude Code. Verify:
claude mcp list | grep exashould show✓ Connected.
Full integration guide: docs/EXA_INTEGRATION.md.
Adds a fourth research tool category — answer engine that returns synthesized answers with citations, not just URLs. Kills L0 fact-check latency (one call vs search+scrape+synthesize).
- Sign up at perplexity.ai, get API key
- Install the official MCP server:
claude mcp add perplexity-ask -e "PERPLEXITY_API_KEY=pplx-YOUR_KEY" -- npx -y server-perplexity-ask- Restart Claude Code. Verify:
claude mcp list | grep perplexityshould show✓ Connected.
Full integration guide: docs/PERPLEXITY_INTEGRATION.md.
Only needed if you want the cross-model channel for L2+.
# macOS
brew install openai/tap/codex
# Other platforms: see https://developers.openai.com/codex/cliLog in with your ChatGPT account (must be Pro tier for GPT-5.4):
codex auth loginVerify:
codex --version
codex exec -c 'web_search="live"' --sandbox read-only \
--skip-git-repo-check --ephemeral \
"What is the latest stable Node.js version?"If this returns a sensible answer, Codex is ready.
git clone https://github.com/hint-shu/deep-research.git
cd deep-research
bash scripts/install.shContinue to API Keys Setup.
Use this path if install.sh fails or you want full audit.
cp -r skills/quick-research ~/.claude/skills/
cp -r skills/research ~/.claude/skills/
cp -r skills/deep-research ~/.claude/skills/
cp -r skills/expert-research ~/.claude/skills/
cp -r skills/academic-research ~/.claude/skills/
cp -r skills/ultra-research ~/.claude/skills/Open Claude Code in any directory, type / — you should see /quick-research, /research, /deep-research, /expert-research, /academic-research, /ultra-research in the list.
If not:
- Restart Claude Code
- Check
~/.claude/skills/has the files - Check each
SKILL.mdstarts with proper frontmatter (---\nname: ...\n)
Option 1 — OAuth (easiest):
firecrawl configOpens a browser, sign in or sign up, done.
Option 2 — manual key:
- Go to firecrawl.dev, sign up
- Copy your API key (
fc-...) - Set it:
# In your shell profile (~/.zshrc or ~/.bashrc):
export FIRECRAWL_API_KEY="fc-YOUR_KEY_HERE"Or use firecrawl -k fc-YOUR_KEY ... on every call.
Verify:
firecrawl --status
# Should show: Authenticated: yes- Sign up at tavily.com
- Get your API key (
tvly-...) - Edit
~/.claude.json— replaceYOUR_TAVILY_KEY_HEREwith your actual key (see step 2 of Path B) - Restart Claude Code
Verify: in Claude Code, ask what MCP servers are connected? — you should see tavily listed.
codex auth loginFollow the browser flow. No env var needed — Codex stores auth locally.
In any directory, start Claude Code and run:
/quick-research what's the latest stable version of Bun
Expected: ~1 minute, you get a short answer with 3–5 cited sources.
If it fails, jump to docs/TROUBLESHOOTING.md.
Run each command, all should succeed:
claude --version # Claude Code installed
firecrawl --status # Firecrawl auth OK
firecrawl search "test" --limit 1 # Firecrawl search works
codex --version # (Optional) Codex installed
ls ~/.claude/skills/research/SKILL.md # Skills copiedFrom inside Claude Code:
/quick-research test query # L0 works
mcp__tavily__tavily_search # Tavily MCP accessible
cd deep-research
git pull
bash scripts/install.sh # Re-run install (it's idempotent)rm -rf ~/.claude/skills/quick-research
rm -rf ~/.claude/skills/research
rm -rf ~/.claude/skills/deep-research
rm -rf ~/.claude/skills/expert-research
rm -rf ~/.claude/skills/academic-research
rm -rf ~/.claude/skills/ultra-researchYour research artifacts in .firecrawl/research/ in individual projects are yours to keep or delete.
| Symptom | Cause | Fix |
|---|---|---|
firecrawl: command not found |
PATH not updated | Restart terminal, or source ~/.zshrc |
| Skills not listed in Claude Code | MCP/skill cache stale | Restart Claude Code; check ~/.claude/skills/ |
| Tavily: "authentication failed" | Wrong key in ~/.claude.json |
Re-copy key from tavily.com dashboard |
| Codex: "not authenticated" | Token expired | Re-run codex auth login |
install.sh: Permission denied |
Missing execute bit | chmod +x scripts/install.sh |
Full troubleshooting: docs/TROUBLESHOOTING.md.