11-json-config-system.md 26 KB

JSON-Based Agent Configuration System

Date: 2026-02-15
Status: Architecture Design
Branch: feature/oac-package-refactor
Priority: CRITICAL - Foundation for v2.0


๐ŸŽฏ Vision

Transform agent management from markdown-based to JSON-configured, type-safe, multi-IDE compatible system with single source of truth.

Current Problems

โŒ Markdown agents are hard to parse and validate
โŒ No type safety or schema validation
โŒ Difficult to extract metadata programmatically
โŒ Can't easily query agent properties
โŒ Version management is manual
โŒ Hard to convert between IDE formats
โŒ Duplication across IDEs (OpenCode, Claude, Cursor)

New Approach

โœ… Single source of truth - .opencode/ contains universal format
โœ… JSON config + Markdown prompts - Separation of concerns
โœ… Type-safe - Full TypeScript interfaces
โœ… Queryable - Easy filtering and searching
โœ… Validatable - JSON Schema validation
โœ… Versionable - Semantic versioning built-in
โœ… Convertible - Transform to any IDE format
โœ… Multi-IDE - Apply to OpenCode, Claude, Cursor, Windsurf


๐Ÿ—๏ธ Architecture

Single Source of Truth

.opencode/                          โ† UNIVERSAL FORMAT (source of truth)
โ”œโ”€โ”€ agents/
โ”‚   โ”œโ”€โ”€ core/
โ”‚   โ”‚   โ”œโ”€โ”€ openagent/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ agent.json          โ† Configuration (metadata, permissions, tools)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ prompt.md           โ† Prompt content (human-readable)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ system.md           โ† System instructions (optional)
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ examples.md         โ† Examples (optional)
โ”‚   โ”‚   โ””โ”€โ”€ opencoder/
โ”‚   โ”‚       โ”œโ”€โ”€ agent.json
โ”‚   โ”‚       โ””โ”€โ”€ prompt.md
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ subagents/
โ”‚   โ”‚   โ”œโ”€โ”€ code-reviewer/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ agent.json
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ prompt.md
โ”‚   โ”‚   โ””โ”€โ”€ test-engineer/
โ”‚   โ”‚       โ”œโ”€โ”€ agent.json
โ”‚   โ”‚       โ””โ”€โ”€ prompt.md
โ”‚   โ”‚
โ”‚   โ””โ”€โ”€ manifest.json               โ† Registry of all agents
โ”‚
โ”œโ”€โ”€ context/                        โ† Context files (unchanged)
โ”œโ”€โ”€ skills/                         โ† Skills (unchanged)
โ”œโ”€โ”€ tools/                          โ† MCP tools (unchanged)
โ””โ”€โ”€ config.json                     โ† Main OAC config

         โ†“ OAC CLI converts/applies โ†“

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ OpenCode   โ”‚ Claude Code โ”‚ Cursor   โ”‚ Windsurf  โ”‚
โ”‚ (native)   โ”‚ (convert)   โ”‚ (flatten)โ”‚ (flatten) โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“„ Agent Configuration Schema

TypeScript Interface

// packages/core/src/types/agent.ts

export interface AgentConfig {
  // Metadata
  $schema: string;
  version: string;
  id: string;
  name: string;
  description: string;
  category: 'core' | 'subagent' | 'specialist' | 'meta';
  
  // Agent behavior
  mode: 'primary' | 'subagent' | 'tool';
  model?: string;
  
  // Prompt configuration
  prompt: {
    file?: string;           // Path to prompt file (e.g., "./prompt.md")
    inline?: string;         // Inline prompt (for simple agents)
    system?: string;         // System instructions file
    examples?: string;       // Examples file
    temperature?: number;
    maxTokens?: number;
  };
  
  // Permissions (approval gates)
  permissions: {
    bash?: PermissionLevel;
    write?: PermissionLevel;
    edit?: PermissionLevel;
    read?: PermissionLevel;
    task?: PermissionLevel;
    [key: string]: PermissionLevel | undefined;
  };
  
  // Tools (MCP)
  tools: {
    [toolName: string]: boolean | ToolConfig;
  };
  
  // Skills
  skills?: string[];
  
  // Plugins
  plugins?: string[];
  
  // Context files (@ notation)
  context?: string[];
  
  // Dependencies
  dependencies?: {
    agents?: string[];
    subagents?: string[];
    skills?: string[];
    tools?: string[];
  };
  
  // IDE Compatibility
  compatibility: {
    opencode: CompatibilityLevel;
    claude: CompatibilityLevel;
    cursor: CompatibilityLevel;
    windsurf: CompatibilityLevel;
    [ide: string]: CompatibilityLevel;
  };
  
  // Metadata
  author?: string;
  license?: string;
  repository?: string;
  tags?: string[];
}

export type PermissionLevel = 'allow' | 'approve' | 'deny';
export type CompatibilityLevel = 'full' | 'partial' | 'none';

export interface ToolConfig {
  enabled: boolean;
  config?: Record<string, any>;
}

JSON Schema

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "required": ["$schema", "version", "id", "name", "mode", "prompt", "permissions", "tools", "compatibility"],
  "properties": {
    "$schema": {
      "type": "string",
      "const": "https://openagents.dev/schemas/agent-v2.json"
    },
    "version": {
      "type": "string",
      "pattern": "^\\d+\\.\\d+\\.\\d+$"
    },
    "id": {
      "type": "string",
      "pattern": "^[a-z0-9-]+$"
    },
    "name": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "category": {
      "type": "string",
      "enum": ["core", "subagent", "specialist", "meta"]
    },
    "mode": {
      "type": "string",
      "enum": ["primary", "subagent", "tool"]
    },
    "model": {
      "type": "string"
    },
    "prompt": {
      "type": "object",
      "properties": {
        "file": { "type": "string" },
        "inline": { "type": "string" },
        "system": { "type": "string" },
        "examples": { "type": "string" },
        "temperature": { "type": "number", "minimum": 0, "maximum": 2 },
        "maxTokens": { "type": "number", "minimum": 1 }
      }
    },
    "permissions": {
      "type": "object",
      "additionalProperties": {
        "type": "string",
        "enum": ["allow", "approve", "deny"]
      }
    },
    "tools": {
      "type": "object",
      "additionalProperties": {
        "oneOf": [
          { "type": "boolean" },
          {
            "type": "object",
            "properties": {
              "enabled": { "type": "boolean" },
              "config": { "type": "object" }
            }
          }
        ]
      }
    },
    "compatibility": {
      "type": "object",
      "required": ["opencode", "claude", "cursor", "windsurf"],
      "properties": {
        "opencode": { "type": "string", "enum": ["full", "partial", "none"] },
        "claude": { "type": "string", "enum": ["full", "partial", "none"] },
        "cursor": { "type": "string", "enum": ["full", "partial", "none"] },
        "windsurf": { "type": "string", "enum": ["full", "partial", "none"] }
      }
    }
  }
}

๐Ÿ“‹ Example Configurations

Example 1: OpenAgent (Primary Agent)

.opencode/agents/core/openagent/agent.json:

{
  "$schema": "https://openagents.dev/schemas/agent-v2.json",
  "version": "2.0.0",
  "id": "openagent",
  "name": "OpenAgent",
  "description": "Meta orchestration agent for complex workflows",
  "category": "core",
  
  "mode": "primary",
  "model": "anthropic/claude-sonnet-4-20250514",
  
  "prompt": {
    "file": "./prompt.md",
    "system": "./system.md",
    "examples": "./examples.md",
    "temperature": 0.7,
    "maxTokens": 8000
  },
  
  "permissions": {
    "bash": "approve",
    "write": "approve",
    "edit": "approve",
    "read": "allow",
    "task": "approve",
    "glob": "allow",
    "grep": "allow"
  },
  
  "tools": {
    "bash": true,
    "read": true,
    "write": true,
    "edit": true,
    "task": true,
    "glob": true,
    "grep": true,
    "todowrite": true,
    "todoread": true
  },
  
  "skills": [
    "task-management",
    "context-discovery"
  ],
  
  "plugins": [],
  
  "context": [
    "@core/standards/code-quality",
    "@core/workflows/task-delegation",
    "@core/workflows/code-review"
  ],
  
  "dependencies": {
    "subagents": [
      "task-manager",
      "context-scout",
      "coder-agent",
      "code-reviewer",
      "test-engineer",
      "doc-writer"
    ],
    "skills": [
      "task-management"
    ],
    "tools": [
      "bash",
      "read",
      "write",
      "edit",
      "task"
    ]
  },
  
  "compatibility": {
    "opencode": "full",
    "claude": "full",
    "cursor": "partial",
    "windsurf": "partial"
  },
  
  "author": "NextSystems",
  "license": "MIT",
  "repository": "https://github.com/nextsystems/openagents-control",
  "tags": [
    "orchestration",
    "meta",
    "planning",
    "delegation"
  ]
}

.opencode/agents/core/openagent/prompt.md:

You are OpenAgent, a meta orchestration agent for complex workflows.

## Your Role

You coordinate complex tasks by:
1. Analyzing user requests
2. Breaking down into subtasks
3. Delegating to specialist agents
4. Validating results
5. Completing the workflow

## Key Principles

- Always use ContextScout before execution
- Request approval before bash/write/edit/task
- Stop on test failures
- Maintain clear communication

## Workflow

[Stage 1: Analyze]
- Classify task type and complexity
- Use ContextScout for discovery

[Stage 2: Plan]
- Present plan and get approval
- Identify context needed

[Stage 3: Execute]
- Load context
- Execute or delegate
- Track progress

[Stage 4: Validate]
- Run tests
- Stop on failure
- Report results

[Stage 5: Complete]
- Update docs
- Summarize changes
- Confirm satisfaction

Example 2: CodeReviewer (Subagent)

.opencode/agents/subagents/code-reviewer/agent.json:

{
  "$schema": "https://openagents.dev/schemas/agent-v2.json",
  "version": "1.0.0",
  "id": "code-reviewer",
  "name": "CodeReviewer",
  "description": "Reviews code for best practices and potential issues",
  "category": "subagent",
  
  "mode": "subagent",
  "model": "anthropic/claude-sonnet-4-20250514",
  
  "prompt": {
    "file": "./prompt.md",
    "temperature": 0.3,
    "maxTokens": 4000
  },
  
  "permissions": {
    "bash": "deny",
    "write": "deny",
    "edit": "deny",
    "read": "allow",
    "glob": "allow",
    "grep": "allow"
  },
  
  "tools": {
    "read": true,
    "glob": true,
    "grep": true
  },
  
  "skills": [],
  "plugins": [],
  
  "context": [
    "@core/standards/code-quality",
    "@core/standards/security-patterns",
    "@core/workflows/code-review"
  ],
  
  "dependencies": {
    "tools": ["read", "glob", "grep"]
  },
  
  "compatibility": {
    "opencode": "full",
    "claude": "full",
    "cursor": "partial",
    "windsurf": "partial"
  },
  
  "author": "NextSystems",
  "license": "MIT",
  "tags": [
    "code-review",
    "quality",
    "security"
  ]
}

.opencode/agents/subagents/code-reviewer/prompt.md:

You are CodeReviewer, a specialist in code quality and security.

## Your Role

Review code for:
- Security vulnerabilities
- Performance issues
- Best practices violations
- Maintainability concerns
- Code smells

## Review Process

1. Read the code files
2. Analyze against standards
3. Identify issues by severity
4. Provide actionable recommendations
5. Suggest improvements

## Output Format

**Critical Issues**: Security vulnerabilities, data loss risks
**High Priority**: Performance problems, major code smells
**Medium Priority**: Best practice violations
**Low Priority**: Style improvements, minor optimizations

Always provide specific line numbers and code examples.

๐Ÿ”ง Format Converters

OpenCode Converter

// packages/core/src/agent/converters/opencode.ts

export class OpenCodeConverter {
  convert(config: AgentConfig): string {
    const openCodeConfig = {
      $schema: "https://opencode.ai/config.json",
      agent: {
        [config.id]: {
          mode: config.mode,
          model: config.model,
          prompt: config.prompt.file 
            ? `{file:${config.prompt.file}}` 
            : config.prompt.inline,
          tools: this.convertTools(config.tools),
          permissions: config.permissions
        }
      }
    };
    
    return JSON.stringify(openCodeConfig, null, 2);
  }
  
  private convertTools(tools: Record<string, boolean | any>): Record<string, boolean> {
    const result: Record<string, boolean> = {};
    
    for (const [name, value] of Object.entries(tools)) {
      result[name] = typeof value === 'boolean' ? value : value.enabled;
    }
    
    return result;
  }
}

Claude Converter

// packages/core/src/agent/converters/claude.ts

export class ClaudeConverter {
  convert(config: AgentConfig): string {
    // Claude uses similar format but doesn't support skills/plugins
    
    const claudeConfig = {
      agent: {
        [config.id]: {
          mode: config.mode,
          model: config.model,
          prompt: config.prompt.content || config.prompt.inline,
          tools: this.filterSupportedTools(config.tools),
          permissions: config.permissions
        }
      }
    };
    
    return JSON.stringify(claudeConfig, null, 2);
  }
  
  private filterSupportedTools(tools: Record<string, boolean | any>): Record<string, boolean> {
    // Claude only supports: bash, read, write, edit, glob, grep
    const supported = ['bash', 'read', 'write', 'edit', 'glob', 'grep'];
    const result: Record<string, boolean> = {};
    
    for (const [name, value] of Object.entries(tools)) {
      if (supported.includes(name)) {
        result[name] = typeof value === 'boolean' ? value : value.enabled;
      }
    }
    
    return result;
  }
}

Cursor Converter

// packages/core/src/agent/converters/cursor.ts

export class CursorConverter {
  convert(config: AgentConfig): string {
    // Cursor uses plain text .cursorrules
    let rules = `# ${config.name}\n\n`;
    rules += `${config.description}\n\n`;
    
    // Add prompt content (flattened)
    if (config.prompt.content) {
      rules += this.flattenPrompt(config.prompt.content);
    }
    
    // Add permissions as rules
    rules += '\n\n## Permissions\n\n';
    for (const [tool, level] of Object.entries(config.permissions)) {
      rules += `- ${tool}: ${level}\n`;
    }
    
    return rules;
  }
  
  private flattenPrompt(content: string): string {
    // Remove complex sections, keep simple instructions
    let result = content;
    
    // Remove frontmatter
    result = result.replace(/^---[\s\S]*?---\n/m, '');
    
    // Remove complex sections
    const sectionsToRemove = ['Workflow', 'Examples', 'Advanced'];
    for (const section of sectionsToRemove) {
      const regex = new RegExp(`## ${section}[\\s\\S]*?(?=##|$)`, 'gi');
      result = result.replace(regex, '');
    }
    
    return result.trim();
  }
}

๐Ÿš€ OAC CLI Commands

Convert Command

# Convert agent to specific IDE format
oac convert openagent --to=opencode
oac convert openagent --to=claude
oac convert openagent --to=cursor

# Convert all agents
oac convert --all --to=opencode

# Output to file
oac convert openagent --to=opencode --output=.opencode/config.json

# Dry run (show output without writing)
oac convert openagent --to=cursor --dry-run

Validate Command

# Validate agent config against schema
oac validate openagent

# Validate all agents
oac validate --all

# Check IDE compatibility
oac validate openagent --ide=cursor

# Verbose output
oac validate openagent --verbose

Apply Command

# Apply agent to IDE (auto-convert)
oac apply openagent --ide=opencode
oac apply openagent --ide=claude
oac apply openagent --ide=cursor

# Apply all agents
oac apply --all --ide=opencode

# Apply with profile
oac apply --profile=developer --ide=opencode

# Dry run
oac apply openagent --ide=cursor --dry-run

# Force overwrite
oac apply openagent --ide=opencode --force

Create Command

# Create new agent interactively
oac create agent

# Create from template
oac create agent --template=subagent --name=my-reviewer

# Create with wizard
oac create agent --wizard

Info Command

# Show agent info
oac info openagent

# Show compatibility matrix
oac info openagent --compatibility

# Show dependencies
oac info openagent --dependencies

# Show all metadata
oac info openagent --full

๐Ÿ“Š Benefits

1. Type Safety

// Full TypeScript support
import { AgentConfig } from '@oac/types';

const config: AgentConfig = {
  // IDE autocomplete works!
  id: 'my-agent',
  name: 'MyAgent',
  mode: 'subagent',
  // TypeScript validates everything
  permissions: {
    bash: 'approve',  // โœ… Valid
    write: 'invalid'  // โŒ Type error!
  }
};

2. Easy Querying

// Find all agents that use bash
const bashAgents = agents.filter(a => a.tools.bash === true);

// Find agents compatible with Cursor
const cursorAgents = agents.filter(a => a.compatibility.cursor !== 'none');

// Find all subagents
const subagents = agents.filter(a => a.mode === 'subagent');

// Find agents by category
const coreAgents = agents.filter(a => a.category === 'core');

3. Schema Validation

# Validate against JSON schema
oac validate openagent

# Output:
# โœ… Valid agent config
# โœ… All required fields present
# โœ… Permissions valid (allow/approve/deny)
# โœ… Tools valid
# โœ… Compatibility matrix complete
# โœ… Version format valid (2.0.0)

4. Version Management

{
  "version": "2.0.0",
  "compatibility": {
    "oac": ">=0.8.0",
    "opencode": ">=1.0.0"
  }
}

5. Easy Conversion

// Convert to any format
const openCodeConfig = converterRegistry.convert(agentConfig, 'opencode');
const claudeConfig = converterRegistry.convert(agentConfig, 'claude');
const cursorRules = converterRegistry.convert(agentConfig, 'cursor');

// All from single source!

6. Separation of Concerns

agent.json     โ†’ Configuration (machine-readable, type-safe)
prompt.md      โ†’ Content (human-readable, editable)
system.md      โ†’ System instructions (optional)
examples.md    โ†’ Examples (optional)

7. IDE Support

// VS Code autocomplete
{
  "id": "my-agent",
  "mode": "sub"  // โ† Autocomplete suggests: "subagent"
  "permissions": {
    "bash": "app"  // โ† Autocomplete suggests: "approve"
  }
}

๐Ÿ—บ๏ธ Migration Path

Phase 1: Infrastructure (Week 1)

Goal: Build JSON config system and converters

  • Define TypeScript interfaces (packages/core/src/types/agent.ts)
  • Create JSON schema (packages/core/src/schemas/agent-v2.json)
  • Build config loader (packages/core/src/agent/loader.ts)
  • Build converters:
    • OpenCode converter
    • Claude converter
    • Cursor converter
    • Windsurf converter
  • Build converter registry
  • Add unit tests

Deliverables:

  • โœ… TypeScript types
  • โœ… JSON schema
  • โœ… Config loader with validation
  • โœ… All converters implemented
  • โœ… Test coverage >80%

Phase 2: CLI Commands (Week 2)

Goal: Implement CLI for convert/validate/apply

  • Implement oac convert command
    • Support --to flag (opencode, claude, cursor)
    • Support --output flag
    • Support --dry-run flag
    • Support --all flag
  • Implement oac validate command
    • Schema validation
    • Compatibility checking
    • Dependency validation
  • Implement oac apply command
    • Auto-detect IDE
    • Convert and apply
    • Support --force flag
    • Support --dry-run flag
  • Implement oac info command
    • Show agent metadata
    • Show compatibility matrix
    • Show dependencies
  • Add help text and examples

Deliverables:

  • โœ… All CLI commands working
  • โœ… Help documentation
  • โœ… Error handling
  • โœ… User-friendly output

Phase 3: Migration Script (Week 3)

Goal: Migrate existing markdown agents to JSON config

  • Write migration script (scripts/migrate-agents.ts)
    • Parse markdown frontmatter
    • Extract metadata
    • Generate agent.json
    • Split prompt into prompt.md
    • Preserve all information
  • Migrate core agents:
    • OpenAgent
    • OpenCoder
  • Migrate all subagents:
    • TaskManager
    • ContextScout
    • CoderAgent
    • CodeReviewer
    • TestEngineer
    • DocWriter
    • BuildAgent
  • Generate manifest.json
  • Validate all migrated configs

Deliverables:

  • โœ… Migration script
  • โœ… All agents migrated
  • โœ… Validation passing
  • โœ… No data loss

Phase 4: Testing & Validation (Week 4)

Goal: Comprehensive testing of new system

  • Unit tests:
    • Config loader
    • Each converter
    • Validation logic
  • Integration tests:
    • Convert โ†’ Apply workflow
    • Multi-IDE apply
    • Profile-based apply
  • End-to-end tests:
    • Create agent โ†’ Validate โ†’ Apply โ†’ Test
  • Compatibility tests:
    • OpenCode native format
    • Claude conversion
    • Cursor flattening
  • Performance tests:
    • Load 100+ agents
    • Convert all agents
    • Apply to multiple IDEs

Deliverables:

  • โœ… Test coverage >90%
  • โœ… All tests passing
  • โœ… Performance benchmarks
  • โœ… Compatibility verified

Phase 5: Documentation (Week 5)

Goal: Complete documentation for new system

  • User documentation:
    • JSON config format guide
    • Migration guide (markdown โ†’ JSON)
    • CLI command reference
    • IDE compatibility matrix
    • Best practices
  • Developer documentation:
    • TypeScript interfaces
    • Converter API
    • Adding new IDE support
    • Schema extension guide
  • Examples:
    • Simple agent
    • Complex agent with all features
    • Subagent
    • Multi-IDE setup

Deliverables:

  • โœ… Complete user docs
  • โœ… Complete dev docs
  • โœ… Example agents
  • โœ… Migration guide

Phase 6: Deprecation (Week 6)

Goal: Deprecate old markdown format

  • Add deprecation warnings:
    • Warn when loading markdown agents
    • Suggest migration command
    • Show migration guide link
  • Update registry.json:
    • Point to new JSON configs
    • Mark markdown agents as deprecated
  • Update install.sh:
    • Use new JSON format
    • Auto-migrate on install
  • Update CI/CD:
    • Validate JSON configs
    • Fail on markdown agents (optional)

Deliverables:

  • โœ… Deprecation warnings
  • โœ… Updated registry
  • โœ… Updated installer
  • โœ… CI/CD validation

๐Ÿ“‹ Implementation Checklist

Week 1: Infrastructure

  • Create packages/core/src/types/agent.ts
  • Create packages/core/src/schemas/agent-v2.json
  • Create packages/core/src/agent/loader.ts
  • Create packages/core/src/agent/converters/opencode.ts
  • Create packages/core/src/agent/converters/claude.ts
  • Create packages/core/src/agent/converters/cursor.ts
  • Create packages/core/src/agent/converters/windsurf.ts
  • Create packages/core/src/agent/converters/registry.ts
  • Write unit tests
  • Validate with sample configs

Week 2: CLI Commands

  • Create packages/core/src/cli/convert.ts
  • Create packages/core/src/cli/validate.ts
  • Create packages/core/src/cli/apply.ts
  • Create packages/core/src/cli/info.ts
  • Add to main CLI entry point
  • Write help text
  • Add examples
  • Test all commands

Week 3: Migration

  • Create scripts/migrate-agents.ts
  • Migrate OpenAgent
  • Migrate OpenCoder
  • Migrate all subagents
  • Generate manifest.json
  • Validate all configs
  • Test conversions

Week 4: Testing

  • Write unit tests
  • Write integration tests
  • Write e2e tests
  • Performance testing
  • Compatibility testing
  • Fix any issues

Week 5: Documentation

  • Write user guide
  • Write dev guide
  • Write migration guide
  • Create examples
  • Update README
  • Update CHANGELOG

Week 6: Deprecation

  • Add warnings
  • Update registry
  • Update installer
  • Update CI/CD
  • Final testing
  • Release v2.0.0

๐ŸŽฏ Success Criteria

Must Have

  • โœ… All agents converted to JSON config
  • โœ… All CLI commands working
  • โœ… OpenCode, Claude, Cursor converters working
  • โœ… Schema validation working
  • โœ… Migration script working
  • โœ… Documentation complete
  • โœ… Tests passing (>90% coverage)

Nice to Have

  • โœ… Windsurf converter
  • โœ… Auto-migration on install
  • โœ… IDE detection
  • โœ… Interactive agent creation wizard
  • โœ… Web-based config editor

Future Enhancements

  • ๐Ÿ”ฎ Remote agent registry
  • ๐Ÿ”ฎ Agent marketplace
  • ๐Ÿ”ฎ Visual agent builder
  • ๐Ÿ”ฎ Agent versioning system
  • ๐Ÿ”ฎ Agent templates library

๐Ÿ“Š Comparison: Before vs After

Before (Markdown)

---
id: openagent
name: OpenAgent
type: orchestrator
---

# OpenAgent

You are OpenAgent...

## Tools
- bash (approve)
- write (approve)
- edit (approve)

## Skills
- task-management

## Context
- .opencode/context/core/standards/code-quality.md

Problems:

  • โŒ Hard to parse
  • โŒ No validation
  • โŒ No type safety
  • โŒ Hard to query
  • โŒ Manual conversion

After (JSON + Markdown)

agent.json:

{
  "id": "openagent",
  "name": "OpenAgent",
  "mode": "primary",
  "prompt": { "file": "./prompt.md" },
  "permissions": {
    "bash": "approve",
    "write": "approve",
    "edit": "approve"
  },
  "tools": {
    "bash": true,
    "write": true,
    "edit": true
  },
  "skills": ["task-management"],
  "context": ["@core/standards/code-quality"]
}

prompt.md:

You are OpenAgent...

Benefits:

  • โœ… Easy to parse
  • โœ… Schema validated
  • โœ… Type safe
  • โœ… Easy to query
  • โœ… Auto-convert to any IDE

๐Ÿš€ Next Steps

  1. Review this plan - Get team approval
  2. Set up branch - feature/json-config-system
  3. Start Phase 1 - Build infrastructure
  4. Weekly reviews - Track progress
  5. Launch v2.0.0 - After 6 weeks

Status: Ready for implementation
Estimated Timeline: 6 weeks
Risk Level: Low (backward compatible during migration)
Impact: High (foundation for all future features)


Last Updated: 2026-02-15
Next Review: After Phase 1 completion