✨ feat: introduce OpenAgent universal agent with session management

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
This commit is contained in:
darrenhinde 2025-11-18 18:45:42 +00:00
parent dfea8199a9
commit 5f2cec1404
28 changed files with 2313 additions and 213 deletions

1
.gitignore vendored
View file

@ -51,6 +51,7 @@ coverage/
# Temporary folders # Temporary folders
tmp/ tmp/
temp/ temp/
.tmp/
# Optional npm cache directory # Optional npm cache directory
.npm .npm

View file

@ -0,0 +1,250 @@
---
description: "Universal agent for answering queries, executing tasks, and coordinating workflows across any domain"
mode: primary
model: claude-4-sonnet
temperature: 0.2
tools:
read: true
write: true
edit: true
grep: true
glob: true
bash: true
task: true
patch: true
permissions:
bash:
"rm -rf *": "ask"
"rm -rf /*": "deny"
"sudo *": "deny"
"> /dev/*": "deny"
edit:
"**/*.env*": "deny"
"**/*.key": "deny"
"**/*.secret": "deny"
"node_modules/**": "deny"
".git/**": "deny"
---
<context>
<system>Universal agent - flexible, adaptable, works across any domain</system>
<workflow>Plan-approve-execute-validate-summarize with intelligent subagent delegation</workflow>
</context>
<role>OpenAgent - primary universal agent for questions, tasks, and workflow coordination</role>
<instructions>
<execution_paths>
<path type="conversational" trigger="simple_question">
Answer directly and naturally - no approval needed
</path>
<path type="task" trigger="any_execution_or_task">
Plan → **ALWAYS request approval** → Execute → Validate → Summary → Confirm completion → Clean up Temporary Files when approved.
</path>
</execution_paths>
<workflow>
<stage id="1" name="Analyze">
Assess request type → Choose path (conversational | task)
</stage>
<stage id="2" name="Approve" when="any_task_or_execution" required="true">
Present plan → **ALWAYS request approval** → Wait for confirmation
Format: "## Proposed Plan\n[steps]\n\n**Approval needed before proceeding.**"
Note: Skip only for pure informational questions
</stage>
<stage id="3" name="Execute" when="approval_received">
<direct>Execute steps sequentially</direct>
<delegation when="subagent_needed">
<context_file_when>Verbose (>2 sentences) OR risk of misinterpretation</context_file_when>
<session_init when="first_context_file">
- ID: {timestamp}-{random-4-chars}
- Path: .tmp/sessions/{session-id}/
- Manifest: .tmp/sessions/{session-id}/.manifest.json
</session_init>
<context_pattern>.tmp/sessions/{session-id}/{category}/{task-name}-context.md</context_pattern>
<categories>features | documentation | code | refactoring | testing | general | tasks</categories>
<manifest_structure>
{
"session_id": "...",
"created_at": "...",
"last_activity": "...",
"context_files": {
"features/user-auth-context.md": {"created": "...", "for": "@task-manager", "keywords": ["user-auth", "authentication"]},
"tasks/user-auth-tasks.md": {"created": "...", "for": "@task-manager", "keywords": ["user-auth", "tasks"]}
},
"context_index": {
"user-auth": ["features/user-auth-context.md", "tasks/user-auth-tasks.md"]
}
}
</manifest_structure>
<dynamic_context_loading>
<when_delegating>
1. Check manifest for related context files (by keyword/category)
2. Pass relevant context file paths to subagent
3. Subagent reads context files as needed
</when_delegating>
<context_reference_format>
"Related context: .tmp/sessions/{session-id}/features/user-auth-context.md"
</context_reference_format>
</dynamic_context_loading>
</delegation>
<delegation_criteria>
<route to="@subagents/core/task-manager" category="features">
<when>
- Feature spans 3+ files/modules OR
- Estimated effort >60 minutes OR
- Needs breakdown into subtasks OR
- Complex dependencies between components OR
- User explicitly requests task breakdown
</when>
<task_output>.tmp/sessions/{session-id}/tasks/{feature-name}-tasks.md</task_output>
<context_inheritance>Load related context files from manifest before delegating</context_inheritance>
<example>User: "Build user authentication system"</example>
</route>
<route to="@subagents/core/documentation" category="documentation">
<when>
- Creating comprehensive docs (API docs, guides, tutorials) OR
- Multi-page documentation OR
- Requires codebase analysis/research OR
- User explicitly requests documentation agent
</when>
<example>User: "Create API documentation for all endpoints"</example>
</route>
<route to="@subagents/utils/image-specialist" category="images" when="available">
<when>
- Image generation, editing, or analysis requests AND
- Image specialist is available in current profile
</when>
<example>User: "Generate a logo" or "Edit this image" or "Create a diagram"</example>
</route>
<route to="@subagents/code/reviewer" category="review" when="available">
<when>
- Code review or security analysis requests AND
- Reviewer is available in current profile
</when>
<example>User: "Review this code for security issues"</example>
</route>
<route to="@subagents/code/codebase-pattern-analyst" category="patterns" when="available">
<when>
- Pattern discovery or "how do we do X" questions AND
- Pattern analyst is available in current profile
</when>
<example>User: "How do we handle pagination in this codebase?"</example>
</route>
<route to="@subagents/code/*" category="code" when="available">
<when>
- Code-specific specialized task (testing, build, implementation) AND
- Code subagents are available in current profile
</when>
<example>User: "Write tests for this function"</example>
</route>
<direct_execution>
<when>
- Single file operation OR
- Simple, straightforward task (<30 min) OR
- Quick updates/edits OR
- User explicitly asks openagent to handle it
</when>
<example>User: "Create a README" or "Update this function"</example>
</direct_execution>
</delegation_criteria>
</stage>
<stage id="4" name="Validate">
<validate>Check quality, verify completion, test if applicable</validate>
<test_failure_protocol when="tests_fail_or_issues_found">
<step1>STOP execution immediately</step1>
<step2>Report all issues/failures clearly</step2>
<step3>Propose fix plan with specific steps</step3>
<step4>**ALWAYS request approval before fixing**</step4>
<step5>Only proceed with fixes after user approval</step5>
<step6>After fixes applied, return to validation (re-run tests)</step6>
<note>NEVER auto-fix issues without explicit user approval</note>
</test_failure_protocol>
<when_validation_passes>
Ask user: "Would you like me to run any additional checks or review the work before I summarize?"
<options>
- Run specific tests
- Check specific files
- Review changes
- Proceed to summary
</options>
</when_validation_passes>
</stage>
<stage id="5" name="Summarize" when="validation_complete_and_user_satisfied">
<summarize>
<conversational when="simple_question">Natural response</conversational>
<brief when="simple_task">Brief: "Created X" or "Updated Y"</brief>
<formal when="complex_task">## Summary\n[accomplished]\n**Changes:**\n- [list]\n**Next Steps:** [if applicable]</formal>
</summarize>
</stage>
<stage id="6" name="ConfirmCompletion" when="task_executed">
Ask user: "Is this complete and satisfactory?"
<if_session_created>
Also ask: "Should I clean up temporary session files at .tmp/sessions/{session-id}/?"
</if_session_created>
<cleanup_on_confirmation>
- Remove context files
- Update manifest
- Delete session folder
</cleanup_on_confirmation>
</stage>
</workflow>
<session_management>
<lazy_init>Only create session when first context file needed</lazy_init>
<isolation>Each session has unique ID - prevents concurrent agent conflicts</isolation>
<last_activity>Update timestamp after each context file creation or delegation</last_activity>
<cleanup_policy>
<manual>Ask user confirmation before cleanup (stage 5)</manual>
<safety>Only delete files tracked in current session's manifest</safety>
<stale>Auto-remove sessions >24 hours old (see scripts/cleanup-stale-sessions.sh)</stale>
</cleanup_policy>
<error_handling>
<subagent_failure>Report error to user, ask if should retry or abort</subagent_failure>
<context_file_error>Fall back to inline context in delegation prompt</context_file_error>
<session_creation_error>Continue without session, warn user</session_creation_error>
</error_handling>
</session_management>
<context_discovery>
<purpose>Dynamically load relevant context files when delegating to subagents</purpose>
<process>
1. When creating context file, add to manifest with metadata (category, keywords, target agent)
2. When delegating to subagent, search manifest for related context files
3. Pass context file paths to subagent in delegation prompt
4. Subagent reads context files as needed
</process>
<manifest_index>
<context_files>Map of file paths to metadata (created, for, keywords)</context_files>
<context_index>Map of keywords to related context file paths</context_index>
</manifest_index>
<delegation_pattern>
When delegating: "Related context available at: .tmp/sessions/{session-id}/{category}/{name}-context.md"
Subagent can read file to get full context
</delegation_pattern>
<example>
Task-manager creates: .tmp/sessions/abc123/tasks/user-auth-tasks.md
Later, coder-agent needs context: reads .tmp/sessions/abc123/features/user-auth-context.md
Both tracked in manifest, discoverable by keyword "user-auth"
</example>
</context_discovery>
</instructions>
<principles>
<lean>Concise responses, no over-explanation</lean>
<adaptive>Conversational for questions, formal for tasks</adaptive>
<lazy>Only create sessions/files when actually needed</lazy>
<safe>ALWAYS request approval before ANY execution, confirm before cleanup</safe>
<report_first>When tests fail or issues found: REPORT → PLAN → REQUEST APPROVAL → FIX (never auto-fix)</report_first>
</principles>

View file

@ -1,7 +1,6 @@
--- ---
description: "Documentation authoring agent" description: "Documentation authoring agent"
mode: subagent mode: subagent
model: google/gemini-2.5-flash
temperature: 0.2 temperature: 0.2
tools: tools:
read: true read: true

View file

@ -1,6 +1,6 @@
--- ---
description: "Breaks down complex features into small, verifiable subtasks" description: "Breaks down complex features into small, verifiable subtasks"
mode: primary mode: subagent
model: claude-4-sonnet model: claude-4-sonnet
temperature: 0.1 temperature: 0.1
tools: tools:

View file

@ -1,6 +1,6 @@
--- ---
description: Specialized agent for image editing and analysis using Gemini AI tools description: "Specialized agent for image editing and analysis using Gemini AI tools"
mode: primary mode: subagent
temperature: 0.3 temperature: 0.3
permission: permission:
edit: deny edit: deny

View file

@ -80,7 +80,7 @@ tools:
<action>Route to domain-analyzer for deep domain analysis and agent identification</action> <action>Route to domain-analyzer for deep domain analysis and agent identification</action>
<prerequisites>Requirements document complete</prerequisites> <prerequisites>Requirements document complete</prerequisites>
<routing> <routing>
<route to="@domain-analyzer"> <route to="@subagents/system-builder/domain-analyzer">
<context_level>Level 1 - Complete Isolation</context_level> <context_level>Level 1 - Complete Isolation</context_level>
<pass_data> <pass_data>
- domain_profile (name, industry, purpose, users) - domain_profile (name, industry, purpose, users)
@ -203,7 +203,7 @@ tools:
<action>Route to agent-generator to create all agent files with XML optimization</action> <action>Route to agent-generator to create all agent files with XML optimization</action>
<prerequisites>Architecture plan complete</prerequisites> <prerequisites>Architecture plan complete</prerequisites>
<routing> <routing>
<route to="@agent-generator"> <route to="@subagents/system-builder/agent-generator">
<context_level>Level 2 - Filtered Context</context_level> <context_level>Level 2 - Filtered Context</context_level>
<pass_data> <pass_data>
- architecture_plan.agents (orchestrator + subagents specs) - architecture_plan.agents (orchestrator + subagents specs)
@ -232,7 +232,7 @@ tools:
<action>Route to context-organizer to create all context files</action> <action>Route to context-organizer to create all context files</action>
<prerequisites>Architecture plan complete</prerequisites> <prerequisites>Architecture plan complete</prerequisites>
<routing> <routing>
<route to="@context-organizer"> <route to="@subagents/system-builder/context-organizer">
<context_level>Level 2 - Filtered Context</context_level> <context_level>Level 2 - Filtered Context</context_level>
<pass_data> <pass_data>
- architecture_plan.context_files (file structure) - architecture_plan.context_files (file structure)
@ -262,7 +262,7 @@ tools:
<action>Route to workflow-designer to create workflow definitions</action> <action>Route to workflow-designer to create workflow definitions</action>
<prerequisites>Architecture plan and context files complete</prerequisites> <prerequisites>Architecture plan and context files complete</prerequisites>
<routing> <routing>
<route to="@workflow-designer"> <route to="@subagents/system-builder/workflow-designer">
<context_level>Level 2 - Filtered Context</context_level> <context_level>Level 2 - Filtered Context</context_level>
<pass_data> <pass_data>
- workflow_definitions (from architecture plan) - workflow_definitions (from architecture plan)
@ -293,7 +293,7 @@ tools:
<action>Route to command-creator to generate custom slash commands</action> <action>Route to command-creator to generate custom slash commands</action>
<prerequisites>Agents and workflows complete</prerequisites> <prerequisites>Agents and workflows complete</prerequisites>
<routing> <routing>
<route to="@command-creator"> <route to="@subagents/system-builder/command-creator">
<context_level>Level 1 - Complete Isolation</context_level> <context_level>Level 1 - Complete Isolation</context_level>
<pass_data> <pass_data>
- command_specifications (from architecture plan) - command_specifications (from architecture plan)
@ -631,19 +631,19 @@ tools:
<context_engineering> <context_engineering>
<determine_context_level> <determine_context_level>
function(task_type, subagent_target) { function(task_type, subagent_target) {
if (subagent_target === "@domain-analyzer") { if (subagent_target === "@subagents/system-builder/domain-analyzer") {
return "Level 1"; // Isolated analysis return "Level 1"; // Isolated analysis
} }
if (subagent_target === "@agent-generator") { if (subagent_target === "@subagents/system-builder/agent-generator") {
return "Level 2"; // Needs architecture + domain analysis return "Level 2"; // Needs architecture + domain analysis
} }
if (subagent_target === "@context-organizer") { if (subagent_target === "@subagents/system-builder/context-organizer") {
return "Level 2"; // Needs domain analysis + use cases return "Level 2"; // Needs domain analysis + use cases
} }
if (subagent_target === "@workflow-designer") { if (subagent_target === "@subagents/system-builder/workflow-designer") {
return "Level 2"; // Needs agents + context files return "Level 2"; // Needs agents + context files
} }
if (subagent_target === "@command-creator") { if (subagent_target === "@subagents/system-builder/command-creator") {
return "Level 1"; // Just needs command specs return "Level 1"; // Just needs command specs
} }
return "Level 1"; // Default to isolation return "Level 1"; // Default to isolation

View file

@ -1,56 +0,0 @@
---
description: "Routes requests to specialized workflows with selective context loading"
mode: primary
model: claude-4-sonnet
temperature: 0.1
tools:
read: true
grep: true
glob: true
task: true
permissions:
bash:
"*": "deny"
edit:
"**/*": "deny"
---
# Workflow Orchestrator
You are the main routing agent that analyzes requests and routes to appropriate specialized workflows with optimal context loading.
**ANALYZE** the request: "$ARGUMENTS"
**DETERMINE** request characteristics:
- Complexity (simple/medium/complex)
- Domain (frontend/backend/review/build/testing)
- Scope (single file/module/feature)
**SELECTIVE CONTEXT LOADING:**
**BASE CONTEXT** (always loaded):
@.opencode/context/core/essential-patterns.md
@.opencode/context/project/project-context.md
**CONDITIONAL CONTEXT** (based on analysis):
!`if echo "$ARGUMENTS" | grep -i -E "(review|security|quality)" > /dev/null; then echo "@.opencode/context/project/project-context.md"; fi`
!`if echo "$ARGUMENTS" | grep -i -E "(build|type|lint|compile)" > /dev/null; then echo "@.opencode/context/project/project-context.md"; fi`
!`if echo "$ARGUMENTS" | grep -i -E "(test|spec|unit|integration)" > /dev/null; then echo "@.opencode/context/project/project-context.md"; fi`
**ROUTE** to appropriate command:
**Simple Tasks (< 30 min):**
- Code review → /review-code
- Build check → /build-check
- Function analysis → /analyze-functions
**Complex Tasks (> 30 min):**
- Multi-step features → /plan-task
- Large refactoring → /plan-task
**Specialized Tasks:**
- Documentation → /optimize (if exists)
- Testing → /test (if exists)
**EXECUTE** routing with optimal context loading now.

View file

@ -747,7 +747,7 @@ description: "Interactive system builder that creates complete context-aware AI
</expected_return> </expected_return>
</route> </route>
<route to="@domain-analyzer" when="domain_unclear_or_complex"> <route to="@subagents/system-builder/domain-analyzer" when="domain_unclear_or_complex">
<context_level>Level 1 - Complete Isolation</context_level> <context_level>Level 1 - Complete Isolation</context_level>
<pass_data> <pass_data>
- user_description (domain description) - user_description (domain description)

View file

@ -0,0 +1,256 @@
# 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/
```

943
docs/agents/openagent.md Normal file
View file

@ -0,0 +1,943 @@
# OpenAgent - Universal Agent Guide
**Your intelligent assistant for questions, tasks, and workflows**
OpenAgent is the primary universal agent in OpenCode that handles everything from simple questions to complex multi-step workflows. This guide explains how it works and how to get the most out of it.
---
## Table of Contents
- [What is OpenAgent?](#what-is-openagent)
- [How It Works](#how-it-works)
- [The Two Paths](#the-two-paths)
- [The 6-Stage Workflow](#the-6-stage-workflow)
- [Session Management](#session-management)
- [Dynamic Context Loading](#dynamic-context-loading)
- [When OpenAgent Delegates](#when-openagent-delegates)
- [Visual Workflows](#visual-workflows)
- [Tips for Your Workflow](#tips-for-your-workflow)
---
## What is OpenAgent?
OpenAgent is your **universal assistant** that:
- ✅ **Answers questions** - Get explanations, comparisons, and guidance
- ✅ **Executes tasks** - Create files, update code, run commands
- ✅ **Coordinates workflows** - Breaks down complex features and delegates to specialists
- ✅ **Preserves context** - Remembers information across multiple steps
- ✅ **Keeps you in control** - Always asks for approval before taking action
Think of OpenAgent as a **smart project manager** who:
- Understands what you need
- Plans how to do it
- Asks for your approval
- Executes the plan
- Confirms everything is done right
---
## How It Works
### The Simple Version
```mermaid
graph LR
A[You Ask] --> B{Question or Task?}
B -->|Question| C[Get Answer]
B -->|Task| D[See Plan]
D --> E[Approve Plan]
E --> F[Watch Execution]
F --> G[Confirm Done]
style A fill:#4A90E2,stroke:#2E5C8A,stroke-width:3px,color:#000
style B fill:#F5A623,stroke:#C17D11,stroke-width:3px,color:#000
style C fill:#7ED321,stroke:#5FA319,stroke-width:3px,color:#000
style D fill:#50E3C2,stroke:#3AB89E,stroke-width:3px,color:#000
style E fill:#F5A623,stroke:#C17D11,stroke-width:3px,color:#000
style F fill:#BD10E0,stroke:#9012B3,stroke-width:3px,color:#fff
style G fill:#7ED321,stroke:#5FA319,stroke-width:3px,color:#000
```
**For Questions**: You ask → You get an answer
**For Tasks**: You ask → See plan → Approve → Watch it happen → Confirm done
---
## The Two Paths
OpenAgent has two different ways of working, depending on what you need:
### Path 1: Conversational (For Questions)
```mermaid
graph TD
A[Ask Question] --> B[OpenAgent Analyzes]
B --> C[Provides Answer]
C --> D[Done!]
style A fill:#4A90E2,stroke:#2E5C8A,stroke-width:3px,color:#000
style B fill:#BD10E0,stroke:#9012B3,stroke-width:3px,color:#fff
style C fill:#7ED321,stroke:#5FA319,stroke-width:3px,color:#000
style D fill:#7ED321,stroke:#5FA319,stroke-width:3px,color:#000
```
**When**: You ask informational questions
**Examples**:
- "What's the difference between REST and GraphQL?"
- "How do I use async/await in JavaScript?"
- "Explain what this code does"
**What Happens**: You get a direct, helpful answer. No approval needed.
---
### Path 2: Task Execution (For Actions)
```mermaid
graph TD
A[Request Task] --> B[OpenAgent Creates Plan]
B --> C[Shows You Plan]
C --> D{Approve?}
D -->|Yes| E[Executes Plan]
D -->|No| F[Revise or Cancel]
E --> G[Validates Results]
G --> H[Shows Summary]
H --> I{Satisfied?}
I -->|Yes| J[Cleanup if Needed]
I -->|No| K[Fix Issues]
J --> L[Done!]
style A fill:#4A90E2,stroke:#2E5C8A,stroke-width:3px,color:#000
style B fill:#BD10E0,stroke:#9012B3,stroke-width:3px,color:#fff
style C fill:#F5A623,stroke:#C17D11,stroke-width:3px,color:#000
style D fill:#F5A623,stroke:#C17D11,stroke-width:3px,color:#000
style E fill:#50E3C2,stroke:#3AB89E,stroke-width:3px,color:#000
style F fill:#D0021B,stroke:#A00116,stroke-width:3px,color:#fff
style G fill:#BD10E0,stroke:#9012B3,stroke-width:3px,color:#fff
style H fill:#50E3C2,stroke:#3AB89E,stroke-width:3px,color:#000
style I fill:#F5A623,stroke:#C17D11,stroke-width:3px,color:#000
style J fill:#50E3C2,stroke:#3AB89E,stroke-width:3px,color:#000
style K fill:#D0021B,stroke:#A00116,stroke-width:3px,color:#fff
style L fill:#7ED321,stroke:#5FA319,stroke-width:3px,color:#000
```
**When**: You want something done
**Examples**:
- "Create a README for this project"
- "Build a user authentication system"
- "Refactor this code to use TypeScript"
**What Happens**:
1. You see a plan
2. You approve it
3. OpenAgent executes it
4. You confirm it's done right
---
## The 6-Stage Workflow
When you request a task, OpenAgent follows a systematic 6-stage workflow:
```mermaid
graph TD
subgraph Stage1["Stage 1: Analyze"]
A1[Receive Request] --> A2[Assess Complexity]
A2 --> A3{Question or Task?}
end
subgraph Stage2["Stage 2: Approve"]
B1[Create Plan] --> B2[Present to User]
B2 --> B3[Wait for Approval]
end
subgraph Stage3["Stage 3: Execute"]
C1[Execute Steps] --> C2{Need Help?}
C2 -->|Yes| C3[Delegate to Specialist]
C2 -->|No| C4[Do It Directly]
C3 --> C5[Integrate Results]
C4 --> C5
end
subgraph Stage4["Stage 4: Validate"]
D1[Check Quality] --> D2[Run Tests if Applicable]
D2 --> D3{Issues Found?}
D3 -->|Yes| D4[Report & Propose Fixes]
D4 --> D5[Wait for Approval]
D5 --> D6[Apply Approved Fixes]
D6 --> D2
D3 -->|No| D7[Ask: Review Work?]
end
subgraph Stage5["Stage 5: Summarize"]
E1[Create Summary] --> E2[Show Changes]
E2 --> E3[Suggest Next Steps]
end
subgraph Stage6["Stage 6: Confirm Completion"]
F1[Ask if Satisfied] --> F2{Session Files?}
F2 -->|Yes| F3[Ask about Cleanup]
F2 -->|No| F4[Done]
F3 --> F5[Cleanup on Approval]
F5 --> F4
end
A3 -->|Question| Answer[Direct Answer]
A3 -->|Task| Stage2
Stage2 --> Stage3
Stage3 --> Stage4
Stage4 --> Stage5
Stage5 --> Stage6
style Stage1 fill:#4A90E2,stroke:#2E5C8A,stroke-width:4px,color:#fff
style Stage2 fill:#F5A623,stroke:#C17D11,stroke-width:4px,color:#000
style Stage3 fill:#50E3C2,stroke:#3AB89E,stroke-width:4px,color:#000
style Stage4 fill:#BD10E0,stroke:#9012B3,stroke-width:4px,color:#fff
style Stage5 fill:#9013B3,stroke:#7011A0,stroke-width:4px,color:#fff
style Stage6 fill:#7ED321,stroke:#5FA319,stroke-width:4px,color:#000
style Answer fill:#7ED321,stroke:#5FA319,stroke-width:3px,color:#000
```
### Stage 1: Analyze
**What happens**: OpenAgent reads your request and decides if it's a question or a task.
**Your experience**: Instant - you don't see this happening.
---
### Stage 2: Approve ⚠️ (MANDATORY for tasks)
**What happens**: OpenAgent creates a plan and shows it to you.
**Your experience**: You see something like:
```
## Proposed Plan
1. Create README.md file
2. Add project overview section
3. Add installation instructions
4. Add usage examples
**Approval needed before proceeding.**
```
**What you do**: Review the plan and say "yes" or "no" (or ask for changes).
---
### Stage 3: Execute
**What happens**: OpenAgent carries out the plan, either directly or by delegating to specialist agents.
**Your experience**: You might see:
- Files being created or modified
- Commands being run
- Progress updates
- Results from specialist agents
**Behind the scenes**: OpenAgent might create temporary files to preserve context between steps.
---
### Stage 4: Validate ⚠️ (MANDATORY for tasks)
**What happens**: OpenAgent checks the quality of the work, runs tests if applicable, and ensures everything works correctly.
**Your experience when validation passes**: You see:
```
✅ Validation complete - all checks passed.
Would you like me to run any additional checks or review the work before I summarize?
- Run specific tests
- Check specific files
- Review changes
- Proceed to summary
```
**What you do**: Choose to review further or proceed to summary.
#### Special Case: Test Failures or Issues Found
If OpenAgent runs tests or validation and finds issues, it follows a **strict protocol**:
**What happens**:
1. ⛔ **STOPS** execution immediately
2. 📋 **REPORTS** all issues/failures clearly
3. 📝 **PROPOSES** a fix plan with specific steps
4. ⚠️ **REQUESTS APPROVAL** before fixing (mandatory)
5. ✅ **PROCEEDS** only after you approve
6. 🔄 **RE-VALIDATES** after fixes are applied
**Your experience**: You see something like:
```
## Validation Results
❌ 3 tests failed:
- test_user_auth: Expected 200, got 401
- test_login: Missing token in response
- test_logout: Session not cleared
## Proposed Fix Plan
1. Update auth middleware to return proper status codes
2. Add token generation to login endpoint
3. Add session cleanup to logout handler
**Approval needed before proceeding with fixes.**
```
**Important**: OpenAgent will **NEVER** auto-fix issues without your explicit approval. After fixes are applied, validation runs again to ensure everything passes.
---
### Stage 5: Summarize
**What happens**: After validation passes and you're satisfied, OpenAgent creates a summary of what was accomplished.
**Your experience**: You see a summary like:
```
## Summary
Created README.md with project documentation.
**Changes Made:**
- Created README.md
- Added project overview
- Added installation guide
- Added usage examples
**Next Steps:** Review the README and update as needed.
```
---
### Stage 6: Confirm Completion ⚠️ (MANDATORY for tasks)
**What happens**: OpenAgent asks if you're satisfied and if temporary files should be cleaned up.
**Your experience**: You see:
```
Is this complete and satisfactory?
Should I clean up temporary session files at .tmp/sessions/20250118-143022-a4f2/?
```
**What you do**: Confirm you're happy with the results and approve cleanup if needed.
---
## Session Management
When OpenAgent works on complex tasks, it creates a **session** to keep track of everything.
### What is a Session?
A session is like a **temporary workspace** where OpenAgent stores:
- Context files (requirements, specifications)
- Task breakdowns
- Notes for specialist agents
- Progress tracking
### Session Structure
```mermaid
graph TD
A[Session Folder] --> B[manifest file]
A --> C[features folder]
A --> D[tasks folder]
A --> E[code folder]
A --> F[documentation folder]
A --> G[Other categories]
B --> B1[Tracks all files]
B --> B2[Keywords for search]
B --> B3[Creation timestamps]
C --> C1[Requirements and specs]
D --> D1[Task breakdowns]
E --> E1[Implementation notes]
F --> F1[Documentation context]
style A fill:#4A90E2,stroke:#2E5C8A,stroke-width:3px,color:#fff
style B fill:#F5A623,stroke:#C17D11,stroke-width:3px,color:#000
style C fill:#50E3C2,stroke:#3AB89E,stroke-width:2px,color:#000
style D fill:#50E3C2,stroke:#3AB89E,stroke-width:2px,color:#000
style E fill:#50E3C2,stroke:#3AB89E,stroke-width:2px,color:#000
style F fill:#50E3C2,stroke:#3AB89E,stroke-width:2px,color:#000
style G fill:#50E3C2,stroke:#3AB89E,stroke-width:2px,color:#000
```
### Session Lifecycle
```mermaid
sequenceDiagram
participant User
participant OpenAgent
participant Session
User->>OpenAgent: Request complex task
OpenAgent->>OpenAgent: Needs context file?
OpenAgent->>Session: Create session (lazy)
Session-->>OpenAgent: Session ID: abc123
OpenAgent->>Session: Create context files
OpenAgent->>OpenAgent: Execute task
OpenAgent->>User: Show results
User->>OpenAgent: Confirm done
OpenAgent->>User: Cleanup session files?
User->>OpenAgent: Yes
OpenAgent->>Session: Delete session
Session-->>OpenAgent: Cleaned up
OpenAgent->>User: All done!
```
### Key Features
**Lazy Initialization**: Sessions are only created when actually needed (not for simple tasks).
**Unique IDs**: Each session gets a unique ID like `20250118-143022-a4f2` to prevent conflicts.
**Safe Cleanup**: OpenAgent only deletes files it created, and only after you approve.
**Concurrent Safety**: Multiple users can work simultaneously without interfering with each other.
---
## Dynamic Context Loading
One of OpenAgent's superpowers is **remembering context** across multiple steps.
### The Problem It Solves
Imagine this scenario:
1. You ask: "Build a user authentication system"
2. OpenAgent creates requirements and task breakdown
3. Later, you ask: "Implement the login component"
**Without context loading**: OpenAgent wouldn't remember the requirements from step 1.
**With context loading**: OpenAgent finds and uses the requirements automatically.
### How It Works
```mermaid
graph TD
subgraph Step1["Step 1: Create Context"]
A1[User requests auth system] --> A2[Create requirements file]
A2 --> A3[Add to manifest with keywords]
A3 --> A4[Keywords added]
end
subgraph Step2["Step 2: Create Tasks"]
B1[Delegate to task-manager] --> B2[Create task breakdown]
B2 --> B3[Add to manifest with keywords]
B3 --> B4[Keywords added]
end
subgraph Step3["Step 3: Use Context"]
C1[User requests login] --> C2[Search manifest]
C2 --> C3[Find related files]
C3 --> C4[Pass paths to specialist]
C4 --> C5[Specialist reads context]
end
Step1 --> Step2
Step2 --> Step3
style Step1 fill:#4A90E2,stroke:#2E5C8A,stroke-width:4px,color:#fff
style Step2 fill:#50E3C2,stroke:#3AB89E,stroke-width:4px,color:#000
style Step3 fill:#7ED321,stroke:#5FA319,stroke-width:4px,color:#000
```
### The Manifest
The manifest is like an **index** that tracks all context files:
```json
{
"session_id": "20250118-143022-a4f2",
"context_files": {
"features/user-auth-context.md": {
"created": "2025-01-18T14:30:22Z",
"for": "@task-manager",
"keywords": ["user-auth", "authentication", "features"]
},
"tasks/user-auth-tasks.md": {
"created": "2025-01-18T14:32:15Z",
"for": "@task-manager",
"keywords": ["user-auth", "tasks", "breakdown"]
}
},
"context_index": {
"user-auth": [
"features/user-auth-context.md",
"tasks/user-auth-tasks.md"
]
}
}
```
**Benefits**:
- ✅ No context loss across steps
- ✅ Automatic discovery by keywords
- ✅ Flexible - only loads what's needed
- ✅ Traceable - you can see what context was used
---
## When OpenAgent Delegates
OpenAgent knows when to do work itself and when to call in specialists.
### Decision Tree
```mermaid
graph TD
A[Receive Task] --> B{What type?}
B -->|Question| C[Answer Directly]
B -->|Task| D{How complex?}
D -->|3+ files OR 60+ min OR complex| E[Delegate to task-manager]
E --> E1[Breaks down into subtasks]
D -->|Comprehensive docs OR multi-page| F[Delegate to documentation]
F --> F1[Creates structured docs]
D -->|Specialized code task| G[Delegate to code specialists]
G --> G1[Testing, review, build]
D -->|Simple OR single file OR under 30 min| H[Execute Directly]
H --> H1[OpenAgent handles it]
style A fill:#4A90E2,stroke:#2E5C8A,stroke-width:3px,color:#fff
style B fill:#F5A623,stroke:#C17D11,stroke-width:3px,color:#000
style C fill:#7ED321,stroke:#5FA319,stroke-width:3px,color:#000
style D fill:#F5A623,stroke:#C17D11,stroke-width:3px,color:#000
style E fill:#BD10E0,stroke:#9012B3,stroke-width:3px,color:#fff
style F fill:#BD10E0,stroke:#9012B3,stroke-width:3px,color:#fff
style G fill:#BD10E0,stroke:#9012B3,stroke-width:3px,color:#fff
style H fill:#7ED321,stroke:#5FA319,stroke-width:3px,color:#000
```
### Delegation Criteria
#### Delegate to @task-manager when:
- ✅ Feature spans **3+ files/modules**
- ✅ Estimated effort **>60 minutes**
- ✅ Needs **breakdown into subtasks**
- ✅ **Complex dependencies** between components
- ✅ User **explicitly requests** task breakdown
**Example**: "Build user authentication system"
---
#### Delegate to @documentation when:
- ✅ Creating **comprehensive docs** (API docs, guides, tutorials)
- ✅ **Multi-page** documentation
- ✅ Requires **codebase analysis/research**
- ✅ User **explicitly requests** documentation agent
**Example**: "Create API documentation for all endpoints"
---
#### Delegate to @code/* when:
- ✅ **Code-specific specialized task** (testing, review, build)
- ✅ Code subagents are **available** in current profile
**Examples**:
- "Review this code for security issues" → @code/reviewer
- "Write tests for this module" → @code/tester
- "Run build and fix errors" → @code/build-agent
---
#### Execute directly when:
- ✅ **Single file** operation
- ✅ **Simple, straightforward** task (<30 min)
- ✅ **Quick updates/edits**
- ✅ User **explicitly asks** openagent to handle it
**Examples**:
- "Create a README"
- "Update this function to use async/await"
- "Add a comment to this code"
---
## Visual Workflows
### Complete Task Workflow
```mermaid
sequenceDiagram
participant User
participant OpenAgent
participant Session
participant Specialist
User->>OpenAgent: "Build authentication system"
Note over OpenAgent: Stage 1: Analyze
OpenAgent->>OpenAgent: Complex task, needs task-manager
Note over OpenAgent: Stage 2: Approve
OpenAgent->>User: ## Proposed Plan<br/>1. Create requirements<br/>2. Delegate to task-manager<br/>3. Review breakdown<br/><br/>**Approval needed**
User->>OpenAgent: Approved
Note over OpenAgent: Stage 3: Execute
OpenAgent->>Session: Create session abc123
OpenAgent->>Session: Create features/user-auth-context.md
Session-->>OpenAgent: File created, added to manifest
OpenAgent->>Specialist: @task-manager: Break down auth system<br/>Context: .tmp/sessions/abc123/features/user-auth-context.md
Specialist->>Session: Create tasks/user-auth-tasks.md
Specialist-->>OpenAgent: Task breakdown complete
OpenAgent->>Session: Update manifest with new file
Note over OpenAgent: Stage 4: Validate
OpenAgent->>OpenAgent: Check quality, run tests
OpenAgent->>User: ✅ Validation complete - all checks passed.<br/><br/>Would you like me to run any additional checks<br/>or review the work before I summarize?
User->>OpenAgent: Proceed to summary
Note over OpenAgent: Stage 5: Summarize
OpenAgent->>User: ## Summary<br/>Created task breakdown with 5 subtasks<br/><br/>**Changes:**<br/>- Created context file<br/>- Created task breakdown
Note over OpenAgent: Stage 6: Confirm
OpenAgent->>User: Is this complete and satisfactory?<br/>Should I clean up session files?
User->>OpenAgent: Yes, looks good. Clean up.
OpenAgent->>Session: Delete session abc123
Session-->>OpenAgent: Cleaned up
OpenAgent->>User: ✓ All done!
```
### Multi-Step with Context Preservation
```mermaid
sequenceDiagram
participant User
participant OpenAgent
participant Manifest
participant Specialist
Note over User,Specialist: Step 1: Initial Request
User->>OpenAgent: "Build auth system"
OpenAgent->>Manifest: Create features/user-auth-context.md<br/>Keywords: [user-auth, authentication]
OpenAgent->>Specialist: @task-manager
Specialist->>Manifest: Create tasks/user-auth-tasks.md<br/>Keywords: [user-auth, tasks]
Note over User,Specialist: Step 2: Later Request
User->>OpenAgent: "Implement login component"
OpenAgent->>Manifest: Search for "login" or "user-auth"
Manifest-->>OpenAgent: Found:<br/>- features/user-auth-context.md<br/>- tasks/user-auth-tasks.md
OpenAgent->>Specialist: @coder-agent: Implement login<br/><br/>Related context:<br/>- features/user-auth-context.md<br/>- tasks/user-auth-tasks.md
Specialist->>Manifest: Read context files
Specialist-->>OpenAgent: Login component implemented with full context
Note over OpenAgent: ✓ No context loss!
```
### Concurrent Sessions
```mermaid
graph TD
subgraph UserA["User A Session"]
A1[Request: Build auth] --> A2[Session abc123]
A2 --> A3[features context]
A2 --> A4[tasks context]
end
subgraph UserB["User B Session"]
B1[Request: Build payment] --> B2[Session def456]
B2 --> B3[features context]
B2 --> B4[tasks context]
end
subgraph Isolation["Session Isolation"]
I1[Unique Session IDs]
I2[Separate Folders]
I3[Independent Manifests]
I4[No Conflicts]
end
A2 -.->|Isolated| Isolation
B2 -.->|Isolated| Isolation
style UserA fill:#4A90E2,stroke:#2E5C8A,stroke-width:4px,color:#fff
style UserB fill:#7ED321,stroke:#5FA319,stroke-width:4px,color:#000
style Isolation fill:#F5A623,stroke:#C17D11,stroke-width:4px,color:#000
```
---
## Tips for Your Workflow
### 1. Be Specific in Your Requests
**Instead of**: "Make this better"
**Try**: "Refactor this function to use async/await and add error handling"
**Why**: Specific requests help OpenAgent create better plans and get approval faster.
---
### 2. Review Plans Carefully
When OpenAgent shows you a plan, take a moment to review it:
- ✅ Does it match what you want?
- ✅ Are there any steps you'd change?
- ✅ Is anything missing?
**Tip**: You can ask OpenAgent to revise the plan before approving.
---
### 3. Use Multi-Step Workflows
For complex projects, break them into steps:
```
Step 1: "Build user authentication system"
→ Review task breakdown
Step 2: "Implement the registration component"
→ OpenAgent uses context from Step 1
Step 3: "Implement the login component"
→ OpenAgent uses context from Steps 1 & 2
```
**Why**: OpenAgent preserves context across steps, making each step easier.
---
### 4. Leverage Specialist Agents
Let OpenAgent delegate to specialists:
- **Complex features** → Let task-manager break them down
- **Documentation** → Let documentation agent create comprehensive docs
- **Code review** → Let reviewer agent check for issues
**Tip**: You can explicitly request a specialist: "Use the documentation agent to create API docs"
---
### 5. Clean Up Sessions Regularly
After completing a workflow, approve session cleanup:
- ✅ Keeps your workspace clean
- ✅ Prevents accumulation of temporary files
- ✅ Frees up disk space
**Tip**: You can also manually clean up stale sessions:
```bash
./scripts/cleanup-stale-sessions.sh
```
---
### 6. Use Keywords Consistently
When working on related tasks, use consistent terminology:
- "user authentication" (not "auth" in one request and "login system" in another)
- "payment processing" (not "payments" and "checkout" interchangeably)
**Why**: Helps OpenAgent find related context files more easily.
---
### 7. Provide Context for Follow-Up Requests
When making follow-up requests, reference previous work:
**Good**: "Implement the login component from the auth system we planned earlier"
**Better**: "Implement the login component using the user-auth requirements"
**Why**: Helps OpenAgent search for the right context files.
---
### 8. Customize Delegation Thresholds
You can adjust when OpenAgent delegates by modifying the criteria in `.opencode/agent/openagent.md`:
**Current defaults**:
- 3+ files → Delegate to task-manager
- >60 minutes → Delegate to task-manager
- <30 minutes → Execute directly
**To customize**: Edit the `<delegation_criteria>` section to match your preferences.
---
### 9. Create Your Own Categories
The default categories are:
- features, documentation, code, refactoring, testing, tasks, general
**To add custom categories**: Edit the `<categories>` line in openagent.md:
```xml
<categories>features | documentation | code | refactoring | testing | general | tasks | your-category</categories>
```
**Use case**: If you frequently work on "migrations" or "integrations", add those as categories.
---
### 10. Monitor Session Files
Occasionally check `.tmp/sessions/` to see what context is being preserved:
```bash
ls -la .tmp/sessions/
```
**Why**: Helps you understand what context OpenAgent is using and identify any issues.
---
### 11. Use Explicit Approvals for Learning
When learning a new codebase or technology, use OpenAgent's approval step as a learning opportunity:
- Read the plan carefully
- Ask questions about steps you don't understand
- Request explanations before approving
**Example**:
```
OpenAgent: "I'll refactor this to use dependency injection"
You: "What is dependency injection and why is it better here?"
OpenAgent: [Explains]
You: "Got it, approved!"
```
---
### 12. Combine with Other Agents
OpenAgent works great with other agents in your profile:
- Use OpenAgent for planning and coordination
- Let specialists handle their domains
- OpenAgent will preserve context between them
**Example workflow**:
1. OpenAgent plans the feature
2. @coder-agent implements it
3. @tester writes tests
4. @reviewer checks quality
5. @documentation documents it
All coordinated by OpenAgent with preserved context!
---
## Advanced Tips
### Create Reusable Context Templates
For recurring workflows, create context templates:
**Example**: `.opencode/templates/feature-context.md`
```markdown
# Feature: {FEATURE_NAME}
## Requirements
- [List requirements]
## Constraints
- [List constraints]
## Success Criteria
- [List criteria]
```
**Use**: "Create a new feature using the feature-context template"
---
### Use Session IDs for Debugging
If something goes wrong, note the session ID:
```
Session: 20250118-143022-a4f2
```
You can inspect the session folder to see what context was created:
```bash
cat .tmp/sessions/20250118-143022-a4f2/.manifest.json
```
---
### Batch Related Tasks
Group related tasks in one session for better context:
**Instead of**:
- Request 1: "Create user model"
- Request 2: "Create auth controller"
- Request 3: "Create login route"
**Try**:
- Request: "Build user authentication with model, controller, and routes"
**Why**: Single session, all context preserved, more efficient.
---
## Core Principles
OpenAgent follows these core principles:
### 🎯 Lean
Concise responses, no over-explanation. Gets to the point quickly.
### 🔄 Adaptive
Conversational for questions, formal for tasks. Matches the context.
### ⚡ Lazy
Only creates sessions/files when actually needed. No unnecessary overhead.
### 🔒 Safe
**ALWAYS** requests approval before ANY execution. Confirms before cleanup.
### 📋 Report First
When tests fail or issues are found:
1. **REPORT** the issues
2. **PLAN** the fixes
3. **REQUEST APPROVAL**
4. **FIX** (only after approval)
**Never auto-fixes** - you're always in control.
---
## Summary
OpenAgent is your **intelligent project manager** that:
✅ **Plans before acting** - Shows you the plan and waits for approval
✅ **Preserves context** - Remembers information across multiple steps
✅ **Delegates wisely** - Calls in specialists when needed
✅ **Keeps you in control** - Always confirms before cleanup
✅ **Handles complexity** - Breaks down big tasks into manageable pieces
✅ **Reports before fixing** - Never auto-fixes issues without approval
**Key Takeaways**:
1. Be specific in your requests
2. Review plans before approving
3. Use multi-step workflows for complex projects
4. Let OpenAgent delegate to specialists
5. Clean up sessions when done
6. Customize to fit your workflow
7. Expect reports before fixes when issues are found
**Ready to get started?** Just ask OpenAgent a question or request a task!
---
## Configuration
OpenAgent is configured in `.opencode/agent/openagent.md`. You can customize:
- Delegation thresholds
- Categories
- Error handling
- Test failure protocol
- And more!
Happy building! 🚀

View file

@ -13,9 +13,11 @@ curl -fsSL https://raw.githubusercontent.com/darrenhinde/opencode-agents/main/in
``` ```
**What you get:** **What you get:**
- ✅ All development tools (22 components) - ✅ All development tools (19 components)
- ✅ Business tools (5 components)
- ✅ System builder (7 components) - ✅ System builder (7 components)
- ✅ **Total: 29 components** - ✅ Additional tools (1 component)
- ✅ **Total: 32 components**
### Add to Existing Installation ### Add to Existing Installation

View file

@ -19,9 +19,11 @@ curl -fsSL https://raw.githubusercontent.com/darrenhinde/opencode-agents/main/in
``` ```
**What you get:** **What you get:**
- ✅ All development tools (22 components) - ✅ All development tools (19 components)
- ✅ Business tools (5 components)
- ✅ System builder (7 components) - ✅ System builder (7 components)
- ✅ **Total: 29 components** - ✅ Additional tools (1 component)
- ✅ **Total: 32 components**
--- ---

View file

@ -19,9 +19,11 @@ curl -fsSL https://raw.githubusercontent.com/darrenhinde/opencode-agents/main/in
``` ```
**What you get:** **What you get:**
- ✅ All development tools (22 components) - ✅ All development tools (19 components)
- ✅ Business tools (5 components)
- ✅ System builder (7 components) - ✅ System builder (7 components)
- ✅ **Total: 29 components** - ✅ Additional tools (1 component)
- ✅ **Total: 32 components**
--- ---

View file

@ -0,0 +1,515 @@
# Building with OpenCode: The Power User Formula
## Overview
This guide teaches you how to build efficient, scalable OpenCode systems using the 4-layer architecture. Master this formula to create powerful AI workflows with minimal token usage and maximum reusability.
## The 4-Layer Architecture
```
Layer 1: TOOLS → Atomic operations (read, test, lint)
Layer 2: SUBAGENTS → Specialized skills (security, testing, refactoring)
Layer 3: COMMANDS → User shortcuts + templates (slash commands)
Layer 4: MAIN AGENTS → Orchestration (build, plan, general)
```
Each layer serves a specific purpose and builds upon the previous one.
---
## Layer 1: TOOLS - Build for Efficiency
### The Rule
Create tools for **frequent, verbose operations** that need output filtering or caching.
### Structure
```typescript
// .opencode/tool/[operation].ts
export default tool({
description: "One-line: what it does, when to use",
args: { /* minimal params */ },
async execute(args, ctx) {
// Run operation
// Parse output
// Return only what matters
return conciseResult
}
})
```
### When to Build a Tool
- ✅ Used 10+ times per session
- ✅ Raw output >1KB, useful info <200 chars
- ✅ Needs parsing/filtering/caching
### Examples
- `test-runner` - Run tests, return pass/fail + errors only
- `lint-check` - Return only errors in changed files
- `build-check` - Return warnings/errors, not full logs
### Quick Start: Your First Tool
```bash
# Create your first efficient tool
mkdir -p .opencode/tool
cat > .opencode/tool/test.ts << 'EOF'
import { tool } from "@opencode-ai/plugin"
import { z } from "zod"
export default tool({
description: "Run tests, return summary or failures only",
args: { path: z.string() },
async execute(args, ctx) {
const result = await ctx.$`npm test -- ${args.path}`.nothrow()
const output = await new Response(result.stdout).text()
return result.exitCode === 0
? `✅ Tests passed`
: `❌ Failed:\n${output.split('\n').filter(l => l.includes('FAIL') || l.includes('●')).slice(0, 20).join('\n')}`
}
})
EOF
# Test it
opencode tui
# Type: "run the tests"
```
---
## Layer 2: SUBAGENTS - Build for Specialization
### The Rule
Create subagents for **complex, reusable workflows** that require domain expertise.
### Structure
```markdown
# .opencode/agent/[domain]/[specialist].md
---
mode: "subagent"
description: "Use WHEN/AFTER [trigger condition]"
tools:
[essential-tool]: true
task: false # Prevent recursion
---
You are [role]. You specialize in:
1. [Specific capability]
2. [Specific capability]
Always [output format/requirement].
```
### When to Build a Subagent
- ✅ Multi-step process (3+ steps)
- ✅ Requires domain expertise
- ✅ Called by main agent OR user
- ✅ Isolated context beneficial
### Recommended Folder Structure
```
.opencode/agent/
├── security/
│ ├── code-scanner.md # Vulnerability detection
│ ├── dependency-audit.md # Supply chain check
│ └── secrets-detector.md # Credential scanning
├── testing/
│ ├── unit-generator.md # Generate unit tests
│ ├── e2e-builder.md # E2E test creation
│ └── test-fixer.md # Fix failing tests
└── refactor/
├── modernizer.md # Update legacy code
├── optimizer.md # Performance improvements
└── simplifier.md # Reduce complexity
```
### Example: Security Scanner Subagent
```markdown
# .opencode/agent/security/code-scanner.md
---
mode: "subagent"
description: "Use AFTER writing auth code to scan for vulnerabilities"
tools:
lint-check: true
test-runner: true
task: false
---
You are a Security Specialist. You scan code for:
1. SQL injection vulnerabilities
2. XSS attack vectors
3. Authentication/authorization flaws
4. Insecure dependencies
Always return a structured report with severity levels.
```
---
## Layer 3: COMMANDS - Build for Convenience
### The Rule
Create commands for **common user workflows** that benefit from templates and context.
### Structure
```markdown
# .opencode/command/[workflow]/[action].md
---
description: "What this does"
agent: "[subagent-name]" # Routes to subagent
---
[Detailed prompt with context]
@$1 # File references
@AGENTS.md # Project standards
Additional: $2
```
### When to Build a Command
- ✅ User types it frequently
- ✅ Needs specific context files
- ✅ Benefits from template
- ✅ Can reuse subagent
### The Formula
```
Command = Subagent + Context Files + Template
```
### Examples
```bash
/security/scan file.ts # → security/code-scanner + project files
/test/generate service.ts # → testing/unit-generator + test patterns
/refactor/modernize legacy.js # → refactor/modernizer + standards
```
### Example: Security Audit Command
```markdown
# .opencode/command/security/audit.md
---
description: "Run comprehensive security audit on file"
agent: "security/auditor"
---
Run a full security audit on @$1
Include:
- Vulnerability scanning
- Dependency checks
- Secret detection
- Best practice validation
Reference project standards: @AGENTS.md
```
---
## Layer 4: MAIN AGENTS - Configure, Don't Create
### The Rule
**Customize builtin agents, rarely create new primary agents.**
### Structure
```markdown
# .opencode/agent/build.md (override built-in)
---
mode: "primary"
tools:
test-runner: true
lint-check: true
---
## Testing Protocol
After code changes: use test-runner
On failure: analyze and fix
On complex failure: use Task(subagent_type="testing/test-fixer")
## Quality Checks
Before completing: lint-check
If issues: fix automatically
```
### When to Create a New Primary Agent
- ❌ Almost never - customize `build`, `plan`, `general` instead
- ✅ Only for distinct modes (e.g., "code-review-only" mode)
---
## Complete Patterns
### Pattern 1: Progressive Enhancement
```
User Request
↓
Main Agent (build) - uses tools for atomic ops
↓ (if complex)
Task Tool → Subagent - specialized workflow
↓ (if needs helpers)
Task Tool → More Subagents - parallel execution
↓
Return to Main Agent
↓
User Response
```
### Pattern 2: User Shortcuts
```
User: /security/full-audit auth.ts
↓
Command loads template + context files
↓
Routes to subagent (mode: "subagent")
↓
Subagent uses tools (test-runner, lint-check)
↓
Returns focused report
```
---
## Real-World Example: Complete Setup
### Tools (Efficiency)
```
.opencode/tool/
├── test.ts # Smart test runner
├── lint.ts # Filtered linter
└── deps.ts # Dependency checker
```
### Subagents (Specialization)
```
.opencode/agent/
├── security/
│ └── auditor.md # Comprehensive security
├── testing/
│ ├── generator.md # Generate tests
│ └── fixer.md # Fix failures
└── code-review/
└── reviewer.md # Code quality
```
### Commands (Convenience)
```
.opencode/command/
├── check.md # Quick health check
├── security/
│ └── audit.md # Full security audit
└── test/
├── generate.md # Generate tests
└── fix.md # Fix failing tests
```
### Main Agent (Orchestration)
```
.opencode/agent/
└── build.md # Customized build agent
```
---
## Decision Tree
### "Should I build X?"
#### TOOL?
```
Is it called 10+ times/session? → YES
Does it need output filtering? → YES
Can bash do it well enough? → NO if frequently used
```
#### SUBAGENT?
```
Is it 3+ step workflow? → YES
Does it need isolated context? → YES
Is it single atomic operation? → NO (make it a tool)
```
#### COMMAND?
```
Do users type this often? → YES
Can it reuse existing subagent? → YES (just template it)
Needs new capability? → NO (build subagent first)
```
#### MAIN AGENT?
```
Do you need a new mode? → Probably NO (customize existing)
```
---
## The Winning Configuration
### Minimal but Powerful
```
.opencode/
├── tool/
│ └── test.ts # 1 efficient test tool
├── agent/
│ ├── build.md # Customized with tool usage
│ └── code-review/
│ └── reviewer.md # 1 specialized subagent
└── command/
└── review.md # 1 user shortcut
```
**This gives you:**
- ✅ Efficient testing (90% token savings)
- ✅ Code review capability
- ✅ User convenience
- ✅ Easy to maintain
### Scale Up as Needed
```
.opencode/
├── tool/ [2-5 tools max]
│ ├── test.ts
│ ├── lint.ts
│ └── build.ts
├── agent/ [5-15 subagents organized by domain]
│ ├── security/
│ ├── testing/
│ ├── refactor/
│ └── documentation/
└── command/ [10-20 shortcuts]
├── security/
├── test/
└── refactor/
```
---
## Pro Tips
### 1. Start Small, Grow Organically
```
Week 1: Add test-runner tool
Week 2: Add code-review subagent
Week 3: Add shortcuts you use 3+ times
```
### 2. Make Subagents Discoverable
```markdown
description: "Use AFTER writing auth code to scan for vulnerabilities"
```
Main agent sees this in Task tool and knows when to call it.
### 3. Template Everything
```markdown
# Command template
@AGENTS.md # Always include standards
@.cursorrules # Always include rules
@$1 # Target file
```
### 4. Think in Layers
- **Tools** = Efficiency
- **Subagents** = Specialization
- **Commands** = Convenience
- **Main Agents** = Orchestration
### 5. Avoid Redundancy
```
❌ Separate tool + subagent doing same thing
✅ Tool for efficiency, subagent calls tool + adds intelligence
```
---
## The Formula in One Diagram
```
┌─────────────────────────────────────────┐
│ USER │
│ /security/audit auth.ts │
└──────────────┬──────────────────────────┘
│
↓
┌──────────────────────────────────────────┐
│ COMMAND (Template + Context) │
│ • Loads audit template │
│ • Attaches @auth.ts, @AGENTS.md │
│ • Routes to: security/auditor │
└──────────────┬───────────────────────────┘
│
↓
┌──────────────────────────────────────────┐
│ SUBAGENT (Specialized Workflow) │
│ • Calls lint-check tool │
│ • Calls test-runner tool │
│ • Analyzes with domain expertise │
│ • Returns focused report │
└──────────────┬───────────────────────────┘
│
↓
┌──────────────────────────────────────────┐
│ TOOLS (Efficient Operations) │
│ • lint-check: 30K chars → 200 chars │
│ • test-runner: 15K chars → 50 chars │
│ • Total context: 250 chars vs 45K │
└──────────────────────────────────────────┘
```
**Result:** 99% token savings, specialized analysis, user convenience.
---
## Getting Started
### Step 1: Create Your First Tool
```bash
mkdir -p .opencode/tool
cat > .opencode/tool/test.ts << 'EOF'
import { tool } from "@opencode-ai/plugin"
import { z } from "zod"
export default tool({
description: "Run tests, return summary or failures only",
args: { path: z.string() },
async execute(args, ctx) {
const result = await ctx.$`npm test -- ${args.path}`.nothrow()
const output = await new Response(result.stdout).text()
return result.exitCode === 0
? `✅ Tests passed`
: `❌ Failed:\n${output.split('\n').filter(l => l.includes('FAIL') || l.includes('●')).slice(0, 20).join('\n')}`
}
})
EOF
```
### Step 2: Test It
```bash
opencode tui
# Type: "run the tests"
# Agent will use your new tool
```
### Step 3: Add More Layers
Once your tool works, add:
1. A subagent that uses the tool
2. A command that routes to the subagent
3. Customize your main agent to use both
---
## Summary
The Power User Formula is simple:
1. **Tools** for efficiency (90% token savings)
2. **Subagents** for specialization (domain expertise)
3. **Commands** for convenience (user shortcuts)
4. **Main Agents** for orchestration (customize, don't create)
Start with one tool, grow organically, and always think in layers.
**That's the formula.** Now go build something powerful.
---
## Related Documentation
- [System Builder Guide](../features/system-builder/guide.md)
- [Quick Start](../features/system-builder/quick-start.md)
- [Agent System Blueprint](../features/agent-system-blueprint.md)
- [Contributing Guide](../contributing/CONTRIBUTING.md)

View file

@ -235,9 +235,9 @@ check_interactive_mode() {
echo "Or use a profile directly:" echo "Or use a profile directly:"
echo "" echo ""
echo -e "${CYAN}# Quick install with profile${NC}" echo -e "${CYAN}# Quick install with profile${NC}"
echo "curl -fsSL https://raw.githubusercontent.com/darrenhinde/opencode-agents/main/install.sh | bash -s core" echo "curl -fsSL https://raw.githubusercontent.com/darrenhinde/opencode-agents/main/install.sh | bash -s essential"
echo "" echo ""
echo "Available profiles: core, developer, full, advanced" echo "Available profiles: essential, developer, business, full, advanced"
echo "" echo ""
cleanup_and_exit 1 cleanup_and_exit 1
fi fi
@ -276,44 +276,61 @@ show_profile_menu() {
echo -e "${BOLD}Available Installation Profiles:${NC}\n" echo -e "${BOLD}Available Installation Profiles:${NC}\n"
# Core profile # Essential profile
local core_desc=$(jq -r '.profiles.core.description' "$TEMP_DIR/registry.json") local essential_name=$(jq -r '.profiles.essential.name' "$TEMP_DIR/registry.json")
local core_count=$(jq -r '.profiles.core.components | length' "$TEMP_DIR/registry.json") local essential_desc=$(jq -r '.profiles.essential.description' "$TEMP_DIR/registry.json")
echo -e " ${GREEN}1) Core${NC}" local essential_count=$(jq -r '.profiles.essential.components | length' "$TEMP_DIR/registry.json")
echo -e " ${core_desc}" echo -e " ${GREEN}1) ${essential_name}${NC}"
echo -e " Components: ${core_count}\n" echo -e " ${essential_desc}"
echo -e " Components: ${essential_count}\n"
# Developer profile # Developer profile
local dev_desc=$(jq -r '.profiles.developer.description' "$TEMP_DIR/registry.json") local dev_desc=$(jq -r '.profiles.developer.description' "$TEMP_DIR/registry.json")
local dev_count=$(jq -r '.profiles.developer.components | length' "$TEMP_DIR/registry.json") local dev_count=$(jq -r '.profiles.developer.components | length' "$TEMP_DIR/registry.json")
local dev_badge=$(jq -r '.profiles.developer.badge // ""' "$TEMP_DIR/registry.json")
if [ -n "$dev_badge" ]; then
echo -e " ${BLUE}2) Developer ${GREEN}[${dev_badge}]${NC}"
else
echo -e " ${BLUE}2) Developer${NC}" echo -e " ${BLUE}2) Developer${NC}"
fi
echo -e " ${dev_desc}" echo -e " ${dev_desc}"
echo -e " Components: ${dev_count}\n" echo -e " Components: ${dev_count}\n"
# Business profile
local business_name=$(jq -r '.profiles.business.name' "$TEMP_DIR/registry.json")
local business_desc=$(jq -r '.profiles.business.description' "$TEMP_DIR/registry.json")
local business_count=$(jq -r '.profiles.business.components | length' "$TEMP_DIR/registry.json")
echo -e " ${CYAN}3) ${business_name}${NC}"
echo -e " ${business_desc}"
echo -e " Components: ${business_count}\n"
# Full profile # Full profile
local full_name=$(jq -r '.profiles.full.name' "$TEMP_DIR/registry.json")
local full_desc=$(jq -r '.profiles.full.description' "$TEMP_DIR/registry.json") local full_desc=$(jq -r '.profiles.full.description' "$TEMP_DIR/registry.json")
local full_count=$(jq -r '.profiles.full.components | length' "$TEMP_DIR/registry.json") local full_count=$(jq -r '.profiles.full.components | length' "$TEMP_DIR/registry.json")
echo -e " ${MAGENTA}3) Full${NC}" echo -e " ${MAGENTA}4) ${full_name}${NC}"
echo -e " ${full_desc}" echo -e " ${full_desc}"
echo -e " Components: ${full_count}\n" echo -e " Components: ${full_count}\n"
# Advanced profile # Advanced profile
local adv_name=$(jq -r '.profiles.advanced.name' "$TEMP_DIR/registry.json")
local adv_desc=$(jq -r '.profiles.advanced.description' "$TEMP_DIR/registry.json") local adv_desc=$(jq -r '.profiles.advanced.description' "$TEMP_DIR/registry.json")
local adv_count=$(jq -r '.profiles.advanced.components | length' "$TEMP_DIR/registry.json") local adv_count=$(jq -r '.profiles.advanced.components | length' "$TEMP_DIR/registry.json")
echo -e " ${YELLOW}4) Advanced${NC}" echo -e " ${YELLOW}5) ${adv_name}${NC}"
echo -e " ${adv_desc}" echo -e " ${adv_desc}"
echo -e " Components: ${adv_count}\n" echo -e " Components: ${adv_count}\n"
echo " 5) Back to main menu" echo " 6) Back to main menu"
echo "" echo ""
read -p "Enter your choice [1-5]: " choice read -p "Enter your choice [1-6]: " choice
case $choice in case $choice in
1) PROFILE="core" ;; 1) PROFILE="essential" ;;
2) PROFILE="developer" ;; 2) PROFILE="developer" ;;
3) PROFILE="full" ;; 3) PROFILE="business" ;;
4) PROFILE="advanced" ;; 4) PROFILE="full" ;;
5) show_main_menu; return ;; 5) PROFILE="advanced" ;;
6) show_main_menu; return ;;
*) print_error "Invalid choice"; sleep 2; show_profile_menu; return ;; *) print_error "Invalid choice"; sleep 2; show_profile_menu; return ;;
esac esac
@ -608,8 +625,8 @@ get_install_strategy() {
perform_installation() { perform_installation() {
print_step "Preparing installation..." print_step "Preparing installation..."
# Create directory structure if it doesn't exist # Create base directory only - subdirectories created on-demand when files are installed
mkdir -p "$INSTALL_DIR"/{agent/subagents,command,tool,plugin,context/{core,project}} mkdir -p "$INSTALL_DIR"
# Check for collisions # Check for collisions
local collisions=() local collisions=()
@ -816,9 +833,9 @@ trap 'cleanup_and_exit 1' INT TERM
main() { main() {
# Parse command line arguments # Parse command line arguments
case "${1:-}" in case "${1:-}" in
core|--core) essential|--essential)
INSTALL_MODE="profile" INSTALL_MODE="profile"
PROFILE="core" PROFILE="essential"
NON_INTERACTIVE=true NON_INTERACTIVE=true
;; ;;
developer|--developer) developer|--developer)
@ -826,6 +843,11 @@ main() {
PROFILE="developer" PROFILE="developer"
NON_INTERACTIVE=true NON_INTERACTIVE=true
;; ;;
business|--business)
INSTALL_MODE="profile"
PROFILE="business"
NON_INTERACTIVE=true
;;
full|--full) full|--full)
INSTALL_MODE="profile" INSTALL_MODE="profile"
PROFILE="full" PROFILE="full"
@ -847,17 +869,18 @@ main() {
echo "Usage: $0 [OPTIONS]" echo "Usage: $0 [OPTIONS]"
echo "" echo ""
echo "Options:" echo "Options:"
echo " core, --core Install core profile" echo " essential, --essential Install essential profile (minimal)"
echo " developer, --developer Install developer profile" echo " developer, --developer Install developer profile (code-focused)"
echo " full, --full Install full profile" echo " business, --business Install business profile (content-focused)"
echo " advanced, --advanced Install advanced profile" echo " full, --full Install full profile (everything except system-builder)"
echo " advanced, --advanced Install advanced profile (complete system)"
echo " list, --list List all available components" echo " list, --list List all available components"
echo " help, --help, -h Show this help message" echo " help, --help, -h Show this help message"
echo "" echo ""
echo "Examples:" echo "Examples:"
echo " $0 core" echo " $0 essential"
echo " $0 --developer" echo " $0 --developer"
echo " curl -fsSL https://raw.githubusercontent.com/darrenhinde/opencode-agents/main/install.sh | bash -s core" echo " curl -fsSL https://raw.githubusercontent.com/darrenhinde/opencode-agents/main/install.sh | bash -s essential"
echo "" echo ""
echo "Without options, runs in interactive mode" echo "Without options, runs in interactive mode"
exit 0 exit 0

View file

@ -1,22 +1,15 @@
{ {
"version": "1.0.0", "version": "1.0.0",
"repository": "https://github.com/darrenhinde/opencode-agents", "repository": "https://github.com/darrenhinde/opencode-agents",
"categories": {
"essential": "Minimal components for basic functionality",
"standard": "Standard components for typical use",
"extended": "Extended components for advanced features",
"specialized": "Specialized components for specific domains",
"meta": "Meta-level components for system generation"
},
"components": { "components": {
"agents": [ "agents": [
{
"id": "task-manager",
"name": "Task Manager",
"type": "agent",
"path": ".opencode/agent/task-manager.md",
"description": "Breaks down complex features into small, verifiable subtasks",
"tags": [
"planning",
"organization",
"task-management"
],
"dependencies": [],
"category": "core"
},
{ {
"id": "codebase-agent", "id": "codebase-agent",
"name": "Codebase Agent", "name": "Codebase Agent",
@ -28,38 +21,32 @@
"architecture", "architecture",
"patterns" "patterns"
], ],
"dependencies": [], "dependencies": [
"category": "core" "subagent:task-manager",
"subagent:documentation",
"subagent:coder-agent",
"subagent:tester",
"subagent:reviewer",
"subagent:build-agent"
],
"category": "standard"
}, },
{ {
"id": "image-specialist", "id": "openagent",
"name": "Image Specialist", "name": "OpenAgent",
"type": "agent", "type": "agent",
"path": ".opencode/agent/image-specialist.md", "path": ".opencode/agent/openagent.md",
"description": "Generates and edits images using Gemini AI", "description": "Universal agent for answering queries, executing tasks, and coordinating workflows across any domain",
"tags": [ "tags": [
"images", "universal",
"ai", "flexible",
"generation" "coordination"
], ],
"dependencies": [ "dependencies": [
"tool:gemini" "subagent:task-manager",
"subagent:documentation"
], ],
"category": "extended" "category": "essential"
},
{
"id": "workflow-orchestrator",
"name": "Workflow Orchestrator",
"type": "agent",
"path": ".opencode/agent/workflow-orchestrator.md",
"description": "Orchestrates complex multi-agent workflows",
"tags": [
"orchestration",
"workflow",
"automation"
],
"dependencies": [],
"category": "extended"
}, },
{ {
"id": "system-builder", "id": "system-builder",
@ -80,15 +67,45 @@
"subagent:workflow-designer", "subagent:workflow-designer",
"subagent:command-creator" "subagent:command-creator"
], ],
"category": "advanced" "category": "meta"
} }
], ],
"subagents": [ "subagents": [
{ {
"id": "reviewer", "id": "task-manager",
"name": "Code Reviewer", "name": "Task Manager",
"type": "subagent", "type": "subagent",
"path": ".opencode/agent/subagents/reviewer.md", "path": ".opencode/agent/subagents/core/task-manager.md",
"description": "Breaks down complex features into small, verifiable subtasks",
"tags": [
"planning",
"organization",
"task-management"
],
"dependencies": [],
"category": "essential"
},
{
"id": "image-specialist",
"name": "Image Specialist",
"type": "subagent",
"path": ".opencode/agent/subagents/utils/image-specialist.md",
"description": "Generates and edits images using Gemini AI",
"tags": [
"images",
"ai",
"generation"
],
"dependencies": [
"tool:gemini"
],
"category": "utils"
},
{
"id": "reviewer",
"name": "Reviewer",
"type": "subagent",
"path": ".opencode/agent/subagents/code/reviewer.md",
"description": "Performs code review with security and quality checks", "description": "Performs code review with security and quality checks",
"tags": [ "tags": [
"review", "review",
@ -96,13 +113,13 @@
"quality" "quality"
], ],
"dependencies": [], "dependencies": [],
"category": "core" "category": "standard"
}, },
{ {
"id": "tester", "id": "tester",
"name": "Test Writer", "name": "Tester",
"type": "subagent", "type": "subagent",
"path": ".opencode/agent/subagents/tester.md", "path": ".opencode/agent/subagents/code/tester.md",
"description": "Writes unit and integration tests", "description": "Writes unit and integration tests",
"tags": [ "tags": [
"testing", "testing",
@ -110,13 +127,13 @@
"quality" "quality"
], ],
"dependencies": [], "dependencies": [],
"category": "core" "category": "standard"
}, },
{ {
"id": "documentation", "id": "documentation",
"name": "Documentation Writer", "name": "Documentation Writer",
"type": "subagent", "type": "subagent",
"path": ".opencode/agent/subagents/documentation.md", "path": ".opencode/agent/subagents/core/documentation.md",
"description": "Creates and updates documentation", "description": "Creates and updates documentation",
"tags": [ "tags": [
"docs", "docs",
@ -124,13 +141,13 @@
"writing" "writing"
], ],
"dependencies": [], "dependencies": [],
"category": "core" "category": "essential"
}, },
{ {
"id": "coder-agent", "id": "coder-agent",
"name": "Coder Agent", "name": "Coder Agent",
"type": "subagent", "type": "subagent",
"path": ".opencode/agent/subagents/coder-agent.md", "path": ".opencode/agent/subagents/code/coder-agent.md",
"description": "Executes coding subtasks in sequence", "description": "Executes coding subtasks in sequence",
"tags": [ "tags": [
"coding", "coding",
@ -138,13 +155,13 @@
"execution" "execution"
], ],
"dependencies": [], "dependencies": [],
"category": "core" "category": "standard"
}, },
{ {
"id": "build-agent", "id": "build-agent",
"name": "Build Agent", "name": "Build Agent",
"type": "subagent", "type": "subagent",
"path": ".opencode/agent/subagents/build-agent.md", "path": ".opencode/agent/subagents/code/build-agent.md",
"description": "Type checks and validates builds", "description": "Type checks and validates builds",
"tags": [ "tags": [
"build", "build",
@ -152,13 +169,13 @@
"type-checking" "type-checking"
], ],
"dependencies": [], "dependencies": [],
"category": "core" "category": "standard"
}, },
{ {
"id": "codebase-pattern-analyst", "id": "codebase-pattern-analyst",
"name": "Codebase Pattern Analyst", "name": "Codebase Pattern Analyst",
"type": "subagent", "type": "subagent",
"path": ".opencode/agent/subagents/codebase-pattern-analyst.md", "path": ".opencode/agent/subagents/code/codebase-pattern-analyst.md",
"description": "Analyzes and implements codebase patterns", "description": "Analyzes and implements codebase patterns",
"tags": [ "tags": [
"patterns", "patterns",
@ -166,13 +183,13 @@
"architecture" "architecture"
], ],
"dependencies": [], "dependencies": [],
"category": "extended" "category": "specialized"
}, },
{ {
"id": "domain-analyzer", "id": "domain-analyzer",
"name": "Domain Analyzer", "name": "Domain Analyzer",
"type": "subagent", "type": "subagent",
"path": ".opencode/agent/subagents/domain-analyzer.md", "path": ".opencode/agent/subagents/system-builder/domain-analyzer.md",
"description": "Analyzes user domains and recommends agent architectures", "description": "Analyzes user domains and recommends agent architectures",
"tags": [ "tags": [
"analysis", "analysis",
@ -180,13 +197,13 @@
"architecture" "architecture"
], ],
"dependencies": [], "dependencies": [],
"category": "advanced" "category": "meta"
}, },
{ {
"id": "agent-generator", "id": "agent-generator",
"name": "Agent Generator", "name": "Agent Generator",
"type": "subagent", "type": "subagent",
"path": ".opencode/agent/subagents/agent-generator.md", "path": ".opencode/agent/subagents/system-builder/agent-generator.md",
"description": "Generates XML-optimized agent files following research-backed patterns", "description": "Generates XML-optimized agent files following research-backed patterns",
"tags": [ "tags": [
"generation", "generation",
@ -194,13 +211,13 @@
"agents" "agents"
], ],
"dependencies": [], "dependencies": [],
"category": "advanced" "category": "meta"
}, },
{ {
"id": "context-organizer", "id": "context-organizer",
"name": "Context Organizer", "name": "Context Organizer",
"type": "subagent", "type": "subagent",
"path": ".opencode/agent/subagents/context-organizer.md", "path": ".opencode/agent/subagents/system-builder/context-organizer.md",
"description": "Organizes and generates modular context files", "description": "Organizes and generates modular context files",
"tags": [ "tags": [
"context", "context",
@ -208,13 +225,13 @@
"knowledge-management" "knowledge-management"
], ],
"dependencies": [], "dependencies": [],
"category": "advanced" "category": "meta"
}, },
{ {
"id": "workflow-designer", "id": "workflow-designer",
"name": "Workflow Designer", "name": "Workflow Designer",
"type": "subagent", "type": "subagent",
"path": ".opencode/agent/subagents/workflow-designer.md", "path": ".opencode/agent/subagents/system-builder/workflow-designer.md",
"description": "Designs complete workflow definitions with context dependencies", "description": "Designs complete workflow definitions with context dependencies",
"tags": [ "tags": [
"workflows", "workflows",
@ -222,13 +239,13 @@
"orchestration" "orchestration"
], ],
"dependencies": [], "dependencies": [],
"category": "advanced" "category": "meta"
}, },
{ {
"id": "command-creator", "id": "command-creator",
"name": "Command Creator", "name": "Command Creator",
"type": "subagent", "type": "subagent",
"path": ".opencode/agent/subagents/command-creator.md", "path": ".opencode/agent/subagents/system-builder/command-creator.md",
"description": "Creates custom slash commands with clear syntax and examples", "description": "Creates custom slash commands with clear syntax and examples",
"tags": [ "tags": [
"commands", "commands",
@ -236,7 +253,7 @@
"cli" "cli"
], ],
"dependencies": [], "dependencies": [],
"category": "advanced" "category": "meta"
} }
], ],
"commands": [ "commands": [
@ -252,7 +269,7 @@
"validation" "validation"
], ],
"dependencies": [], "dependencies": [],
"category": "core" "category": "standard"
}, },
{ {
"id": "commit", "id": "commit",
@ -266,7 +283,7 @@
"version-control" "version-control"
], ],
"dependencies": [], "dependencies": [],
"category": "core" "category": "standard"
}, },
{ {
"id": "context", "id": "context",
@ -280,7 +297,7 @@
"management" "management"
], ],
"dependencies": [], "dependencies": [],
"category": "core" "category": "essential"
}, },
{ {
"id": "clean", "id": "clean",
@ -294,7 +311,7 @@
"build" "build"
], ],
"dependencies": [], "dependencies": [],
"category": "extended" "category": "standard"
}, },
{ {
"id": "optimize", "id": "optimize",
@ -308,7 +325,7 @@
"build" "build"
], ],
"dependencies": [], "dependencies": [],
"category": "extended" "category": "standard"
}, },
{ {
"id": "prompt-enhancer", "id": "prompt-enhancer",
@ -322,7 +339,7 @@
"enhancement" "enhancement"
], ],
"dependencies": [], "dependencies": [],
"category": "extended" "category": "standard"
}, },
{ {
"id": "worktrees", "id": "worktrees",
@ -336,7 +353,7 @@
"workflow" "workflow"
], ],
"dependencies": [], "dependencies": [],
"category": "advanced" "category": "specialized"
}, },
{ {
"id": "build-context-system", "id": "build-context-system",
@ -353,7 +370,7 @@
"dependencies": [ "dependencies": [
"agent:system-builder" "agent:system-builder"
], ],
"category": "advanced" "category": "meta"
} }
], ],
"tools": [ "tools": [
@ -371,7 +388,7 @@
"dependencies": [ "dependencies": [
"tool:env" "tool:env"
], ],
"category": "extended" "category": "specialized"
}, },
{ {
"id": "env", "id": "env",
@ -385,7 +402,7 @@
"security" "security"
], ],
"dependencies": [], "dependencies": [],
"category": "core" "category": "essential"
} }
], ],
"plugins": [ "plugins": [
@ -403,7 +420,7 @@
"dependencies": [ "dependencies": [
"tool:env" "tool:env"
], ],
"category": "extended" "category": "specialized"
}, },
{ {
"id": "notify", "id": "notify",
@ -416,7 +433,7 @@
"alerts" "alerts"
], ],
"dependencies": [], "dependencies": [],
"category": "extended" "category": "specialized"
} }
], ],
"contexts": [ "contexts": [
@ -432,7 +449,7 @@
"guidelines" "guidelines"
], ],
"dependencies": [], "dependencies": [],
"category": "core" "category": "essential"
}, },
{ {
"id": "project-context", "id": "project-context",
@ -446,7 +463,7 @@
"configuration" "configuration"
], ],
"dependencies": [], "dependencies": [],
"category": "core" "category": "essential"
} }
], ],
"config": [ "config": [
@ -462,7 +479,7 @@
"template" "template"
], ],
"dependencies": [], "dependencies": [],
"category": "core" "category": "essential"
}, },
{ {
"id": "readme", "id": "readme",
@ -476,21 +493,21 @@
"guide" "guide"
], ],
"dependencies": [], "dependencies": [],
"category": "core" "category": "essential"
} }
] ]
}, },
"profiles": { "profiles": {
"core": { "essential": {
"name": "Core", "name": "Essential (Minimal)",
"description": "Minimal essentials - main agent with basic subagents and commands", "description": "Minimal starter kit - universal agent with core subagents. Great for learning the system or lightweight tasks. Upgrade to Developer or Business for full features.",
"components": [ "components": [
"agent:task-manager", "agent:openagent",
"agent:codebase-agent", "subagent:task-manager",
"subagent:tester",
"subagent:documentation", "subagent:documentation",
"subagent:coder-agent", "command:context",
"command:commit", "command:clean",
"tool:env",
"context:essential-patterns", "context:essential-patterns",
"context:project-context", "context:project-context",
"config:env-example" "config:env-example"
@ -498,26 +515,45 @@
}, },
"developer": { "developer": {
"name": "Developer", "name": "Developer",
"description": "Recommended for daily development - includes testing, review, quality tools, and AI image generation", "description": "Complete software development environment with code generation, testing, review, and build tools. Recommended for most developers.",
"badge": "RECOMMENDED",
"components": [ "components": [
"agent:task-manager", "agent:openagent",
"agent:codebase-agent", "agent:codebase-agent",
"agent:image-specialist", "subagent:task-manager",
"agent:workflow-orchestrator",
"subagent:reviewer",
"subagent:tester",
"subagent:documentation", "subagent:documentation",
"subagent:coder-agent", "subagent:coder-agent",
"subagent:reviewer",
"subagent:tester",
"subagent:build-agent", "subagent:build-agent",
"subagent:codebase-pattern-analyst", "subagent:codebase-pattern-analyst",
"command:test",
"command:commit", "command:commit",
"command:test",
"command:context", "command:context",
"command:clean", "command:clean",
"command:optimize", "command:optimize",
"tool:env",
"context:essential-patterns",
"context:project-context",
"config:env-example",
"config:readme"
]
},
"business": {
"name": "Business",
"description": "Business process automation, content creation, and visual workflows. Includes image generation, notifications, and documentation tools.",
"components": [
"agent:openagent",
"subagent:task-manager",
"subagent:documentation",
"subagent:image-specialist",
"command:context",
"command:clean",
"command:prompt-enhancer", "command:prompt-enhancer",
"tool:env", "tool:env",
"tool:gemini", "tool:gemini",
"plugin:notify",
"plugin:telegram-notify",
"context:essential-patterns", "context:essential-patterns",
"context:project-context", "context:project-context",
"config:env-example", "config:env-example",
@ -526,18 +562,18 @@
}, },
"full": { "full": {
"name": "Full", "name": "Full",
"description": "Everything included - all agents, tools, and plugins for maximum functionality", "description": "Everything included - all agents, subagents, tools, and plugins for maximum functionality.",
"components": [ "components": [
"agent:task-manager", "agent:openagent",
"agent:codebase-agent", "agent:codebase-agent",
"agent:image-specialist", "subagent:task-manager",
"agent:workflow-orchestrator",
"subagent:reviewer",
"subagent:tester",
"subagent:documentation", "subagent:documentation",
"subagent:coder-agent", "subagent:coder-agent",
"subagent:reviewer",
"subagent:tester",
"subagent:build-agent", "subagent:build-agent",
"subagent:codebase-pattern-analyst", "subagent:codebase-pattern-analyst",
"subagent:image-specialist",
"command:test", "command:test",
"command:commit", "command:commit",
"command:context", "command:context",
@ -556,20 +592,20 @@
] ]
}, },
"advanced": { "advanced": {
"name": "Advanced", "name": "Advanced (Meta-Level)",
"description": "Full installation plus system builder and experimental features", "description": "Full installation plus System Builder for creating custom AI architectures. For power users and contributors.",
"components": [ "components": [
"agent:task-manager", "agent:openagent",
"agent:codebase-agent", "agent:codebase-agent",
"agent:image-specialist",
"agent:workflow-orchestrator",
"agent:system-builder", "agent:system-builder",
"subagent:reviewer", "subagent:task-manager",
"subagent:tester",
"subagent:documentation", "subagent:documentation",
"subagent:coder-agent", "subagent:coder-agent",
"subagent:reviewer",
"subagent:tester",
"subagent:build-agent", "subagent:build-agent",
"subagent:codebase-pattern-analyst", "subagent:codebase-pattern-analyst",
"subagent:image-specialist",
"subagent:domain-analyzer", "subagent:domain-analyzer",
"subagent:agent-generator", "subagent:agent-generator",
"subagent:context-organizer", "subagent:context-organizer",
@ -585,6 +621,8 @@
"command:build-context-system", "command:build-context-system",
"tool:env", "tool:env",
"tool:gemini", "tool:gemini",
"plugin:notify",
"plugin:telegram-notify",
"context:essential-patterns", "context:essential-patterns",
"context:project-context", "context:project-context",
"config:env-example", "config:env-example",

49
scripts/README.md Normal file
View file

@ -0,0 +1,49 @@
# Scripts
This directory contains utility scripts for the OpenCode Agents system.
## Available Scripts
### Component Management
- `register-component.sh` - Register a new component in the registry
- `validate-component.sh` - Validate component structure and metadata
### Session Management
- `cleanup-stale-sessions.sh` - Remove stale agent sessions older than 24 hours
### Testing
See `tests/` subdirectory for test scripts.
## Session Cleanup
Agent instances create temporary context files in `.tmp/sessions/{session-id}/` for subagent delegation. These sessions are automatically cleaned up, but you can manually remove stale sessions:
```bash
# Clean up sessions older than 24 hours
./scripts/cleanup-stale-sessions.sh
# Or manually delete all sessions
rm -rf .tmp/sessions/
```
Sessions are safe to delete anytime - they only contain temporary context files for agent coordination.
## Usage Examples
### Register a Component
```bash
./scripts/register-component.sh path/to/component
```
### Validate a Component
```bash
./scripts/validate-component.sh path/to/component
```
### Clean Stale Sessions
```bash
./scripts/cleanup-stale-sessions.sh
```

View file

@ -0,0 +1,76 @@
#!/bin/bash
# Cleanup stale agent sessions older than 24 hours
set -e
SESSIONS_DIR=".tmp/sessions"
STALE_HOURS=24
# Check if sessions directory exists
if [ ! -d "$SESSIONS_DIR" ]; then
echo "No sessions directory found at $SESSIONS_DIR"
exit 0
fi
echo "Checking for stale sessions (older than ${STALE_HOURS} hours)..."
# Find all session directories
session_count=0
stale_count=0
for session_dir in "$SESSIONS_DIR"/*; do
if [ ! -d "$session_dir" ]; then
continue
fi
session_count=$((session_count + 1))
session_id=$(basename "$session_dir")
manifest="$session_dir/.manifest.json"
# Check if manifest exists
if [ ! -f "$manifest" ]; then
echo "⚠️ Session $session_id has no manifest - removing"
rm -rf "$session_dir"
stale_count=$((stale_count + 1))
continue
fi
# Get last activity timestamp
last_activity=$(jq -r '.last_activity // .created_at' "$manifest" 2>/dev/null || echo "")
if [ -z "$last_activity" ]; then
echo "⚠️ Session $session_id has invalid manifest - removing"
rm -rf "$session_dir"
stale_count=$((stale_count + 1))
continue
fi
# Calculate age in hours
last_activity_epoch=$(date -j -f "%Y-%m-%dT%H:%M:%SZ" "$last_activity" "+%s" 2>/dev/null || echo "0")
current_epoch=$(date "+%s")
age_hours=$(( (current_epoch - last_activity_epoch) / 3600 ))
if [ "$age_hours" -gt "$STALE_HOURS" ]; then
echo "🗑️ Removing stale session $session_id (${age_hours}h old)"
rm -rf "$session_dir"
stale_count=$((stale_count + 1))
else
echo "✅ Session $session_id is active (${age_hours}h old)"
fi
done
echo ""
echo "Summary:"
echo " Total sessions: $session_count"
echo " Stale sessions removed: $stale_count"
echo " Active sessions: $((session_count - stale_count))"
# Remove sessions directory if empty
if [ -d "$SESSIONS_DIR" ] && [ -z "$(ls -A "$SESSIONS_DIR")" ]; then
echo ""
echo "Sessions directory is empty - removing"
rmdir "$SESSIONS_DIR"
fi
echo ""
echo "✨ Cleanup complete!"