Every claim has a source. Official docs. Lived practice. One recommendation.
Sourced turns a framework, SDK, UI, or API decision into parallel research. One subagent per angle. Each angle must ground in Context7 (current official docs) and forums (what people actually hit — Stack Overflow, Discourse, Apple Developer Forums). Then it reconciles conflicts and recommends one path: a minimal option beside a complete one, scored for earned simplicity — not a laundry list of maybe-answers.
- Frame the decision in one sentence; pick 3–10 angles.
- Fan out one general-purpose subagent per angle (parallel, single turn).
- Reconcile docs ↔ forums conflicts, unverified claims, stale advice.
- Recommend one path — minimal beside complete — with the trade-off explicit.
flowchart TD
Q["/sourced + decision"] --> F["Frame decision<br/>pick 3–10 angles"]
F --> A1["Angle 1"]
F --> A2["Angle 2"]
F --> An["Angle N"]
A1 --> C1["Context7"]
A1 --> R1["Forums"]
A2 --> C2["Context7"]
A2 --> R2["Forums"]
An --> Cn["Context7"]
An --> Rn["Forums"]
C1 --> Rec
R1 --> Rec
C2 --> Rec
R2 --> Rec
Cn --> Rec
Rn --> Rec
Rec["Reconcile<br/>docs ↔ forums · conflicts · stale advice"]
Rec --> Reco["Recommend one path<br/>minimal beside complete"]
- Choosing a framework/API path (SwiftUI Observation vs Combine, Next.js cache strategy, etc.)
- “Docs say X but it crashes on iOS N” — surface both poles, pick the survivable correct path
- Migration / upgrade traps before bumping an SDK
- HIG / first-party vs third-party library decisions
- Performance or accessibility footguns before shipping a pattern
- Not for: trivial mechanical edits, ambient Context7-only lookups, or anything that isn’t a real decision
/plugin marketplace add nsd97/sourced
/plugin install sourced@sourced
Invoke: /sourced:sourced (or /sourced once discovered).
/add-plugin https://github.com/nsd97/sourced
If /add-plugin pins a stale commit or skills show as 0, use a local symlink:
git clone https://github.com/nsd97/sourced.git ~/src/sourced
mkdir -p ~/.cursor/plugins/local
ln -sfn ~/src/sourced ~/.cursor/plugins/local/sourcedThen enable the local plugin in Cursor and invoke /sourced.
codex plugin marketplace add nsd97/sourcedOpen /plugins, install Sourced, then invoke with @sourced. Skills-only —
no /hooks trust step.
Native skill discovery beats a git plugin for a single skill:
git clone https://github.com/nsd97/sourced.git ~/src/sourced
mkdir -p ~/.config/opencode/skills
cp -R ~/src/sourced/skills/sourced ~/.config/opencode/skills/sourcedOr point skills.paths at the clone’s skills/ directory. See
docs/README.opencode.md and
.opencode/INSTALL.md.
npx skills add nsd97/sourcedThis plugin does not install MCP servers. Wire them in your harness yourself. Apple Developer Forums use WebSearch/WebFetch (no MCP).
Tools: resolve-library-id, query-docs.
| Resource | URL |
|---|---|
| GitHub | https://github.com/upstash/context7 |
| All clients (Cursor, Claude Code, Codex, OpenCode, …) | https://context7.com/docs/resources/all-clients |
| Cursor guide | https://context7.com/docs/clients/cursor |
| Claude Code guide | https://context7.com/docs/clients/claude-code |
| Cursor one-click (remote) | https://cursor.com/en/install-mcp?name=context7&config=eyJ1cmwiOiJodHRwczovL21jcC5jb250ZXh0Ny5jb20vbWNwIn0%3D |
| API key (higher limits) | https://context7.com/dashboard |
| Codex MCP docs | https://developers.openai.com/codex/mcp |
| OpenCode MCP docs | https://opencode.ai/docs/mcp-servers |
Quick installs:
# Claude Code (remote)
claude mcp add --scope user --transport http context7 https://mcp.context7.com/mcp --header "CONTEXT7_API_KEY: YOUR_API_KEY"
# Claude Code (local)
claude mcp add --scope user context7 -- npx -y @upstash/context7-mcp --api-key YOUR_API_KEY
# Codex (CLI)
codex mcp add context7 -- npx -y @upstash/context7-mcp --api-key YOUR_API_KEY
# Codex (plugin + OAuth)
codex plugin marketplace add upstash/context7
codex plugin add context7@context7-marketplaceCursor: Settings → Tools & MCP → New MCP Server, or paste into ~/.cursor/mcp.json
(see the Cursor guide above). Also: Cursor MCP help.
Verify: ask the agent to resolve-library-id for a library you know; it should
return a Context7 id, not invent from memory.
Forums like forums.swift.org via the official Discourse MCP.
| Resource | URL |
|---|---|
| GitHub | https://github.com/discourse/discourse-mcp |
| npm | https://www.npmjs.com/package/@discourse/mcp |
# Claude Code
claude mcp add discourse -- npx -y @discourse/mcp@latestCursor / Codex — add to MCP config:
{
"mcpServers": {
"discourse": {
"command": "npx",
"args": ["-y", "@discourse/mcp@latest"]
}
}
}Codex TOML (~/.codex/config.toml):
[mcp_servers.discourse]
command = "npx"
args = ["-y", "@discourse/mcp@latest"]Verify: discourse_select_site with https://forums.swift.org, then a search.
Prefer the official remote MCP when connected; on error/timeout Sourced falls back
to site:stackoverflow.com WebSearch/WebFetch.
| Resource | URL |
|---|---|
| Official setup | https://api.stackexchange.com/docs/mcp-server |
| Remote endpoint | https://mcp.stackoverflow.com |
# Claude Code (HTTP)
claude mcp add --transport http stack-overflow https://mcp.stackoverflow.comCursor / other clients (official remote via mcp-remote):
{
"mcpServers": {
"stack-overflow": {
"command": "npx",
"args": ["mcp-remote", "mcp.stackoverflow.com"]
}
}
}Authorize with your Stack Exchange account when prompted (beta; rate-limited).
Verify: call search_by_tags or search_by_error on a known error. If the
server is missing, Sourced still works via web fallback.
Say /sourced (or the harness form above) plus the decision:
/sourcedShould we use SwiftUI Observation or an@Observable+@MainActorview model for this list screen that also needs Combine publishers from an existing client?
If the plugin installs but shows 0 skills, or you get Unknown skill:
- Claude: re-run
/plugin install sourced@sourced(known cache bugs whenrepositorywas an object — this repo uses a string URL). - Cursor: prefer the
~/.cursor/plugins/local/sourcedsymlink above. - Confirm
skills/sourced/SKILL.mdexists in the checkout.
If you still have a local ~/.claude/skills/docs-forums-research, leave it or
remove it after installing this plugin. The published skill is sourced —
invoke /sourced, not /docs-forums-research.
MIT — see LICENSE.