Context is your project's coding standards and patterns stored as markdown files. It tells agents:
- How you write code (naming conventions, architecture)
- What libraries you use (React, Next.js, Tailwind, etc.)
- Your security requirements
- Your design system
- Your project-specific patterns
Think of it as a style guide for AI agents.
You: "Create a React component"
Agent: Creates component in its own style
Result: Doesn't match your project
You: "Create a React component"
Agent: Loads your React pattern from context
Agent: Creates component matching your style
Result: Perfectly matches your project
Your Request
↓
Agent receives request
↓
ContextScout discovers relevant context files
↓
Agent loads context files
↓
Agent follows patterns from context
↓
Code matches your standards automatically
Step 1: You ask for a component
"Create a user profile component"
Step 2: ContextScout discovers
core/standards/code-quality.md(modular patterns)ui/web/react-patterns.md(React conventions)project-intelligence/technical-domain.md(YOUR patterns)
Step 3: Agent loads context
# From project-intelligence/technical-domain.md
## React Component Pattern
All components should:
- Use TypeScript with strict mode
- Export named component
- Include JSDoc comments
- Use React.FC type
export const UserProfile: React.FC<Props> = ({ user }) => {
return <div>{user.name}</div>;
};Step 4: Agent creates component
/**
* UserProfile - Displays user information
*/
export const UserProfile: React.FC<UserProfileProps> = ({ user }) => {
return (
<div className="user-profile">
<h2>{user.name}</h2>
<p>{user.email}</p>
</div>
);
};Result: Component matches your patterns automatically!
.opencode/context/
├── core/ # Universal standards
│ ├── standards/
│ │ ├── code-quality.md # Modular, functional patterns
│ │ ├── security-patterns.md # Security best practices
│ │ ├── test-coverage.md # Testing standards
│ │ └── documentation.md # Documentation patterns
│ ├── workflows/
│ │ ├── design-iteration.md # 4-stage UI design
│ │ ├── task-delegation.md # Task delegation patterns
│ │ ├── external-libraries.md # Library integration
│ │ └── code-review.md # Code review process
│ └── task-management/
│ └── standards/
│ └── task-schema.md # Task JSON schema
│
├── ui/ # Design & UX
│ └── web/
│ ├── ui-styling-standards.md # Tailwind + Flowbite
│ ├── animation-patterns.md # Micro-interactions
│ ├── react-patterns.md # React conventions
│ └── design-systems.md # Design system principles
│
├── development/ # Language-specific
│ ├── backend-navigation.md
│ ├── ui-navigation.md
│ └── [language-specific patterns]
│
└── project-intelligence/ # YOUR custom patterns
├── technical-domain.md # Tech stack & code patterns
├── business-domain.md # Business context
└── navigation.md # Quick overview
Teaches agents:
- Modular design principles
- Functional programming patterns
- Pure functions and immutability
- Composition over inheritance
- Naming conventions
Example:
// ✅ Pure function (from context)
const add = (a, b) => a + b;
// ❌ Impure (agents avoid this)
let total = 0;
const addToTotal = (value) => { total += value; };Teaches agents:
- Input validation
- Authentication checks
- Authorization patterns
- Secure error handling
- Logging best practices
Teaches agents:
- 4-stage UI design workflow
- Layout → Theme → Animation → Implementation
- Approval gates at each stage
- Design versioning strategy
Teaches agents:
- How to integrate external libraries
- Common patterns for popular libraries
- Configuration best practices
- Dependency management
Teaches agents:
- Tailwind CSS conventions
- Flowbite component usage
- Color palette standards
- Responsive design patterns
Teaches agents:
- Modern React hooks
- Component composition
- State management patterns
- Performance optimization
# Recommended: Use the interactive wizard
/add-context
# Or edit directly (local project install):
nano .opencode/context/project-intelligence/technical-domain.md
# Global install:
# nano ~/.config/opencode/context/project-intelligence/technical-domain.md# Your Project Patterns
## API Endpoint Pattern
All API endpoints should follow this pattern:
```typescript
export async function POST(request: Request) {
try {
// 1. Parse and validate input
const body = await request.json();
if (!body.email) {
return Response.json({ error: 'Email required' }, { status: 400 });
}
// 2. Check authentication
const user = await auth.verify(request);
if (!user) {
return Response.json({ error: 'Unauthorized' }, { status: 401 });
}
// 3. Process request
const result = await processRequest(body);
// 4. Return response
return Response.json({ success: true, data: result });
} catch (error) {
console.error('POST error:', error);
return Response.json({ error: error.message }, { status: 500 });
}
}All React components should:
- Use TypeScript with strict mode
- Export named component
- Include JSDoc comments
- Use React.FC type
- Include prop validation
interface UserCardProps {
userId: string;
onSelect?: (id: string) => void;
}
/**
* UserCard - Displays user information in a card
* @param props - Component props
*/
export const UserCard: React.FC<UserCardProps> = ({
userId,
onSelect
}) => {
const [user, setUser] = React.useState(null);
React.useEffect(() => {
fetchUser(userId).then(setUser);
}, [userId]);
return (
<div className="user-card">
<h3>{user?.name}</h3>
<button onClick={() => onSelect?.(userId)}>
Select
</button>
</div>
);
};All database queries should:
- Use parameterized queries
- Include error handling
- Log important operations
- Return typed results
export async function getUserById(id: string) {
try {
const user = await db
.select()
.from(users)
.where(eq(users.id, id))
.limit(1);
if (!user.length) {
throw new Error('User not found');
}
return user[0];
} catch (error) {
console.error('getUserById error:', error);
throw error;
}
}All endpoints must:
- Validate user authentication
- Check user permissions
- Sanitize and validate inputs
- Use parameterized queries
- Implement rate limiting
- Log security events
- Handle errors securely
- Use HTTPS only
- Files: lowercase-with-dashes.ts
- Functions: verbPhrases (getUser, validateEmail)
- Constants: UPPER_CASE
- Types: PascalCase
- Variables: camelCase
- Predicates: isValid, hasPermission, canAccess
src/
├── components/ # React components
│ ├── common/ # Reusable components
│ ├── features/ # Feature-specific components
│ └── layouts/ # Layout components
├── lib/ # Utilities and helpers
├── api/ # API routes
├── types/ # TypeScript types
├── styles/ # Global styles
└── hooks/ # Custom React hooks
### Step 3: Agents Use Your Patterns
When you ask an agent to create code, it will:
1. Load your project context
2. Follow your patterns
3. Create code matching your style
---
## Real-World Examples
### Example 1: Adding a Component Pattern
**Your project context**:
```markdown
## Button Component Pattern
All buttons should:
- Use Tailwind classes
- Include loading state
- Support disabled state
- Include accessibility attributes
export const Button: React.FC<ButtonProps> = ({
children,
isLoading,
disabled,
...props
}) => (
<button
disabled={disabled || isLoading}
className="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 disabled:opacity-50"
aria-busy={isLoading}
{...props}
>
{isLoading ? 'Loading...' : children}
</button>
);
You ask:
"Create a submit button for the login form"
Agent creates:
export const SubmitButton: React.FC<SubmitButtonProps> = ({
isLoading,
disabled,
}) => (
<Button
type="submit"
isLoading={isLoading}
disabled={disabled}
>
Sign In
</Button>
);✅ Automatically follows your button pattern!
Your project context:
## API Response Pattern
All API responses should:
- Return { success, data, error }
- Include proper status codes
- Log all requests
- Validate input
export async function POST(request: Request) {
try {
const body = await request.json();
// Validate
if (!body.email) {
return Response.json(
{ success: false, error: 'Email required' },
{ status: 400 }
);
}
// Process
const result = await process(body);
// Return
return Response.json({ success: true, data: result });
} catch (error) {
return Response.json(
{ success: false, error: error.message },
{ status: 500 }
);
}
}You ask:
"Create an API endpoint to create a new user"
Agent creates:
export async function POST(request: Request) {
try {
const body = await request.json();
// Validate
if (!body.email || !body.password) {
return Response.json(
{ success: false, error: 'Email and password required' },
{ status: 400 }
);
}
// Process
const user = await createUser(body);
// Return
return Response.json({ success: true, data: user });
} catch (error) {
return Response.json(
{ success: false, error: error.message },
{ status: 500 }
);
}
}✅ Automatically follows your API pattern!
Your project context:
## Security Requirements
All endpoints must:
- Verify user authentication
- Check user permissions
- Validate all inputs
- Use parameterized queries
- Log security events
Example:
```typescript
export async function POST(request: Request) {
// 1. Verify authentication
const user = await auth.verify(request);
if (!user) {
return Response.json({ error: 'Unauthorized' }, { status: 401 });
}
// 2. Check permissions
if (!user.isAdmin) {
return Response.json({ error: 'Forbidden' }, { status: 403 });
}
// 3. Validate input
const body = await request.json();
if (!validateInput(body)) {
return Response.json({ error: 'Invalid input' }, { status: 400 });
}
// 4. Log security event
console.log(`Admin action by ${user.id}: create-user`);
// 5. Process
const result = await process(body);
return Response.json({ success: true, data: result });
}
**You ask**:
"Create an admin endpoint to delete a user"
**Agent creates**:
```typescript
export async function DELETE(request: Request) {
// 1. Verify authentication
const user = await auth.verify(request);
if (!user) {
return Response.json({ error: 'Unauthorized' }, { status: 401 });
}
// 2. Check permissions
if (!user.isAdmin) {
return Response.json({ error: 'Forbidden' }, { status: 403 });
}
// 3. Validate input
const { userId } = await request.json();
if (!userId) {
return Response.json({ error: 'User ID required' }, { status: 400 });
}
// 4. Log security event
console.log(`Admin action by ${user.id}: delete-user ${userId}`);
// 5. Process
await deleteUser(userId);
return Response.json({ success: true });
}
✅ Automatically includes all security checks!
# Your Project Patterns
## Components
[Component patterns]
## API Endpoints
[API patterns]
## Database
[Database patterns]
## Security
[Security requirements]
## Naming
[Naming conventions]
## Folder Structure
[Folder structure]## Good ✅
export const Button: React.FC<Props> = ({ ... }) => {
// Real example from your project
};
## Bad ❌
export const Button = (props) => {
// Generic example
};## Good ✅
All API endpoints must:
- Validate input with Zod
- Return { success, data, error }
- Log with console.error for errors
- Use 400 for validation, 401 for auth, 500 for server
## Bad ❌
All API endpoints should be goodWhen you change patterns:
- Run
/add-context --updateor editproject-intelligence/technical-domain.mddirectly - Agents will use new patterns immediately
- No need to restart anything
Solution:
- Check that
project-intelligence/technical-domain.mdexists (run/add-contextif not) - Verify the pattern is clearly written
- Include a real example
- Ask agent to "follow project patterns"
Solution:
- Run
/add-context --updateor editproject-intelligence/technical-domain.md - Restart the agent
- Ask agent to "load latest context"
Solution:
- Break into smaller patterns
- Include step-by-step example
- Add comments explaining why
Solution:
- Check if pattern is in
project-intelligence/technical-domain.md - Verify pattern is specific enough
- Ask agent to "review against project patterns"
- Provide feedback to refine pattern
Agents load context in this order:
-
Core Standards (universal patterns)
core/standards/code-quality.mdcore/standards/security-patterns.md
-
Workflows (how to do things)
core/workflows/design-iteration.mdcore/workflows/external-libraries.md
-
Domain-Specific (language/framework)
development/[language]/patterns.mdui/web/react-patterns.md
-
Project-Specific (YOUR patterns) ← Most important!
project-intelligence/technical-domain.md
Project context overrides everything else!
Context is your secret weapon for AI-assisted development:
✅ Automatic pattern following - No manual configuration ✅ Consistent code - All code matches your style ✅ Team alignment - Everyone follows same patterns ✅ Easy updates - Change patterns once, agents use everywhere ✅ Living documentation - Patterns stay in sync with code
Get started:
- Run
/add-contextto create project intelligence interactively - Or edit
.opencode/context/project-intelligence/technical-domain.mddirectly - Ask agents to create code
- Watch them follow your patterns automatically!
- Run
/add-contextto create project intelligence interactively - Review your current coding patterns
- Include real examples from your project
- Test by asking agents to create code
- Refine patterns with
/add-context --update
Your agents will become better and better as your context improves!