research
Deep technical research via the research-gateway MCP — agentic Tavily + Context7 + page-fetch with cross-verification, returns a cited markdown report
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Deep technical research via the research-gateway MCP — agentic Tavily + Context7 + page-fetch with cross-verification, returns a cited markdown report
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Read and write the second brain — a git-backed Obsidian vault at ~/SourceRoot/brain (PARA structure + a top-level wiki/ knowledge tree). Use whenever the user mentions "brain", "second brain", "knowledge base", "note", "remember", "look up", "find note", "capture", "wiki", or "okf". Also use for any request to save, retrieve, or organize personal knowledge that belongs in the brain rather than in a repo-specific doc.
Write, draft, and polish prose through a human-owned 7-step pipeline. Use whenever the user says "distill", "write article", "draft", "summarize into", "create content", "synthesize", or "publish". Also use for any task where the output is a piece of long-form writing — the pipeline keeps prose quality out of coding sessions.
RETIRED — manage the (now decommissioned) per-machine mlx-audio TTS/STT stack; TTS/STT moved to the cloud audio-gateway (VPS)
Operate the Mac mini remote dev host — connecting from the MacBook over mosh or herdr --remote, running and reattaching many Claude Code agents, herdr workspaces/panes and its socket API, claude --bg durable daemons, the Uptime Kuma readiness heartbeat, and the failure modes specific to a headless always-on Mac. Use when the user mentions herdr, mosh, the mini, "remote dev", "dev host", detaching or reattaching agents, "did my agent survive", sessions dying on lid-close, or asks how to reach a dev server running on the mini.
Manage the personal image stack — public CDN uploads/transform URLs and the private image-share layer. Use whenever an image needs a URL (public or private) for an article, blog post, vault note, README, OpenGraph tag, or a one-off share; or when the user says "upload this image", "share this image", "private image", "publish image", "host this screenshot", "get me a CDN link", "resize this", mentions "image-share", or asks where an image lives.
Bidirectionally sync ALL git repos across two machines — this MacBook and the always-on Mac mini — over SSH, using GitHub/GitLab as the transport. Commits and pushes uncommitted work on both sides, then rebases/fast-forwards each so they converge, with per-repo subagents resolving rebases and merge conflicts. This is a MULTI-repo, TWO-machine operation — distinct from /commit, /ship, or /git-cleanup, which act on a single repo. Use whenever the user wants to sync their machines/repos, "catch up" the laptop to the Mac mini or push laptop work back, is about to travel or just got back, has uncommitted work scattered across many repos, or wants to reconcile branches that diverged between the two machines. Trigger even on a bare "sync", "sync my machines", or "get my repos up to date".
| name | research |
| description | Deep technical research via the research-gateway MCP — agentic Tavily + Context7 + page-fetch with cross-verification, returns a cited markdown report |
The standalone research-gateway service (Elysia + Bun on the VPS, Tailscale-only) runs the agentic loop on IU models, off Max. It uses an async job contract (mirrors sideclaw's check/review): submit → wait → read. No single call blocks for the whole run, so long/deep research can't trip the MCP HTTP transport's ~60s first-byte timeout.
Submit. Call mcp__research-gateway__research with query set to the user's question, optionally depth (quick | standard | deep, default standard). It returns IMMEDIATELY with { jobId, status } — not the report. Note the jobId; do not treat this response as the answer.
Wait. Call mcp__research-gateway__job_wait({ jobId }). It blocks up to ~50s (with progress heartbeats) and returns the job state. If stillRunning is true, call job_wait again with the same jobId — loop until stillRunning is false. (job_status({ jobId }) is a non-blocking peek if you want to do other work between checks.)
Read the result. When status is done, the result field (also structuredContent) is a ResearchReport:
report — narrative, cited answer in markdowncitations — [{ claim, url, confidence }], each key claim tied to a source, carrying the researching worker's high | medium | low confidence in that specific claimsources — deduplicated list of all URLs consultedunverified — [{ topic, url, reason }], things the run could NOT confirm against a source (unreachable, paywalled, thin). Empty on a clean run.Read confidence and unverified before passing a claim on. A citation only means a worker tied that claim to that URL — it is not proof the page supports it. Treat low confidence and anything in unverified as a lead to check, not a fact; for a crisp value (version number, EOL date, API signature) where the report names a primary source, opening that source directly is a cheap confirmation.
On done, the text content already inlines the report plus a Citations and Sources section, so text-only clients still get the full picture. When status is error, error holds the failure message.
Depth: quick = fast, snippet-level; standard (default) balances quality and speed; deep = most thorough but slowest. Submit is instant at every depth — only the number of job_wait loops grows with depth, so deep is now safe to use. If the gateway is at capacity, research returns an error (isError) — retry shortly.