
Company News
Socket Joins New OpenJS Program to Fund Node.js Security Work
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.
@opentag/runner
Advanced tools
Executor contracts and the generic ACP host for OpenTag.
Use this package when building a local daemon, hosted runner, or custom executor that consumes OpenTag runs.
pnpm add @opentag/runner
ExecutorAdapter: interface every executor implements.createEchoExecutor: smoke-test executor that echoes the normalized command.createAcpAgentExecutor: generic stdio ACP host for an ACP launch definition.createBuiltInAcpExecutors: built-in launch profiles for pinned Codex, Claude, and OpenCode packages plus installed Cursor, Hermes, and OpenClaw ACP commands.builtInAcpAgentDefinitions: the data-only built-in definitions and Registry provenance where a pinned Registry package is used.createAcpExecutor: lower-level generic stdio ACP host for an internal integration manifest.createRunBranch, changedFiles, and branchNameForRun.nodeCommandRunner and assertCommandSucceeded.capability contract so setup, doctor, status, and service surfaces can report profile, cancellation, hook-completion, progress-event, approval-boundary, prompt/context trust gates, workspace isolation, ACP session-cwd conformance, secret, and completion-signal support honestly.import type { ExecutorAdapter } from "@opentag/runner";
export const executor: ExecutorAdapter = {
id: "my-agent",
displayName: "My Agent",
capability: {
id: "my-agent",
invocation: "spawn",
supportsProfile: false,
supportsStreaming: false,
supportsCancel: false,
supportsHookCompletion: false,
progressEvents: "audit",
approvalMode: "opentag_policy",
contextAccess: ["context_packet", "context_pointers", "workspace"],
promptAssembly: "executor_adapter",
writeAccess: "workspace",
conversationAccess: "request",
promptMutation: "none",
rawContextAccess: false,
writeActionAccess: "none",
workspaceIsolation: "branch",
requiredSecrets: [],
completionSignals: [
{
type: "process_exit",
required: true,
description: "The process exits after producing the final result."
}
]
},
async canRun() {
return { ready: true };
},
async run(input, sink) {
await sink.emit({
type: "executor.started",
message: `Running ${input.command.rawText}`,
at: new Date().toISOString()
});
return {
conclusion: "success",
summary: "Handled by my-agent"
};
},
async cancel() {
return;
}
};
Codex, Claude Code, Cursor, OpenCode, Hermes, and OpenClaw run through the same
generic ACP host. Codex, Claude, and OpenCode use exact package versions through
npx; Cursor uses its installed native ACP command; Hermes uses its configured
local command and profile; OpenClaw uses its installed Gateway ACP bridge.
OpenCode launches in pure mode so external plugins cannot pollute the strict ACP
stdout stream. The generic ACP host
passes the attempt workspace as the ACP session cwd, scrubs the child
environment, and terminates the adapter process group when a run is cancelled.
OpenClaw declares supportsCancel: false: OpenTag requests cancellation and
stops its local bridge, but does not attest termination of Gateway-owned tool
subprocesses.
ExecutorAdapter is public API. Add optional fields rather than changing required method signatures.
FAQs
Executor contracts and built-in runner adapters for OpenTag.
We found that @opentag/runner demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.

Company News
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.

Security News
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.

Research
/Security News
A malicious Firefox extension fetches its payload after installation to evade detection, steal Google session cookies, and automate account takeover.