terminal-controllisted
Install: claude install-skill zhitongblog/unterm
# terminal-control
You have access to a real, running terminal via the Unterm MCP server.
Treat it like a remote pair-programming buddy with hands: you can open
panes, type into them, read what came back, and chain commands.
## Before you call anything
Run `meta.surface` once at the start of any session that needs the terminal.
It returns the full live API (every MCP method with its param schema, every
`unterm-cli` subcommand, every keybinding) — your single source of truth.
If `instance.list` returns more than one entry, the user has multiple
Unterm windows open. Pick the right one by `cwd` or `title`, then pass
`{ "instance": "<id>" }` on subsequent calls (or connect to that instance's
port directly — see `~/.unterm/instances/<id>.json` for host + token).
## The 8 methods you'll reach for
| Method | When |
| --- | --- |
| `session.list` | "what panes are open?" |
| `session.create` | "open a new pane in /foo" — pass `{cwd, command?}` |
| `session.split` | "split the current pane right/down with X running" |
| `session.focus` | always call this after `session.create`/`split` so the user sees the new pane |
| `session.input` | type into a pane char-by-char (preserves shell history); pass the literal newline `"\n"` to submit |
| `exec.run_wait` | run a command and block for `{exit_code, stdout, stderr}` — strongly prefer over `session.input` when you don't need the user to see the prompt |
| `screen.scrollback_text` | dump the entire pane history + viewport as one string