
Security News
Lovable’s OJ Rewrites Vite’s Dev Server in Rust as AI Lowers the Cost of Forking Open Source
Lovable’s OJ rewrites Vite’s dev server in Rust, reducing memory use and preview times as AI lowers the cost of open source reimplementation.
agent-interop-runtime
Advanced tools
Agent Interop Runtime is a local MCP server for connecting supported coding agents through their native local interfaces.
It keeps provider sessions separate and adds a safe coordinator for directed messages between them. It does not merge provider accounts. It does not place an agent inside a normal ChatGPT web conversation. It does not bypass a provider login or approval screen.
The runtime can do the following when the matching provider is installed and available.
The shared conversation record is not a shared native transcript. Each provider keeps its own context. A message sent through the coordinator is recorded with a sender, recipient, reply link, and delivery receipt. A queued receipt means that transport accepted the message. It does not mean that the provider completed the task.
The runtime supports Windows macOS and Linux.
Use Node 20 through Node 26. The published package includes the native PTY dependency required by Freebuff CLI mode.
Freebuff support requires one of these local installations.
The other providers have their own requirements.
The runtime never fabricates an available provider. Run the doctor command to see the exact reason for an unavailable provider.
The simplest installation uses pnpm.
pnpm add --global agent-interop-runtime
agent-interop-runtime doctor
You can also use the package without a global install.
pnpm dlx agent-interop-runtime@0.2.12 doctor
pnpm dlx agent-interop-runtime@0.2.12 serve
The version is pinned in the examples so a host does not silently change behavior during startup. Update the version deliberately after reviewing a release.
Build from source when developing the project.
pnpm install
pnpm build
node dist/src/cli.js doctor
The local Codex configuration uses this shape.
[mcp_servers.agent_interop]
command = 'node'
args = ['C:\path\to\agent-interop-runtime\dist\src\cli.js', 'serve']
enabled = true
The installer can add or repair this entry.
pnpm dlx agent-interop-runtime@0.2.12 install
pnpm dlx agent-interop-runtime@0.2.12 install --write
The write command preserves unrelated Codex configuration, makes one backup, uses an atomic replacement, and refuses malformed existing content. Set CODEX_HOME when Codex uses a nonstandard configuration directory.
Restart the local MCP client after changing its configuration.
The installer is explicit by design. npm installation does not change a user configuration through a postinstall hook.
Desktop mode is selected automatically when the local orchestrator can be reached.
The runtime discovers the current loopback port from supported readiness files, local logs, and local process data. It then calls the local projects route.
GET /api/projects
Writes require the current launch authorization header.
x-freebuff-launch-id
The runtime searches local readiness and log locations for the current launch ID. It verifies the ID through the local health route before registering mutation tools. If Desktop rotates the ID, a rejected request triggers a fresh discovery and one safe retry. If the ID cannot be verified the runtime remains read only.
The connection is refreshed before every Desktop write. Capability results are cached only briefly. A restart can therefore change both the loopback port and the launch ID without requiring an MCP restart. The event stream uses the same refreshed connection when it reconnects after an authorization failure.
For a controlled deployment the readiness file can be supplied with FREEBUFF_DESKTOP_READINESS_FILE. The file must contain a loopback URL or port and a current launch ID. Records older than ten minutes are ignored.
Desktop messaging uses the local route below.
POST /api/thread/<thread id>/message
This is local communication with the running Desktop process. It is not a public relay.
Desktop progress uses the local event stream when the installed Desktop exposes it. Progress is bounded and cursor based. A stale or unavailable stream does not erase the saved thread data.
Use explicit CLI mode when you want the bridge to own a managed Freebuff terminal session.
Set these variables in the MCP server environment.
FREEBUFF_MCP_CLI_MODE=pty
FREEBUFF_CLI_PATH=/absolute/path/to/freebuff
FREEBUFF_PROJECT_ROOT=/absolute/path/to/project
On Windows the path may point to freebuff.exe. On macOS and Linux it must point to an executable file. The runtime also checks the normal user local installation locations for each operating system.
CLI mode always wins over Desktop discovery.
The startup probe uses the same native PTY library as real sessions. It reports the Node version, operating system, and node pty version. A failed probe disables CLI writes and explains the failure. It never reports fake success.
The current package uses node pty 1.2.0-beta.15. If a machine reports a PTY startup failure, run the following from the project or reinstall the package so the native dependency is rebuilt for the active Node runtime.
pnpm rebuild node-pty
pnpm pty:probe
Freebuff CLI readiness accepts current full screen terminal markers after removing terminal control sequences. A future CLI can provide a custom regular expression through FREEBUFF_CLI_READY_PATTERN.
CLI history is read from the local Freebuff history directory. A selected conversation ID is passed back to Freebuff when the bridge resumes it. The bridge never substitutes the newest conversation for a requested ID.
Use the doctor command before testing messages.
agent-interop-runtime doctor
OpenCode needs its local server.
opencode serve --hostname 127.0.0.1 --port 4096
Set OPENCODE_SERVER_URL for another local port. Remote OpenCode requires OPENCODE_SERVER_USERNAME and OPENCODE_SERVER_PASSWORD. The default username is opencode when only a password is configured.
Codex requires its app server to be installed and discoverable. Claude requires claude-code-acp. Cursor requires the agent command with ACP support. Provider credentials and client approvals remain user actions.
Model selection, agent selection, and reasoning selection are separate controls. A provider capability report identifies which controls are real. OpenCode model selection is a next prompt override using providerID and modelID. OpenCode native session model mutation is not advertised because the validated server API does not provide that operation.
Write-enabled servers can expose a reduced catalog for hosts with tight context budgets. Profiles only remove tools; a tool present in two profiles behaves identically, and the default profile is unchanged from earlier releases.
INTEROP_TOOLS_PROFILE=core # unified provider control, coordinator messaging, handoffs, work/evidence
INTEROP_TOOLS_PROFILE=legacy # core plus per-provider Freebuff thread tools and conversation bookkeeping
INTEROP_TOOLS_PROFILE=full # every tool (default)
The stdio server also accepts --profile core (and legacy/full). freebuff_status reports the active profile. Read-only mode (INTEROP_READ_ONLY=1) composes with any profile. Unknown profile values fail startup with the supported list.
An offline two-provider benchmark harness measures fixed handoff tasks end to end: payload bytes, token estimates (js-tiktoken o200k_base — an offline estimate, not native provider usage), and duplicate-delivery counters for events, messages, and provider sends.
pnpm bench
The harness runs entirely in memory against the real store and registry contracts; no live provider is contacted and no usage or dollar savings are claimed.
Handoff packets are measured against a token budget (INTEROP_HANDOFF_TOKEN_BUDGET, default 2,000). The durable record keeps every field; the delivery packet lists oversized fields as explicit omissions with instructions for requesting them. CI runs the same harness as a gate (pnpm bench:check) and fails on any duplicate event/message delivery or duplicate provider send.
Create a local conversation and attach exact provider sessions.
conversation_create
conversation_join
conversation_send
conversation_read
Messages are directed. Broadcast is not implicit. The coordinator limits transcript size, stores delivery receipts, and requires an explicit new action for every reply. This prevents accidental recursive agent loops.
The coordinator is local. It does not grant a provider permission to edit a workspace. Provider permissions remain controlled by the provider and the user.
Read only mode is used when authorization or provider control is unavailable.
The runtime redacts credential shaped fields and bounds diagnostic output. File access is restricted to approved project roots. Protected credential files are denied. Large files are rejected. Local verification is disabled unless INTEROP_ALLOW_VERIFICATION=1 is explicitly set.
HTTP mode binds to loopback by default and requires a bearer token. Remote binding requires an explicit opt in and trusted network protection. Origin checks, request limits, idle session cleanup, and MCP session cleanup are enabled.
Run the local checks below.
pnpm typecheck
pnpm test
pnpm lint
pnpm mcp:validate
pnpm audit --prod --audit-level high
pnpm build
pnpm pty:probe
pnpm pack:check
GitHub Actions runs the same checks on Ubuntu macOS and Windows. The matrix also tests Node 20 22 24 and 26. The PTY probe is an environment check. It proves that the native PTY can start on that runner. It does not prove that Freebuff is installed or signed in on that runner.
This package does not promise a single native chat transcript across providers. It does not wake an idle provider application without host support. It does not install provider applications or create provider credentials. It does not claim live four provider cooperation until that exact combination has been run with authenticated providers and recorded evidence.
The repository is private while compatibility evidence is collected. The package is designed for local use and safe degradation. Freebuff Desktop and CLI are both supported paths when installed and authenticated. The correct test is doctor, followed by provider session discovery, followed by a unique nonce message in the selected native session.
FAQs
A capability graded MCP runtime for live coding agent sessions.
The npm package agent-interop-runtime receives a total of 93 weekly downloads. As such, agent-interop-runtime popularity was classified as not popular.
We found that agent-interop-runtime demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Lovable’s OJ rewrites Vite’s dev server in Rust, reducing memory use and preview times as AI lowers the cost of open source reimplementation.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.