Major architectural refactoring: - Add OpenAgent as universal primary agent for questions, tasks, and workflows - Implement session-based context management with manifest tracking - Reorganize subagents into logical categories (code/core/utils) - Add dynamic context discovery and loading system - Introduce cleanup script for stale sessions - Update registry with new categorization (essential/standard/extended/specialized/meta) - Rename 'core' profile to 'essential' and add 'business' profile - Add comprehensive documentation with visual diagrams - Update installation script with new profiles Breaking changes: - Subagent paths changed from analysis/core to code/core/utils - Profile 'core' renamed to 'essential' (backward compatible) New features: - Session isolation for concurrent agent instances (.tmp/sessions/) - Automatic stale session cleanup (>24 hours) - Manifest-based context indexing and discovery - Business profile for content-focused workflows - OpenAgent with plan-approve-execute-validate-summarize workflow Components: 32 total (3 agents, 13 subagents, 8 commands, 2 tools, 2 plugins, 2 contexts, 2 config) Documentation: - docs/agents/openagent.md - Comprehensive guide with Mermaid diagrams - docs/guides/building-with-opencode.md - Power user formula - scripts/README.md - Script documentation - .opencode/context/core/context-management.md - Session management strategy
256 lines
7.1 KiB
Markdown
256 lines
7.1 KiB
Markdown
# Context Management Strategy
|
|
|
|
## Session-Based Isolation
|
|
|
|
### Purpose
|
|
Prevent concurrent agent instances from interfering with each other by using isolated session folders.
|
|
|
|
### Session Structure
|
|
```
|
|
.tmp/sessions/{session-id}/{task-category}/{task-name}-context.md
|
|
```
|
|
|
|
### Session ID Format
|
|
`{timestamp}-{random-4-chars}`
|
|
|
|
Example: `20250118-143022-a4f2`
|
|
|
|
### Session Manifest
|
|
Each session has a manifest file tracking all context files:
|
|
|
|
**Location**: `.tmp/sessions/{session-id}/.manifest.json`
|
|
|
|
**Structure**:
|
|
```json
|
|
{
|
|
"session_id": "20250118-143022-a4f2",
|
|
"created_at": "2025-01-18T14:30:22Z",
|
|
"last_activity": "2025-01-18T14:35:10Z",
|
|
"context_files": {
|
|
"features/user-auth-context.md": {
|
|
"created": "2025-01-18T14:30:22Z",
|
|
"for": "@subagents/core/task-manager",
|
|
"keywords": ["user-auth", "authentication", "features"]
|
|
},
|
|
"tasks/user-auth-tasks.md": {
|
|
"created": "2025-01-18T14:32:15Z",
|
|
"for": "@subagents/core/task-manager",
|
|
"keywords": ["user-auth", "tasks", "breakdown"]
|
|
},
|
|
"documentation/api-docs-context.md": {
|
|
"created": "2025-01-18T14:35:10Z",
|
|
"for": "@subagents/core/documentation",
|
|
"keywords": ["api", "documentation"]
|
|
}
|
|
},
|
|
"context_index": {
|
|
"user-auth": [
|
|
"features/user-auth-context.md",
|
|
"tasks/user-auth-tasks.md"
|
|
],
|
|
"api": [
|
|
"documentation/api-docs-context.md"
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
## Temporary Context Files
|
|
|
|
### When to Create
|
|
Only create context files when **ALL** of these apply:
|
|
- Delegating to a subagent
|
|
- Context description is verbose (>2 sentences) OR
|
|
- Risk of misinterpretation without detailed context
|
|
|
|
### File Structure
|
|
```
|
|
.tmp/sessions/{session-id}/{task-category}/{task-name}-context.md
|
|
```
|
|
|
|
### Categories
|
|
- `features/` - Feature development context
|
|
- `documentation/` - Documentation tasks
|
|
- `code/` - Code-related tasks
|
|
- `refactoring/` - Refactoring tasks
|
|
- `testing/` - Testing tasks
|
|
- `tasks/` - Task breakdowns created by task-manager
|
|
- `general/` - General tasks that don't fit other categories
|
|
|
|
### Examples
|
|
```
|
|
.tmp/sessions/20250118-143022-a4f2/features/user-auth-context.md
|
|
.tmp/sessions/20250118-143022-a4f2/documentation/api-docs-context.md
|
|
.tmp/sessions/20250118-150000-b7k9/code/database-refactor-context.md
|
|
.tmp/sessions/20250118-151500-c3x8/testing/integration-tests-context.md
|
|
```
|
|
|
|
### File Contents
|
|
```markdown
|
|
# Context: {Task Name}
|
|
Session: {session-id}
|
|
|
|
## Request Summary
|
|
[Brief description of what needs to be done]
|
|
|
|
## Background
|
|
[Relevant context and information]
|
|
|
|
## Expected Output
|
|
[What the subagent should produce]
|
|
|
|
## Constraints
|
|
[Any limitations or requirements]
|
|
```
|
|
|
|
## Cleanup Strategy
|
|
|
|
### During Session
|
|
1. Remove individual context files after task completion
|
|
2. Update manifest to remove file entry
|
|
3. Update `last_activity` timestamp
|
|
|
|
### End of Session
|
|
1. Remove entire session folder: `.tmp/sessions/{session-id}/`
|
|
2. Only delete files tracked in current session's manifest
|
|
|
|
### Stale Session Cleanup
|
|
- Automatically clean sessions older than 24 hours with no activity
|
|
- Check `last_activity` timestamp in manifest
|
|
- Safe to run periodically without affecting active sessions
|
|
|
|
### Manual Cleanup
|
|
Users can safely delete:
|
|
- Entire `.tmp/` folder anytime
|
|
- Individual session folders
|
|
- Stale sessions (check `last_activity` timestamp)
|
|
|
|
## Concurrent Safety
|
|
|
|
### Isolation Guarantees
|
|
✅ Each agent instance has unique session ID
|
|
✅ Context files are isolated per session
|
|
✅ Manifest tracks only files created by this session
|
|
✅ Cleanup only affects current session's files
|
|
✅ No risk of deleting another instance's context
|
|
|
|
### Best Practices
|
|
1. **Generate session ID early** - At first context file creation
|
|
2. **Track all files** - Add every context file to manifest
|
|
3. **Update activity** - Touch `last_activity` on each operation
|
|
4. **Clean up promptly** - Remove files after task completion
|
|
5. **Only clean own files** - Never delete files outside current session
|
|
|
|
## Dynamic Context Loading
|
|
|
|
### Purpose
|
|
Allow subagents to discover and load relevant context files created earlier in the session.
|
|
|
|
### How It Works
|
|
|
|
**1. Context File Creation**
|
|
When creating a context file, add metadata to manifest:
|
|
```json
|
|
"context_files": {
|
|
"features/user-auth-context.md": {
|
|
"created": "2025-01-18T14:30:22Z",
|
|
"for": "@subagents/core/task-manager",
|
|
"keywords": ["user-auth", "authentication", "features"]
|
|
}
|
|
}
|
|
```
|
|
|
|
**2. Context Indexing**
|
|
Manifest maintains keyword index for fast lookup:
|
|
```json
|
|
"context_index": {
|
|
"user-auth": [
|
|
"features/user-auth-context.md",
|
|
"tasks/user-auth-tasks.md"
|
|
]
|
|
}
|
|
```
|
|
|
|
**3. Context Discovery**
|
|
When delegating to subagent:
|
|
1. Search manifest for related context files (by keyword/category)
|
|
2. Pass relevant context file paths to subagent
|
|
3. Subagent reads context files as needed
|
|
|
|
**4. Delegation Pattern**
|
|
```
|
|
Delegating to @subagents/code/coder-agent:
|
|
"Implement user authentication login component.
|
|
|
|
Related context available at:
|
|
- .tmp/sessions/20250118-143022-a4f2/features/user-auth-context.md
|
|
- .tmp/sessions/20250118-143022-a4f2/tasks/user-auth-tasks.md
|
|
|
|
Read these files for full context on requirements and task breakdown."
|
|
```
|
|
|
|
### Example Workflow
|
|
|
|
```
|
|
1. User: "Build user authentication system"
|
|
→ OpenAgent creates: features/user-auth-context.md
|
|
→ Delegates to @task-manager
|
|
|
|
2. Task-manager creates: tasks/user-auth-tasks.md
|
|
→ Both files tracked in manifest with keyword "user-auth"
|
|
|
|
3. User: "Implement the login component"
|
|
→ OpenAgent searches manifest for "user-auth" context
|
|
→ Finds both context files
|
|
→ Delegates to @coder-agent with references to both files
|
|
→ Coder-agent reads files to understand full context
|
|
```
|
|
|
|
### Benefits
|
|
- **No context loss**: Information persists across subagent calls
|
|
- **Automatic discovery**: Related context found by keywords
|
|
- **Flexible**: Subagents read only what they need
|
|
- **Traceable**: Manifest shows all context relationships
|
|
|
|
---
|
|
|
|
## Why This Approach?
|
|
|
|
### Session Isolation
|
|
- **Concurrent safety**: Multiple agents can run simultaneously
|
|
- **No conflicts**: Each session has its own namespace
|
|
- **Easy cleanup**: Delete entire session folder when done
|
|
- **Traceable**: Manifest shows what belongs to each session
|
|
|
|
### Dynamic Context
|
|
- **Discoverable**: Context files indexed by keywords
|
|
- **Reusable**: Later subagents can access earlier context
|
|
- **Flexible**: Load only relevant context
|
|
- **Persistent**: Context survives across subagent calls
|
|
|
|
### Why `.tmp/sessions/`?
|
|
- Standard `.tmp/` convention (commonly ignored)
|
|
- `sessions/` subfolder makes purpose clear
|
|
- Session ID provides unique namespace
|
|
- Easy to identify and clean up stale sessions
|
|
- Hidden folder (starts with `.`)
|
|
|
|
## Example Workflow
|
|
|
|
```bash
|
|
# Agent Instance 1 starts
|
|
Session ID: 20250118-143022-a4f2
|
|
Creates: .tmp/sessions/20250118-143022-a4f2/features/user-auth-context.md
|
|
|
|
# Agent Instance 2 starts (concurrent)
|
|
Session ID: 20250118-143030-b7k9
|
|
Creates: .tmp/sessions/20250118-143030-b7k9/features/payment-context.md
|
|
|
|
# Both agents work independently without conflicts
|
|
|
|
# Agent Instance 1 completes
|
|
Deletes: .tmp/sessions/20250118-143022-a4f2/ (entire folder)
|
|
|
|
# Agent Instance 2 continues unaffected
|
|
Still has: .tmp/sessions/20250118-143030-b7k9/
|
|
```
|