aiterm-mcpBLOCK
One persistent MCP terminal your AI drives — and launches other coding agents (Codex/Grok/Composer) into. SSH, containers, and REPLs nest as text you send in. tmux-backed, token-reduced reads, headless over MCP.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
From any MCP client, launch Claude Code, Codex CLI, Grok CLI, or Cursor Agent CLI through one harness API inside a persistent interactive TUI.
This image represents different intelligences sharing one persistent workspace and advancing the same work from their own perspectives.
[](https://github.com/kitepon/aiterm-mcp/actions/workflows/ci.yml) [](https://www.npmjs.com/package/aiterm-mcp) [](https://www.npmjs.com/package/aiterm-mcp) [](https://nodejs.org) [](LICENSE)
(日本語: README.ja.md)
Let your AI orchestrate other AIs. Oneagent_launchcall selects the execution harness separately from its model and hands you a persistent session to drive. Cursor can run GPT, Claude, or Grok while Cursor still owns the session, hooks, and transcript. What it is: one persistent MCP terminal your AI drives — and can launch other coding agents into.ssh,docker exec, a REPL, or another agent's TUI all nest inside that one terminal as just text you send in. The mechanism is deliberately plain — your MCP client drives the other agent's terminal turn by turn: no hidden protocol, no separate aiterm-owned shared-memory layer, no autonomous negotiation. Launched agents still read the normal project and harness memory/configuration that a direct CLI launch would use. No human at a terminal required. aiterm is driven programmatically over MCP, so an AI can launc
6ed15160cac7OBSERVED · 2026-10-12Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add aiterm-mcp -- npx -y [email protected]
Exposed tools (9)
8 read · 1 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
agent_launch | read | |
diagnostics | read | |
pty_close | read | セッションを閉じ、ログ/読取位置を破棄する。 |
pty_key | read | 制御キーを送る(C-c, C-d, Enter, Tab, Up, Down... の別名に対応)。 |
pty_list | read | 握っているセッション一覧(名前 / 現在の前面コマンド / attach 状態 / サイズ)。 |
pty_open | read | ローカル永続端末(tmux セッション)を1個開き、session_id を返す。 |
pty_read | read | セッションの出力をトークン削減して読む(既定は前回読取位置からの増分)。 |
pty_send | write | セッションへテキスト(コマンド)を送る。送信後の出力は pty_read で取得する。 |
read | read | 試験用の固定文字列を返す |
Trust audit
BLOCKgrade F · trust 57/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | FAIL |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (9 observation(s))
- Network
- declared (4 observation(s))
- Shell
- declared (6 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
"--hostは~/.ssh/configの接続名かホスト名です。接続先は保存しません。--checkは入れ替えずに現在の版と更新先だけを確かめます。\n" +
with independently designed layers ensures that no single bypass compromises safety: schema gating prevents
## What is Shell Integration?[](#what-is-shell-integration "Direct link to What is Shell Integration?")
## Terminal Integration Settings[](#terminal-integration-settings "Direct link to Terminal Integration Settings")
### Command Execution Timeout Settings[](#command-execution-timeout-settings "Direct link to Command Execution Timeout Settings")
#### `roo-cline.commandExecutionTimeout`[](#roo-clinecommandexecutiontimeout "Direct link to roo-clinecommandexecutiontimeout")
#### `roo-cline.commandTimeoutAllowlist`[](#roo-clinecommandtimeoutallowlist "Direct link to roo-clinecommandtimeoutallowlist")
const value: unknown = JSON.parse(readFileSync(file, "utf8").replace(/^/u, ""));
--dsn "postgresql://readonly:[email protected]:5432/analytics"
const SECRET = "bughub-test-secret-do-not-use-0123456789abcdef";
libes-expect-paper.md
cert-vu763073-iterm2-tmux-rce.md
xterm-bracketed-paste-spec.md
export const WIN_NS = `aiterm-${createHash("sha1").update(SOCKDIR).digest("hex").slice(0, 12)}`;const url = `http://127.0.0.1:${http.address().port}`;const baseUrl = `http://127.0.0.1:${http.address().port}`;const url = `http://127.0.0.1:${http.address().port}`;const baseUrl = `http://127.0.0.1:${http.address().port}`;[{ message: "unexpected status 401 Unauthorized: fixture: token expired, url: http://127.0.0.1:43221/v1/responses",* [Email](/cdn-cgi/l/email-protection#300f4345525a5553440d735f5e44555e441056425f5d105d49107845521116515d400b525f54490d735855535b105f4544104758514416130003090b431058514040555e595e5710514410734952554271
* [Email](/cdn-cgi/l/email-protection#3e014d4b5c545b5d4a037d51504a5b504a1b0c0e584c51531b0c0e53471b0c0e764b5c1b0c0f185f534e055c515a47037d565b5d551b0c0e514b4a1b0c0e49565f4a1b0c094d1b0c0e565f4e4e5b505750
* [Email](/cdn-cgi/l/email-protection#f5ca8680979f909681c8b09b92999c869dd0c7c5d0b0c7d0cdc5d0ccc6d0c7c5b68c979087b4879ed0c7c5a69a938182948790d0c7c5bc9b96d0c7c286d0c7c5bd8097d0c7c59d9486d0c7c59790909bd0
assert.equal(aitermProcessProbe('"C:\\Program Files\\PowerShell\\7\\pwsh.exe" -NoLogo -NoProfile -NonInteractive -EncodedCommand JABFAHIAcgBvAHIAQQBjAHQAaQBvAG4AUAByAGUAZgBlAHIAZQBuAGMAZQA9ACcAUwB0AG8const probe = row(30, 11, 30, '"C:\\Program Files\\PowerShell\\7\\pwsh.exe" -NoLogo -NoProfile -NonInteractive -EncodedCommand JABFAHIAcgBvAHIAQQBjAHQAaQBvAG4AUAByAGUAZgBlAHIAZQBuAGMAZQA9ACcAUwB0AG8Ac
["grok-4.7-low-fast", "Grok 4.7 Low Fast"],
Gates applied: instruction_override, no_behavioural_pass.
6ed15160cac7full audit observations/trust-audit/mcp-server/kitepon__aiterm-mcp.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-12 | 6ed15160cac7 | BLOCK | F | 57 | first audit |
Questions
What is the aiterm-mcp MCP server?
One persistent MCP terminal your AI drives — and launches other coding agents (Codex/Grok/Composer) into. SSH, containers, and REPLs nest as text you send in. tmux-backed, token-reduced reads, headless over MCP.
What tools does aiterm-mcp expose?
9 in total: 8 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is aiterm-mcp safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (57/100) and found 7 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What credentials does aiterm-mcp need?
It reads AITERM_AUTH_TEST_MARKER, GROK_AUTH_PATH and XAI_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does aiterm-mcp run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as aiterm-codex-relay-experiment at 0.58.4.
How current is this page?
The grade is for one exact copy of the source (6ed15160cac7), read on 2026-10-12. The repository is watched and re-audited when it changes.