Snapshot of the installed OAC framework (/app/.opencode) including Claus's custom agents:
- agent/OpenArchitect.md (Aiden, the architect)
- agent/subagents/openagent.md (GMS sub-agent builder)
- agent/core/openagent.md, agent/core/opencoder.md (customized)
- agent/subagents/{code,core,development,system-builder}/*
- command/, context/, skills/, tool/, README.md, env.example
Excluded runtime artifacts: node_modules/, bin/opencode (184MB binary), lockfiles.
491 lines
10 KiB
Markdown
491 lines
10 KiB
Markdown
<!-- Context: openagents-repo/registry | Priority: high | Version: 1.0 | Updated: 2026-02-15 -->
|
|
|
|
# Core Concept: Registry System
|
|
|
|
**Purpose**: Understanding how component tracking and distribution works
|
|
**Priority**: CRITICAL - Load this before working with registry
|
|
|
|
---
|
|
|
|
## What Is the Registry?
|
|
|
|
The registry is a centralized catalog (`registry.json`) that tracks all components in OpenAgents Control:
|
|
- **Agents** - AI agent prompts
|
|
- **Subagents** - Delegated specialists
|
|
- **Commands** - Slash commands
|
|
- **Tools** - Custom tools
|
|
- **Contexts** - Context files
|
|
|
|
**Location**: `registry.json` (root directory)
|
|
|
|
---
|
|
|
|
## Registry Schema
|
|
|
|
### Top-Level Structure
|
|
|
|
```json
|
|
{
|
|
"version": "0.5.0",
|
|
"schema_version": "2.0.0",
|
|
"components": {
|
|
"agents": [...],
|
|
"subagents": [...],
|
|
"commands": [...],
|
|
"tools": [...],
|
|
"contexts": [...]
|
|
},
|
|
"profiles": {
|
|
"essential": {...},
|
|
"developer": {...},
|
|
"business": {...}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Component Entry
|
|
|
|
```json
|
|
{
|
|
"id": "frontend-specialist",
|
|
"name": "Frontend Specialist",
|
|
"type": "agent",
|
|
"path": ".opencode/agent/subagents/development/frontend-specialist.md",
|
|
"description": "Expert in React, Vue, and modern CSS",
|
|
"category": "development",
|
|
"tags": ["react", "vue", "css", "frontend"],
|
|
"dependencies": ["subagent:tester"],
|
|
"version": "0.5.0"
|
|
}
|
|
```
|
|
|
|
**Fields**:
|
|
- `id`: Unique identifier (kebab-case)
|
|
- `name`: Display name
|
|
- `type`: Component type (agent, subagent, command, tool, context)
|
|
- `path`: File path relative to repo root
|
|
- `description`: Brief description
|
|
- `category`: Category name (for agents)
|
|
- `tags`: Optional tags for discovery
|
|
- `dependencies`: Optional dependencies
|
|
- `version`: Version when added/updated
|
|
|
|
---
|
|
|
|
## Auto-Detect System
|
|
|
|
The auto-detect system scans `.opencode/` and automatically updates the registry.
|
|
|
|
### How It Works
|
|
|
|
```
|
|
1. Scan .opencode/ directory
|
|
2. Find all .md files with frontmatter
|
|
3. Extract metadata (description, category, type, tags)
|
|
4. Validate paths exist
|
|
5. Generate component entries
|
|
6. Update registry.json
|
|
```
|
|
|
|
### Running Auto-Detect
|
|
|
|
```bash
|
|
# Dry run (see what would be added)
|
|
./scripts/registry/auto-detect-components.sh --dry-run
|
|
|
|
# Actually add components
|
|
./scripts/registry/auto-detect-components.sh --auto-add
|
|
|
|
# Force update existing entries
|
|
./scripts/registry/auto-detect-components.sh --auto-add --force
|
|
```
|
|
|
|
### What Gets Detected
|
|
|
|
✅ **Agents** - `.opencode/agent/{category}/*.md`
|
|
✅ **Subagents** - `.opencode/agent/subagents/**/*.md`
|
|
✅ **Commands** - `.opencode/command/**/*.md`
|
|
✅ **Tools** - `.opencode/tool/**/index.ts`
|
|
✅ **Contexts** - `.opencode/context/**/*.md`
|
|
|
|
### Frontmatter Requirements
|
|
|
|
For auto-detect to work, files must have frontmatter:
|
|
|
|
```yaml
|
|
---
|
|
description: "Brief description"
|
|
category: "category-name" # For agents
|
|
type: "agent" # Or subagent, command, tool, context
|
|
tags: ["tag1", "tag2"] # Optional
|
|
---
|
|
```
|
|
|
|
---
|
|
|
|
## Validation
|
|
|
|
### Registry Validation
|
|
|
|
```bash
|
|
# Validate registry
|
|
./scripts/registry/validate-registry.sh
|
|
|
|
# Verbose output
|
|
./scripts/registry/validate-registry.sh -v
|
|
```
|
|
|
|
### What Gets Validated
|
|
|
|
✅ **Schema** - Correct JSON structure
|
|
✅ **Paths** - All paths exist
|
|
✅ **IDs** - Unique IDs
|
|
✅ **Categories** - Valid categories
|
|
✅ **Dependencies** - Dependencies exist
|
|
✅ **Versions** - Version consistency
|
|
|
|
### Validation Errors
|
|
|
|
```bash
|
|
# Example errors
|
|
ERROR: Path does not exist: (example: .opencode/agent/core/missing.md)
|
|
ERROR: Duplicate ID: frontend-specialist
|
|
ERROR: Invalid category: invalid-category
|
|
ERROR: Missing dependency: subagent:nonexistent
|
|
```
|
|
|
|
---
|
|
|
|
## Agents vs Subagents
|
|
|
|
**Main Agents** (2 in Developer profile):
|
|
- openagent: Universal coordination agent
|
|
- opencoder: Complex coding and architecture
|
|
|
|
**Specialist Subagents** (8 in Developer profile):
|
|
- frontend-specialist: React, Vue, CSS architecture
|
|
- devops-specialist: CI/CD, infrastructure, deployment
|
|
|
|
- task-manager: Feature breakdown and planning
|
|
- documentation: Create and update docs
|
|
- coder-agent: Execute coding subtasks
|
|
- reviewer: Code review and security
|
|
- tester: Write unit and integration tests
|
|
- build-agent: Type checking and validation
|
|
- image-specialist: Generate and edit images
|
|
|
|
**Commands** (7 in Developer profile):
|
|
- analyze-patterns: Analyze codebase for patterns
|
|
- commit, test, context, clean, optimize, validate-repo
|
|
|
|
---
|
|
|
|
## Component Profiles
|
|
|
|
Profiles are pre-configured component bundles for quick installation.
|
|
|
|
### Available Profiles
|
|
|
|
#### Essential Profile
|
|
**Purpose**: Minimal setup for basic usage
|
|
|
|
**Includes**:
|
|
- Core agents (openagent, opencoder)
|
|
- Essential commands (commit, test)
|
|
- Core context files
|
|
|
|
```json
|
|
"essential": {
|
|
"description": "Minimal setup for basic usage",
|
|
"components": [
|
|
"agent:openagent",
|
|
"agent:opencoder",
|
|
"command:commit",
|
|
"command:test"
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
#### Developer Profile
|
|
**Purpose**: Full development setup
|
|
|
|
**Includes**:
|
|
- All core agents
|
|
- Development specialists
|
|
- All subagents
|
|
- Dev commands
|
|
- Dev context files
|
|
|
|
```json
|
|
"developer": {
|
|
"description": "Full development setup",
|
|
"components": [
|
|
"agent:*",
|
|
"subagent:*",
|
|
"command:*",
|
|
"context:core/*",
|
|
"context:development/*"
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
#### Business Profile
|
|
**Purpose**: Content and product focus
|
|
|
|
**Includes**:
|
|
- Core agents
|
|
- Content specialists
|
|
- Product specialists
|
|
- Content context files
|
|
|
|
```json
|
|
"business": {
|
|
"description": "Content and product focus",
|
|
"components": [
|
|
"agent:openagent",
|
|
"agent:copywriter",
|
|
"agent:technical-writer",
|
|
"context:core/*",
|
|
"context:content/*"
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Install System
|
|
|
|
The install system uses the registry to distribute components.
|
|
|
|
### Installation Flow
|
|
|
|
```
|
|
1. User runs install.sh
|
|
2. Check for local registry.json (development mode)
|
|
3. If not local, fetch from GitHub (production mode)
|
|
4. Parse registry.json
|
|
5. Show component selection UI
|
|
6. Resolve dependencies
|
|
7. Download components from GitHub
|
|
8. Install to .opencode/
|
|
9. Handle collisions (skip/overwrite/backup)
|
|
```
|
|
|
|
### Local Registry (Development)
|
|
|
|
```bash
|
|
# Test with local registry
|
|
REGISTRY_URL="file://$(pwd)/registry.json" ./install.sh --list
|
|
|
|
# Install with local registry
|
|
REGISTRY_URL="file://$(pwd)/registry.json" ./install.sh developer
|
|
```
|
|
|
|
### Remote Registry (Production)
|
|
|
|
```bash
|
|
# Install from GitHub
|
|
./install.sh developer
|
|
|
|
# List available components
|
|
./install.sh --list
|
|
```
|
|
|
|
---
|
|
|
|
## Dependency Resolution
|
|
|
|
### Dependency Format
|
|
|
|
```json
|
|
"dependencies": [
|
|
"subagent:tester",
|
|
"context:core/standards/code"
|
|
]
|
|
```
|
|
|
|
### Resolution Rules
|
|
|
|
1. Parse dependency string (`type:id`)
|
|
2. Find component in registry
|
|
3. Check if already installed
|
|
4. Add to install queue
|
|
5. Recursively resolve dependencies
|
|
6. Install in dependency order
|
|
|
|
### Example
|
|
|
|
```
|
|
User installs: frontend-specialist
|
|
↓
|
|
Depends on: subagent:tester
|
|
↓
|
|
Depends on: context:core/standards/tests
|
|
↓
|
|
Install order:
|
|
1. context:core/standards/tests
|
|
2. subagent:tester
|
|
3. frontend-specialist
|
|
```
|
|
|
|
---
|
|
|
|
## Collision Handling
|
|
|
|
When installing components that already exist:
|
|
|
|
### Collision Strategies
|
|
|
|
1. **Skip** - Keep existing file
|
|
2. **Overwrite** - Replace with new file
|
|
3. **Backup** - Backup existing, install new
|
|
|
|
### Interactive Mode
|
|
|
|
```bash
|
|
File exists: .opencode/agent/core/openagent.md
|
|
[S]kip, [O]verwrite, [B]ackup, [A]ll skip, [F]orce all?
|
|
```
|
|
|
|
### Non-Interactive Mode
|
|
|
|
```bash
|
|
# Skip all collisions
|
|
./install.sh developer --skip-existing
|
|
|
|
# Overwrite all collisions
|
|
./install.sh developer --force
|
|
|
|
# Backup all collisions
|
|
./install.sh developer --backup
|
|
```
|
|
|
|
---
|
|
|
|
## Version Management
|
|
|
|
### Version Fields
|
|
|
|
- **Registry version**: Overall registry version (e.g., "0.5.0")
|
|
- **Schema version**: Registry schema version (e.g., "2.0.0")
|
|
- **Component version**: When component was added/updated
|
|
|
|
### Version Consistency
|
|
|
|
```bash
|
|
# Check version consistency
|
|
cat VERSION
|
|
cat package.json | jq '.version'
|
|
cat registry.json | jq '.version'
|
|
|
|
# All should match
|
|
```
|
|
|
|
### Updating Versions
|
|
|
|
```bash
|
|
# Bump version
|
|
echo "0.X.Y" > VERSION
|
|
jq '.version = "0.X.Y"' package.json > tmp && mv tmp package.json
|
|
jq '.version = "0.X.Y"' registry.json > tmp && mv tmp registry.json
|
|
```
|
|
|
|
---
|
|
|
|
## CI/CD Integration
|
|
|
|
### GitHub Workflows
|
|
|
|
#### Validate Registry (PR Checks)
|
|
|
|
```yaml
|
|
# .github/workflows/validate-registry.yml
|
|
- name: Validate Registry
|
|
run: ./scripts/registry/validate-registry.sh
|
|
```
|
|
|
|
#### Auto-Update Registry (Post-Merge)
|
|
|
|
```yaml
|
|
# .github/workflows/update-registry.yml
|
|
- name: Update Registry
|
|
run: ./scripts/registry/auto-detect-components.sh --auto-add
|
|
```
|
|
|
|
#### Version Bump (On Release)
|
|
|
|
```yaml
|
|
# .github/workflows/version-bump.yml
|
|
- name: Bump Version
|
|
run: ./scripts/versioning/bump-version.sh
|
|
```
|
|
|
|
---
|
|
|
|
## Best Practices
|
|
|
|
### Adding Components
|
|
|
|
✅ **Add frontmatter** - Required for auto-detect
|
|
✅ **Run auto-detect** - Don't manually edit registry
|
|
✅ **Validate** - Always validate after changes
|
|
✅ **Test locally** - Use local registry for testing
|
|
|
|
### Maintaining Registry
|
|
|
|
✅ **Auto-detect first** - Let scripts handle updates
|
|
✅ **Validate often** - Catch issues early
|
|
✅ **Version consistency** - Keep versions in sync
|
|
✅ **CI validation** - Automate validation in CI
|
|
|
|
### Dependencies
|
|
|
|
✅ **Explicit dependencies** - List all dependencies
|
|
✅ **Test resolution** - Verify dependencies resolve
|
|
✅ **Avoid cycles** - No circular dependencies
|
|
|
|
---
|
|
|
|
## Common Issues
|
|
|
|
### Path Not Found
|
|
|
|
**Problem**: Registry references non-existent path
|
|
**Solution**: Run auto-detect or fix path manually
|
|
|
|
### Duplicate ID
|
|
|
|
**Problem**: Two components with same ID
|
|
**Solution**: Rename one component
|
|
|
|
### Invalid Category
|
|
|
|
**Problem**: Agent has invalid category
|
|
**Solution**: Use valid category (core, development, content, data, product, learning)
|
|
|
|
### Missing Dependency
|
|
|
|
**Problem**: Dependency doesn't exist in registry
|
|
**Solution**: Add dependency or remove reference
|
|
|
|
### Version Mismatch
|
|
|
|
**Problem**: VERSION, package.json, registry.json don't match
|
|
**Solution**: Update all version files to match
|
|
|
|
---
|
|
|
|
## Related Files
|
|
|
|
- **Updating registry**: `guides/updating-registry.md`
|
|
- **Adding agents**: `guides/adding-agent.md`
|
|
- **Categories**: `core-concepts/categories.md`
|
|
|
|
---
|
|
|
|
**Last Updated**: 2025-01-28
|
|
**Version**: 0.5.2
|