Skip to content

Repository files navigation

Sourced

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.

How it works

  1. Frame the decision in one sentence; pick 3–10 angles.
  2. Fan out one general-purpose subagent per angle (parallel, single turn).
  3. Reconcile docs ↔ forums conflicts, unverified claims, stale advice.
  4. 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"]
Loading

Use cases

  • 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

Install

Claude Code

/plugin marketplace add nsd97/sourced
/plugin install sourced@sourced

Invoke: /sourced:sourced (or /sourced once discovered).

Cursor

/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/sourced

Then enable the local plugin in Cursor and invoke /sourced.

Codex

codex plugin marketplace add nsd97/sourced

Open /plugins, install Sourced, then invoke with @sourced. Skills-only — no /hooks trust step.

OpenCode

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/sourced

Or point skills.paths at the clone’s skills/ directory. See docs/README.opencode.md and .opencode/INSTALL.md.

skills.sh (bonus)

npx skills add nsd97/sourced

Prerequisites

This plugin does not install MCP servers. Wire them in your harness yourself. Apple Developer Forums use WebSearch/WebFetch (no MCP).

1. Context7 — required

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-marketplace

Cursor: 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.

2. Discourse — recommended

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@latest

Cursor / 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.

3. Stack Overflow — optional (web fallback exists)

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.com

Cursor / 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.

How to invoke

Say /sourced (or the harness form above) plus the decision:

/sourced Should we use SwiftUI Observation or an @Observable + @MainActor view model for this list screen that also needs Combine publishers from an existing client?

Verify

If the plugin installs but shows 0 skills, or you get Unknown skill:

  • Claude: re-run /plugin install sourced@sourced (known cache bugs when repository was an object — this repo uses a string URL).
  • Cursor: prefer the ~/.cursor/plugins/local/sourced symlink above.
  • Confirm skills/sourced/SKILL.md exists in the checkout.

Migrating from docs-forums-research

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.

License

MIT — see LICENSE.

About

Every claim has a source. Dual-grounded docs + forums research skill for Claude Code, Cursor, Codex, and OpenCode.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors