/claude-desktop-research
Write grounded Claude Desktop/Web research prompts. Triggers: research prompt, Claude Desktop, MCP-aware.
$ golems-cli skills install claude-desktop-researchUpdated 2 weeks ago
Write deep-research prompts for Claude Desktop (macOS .app) ā also covers Claude Web (claude.ai projects) as a subset. Both surfaces support Drive grounding and Deep Research mode. Only Claude Desktop has local MCP connections ā and only in REGULAR CHAT, not in Research mode (empirically verified 2026-06-10, see below). The differentiator is Desktop's chat-mode MCP access.
š DRIVE-WORKSPACE RULE (Etan, standing ā never violate): Etan's research surface has his Google Drive workspace CONNECTED. Prompts must REFERENCE the relevant Google Doc(s) by NAME so the agent pulls them itself via the Drive connector. NEVER instruct Etan to attach/upload files ā he should never have to attach anything, ever. Reference doc names, not attachments.
š OUTPUT-PLACEMENT CONTRACT (Etan, standing ā 2026-06-10): Every prompt this skill emits MUST end with a placement block stating where the output lives next: the owning-context folder (large-plan / design-doc / sprint ā one folder per research, placement is dynamic), the filename convention, and whether Brain Drive archival applies. Claude-side outputs land on
~/Desktopor~/Downloads(native exports:compass_artifact_<UID>*.md; Etan also hand-pastes.rtf/.rtfd) and MUST be deliberately moved to the owning folder ā the moving agent verifies the destination is correct before moving (no blind automation for local files). The evidence of why we did what we did lives with the work it justified.
Why this skill is named "desktop"
Both Claude Web and Claude Desktop now expose:
- Deep Research mode (5ā60 min web sweeps with citations)
- Google Drive grounding ā Etan's Drive workspace is already connected. The prompt REFERENCES the relevant Doc(s) by NAME and the agent reads them itself via the connector. (Never an "attach a folder" step ā see the DRIVE-WORKSPACE RULE above and the emit-gate below.)
But only Claude Desktop has local MCP connections (wired via claude_desktop_config.json + .mcpb extensions) ā and they are exposed in REGULAR CHAT ONLY.
ā ļø VERIFIED 2026-06-10 (empirical, gen-15 weave): Claude Desktop Research mode CANNOT call local MCP tools. A Research-mode run instructed to call
brain_searchbefore any web work returned the mandated fallback "TOOL UNAVAILABLE IN RESEARCH MODE" and the UI loggedFailed to call tool "brain_search"ā Research routes everything through its own pipeline (launch_extended_search_task); local MCPs are unreachable mid-research. Any prompt that assumes otherwise hits a silent miss.
So the skill has two dispatch modes:
- Research mode ā web sweeps + Drive connector grounding only. No local MCPs. Use for citation-heavy external research.
- Chat-bench mode ā a benchmark-style prompt in a REGULAR Desktop chat: full local MCP access (brain_search, filesystem, voicelayer, ā¦). This is the proven pattern for MCP-grounded deep work (2026-06-09 2nd-pass runs: context-hygiene, theo-audio, m1-sync ā all called brain_search + filesystem from chat).
If Gemini Desktop ever ships an MCP connections file, that gap closes ā for now (2026-04-30) only Claude Desktop has it.
Pre-flight: Apply the CHECK-FIRST + GROUND + emit-only-if-pass gate before writing any paste-ready deep-research prompt.
When to use this vs. Gemini vs. quick lookup
| Need | Use |
|---|---|
| Quick web lookup, 1ā2 sources | Web/exa tools directly |
| Deep comparison, 5+ sources, academic papers, NO MCP needed | This skill (web mode) |
| Deep work that must call BrainLayer / voicelayer / supabase / etc. mid-stream | This skill (chat-bench mode ā REGULAR Desktop chat, never Research mode) |
| Broad landscape analysis ("what's out there") | This skill |
| API validation against official docs | This skill |
| Side-by-side with Gemini for paired Drive-grounded research | Run this skill plus /gemini-research, then compare outputs |
| Visual/frame-heavy analysis | /gemini-research (CLI) ā Gemini is faster on batch images |
Pre-flight: which MCPs are actually wired?
Before writing a prompt that assumes desktop-mode MCP access, verify the connection list. Claude Desktop wires MCP servers via TWO paths ā both must be checked.
Path 1: Legacy claude_desktop_config.json
python3 -c "
import json
with open('/Users/etanheyman/Library/Application Support/Claude/claude_desktop_config.json') as f:
d = json.load(f)
servers = d.get('mcpServers', {})
print('Legacy MCPs (claude_desktop_config.json):')
for name in sorted(servers.keys()):
print(f' - {name}')
print(f'Total legacy: {len(servers)}')
"Path 2: Extensions (.mcpb)
EXT_DIR="$HOME/Library/Application Support/Claude/Claude Extensions Settings"
echo "Installed .mcpb extensions:"
ls "$EXT_DIR"/*.json 2>/dev/null | xargs -n1 basename | sed 's/\.json$//' | sed 's/^/ - /'
[ -f "$EXT_DIR/extensions-installations.json" ] && python3 -c "
import json, sys
with open('$EXT_DIR/extensions-installations.json') as f:
d = json.load(f)
print('extensions-installations.json:')
print(json.dumps(d, indent=2)[:1500])
"The Extensions path is where modern MCPs live (e.g., local.mcpb.etan-heyman.brainlayer v1.0.0, installed 2026-03-28 ā provides brain_search, brain_store, etc., but NOT visible in claude_desktop_config.json).
If a prompt instructs Claude Desktop to call a tool, the tool must appear in EITHER the legacy config OR the Extensions list. Always run BOTH commands above before writing a desktop-mode prompt ā checking only one path can produce a false-negative ("MCP not wired" when it actually is, just under the other path).
.mcpb is the canonical wiring strategy going forward
The legacy claude_desktop_config.json is being phased out ā entries currently in it (e.g., exa, whatsapp, whatsapp-business, voicelayer) will migrate to .mcpb extensions in a separate consolidation sprint. Until that sprint lands, BOTH paths must be checked. This skill should be revisited once the migration is complete to drop the legacy enumeration step.
Out-of-the-box behavior
If the relevant MCP is missing from BOTH paths, the prompt will hit a silent miss. Either (a) tell the user to install the missing .mcpb (preferred) or add to claude_desktop_config.json (legacy), then restart Claude Desktop; or (b) flag the gap and rewrite the prompt to web-mode (no MCP).
Full SKILL.md source ā includes LLM directives, anti-patterns, and technical instructions stripped from the Overview tab.
Write deep-research prompts for Claude Desktop (macOS .app) ā also covers Claude Web (claude.ai projects) as a subset. Both surfaces support Drive grounding and Deep Research mode. Only Claude Desktop has local MCP connections ā and only in REGULAR CHAT, not in Research mode (empirically verified 2026-06-10, see below). The differentiator is Desktop's chat-mode MCP access.
š DRIVE-WORKSPACE RULE (Etan, standing ā never violate): Etan's research surface has his Google Drive workspace CONNECTED. Prompts must REFERENCE the relevant Google Doc(s) by NAME so the agent pulls them itself via the Drive connector. NEVER instruct Etan to attach/upload files ā he should never have to attach anything, ever. Reference doc names, not attachments.
š OUTPUT-PLACEMENT CONTRACT (Etan, standing ā 2026-06-10): Every prompt this skill emits MUST end with a placement block stating where the output lives next: the owning-context folder (large-plan / design-doc / sprint ā one folder per research, placement is dynamic), the filename convention, and whether Brain Drive archival applies. Claude-side outputs land on
~/Desktopor~/Downloads(native exports:compass_artifact_<UID>*.md; Etan also hand-pastes.rtf/.rtfd) and MUST be deliberately moved to the owning folder ā the moving agent verifies the destination is correct before moving (no blind automation for local files). The evidence of why we did what we did lives with the work it justified.
Why this skill is named "desktop"
Both Claude Web and Claude Desktop now expose:
- Deep Research mode (5ā60 min web sweeps with citations)
- Google Drive grounding ā Etan's Drive workspace is already connected. The prompt REFERENCES the relevant Doc(s) by NAME and the agent reads them itself via the connector. (Never an "attach a folder" step ā see the DRIVE-WORKSPACE RULE above and the emit-gate below.)
But only Claude Desktop has local MCP connections (wired via claude_desktop_config.json + .mcpb extensions) ā and they are exposed in REGULAR CHAT ONLY.
ā ļø VERIFIED 2026-06-10 (empirical, gen-15 weave): Claude Desktop Research mode CANNOT call local MCP tools. A Research-mode run instructed to call
brain_searchbefore any web work returned the mandated fallback "TOOL UNAVAILABLE IN RESEARCH MODE" and the UI loggedFailed to call tool "brain_search"ā Research routes everything through its own pipeline (launch_extended_search_task); local MCPs are unreachable mid-research. Any prompt that assumes otherwise hits a silent miss.
So the skill has two dispatch modes:
- Research mode ā web sweeps + Drive connector grounding only. No local MCPs. Use for citation-heavy external research.
- Chat-bench mode ā a benchmark-style prompt in a REGULAR Desktop chat: full local MCP access (brain_search, filesystem, voicelayer, ā¦). This is the proven pattern for MCP-grounded deep work (2026-06-09 2nd-pass runs: context-hygiene, theo-audio, m1-sync ā all called brain_search + filesystem from chat).
If Gemini Desktop ever ships an MCP connections file, that gap closes ā for now (2026-04-30) only Claude Desktop has it.
Pre-flight: Apply the CHECK-FIRST + GROUND + emit-only-if-pass gate before writing any paste-ready deep-research prompt.
When to use this vs. Gemini vs. quick lookup
| Need | Use |
|---|---|
| Quick web lookup, 1ā2 sources | Web/exa tools directly |
| Deep comparison, 5+ sources, academic papers, NO MCP needed | This skill (web mode) |
| Deep work that must call BrainLayer / voicelayer / supabase / etc. mid-stream | This skill (chat-bench mode ā REGULAR Desktop chat, never Research mode) |
| Broad landscape analysis ("what's out there") | This skill |
| API validation against official docs | This skill |
| Side-by-side with Gemini for paired Drive-grounded research | Run this skill plus /gemini-research, then compare outputs |
| Visual/frame-heavy analysis | /gemini-research (CLI) ā Gemini is faster on batch images |
Pre-flight: which MCPs are actually wired?
Before writing a prompt that assumes desktop-mode MCP access, verify the connection list. Claude Desktop wires MCP servers via TWO paths ā both must be checked.
Path 1: Legacy claude_desktop_config.json
python3 -c "
import json
with open('/Users/etanheyman/Library/Application Support/Claude/claude_desktop_config.json') as f:
d = json.load(f)
servers = d.get('mcpServers', {})
print('Legacy MCPs (claude_desktop_config.json):')
for name in sorted(servers.keys()):
print(f' - {name}')
print(f'Total legacy: {len(servers)}')
"Path 2: Extensions (.mcpb)
EXT_DIR="$HOME/Library/Application Support/Claude/Claude Extensions Settings"
echo "Installed .mcpb extensions:"
ls "$EXT_DIR"/*.json 2>/dev/null | xargs -n1 basename | sed 's/\.json$//' | sed 's/^/ - /'
[ -f "$EXT_DIR/extensions-installations.json" ] && python3 -c "
import json, sys
with open('$EXT_DIR/extensions-installations.json') as f:
d = json.load(f)
print('extensions-installations.json:')
print(json.dumps(d, indent=2)[:1500])
"The Extensions path is where modern MCPs live (e.g., local.mcpb.etan-heyman.brainlayer v1.0.0, installed 2026-03-28 ā provides brain_search, brain_store, etc., but NOT visible in claude_desktop_config.json).
If a prompt instructs Claude Desktop to call a tool, the tool must appear in EITHER the legacy config OR the Extensions list. Always run BOTH commands above before writing a desktop-mode prompt ā checking only one path can produce a false-negative ("MCP not wired" when it actually is, just under the other path).
.mcpb is the canonical wiring strategy going forward
The legacy claude_desktop_config.json is being phased out ā entries currently in it (e.g., exa, whatsapp, whatsapp-business, voicelayer) will migrate to .mcpb extensions in a separate consolidation sprint. Until that sprint lands, BOTH paths must be checked. This skill should be revisited once the migration is complete to drop the legacy enumeration step.
Out-of-the-box behavior
If the relevant MCP is missing from BOTH paths, the prompt will hit a silent miss. Either (a) tell the user to install the missing .mcpb (preferred) or add to claude_desktop_config.json (legacy), then restart Claude Desktop; or (b) flag the gap and rewrite the prompt to web-mode (no MCP).
File Locations
Primary (Drive ā works for BOTH desktop AND web)
Brain Drive/Research/<project>/
description.md
instructions.md
context/
00-code-map.md
01-*.txt
40-*.txt
prompts/
R{NN}-{topic}.md
results/
R{NN}-claude-desktop-result.md # was: R{NN}-claude-web-result.md (legacy alias retained)
Local cache (optional, not authoritative)
~/Gits/orchestrator/docs.local/claude-desktop/projects/<project>/
description.md
instructions.md
research-context/
prompts/
results/
Known projects
batch-brainlayerā BrainLayer (memory layer, enrichment, search quality)batch-cmuxā cmux (terminal multiplexer, agent orchestration)batch-orchestratorā Orchestrator (cross-repo coordination, agent design)
Workflow
Research Gates (mandatory)
- Plan-author gate: When Claude Desktop/Web returns a generated research
PLAN before execution, send that PLAN back to the prompt author and wait for
an explicit
START/EDITverdict. Do not fire the research run just because the plan looks plausible. - Harvest own-brief gate: At harvest, any report claim that cites one of YOUR OWN briefs/prompts/plans must be cross-checked against the actual brief text before you accept, store, or relay it. Do not let a report cite a fabricated premise from your own setup. This gate exists because two 2026-06-05 catches were fabricated-premise failures: a hallucinated Drive doc in R01's plan and a nonexistent delta-brief mandate in R02's report.
- Dispatch harvest contract (required ā see
/research-lifecycle): At dispatch time recordharvest_owner,harvest_trigger, andexport_route(e.g.~/Gits/orchestrator/docs.local/research/R{NN}-result.mdā brain_store). Applies to batch and one-off dispatches. Research without a harvest path = parked, not done. Export route must name how results return to the fleet.
Step 0 ā Verify active account + MCP wiring
bash skills/golem-powers/_shared/research/verify-account.sh --expect etanface@gmail.comThen run the MCP pre-flight (above). If desktop-mode MCP is required and the relevant server is NOT wired, STOP and tell the user ā do not write a prompt that will silently miss its tool.
Step 1 ā Determine project and next RNN number
- Ensure Drive folders exist:
python3 skills/golem-powers/_shared/research/drive-paths.py ensure-project-folders <project> - List existing prompts from Drive:
python3 skills/golem-powers/_shared/research/drive-paths.py list-prompts <project> - The next prompt gets
R{NN+1}.
Step 2 ā Write the research prompt
File: R{NN}-{topic-slug}.md
Template:
# R{NN}: {Title ā What You're Researching}
## Mode
[desktop / web] ā desktop if MCP needed, web if not
## Context
{2ā3 paragraphs explaining WHY this research is needed.}
## Grounding (Drive workspace ā CONNECTED; REQUIRED block)
{Ground this research in the following docs from my Google Drive ā pull them
yourself via the connected Drive workspace; do NOT ask me to attach anything:
- "<Exact Google Doc name 1>"
- "<Exact Google Doc name 2>"
If no Drive doc applies, write "None ā self-contained / web-only" so the
omission is deliberate. NEVER replace this block with an attach/upload ask.}
## Our Architecture
{Include INLINE ā Claude Desktop in WEB MODE has zero codebase access; in DESKTOP MODE it can call MCP but still benefits from inline architecture for non-MCP-wired details. Include:
- Code snippets of relevant implementations
- Data shapes (SQL schemas, JSON structures)
- Exact numbers (chunk counts, tag counts, performance metrics)
- Tool/library versions}
## Available MCP tools (DESKTOP MODE ONLY ā verify before relying)
{Skip this section for web-mode prompts. For desktop-mode, list the MCPs the prompt assumes:
- `mcp__brainlayer__brain_search` ā semantic + keyword recall
- `mcp__voicelayer__*` ā TTS / STT / pill-state
- `mcp__exa__web_search_exa` ā web search
- ...}
## Research Questions
### 1. [Topic Area]
- Specific question 1
- Specific question 2
### 2. [Topic Area]
- ...
## Deliverable
Structured report with:
1. {Section 1 title} ā {what it should contain}
2. ...CRITICAL RULES for the prompt:
- SELF-CONTAINED for web mode: Zero codebase access. Every architecture detail / code snippet / number INLINE.
- MCP-AWARE for desktop mode: Name the exact MCP tool (
mcp__brainlayer__brain_search) and what to do with the result. Don't say "use BrainLayer" ā say "callbrain_search('<query>')and report top 5 chunks." - SPECIFIC: "How does X handle Y at Z scale?" not "Tell me about X."
- EXACT NUMBERS: "223K chunks", "22 domain tags", "p50=1480ms" ā not "many chunks."
- DELIVERABLE SPEC: Tell Claude Desktop exactly what sections to return.
- REFERENCE VERSIONS: "Gemini 2.5 Flash-Lite", "sqlite-vec 0.1.6", "Next.js 16."
- GROUND BY NAME, NEVER BY ATTACHMENT: The
## Groundingblock names the Drive Doc(s); Claude reads them via the connected workspace. The prompt must NEVER tell Etan to attach/upload/drag a file. (Gate-enforced ā see Step 2.5.)
Step 2.5 ā š EMIT-GATE: Drive-Workspace compliance (BLOCKING)
Before the prompt leaves this skill ā and before the Step 5 user-facing message ā run the mechanical gate. Do not eyeball it:
# Exit 1 = FAIL. Scan the prompt file you just wrote AND the dispatch message text.
bash skills/golem-powers/_shared/research/drive-grounding-gate.sh R{NN}-{topic}.md
# or pipe text: printf '%s' "$MSG" | bash skills/golem-powers/_shared/research/drive-grounding-gate.sh -- FAIL (gate finds
attach/upload/drag/ "add the file" aimed at Etan) ā do NOT emit. Rewrite the offending lines to REFERENCE the Doc(s) by NAME in the## Groundingblock, re-run, repeat until PASS. - PASS ā safe to emit.
Step 3 ā Update project context files in Drive
If the project's context has changed since the last prompt:
- description.md ā One paragraph. Current state, recent changes, what's live.
- instructions.md ā Full architecture reference. Tool status, DB state, constraints.
- context/*.md ā Add/update domain-specific files as needed.
- Keep numbering aligned with
skills/golem-powers/_shared/research/context-numbering.md.
Step 4 ā Upload prompt + context to Drive (and optional local cache)
- Upload
R{NN}-{topic}.mdtoBrain Drive/Research/<project>/prompts/ - Keep
description.md,instructions.md, andcontext/current inBrain Drive/Research/<project>/context/ - Optionally mirror to
~/Gits/orchestrator/docs.local/claude-desktop/projects/<project>/for local review
Step 5 ā Tell the user
Research prompt ready: R{NN}-{topic}.md
Mode: [desktop / web] ā desktop if MCP needed, web if not
Primary: Brain Drive/Research/<project>/prompts/
Local cache: docs.local/claude-desktop/projects/<project>/ (optional)
Open Claude Desktop and paste the prompt. Your Drive workspace is connected, so
Claude pulls the named Doc(s) itself ā nothing to attach or upload.
[If desktop-mode] Confirm these MCPs are wired before submitting: <list>.
When Claude returns its research PLAN, send that PLAN back here for START/EDIT
before clicking Start Research.
Before sending the message above, it must PASS Step 2.5's gate too ā a dispatch message that says "attach"/"upload" is the same violation as a prompt that does.
Step 6 ā After results arrive
When the user downloads compass_artifact or copies the result:
- Save to
Brain Drive/Research/<project>/results/R{NN}-claude-desktop-result.md - Optionally mirror to
~/Gits/orchestrator/docs.local/claude-desktop/projects/<project>/results/ brain_digestthe raw content (extracts entities/relations)brain_storeconclusions with tags["research", "conclusions", "{project}", "{topic}"]- Keep the Drive result file authoritative
- Run the Harvest own-brief gate above for any report claim that cites your own prompt/brief/plan text
- Apply findings to the codebase / sprint plan
Creating a new project batch
python3 skills/golem-powers/_shared/research/drive-paths.py ensure-project-folders newproject
# Then upload description.md, instructions.md, context files, and the first prompt.Migrating legacy Obsidian batches
bash skills/golem-powers/claude-desktop-research/scripts/migrate-obsidian-to-drive.sh batch-cmux --dry-run
bash skills/golem-powers/claude-desktop-research/scripts/migrate-obsidian-to-drive.sh batch-cmuxProcedure: skills/golem-powers/claude-desktop-research/workflows/migrate.md
Quality checklist
Before telling the user the prompt is ready:
-
drive-grounding-gate.shPASSES on the prompt AND the dispatch message (zero attach/upload/drag ā Step 2.5) -
## Groundingblock present, naming the Drive Doc(s) by exact name (or "None ā self-contained") - Mode declared (desktop / web) ā both prompt header AND user-facing message
- If desktop mode: relevant MCPs verified in
claude_desktop_config.json - Prompt is fully self-contained (no "see the codebase" references for web-mode prompts)
- Architecture includes code snippets, not just descriptions
- All numbers are exact (not "many", "large", "several")
- Research questions are specific (not "tell me about X")
- Deliverable section specifies exact output structure
- Library/tool versions included
- Prompt author will review the generated research PLAN before execution
- Harvest includes own-brief cross-check for any self-cited setup claim
- Context files are up to date with current state
- Prompt uploaded to Drive
prompts/ - Context lives in Drive
context/ - Optional local cache updated if needed
- Next RNN number is correct (no collisions)
Renamed from /claude-web-research (2026-04-30)
User correction: BOTH Claude Web AND Claude Desktop have deep research + Drive grounding. The differentiator is MCP ā only Desktop has local connections. The skill formerly known as /claude-web-research is now /claude-desktop-research (desktop is the umbrella; web is the MCP-less subset).
The legacy /claude-web-research slash trigger retired on 2026-05-30. Use /claude-desktop-research for Claude Desktop/Web research prompts.
Changelog entries are derived from eval runs and skill version updates. Full cascading changelog (Phase 4D) coming soon.
- +Initial release to Golems skill library
- +3 workflows included: fast-batch, harvest-results, migrate