Agent skill

Term CLI

by EliasOenal in EliasOenal/term-cli

Controls interactive terminal sessions for running long-lived processes, servers, REPLs, debuggers, and TUI programs without blocking.

BSD-3-Clause-ClearAuto-check passedDatabases

Install Term CLI

skills CLI
$ npx skills add EliasOenal/term-cli --skill term-cli -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install EliasOenal/term-cli term-cli --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/EliasOenal/term-cli.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/term-cli .claude/skills/term-cli && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
term-cli
GitHub stars
103
Token cost
~3.3k tokens
SKILL.md length
940 words
Files
1
Skills in repo
1
Repo updated
First seen
Licence
BSD-3-Clause-Clear

At a glance

Controls interactive terminal sessions for running long-lived processes, servers, REPLs, debuggers, and TUI programs without blocking.

  • You need to run dev servers (npm run dev)
  • SKILL.md covers Quick Start, Commands, Example: Concurrency (Run long… and Example: Dev Server, plus 6 more sections
  • Calls jq and pytest
  • Databases (psql

What it does

Term CLI is an agent skill from EliasOenal/term-cli. Controls interactive terminal sessions for running long-lived processes, servers, REPLs, debuggers, and TUI programs without blocking. Use when you need to run dev servers (npm run dev), debuggers (pdb, gdb), REPLs (python, node), databases (psql, mysql), SSH sessions, or editors (vim, nano) — any interactive or blocking program.

Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Databases. It works with MySQL, PostgreSQL, npm and Python. The repository describes itself as: Interactive terminals for AI agents, built for what you can't --yes away. SSH+MFA, GRUB/U-Boot, debconf installers, SOL/serial consoles, fsck, cryptsetup, pdb/gdb, apt, certbot…

When your agent uses it

  • You need to run dev servers (npm run dev)
  • Databases (psql
  • Nano) — any interactive
  • Blocking program

Example prompts

  • “Use the term-cli skill to control interactive terminal sessions for running long-lived processes, servers, REPLs, debuggers, and TUI programs…”
  • “/term-cli”

Requirements

  • Python 3
  • Pre-approved tools (allowed-tools): Bash(term-cli:*)

What it can do on your machine

Read from SKILL.md and the folder at commit f0d890f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash(term-cli:*)

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • jq
    • pytest

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Term CLI loads about 3.3k tokens when it runs. Until then it costs about 85 tokens; SKILL.md has 940 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~85
When it runs · the whole SKILL.md, loaded when a task matches
~3.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from EliasOenal/term-cli at commit f0d890f, republished under its BSD-3-Clause-Clear licence (© EliasOenal). 940 words, ~3,323 tokens.

Download SKILL.mdSave it as .claude/skills/term-cli/SKILL.md (or your agent's skills folder).
name
term-cli
description
Controls interactive terminal sessions for running long-lived processes, servers, REPLs, debuggers, and TUI programs without blocking. Use when you need to run dev servers (npm run dev), debuggers (pdb, gdb), REPLs (python, node), databases (psql, mysql), SSH sessions, or editors (vim, nano) — any interactive or blocking program.
allowed-tools
Bash(term-cli:*)

Terminal Session Control

You can now run any interactive application using term-cli — dev servers, debuggers, REPLs, databases, SSH sessions, editors, and TUIs — without blocking.

Debuggers encouraged: Prefer interactive debuggers (pdb, gdb) via term-cli whenever appropriate for the task. This complements (and is often superior to) print-based debugging: set breakpoints, step, inspect state, then capture to reason.

Think concurrently: term-cli runs long tasks in the background. Start tests/builds/servers in one session while you write docs or investigate code in parallel. Once all other tasks are done, check back with wait/capture. Tip: occasionally run date +"%H:%M:%S" in a session to see when things happened, estimate future execution and to calibrate your own loop speed.

Self-documenting: Run term-cli --help or term-cli <command> --help for complete usage details.

Quick Start

bash
term-cli start --session dev && term-cli run --session dev "make test"
# ... do other work ...
term-cli wait --session dev && term-cli capture --session dev
term-cli kill --session dev

Commands

Session Management
bash
term-cli start --session NAME --cwd /path
term-cli kill --session NAME
term-cli list
term-cli status --session NAME
Running Commands
bash
term-cli run --session NAME "make test" --wait --timeout 60   # default: 10s
Sending Input
bash
term-cli send-text --session NAME ":wq" --enter && term-cli wait --session NAME
term-cli send-key --session NAME C-c
term-cli send-stdin --session NAME < file.txt
term-cli send-mouse --session NAME --text "Item B"
term-cli send-mouse --session NAME --text "Item B" --scroll-down 3

Keys: C-c C-d C-z C-u C-l (ctrl), Enter Escape Tab Space BSpace, Up Down Left Right, Home End PPage NPage, F1-F12

send-mouse works only in alternate screen mode (active TUI). Prefer --text targets over coordinates when possible.

Capturing Output
bash
# Visible screen only (default: physical rows, trimmed, no ANSI)
# Prefer this — it's almost always enough
term-cli capture --session NAME

# Last N physical rows from the bottom of the visible screen
term-cli capture --session NAME --tail 10

# Last N logical lines from scrollback+visible history (joins wrapped lines)
# Use only when you need output that scrolled off-screen
# In alternate screen (TUIs / nested tmux), this is blocked by default
term-cli capture --session NAME --scrollback 20

# Override alternate-screen protection (may return stale/misleading history)
term-cli capture --session NAME --scrollback 20 --force

# Include ANSI escape codes (colors) — works with any mode
term-cli capture --session NAME --scrollback 10 --raw

# Annotated capture — pane metadata + highlight annotations
# Shows screen mode, bell, cursor position, and highlighted TUI elements
# Use this when operating TUIs where you need to identify selected items
term-cli capture --session NAME --annotate

# Default capture auto-enables annotations for active alternate-screen TUIs.
# Force plain output when needed:
term-cli capture --session NAME --no-annotate

# Optional line numbers (1-based) for visible-screen captures (not scrollback)
term-cli capture --session NAME --annotate --line-numbers

When to use --annotate vs --raw vs plain capture:

  • Plain capture — default for shells, REPLs, command output. Fast, clean text.
  • --annotate — for TUIs (menus, file managers, settings panels) where you need to know what's happening. Returns visible content plus an Annotations: section with screen mode (normal/alternate), bell alerts, cursor position (Cursor: row,col, 1-based), optional mouse mode (Mouse: ... when enabled), and highlighted rows (1-based). Bell alerts are one-shot: shown once then cleared.
  • Auto behavior — plain capture auto-enables annotations only when an active alternate-screen TUI is detected; idle shell prompts stay plain. Use --annotate / --no-annotate to override.
  • --raw — when you need exact ANSI escape codes (e.g., parsing color semantics yourself). Higher token cost.
Waiting

Prefer wait — it detects shell prompts ($, %, #), REPL prompts (>>>, (Pdb), >), and is fastest.

bash
term-cli wait --session NAME

Use wait-idle for TUIs (vim, htop, less) that don't have a detectable prompt — waits for screen to settle:

bash
term-cli wait-idle --session NAME                                      # defaults: 2s idle, 10s timeout

Use wait-for sparingly — waits for pattern in screen output:

bash
term-cli wait-for --session NAME "error" "success" --ignore-case --print-match
term-cli wait-for --session NAME "error" --print-match-context 3             # match + 3 lines above/below

⚠️ Warning: wait-for matches the entire screen including your echoed command:

bash
# WRONG — pattern appears in echoed command, triggers immediately - WRONG
term-cli send-text --session NAME "./build.sh && echo DONE" --enter
term-cli wait-for --session NAME "DONE"
# ↑ Problem: The screen now shows "./build.sh && echo DONE" so "DONE" matches instantly

# RIGHT — wait for program output (not your own marker)
term-cli run --session NAME "npm run dev"
term-cli wait-for --session NAME "Listening on port"

# RIGHT — assemble pattern during print so it doesn't appear in command
term-cli send-text --session NAME "./build.sh && printf 'DON' && printf 'E\n'" --enter
term-cli wait-for --session NAME "DONE"

# BEST — use wait or run --wait when possible
term-cli run --session NAME "./build.sh" --wait
Human Assistance

When you need human help (passwords, CAPTCHAs, manual intervention):

bash
term-cli request --session NAME --message "Please enter SSH password"
term-cli request-wait --session NAME                                   # default timeout: 300s (5 min)
term-cli request-status --session NAME
term-cli request-cancel --session NAME

How it works: Your human runs term-assist list to see pending requests, then term-assist attach --session NAME to join. A status bar shows your message. When finished, they press Ctrl+B Enter to complete — they can optionally type a response message for you. request-wait then returns and you continue.

If they detach with Ctrl+B d while a request is still pending, request-wait fails with exit code 4.

File Transfer (over SSH / any shell)

Transfer files in-band through the terminal session — works over SSH, in containers, or any shell. No scp/sftp needed.

bash
# Upload a local file to the remote session
term-cli upload --session NAME local_file.txt remote_file.txt

# Download a remote file to local
term-cli download --session NAME remote_file.txt local_file.txt

# Overwrite existing files (both commands refuse by default)
term-cli upload --session NAME file.txt file.txt --force --timeout 30

# Pipe support: upload from stdin (REMOTE_PATH required)
cat config.json | term-cli upload --session NAME - /remote/config.json

# Pipe support: download to stdout (status message goes to stderr)
term-cli download --session NAME /remote/data.csv - | jq .

Key behaviors:

  • Hash verification — SHA-256 integrity check
  • Gzip compression — transfers are always gzip-compressed
  • Pipe support — use -, status/verbose output goes to stderr
  • Requires Python 3 on the remote — transfer deploys a Python helper; fails if python3 is not available
  • Prompt required — session must be at a clean shell prompt; transfers fail (exit 2) if a command is running, a TUI is active, or there is partial input on the line
  • Overwrite protection — refuses without --force
  • Fast Uploads
  • Optimized Downloads — starts with pipe-pane only in normal screen mode; in alternate screen mode (nested tmux/TUI), it goes directly to chunked mode for reliability.
  • Default timeout: 120s — set with --timeout
Other Commands
bash
term-cli resize --session NAME --cols 120 --rows 40
term-cli scroll --session NAME -50
term-cli pipe-log --session NAME /tmp/out.log
term-cli unpipe --session NAME

Example: Concurrency (Run long tasks while you work)

bash
term-cli start --session tests && term-cli run --session tests 'date +"%H:%M:%S"; pytest -q'
# ... do other work in parallel ...
term-cli wait --session tests --timeout 1800; term-cli capture --session tests
term-cli kill --session tests

Example: Dev Server

bash
term-cli start --session server && term-cli run --session server "npm run dev"
term-cli wait-idle --session server --timeout 15 && term-cli capture --session server
# ... later ...
term-cli send-key --session server C-c && term-cli wait --session server
term-cli kill --session server

Example: Python Debugger (pdb)

bash
term-cli start --session debug && term-cli run --session debug "python3 -m pdb script.py" && term-cli wait --session debug
term-cli send-text -s debug "b 42" --enter && term-cli wait -s debug      # breakpoint
term-cli send-text -s debug "c" --enter && term-cli wait -s debug         # continue
term-cli send-text -s debug "p some_var" --enter && term-cli wait -s debug && term-cli capture -s debug --tail 5
term-cli send-text -s debug "q" --enter; term-cli wait -s debug           # quit (may need 'y' to confirm)
term-cli kill --session debug

Example: SSH with Password (Human Helps)

bash
term-cli start --session remote && term-cli run --session remote "ssh user@host"
term-cli wait --session remote && term-cli capture --session remote
# If password prompt shown, request human help; if shell prompt, key auth succeeded
term-cli request --session remote --message "Please enter SSH password"
term-cli request-wait --session remote && term-cli capture --session remote
Show full SKILL.md (377 more words)Show less

Example: File Transfer over SSH

bash
# Assumes passwordless login
term-cli start --session remote && term-cli run --session remote "ssh user@host" --wait
# Upload a config file
term-cli upload --session remote ./nginx.conf /etc/nginx/nginx.conf
# Download a log file
term-cli download --session remote /var/log/app.log ./app.log

Tips

  • Defaults are sane. Plain capture (visible screen), wait (10s timeout), and start (80x24) work for most cases. Use --tail to focus on just the last few rows. Only add --timeout or --scrollback when the default isn't enough.
  • Use long-form flags. --session, --timeout, --scrollback over -s, -t, -n. Short forms save almost no tokens and hurt readability.
  • Chain commands: Fewer tool calls = less overhead, lower token usage, faster wall clock time. Use && for dependent operations (send-text --enter && wait), ; to always run the next command (wait --timeout 5; capture — see output even on timeout).
  • Remember: you can run interactive apps through term-cli (debuggers, TUIs, SSH, installers).
  • Lost context after memory compaction? Plain capture first (visible screen is usually enough). Use --scrollback 30 if relevant output scrolled off in normal screen mode. In alternate screen mode, prefer --tail/--annotate; use --force only when you explicitly accept potentially stale history.
  • Prefer debuggers (pdb/gdb) via term-cli for bug analysis; step + inspect beats print-debugging for many issues.
  • Think concurrently: start long tasks in one session and keep working; check progress with status, wait, and capture.
  • Use --help on any command for details: term-cli run --help
  • Default timeout is 10s for most wait commands — increase for builds, tests, or slow operations
  • run --wait already waits for prompt — don't add another wait after it
  • Capture before sending keys to verify screen state
  • Unsure if a TUI is running? term-cli status --session NAME shows Screen: alternate when a full-screen app (vim, htop, less) is active. Use wait-idle for alternate screen, wait for normal.
  • Navigating TUIs? Use capture --annotate to see screen mode, bell alerts, cursor position (Cursor: row,col, 1-based), and which items are highlighted. Plain capture loses all styling, and --raw costs many tokens.
  • Default request-wait timeout is 5 minutes — usually no need to override
  • Locked sessions (exit code 5): agent can only capture, status, wait-*, request*, list, scroll, pipe-log, unpipe. Commands run, send-*, resize, kill, upload, download are blocked

Exit Codes

CodeMeaning
0Success
1Runtime error
2Invalid input
3Timeout
4Human detached while request pending
5Session locked (agent read-only)
127tmux not found

Feedback

As an agent, you're well-positioned to spot improvements. Found a bug or have an idea? Email the maintainer: Elias Oenal termcli@eliasoenal.com

© EliasOenal, BSD-3-Clause-Clear. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/term-cli of EliasOenal/term-cli.

Open the folder on GitHubat commit f0d890f

Compare with similar skills

Term CLI next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Term CLI compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Term CLI this skillEliasOenal/term-cli103—~3.3kAutomated safety check: PassBSD-3-Clause-Clear
Chdb SQLvemetric/vemetric3941 repos~1.2kAutomated safety check: PassApache-2.0
Nodejs Init Skilljiushiwon/wg-skills110—~1.6kAutomated safety check: NotesApache-2.0
Marina Appletmarin-community/marin3.9k—~2.3kAutomated safety check: PassApache-2.0
Fastapi Init Skilljiushiwon/wg-skills110—~1.8kAutomated safety check: NotesApache-2.0
Dockeravibebuilder/claude-prime120—~1kAutomated safety check: NotesMIT

Similar skills

  • Chdb SQL

    vemetric/vemetric

    A skill your agent uses when the user wants to run SQL — especially analytical SQL — on local files (parquet/csv/json), URLs, S3 paths, or remote databases (Postgres, MySQL, MongoDB, ClickHouse…

    394 GitHub starsUsed in 1 repo~1.2k tokens
    DatabasesAuto-check passed
  • Nodejs Init Skill

    jiushiwon/wg-skills

    Node.js + Express 项目一键初始化技能。面向零基础小白,提供环境探测、自动安装、完整 Web 骨架生成、JWT 鉴权、统一响应封装、文件上传接口、一键启动/重启脚本、Swagger 文档,内置 MongoDB(默认)/ MySQL / PostgreSQL 数据库选择。用户只需说"帮我搭一个 Node.js 项目"即可一条命令完成从零到跑的完整链路。触发词:"Node.js…

    110 GitHub stars~1.6k tokensUpdated 3 days ago
    Backend & APIsAuto-check: notes
  • Marina Applet

    marin-community/marin

    Build, validate, publish, update, inspect, query, roll back, or archive a dynamic Marina applet.

    3.9k GitHub stars~2.3k tokensUpdated today
    Backend & APIsAuto-check passed
  • Fastapi Init Skill

    jiushiwon/wg-skills

    FastAPI 项目一键初始化技能。面向零基础小白,提供环境探测、自动安装、完整 Web 骨架生成、SSE 流式框架、JWT 鉴权、统一响应封装、文件上传接口、一键启动/重启脚本、Swagger 文档,内置 MySQL(默认)/ PostgreSQL / MongoDB 数据库选择。用户只需说"帮我搭一个 FastAPI 项目"即可一条命令完成从零到跑的完整链路。触发词:"FastAPI…

    110 GitHub stars~1.8k tokensUpdated 3 days ago
    Backend & APIsAuto-check: notes
  • Docker

    avibebuilder/claude-prime

    ALWAYS activate when the user's query involves Docker in any way — even if it also matches other skills.

    120 GitHub stars~1k tokensUpdated 4 mo ago
    DevOps & CloudAuto-check: notes
  • How To Communicate

    databasus/databasus

    Communicate clearly in every response, progress update and agent-authored document.

    8.8k GitHub stars~3.9k tokensUpdated 15 days ago
    DatabasesAuto-check passed

Categories

Questions about Term CLI

What does Term CLI do?

Controls interactive terminal sessions for running long-lived processes, servers, REPLs, debuggers, and TUI programs without blocking. Term CLI is an agent skill from EliasOenal/term-cli. Controls interactive terminal sessions for running long-lived processes, servers, REPLs, debuggers, and TUI programs without blocking.

When should I use Term CLI?

Term CLI fits situations like: you need to run dev servers (npm run dev); databases (psql; nano) — any interactive; blocking program.

How do I install Term CLI in Claude Code?

Run `npx skills add EliasOenal/term-cli --skill term-cli -a claude-code`. Or copy the skill folder (skills/term-cli in EliasOenal/term-cli) into .claude/skills/term-cli in your project. Claude Code loads it when a task matches its description.

How do I install Term CLI in Codex?

Run `npx skills add EliasOenal/term-cli --skill term-cli -a codex`. Or copy the skill folder (skills/term-cli in EliasOenal/term-cli) into .agents/skills/term-cli in your project. Codex loads it when a task matches its description.

Can I use Term CLI in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add EliasOenal/term-cli --skill term-cli -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/term-cli, .gemini/skills/term-cli, .github/skills/term-cli and .opencode/skills/term-cli in your project.

What does Term CLI need to run?

Going by SKILL.md and its folder, Term CLI needs the command-line tools its instructions call (jq and pytest). Our summary lists: Python 3. Its frontmatter pre-approves these tools: Bash(term-cli:*).

Does Term CLI access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Term CLI safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Term CLI use?

Term CLI is published under the BSD-3-Clause-Clear licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Term CLI use?

About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Term CLI?

Skills that share tags, products or a category with Term CLI: Chdb SQL (vemetric/vemetric, 394 stars), Nodejs Init Skill (jiushiwon/wg-skills, 110 stars), Marina Applet (marin-community/marin, 3.9k stars) and Fastapi Init Skill (jiushiwon/wg-skills, 110 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Term CLI?

EliasOenal (a GitHub user) maintains it in EliasOenal/term-cli, which has 103 GitHub stars. The repository was last updated on August 4, 2026.

Source: EliasOenal/term-cli on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.