OpenWriterControle/.opencode/context/openagents-repo/core-concepts/agent-metadata.md
Darren Hinde 9625e43d92
feat: OpenCode-compliant agents with centralized metadata system (#151)
* chore: bump version to v0.8.0

* chore: update version to 0.7.1 instead of 0.8.0

* docs: expand comparison table with Oh My OpenCode and additional features

* backup: development context before reorganization

* refactor(context): reorganize development folder

- Remove 7 duplicate files (ui/design files exist in ui/web/)
- Remove 2 redundant READMEs (use navigation.md instead)
- Move react-patterns.md to frontend/react/
- Create frontend/react/navigation.md
- Update 4 navigation files (development, ui, frontend, frontend/react)
- Update developer profile (4 path changes: ui-styling-standards, design-systems, design-assets, animation-patterns)
- Update 3 core context files (visual-development.md, design-iteration.md, file-locations.md)

Result: 29 context files (down from 36), no duplicates, clean structure

Refs: REORGANIZATION_PLAN.md, REORGANIZATION_SUMMARY.md

* docs(context): add frontend delegation guide

- Create when-to-delegate.md with clear decision criteria
- Decision matrix for when to delegate vs. handle directly
- Common patterns and examples
- Red flags and green flags
- Frontend-specialist capabilities reference
- Update frontend and development navigation files

Helps orchestrators decide when to delegate UI work to frontend-specialist subagent.

* feat: enhance developer and advanced profiles with UI, development, and system builder context

- Developer profile: Add UI/UX patterns, development principles, design systems, React patterns, animation patterns, styling standards, and design assets
- Full profile: Add same UI/development context as developer profile for consistency
- Advanced profile: Add comprehensive system builder context including templates, guides, context system standards, and repository management context
- Update profile descriptions to reflect new capabilities
- All context files verified to exist and are properly referenced

* fix: remove duplicate context entries with incorrect paths

- Remove duplicate design-assets, ui-styling-standards, clean-code, animation-patterns, design-systems, react-patterns, and api-design entries that pointed to wrong paths
- Remove non-existent development-readme and mastra-ai-readme entries
- Keep only correct entries with proper file paths
- All registry paths now validated and correct

* feat: add add-context command to registry and all profiles

- Register add-context command in registry.json
- Add command:add-context to all 5 profiles (essential, developer, business, full, advanced)
- Update add-context.md to mention external-context files in .tmp/ directory
- Fix command dependencies to use context IDs instead of full paths
- All registry paths and dependencies validated

* feat: enhance add-context with external context file management

- Add Stage 0: Detect external context files in .tmp/
- Offer options to extract, manage, or harvest external files
- Extract patterns from external context files for use in project intelligence
- Provide management options: update, remove, clean, or harvest
- Add examples showing external context extraction and management
- Update troubleshooting with external context file handling
- Integrate with /context harvest command for permanent context organization

* fix: comprehensive context system audit and restructuring

- Fix 6 command documentation inconsistencies in add-context.md
  * Correct /add-context vs /context harvest command references
  * Simplify Stage 0 workflow from 4 to 2 options
  * Update examples to match actual behavior
  * Remove non-existent operations from delegation section
  * Fix troubleshooting Q&A section

- Restructure registry.json with 4 major improvements
  * Replace 31 duplicate 'navigation' IDs with unique IDs per subfolder
    - core-navigation, development-navigation, openagents-repo-navigation, etc.
  * Add context:openagents-repo/* to developer and full profiles
    - Developers now have repo-specific guides and examples
  * Remove context:to-be-consumed/* from essential, developer, business, full
    - Keep only in advanced profile for system builders
  * Properly scope mastra-ai context via wildcard patterns

Validation Results:
- Registry: 220/220 paths valid, 0 missing dependencies
- Profiles: All appropriately scoped with no duplicate IDs
- Standards: MVI compliance, frontmatter, structure verified
- No regressions: All tests passing

Fixes issues with context organization, command consistency, and profile coverage.

* feat: make agents OpenCode-compliant with centralized metadata system

- Remove invalid OpenCode fields from agent frontmatter (id, category, type, version, author, tags, dependencies, context, permissions)
- Keep only valid OpenCode fields (name, description, mode, temperature, tools, permission)
- Create centralized metadata file (.opencode/config/agent-metadata.json) for registry metadata
- Update auto-detect script to merge frontmatter + metadata into registry
- Fix YAML parsing errors (orphaned list items after valid fields)
- Add comprehensive documentation for new metadata system
- All 27 agents now OpenCode-compliant and callable by name

Fixes validation errors:
- Extra inputs are not permitted (9 fields)
- Invalid temperature type (string instead of number)

Benefits:
- OpenCode validation passes without errors
- Registry maintains complete metadata (id, name, category, tags, dependencies)
- Single source of truth for agent metadata
- Easier to maintain and update dependencies
- Backward compatible with existing tools

* fix: correct context dependency IDs to match registry

- Update context dependencies to use actual registry IDs
- Fix: context:core/standards/code → context:standards-code
- Fix: context:core/workflows/task-delegation → context:workflows-delegation
- Fix: context:delegation → context:delegation-ref
- Fix: context:review → context:review-ref
- Fix: invalid dependency in agent-metadata.md documentation
- All registry validation now passes

* chore: add navigation files and update workflow context

- Add navigation.md files for all context directories
- Update design-iteration.md and task-delegation.md workflows
- Clean up backup files from metadata fixes

* fix: install dependencies in validate-registry workflow

The validation script requires the 'glob' package which is in devDependencies.
CI was failing because dependencies were never installed before running validation.

* fix: show validation errors in CI logs

Use tee to display validation output in logs while also saving to file.
This makes debugging CI failures much easier.

* fix: remove duplicate pull_request trigger

The workflow was running twice (pull_request + pull_request_target) causing
duplicate checks. Keep only pull_request_target to support bot PRs and allow
writing to PR branches.

* chore: trigger CI re-run with fixed workflow

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-01-31 02:15:12 +00:00

13 KiB

Core Concept: Agent Metadata System

Purpose: Understanding the centralized metadata system for OpenAgents Control
Priority: CRITICAL - Load this before working with agent metadata


What Is the Agent Metadata System?

The agent metadata system separates OpenCode-compliant agent configuration from OpenAgents Control registry metadata. This solves the problem of OpenCode validation errors when agents contain fields that aren't part of the OpenCode agent schema.

Key Principle: Agent frontmatter contains ONLY valid OpenCode fields. All other metadata lives in a centralized file.


The Problem We Solved

Before (Validation Errors)

Agent frontmatter contained fields that OpenCode doesn't recognize:

---
id: opencoder                    # ❌ Not valid OpenCode field
name: OpenCoder                  # ❌ Not valid OpenCode field
category: core                   # ❌ Not valid OpenCode field
type: core                       # ❌ Not valid OpenCode field
version: 1.0.0                   # ❌ Not valid OpenCode field
author: opencode                 # ❌ Not valid OpenCode field
tags: [development, coding]      # ❌ Not valid OpenCode field
dependencies: []              # ❌ Not valid OpenCode field
description: "..."               # ✅ Valid OpenCode field
mode: primary                    # ✅ Valid OpenCode field
temperature: 0.1                 # ✅ Valid OpenCode field
tools: {...}                     # ✅ Valid OpenCode field
permission: {...}                # ✅ Valid OpenCode field
---

Result: OpenCode validation errors:

Extra inputs are not permitted, field: 'id', value: 'opencoder'
Extra inputs are not permitted, field: 'category', value: 'core'
Extra inputs are not permitted, field: 'type', value: 'core'
... (9 validation errors)

After (Clean Separation)

Agent frontmatter (.opencode/agent/core/opencoder.md):

---
# Metadata stored in: .opencode/config/agent-metadata.json
description: "Orchestration agent for complex coding, architecture, and multi-file refactoring"
mode: primary
temperature: 0.1
tools: {...}
permission: {...}
---

Centralized metadata (.opencode/config/agent-metadata.json):

{
  "agents": {
    "opencoder": {
      "id": "opencoder",
      "name": "OpenCoder",
      "category": "core",
      "type": "agent",
      "version": "1.0.0",
      "author": "opencode",
      "tags": ["development", "coding", "implementation"],
      "dependencies": [
        "subagent:documentation",
        "subagent:coder-agent",
        "context:core/standards/code"
      ]
    }
  }
}

Result: ✅ No validation errors, clean separation of concerns


Valid OpenCode Agent Fields

Based on OpenCode documentation, these are the ONLY valid frontmatter fields:

Required Fields

  • description - When to use this agent (required)
  • mode - Agent type: primary, subagent, or all (defaults to all)

Optional Fields

  • model - Model override (e.g., anthropic/claude-sonnet-4-20250514)
  • temperature - Response randomness (0.0-1.0)
  • maxSteps - Max agentic iterations
  • disable - Set to true to disable agent
  • prompt - Custom prompt file path (e.g., {file:./prompts/build.txt})
  • hidden - Hide from @ autocomplete (subagents only)
  • tools - Tool access configuration
  • permission - Permission rules for tools

Example Valid Frontmatter

---
description: "Code review agent with security focus"
mode: subagent
model: anthropic/claude-sonnet-4-20250514
temperature: 0.1
tools:
  read: true
  grep: true
  glob: true
  write: false
  edit: false
permission:
  bash:
    "*": ask
    "git *": allow
  edit: deny
---

Centralized Metadata File

Location: .opencode/config/agent-metadata.json

Schema

{
  "$schema": "https://opencode.ai/schemas/agent-metadata.json",
  "schema_version": "1.0.0",
  "description": "Centralized metadata for OpenAgents Control agents",
  "agents": {
    "agent-id": {
      "id": "agent-id",
      "name": "Agent Name",
      "category": "core|development|content|data|product|learning|meta",
      "type": "agent|subagent",
      "version": "1.0.0",
      "author": "opencode",
      "tags": ["tag1", "tag2"],
      "dependencies": [
        "subagent:subagent-id",
        "context:path/to/context"
      ]
    }
  },
  "defaults": {
    "agent": {
      "version": "1.0.0",
      "author": "opencode",
      "type": "agent",
      "tags": []
    },
    "subagent": {
      "version": "1.0.0",
      "author": "opencode",
      "type": "subagent",
      "tags": []
    }
  }
}

Metadata Fields

Field Required Description Example
id Yes Unique identifier (kebab-case) "opencoder"
name Yes Display name "OpenCoder"
category Yes Agent category "core"
type Yes Component type "agent" or "subagent"
version Yes Version number "1.0.0"
author Yes Author identifier "opencode"
tags No Discovery tags ["development", "coding"]
dependencies No Component dependencies ["subagent:tester"]

How It Works

1. Agent Creation

When creating a new agent:

Step 1: Create agent file with ONLY valid OpenCode fields

# Create agent file
touch .opencode/agent/category/my-agent.md
---
description: "My agent description"
mode: subagent
temperature: 0.2
tools:
  read: true
  write: true
---

# Agent prompt content here

Step 2: Add metadata to .opencode/config/agent-metadata.json

{
  "agents": {
    "my-agent": {
      "id": "my-agent",
      "name": "My Agent",
      "category": "development",
      "type": "subagent",
      "version": "1.0.0",
      "author": "opencode",
      "tags": ["custom", "helper"],
      "dependencies": ["context:core/standards/code"]
    }
  }
}

Step 3: Run auto-detect to update registry

./scripts/registry/auto-detect-components.sh --auto-add

The auto-detect script:

  1. Reads frontmatter from agent file (description, mode, etc.)
  2. Reads metadata from agent-metadata.json (id, name, tags, dependencies)
  3. Merges both into registry.json entry

2. Auto-Detect Integration

The auto-detect script (scripts/registry/auto-detect-components.sh) has been enhanced to:

  1. Extract frontmatter - Read description from agent file
  2. Lookup metadata - Check agent-metadata.json for agent ID
  3. Merge data - Combine frontmatter + metadata
  4. Update registry - Write complete entry to registry.json

Code snippet (from auto-detect script):

# Check if agent-metadata.json exists and merge metadata from it
local metadata_file="$REPO_ROOT/.opencode/config/agent-metadata.json"
if [ -f "$metadata_file" ] && command -v jq &> /dev/null; then
    # Try to find metadata for this agent ID
    local metadata_entry
    metadata_entry=$(jq -r ".agents[\"$id\"] // empty" "$metadata_file" 2>/dev/null)
    
    if [ -n "$metadata_entry" ] && [ "$metadata_entry" != "null" ]; then
        # Merge name, tags, dependencies from metadata
        # ...
    fi
fi

3. Registry Output

The registry.json entry contains merged data:

{
  "id": "opencoder",
  "name": "OpenCoder",
  "type": "agent",
  "path": ".opencode/agent/core/opencoder.md",
  "description": "Orchestration agent for complex coding...",
  "category": "core",
  "tags": ["development", "coding", "implementation"],
  "dependencies": [
    "subagent:documentation",
    "subagent:coder-agent",
    "context:core/standards/code"
  ]
}

Workflow

Adding a New Agent

# 1. Create agent file (OpenCode-compliant frontmatter only)
vim .opencode/agent/category/my-agent.md

# 2. Add metadata entry
vim .opencode/config/agent-metadata.json

# 3. Update registry
./scripts/registry/auto-detect-components.sh --auto-add

# 4. Validate
./scripts/registry/validate-registry.sh

Updating Agent Metadata

To update OpenCode configuration (tools, permissions, temperature):

# Edit agent file frontmatter
vim .opencode/agent/category/my-agent.md

To update registry metadata (tags, dependencies, version):

# Edit metadata file
vim .opencode/config/agent-metadata.json

# Re-run auto-detect
./scripts/registry/auto-detect-components.sh --auto-add

Updating Dependencies

Add a dependency:

{
  "agents": {
    "my-agent": {
      "dependencies": [
        "subagent:tester",
        "context:core/standards/code",
        "subagent:new-dependency"  // ← Add here
      ]
    }
  }
}

Then run:

./scripts/registry/auto-detect-components.sh --auto-add
./scripts/registry/validate-registry.sh

Benefits

✅ OpenCode Compliance

  • Agent frontmatter contains ONLY valid OpenCode fields
  • No validation errors from OpenCode
  • Agents work correctly with OpenCode CLI

✅ Registry Compatibility

  • Registry still has all metadata (id, name, category, tags, dependencies)
  • Auto-detect script merges frontmatter + metadata
  • Backward compatible with existing tools

✅ Single Source of Truth

  • Metadata centralized in one file
  • Easy to update dependencies across multiple agents
  • Clear separation: OpenCode config vs. registry metadata

✅ Maintainability

  • Update dependencies in one place
  • Consistent metadata across all agents
  • Easy to add new metadata fields

✅ Validation

  • OpenCode validates frontmatter (no extra fields)
  • Registry validator checks dependencies exist
  • Clear error messages when metadata is missing

Migration Guide

Migrating Existing Agents

Step 1: Identify agents with extra fields

# Find agents with invalid OpenCode fields
grep -r "^id:\|^name:\|^category:\|^type:\|^version:\|^author:\|^tags:\|^dependencies:" .opencode/agent/

Step 2: Extract metadata to agent-metadata.json

For each agent:

  1. Copy id, name, category, type, version, author, tags, dependencies to metadata file
  2. Remove these fields from agent frontmatter
  3. Keep ONLY valid OpenCode fields in frontmatter

Step 3: Update registry

# Remove old entries
jq 'del(.components.agents[] | select(.id == "agent-id"))' registry.json > tmp.json && mv tmp.json registry.json

# Re-add with new metadata
./scripts/registry/auto-detect-components.sh --auto-add

Step 4: Validate

./scripts/registry/validate-registry.sh

Best Practices

Agent Frontmatter

✅ DO:

  • Keep frontmatter minimal (only OpenCode fields)
  • Add comment pointing to metadata file
  • Use consistent formatting

❌ DON'T:

  • Add custom fields to frontmatter
  • Duplicate metadata in both places
  • Skip the metadata file

Metadata File

✅ DO:

  • Keep metadata file in version control
  • Update metadata when adding/removing dependencies
  • Use consistent naming (kebab-case for IDs)
  • Document why dependencies exist

❌ DON'T:

  • Forget to update metadata when creating agents
  • Leave orphaned entries (agents that don't exist)
  • Skip validation after updates

Dependencies

✅ DO:

  • Declare ALL dependencies (subagents, contexts)
  • Use correct format: type:id
  • Validate dependencies exist in registry

❌ DON'T:

  • Reference components without declaring dependency
  • Use invalid dependency formats
  • Forget to update when dependencies change

Troubleshooting

OpenCode Validation Errors

Problem: Extra inputs are not permitted, field: 'id'

Solution: Remove invalid fields from agent frontmatter, add to metadata file

# 1. Edit agent file - remove id, name, category, type, version, author, tags, dependencies
vim .opencode/agent/category/agent.md

# 2. Add to metadata file
vim .opencode/config/agent-metadata.json

# 3. Update registry
./scripts/registry/auto-detect-components.sh --auto-add

Missing Metadata

Problem: Auto-detect can't find metadata for agent

Solution: Add entry to agent-metadata.json

{
  "agents": {
    "agent-id": {
      "id": "agent-id",
      "name": "Agent Name",
      "category": "core",
      "type": "agent",
      "version": "1.0.0",
      "author": "opencode",
      "tags": [],
      "dependencies": []
    }
  }
}

Registry Out of Sync

Problem: Registry has old metadata

Solution: Remove entry and re-run auto-detect

# Remove old entry
jq 'del(.components.agents[] | select(.id == "agent-id"))' registry.json > tmp.json && mv tmp.json registry.json

# Re-add with current metadata
./scripts/registry/auto-detect-components.sh --auto-add

  • OpenCode Agent Docs: https://opencode.ai/docs/agents/
  • Registry System: .opencode/context/openagents-repo/core-concepts/registry.md
  • Adding Agents: .opencode/context/openagents-repo/guides/adding-agent.md
  • Dependencies: .opencode/context/openagents-repo/quality/registry-dependencies.md

Last Updated: 2026-01-31
Version: 1.0.0