ring/platforms/opencode
Gandalf a994b24cd7
fix: align Ring API standards with actual Midaz patterns
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
2026-03-31 19:36:31 -03:00
..
__tests__ feat: add OpenCode platform integration (consolidate ring-for-opencode) 2026-03-07 22:46:47 -03:00
docs/handoffs feat: add OpenCode platform integration (consolidate ring-for-opencode) 2026-03-07 22:46:47 -03:00
plugin refactor(session): replace custom handoff workflow with native Plan Mode 2026-03-09 07:24:07 -03:00
prompts feat: add OpenCode platform integration (consolidate ring-for-opencode) 2026-03-07 22:46:47 -03:00
src feat: add OpenCode platform integration (consolidate ring-for-opencode) 2026-03-07 22:46:47 -03:00
standards fix: align Ring API standards with actual Midaz patterns 2026-03-31 19:36:31 -03:00
templates feat: add OpenCode platform integration (consolidate ring-for-opencode) 2026-03-07 22:46:47 -03:00
biome.json feat: add OpenCode platform integration (consolidate ring-for-opencode) 2026-03-07 22:46:47 -03:00
installer.sh feat: add OpenCode platform integration (consolidate ring-for-opencode) 2026-03-07 22:46:47 -03:00
package.json feat: add OpenCode platform integration (consolidate ring-for-opencode) 2026-03-07 22:46:47 -03:00
README.md refactor: decouple agents from specific model requirements 2026-03-08 16:33:12 -03:00
ring-config.schema.json feat(review): add dead-code-reviewer agent for orphan detection 2026-03-09 21:17:22 -03:00
ring.jsonc feat: add OpenCode platform integration (consolidate ring-for-opencode) 2026-03-07 22:46:47 -03:00
ring.jsonc.template refactor(session): replace custom handoff workflow with native Plan Mode 2026-03-09 07:24:07 -03:00
tsconfig.json feat: add OpenCode platform integration (consolidate ring-for-opencode) 2026-03-07 22:46:47 -03:00

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:

  1. Agent transform: typemode, strip unsupported frontmatter (version, output_schema), normalize tool names
  2. Skill transform: Keep name and description in frontmatter, normalize tool references in body
  3. Command transform: Strip argument-hint (unsupported), normalize tool references
  4. 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.