Purpose: Fetch current documentation for external packages before implementation
Last Updated: 2026-01-28
Golden Rule: NEVER rely on training data for external libraries → ALWAYS fetch current docs
Process: Detect package → Check install scripts → Use ExternalScout → Implement
When to use ExternalScout (MANDATORY):
Training data is OUTDATED for external libraries. ALWAYS fetch current docs using ExternalScout before implementation.
Why:
Example:
Training data (2023): Next.js 13 uses pages/ directory
Current (2025): Next.js 15 uses app/ directory (App Router)
Training data = broken code ❌
ExternalScout = working code ✅
Triggers: User mentions library | package.json deps | import statements | build errors | first-time setup
Action: Identify which external packages involved
Check for:
# Look for install scripts
ls scripts/install/ scripts/setup/ bin/install* setup.sh install.sh
# Check package-specific requirements
grep -r "postinstall\|preinstall" package.json
Read scripts if found:
Why: Scripts may set up databases, generate files, configure services in specific order
Basic Pattern:
task(
subagent_type="ExternalScout",
description="Fetch [Library] docs for [topic]",
prompt="Fetch current documentation for [Library]: [specific question]
Focus on:
- Installation and setup steps
- [Specific feature/API needed]
- [Integration requirements]
- Required environment variables
- Database/service setup
Context: [What you're building]"
)
Real Examples:
Drizzle ORM Setup:
task(
subagent_type="ExternalScout",
description="Fetch Drizzle PostgreSQL setup",
prompt="Fetch Drizzle ORM docs: PostgreSQL setup w/ modular schemas
Focus on: Installation | DB connection | Schema patterns | Migrations | TypeScript config
Context: Next.js commerce site w/ PostgreSQL"
)
Next.js App Router:
task(
subagent_type="ExternalScout",
description="Fetch Next.js App Router docs",
prompt="Fetch Next.js docs: App Router w/ Server Actions
Focus on: Installation | Directory structure | Server Actions | Data fetching | Route handlers
Context: Commerce site w/ order processing"
)
Better Auth Integration:
task(
subagent_type="ExternalScout",
description="Fetch Better Auth + Next.js integration",
prompt="Fetch Better Auth docs: Next.js App Router integration w/ Drizzle
Focus on: Installation | App Router setup | Drizzle adapter | Session mgmt | Route protection
Context: Adding auth to Next.js commerce w/ Drizzle ORM"
)
ExternalScout Returns:
Check: Version compatibility | Peer dependencies | Breaking changes | Platform requirements
If version mismatch: Note in plan → Request approval for upgrade → Fetch docs for specific version
Apply docs:
Don't:
Verify: Package installs | Imports work | API calls match docs | Error handling | Integration w/ other packages
User Request: "Build Next.js commerce w/ Drizzle"
↓
┌──────────────────────────────────────────────────┐
│ STEP 1: ContextScout │
│ → Search internal context (.opencode/context/) │
│ → Find project standards, patterns, workflows │
└──────────────────────────────────────────────────┘
↓
Internal context found?
↓
┌───────────┴───────────┐
YES NO
│ │
↓ ↓
Use internal Is it external library?
context ↓
┌────────┴────────┐
YES NO
│ │
↓ ↓
┌─────────────────┐ Report: No context
│ STEP 2: │ available
│ ExternalScout │
│ (MANDATORY) │
└─────────────────┘
↓
Fetch: Next.js docs
Drizzle docs
Integration patterns
↓
┌─────────────────────────┐
│ STEP 3: Combine │
│ Internal: Standards │
│ External: Library docs │
│ → Implement w/ both │
└─────────────────────────┘
When to Use Which:
| Scenario | ContextScout | ExternalScout | Both |
|---|---|---|---|
| Project coding standards | ✅ | ❌ | ❌ |
| External library setup | ❌ | ✅ MANDATORY | ❌ |
| Project-specific patterns | ✅ | ❌ | ❌ |
| External API usage | ❌ | ✅ MANDATORY | ❌ |
| Feature w/ external lib | ✅ standards | ✅ lib docs | ✅ |
| Package installation | ❌ | ✅ MANDATORY | ❌ |
| Security patterns | ✅ | ❌ | ❌ |
| External lib integration | ✅ project | ✅ lib docs | ✅ |
Key Principle: ContextScout + ExternalScout = Complete Context
Example: Next.js app w/ Drizzle + Better Auth
Process:
ls scripts/install/ scripts/setup/Example: Error: Cannot find module 'drizzle-orm/pg-core'
Process:
Example: Setting up TanStack Query in Next.js
Process:
ls scripts/install/ | grep -r "tanstack\|react-query" scripts/Example: Next.js 14 → 15
Process:
Task: "Add authentication w/ Better Auth to Next.js commerce site"
// 1. ContextScout: Project standards
task(
subagent_type="ContextScout",
description="Find auth and security standards",
prompt="Find context files: Auth patterns | Security standards | Code quality | Project structure"
)
// Returns: security-patterns.md, code-quality.md
// 2. ExternalScout: Better Auth docs (MANDATORY)
task(
subagent_type="ExternalScout",
description="Fetch Better Auth + Next.js docs",
prompt="Fetch Better Auth docs: Next.js App Router integration
Focus on: Installation | App Router setup | Session mgmt | Route protection | Drizzle adapter
Context: Adding auth to Next.js commerce w/ Drizzle ORM"
)
// Returns: Current installation | Integration patterns | Drizzle config | Working examples
// 3. Combine and implement
// - Better Auth patterns (from ExternalScout)
// - Security standards (from ContextScout)
// - Code quality standards (from ContextScout)
// = Secure, well-structured auth implementation ✅
| Error Type | Process |
|---|---|
| Package Installation | ExternalScout: installation docs → Verify package name/version → Check peer deps → Propose fix w/ current steps |
| Import/Module | ExternalScout: import patterns → Check current API exports → Verify import paths → Propose fix w/ current imports |
| API/Configuration | ExternalScout: API docs → Check current signatures → Verify config format → Propose fix w/ current patterns |
| Build Errors | Identify package → ExternalScout: relevant docs → Check known issues/breaking changes → Propose fix from current docs |
Do ✅:
.opencode/context/development/frameworks/ if frequently usedDon't ❌:
ALWAYS use ExternalScout when working with external packages.
Triggers: User mentions library | import/require statements | package.json deps | build errors | first-time setup | version upgrades
Rule: If it's not in .opencode/context/, use ExternalScout.
DON'T rely on training data - it's outdated.
Example: You think "I know Next.js, I'll use pages/" → Reality: Next.js 15 uses app/ → Result: Broken code ❌
Always fetch current docs, even if you "know" the library.
External libraries: npm/pip/gem/cargo packages | Third-party frameworks | ORMs/databases | Auth libraries | UI libraries
NOT external: Your project's code | Project utilities | Internal modules
Check: Is it in package.json dependencies? → External → Use ExternalScout
YES! Use both for most features.
// 1. ContextScout: Project standards
task(subagent_type="ContextScout", ...)
// Returns: code-quality.md, security-patterns.md
// 2. ExternalScout: Library docs
task(subagent_type="ExternalScout", ...)
// Returns: Current Next.js docs, Drizzle docs
// 3. Combine: Implement using both
ExternalScout has two sources:
If library not in Context7: Auto-fallback to official docs via webfetch
You don't need to worry - ExternalScout handles it.
Template:
task(
subagent_type="ExternalScout",
description="Fetch [Library] docs for [specific topic]",
prompt="Fetch current documentation for [Library]: [specific question]
Focus on:
- [What you need - be specific]
- [Related features/APIs]
- [Integration requirements]
Context: [What you're building]"
)
Good prompts: ✅ Specific | ✅ Focused (3-5 things) | ✅ Contextual | ✅ Current
Bad prompts: ❌ Vague | ❌ Too broad | ❌ No context
Normal - errors happen. Process:
ExternalScout again w/ specific error:
task(
subagent_type="ExternalScout",
description="Fetch docs for error resolution",
prompt="Fetch [Library] docs: [error message]
Error: [paste actual error]
Focus on: Common causes | Solutions | Correct API usage"
)
Check install scripts (maybe setup incomplete)
Verify versions (package.json vs docs)
NO - ExternalScout is read-only, no approval required.
Approval required: ❌ Write code | ❌ Run commands | ❌ Install packages
Approval NOT required: ✅ ContextScout | ✅ ExternalScout | ✅ Read files | ✅ Search code
| Aspect | ContextScout | ExternalScout |
|---|---|---|
| Searches | Internal project files | External documentation |
| Location | .opencode/context/ |
Internet (Context7, official docs) |
| Returns | Project standards, patterns | Library APIs, installation |
| Use for | "How we do things here" | "How this library works" |
| Tools | glob, read, grep | webfetch, Context7 API |
| Speed | Fast (local) | Slower (network) |
| Currency | Static (project docs) | Live (current docs) |
Use both together for best results.
Before implementing w/ external libraries:
All checked? → You're doing it right! ✅
See: .opencode/skill/context7/library-registry.md
Categories: Database/ORM (Drizzle, Prisma) | Auth (Better Auth, NextAuth, Clerk) | Frontend (Next.js, React, TanStack) | Infrastructure (Cloudflare, AWS, Vercel) | UI (Shadcn/ui, Radix, Tailwind) | State (Zustand, Jotai) | Validation (Zod, React Hook Form) | Testing (Vitest, Playwright)
Not listed? ExternalScout can still fetch from official docs via webfetch
.opencode/agent/subagents/core/externalscout.md.opencode/skill/context7/library-registry.md.opencode/agent/subagents/core/contextscout.md.opencode/context/core/standards/code-quality.md