Skip to content

Commit 37faab7

Browse files
docs: OpenCode as managed harness in README, harness map, and landing
1 parent 7fbebe6 commit 37faab7

4 files changed

Lines changed: 28 additions & 19 deletions

File tree

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Dotfiles for your AI agents.
44

5-
One private `~/.agents` git repository holds your skills, MCP servers, hooks, and agent roles. The `dotagents` CLI syncs each of those into the native format of every coding agent you use — Claude Code, Codex, Factory Droid, Hermes, Pi — and follows you across machines the way dotfiles do. External skills are commit-pinned and audited before any agent loads them.
5+
One private `~/.agents` git repository holds your skills, MCP servers, hooks, and agent roles. The `dotagents` CLI syncs each of those into the native format of every coding agent you use — Claude Code, Codex, Factory Droid, Hermes, OpenCode, Pi — and follows you across machines the way dotfiles do. External skills are commit-pinned and audited before any agent loads them.
66

77
**[Overview & comparison →](https://yourconscience.github.io/dotagents/)** · [Releases](https://github.com/yourconscience/dotagents/releases)
88

@@ -75,11 +75,14 @@ Exactly four surfaces, each rendered into the harness's own format — dotagents
7575
| Codex | yes | yes | yes | yes |
7676
| Factory Droid | yes | yes | yes | yes |
7777
| Hermes | yes | -- | yes | yes |
78+
| OpenCode | yes† | yes | yes | -- |
7879
| Pi* | yes | --* | --* | -- |
7980

8081
\* Vanilla [pi](https://github.com/earendil-works/pi) is skills-only by design. If you run the OMP fork instead, dotagents detects it separately and additionally manages roles and MCP servers there — the two never conflict.
8182

82-
Amp, OpenCode, and OpenClaw can read the repo's skills through standard conventions but are not managed; a surface gets a "yes" above only after its native behavior is verified end to end.
83+
† OpenCode reads `~/.agents/skills/` natively, so dotagents delivers skills without a mirror when the config root is `~/.agents`; a custom config root mirrors into `~/.config/opencode/skills/` like other harnesses. OpenCode's only hook surface is a JS plugin API, so hooks stay unsupported.
84+
85+
Amp and OpenClaw can read the repo's skills through standard conventions but are not managed; a surface gets a "yes" above only after its native behavior is verified end to end.
8386

8487
## Working with skills
8588

docs/harness-map.html

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,11 @@ <h2>Factory Droid</h2><div class="path">~/.factory/{skills,droids}</div>
310310
<h2>Pi</h2><div class="path">~/.pi/agent/skills</div>
311311
<div class="chips"><span class="chip">skills</span><span class="chip">skills-only by design</span><span class="chip">OMP fork: +agents +MCP*</span></div>
312312
</article>
313+
<article class="card" style="--accent: var(--red)">
314+
<div class="topline"><div class="logo">{ }</div><div class="badge">primary</div></div>
315+
<h2>OpenCode</h2><div class="path">~/.config/opencode/{agents,opencode.json}</div>
316+
<div class="chips"><span class="chip">skills (native ~/.agents)</span><span class="chip">agents</span><span class="chip">MCP</span><span class="chip">no hooks</span></div>
317+
</article>
313318
</section>
314319

315320
<section class="layout">
@@ -323,6 +328,7 @@ <h3>Managed support matrix</h3>
323328
<tr><td>Codex</td><td class="yes">managed mirror</td><td class="yes">TOML</td><td class="yes">TOML</td><td class="yes">hooks.json</td><td class="yes">AGENTS.md</td></tr>
324329
<tr><td>Hermes</td><td class="yes">external_dirs</td><td class="no">not managed</td><td class="yes">YAML</td><td class="yes">YAML</td><td class="partial">native context</td></tr>
325330
<tr><td>Factory Droid</td><td class="yes">managed mirror</td><td class="yes">.md</td><td class="yes">JSON</td><td class="yes">settings</td><td class="yes">AGENTS link</td></tr>
331+
<tr><td>OpenCode</td><td class="yes">native ~/.agents</td><td class="yes">.md</td><td class="yes">JSON</td><td class="no">JS plugin only</td><td class="partial">native AGENTS.md</td></tr>
326332
<tr><td>Pi*</td><td class="yes">managed mirror</td><td class="no">not supported*</td><td class="no">not supported*</td><td class="no">not managed</td><td class="no">not managed</td></tr>
327333
</tbody>
328334
</table>
@@ -335,7 +341,6 @@ <h3>Compatibility-only queue</h3>
335341
<div class="compat">
336342
<div class="mini" style="--accent: var(--gold)"><div class="name"><span class="mark"></span>Amp</div><p>CLI support remains for migration and one-off local configs. Not a canonical default target.</p></div>
337343
<div class="mini" style="--accent: var(--red)"><div class="name"><span class="mark"></span>OpenClaw</div><p>Needs an owner and verified config surface before dotagents treats it as managed.</p></div>
338-
<div class="mini" style="--accent: var(--blue)"><div class="name"><span class="mark">{ }</span>OpenCode</div><p>Compatibility research only. Add support when there is a real daily workflow to preserve.</p></div>
339344
<div class="mini" style="--accent: var(--green)"><div class="name"><span class="mark">?</span>New harnesses</div><p>Help wanted: document skills root, MCP config, hooks, roles, and failure mode first.</p></div>
340345
</div>
341346
</div>
@@ -349,7 +354,7 @@ <h3>Compatibility-only queue</h3>
349354

350355
<footer>
351356
<span>Source of truth: dotagents.yaml + cmd/dotagents/harness.go</span>
352-
<span>Primary stack: Claude Code · Codex · Hermes · Factory Droid · Pi</span>
357+
<span>Primary stack: Claude Code · Codex · Hermes · Factory Droid · OpenCode · Pi</span>
353358
</footer>
354359
</main>
355360
</body>

docs/harness-map.png

57.1 KB
Loading

docs/site/index.html

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<meta charset="utf-8">
55
<meta name="viewport" content="width=device-width, initial-scale=1">
66
<title>dotagents - public CLI for your private agent config</title>
7-
<meta name="description" content="Public Go CLI that syncs skills, MCP servers, hooks, and roles from your private ~/.agents repository into Claude Code, Codex, Droid, Hermes, and Pi.">
7+
<meta name="description" content="Public Go CLI that syncs skills, MCP servers, hooks, and roles from your private ~/.agents repository into Claude Code, Codex, Droid, Hermes, OpenCode, and Pi.">
88
<style>
99
:root {
1010
color-scheme: dark;
@@ -276,6 +276,17 @@ <h2>Supported harnesses</h2>
276276
<div class="hname">Pi</div>
277277
<div class="htag managed">managed</div>
278278
</div>
279+
<!-- OpenCode - sst/opencode square-in-square -->
280+
<div class="hcard">
281+
<div class="icon">
282+
<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
283+
<path d="M320 224V352H192V224H320Z" fill="var(--muted)"/>
284+
<path fill-rule="evenodd" clip-rule="evenodd" d="M384 416H128V96H384V416ZM320 160H192V352H320V160Z" fill="var(--ink)"/>
285+
</svg>
286+
</div>
287+
<div class="hname">OpenCode</div>
288+
<div class="htag managed">managed</div>
289+
</div>
279290
<!-- Amp - Sourcegraph triple chevron -->
280291
<div class="hcard compat">
281292
<div class="icon">
@@ -288,17 +299,6 @@ <h2>Supported harnesses</h2>
288299
<div class="hname">Amp</div>
289300
<div class="htag compat-tag">compat</div>
290301
</div>
291-
<!-- OpenCode - sst/opencode square-in-square -->
292-
<div class="hcard compat">
293-
<div class="icon">
294-
<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
295-
<path d="M320 224V352H192V224H320Z" fill="var(--muted)"/>
296-
<path fill-rule="evenodd" clip-rule="evenodd" d="M384 416H128V96H384V416ZM320 160H192V352H320V160Z" fill="var(--ink)"/>
297-
</svg>
298-
</div>
299-
<div class="hname">OpenCode</div>
300-
<div class="htag compat-tag">compat</div>
301-
</div>
302302
<!-- OpenClaw - pixel lobster mascot -->
303303
<div class="hcard compat">
304304
<div class="icon">
@@ -386,18 +386,19 @@ <h3>Sync surface by harness</h3>
386386
<tr><th scope="row">Codex</th><td class="y">yes</td><td class="y">yes</td><td class="y">yes</td><td class="y">yes</td><td class="y">AGENTS.md</td></tr>
387387
<tr><th scope="row">Factory Droid</th><td class="y">yes</td><td class="y">yes</td><td class="y">yes</td><td class="y">yes</td><td class="y">AGENTS link</td></tr>
388388
<tr><th scope="row">Hermes</th><td class="y">yes</td><td class="n">--</td><td class="y">yes</td><td class="y">yes</td><td style="color:var(--gold)">native ctx</td></tr>
389+
<tr><th scope="row">OpenCode</th><td class="y">yes†</td><td class="y">yes</td><td class="y">yes</td><td class="n">--</td><td style="color:var(--gold)">native AGENTS.md</td></tr>
389390
<tr><th scope="row">Pi*</th><td class="y">yes</td><td class="n">--*</td><td class="n">--*</td><td class="n">--</td><td class="n">--</td></tr>
390391
</tbody>
391392
</table>
392393
</div>
393-
<p class="section-sub" style="margin-top:10px">* Vanilla pi is skills-only by design; on the OMP fork dotagents additionally manages agent roles and MCP servers.</p>
394+
<p class="section-sub" style="margin-top:10px">* Vanilla pi is skills-only by design; on the OMP fork dotagents additionally manages agent roles and MCP servers. &dagger; OpenCode reads <code>~/.agents/skills/</code> natively, so skills need no mirror when the config root is <code>~/.agents</code>; hooks are a JS plugin surface only.</p>
394395
</div>
395396
</section>
396397

397398
<!-- Landscape -->
398399
<section>
399400
<h2>Landscape</h2>
400-
<p class="section-sub">Project-level generators win on tool breadth. dotagents is user-level: one private repo that follows you across machines, five harnesses deep, with pinned and audited external skills.</p>
401+
<p class="section-sub">Project-level generators win on tool breadth. dotagents is user-level: one private repo that follows you across machines, six harnesses deep, with pinned and audited external skills.</p>
401402

402403
<div class="panel">
403404
<h3>How it compares</h3>
@@ -411,7 +412,7 @@ <h3>How it compares</h3>
411412
<tr><th scope="row">Hooks sync</th><td class="y">yes</td><td class="y">yes</td><td class="n">no</td><td class="n">no</td></tr>
412413
<tr><th scope="row">Agent roles</th><td class="y">rendered native</td><td class="y">yes</td><td style="color:var(--gold)">experimental</td><td class="n">no</td></tr>
413414
<tr><th scope="row">Pinned + audited externals</th><td class="y">lock file + audit</td><td class="n">no pinning</td><td class="n">no pinning</td><td style="color:var(--gold)">tracks source, no pin</td></tr>
414-
<tr><th scope="row">Harness coverage</th><td class="y">5 deep</td><td style="color:var(--gold)">35 broad</td><td style="color:var(--gold)">31 broad</td><td style="color:var(--gold)">~5</td></tr>
415+
<tr><th scope="row">Harness coverage</th><td class="y">6 deep</td><td style="color:var(--gold)">35 broad</td><td style="color:var(--gold)">31 broad</td><td style="color:var(--gold)">~5</td></tr>
415416
<tr><th scope="row">Install</th><td style="color:var(--gold)">curl / mise / go</td><td style="color:var(--gold)">npm / brew</td><td style="color:var(--gold)">npm</td><td style="color:var(--gold)">npm</td></tr>
416417
</tbody>
417418
</table>

0 commit comments

Comments
 (0)