This guide explains how to integrate external context (fetched via ExternalScout) into the main agent workflow so that subagents can access it without re-fetching.
Key Principle: Main agents fetch external docs once → persist to disk → reference in session → subagents read (no re-fetching)
Use ExternalScout to fetch external context when:
Don't use when:
.opencode/context/ (use ContextScout instead)Main Agent (OpenAgent, etc.)
↓
1. Analyze user request
↓
2. Identify external libraries mentioned
↓
3. Call ContextScout for internal context
↓
4. Call ExternalScout for external docs
- ExternalScout fetches from Context7 API
- ExternalScout persists to .tmp/external-context/
- ExternalScout returns file paths
↓
5. Capture returned file paths
↓
6. Do NOT write anything to disk yet
Main Agent
↓
1. Show user lightweight summary:
- What will be done
- Which external libraries involved
- Which context files will be used
↓
2. Include discovered external context files in proposal
↓
3. Wait for user approval
User
↓
Approves plan (or redirects)
Main Agent
↓
1. Create .tmp/sessions/{session-id}/context.md
↓
2. Populate sections:
- ## Context Files (from ContextScout)
- ## Reference Files (project files)
- ## External Context Fetched (from ExternalScout)
- ## Components
- ## Constraints
- ## Exit Criteria
↓
3. CRITICAL: Add "## External Context Fetched" section with:
- File paths returned by ExternalScout
- Brief description of each file
- Note that files are read-only
Main Agent
↓
1. Call TaskManager (or other subagent)
↓
2. Pass session path in prompt:
"Load context from .tmp/sessions/{session-id}/context.md"
↓
3. TaskManager reads session context
↓
4. TaskManager extracts external context files
↓
5. TaskManager includes in subtask JSONs
TaskManager / CoderAgent / TestEngineer
↓
1. Read session context file
↓
2. Extract "## External Context Fetched" section
↓
3. Read referenced files from .tmp/external-context/
↓
4. Use external docs to inform implementation
↓
5. NO RE-FETCHING ✅
In your main agent (before approval):
// Detect external libraries from user request
const externalLibraries = ["drizzle-orm", "better-auth", "next.js"];
// Call ExternalScout
task(
subagent_type="ExternalScout",
description="Fetch external documentation",
prompt="Fetch documentation for these libraries:
- Drizzle ORM: modular schema organization
- Better Auth: Next.js integration
- Next.js: App Router setup
Persist fetched docs to .tmp/external-context/
Return file paths for each fetched document"
)
// Capture returned file paths
// Example return:
// - .tmp/external-context/drizzle-orm/modular-schemas.md
// - .tmp/external-context/better-auth/nextjs-integration.md
// - .tmp/external-context/next.js/app-router-setup.md
## Implementation Plan
**Task**: Set up Drizzle + Better Auth in Next.js
**External Libraries Involved**:
- Drizzle ORM (database)
- Better Auth (authentication)
- Next.js (framework)
**External Context Discovered**:
- `.tmp/external-context/drizzle-orm/modular-schemas.md`
- `.tmp/external-context/better-auth/nextjs-integration.md`
- `.tmp/external-context/next.js/app-router-setup.md`
**Approach**:
1. Set up Drizzle schema with modular organization
2. Configure Better Auth with Drizzle adapter
3. Integrate with Next.js App Router
**Approval needed before proceeding.**
After approval, create .tmp/sessions/{session-id}/context.md:
# Task Context: Drizzle + Better Auth Integration
Session ID: 2026-01-28-drizzle-auth
Created: 2026-01-28T14:30:22Z
Status: in_progress
## Current Request
Set up Drizzle ORM with Better Auth in a Next.js application
## Context Files (Standards to Follow)
- .opencode/context/core/standards/code-quality.md
- .opencode/context/core/standards/test-coverage.md
## Reference Files (Source Material)
- package.json
- src/db/schema.ts (existing)
- src/auth/config.ts (existing)
## External Context Fetched
These are live documentation files fetched from external libraries. Subagents should reference these instead of re-fetching.
### Drizzle ORM
- `.tmp/external-context/drizzle-orm/modular-schemas.md` — Schema organization patterns for modular architecture
- `.tmp/external-context/drizzle-orm/postgresql-setup.md` — PostgreSQL configuration and setup
### Better Auth
- `.tmp/external-context/better-auth/nextjs-integration.md` — Integration guide for Next.js App Router
- `.tmp/external-context/better-auth/drizzle-adapter.md` — Drizzle adapter setup and configuration
### Next.js
- `.tmp/external-context/next.js/app-router-setup.md` — App Router basics and configuration
- `.tmp/external-context/next.js/server-actions.md` — Server Actions patterns for mutations
**Important**: These files are read-only and cached for reference. Do not modify them.
## Components
- Drizzle schema setup with modular organization
- Better Auth configuration with Drizzle adapter
- Next.js App Router integration
## Constraints
- TypeScript strict mode
- Must support PostgreSQL
- Backward compatible with existing auth system
## Exit Criteria
- [ ] Drizzle schema set up with modular organization
- [ ] Better Auth configured with Drizzle adapter
- [ ] Next.js App Router integration complete
- [ ] All tests passing
- [ ] Documentation updated
## Progress
- [ ] Session initialized
- [ ] Tasks created
- [ ] Implementation complete
- [ ] Tests passing
- [ ] Handoff complete
task(
subagent_type="TaskManager",
description="Break down Drizzle + Better Auth integration",
prompt="Load context from .tmp/sessions/2026-01-28-drizzle-auth/context.md
Read the context file for full requirements, standards, and external documentation.
Break down this feature into atomic subtasks:
1. Drizzle schema setup with modular organization
2. Better Auth configuration with Drizzle adapter
3. Next.js App Router integration
4. Test suite
For each subtask, include:
- context_files: Standards from context.md
- reference_files: Project files to understand
- external_context: External docs to reference
Create subtask files in tasks/subtasks/drizzle-auth-integration/"
)
TaskManager creates subtask JSONs like:
{
"id": "01-drizzle-schema-setup",
"title": "Set up Drizzle schema with modular organization",
"description": "Create modular Drizzle schema following best practices",
"context_files": [
".opencode/context/core/standards/code-quality.md",
".opencode/context/core/standards/test-coverage.md"
],
"reference_files": [
"package.json",
"src/db/schema.ts"
],
"external_context": [
".tmp/external-context/drizzle-orm/modular-schemas.md",
".tmp/external-context/drizzle-orm/postgresql-setup.md"
],
"instructions": "Set up Drizzle schema following modular patterns from external context. Reference .tmp/external-context/drizzle-orm/modular-schemas.md for best practices.",
"acceptance_criteria": [
"Schema organized into separate files by domain",
"PostgreSQL configuration matches external docs",
"TypeScript types properly exported",
"Tests cover schema setup"
]
}
CoderAgent reads subtask JSON and:
✅ DO:
❌ DON'T:
✅ DO:
.tmp/external-context/.manifest.json after each fetch❌ DON'T:
.tmp/external-context/✅ DO:
❌ DON'T:
✅ DO:
❌ DON'T:
"Set up Drizzle ORM with Better Auth in Next.js, using modular schema organization"
.tmp/external-context/{package}/{topic}.md.manifest.jsonProblem: Subagent can't find .tmp/external-context/{package}/{topic}.md
Solution:
.manifest.json to see what's cachedProblem: External docs are outdated
Solution:
scripts/external-context/manage-external-context.sh delete-package {package}Problem: .manifest.json doesn't match actual files
Solution:
scripts/external-context/manage-external-context.sh regenerate-manifest.opencode/agent/subagents/core/externalscout.md.opencode/context/core/workflows/external-context-management.md.opencode/context/core/workflows/task-delegation.mdscripts/external-context/manage-external-context.sh