Two misalignments found and fixed:
## 1. Pagination response field naming
Ring standards previously documented cursor fields as camelCase
(nextCursor, prevCursor, hasMore). The actual Midaz Pagination struct
uses snake_case json tags:
NextCursor string `json:"next_cursor,omitempty"`
PrevCursor string `json:"prev_cursor,omitempty"`
There is no HasMore/hasMore field in Midaz.
Changes:
- api-patterns.md: fix struct examples, JSON examples, detection
commands, tables, and anti-rationalization rows
- golang.md (opencode): pagination section was already correct
- PM skill files: update pagination field reference tables
## 2. BusinessError struct missing title field
Ring's BusinessError lacked the title field present in both
midaz/pkg/mmodel/error.go and lib-commons ErrorResponse:
type Error struct {
Code string `json:"code"`
Title string `json:"title"`
Message string `json:"message"`
EntityType string `json:"entityType,omitempty"`
}
Changes:
- platforms/opencode/standards/golang.md: add Title field to
BusinessError struct and to ErrInvalidInput/ErrNotFound examples
Files changed:
- dev-team/docs/standards/golang/api-patterns.md
- platforms/opencode/standards/golang.md
- pm-team/skills/pre-dev-api-design/SKILL.md
- pm-team/skills/shared-patterns/standards-discovery.md
|
||
|---|---|---|
| .. | ||
| __tests__ | ||
| docs/handoffs | ||
| plugin | ||
| prompts | ||
| src | ||
| standards | ||
| templates | ||
| biome.json | ||
| installer.sh | ||
| package.json | ||
| README.md | ||
| ring-config.schema.json | ||
| ring.jsonc | ||
| ring.jsonc.template | ||
| tsconfig.json | ||
Ring for OpenCode
OpenCode platform integration for the Ring skills library. This directory contains the runtime plugin and installer that brings Ring's skills, agents, and commands to OpenCode.
Architecture
platforms/opencode/
├── installer.sh # Installer script (reads from Ring monorepo)
├── plugin/ # TypeScript runtime plugin (RingUnifiedPlugin)
│ ├── config/ # Configuration handler and schema
│ ├── hooks/ # Session-start, context-injection hooks
│ ├── lifecycle/ # Event routing
│ ├── loaders/ # Agent, skill, command loaders
│ ├── tools/ # Custom Ring tools
│ └── utils/ # State management
├── prompts/ # Prompt templates (session-start, context-injection)
├── standards/ # Coding standards (from dev-team/docs/standards/)
├── templates/ # Project templates
├── src/ # CLI (doctor, config-manager)
├── ring.jsonc # Default Ring configuration
└── ring-config.schema.json # JSON schema for ring.jsonc
How It Works
The installer reads skills, agents, and commands directly from the Ring monorepo's canonical directories (default/, dev-team/, pm-team/, etc.) and applies transformations for OpenCode compatibility:
- Agent transform:
type→mode, strip unsupported frontmatter (version, output_schema), normalize tool names - Skill transform: Keep
nameanddescriptionin frontmatter, normalize tool references in body - Command transform: Strip
argument-hint(unsupported), normalize tool references - Hooks: Not installed (OpenCode uses plugin-based hooks incompatible with Ring's file-based hooks)
After transformation, files are installed to ~/.config/opencode/:
agent/*.md— Agents (35 from 6 Ring plugins)skill/*/SKILL.md— Skills (86 from 6 Ring plugins)command/*.md— Commands (33 from 6 Ring plugins)skill/shared-patterns/*.md— Shared patterns (merged from all plugins)
Installation
# From the Ring monorepo root:
./platforms/opencode/installer.sh
# Or with custom config dir:
OPENCODE_CONFIG_DIR=~/.config/opencode ./platforms/opencode/installer.sh
Configuration
User config lives at ~/.config/opencode/ring/config.jsonc. Use it to disable specific agents, skills, commands, or hooks:
{
"disabled_agents": ["finops-analyzer"],
"disabled_skills": ["regulatory-templates"],
"disabled_commands": []
}
Key Differences from Claude Code
| Feature | Claude Code | OpenCode |
|---|---|---|
| Directory names | Plural (agents/, skills/) |
Singular (agent/, skill/) |
| Tool names | Capitalized (Bash, Read) |
Lowercase (bash, read) |
| Hooks | File-based (JSON + scripts) | Plugin-based (TypeScript) |
| Agent type field | type: reviewer |
mode: subagent |
| Argument hints | argument-hint: "[files]" |
Not supported |
Previously: ring-for-opencode
This was previously a separate repository (LerianStudio/ring-for-opencode). It was consolidated into the Ring monorepo to eliminate content drift and sync overhead. The runtime plugin and installer are maintained here; skills, agents, and commands come from the Ring monorepo's canonical sources.