
Execkit
io.github.blinkingbit-oss由 GitHub 帳號 blinkingbit-oss 發布v0.10.1更新於 Nov 10, 2026
Stateful, structured, safe shell sessions for AI agents over local, SSH, and Docker.
概覽
讓 AI 助理在本機、透過 SSH 的遠端主機與 Docker 容器中取得持久、結構化的 shell 工作階段。
- 可以做什麼
- 在本機、SSH 或 Docker 目標上建立、列出與銷毀 shell 工作階段
- 在工作階段中執行指令,cd 與環境變數跨呼叫保留,回傳分開的 stdout/stderr、結束碼、耗時與目前目錄
- 以 tail、head、grep 過濾與字元上限限制冗長輸出,並在模型看到前對機密資訊做遮蔽
- 對遠端工作階段的 workspace 檔案建立檢查點與還原,用來撤銷錯誤指令
- 把每條指令寫入稽核日誌,並可在終端機或瀏覽器檢視器中即時觀看工作階段
- 適用情境
- 適合助理需要在遠端主機或容器內操作、需要留下執行紀錄,或希望在遠端 workspace 回復檔案變更的情況。它是助理內建 shell 的補充,而非替代。
- 執行需求
- 以本機程序執行,可透過 uvx 或 pip 安裝 execkit-mcp,也提供預先編譯的執行檔與 cargo install。本機工作階段需要 bash,目標端需要 POSIX shell 與 base64。SSH 工作階段使用你的 SSH 設定與金鑰,Docker 工作階段需要存取對應容器。遠端檢查點需要目標端有 git。不支援 Windows。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Execkit,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
execkit
Persistent, structured shell sessions for AI agents, on your laptop, your servers over SSH, and your Docker containers.
What you get that a built-in agent shell doesn't:
- Persistent sessions on local, SSH and Docker.
cdand env carry across calls, and every command returns a structured result: split stdout/stderr, exit code, duration, cwd. - Output that protects the agent's context. Secrets are redacted before the
model sees them, and output budgets (
tail,head,grep, a char cap) keep a noisy build from flooding the context window. - An audit trail, a live viewer, and undo. Every command can go to a JSONL audit log, you can watch sessions live in a terminal or browser (above), and remote sessions can checkpoint and restore the workspace files.
Install
Zero-install, with uv. Add this to your MCP client config:
Or install it and let execkit print the config for your client:
Then execkit-mcp doctor checks your setup. More options (prebuilt binary,
cargo install, building from source) are in the Quickstart.
Status: early 0.x. The API may change between minor versions. Read
Limitations before pointing it at anything important.
Where it fits
execkit complements your agent's built-in shell or sandbox; it does not replace it. Use it when the agent needs to work on a remote host or inside a container, when you want a record of what ran, or when you want to undo file changes on a remote workspace.
The agent is the adversary. The LLM driving execkit can be prompt-injected by anything it reads, so execkit contains its own caller: a command passes the policy fence before it runs, secrets are redacted before output returns, and a changed SSH host key fails loudly instead of reconnecting into a MITM.
Use it from an agent (MCP)
The agent gets session_create (local, ssh, or docker), session_exec,
session_list and session_destroy, plus session_checkpoint /
session_checkpoints / session_restore for remote undo.
State persists across calls, and every result is parsed, not scraped from a terminal:
Commands time out after 120 seconds by default (timeout_secs per call, up to
3600). On timeout execkit interrupts the command with Ctrl-C and returns
timed_out: true with exit code 124. The session keeps its cwd and env.
See crates/execkit-mcp/README.md for the operator
security settings (host-key verification, key dir, audit, session limits).
Watch what the agent does
Set EXECKIT_MCP_AUDIT_DIR and every session is recorded. execkit-mcp watch
shows it live in the terminal, and execkit-mcp watch --serve --open opens the
read-only browser viewer shown at the top.
Use it as a library
Runnable examples: cargo run --example local,
EXECKIT_SSH="user:password@host:22" cargo run --example ssh, and
EXECKIT_DOCKER=<container> cargo run --example docker.
Python
The same sessions from Python. pip install execkit (native bindings, no Rust
toolchain needed):
See crates/execkit-py/README.md.
What's in the box
- Persistent, stateful sessions over local PTY, SSH, or Docker. SSH
accepts host aliases from your
~/.ssh/config. - Structured
ExecResult: split stdout/stderr, exit code, duration, cwd,truncated,timed_out. - Base64 command framing. Comments, heredocs,
!, trailing&, syntax errors and long commands do not hang the session. - Timeouts that keep the session. A timed-out command is interrupted and the session carries on.
- Secret redaction of common token shapes (AWS, GitHub, GitLab, Slack, Stripe,
Google, Anthropic, OpenAI, JWTs, PEM private keys), URL passwords,
password=/token=-style pairs, and values the session assigned to secret-named variables. The echoed command is redacted too. - Output budgets:
tail/head/head+tailby line, agrepfilter with context, and a char cap. Per call or a session default; the result reports what was kept. - Undo for agent actions on remote sessions: snapshot the workspace and
restore files if a command goes wrong (needs
giton the remote and an explicit workspace; files only, not side effects). - Audit log and live viewer, plus live MCP notifications to the client.
- Embeddable, never a service:
cargo add, in your process; no daemon, no vendor.
Upgrading to 0.9
Breaking changes from 0.8. The details are in Upgrading to 0.9.
- SSH host keys are pinned in
~/.execkit/known_hosts, not~/.ssh/known_hosts. Old pins are not read. The first connection re-pins, or copy them over withmkdir -p ~/.execkit && chmod 700 ~/.execkitthengrep -E '^[^ ]+ SHA256:' ~/.ssh/known_hosts >> ~/.execkit/known_hosts. Old pins were keyed by bare host whatever the port: rewrite a line for a non-22 port as[host]:port, or a later port-22 connection to that host fails as a key mismatch. - stdin is
/dev/nullfor every command, and pagers are set tocat. - The target needs
base64. - A timeout returns exit code 124 with
timed_out: trueand keeps the session, instead of an error that closed it.ExecResulthas a newtimed_outfield. - Session ids look like
a3f9-1_localinstead of1_local. SshConfighas a newconnect_timeoutfield (default 15 s). UseSshConfig::new.
Limitations
- Not a sandbox. The command policy is advisory string matching. It is easy to
bypass:
deny: ["curl"]blockscurlbut notenv curl,sudo curlorsh -c curl. The real control is a least-privilege environment: run the agent and SSH user with minimal rights. - No interactive input. stdin is
/dev/null, so prompts, REPLs and editors do not work. Use non-interactive flags (sudo -n,apt-get -y). Pagers default tocat, but runninglessorvimdirectly hangs until the timeout and closes the session. Shell history is off. - Timeouts interrupt, they do not kill everything. execkit sends Ctrl-C. A
command that ignores Ctrl-C ends the session. For long jobs, run them in the
background (
nohup CMD > /tmp/job.log 2>&1 &) and poll the log. - The target needs a POSIX shell and
base64. Local sessions usebash. Windows is not supported. - Synchronous core. Fine for typical agent use; not tuned for thousands of concurrent sessions.
- SSH
AcceptAnyhost-key mode exists for testing, behind an explicit insecure opt-in. Never use it in production.
Found something rough? Open an issue.
Contributing & security
- Contributions: see
CONTRIBUTING.md. - Found a vulnerability? Follow
SECURITY.md. Please don't open a public issue for security reports.
License
Apache-2.0: embed it freely, including commercially. See LICENSE and
NOTICE.
來源:README.md,提交 8d3dbfa
工具
0版本歷史
3- v0.10.1最新Sep 26, 2026
- v0.10.0Sep 26, 2026
- v0.9.0Sep 25, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分