You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Every documented path into this project currently assumes a Node toolchain and a source checkout. The README examples all read node dist/cli.js, and docs/agent-skill.md install is a clone plus a build plus copying a skill directory.
#3 and #8 already cover the npm-shaped answers — a mft-config bin, a packable tarball, npx with no clone. This issue is for the two distribution shapes neither of those covers, evaluated together because they compete for the same "how does a person actually get this" slot.
This is an investigation, not an implementation. The deliverable is a decision with reasoning, not a built artifact.
Option A — a standalone executable, no Node required
"Download this, run it." No npm, no toolchain, no clone.
The constraint that makes this non-trivial: @julusian/midi is a native addon. A single-file executable has to carry a prebuilt .node for every platform and architecture we claim to support — macOS arm64, macOS x64, Windows x64, Linux x64 at minimum. This is the whole difficulty; it is not a normal bundling job.
To evaluate:
Node SEA (single executable applications) — how it handles native addons, and whether the .node has to be extracted to disk at runtime
pkg — now deprecated/unmaintained, so probably disqualifying, but worth confirming rather than assuming
bun build --compile — different native-addon story, worth a look
Shipping a plain platform tarball with a bundled Node runtime instead of a true single file — less elegant, possibly much less work
macOS code signing and notarization: an unsigned downloaded binary that talks to USB is a bad first-run experience, and this may dominate the total cost
CI release matrix and artifact size
Option B — a long-running local process the agent talks to
Recorded at the bottom of #8 and not yet scoped. Moving it here so the two options can be compared rather than each being evaluated in isolation.
Dan, 2026-08-07: "it can also be like a command that you run or program you install or something, that Claude talks to."
An MCP server or small daemon, installed once, that every agent speaking the protocol can use.
Arguments for:
The Twister connection stays open instead of being rediscovered on every command
One install serves Claude Code, Codex, and anything else that speaks MCP — no per-tool skill directory to copy and keep in sync
Typed tool definitions instead of the agent composing shell strings — a narrower and safer surface for something that writes settings over USB
Matches how chromatik-mcp already installs and behaves
Does a persistent process holding the MIDI port conflict with a DAW or the stock Twister editor wanting the same port?
Is the plan/apply flow still legible to a human when it is tool calls instead of copy-pasteable commands?
They are not mutually exclusive
A human running one-off exports and an agent driving the device repeatedly are different users and may deserve different answers. A plausible outcome is: MCP server for agents, npm/npx per #3 and #8 for humans, and no standalone binary at all. Another is that the binary is the only thing that makes the "download and go" promise in the README true. Decide deliberately rather than by default.
Acceptance criteria
A written recommendation covering both options, with the reasoning and the rejected alternatives
The native-addon question answered concretely for whichever bundler is recommended — verified against a real build, not inferred from docs
A cost estimate for macOS signing and notarization if a binary is recommended
The MIDI port-contention question answered before any daemon work is scheduled
Every documented path into this project currently assumes a Node toolchain and a source checkout. The README examples all read
node dist/cli.js, anddocs/agent-skill.mdinstall is a clone plus a build plus copying a skill directory.#3 and #8 already cover the npm-shaped answers — a
mft-configbin, a packable tarball,npxwith no clone. This issue is for the two distribution shapes neither of those covers, evaluated together because they compete for the same "how does a person actually get this" slot.This is an investigation, not an implementation. The deliverable is a decision with reasoning, not a built artifact.
Option A — a standalone executable, no Node required
"Download this, run it." No npm, no toolchain, no clone.
The constraint that makes this non-trivial:
@julusian/midiis a native addon. A single-file executable has to carry a prebuilt.nodefor every platform and architecture we claim to support — macOS arm64, macOS x64, Windows x64, Linux x64 at minimum. This is the whole difficulty; it is not a normal bundling job.To evaluate:
.nodehas to be extracted to disk at runtimepkg— now deprecated/unmaintained, so probably disqualifying, but worth confirming rather than assumingbun build --compile— different native-addon story, worth a lookOption B — a long-running local process the agent talks to
Recorded at the bottom of #8 and not yet scoped. Moving it here so the two options can be compared rather than each being evaluated in isolation.
Dan, 2026-08-07: "it can also be like a command that you run or program you install or something, that Claude talks to."
An MCP server or small daemon, installed once, that every agent speaking the protocol can use.
Arguments for:
chromatik-mcpalready installs and behavesOpen questions:
They are not mutually exclusive
A human running one-off exports and an agent driving the device repeatedly are different users and may deserve different answers. A plausible outcome is: MCP server for agents, npm/
npxper #3 and #8 for humans, and no standalone binary at all. Another is that the binary is the only thing that makes the "download and go" promise in the README true. Decide deliberately rather than by default.Acceptance criteria
mft-configcommand #3 and One-click install for agentic tooling (Claude Code plugin + npx-runnable CLI) #8Related
mft-configcommand #3 —mft-configpackaging and thebinnamenpx, Claude Code plugin. Option B above was recorded there and is superseded by this issue.