One scaffold.
Five agent harnesses.
Harness Alchemist uses a fast native Rust CLI to generate one TypeScript plugin repository
for Claude Code, Codex/ChatGPT, OpenCode, Google Antigravity, and DeepSeek Harness. Skills
declare one portable contract; @lunarmoon26/agent-skill-runtime powers the thin
host adapters that execute it.
$ npx harness-alchemist@latest create my-plugin \ --description "What the plugin does" \ --author "Example Team" --repository example/my-plugin Created universal plugin scaffold at ~/Workspace/my-plugin Next: cd my-plugin && npm install && npm run verify $ cd my-plugin && npm run verify ✔ Native Rust validation passed ✔ Shared runtime adapters passed ✔ Universal npm payload audited
Install-tested, not just scaffolded
Every install path below was exercised against real CLIs before shipping in the template. Skills load natively where possible; OpenCode and DeepSeek mount the npm package as their runtime.
Claude Code native
Marketplace plugin with bundled skills.
claude plugin install my-plugin@my-plugins
Codex native
Marketplace snapshot, headless CLI install.
codex plugin add my-plugin@my-plugins
OpenCode npm
Shared runtime maps portable tool manifests into V2 plugin tools.
"plugins": ["my-plugin"]
Antigravity native
Nested skill bundle validated by agy.
agy plugin install ./my-plugin
DeepSeek Harness cordis
Shared runtime registers Cordis tools through cordis.patch.yml.
dsh plugin --profile web add my-plugin
Skills declare; the shared runtime executes
Each product skill owns a skill-runtime.json manifest with its fixed executable,
portable JSON schemas, limits, and capabilities. @lunarmoon26/agent-skill-runtime
discovers that contract, validates every call, and executes the skill behind thin host adapters.
// one JSON object in… const request = JSON.parse(stdin) // …one JSON result out stdout.write(JSON.stringify({ ok: true, plugin: "my-plugin", echo: request, })) // non-zero exit + stderr on failure
import { Plugin } from "@opencode/plugin" import { createSkillRuntime } from "@lunarmoon26/agent-skill-runtime" const plugin = Plugin.define({ id: "my-plugin", async setup(ctx) { const runtime = await createSkillRuntime({ pluginRoot }) await ctx.tool.transform((editor) => { // add tools from runtime.listTools() }) }, }) export default plugin // DeepSeek uses the same contract via /deepseek
- One manifest pins the executable engine and path; model input can never select an arbitrary script.
- The runtime enforces schemas, byte limits, timeouts, cancellation, and capability approval.
- OpenCode and DeepSeek adapters stay thin while Claude, Codex, and Antigravity consume the shared skill.
Rust-fast validation without project-code execution
npm run verify gates every change with Rust and TypeScript checks, runtime tests,
scaffold validation, and staged npm-package audits. The native CLI parses Python syntax with
Ruff but never executes untrusted project Python during structural validation.
$ harness-alchemist validate .
Agent Skills frontmatter
SKILL.md reference resolution
portable runtime manifests
Python syntax via Ruff
cross-harness consistency
harness-alchemist
└── optional dependency
└── native binary for this OS + CPU
macOS x64 · arm64
Linux x64 · arm64 · static musl
Windows x64 · arm64
- One main package and six native packages publish through npm Trusted Publishing with provenance.
- Creation never overwrites a non-empty destination; templates are versioned (
v0.1.0canonical). - The self-hosting repository extends the same scaffold contract with its Rust CLI and release tooling.