Harness Alchemist
v0.1.5 · MIT · zero-dependency CLI · Node 22+ / Bun 1.2+

One scaffold.
Five agent harnesses.

Harness Alchemist generates one TypeScript plugin repository that installs natively into Claude Code, Codex/ChatGPT, OpenCode, Google Antigravity, and DeepSeek Harness — with skills that own their runtime and thin adapters for everything else.

npx harness-alchemist@latest create my-plugin … See it installed everywhere ↓
~/Workspace
$ 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
✔ OpenCode tool delegates to the shared skill script
✔ DeepSeek adapter delegates to the shared skill script
✔ Validated universal plugin scaffold · 19 files in payload

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

Plugin hook registers tools that spawn skill scripts.

"plugin": ["my-plugin"]

Antigravity native

Nested skill bundle validated by agy.

agy plugin install ./my-plugin

DeepSeek Harness cordis

Cordis service plugin mounted through cordis.patch.yml.

dsh plugin --profile web add my-plugin

Skills own the runtime

Product skills ship behavioral .mjs / .py twins under skills/<name>/scripts/. The harness entrypoints are thin adapters that delegate to them — so your logic lives in one portable place, not five SDKs.

skills/<name>/scripts/main.mjs
// 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
src/opencode.ts — thin adapter
import { tool } from "@opencode-ai/plugin"

tool({
  description: "Run the shared-skill workflow",
  args: { input: schema.string() },
  execute: async ({ input }) =>
    runSkillScript("main.mjs", input),
})
// src/deepseek.ts mirrors this as a
// Cordis ctx.provide() service

A validator with two tiers

npm run verify gates every change: TypeScript checks, tests, scaffold validation, and an npm-payload audit. Python entrypoints get compiled and smoke-executed — without Python installed.

Tier B — always on
Agent Skills frontmatter compliance
SKILL.md reference resolution
.mjs / .py twin parity
manifest cross-consistency (5 harnesses)
npm payload audit
Tier A — WebAssembly sandbox
# optional pyodide devDependency
await loadPyodide()

// ast-compiles every Python entrypoint,
// smoke-executes the tool contract,
// asserts {"ok": true} on stdout —
// all inside Node, zero native deps