Scope: README and user-facing documentation for OpenCode MoA.
Goal: keep multilingual docs useful without letting translations drift from the runnable configuration.
- Primary source for product facts: repository files, not prose.
- Agents:
.opencode/agents/*.md - Commands:
.opencode/commands/*.md - Core skills:
.opencode/skills/*/SKILL.md(3 core skills) - Static verification:
.opencode/tests/T0-static-verify.ps1 - Installation behavior:
install.ps1andinstall.sh
- Agents:
- Primary README source for wording:
README.mdandREADME.zh.md. - Other README files are full localized versions and must preserve the same technical facts.
| Language | File |
|---|---|
| English | README.md |
| 中文 | README.zh.md |
| 日本語 | README.ja.md |
| 한국어 | README.ko.md |
| Español | README.es.md |
| Français | README.fr.md |
| Deutsch | README.de.md |
Policy:
- README files are maintained as complete language-specific entry points.
- Deep implementation docs do not need to be translated into all languages by default.
- Core deployment manuals should stay at least bilingual: Chinese + English.
Recommended coverage:
README: 7 languages
Core deploy docs: zh + en
Internal/evaluation docs: source language only
Release notes: bilingual when practical
Do not translate command names, model IDs, file paths, agent IDs used for invocation, or code blocks.
Examples:
opencode --versionopencode.json.opencode/agentspwsh .opencode/tests/T0-static-verify.ps1/moa-quick,/moa-medium,/moa-flagship,/moa-frontend,/moa-describeopencode-go/deepseek-v4-flashreasoningEffortERROR_PROVIDER,ERROR_AUTH,ERROR_UNKNOWNconcierge-router,tool-handler,flag-qawhen used as English aliases
Chinese display names may be localized in Chinese docs, but English aliases should be preserved when they help cross-language comparison.
| Concept | Preferred wording / notes |
|---|---|
| MoA | Keep as MoA or expand once as Mixture of Agents |
| agent | Keep agent in technical contexts; localized prose may use equivalent words |
| command | Keep command names unchanged |
| skill | Keep skill in OpenCode-specific contexts |
| concierge-router / 门童路由员 | Default routing agent; preserve alias where useful |
| Doorman / Gatekeeper | Routing/governance concept; avoid inventing new names per language |
| Flagship QA / 旗舰·质检 | Quality gate; preserve QA meaning |
| confidence threshold | Use one shared definition across router, QA, and confidence assessor |
| fallback | Keep as fallback in technical prose or translate with the original in parentheses |
| (reserved for future product modes) | Not yet introduced; do not add to READMEs until finalized |
When any of the following changes, all README files must be checked:
- Agent count
- Command count
- Skill count
- Installation command
- Verification command
- Rollback instruction
- Free model list
- Cost claim
- FAQ answer
- Language navigation
- Model/provider naming
- Permission or security description
Minimum check after README updates:
pwsh .opencode/tests/T0-static-verify.ps1Recommended manual checks:
findstr /n /c:"22 agents" README.md README.es.md README.fr.md README.de.md README.ja.md README.ko.md
findstr /n /c:"22 个" README.zh.md
findstr /n /c:"T0-static-verify.ps1" README*.mdASCII diagrams must be visually aligned across all language READMEs.
- Left side:
┌─/├─/└─with agent name, flush left - Right side:
───with description, flush right - Model name in parentheses must be padded to uniform display width
───must start at the same column in all 4 lines- CJK characters count as 2 display columns; ASCII as 1
- Use programmatic alignment (not manual spacing) to avoid drift
Example (English):
┌─ flag-arch (Qwen3.7 Max) ─── plan from the architect's view
├─ flag-plan (GLM 5.2 ) ─── plan from the PM's view
├─ flag-eng (MiniMax M3 ) ─── plan from the implementer's view
└─ flag-fuse (Kimi K3 ) ─── take the best of each, one optimal solution
- Each line:
│ <role> (<display-name>, <model>) <description> - The closing
)must align at the same column within each sub-section - Pad
<display-name>, <model>with spaces to achieve alignment - Left
│must have exactly 1 leading space in all lines
- Markdown tables: pad column cells so
|aligns vertically - Header separator
| --- |must match column count - CJK content in cells counts as 2 display columns
After any diagram or table edit, verify alignment programmatically:
- First diagram: all `───` at same column
- 22 Agents flagship: all `)` at same column
- Tool / Mid-tier / Frontend: all `)` at same column
- Tables: all `|` at same column
Images in README must be wrapped in fixed HTML-comment anchors so tooling can locate and replace them regardless of surrounding code fences or line position. This prevents the recurring bug where an image gets inserted inside an ASCII diagram code block and silently fails to render.
- Architecture diagram
moa-arch*: wrapped in<!-- ARCH-IMG -->...<!-- /ARCH-IMG -->, placed at the top of every README. - Cost-down card
moa-cost*: wrapped in<!-- COST-IMG -->...<!-- /COST-IMG -->, placed outside any code fence (after the architecture diagram block, never inside it). - Social cards
moa-social*and heroopengraph*are share assets and MUST NOT appear in README body. - Rule: an image line (
) must never sit between```and```fence lines.
Example:
<!-- ARCH-IMG -->

<!-- /ARCH-IMG -->
<!-- COST-IMG -->

<!-- /COST-IMG -->
Run pwsh scripts/verify-images.ps1 to assert, for all 7 READMEs:
- ARCH-IMG and COST-IMG anchors exist
- No image line is located inside a code fence
- No
opengraphreference in README body moa-archandmoa-costare referenced
This script is local tooling (not pushed) — it guards the single-source-of-truth rule without adding CI surface to a private repo.
- Did agent / command / skill counts change? If yes, update README, install scripts, T0, and CHANGELOG.
- Did installation steps change? If yes, sync all README files.
- Did FAQ change? If yes, sync all README files or explicitly document why not.
- Did model IDs or provider names change? If yes, update docs and T0 expectations.
- Did confidence threshold wording change? If yes, sync router, QA, confidence assessor, and docs.
- Did you run
pwsh .opencode/tests/T0-static-verify.ps1? - Did you ensure
.agnes/and session summaries are not accidentally committed?
A localized README is acceptable only if:
- It has the same major sections as the source README.
- Code blocks are balanced and copyable.
- Commands, paths, model IDs, and agent identifiers remain executable.
- It does not contain large residue from another non-target language.
- It preserves warnings about key paths, install scripts, fallback behavior, and free-model limitations.
- It links to other language versions correctly.
Prefer fewer, reliable translated surfaces over many stale translations.
The README is the international entry point. Deeper docs should be translated only when they are user-facing and stable enough to maintain.