Snapshot of the installed OAC framework (/app/.opencode) including Claus's custom agents:
- agent/OpenArchitect.md (Aiden, the architect)
- agent/subagents/openagent.md (GMS sub-agent builder)
- agent/core/openagent.md, agent/core/opencoder.md (customized)
- agent/subagents/{code,core,development,system-builder}/*
- command/, context/, skills/, tool/, README.md, env.example
Excluded runtime artifacts: node_modules/, bin/opencode (184MB binary), lockfiles.
13 KiB
External Context Integration Guide
Overview
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)
When to Use External Context
Use ExternalScout to fetch external context when:
- User asks about external libraries (Drizzle, Better Auth, Next.js, etc.)
- Task involves integration between multiple external libraries
- Setup or configuration of external tools is needed
- API patterns or best practices from external libraries are relevant
Don't use when:
- Question is about internal project code
- Answer is in
.opencode/context/(use ContextScout instead) - User is asking for general programming concepts
Integration Workflow
Stage 1: Analyze & Discover (Before Approval)
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
Stage 2: Propose Plan (Before Approval)
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
Stage 3: Approve (User Gate)
User
↓
Approves plan (or redirects)
Stage 4: Init Session (After Approval)
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
Stage 5: Delegate with Context Path
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
Stage 6: Subagents Read External Context
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 ✅
Implementation Details
Step 1: Call ExternalScout
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
Step 2: Propose Plan with External Context
## 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.**
Step 3: Create Session with External Context
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
Step 4: Delegate to TaskManager
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/"
)
Step 5: TaskManager Creates Subtasks with External Context
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"
]
}
Step 6: CoderAgent Implements Using External Context
CoderAgent reads subtask JSON and:
- Loads context_files (standards)
- Reads reference_files (existing code)
- Reads external_context files (external docs)
- Implements following all standards and external docs
- Returns completed subtask
Best Practices
For Main Agents
✅ DO:
- Call ExternalScout early in planning phase
- Capture returned file paths
- Add to session context under "## External Context Fetched"
- Pass session path to subagents
- Include external context in proposal to user
❌ DON'T:
- Forget to call ExternalScout when external libraries involved
- Skip adding external context to session
- Re-fetch external docs (trust ExternalScout persistence)
- Modify external context files
For ExternalScout
✅ DO:
- Always persist fetched docs to
.tmp/external-context/ - Update
.manifest.jsonafter each fetch - Include metadata header in every file
- Filter aggressively to relevant sections
- Cite sources and include official docs links
❌ DON'T:
- Forget to persist files
- Skip manifest updates
- Return entire documentation
- Fabricate documentation content
- Write outside
.tmp/external-context/
For TaskManager
✅ DO:
- Extract external_context from session context
- Include in subtask JSONs
- Pass to downstream agents
- Document which external docs informed decisions
❌ DON'T:
- Forget to include external_context in subtasks
- Mix external_context with context_files
- Assume subagents will re-fetch
For Subagents (CoderAgent, TestEngineer, etc.)
✅ DO:
- Read external_context files from subtask JSON
- Use external docs to inform implementation
- Reference external docs in comments
- Follow patterns from external docs
❌ DON'T:
- Re-fetch external documentation
- Ignore external context files
- Modify external context files
- Assume external docs are optional
Example: Complete Flow
User Request
"Set up Drizzle ORM with Better Auth in Next.js, using modular schema organization"
Main Agent Flow
- Analyze: Detect Drizzle, Better Auth, Next.js
- Discover: Call ContextScout + ExternalScout
- Propose: Show plan with external context files
- Approve: User approves
- Init Session: Create context.md with external context section
- Delegate: Call TaskManager with session path
- Validate: Check tests pass
- Complete: Update docs, cleanup
ExternalScout Flow
- Detect: Drizzle, Better Auth, Next.js
- Fetch: Get docs from Context7 API
- Filter: Extract relevant sections
- Persist: Write to
.tmp/external-context/{package}/{topic}.md - Update: Add to
.manifest.json - Return: File paths to main agent
TaskManager Flow
- Read: Session context.md
- Extract: External context files
- Create: Subtasks with external_context field
- Delegate: Pass to CoderAgent
CoderAgent Flow
- Read: Subtask JSON
- Load: context_files (standards)
- Reference: reference_files (existing code)
- Read: external_context files (external docs)
- Implement: Following all standards and external docs
- Complete: Return implemented subtask
Troubleshooting
External Context Files Not Found
Problem: Subagent can't find .tmp/external-context/{package}/{topic}.md
Solution:
- Check ExternalScout ran successfully
- Verify file path in session context matches actual location
- Check
.manifest.jsonto see what's cached - If missing, re-run ExternalScout
Stale External Context
Problem: External docs are outdated
Solution:
- Delete stale files:
scripts/external-context/manage-external-context.sh delete-package {package} - Re-run ExternalScout to fetch fresh docs
- Update session context with new file paths
Manifest Out of Sync
Problem: .manifest.json doesn't match actual files
Solution:
- Regenerate manifest:
scripts/external-context/manage-external-context.sh regenerate-manifest - Verify all files have metadata headers
References
- ExternalScout:
.opencode/agent/subagents/core/externalscout.md - External Context Management:
.opencode/context/core/workflows/external-context-management.md - Task Delegation:
.opencode/context/core/workflows/task-delegation-basics.md - Management Script:
scripts/external-context/manage-external-context.sh