| name | search-everywhere |
| description | Cross-source synthesis search. Fans out to the hypha archive (Gmail/Drive/Calendar), ripgrep over ~/Projects, and the user's auto-memory in parallel, then synthesises a structured brief with citations. Use when the user says "search everywhere", "find everything about X", "search my archive and my repos", "what do I know about X", "ultrathink search [topic]". Provides ultrathink-quality output by spawning a fan-out subagent — not a single-shot keyword grep. |
| argument-hint | <topic-or-question> |
| allowed-tools | ["Bash","Read","Grep","Glob","Agent"] |
/search-everywhere
The cross-source query that no single tool answers well. Fans out across:
- hypha archive — your Gmail mbox + Drive Takeout + Calendar exports, identity-resolved into a typed graph
- live filesystem — ripgrep over
~/Projects and ~/.claude/skills for current code, notes, configs
- auto-memory —
~/.claude/projects/*/memory/MEMORY.md for prior-conversation context
A research subagent then synthesises results into a structured brief with citations. Hits without synthesis is not the goal. This skill exists to deliver ultrathink-quality output, not to dump matching lines.
Arguments
User invoked with: $ARGUMENTS
Instructions
When this skill is invoked:
-
Capture the query. It is $ARGUMENTS. If empty, ask the user what they want to search for; do not proceed without one.
-
Ensure the hypha daemon is running so the archive is queryable:
bash ${CLAUDE_PLUGIN_ROOT}/scripts/ensure-daemon.sh
If this fails (no binary, no DB), proceed without the archive layer and tell the user the archive is unreachable. Don't abort.
-
Spawn a single fan-out subagent via the Agent tool. Use the general-purpose subagent. Brief it like this — adapt the query interpolation:
Cross-source synthesis task for the user. Query: "<the user query>".
Search three sources in parallel and synthesise. CITE everything.
1. The hypha archive via the local daemon at http://localhost:3456:
- GET /v1/health — confirm reachable. If not, skip this source.
- GET /v1/search?q=<query>&limit=20 — top archive hits with provenance.
- For each unique person.name in hits, also call
GET /v1/relationship/<name> — the dossier may surface cross-source
connections the keyword search missed.
2. The live filesystem via ripgrep:
- rg --max-count 5 -n -t md -t txt -t ts -t js -t py "<query>" ~/Projects
- rg --max-count 5 -n "<query>" ~/.claude/skills 2>/dev/null
- Capture the top 20 most-relevant hits.
3. The user's auto-memory:
- rg "<query>" ~/.claude/projects/*/memory/ 2>/dev/null
- List MEMORY.md entries that mention the topic.
Synthesise into a brief with these sections:
- **TL;DR** — three sentences answering the query directly.
- **Top hits** — 5–10 lines, each with source (archive/repo/memory),
short excerpt, and a navigable citation (file:line OR hypha node id).
- **Cross-source connections** — anything that appears in two or more
of the sources. This is the high-signal output. Examples:
"Bob mentioned in archive emails AND in repo `~/Projects/foo/notes.md`."
- **Timeline** — if the query has a temporal arc, show 4–6 dated events.
- **Gaps / follow-ups** — what looks missing. Three bullets max.
Length: under 800 words. Concrete. Cite every claim. No hedging.
-
Render the subagent's response verbatim to the user, with no further
commentary. The subagent's brief IS the answer.
-
If the user asks a follow-up like "tell me more about hit #3" or
"expand the timeline", route to the appropriate sub-tool (/about
for a person, direct hypha search for a topic, Read for a file).
Do not re-spawn the full fan-out unless the user changes the query.
Why this is the right shape
Single-shot keyword search is what hypha search already does. This skill earns its name by doing what hypha search cannot:
- Joining results across the archive AND the live filesystem AND auto-memory
- Letting a subagent reason over the joined results before responding
- Citing every claim so the user can verify
Ultrathink-quality output requires reasoning, not just retrieval. The Agent tool call is the thing that delivers that.
Common failure modes
- Daemon not running: the ensure-daemon script auto-starts it. If that fails (no binary, no DB), proceed without archive — say so explicitly.
- Empty results: the synthesis brief should still produce a clean "no hits found across N sources for
<query>" rather than fabricating coverage.
- Sensitive content in archive: if the query surfaces credentials, financial data, or anything DLP-flagged, redact in the brief and link to the source instead. Do not echo verbatim.