Cicall
A terminal-independent MCP runtime for CLI agents, enabling orchestration of CLI processes via a background daemon and any MCP client.
README
Cicall
Run and orchestrate CLI agents from any terminal.
Cicall is a terminal-independent, local MCP runtime for CLI agents. It owns the agent processes and their pseudo-terminals in a small background daemon. Your terminal, editor, desktop app, or MCP client is only a replaceable frontend.
Claude Code / Codex / Kimi / OpenCode
│ MCP (stdio)
cicall-mcp
│ local Unix socket
cicall daemon
│ PTY
any CLI agent or command
This repository is an independent extraction of the session-orchestration idea first prototyped in Helios. Cicall does not depend on Helios, Ghostty, AppKit, or any particular terminal emulator.
Status
Cicall is an early, usable MVP for macOS and Linux. The current release is local-only and has no network listener. Do not expose its Unix socket to users you do not trust: a connected client can launch commands with your account.
Install
Python 3.9 or newer is required. The simplest install keeps Cicall in its own
environment and exposes the commands through ~/.local/bin:
curl -fsSL https://raw.githubusercontent.com/basionwang-bot/cicall/main/scripts/install.sh | sh
~/.local/bin/cicall setup --client hermes --project my-app --cwd "$PWD"
You can inspect scripts/install.sh before running it. A manual installation from the GitHub release is documented in docs/TESTING.zh-CN.md.
cicall setup starts the local runtime and prints the exact MCP configuration
for the current installation. The MCP server also starts the daemon automatically,
so users do not have to manage it before opening their MCP client.
For development from a source checkout:
cd ~/Desktop/cicall
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
pip install -e .
cicall setup --client generic --project my-app
No Python package is required at runtime beyond the standard library.
Use it from any terminal
Start an interactive CLI and stay attached:
cicall run --project my-app --cwd ~/code/my-app -- claude
Start it in the background:
cicall run --detach --project my-app --cwd ~/code/my-app -- codex
cicall list --project my-app
cicall attach s-xxxxxxxxxxxx
Read or drive a session without attaching a terminal UI:
cicall read s-xxxxxxxxxxxx
cicall send s-xxxxxxxxxxxx "Please run the tests" --enter
cicall key s-xxxxxxxxxxxx ctrl-c
cicall close s-xxxxxxxxxxxx
Switching from Terminal.app to iTerm, Ghostty, Warp, VS Code, or SSH does not
change the managed process. Run cicall attach SESSION_ID from the new terminal.
Connect an MCP client
Running cicall setup prints a ready-to-paste configuration. A manual example:
cicall setup --client hermes --project my-app --cwd "$PWD"
Supported setup targets are generic, hermes, claude, and codex. Codex
can be registered automatically:
cicall setup --client codex --project my-app --cwd "$PWD" --apply
Check an installation at any time:
cicall doctor --fix
Then register the server with a fixed project scope:
{
"mcpServers": {
"cicall": {
"command": "/absolute/path/to/cicall-mcp",
"args": ["--project", "my-app", "--cwd", "/absolute/path/to/my-app"]
}
}
}
The MCP server exposes:
list_sessionsread_outputsend_textsend_keystart_sessionclose_session
Cicall follows the standard newline-delimited MCP stdio transport. It also
auto-detects LSP-style Content-Length framing for compatibility with hosts
such as HermesPet; replies use the same framing selected by the client.
An MCP server started with --project my-app cannot read, control, or close
sessions belonging to another project.
With --cwd configured, an agent can start a CLI with only its argv:
{"command": ["claude"]}
Configuration
| Variable | Meaning | Default |
|---|---|---|
CICALL_HOME |
Runtime state directory | ~/.local/state/cicall |
CICALL_SOCKET |
Unix socket path | $CICALL_HOME/cicall.sock |
CICALL_PROJECT |
Default MCP project scope | current directory name |
The daemon passes CICALL_SOCKET, CICALL_PROJECT, and CICALL_SESSION_ID to
every managed child. An MCP client launched inside a managed session therefore
inherits the correct runtime and project automatically.
Architecture and boundaries
Cicall deliberately separates three concerns:
daemon.pyowns PTYs, process lifetime, output buffers, and the local socket.mcp.pytranslates MCP tool calls into runtime operations.cli.pyis one human-facing client; it can be replaced by a GUI or web UI.
The PTY is an execution backend, not a terminal emulator. Cicall does not render terminal output. This is what makes it independent from the terminal application.
Roadmap
- Persist and restore session metadata across daemon restarts.
- Add task/delegation tools above the session primitives.
- Add structured activity detection and
wait_until_idle. - Add Docker, SSH, tmux, and remote-agent backends behind a backend interface.
- Add HTTP/SSE MCP transport with authentication for remote deployments.
- Ship signed binaries, Homebrew packaging, and Linux packages.
- Add a protocol SDK so third-party GUIs can become Cicall frontends.
Contributing
Issues and pull requests are welcome. Keep the local runtime dependency-light, make dangerous capabilities explicit, and preserve project isolation.
License
MIT License. See LICENSE.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。