* feat: add OAC package refactor context file - Add comprehensive feature context for OAC package refactor - Document multi-IDE support architecture - Define community component registry (shadcn-like) - Outline flexible configuration system - Detail context file location flexibility - Define 7-phase implementation plan - Include CLI commands reference - Add community publishing guidelines * docs: add OAC refactor quick start guide - Add quick reference for Phase 1 implementation - Include project structure and file locations - Document configuration schema and defaults - Add testing strategy and validation steps - Include development workflow - Reference all related resources * feat: add critical user approval and context resolution systems CRITICAL FEATURES ADDED: 1. User Approval & YOLO Mode - Default: Interactive approval for all file operations - Always asks: local vs global install - Confirms before overwriting files - Shows diffs and file details - YOLO mode (--yolo): Skip confirmations, auto-resolve, report at end - Conflict strategies: ask, skip, overwrite, backup, yolo - Safety: backups, git detection, rollback support, audit log 2. Context Resolution System - Layered context resolution (6 priority levels) - Project override (.oac/context/) - highest priority - Project context (.opencode/context/) - IDE context (.cursor/, .claude/) - Project docs (docs/) - User global (~/.config/oac/context/) - OAC official (~/.config/oac/official/) - lowest priority - Smart resolution based on agent location (global vs local) - preferLocal config option - Context merging strategies - CLI commands for context management - Environment variable overrides - Validation and fallback support 3. Enhanced CLI Commands - All commands support --yolo, --dry-run, --local, --global - Context management: resolve, list, validate, override, sync - Detailed help and examples - Global flags for all commands This ensures users maintain full control over their projects while supporting both local and global workflows with intelligent context resolution. * feat: add component creation wizard and IDE feature parity system NEW FEATURES: 1. Interactive Component Creation - oac create (interactive wizard) - Create agents, skills, contexts, plugins, commands, tools - Template system for scaffolding - Auto-generate tests and boilerplate - Multi-IDE compatibility selection - Size optimization options 2. IDE Feature Parity & Capacity Management (CRITICAL) - Feature support matrix for all IDEs - OpenCode/Claude Code: Full support (all features) - Cursor: Limited (single file, no skills/plugins, 100KB limit) - Windsurf: Partial support - Adaptive installation based on IDE capabilities - Automatic feature filtering and warnings - Component merging for single-file IDEs (Cursor) - Capacity warnings and optimization - IDE-specific profiles 3. Enhanced CLI Commands - oac create [type] - Component creation wizard - oac templates - List available templates - oac compatibility <ide> - Check IDE compatibility - oac ides - List supported IDEs with features - oac ide info <ide> - Show IDE capabilities - oac optimize --for <ide> - Optimize for specific IDE - oac validate --ide <ide> - Validate IDE installation 4. Smart Installation - Detects IDE capabilities - Warns about unsupported features - Auto-filters components - Merges agents for Cursor - Embeds contexts for limited IDEs - Monitors file size limits - Suggests IDE-specific profiles This ensures users can easily create components and OAC gracefully handles different IDE capabilities with clear warnings and automatic optimization. * docs: add critical feedback from parallel agent review CRITICAL FINDINGS: Security Gaps (BLOCKER): - No component signing or verification - No malware/secret scanning - No permission system - Action: Add security layer in Phase 1 Missing Features (CRITICAL): - Discovery (browse, search, trending) - Lockfile for reproducibility - Version conflict management - Interactive onboarding - Progress indicators - Auto-detection for local/global Approaches to Rethink: - Context merging → Use composition instead - Always asking local/global → Auto-detect with smart defaults - Cursor agent merging → Router pattern instead Repository Structure: - Recommended: Monorepo with pnpm workspaces - Packages: core, adapters, registry, security, cli - Benefits: Shared deps, atomic commits, easier testing Community Workflow: - Component submission process - Automated security scanning - Manual review for verification - Moderation system Updated Priorities: - v1.0 MVP: Add 6 critical features (discovery, lockfile, security, etc.) - v1.1: Plugin system, workspace support, marketplace - v2.0: Enterprise features Documentation Needs: - Quick Start (5-minute guide) - CLI Reference (auto-generated) - Recipes/Cookbook - Component Creation Guide - Migration Guide Overall: Plan is 80% solid, needs 20% critical additions before Phase 1 * feat: add comprehensive agent customization and preset system CRITICAL FEATURE: Agent Customization & Personal Presets Problem: - Users want to customize agent prompts for their workflow - Users want to save personal configurations - Updates shouldn't overwrite customizations - Need easy way to view and edit agents Solution: Multi-Layer Customization System Layer 1: View Agent Configuration - oac show agent:openagent (view in pager) - oac edit agent:openagent (open in editor) - oac config show agent:openagent (config only) - oac export agent:openagent (export to file) Layer 2: Create Personal Preset - oac customize agent:openagent (create preset) - Copies to ~/.config/oac/presets/agents/ - Links to base agent for updates - Tracks customizations in metadata Layer 3: Edit Personal Preset - oac edit preset:my-openagent (edit in $EDITOR) - oac customize preset:my-openagent --interactive (wizard) - Auto-backup on save - Track modification history Layer 4: Use Personal Preset - oac use preset:my-openagent (activate) - oac use preset:my-openagent --global (set default) - oac presets list --active (show active) - Switch between presets and base agents Layer 5: Update Management (CRITICAL) - Smart update detection for base agents - Merge strategies: manual, auto-base, auto-merge, locked - Conflict resolution with user prompts - Show diffs before merging - Auto-backup before updates - Preserve user customizations by default Layer 6: Preset Sharing - oac export preset:my-openagent (export) - oac import preset ./preset.md (import) - oac share preset:my-openagent (share with team) - oac publish preset:my-openagent (publish to community) Layer 7: In-Place Editing (Advanced) - oac edit agent:openagent --in-place (risky, warns user) - Creates backup before editing - Warns that updates will overwrite - Recommends preset creation instead Update Strategies: - manual: User reviews every update - auto-base: Auto-update base, keep preset unchanged - auto-merge: Auto-merge, prompt on conflicts - locked: Never update base Configuration: - Preset metadata (.presets.json) - Update strategies per preset - Merge conflict resolution - Backup management - Warning preferences Edge Cases Handled: - In-place edits before updates - Multiple updates behind - Multiple presets for same base - Preset conflicts with IDE - Deleted base agent Best Practices: - Always create presets (safest) - Document customizations - Review updates before merging - Keep backups - Use descriptive names This ensures users can safely customize agents without fear of losing changes on updates, while still benefiting from base agent improvements. * docs: complete comprehensive user scenario analysis (16,014 lines) PLANNING PHASE COMPLETE: Documents Created (9 files, 400KB): - 00-INDEX.md (388 lines) - Planning index and overview - 01-main-plan.md (2,338 lines) - Complete feature specification - 02-quickstart-guide.md (450 lines) - Phase 1 quick reference - 03-critical-feedback.md (599 lines) - Parallel agent review - 04-solo-developer-scenarios.md (2,106 lines) - Individual workflows - 05-team-lead-scenarios.md (3,977 lines) - Team collaboration - 07-content-creator-scenarios.md (2,581 lines) - Non-technical users - 08-open-source-maintainer-scenarios.md (3,575 lines) - Community management - 09-SYNTHESIS.md (1,000+ lines) - Consolidated findings User Personas Analyzed (4/5): ✅ Solo Developer (Primary - 40% market) ✅ Team Lead (Secondary - 30% market) ✅ Content Creator (Emerging - 20% market) ✅ Open Source Maintainer (Future - 5% market) ⏸️ Enterprise Admin (Deferred to v2.0 - 5% market) Key Findings: Solo Developer (Primary User): - Setup must be < 2 minutes or they skip - Preview before committing (try mode) - Safe customization (presets) - Easy rollback/undo - Zero docs reading to start Team Lead (Secondary User): - Lockfile is non-negotiable (oac.lock) - Team configuration (oac-team.json) - Compliance monitoring (90%+ required) - Onboarding: 4-8 hours → 15 minutes (96% reduction) - Staged rollouts for updates Content Creator (Emerging - 20% market): - CLI is intimidating (need GUI wrapper) - Plain language mode (no jargon) - Visual undo (version history) - Templates and examples - Guided setup Open Source Maintainer (Future): - Security scanning pipeline (ClamAV + gitleaks) - Quality gates (70% test coverage) - Review/approval workflow - Deprecation workflow - Sustainability model Critical Additions to MVP: 1. Interactive onboarding wizard (all personas) 2. TUI browser with preview (solo dev, team lead) 3. Lockfile (oac.lock) (team lead) 4. Security scanning (all personas) 5. Try mode (solo dev) 6. Team configuration (team lead) 7. oac doctor health checks (solo dev) 8. Quality gates (maintainer) Market Opportunity: - v1.0: 70% market (solo + team) - v1.1: 90% market (+ content creators with GUI) - v2.0: 100% market (+ enterprise) Recommended Changes: - Expand MVP scope (+2 weeks, 9 weeks total) - Plan v1.1 for content creators (GUI wrapper) - Defer enterprise features to v2.0 - Build community features early (trust) Status: Ready to finalize plan and start implementation Confidence: Very High (95%+) Risk: Low (comprehensive analysis complete) * docs: add comprehensive final review of OAC planning FINAL REVIEW COMPLETE: Overall Assessment: CONDITIONAL GO ✅⚠️ Confidence Level: 85% (High, with conditions) Success Probability: 75% (with modifications) Key Strengths: ✅ Exceptional user research (16,000+ lines, 4 personas) ✅ Clear technical architecture (monorepo, TypeScript, Zod) ✅ Security-first mindset (signing, scanning, verification) ✅ Realistic scope management (v1.0 vs v1.1 vs v2.0) ✅ Comprehensive feature coverage Critical Gaps Identified: ❌ Discovery/Onboarding not in Phase 1 (but P0 in scenarios) ❌ Lockfile not in Phase 2 (but critical for teams) ❌ Security Pipeline not detailed in phases ❌ Progress UI not in Phase 1 (but needed for UX) ❌ Auto-detection not in Phase 1 (but reduces friction) Conditions for Go: 1. Add discovery/onboarding to Phase 1 (+3 days) 2. Add lockfile to Phase 2 (+2 days) 3. Add security pipeline to Phase 1 (+2 days) 4. Add progress UI to Phase 1 (+1 day) 5. Revise timeline: 7 weeks → 9 weeks Critical Action Items (6 days before Phase 1): 1. Add missing features to phases (2 days) 2. Define acceptance criteria (1 day) 3. Define testing strategy (1 day) 4. Design security pipeline (1 day) 5. Create monorepo structure (1 day) Top Risks: 🔴 Timeline Slip (70% probability, high impact) 🟡 Scope Creep (50% probability, high impact) 🟡 Context Merging Complexity (60% probability, medium impact) Recommendation: PROCEED WITH MODIFICATIONS - Complete 6 days of prerequisite work - Extend timeline to 9 weeks - Add missing features to phases - Define acceptance criteria and testing strategy Status: READY TO IMPLEMENT (with modifications) Next Steps: Complete prerequisites → Setup monorepo → Start Phase 1 * feat(context): Standardize context system with navigation, frontmatter, and MVI compliance - Add 77 navigation.md files across all context categories for token-efficient discovery - Standardize frontmatter format on 198+ context files (HTML comment format, 2026-02-15) - Compress 3 oversized guide files applying MVI principle (802 lines removed, 63% reduction) - Add context system analysis and planning artifacts in context-findings/ - Add task management enhancements (stage orchestration, planning subagents) - Document compression techniques and future optimization recommendations Context System Improvements: - All active directories now have navigation.md (200-300 tokens each) - 100% frontmatter compliance with priority/version/date metadata - Improved scannability through MVI compression (compact.md, organizing-context.md, creation.md) - Token efficiency increased for AI agent consumption Planning & Analysis: - Context system implementation plan and simplification analysis - ADR standard proposal and runtime permission architecture - SQLite context design for future scale (deferred until 500+ files) - Context discovery script analysis (rejected in favor of navigation-first) Task Management: - Enhanced task schema with stage orchestration support - New planning subagents (ADR, Architecture, Story Mapping, Prioritization) - Stage orchestrator for multi-stage workflow management - Session context management and lightweight handoff patterns Closes: context-simple-fixes task Ref: context-system-implementation analysis * fix: resolve markdown link validation errors in navigation files - Remove non-existent react-patterns.md link from react/navigation.md - Remove non-existent premium-dark-ui-quick-start.md link from design/navigation.md - Add skip patterns for pre-existing broken links in example/template files - Validation now passes: 215 files validated, 0 errors * fix: resolve all 119 broken markdown links across documentation - Update agent paths to new subagents structure (TestEngineer, ContextScout, etc.) - Fix animation file references (animation-ui.md → animation-components.md) - Update guide references (adding-agent.md → adding-agent-basics.md) - Convert non-existent example paths to placeholder text format - Add skip patterns for intentional example placeholders - Validation now passes: 232 files validated, 0 errors Co-authored-by: CoderAgent <coder@openagents.dev> --------- Co-authored-by: CoderAgent <coder@openagents.dev>
62 KiB
Feature: OAC Package Refactor
Purpose: Transform OpenAgents Control into a flexible npm package with CLI tooling for multi-IDE support and community contributions
Status: In Development
Branch: feature/oac-package-refactor
Priority: CRITICAL
Version Target: 1.0.0
Vision
Transform @nextsystems/oac from a simple installer into a comprehensive CLI package manager that:
- ✅ Manages agents, skills, and contexts across multiple IDEs (OpenCode, Cursor, Claude Code, Windsurf)
- ✅ Provides flexible configuration for agent behavior and permissions
- ✅ Supports community contributions via shadcn-like component registry
- ✅ Handles context files from multiple locations
- ✅ Enables version management and updates
- ✅ Maintains backward compatibility with existing workflows
- ✅ CRITICAL: User runs in project root, chooses local or global install, always confirms overwrites (unless YOLO mode)
Core Features
1. Multi-IDE Support
Goal: One configuration, multiple IDEs
# Configure once
oac configure
# Install for any IDE
oac install opencode
oac install cursor
oac install claude
# Apply updates to all
oac update --all
Implementation:
- Use compatibility layer adapters for IDE-specific translation
- Maintain single source of truth in OAC format
- Auto-detect IDE configurations
- Handle IDE-specific limitations gracefully
2. Flexible Configuration System
Goal: User-controlled agent behavior and permissions
Configuration File: ~/.config/oac/config.json (global) or .oac/config.json (local/project)
CRITICAL BEHAVIOR:
- User runs
oaccommands in their project root directory - Always asks: "Install locally (this project) or globally?"
- Always confirms before overwriting files (unless
--yoloflag) - YOLO mode (
--yolo): Auto-confirms all, reports changes at end - Default mode: Interactive approval for every file conflict
{
"version": "1.0.0",
"preferences": {
"defaultIDE": "opencode",
"installLocation": "local",
"autoUpdate": false,
"updateChannel": "stable",
"confirmOverwrites": true,
"yoloMode": false
},
"ides": {
"opencode": {
"enabled": true,
"path": ".opencode",
"profile": "developer"
},
"cursor": {
"enabled": false,
"path": ".cursor",
"profile": "developer"
}
},
"agents": {
"behavior": {
"approvalGates": true,
"contextLoading": "lazy",
"delegationThreshold": 4
},
"permissions": {
"bash": "approve",
"write": "approve",
"edit": "approve",
"task": "approve"
}
},
"context": {
"locations": [
".opencode/context",
".claude/context",
"docs/context"
],
"autoDiscover": true,
"cacheEnabled": true
}
}
Commands:
oac configure # Interactive wizard
oac configure set agents.permissions.bash auto
oac configure get ides.opencode.enabled
oac configure show
oac configure reset
3. User Approval & YOLO Mode (CRITICAL)
Goal: User maintains full control over their project, with optional fast mode
Default Behavior: Interactive Approval
Every operation that modifies files asks for confirmation:
# User runs in project root
cd ~/my-project
oac install opencode
# OAC asks:
? Install location:
> Local (this project: ~/my-project/.opencode)
Global (~/.config/oac)
# User selects "Local"
# OAC shows what will be installed:
📦 Installing OpenCode Developer Profile
Will create/modify:
✓ .opencode/agent/core/openagent.md
✓ .opencode/agent/core/opencoder.md
⚠ .opencode/agent/subagents/code/test-engineer.md (exists - will overwrite)
✓ .opencode/context/core/standards/code-quality.md
✓ .opencode/config.json
Total: 15 files (2 new, 12 updated, 1 conflict)
? Proceed with installation? (Y/n)
# If conflicts exist:
⚠ File exists: .opencode/agent/subagents/code/test-engineer.md
Current: 245 lines, modified 2 days ago
New: 312 lines, version 0.8.0
? What would you like to do?
> Skip (keep existing)
Overwrite (replace with new)
Backup (save as .bak, install new)
Diff (show changes)
Skip all conflicts
Overwrite all conflicts
YOLO Mode: Fast & Furious
Skip all confirmations, auto-resolve conflicts, report at end:
# Enable YOLO mode
oac install opencode --yolo
# Or set in config
oac configure set preferences.yoloMode true
# YOLO mode behavior:
📦 Installing OpenCode Developer Profile (YOLO MODE)
⚡ Auto-confirming all operations...
✓ Created .opencode/agent/core/openagent.md
✓ Created .opencode/agent/core/opencoder.md
⚠ Overwrote .opencode/agent/subagents/code/test-engineer.md (backed up to .bak)
✓ Created .opencode/context/core/standards/code-quality.md
✓ Created .opencode/config.json
✅ Installation complete!
📊 Summary:
- 13 files created
- 2 files overwritten (backups in .opencode/.backups/)
- 0 files skipped
- Total time: 1.2s
⚠ Review changes: git diff
Conflict Resolution Strategies
enum ConflictStrategy {
ASK = 'ask', // Ask user for each conflict (default)
SKIP = 'skip', // Skip all conflicts, keep existing
OVERWRITE = 'overwrite', // Overwrite all conflicts
BACKUP = 'backup', // Backup existing, install new
YOLO = 'yolo' // Auto-resolve (backup + overwrite)
}
Configuration
{
"preferences": {
"confirmOverwrites": true,
"yoloMode": false,
"conflictStrategy": "ask",
"autoBackup": true,
"backupLocation": ".opencode/.backups"
}
}
Commands with Approval Control
# Interactive (default)
oac install opencode
oac update
oac add agent:rust-specialist
# YOLO mode (skip confirmations)
oac install opencode --yolo
oac update --yolo
oac add agent:rust-specialist --yolo
# Force overwrite (no backups)
oac install opencode --force
# Skip conflicts (keep existing)
oac install opencode --skip-existing
# Dry run (show what would happen)
oac install opencode --dry-run
Safety Features
- ✅ Always create backups before overwriting (unless
--force) - ✅ Show diff before overwriting
- ✅ Maintain backup history in
.opencode/.backups/ - ✅ Git integration: detect uncommitted changes, warn user
- ✅ Rollback support:
oac rollbackto undo last operation - ✅ Audit log:
.oac/audit.logtracks all operations
Example: Full Interactive Flow
cd ~/my-awesome-project
oac install opencode
# Step 1: Location
? Install location:
> Local (this project: ~/my-awesome-project/.opencode)
Global (~/.config/oac)
# Step 2: Profile
? Select profile:
> developer (Full development setup)
essential (Minimal setup)
business (Content and product focus)
custom (Choose components)
# Step 3: Review
📦 Installing OpenCode Developer Profile
Will install to: ~/my-awesome-project/.opencode
Components:
- 2 core agents (openagent, opencoder)
- 8 subagents (tester, reviewer, coder-agent, ...)
- 7 commands (commit, test, context, ...)
- 15 context files
Total size: ~2.5 MB
? Proceed? (Y/n) y
# Step 4: Conflict Resolution (if any)
⚠ 3 files already exist:
1. .opencode/agent/subagents/code/test-engineer.md
Current: 245 lines, modified 2 days ago
New: 312 lines, version 0.8.0
? Action:
> Backup and overwrite
Skip (keep existing)
Show diff
# Step 5: Installation
⚡ Installing...
✓ Created .opencode/agent/core/openagent.md
✓ Created .opencode/agent/core/opencoder.md
⚠ Backed up .opencode/agent/subagents/code/test-engineer.md → .backups/TestEngineer.md.2026-02-14
✓ Overwrote .opencode/agent/subagents/code/test-engineer.md
...
# Step 6: Summary
✅ Installation complete!
📊 Summary:
- 13 files created
- 2 files updated
- 3 files backed up
- 0 files skipped
📁 Installed to: ~/my-awesome-project/.opencode
🔍 Next steps:
1. Review changes: git diff
2. Test setup: oac doctor
3. Configure: oac configure
💡 Tip: Use 'oac --yolo' to skip confirmations next time
4. Community Component Registry (shadcn-like)
Goal: Enable users to create and share custom agents, skills, and contexts
Registry Structure:
{
"version": "1.0.0",
"official": {
"agents": [...],
"skills": [...],
"contexts": [...]
},
"community": {
"agents": [
{
"id": "rust-specialist",
"name": "Rust Specialist",
"author": "community-user",
"source": "https://github.com/user/oac-rust-specialist",
"version": "1.0.0",
"downloads": 1234,
"verified": false
}
]
}
}
Commands:
# Add component from registry
oac add agent:rust-specialist
# Add from GitHub URL
oac add https://github.com/user/oac-rust-specialist
# Add from local path
oac add ./my-custom-agent
# List available community components
oac browse agents
oac browse skills
# Publish your component
oac publish ./my-agent --type agent
# Search registry
oac search "rust"
Component Package Format:
my-custom-agent/
├── oac.json # Component metadata
├── agent.md # Agent prompt
├── tests/ # Optional tests
│ └── smoke-test.yaml
├── context/ # Optional context files
│ └── rust-patterns.md
└── README.md # Documentation
oac.json Schema:
{
"name": "rust-specialist",
"version": "1.0.0",
"type": "agent",
"description": "Expert in Rust programming",
"author": "username",
"license": "MIT",
"repository": "https://github.com/user/oac-rust-specialist",
"keywords": ["rust", "systems", "programming"],
"dependencies": {
"agents": [],
"skills": [],
"contexts": ["core/standards/code-quality"]
},
"files": {
"agent": "agent.md",
"tests": "tests/",
"context": "context/"
}
}
4. Context Resolution System (CRITICAL)
Goal: Intelligent context resolution for agents running locally or globally
The Problem:
- Agents can run from global install (
~/.config/oac/) or local install (./opencode/) - Context files exist in project-specific locations AND global locations
- Need to resolve: "Which context file should the agent use?"
- User preferences (global) vs project requirements (local)
The Solution: Layered Context Resolution
Context Layers (Priority Order)
1. PROJECT OVERRIDE (./.oac/context/) [Highest Priority]
↓ User's project-specific overrides
2. PROJECT CONTEXT (./.opencode/context/)
↓ Project-specific context files
3. IDE CONTEXT (./.cursor/context/, ./.claude/context/)
↓ IDE-specific context (if different IDE)
4. PROJECT DOCS (./docs/, ./docs/context/)
↓ Project documentation
5. USER GLOBAL (~/.config/oac/context/)
↓ User's personal preferences/standards
6. OAC GLOBAL (~/.config/oac/official/) [Lowest Priority]
↓ Official OAC context files
Resolution Algorithm
class ContextResolver {
async resolve(ref: string, options: ResolveOptions): Promise<string | null> {
const {
agentLocation, // 'global' | 'local'
projectRoot, // Current working directory
preferLocal // User preference
} = options;
// Build search paths based on agent location and preferences
const searchPaths = this.buildSearchPaths(agentLocation, projectRoot, preferLocal);
// Search in priority order
for (const basePath of searchPaths) {
const fullPath = path.join(basePath, ref);
if (await fs.pathExists(fullPath)) {
return fullPath;
}
}
return null; // Not found
}
private buildSearchPaths(
agentLocation: 'global' | 'local',
projectRoot: string,
preferLocal: boolean
): string[] {
const paths: string[] = [];
// If agent is running locally OR user prefers local context
if (agentLocation === 'local' || preferLocal) {
// Prioritize project context
paths.push(
path.join(projectRoot, '.oac/context'), // Project override
path.join(projectRoot, '.opencode/context'), // Project context
path.join(projectRoot, '.cursor/context'), // IDE context
path.join(projectRoot, '.claude/context'),
path.join(projectRoot, 'docs/context'), // Project docs
path.join(projectRoot, 'docs')
);
}
// Always include global context (fallback)
paths.push(
path.join(os.homedir(), '.config/oac/context'), // User global
path.join(os.homedir(), '.config/oac/official') // OAC official
);
// If agent is running globally AND user prefers global
if (agentLocation === 'global' && !preferLocal) {
// Reverse priority: global first, then project
return [
path.join(os.homedir(), '.config/oac/context'),
path.join(os.homedir(), '.config/oac/official'),
...paths.slice(0, -2) // Add project paths after global
];
}
return paths;
}
}
Configuration
{
"context": {
"resolution": {
"preferLocal": true, // Prefer project context over global
"allowOverrides": true, // Allow .oac/context/ overrides
"fallbackToGlobal": true, // Fall back to global if not found locally
"cacheResolution": true // Cache resolved paths
},
"locations": {
"project": [
".oac/context", // Project overrides (highest priority)
".opencode/context", // Project context
".cursor/context", // IDE-specific
".claude/context",
"docs/context", // Project docs
"docs"
],
"global": [
"~/.config/oac/context", // User global context
"~/.config/oac/official" // OAC official context
]
},
"autoDiscover": true,
"validation": {
"warnOnMissing": true,
"errorOnMissing": false,
"suggestAlternatives": true
}
}
}
Example Scenarios
Scenario 1: Agent runs locally, context exists in project
# User is in project directory
cd ~/my-project
# Agent runs locally
oac install opencode --local
# Agent needs: 'core/standards/code-quality.md'
# Resolution:
# 1. Check: ~/my-project/.oac/context/core/standards/code-quality.md ❌
# 2. Check: ~/my-project/.opencode/context/core/standards/code-quality.md ✅
# → Uses project-specific context
Scenario 2: Agent runs globally, no project context
# User is in project directory
cd ~/my-project
# Agent runs from global install
oac install opencode --global
# Agent needs: 'core/standards/code-quality.md'
# Resolution:
# 1. Check: ~/.config/oac/context/core/standards/code-quality.md ✅
# → Uses global context
Scenario 3: Project override
# User wants custom code quality standards for this project
mkdir -p ~/my-project/.oac/context/core/standards
cp ~/.config/oac/official/core/standards/code-quality.md \
~/my-project/.oac/context/core/standards/code-quality.md
# Edit project-specific version
vim ~/my-project/.oac/context/core/standards/code-quality.md
# Agent needs: 'core/standards/code-quality.md'
# Resolution:
# 1. Check: ~/my-project/.oac/context/core/standards/code-quality.md ✅
# → Uses project override (highest priority)
Scenario 4: Mixed context (project + global)
# Project has some context
~/my-project/.opencode/context/
└── project/
└── architecture.md
# Global has standard context
~/.config/oac/official/
└── core/
└── standards/
└── code-quality.md
# Agent needs both:
# - 'project/architecture.md' → Found in project ✅
# - 'core/standards/code-quality.md' → Falls back to global ✅
Context Merging (Advanced)
For certain context types, we can merge instead of override:
interface ContextMergeStrategy {
type: 'override' | 'merge' | 'append';
mergeKey?: string; // For merge strategy
}
// Example: Merge project and global standards
const merged = await contextResolver.resolveWithMerge(
'core/standards/code-quality.md',
{
strategy: 'merge',
mergeKey: 'standards', // Merge 'standards' sections
preferLocal: true // Local takes precedence on conflicts
}
);
// Result:
// - Global standards: base rules
// - Project standards: additional/override rules
// - Final: combined ruleset
CLI Commands for Context Management
# Show context resolution for a reference
oac context resolve 'core/standards/code-quality.md'
→ Resolved to: ~/my-project/.opencode/context/core/standards/code-quality.md
→ Source: project
→ Fallbacks checked: 2
# List all available context files
oac context list
--local # Project context only
--global # Global context only
--all # All (default)
--tree # Show as tree
# Validate context references
oac context validate
→ Checking 45 context references...
✓ 42 resolved
⚠ 3 missing (using fallbacks)
# Create project override
oac context override 'core/standards/code-quality.md'
→ Copied from: ~/.config/oac/official/core/standards/code-quality.md
→ To: ~/my-project/.oac/context/core/standards/code-quality.md
→ Edit this file to customize for your project
# Show context sources
oac context sources
Project Context:
.oac/context/ (2 files)
.opencode/context/ (15 files)
docs/ (8 files)
Global Context:
~/.config/oac/context/ (5 files)
~/.config/oac/official/ (42 files)
Total: 72 context files
# Sync global context to project
oac context sync --to-project
→ Copying global context to project...
✓ Copied 42 files to .opencode/context/
# Sync project context to global
oac context sync --to-global
→ Copying project context to global...
⚠ This will affect all projects using global context
? Proceed? (y/N)
Agent Context Loading
Agents need to know where they're running from:
// In agent prompt or configuration
class AgentContext {
location: 'global' | 'local';
projectRoot: string | null;
contextResolver: ContextResolver;
async loadContext(ref: string): Promise<string> {
const resolved = await this.contextResolver.resolve(ref, {
agentLocation: this.location,
projectRoot: this.projectRoot || process.cwd(),
preferLocal: true
});
if (!resolved) {
throw new Error(`Context not found: ${ref}`);
}
return fs.readFile(resolved, 'utf-8');
}
}
Environment Variables
# Override context resolution behavior
OAC_CONTEXT_PREFER_LOCAL=true # Prefer project context
OAC_CONTEXT_PREFER_GLOBAL=true # Prefer global context
OAC_CONTEXT_PROJECT_ROOT=/path/to/project
OAC_CONTEXT_GLOBAL_ROOT=~/.config/oac
OAC_CONTEXT_CACHE_ENABLED=true
OAC_CONTEXT_VALIDATION=strict # strict | warn | off
Visual Representation
Agent Running Locally (in ~/my-project):
┌─────────────────────────────────────────┐
│ Agent: openagent (local) │
│ Working Dir: ~/my-project │
└─────────────────────────────────────────┘
↓
Needs: 'core/standards/code-quality.md'
↓
┌─────────────────────────────────────────┐
│ Context Resolver │
│ Mode: preferLocal = true │
└─────────────────────────────────────────┘
↓
Search Priority:
1. ~/my-project/.oac/context/... ❌
2. ~/my-project/.opencode/context/... ✅ FOUND
3. (skip remaining)
↓
Returns: ~/my-project/.opencode/context/core/standards/code-quality.md
Agent Running Globally:
┌─────────────────────────────────────────┐
│ Agent: openagent (global) │
│ Working Dir: ~/my-project │
└─────────────────────────────────────────┘
↓
Needs: 'core/standards/code-quality.md'
↓
┌─────────────────────────────────────────┐
│ Context Resolver │
│ Mode: preferLocal = true (default) │
└─────────────────────────────────────────┘
↓
Search Priority:
1. ~/my-project/.oac/context/... ❌
2. ~/my-project/.opencode/context/... ❌
3. ~/.config/oac/context/... ❌
4. ~/.config/oac/official/... ✅ FOUND
↓
Returns: ~/.config/oac/official/core/standards/code-quality.md
Best Practices
For Users:
- ✅ Use global context for personal coding standards
- ✅ Use project context for project-specific requirements
- ✅ Use
.oac/context/for temporary overrides - ✅ Keep project context in version control
- ✅ Keep global context private (personal preferences)
For Projects:
- ✅ Include essential context in
.opencode/context/ - ✅ Document required context files in README
- ✅ Use
oac context validatein CI/CD - ✅ Provide
.oac/context/examples for common overrides
For OAC:
- ✅ Ship official context in
~/.config/oac/official/ - ✅ Never modify user's global context without permission
- ✅ Warn when context is missing
- ✅ Suggest alternatives when context not found
5. Version Management & Updates
Goal: Keep agents and components up-to-date across all IDEs
# Check for updates
oac update --check
# Update all components
oac update
# Update and apply to specific IDE
oac update --claude --global
oac update --opencode --local
# Update specific component
oac update agent:openagent
# Update from specific version
oac update --version 0.8.0
# Rollback to previous version
oac rollback agent:openagent
Update Flow:
- Fetch latest registry from GitHub
- Compare with local cache
- Show available updates
- Download updated components
- Apply to configured IDEs
- Validate installation
5. Agent Customization & Personal Presets (CRITICAL)
Goal: Allow users to view, customize, and save personal agent configurations
The Problem:
- Users want to customize agent prompts for their workflow
- Users want to save personal presets
- Updates shouldn't overwrite customizations
- Need easy way to view and edit agent configs
The Solution: Multi-Layer Customization System
Layer 1: View Agent Configuration
# View agent prompt and config
oac show agent:openagent
→ Opens agent file in pager (less/bat)
→ Shows: prompt, config, metadata
# View in editor
oac edit agent:openagent
→ Opens in $EDITOR (vim/vscode/etc.)
→ Read-only by default (shows warning)
# View config only
oac config show agent:openagent
→ Shows just the configuration (YAML frontmatter)
# Export agent
oac export agent:openagent --output ./my-openagent.md
→ Exports to file for inspection
Layer 2: Create Personal Preset
# Create personal preset (copy to user space)
oac customize agent:openagent
? What would you like to customize?
> Create personal preset (recommended)
Edit in place (advanced)
Fork to new agent
? Preset name: my-openagent
? Description: My customized OpenAgent with stricter approval gates
✓ Created preset: ~/.config/oac/presets/agents/my-openagent.md
✓ Linked to: agent:openagent (base)
📝 Edit your preset:
oac edit preset:my-openagent
💡 Use your preset:
oac use preset:my-openagent
Preset Structure:
~/.config/oac/
├── presets/
│ ├── agents/
│ │ ├── my-openagent.md # User's custom version
│ │ ├── my-opencoder.md
│ │ └── strict-reviewer.md
│ ├── skills/
│ │ └── my-git-workflow.md
│ └── .presets.json # Preset metadata
Preset Metadata (.presets.json):
{
"presets": {
"my-openagent": {
"type": "agent",
"base": "agent:openagent",
"baseVersion": "0.7.1",
"created": "2026-02-14T10:30:00Z",
"modified": "2026-02-14T15:45:00Z",
"customizations": [
"Modified approval gates",
"Added custom context paths",
"Changed delegation threshold"
],
"autoUpdate": false,
"updateStrategy": "manual"
}
}
}
Layer 3: Edit Personal Preset
# Edit preset in default editor
oac edit preset:my-openagent
→ Opens ~/.config/oac/presets/agents/my-openagent.md in $EDITOR
# Edit with specific editor
oac edit preset:my-openagent --editor code
→ Opens in VS Code
# Interactive customization wizard
oac customize preset:my-openagent --interactive
? What would you like to customize?
✓ Approval gates behavior
✓ Context loading strategy
☐ Delegation threshold
☐ Tool permissions
? Approval gates:
> Always ask (current)
Auto-approve reads
YOLO mode by default
? Context loading:
> Lazy (current)
Eager (load all upfront)
Manual (user specifies)
✓ Updated preset: my-openagent
✓ Changes saved to ~/.config/oac/presets/agents/my-openagent.md
Layer 4: Use Personal Preset
# Use preset instead of base agent
oac use preset:my-openagent
→ Activates preset in current project
# Use preset globally
oac use preset:my-openagent --global
→ Sets as default for all projects
# Use preset for specific IDE
oac use preset:my-openagent --ide opencode
→ Applies to OpenCode only
# List active presets
oac presets list --active
opencode: preset:my-openagent
cursor: agent:openagent (base)
claude: preset:strict-reviewer
# Switch back to base
oac use agent:openagent
→ Deactivates preset, uses base agent
Layer 5: Update Management (CRITICAL)
Problem: Updates shouldn't overwrite user customizations
Solution: Smart update strategy with user control
# Check for updates to base agent
oac update --check
📦 Updates Available:
agent:openagent (base for preset:my-openagent)
Current: 0.7.1
Latest: 0.8.0
Changes:
- Added new context loading patterns
- Improved delegation logic
- Fixed approval gate bug
⚠️ You have a personal preset based on this agent
? How would you like to update?
> Review changes first (recommended)
Update base, keep my customizations
Update base, merge my customizations
Skip this update
Auto-update base (don't ask again)
# Review changes before updating
oac diff agent:openagent 0.7.1 0.8.0
→ Shows diff between versions
# Update with merge strategy
oac update agent:openagent --merge-preset my-openagent
⚡ Updating agent:openagent (0.7.1 → 0.8.0)
📝 Merging with preset:my-openagent...
✓ Base agent updated
⚠️ Conflicts detected in preset:
Section: Approval Gates
Base (new): "Always ask before execution"
Your preset: "Auto-approve read operations"
? Keep your customization? (Y/n) y
✓ Preset updated with merge
✓ Backup saved: ~/.config/oac/presets/.backups/my-openagent.2026-02-14.md
📊 Summary:
- Base agent: Updated to 0.8.0
- Your preset: Merged (3 conflicts resolved)
- Customizations: Preserved
Update Strategies:
enum PresetUpdateStrategy {
MANUAL = 'manual', // User reviews every update
AUTO_BASE = 'auto-base', // Auto-update base, keep preset unchanged
AUTO_MERGE = 'auto-merge', // Auto-merge, prompt on conflicts
LOCKED = 'locked' // Never update base
}
Configuration:
{
"presets": {
"my-openagent": {
"updateStrategy": "manual",
"autoUpdate": false,
"mergeStrategy": {
"onConflict": "ask", // ask | keep-mine | keep-theirs
"backupOnMerge": true,
"maxBackups": 10
}
}
}
}
Layer 6: Preset Sharing
# Export preset for sharing
oac export preset:my-openagent --output ./my-openagent-preset.md
→ Exports with metadata
# Share preset with team
oac share preset:my-openagent
→ Generates shareable link or file
# Import preset from teammate
oac import preset ./teammate-preset.md
→ Imports as new preset
# Publish preset to community
oac publish preset:my-openagent --public
→ Publishes to community registry (optional)
Layer 7: In-Place Editing (Advanced)
Warning: Editing installed agents directly is risky
# Edit installed agent (not recommended)
oac edit agent:openagent --in-place
⚠️ WARNING: Editing installed agent directly
This will modify the installed agent file.
Updates will overwrite your changes.
Recommended: Create a preset instead
oac customize agent:openagent
? Are you sure you want to edit in-place? (y/N) n
# Force in-place edit (advanced users)
oac edit agent:openagent --in-place --force
⚠️ Editing: .opencode/agent/core/openagent.md
⚠️ Changes will be overwritten on update
⚠️ Creating backup: (example: .opencode/.backups/openagent.md.2026-02-14)
[Opens in editor]
✓ Saved changes
⚠️ Remember: Updates will overwrite this file
💡 Tip: Create a preset to preserve customizations
CLI Commands Summary
# View
oac show agent:openagent # View agent
oac config show agent:openagent # View config only
oac export agent:openagent # Export to file
# Customize
oac customize agent:openagent # Create preset (wizard)
oac edit preset:my-openagent # Edit preset
oac customize preset:my-openagent --interactive # Interactive wizard
# Use
oac use preset:my-openagent # Activate preset
oac use preset:my-openagent --global # Set as default
oac presets list # List presets
oac presets list --active # Show active presets
# Update
oac update --check # Check for updates
oac diff agent:openagent 0.7.1 0.8.0 # Show changes
oac update agent:openagent --merge-preset my-openagent
# Share
oac export preset:my-openagent # Export preset
oac import preset ./preset.md # Import preset
oac share preset:my-openagent # Share with team
oac publish preset:my-openagent # Publish to community
# Advanced
oac edit agent:openagent --in-place # Edit installed agent (risky)
oac fork agent:openagent my-agent # Fork to new agent
Configuration Schema
{
"presets": {
"enabled": true,
"location": "~/.config/oac/presets",
"defaultUpdateStrategy": "manual",
"backupOnEdit": true,
"maxBackups": 10,
"warnOnInPlaceEdit": true
},
"customization": {
"allowInPlaceEdit": true,
"requireConfirmation": true,
"autoBackup": true,
"showDiffOnUpdate": true
}
}
Preset File Format
---
# Preset Metadata
preset:
name: my-openagent
base: agent:openagent
baseVersion: 0.7.1
type: agent
created: 2026-02-14T10:30:00Z
modified: 2026-02-14T15:45:00Z
# Customizations
customizations:
- section: "Approval Gates"
description: "Auto-approve read operations"
- section: "Context Loading"
description: "Changed to eager loading"
# Update Strategy
update:
strategy: manual
autoUpdate: false
mergeStrategy: ask
---
# My Custom OpenAgent
[Your customized agent prompt here]
<!-- CUSTOMIZATION: Approval Gates -->
**Modified Behavior**: Auto-approve read operations (glob, read, grep)
<!-- END CUSTOMIZATION -->
[Rest of agent prompt...]
Visual Workflow
User wants to customize agent:openagent
↓
oac customize agent:openagent
↓
┌─────────────────────────────┐
│ Create Personal Preset │
│ │
│ Name: my-openagent │
│ Base: agent:openagent │
│ Location: ~/.config/oac/ │
└─────────────────────────────┘
↓
Copy base agent to preset location
↓
┌─────────────────────────────┐
│ Edit Preset │
│ │
│ oac edit preset:my-openagent│
│ [Opens in $EDITOR] │
└─────────────────────────────┘
↓
User makes changes, saves
↓
┌─────────────────────────────┐
│ Activate Preset │
│ │
│ oac use preset:my-openagent │
└─────────────────────────────┘
↓
Preset is now active
↓
Base agent updates (0.7.1 → 0.8.0)
↓
┌─────────────────────────────┐
│ Update Check │
│ │
│ ⚠️ Preset based on updated │
│ agent │
│ │
│ ? How to update? │
│ > Review changes │
│ Merge │
│ Skip │
└─────────────────────────────┘
↓
User reviews diff
↓
┌─────────────────────────────┐
│ Merge Strategy │
│ │
│ Conflicts: │
│ - Approval gates (yours) │
│ - Context loading (theirs) │
│ │
│ ? Keep your changes? Y/n │
└─────────────────────────────┘
↓
Preset updated with merge
Backup created
Customizations preserved
Best Practices
For Users:
- ✅ Always create presets instead of editing in-place
- ✅ Use descriptive preset names
- ✅ Document your customizations in preset metadata
- ✅ Review updates before merging
- ✅ Keep backups of important presets
For OAC:
- ✅ Default to preset creation (safest)
- ✅ Warn loudly on in-place edits
- ✅ Always create backups before updates
- ✅ Show clear diffs before merging
- ✅ Preserve user customizations by default
- ✅ Make it easy to revert to base agent
Edge Cases Handled
-
User edits in-place, then update arrives
- Detect local modifications
- Warn user
- Offer to create preset from modifications
- Backup before overwriting
-
Preset based on old version, multiple updates behind
- Show all changes since preset creation
- Offer step-by-step merge or bulk merge
- Highlight breaking changes
-
User has multiple presets for same base agent
- Allow multiple presets
- Each preset tracks its own base version
- Update each independently
-
Preset conflicts with IDE limitations
- Warn if preset won't work with IDE
- Suggest compatible alternatives
- Auto-adapt if possible
-
User deletes base agent but has preset
- Preset becomes standalone
- Warn that updates won't work
- Offer to reinstall base
6. IDE Feature Parity & Capacity Management (CRITICAL)
Goal: Support different feature sets per IDE based on their capabilities
The Problem:
- Different IDEs support different features
- OpenCode and Claude Code: Full feature support (agents, skills, context, plugins, tools)
- Cursor: Limited (single .cursorrules file, no skills/plugins)
- Windsurf: Partial support
- Need to gracefully handle unsupported features
Feature Support Matrix:
interface IDECapabilities {
id: string;
name: string;
features: {
multipleAgents: boolean;
skills: boolean;
plugins: boolean;
tools: boolean;
contexts: boolean;
commands: boolean;
granularPermissions: boolean;
hooks: boolean;
};
limits?: {
maxAgents?: number;
maxFileSize?: number;
maxContextFiles?: number;
};
}
const IDE_CAPABILITIES: Record<string, IDECapabilities> = {
opencode: {
id: 'opencode',
name: 'OpenCode',
features: {
multipleAgents: true,
skills: true,
plugins: true,
tools: true,
contexts: true,
commands: true,
granularPermissions: true,
hooks: true
}
// No limits - full support
},
claude: {
id: 'claude',
name: 'Claude Code',
features: {
multipleAgents: true,
skills: true,
plugins: true,
tools: true,
contexts: true,
commands: false,
granularPermissions: false,
hooks: true
}
// Full support except commands and granular permissions
},
cursor: {
id: 'cursor',
name: 'Cursor IDE',
features: {
multipleAgents: false, // Single .cursorrules file
skills: false,
plugins: false,
tools: false,
contexts: true, // Embedded in .cursorrules
commands: false,
granularPermissions: false,
hooks: false
},
limits: {
maxAgents: 1, // Merge all agents into one
maxFileSize: 100000 // ~100KB limit for .cursorrules
}
},
windsurf: {
id: 'windsurf',
name: 'Windsurf',
features: {
multipleAgents: true,
skills: false,
plugins: false,
tools: false,
contexts: true,
commands: false,
granularPermissions: false,
hooks: false
},
limits: {
maxAgents: 10
}
}
};
Feature Detection & Warnings:
# User tries to install skill for Cursor
oac install cursor --profile developer
⚠ Feature Compatibility Warning:
IDE: Cursor
Profile: developer
Unsupported features in this profile:
❌ Skills (8 skills will be skipped)
❌ Plugins (2 plugins will be skipped)
❌ Commands (7 commands will be skipped)
⚠ Multiple agents (2 agents will be merged into .cursorrules)
Supported features:
✓ Agents (will merge into single .cursorrules)
✓ Contexts (will embed in .cursorrules)
? How would you like to proceed?
> Continue with supported features only
Cancel installation
Show detailed compatibility report
Create custom profile for Cursor
# Detailed compatibility report
oac compatibility cursor --profile developer
IDE Compatibility Report: Cursor
Profile: developer
┌─────────────────────┬──────────┬────────────────────────┐
│ Feature │ Status │ Action │
├─────────────────────┼──────────┼────────────────────────┤
│ Agents (2) │ ⚠ Merge │ Combine into .cursorrules │
│ Subagents (8) │ ⚠ Merge │ Combine into .cursorrules │
│ Skills (8) │ ❌ Skip │ Not supported │
│ Plugins (2) │ ❌ Skip │ Not supported │
│ Commands (7) │ ❌ Skip │ Not supported │
│ Contexts (15) │ ✓ Embed │ Embed in .cursorrules │
│ Tools (3) │ ❌ Skip │ Not supported │
└─────────────────────┴──────────┴────────────────────────┘
Estimated .cursorrules size: 45KB (within 100KB limit)
Recommendations:
• Use OpenCode or Claude Code for full feature support
• Create Cursor-specific profile with essential agents only
• Consider using oac create profile --for cursor
Adaptive Installation:
class AdaptiveInstaller {
async install(ide: string, profile: string, options: InstallOptions) {
const capabilities = IDE_CAPABILITIES[ide];
const components = await this.loadProfile(profile);
// Filter components based on IDE capabilities
const supported = this.filterByCapabilities(components, capabilities);
const unsupported = components.filter(c => !supported.includes(c));
// Warn user about unsupported features
if (unsupported.length > 0 && !options.yolo) {
const proceed = await this.warnUnsupportedFeatures(
ide,
supported,
unsupported,
capabilities
);
if (!proceed) {
return { cancelled: true };
}
}
// Apply transformations for IDE-specific limitations
const transformed = await this.transformForIDE(supported, capabilities);
// Install
return this.installComponents(transformed, ide, options);
}
private filterByCapabilities(
components: Component[],
capabilities: IDECapabilities
): Component[] {
return components.filter(component => {
switch (component.type) {
case 'agent':
case 'subagent':
return capabilities.features.multipleAgents ||
components.filter(c => c.type === 'agent').length === 1;
case 'skill':
return capabilities.features.skills;
case 'plugin':
return capabilities.features.plugins;
case 'tool':
return capabilities.features.tools;
case 'context':
return capabilities.features.contexts;
case 'command':
return capabilities.features.commands;
default:
return false;
}
});
}
private async transformForIDE(
components: Component[],
capabilities: IDECapabilities
): Promise<Component[]> {
// Special handling for Cursor: merge all agents
if (capabilities.id === 'cursor') {
const agents = components.filter(c => c.type === 'agent' || c.type === 'subagent');
const contexts = components.filter(c => c.type === 'context');
// Merge agents into single .cursorrules
const merged = await this.mergeAgentsForCursor(agents, contexts);
return [merged];
}
return components;
}
}
IDE-Specific Profiles:
# Create profile optimized for specific IDE
oac create profile --for cursor --name cursor-essentials
? Select components for Cursor profile:
Agents (select up to 3 - will be merged):
✓ openagent
✓ opencoder
✓ frontend-specialist
Contexts (will be embedded):
✓ core/standards/code-quality
✓ development/react-patterns
⚠ Skills, plugins, and commands are not supported by Cursor
✓ Created profile: cursor-essentials
✓ Estimated .cursorrules size: 32KB
✓ Compatible with Cursor IDE
# List IDE-specific profiles
oac profiles --for cursor
cursor-essentials
cursor-minimal
cursor-frontend
# Install IDE-specific profile
oac install cursor --profile cursor-essentials
Component Creation with IDE Support:
# Create component with IDE compatibility info
oac create agent rust-specialist
? Which IDEs should support this agent?
✓ OpenCode (full support)
✓ Claude Code (full support)
✓ Cursor (will be merged with other agents)
✓ Windsurf (full support)
? Agent size optimization:
> Standard (no optimization)
Compact (optimize for Cursor's file size limit)
Minimal (essential instructions only)
✓ Created agent with multi-IDE support
✓ Estimated sizes:
- OpenCode: 15KB (standalone)
- Claude Code: 15KB (standalone)
- Cursor: +15KB (merged into .cursorrules)
- Windsurf: 15KB (standalone)
Capacity Warnings:
# Installing too many components for Cursor
oac install cursor --profile developer
⚠ Capacity Warning:
IDE: Cursor
Limit: 100KB for .cursorrules
Current profile size: 125KB
❌ Exceeds limit by 25KB
? How would you like to proceed:
> Remove optional components (interactive)
Use compact mode (reduce file sizes)
Create custom profile
Cancel installation
# Interactive component selection
? Select components to include (max 100KB):
Core (required):
✓ openagent (12KB)
✓ opencoder (15KB)
Specialists (optional):
✓ frontend-specialist (18KB)
✓ devops-specialist (16KB)
☐ data-analyst (14KB)
☐ copywriter (12KB)
Contexts:
✓ core/standards (8KB)
✓ development/patterns (12KB)
Current: 81KB / 100KB
Remaining: 19KB
CLI Commands for IDE Management:
# Check IDE compatibility
oac compatibility <ide>
--profile <profile> # Check profile compatibility
--component <component> # Check component compatibility
# List supported IDEs
oac ides
--features # Show feature matrix
--limits # Show capacity limits
# Show IDE capabilities
oac ide info <ide>
→ Shows full feature support matrix
# Optimize for IDE
oac optimize --for <ide>
→ Optimizes current installation for IDE
→ Removes unsupported features
→ Compacts files if needed
# Validate IDE installation
oac validate --ide <ide>
→ Checks if installation is valid for IDE
→ Warns about unsupported features
→ Checks capacity limits
Configuration:
{
"ides": {
"opencode": {
"enabled": true,
"path": ".opencode",
"profile": "developer",
"features": "all"
},
"cursor": {
"enabled": true,
"path": ".cursor",
"profile": "cursor-essentials",
"features": "auto-detect",
"optimization": {
"mergeAgents": true,
"embedContexts": true,
"compactMode": true,
"maxFileSize": 100000
}
},
"claude": {
"enabled": true,
"path": ".claude",
"profile": "developer",
"features": "all"
}
},
"compatibility": {
"warnUnsupported": true,
"autoOptimize": false,
"strictMode": false
}
}
Best Practices:
For Full Features (OpenCode, Claude Code):
- ✅ Use standard profiles (developer, business, etc.)
- ✅ Install all component types
- ✅ No optimization needed
For Limited IDEs (Cursor):
- ✅ Create IDE-specific profiles
- ✅ Keep agent count low (1-3 agents)
- ✅ Use compact mode
- ✅ Embed contexts instead of separate files
- ✅ Monitor file size limits
For All IDEs:
- ✅ Check compatibility before installing:
oac compatibility <ide> - ✅ Use
--dry-runto preview changes - ✅ Create custom profiles for specific needs
- ✅ Validate after installation:
oac validate --ide <ide>
CLI Commands Reference
CRITICAL: All commands run in project root directory. User chooses local (project) or global install.
Installation & Setup
# Initialize OAC in current directory (interactive)
oac init [profile]
--local # Force local install (./opencode)
--global # Force global install (~/.config/oac)
--yolo # Skip all confirmations
--dry-run # Show what would happen
# Install for specific IDE (asks local/global)
oac install [ide]
--local # Install to current directory
--global # Install to global config
--profile <name> # Use specific profile
--yolo # Auto-confirm all
--skip-existing # Skip conflicts, keep existing
--force # Overwrite all, no backups
--dry-run # Preview changes
# Configure OAC settings
oac configure
set <key> <value> # Set config value
get <key> # Get config value
show # Show all config
reset # Reset to defaults
Component Management
# Add component from registry (asks local/global)
oac add <component>
--local # Add to current project
--global # Add to global config
--yolo # Auto-confirm
--dry-run # Preview
# Remove component
oac remove <component>
--local # Remove from current project
--global # Remove from global
--yolo # Auto-confirm
# List installed components
oac list [--type]
--local # List local components
--global # List global components
--agents # List agents only
--skills # List skills only
--contexts # List contexts only
# Search registry
oac search <query>
--type <type> # Filter by type
--verified # Verified only
# Browse available components
oac browse [type]
--verified # Verified only
--community # Community only
Updates & Sync
# Update components (asks which to update)
oac update [options]
--check # Check for updates only
--all # Update all components
--local # Update local install
--global # Update global install
--claude # Apply to Claude Code
--opencode # Apply to OpenCode
--yolo # Auto-confirm all
--dry-run # Preview updates
# Apply config to IDE (asks for confirmation)
oac apply [ide]
--all # Apply to all configured IDEs
--yolo # Auto-confirm
--force # Overwrite all
--dry-run # Preview
# Sync across all IDEs
oac sync
--yolo # Auto-confirm
--dry-run # Preview
Creation & Scaffolding (Interactive)
# Interactive component creation wizard
oac create
? What would you like to create?
> Agent
Skill
Context
Plugin
Command
Tool
? Component type:
> agent
subagent
? Name: rust-specialist
? Description: Expert in Rust programming
? Category: development
✓ Created .opencode/agent/subagents/development/rust-specialist.md
✓ Created tests/smoke-test.yaml
✓ Added to registry
Next steps:
1. Edit agent prompt
2. Add tests
3. Test: oac test agent:rust-specialist
# Create specific component types
oac create agent [name]
--category <category> # Agent category
--template <template> # Use template
--with-tests # Include test scaffold
--interactive # Interactive wizard (default)
oac create skill [name]
--trigger <pattern> # Skill trigger pattern
--template <template>
oac create context [name]
--category <category>
--template <template>
oac create plugin [name]
--type <type> # Plugin type
# List available templates
oac templates
--type <type> # Filter by type
# Use template
oac create agent --template specialist
→ Uses specialist agent template
Publishing (Community)
# Publish component to registry
oac publish <path>
--type <type> # Component type
--dry-run # Validate only
# Remove from registry
oac unpublish <component>
# Validate component package
oac validate <path>
Utilities
# Check installation health
oac doctor
--local # Check local install
--global # Check global install
--fix # Auto-fix issues (asks confirmation)
# Clean cache and temp files
oac clean
--cache # Clean cache only
--backups # Clean backups only
--all # Clean everything
--yolo # Auto-confirm
# Rollback last operation
oac rollback
--steps <n> # Rollback n operations
--to <timestamp> # Rollback to timestamp
# Show version info
oac version
--check # Check for updates
# Show help
oac help [command]
Global Flags (All Commands)
--yolo # Skip all confirmations, auto-resolve conflicts
--dry-run # Show what would happen, don't execute
--verbose # Show detailed output
--quiet # Minimal output
--no-color # Disable colors
--json # Output as JSON
Architecture
Directory Structure
@nextsystems/oac/
├── bin/
│ └── oac.js # CLI entry point
├── src/
│ ├── cli/
│ │ ├── commands/ # CLI command implementations
│ │ │ ├── init.ts
│ │ │ ├── install.ts
│ │ │ ├── configure.ts
│ │ │ ├── add.ts
│ │ │ ├── update.ts
│ │ │ ├── apply.ts
│ │ │ ├── publish.ts
│ │ │ └── ...
│ │ ├── config/
│ │ │ ├── manager.ts # Configuration management
│ │ │ ├── schema.ts # Zod schemas
│ │ │ └── defaults.ts # Default configs
│ │ └── index.ts # CLI orchestrator
│ ├── core/
│ │ ├── registry/
│ │ │ ├── loader.ts # Load registry
│ │ │ ├── resolver.ts # Resolve dependencies
│ │ │ ├── validator.ts # Validate registry
│ │ │ └── publisher.ts # Publish components
│ │ ├── installer/
│ │ │ ├── component.ts # Install components
│ │ │ ├── profile.ts # Install profiles
│ │ │ └── ide.ts # IDE-specific setup
│ │ ├── updater/
│ │ │ ├── version.ts # Version checking
│ │ │ ├── fetcher.ts # Fetch updates
│ │ │ └── applier.ts # Apply updates
│ │ └── context/
│ │ ├── locator.ts # Find context files
│ │ ├── resolver.ts # Resolve paths
│ │ └── validator.ts # Validate refs
│ ├── adapters/
│ │ ├── base.ts # Base adapter
│ │ ├── opencode.ts # OpenCode adapter
│ │ ├── cursor.ts # Cursor adapter
│ │ ├── claude.ts # Claude Code adapter
│ │ └── windsurf.ts # Windsurf adapter
│ ├── types/
│ │ ├── registry.ts # Registry types
│ │ ├── config.ts # Config types
│ │ └── component.ts # Component types
│ └── utils/
│ ├── logger.ts # Logging
│ ├── spinner.ts # Progress indicators
│ └── prompts.ts # Interactive prompts
├── config/
│ ├── oac.config.json # Default config
│ └── ide-mappings.json # IDE mappings
├── .opencode/ # Existing structure
├── registry.json # Official registry
├── community-registry.json # Community registry
└── package.json
Technical Stack
Dependencies
{
"dependencies": {
"commander": "^12.0.0", // CLI framework
"inquirer": "^9.2.0", // Interactive prompts
"zod": "^3.22.0", // Schema validation
"chalk": "^5.3.0", // Terminal colors
"ora": "^8.0.0", // Spinners
"boxen": "^7.1.0", // Boxes
"table": "^6.8.0", // Tables
"fs-extra": "^11.2.0", // File system
"glob": "^10.3.0", // Pattern matching
"semver": "^7.6.0", // Version comparison
"node-fetch": "^3.3.0", // HTTP requests
"yaml": "^2.3.0", // YAML parsing
"tar": "^6.2.0", // Package extraction
"simple-git": "^3.22.0" // Git operations
}
}
Implementation Phases
Phase 1: Core CLI Infrastructure (Week 1)
Goal: Set up CLI framework and configuration system
Tasks:
- Set up TypeScript project in
src/ - Install dependencies (Commander, Zod, inquirer)
- Create configuration schema and manager
- Implement basic commands (init, configure, list)
- Write tests
Deliverables:
src/cli/index.tssrc/cli/config/manager.tssrc/cli/config/schema.tsoac configureworksoac listworks
Phase 2: Registry & Component Management (Week 2)
Goal: Component installation and management
Tasks:
- Port registry validation to TypeScript
- Implement registry loader and resolver
- Create component installer
- Implement profile installer
- Add dependency resolution
Deliverables:
src/core/registry/loader.tssrc/core/installer/component.tsoac install opencode --profile developerworks
Phase 3: IDE Adapters Integration (Week 3)
Goal: Multi-IDE support
Tasks:
- Move compatibility layer to
src/adapters/ - Implement IDE-specific installers
- Create adapter registry
- Implement
oac applycommand - Add IDE detection
Deliverables:
src/adapters/opencode.tssrc/adapters/cursor.tsoac apply cursorworks
Phase 4: Update System (Week 4)
Goal: Version management
Tasks:
- Create version checker
- Implement update fetcher
- Create update applier
- Implement
oac updatecommand - Add update notifications
Deliverables:
src/core/updater/version.tsoac update --checkworksoac update --claude --globalworks
Phase 5: Context System (Week 5)
Goal: Flexible context locations
Tasks:
- Create context locator service
- Implement context resolver
- Add context validator
- Update agents to use locator
- Add context discovery
Deliverables:
src/core/context/locator.ts- Context files resolve from multiple locations
Phase 6: Community Registry (Week 6)
Goal: shadcn-like component sharing
Tasks:
- Design component package format
- Implement
oac addcommand - Implement
oac publishcommand - Create community registry
- Add component validation
- Implement search and browse
Deliverables:
src/cli/commands/add.tssrc/cli/commands/publish.tssrc/core/registry/publisher.tsoac add agent:rust-specialistworksoac publish ./my-agentworks
Phase 7: Polish & Documentation (Week 7)
Goal: Production-ready package
Tasks:
- Add comprehensive error handling
- Improve CLI UX
- Write user documentation
- Create migration guide
- Update README
- Publish to npm
Deliverables:
docs/cli-reference.mddocs/configuration.mddocs/community-components.mddocs/migration-guide.md
Community Component Guidelines
Component Types
Agents: AI agent prompts for specific domains
- Example:
rust-specialist,python-expert,devops-guru
Skills: Auto-invoked guidance for specific tasks
- Example:
git-workflow,testing-patterns,security-checks
Contexts: Shared knowledge files
- Example:
rust-patterns,react-best-practices,api-design
Tools: Custom MCP tools
- Example:
database-inspector,api-tester,log-analyzer
Publishing Requirements
Must have:
- ✅ Valid
oac.jsonmetadata - ✅ Component file (agent.md, skill.md, etc.)
- ✅ README.md with usage instructions
- ✅ LICENSE file (MIT, Apache 2.0, etc.)
- ✅ Passes validation (
oac validate)
Should have:
- ✅ Tests (smoke-test.yaml minimum)
- ✅ Examples in README
- ✅ Version history in CHANGELOG.md
- ✅ GitHub repository
Nice to have:
- ✅ Context files
- ✅ Multiple test cases
- ✅ Screenshots/demos
- ✅ Video tutorial
Verification System
Verified Components: Official or community-approved
- ✅ Reviewed by maintainers
- ✅ Follows best practices
- ✅ Has comprehensive tests
- ✅ Well-documented
- ✅ Actively maintained
Unverified Components: Community contributions
- ⚠️ Use at your own risk
- ⚠️ May not follow best practices
- ⚠️ May have limited testing
Backward Compatibility
Preserve existing workflows:
- ✅ Keep
install.shfor direct usage - ✅ Keep
bin/oac.jsas entry point - ✅ Keep registry.json format
- ✅ Keep
.opencode/structure - ✅ Support legacy
oac [profile]syntax
Migration path:
# Old way (still works)
npm install -g @nextsystems/oac
oac developer
# New way (enhanced)
npm install -g @nextsystems/oac
oac configure
oac install opencode
oac add agent:rust-specialist
Success Metrics
Must have:
- ✅ Multi-IDE installation works
- ✅ Configuration persists
- ✅ Updates work across IDEs
- ✅ Community components can be added
- ✅ Context resolution works
- ✅ Backward compatible
Nice to have:
- ✅ 100+ community components
- ✅ Auto-update notifications
- ✅ IDE auto-detection
- ✅ Plugin system
Related Files
Core Concepts:
core-concepts/agents.md- Agent systemcore-concepts/registry.md- Registry systemconcepts/compatibility-layer.md- Multi-IDE support
Guides:
guides/npm-publishing.md- Publishing workflowguides/adding-agent.md- Creating agents
Lookup:
lookup/file-locations.md- File structurelookup/compatibility-layer-structure.md- Adapter structure
Next Steps
Immediate:
- ✅ Create feature branch
- ✅ Create context file (this file)
- Create GitHub issue for tracking
- Set up project board
Phase 1 Start:
- Set up TypeScript project structure
- Install dependencies
- Create configuration schema
- Implement
oac configurecommand
Last Updated: 2026-02-14
Version: 1.0.0-alpha
Status: Planning → Implementation