
Research
/Security News
Popular Go Decimal Library Targeted by Long-Running Typosquat with DNS Backdoor
A long-running Go typosquat impersonated the popular shopspring/decimal library and used DNS TXT records to execute commands.
@composio/ao-plugin-runtime-tmux
Advanced tools
Runtime plugin for executing agent sessions in tmux.
Creates isolated tmux sessions for each agent. Each session runs in a separate tmux session with:
const handle = await runtime.create({
sessionId: "my-app-3",
workspacePath: "/Users/dev/.worktrees/my-app/my-app-3",
launchCommand: "claude -p 'Fix bug in auth module'",
environment: {
AO_SESSION_ID: "my-app-3",
AO_PROJECT_ID: "my-app",
},
});
What happens:
sessionId (only alphanumeric, dash, underscore allowed)tmux new-session -d -s my-app-3 -c /path/to/workspacetmux ... -e KEY=VALUEtmux send-keys -t my-app-3 "claude -p '...'" Enterawait runtime.sendMessage(handle, "Fix the test failure in auth.test.ts");
What happens:
tmux send-keys -t my-app-3 C-u-l flag (literal mode)tmux load-buffer → tmux paste-buffertmux send-keys -t my-app-3 EnterWhy the complexity?
send-keys without -l interprets special strings ("Enter", "Space") as key namesconst output = await runtime.getOutput(handle, 50); // last 50 lines
Uses tmux capture-pane -t my-app-3 -p -S -50 to capture terminal buffer.
const alive = await runtime.isAlive(handle);
Uses tmux has-session -t my-app-3 (exit code 0 = exists, 1 = doesn't exist).
await runtime.destroy(handle);
Kills tmux session: tmux kill-session -t my-app-3 (ignores errors if already dead).
For Terminal plugins (iTerm2, web):
const attachInfo = await runtime.getAttachInfo(handle);
// Returns: { type: "tmux", target: "my-app-3", command: "tmux attach -t my-app-3" }
Session ID validation:
const SAFE_SESSION_ID = /^[a-zA-Z0-9_-]+$/;
Only allows safe characters. Prevents shell injection via session name (used in tmux commands).
destroy() silently succeeds (idempotent)const metrics = await runtime.getMetrics(handle);
// Returns: { uptimeMs: 123456 }
Tracks uptime (stored in RuntimeHandle.data.createdAt).
This plugin is tested indirectly via packages/core/src/__tests__/tmux.test.ts (utility functions) and integration tests.
To test manually:
# Start a test session
tmux new-session -d -s test-session -c /tmp
tmux send-keys -t test-session "echo hello" Enter
# Capture output
tmux capture-pane -t test-session -p
# Kill session
tmux kill-session -t test-session
If tmux is not in PATH, all operations fail. Install via:
brew install tmuxapt-get install tmux or yum install tmuxIf a session with the same ID already exists, create() fails. The orchestrator should ensure unique session IDs.
tmux sessions keep running even if the orchestrator dies. Use tmux list-sessions to find orphans, tmux kill-session -t <name> to clean up.
getOutput() limited by tmux buffer size (default 2000 lines)Why tmux over raw processes?
tmux attach -t session-nameWhy detached mode?
FAQs
Runtime plugin: tmux sessions
We found that @composio/ao-plugin-runtime-tmux demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 7 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
A long-running Go typosquat impersonated the popular shopspring/decimal library and used DNS TXT records to execute commands.

Research
Active npm supply chain attack compromises @antv packages in a fast-moving malicious publish wave tied to Mini Shai-Hulud.

Security News
/Research
Socket detected malicious node-ipc versions with obfuscated stealer/backdoor behavior in a developing npm supply chain attack.