OpenWriterControle/docs/planning/01-main-plan.md
Darren Hinde 5a40b6fdc4
feat(context): Standardize context system with navigation, frontmatter, and MVI compliance (#209)
* 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>
2026-02-15 23:01:19 +00:00

2338 lines
62 KiB
Markdown

# 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
```bash
# 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 `oac` commands in their project root directory
- Always asks: "Install locally (this project) or globally?"
- Always confirms before overwriting files (unless `--yolo` flag)
- YOLO mode (`--yolo`): Auto-confirms all, reports changes at end
- Default mode: Interactive approval for every file conflict
```json
{
"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**:
```bash
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:
```bash
# 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/TestEngineer.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/TestEngineer.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:
```bash
# 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/TestEngineer.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**
```typescript
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**
```json
{
"preferences": {
"confirmOverwrites": true,
"yoloMode": false,
"conflictStrategy": "ask",
"autoBackup": true,
"backupLocation": ".opencode/.backups"
}
}
```
**Commands with Approval Control**
```bash
# 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 rollback` to undo last operation
- ✅ Audit log: `.oac/audit.log` tracks all operations
**Example: Full Interactive Flow**
```bash
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/TestEngineer.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/TestEngineer.md → .backups/TestEngineer.md.2026-02-14
✓ Overwrote .opencode/agent/TestEngineer.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**:
```json
{
"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**:
```bash
# 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**:
```json
{
"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
```typescript
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
```json
{
"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**
```bash
# 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**
```bash
# 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**
```bash
# 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)**
```bash
# 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:
```typescript
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
```bash
# 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:
```typescript
// 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
```bash
# 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 validate` in 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
```bash
# 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**:
1. Fetch latest registry from GitHub
2. Compare with local cache
3. Show available updates
4. Download updated components
5. Apply to configured IDEs
6. 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
```bash
# 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
```bash
# 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`):
```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
```bash
# 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
```bash
# 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
```bash
# 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**:
```typescript
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**:
```json
{
"presets": {
"my-openagent": {
"updateStrategy": "manual",
"autoUpdate": false,
"mergeStrategy": {
"onConflict": "ask", // ask | keep-mine | keep-theirs
"backupOnMerge": true,
"maxBackups": 10
}
}
}
}
```
#### Layer 6: Preset Sharing
```bash
# 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
```bash
# 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: .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
```bash
# 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
```json
{
"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
```markdown
---
# 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
1. **User edits in-place, then update arrives**
- Detect local modifications
- Warn user
- Offer to create preset from modifications
- Backup before overwriting
2. **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
3. **User has multiple presets for same base agent**
- Allow multiple presets
- Each preset tracks its own base version
- Update each independently
4. **Preset conflicts with IDE limitations**
- Warn if preset won't work with IDE
- Suggest compatible alternatives
- Auto-adapt if possible
5. **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**:
```typescript
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**:
```bash
# 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**:
```typescript
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**:
```bash
# 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**:
```bash
# 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**:
```bash
# 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**:
```bash
# 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**:
```json
{
"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-run` to 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
```bash
# 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
```bash
# 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
```bash
# 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)
```bash
# 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/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)
```bash
# 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
```bash
# 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)
```bash
--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
```json
{
"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.ts`
- `src/cli/config/manager.ts`
- `src/cli/config/schema.ts`
- `oac configure` works
- `oac list` works
---
### 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.ts`
- `src/core/installer/component.ts`
- `oac install opencode --profile developer` works
---
### 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 apply` command
- Add IDE detection
**Deliverables**:
- `src/adapters/opencode.ts`
- `src/adapters/cursor.ts`
- `oac apply cursor` works
---
### Phase 4: Update System (Week 4)
**Goal**: Version management
**Tasks**:
- Create version checker
- Implement update fetcher
- Create update applier
- Implement `oac update` command
- Add update notifications
**Deliverables**:
- `src/core/updater/version.ts`
- `oac update --check` works
- `oac update --claude --global` works
---
### 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 add` command
- Implement `oac publish` command
- Create community registry
- Add component validation
- Implement search and browse
**Deliverables**:
- `src/cli/commands/add.ts`
- `src/cli/commands/publish.ts`
- `src/core/registry/publisher.ts`
- `oac add agent:rust-specialist` works
- `oac publish ./my-agent` works
---
### 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.md`
- `docs/configuration.md`
- `docs/community-components.md`
- `docs/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.json` metadata
- ✅ 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.sh` for direct usage
- ✅ Keep `bin/oac.js` as entry point
- ✅ Keep registry.json format
- ✅ Keep `.opencode/` structure
- ✅ Support legacy `oac [profile]` syntax
**Migration path**:
```bash
# 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 system
- `core-concepts/registry.md` - Registry system
- `concepts/compatibility-layer.md` - Multi-IDE support
**Guides**:
- `guides/npm-publishing.md` - Publishing workflow
- `guides/adding-agent.md` - Creating agents
**Lookup**:
- `lookup/file-locations.md` - File structure
- `lookup/compatibility-layer-structure.md` - Adapter structure
---
## Next Steps
**Immediate**:
1. ✅ Create feature branch
2. ✅ Create context file (this file)
3. Create GitHub issue for tracking
4. Set up project board
**Phase 1 Start**:
1. Set up TypeScript project structure
2. Install dependencies
3. Create configuration schema
4. Implement `oac configure` command
---
**Last Updated**: 2026-02-14
**Version**: 1.0.0-alpha
**Status**: Planning → Implementation