关于 agend-sh
agend-sh 为 AI Agent 提供可通过 MCP 操作的持久化、隔离 Linux 工作区,适合需要远程运行代码、操作交互式终端和分享服务预览的开发者。
主要功能
- 01持久化隔离 Linux 工作区
- 02运行命令和后台任务
- 03交互式终端与 REPL 会话
- 04在本地与远程间传输文件
- 05通过 HTTPS 预览公开服务
- 06查看 Agent 的终端活动
适用场景
- 01在持久化远程工作区运行代码
- 02操作 REPL 或终端应用
- 03通过 HTTPS 链接分享运行中的服务
MCP 相关
CLI 提供用于管理环境、运行命令、处理文件和公开端口的 MCP 工具。客户端可配置为通过本地 stdio 服务运行 `agend mcp`。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm -e AGEND_API_TOKEN ghcr.io/agend-sh/agend-mcp@sha256:4462e2571be0e69003e1be93255e04523342e1e5aa17482ec3d63bd7506bb82fAGEND_API_TOKEN密钥Your Agend account token. Sign in with agend login, then follow docs/mcp-registry.md to load the active account token. An Agend account and available environment quota are required.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/agend-sh/agend-mcp@sha256:4462e2571be0e69003e1be93255e04523342e1e5aa17482ec3d63bd7506bb82fstdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
为你的 AI Agent 准备一台真正的计算机。
持久化 Linux 工作区。交互式终端。可分享的预览。
使用你喜欢的 MCP Agent,让它开始工作。
快速开始 · 交互式终端 · 连接你的 Agent · MCP 工具 · agend.sh
agend 为你的 Agent 提供一个持久化、隔离的 Linux 环境,让它通过 MCP 操控环境。 它可以运行代码、编辑文件、使用 Python REPL 和 Vim、启动服务,并提供预览 URL。你可以自行打开 Shell,也可以在 Agent 工作时查看它的交互式终端。
| 构建 | 交互 | 展示成果 |
|---|---|---|
| 运行命令和后台任务。传输文件。在远程工作区中保存项目。 | 通过 PTY 操控 REPL 和终端应用,并在终端等待输入时收到反馈。 | 打开浏览器预览,或使用 agend watch 镜像交互式会话。 |
快速开始
1. 安装
Linux / macOS
curl -fsSL https://agend.sh/i | sh
Windows · PowerShell
irm https://agend.sh/i.ps1 | iex
Homebrew · Linux / macOS
brew install agend-sh/tap/agend
脚本安装程序会验证发行版签名和压缩包的 SHA-256 校验和。Unix 安装程序会写入 /usr/local/bin,并可能提示你使用 sudo。Windows 安装程序会写入 %LOCALAPPDATA%\agend\bin,并将其添加到你的用户 PATH。所有三个平台的发行版均支持 amd64 和 arm64。
agend version
2. 登录
agend login
在浏览器中完成身份验证。若要使用电子邮件和密码创建账户:
agend signup --email [email protected]
signup 会提示你输入密码,并在成功后登录。你无需再次运行 login。
3. 创建工作区
agend env create --name my-workspace
agend ping
agend exec 'python3 --version'
创建工作区后,它会成为 CLI 命令的当前目标。工作区大小取决于你账户的默认配置。使用 agend profiles 查看可用规格、配额和休眠策略;传入返回的配置 ID,使用 agend env create --profile <profile-id> 选择其他规格。
4. 连接你的 Agent
agend config claude-code
或者配置其他客户端:
agend config codex cursor gemini
重启或重新加载客户端的 MCP 集成,然后试试这个提示词:
使用 agend 的
list_environments查找my-workspace。在那里启动交互式 Python REPL,计算 6 × 7,然后退出 REPL。
你的 Agent 会发现该环境,并通过 MCP 工具操控它。使用此服务需要 Agend 账户和可用的环境配额;仅有 CLI 不会提供免费的本地计算机。
agend-sh 已列入官方 MCP Registry,
名称为 io.github.agend-sh/agend-sh。如需通过 Docker 安装,请参阅
容器包和连接指南。
也可通过 Smithery 获取。
对于支持 MCPB 扩展的客户端,请参阅扩展包指南。
交互式终端
终端可以报告已进入等待输入状态。 这样,Agent 进程在操作 REPL 或终端应用时就能获得反馈。
例如,调用 shell_exec 并传入:
{
"environment": "my-workspace",
"command": "python3 -q",
"interactive": true
}
响应可能如下所示:
status: awaiting_input
>>>
prompt_type: interactive
input_wait: true
通过 shell_send_raw 继续:
{
"environment": "my-workspace",
"input": "print('hello from agend')\n"
}
status: awaiting_input
print('hello from agend')
hello from agend
>>>
input_wait: true
然后通过 shell_send_raw 发送 exit()\n,关闭 Python。
读取响应
| 字段 | 含义 |
|---|---|
status: completed | 命令已结束。请检查 exit_code。 |
status: awaiting_input | 交互进程仍在运行。仅凭此状态无法证明它正在等待输入。 |
input_wait: true | 收集此响应期间检测到了等待输入事件:终端读取器因输入不足而进入等待路径。 |
input_wait: false | 此响应中未检测到新事件。这不会取消先前的事件,也无法证明进程已停止等待。 |
status: timeout | 前台命令超出了时间限制。 |
等待输入信号是一个事件,不是持久状态查询,也不保证应用或服务已准备就绪。它取决于环境中的 guest stack 是否支持。
对于 REPL 和 TUI,请设置 interactive: true,并使用 shell_send_raw 发送后续输入。需要按 Enter 时,请包含 \n。视口尺寸变化时,请使用 shell_resize。通过应用自身的命令退出,或使用 shell_interrupt 关闭会话。每个环境只能有一个活动的交互会话;开始另一条 shell_exec 前,请先结束当前会话。
交互进程会在工具调用之间保持运行,不会因响应收集超时而被终止。工具响应完成后,断开 MCP 客户端本身不会停止进程:重新连接到同一环境即可继续操作。环境休眠、崩溃或冷重置可能会影响进程的生命周期。
查看 Agent 的工作
agend watch
Watch 会镜像所选环境的交互会话,重放保留的输出,并跟进新的更新。它不会向远程进程发送输入。按 q 或 Ctrl+C 停止查看;Agent 的会话会继续运行。
录制屏幕时:
agend watch --typing-delay 40ms
将终端尺寸调整为与远程会话一致,以准确显示内容。Watch 会跟进 Agent 的工具调用所收集的输出;这些调用之间不会轮询 guest 以获取输出。它显示交互会话,不显示普通命令输出或后台任务日志。
想亲自在环境中操作吗?
agend connect
这会打开一个支持键盘输入和终端调整大小的实时终端。运行 exit 关闭 shell。此功能要求 stdin 连接终端,并且与 MCP 共用同一个交互会话槽位,因此请先关闭 Agent 的交互应用。
分享浏览器预览
让 Agent 使用 shell_exec 启动服务:
{
"environment": "my-workspace",
"command": "python3 -m http.server 8080 --bind 0.0.0.0 --directory /home/agend-user/readme-demo",
"run_in_background": true
}
请先创建 /home/agend-user/readme-demo,并将演示文件放在那里。将服务绑定到 0.0.0.0,以便隧道能够访问。
然后调用 port_expose:
{
"environment": "my-workspace",
"port": 8080
}
响应中包含一个公开的 HTTPS URL。请等待隧道和 DNS 可以访问。port_list 会显示活动的端口暴露;port_unexpose 会移除一项暴露。暴露端口会使该服务可从互联网访问。
若要使用由你自己的 Cloudflare 管理的域名,请运行 agend domain add example.com 注册其区域,然后向 port_expose 传入 domain: "app.example.com"。注册时会提示输入具有 Zone:DNS:Edit、Zone:Zone:Read 和 Account:Cloudflare Tunnel:Edit 权限的 Cloudflare API token;脚本可以通过 AGEND_CF_TOKEN 提供该 token。agend domain list 会返回 agend domain remove <domain-id> 所用的域名 ID。
连接你的 Agent
agend config 会检测机器上已安装的受支持客户端。写入配置前,请先预览选项:
agend config --dry-run
agend config
你也可以明确选择客户端:
| 客户端 | 命令 |
|---|---|
| Claude Code | agend config claude-code |
| Claude Desktop | agend config claude-desktop |
| Codex | agend config codex |
| Cursor / Windsurf | agend config cursor windsurf |
| Gemini CLI / Antigravity | agend config gemini antigravity |
| VS Code / Zed / JetBrains | agend config vscode zed jetbrains |
| Cline / Roo Code | agend config cline roo-code |
| OpenCode / GitHub Copilot CLI | agend config opencode github-copilot-cli |
| Amazon Q / Goose / Continue | agend config amazon-q goose continue |
配置会将 agend mcp 注册为本地 stdio 服务。客户端必须能够找到已安装的二进制文件;在 Windows 上,配置写入器会使用其绝对路径。agend config 会处理特定客户端的配置路径和格式。
手动配置其他 MCP 客户端
对于使用 mcpServers JSON 格式的客户端:
{
"mcpServers": {
"agend": {
"command": "agend",
"args": ["mcp"]
}
}
}
如果客户端无法继承 shell 的 PATH,请使用二进制文件的绝对路径。这是一个通用示例;部分客户端使用不同的架构。agend mcp 会从 stdin 读取 JSON-RPC,并将协议响应写入 stdout;日志会写入 stderr。工具结果是 MCP 文本内容,其中包含 status 和 input_wait 等字段。
CLI 提供 23 个工具。调用 list_environments 以发现 ID 和名称。特定环境的工具需要 environment 参数,并接受 ID 或名称。env_create、list_environments、profiles_list 和 reload_config 不需要此参数。
| 区域 | 工具 | 功能 |
|---|---|---|
| 环境 | list_environments | 发现环境、名称、描述、状态和层级。 |
profiles_list | 显示可用规格、配额和用量。 | |
env_create | 创建环境;可选参数为 name、description 和 profile。 | |
env_update | 编辑或清除环境名称和描述。 | |
env_status | 检查状态和元数据,不唤醒环境。 | |
env_wake | 唤醒休眠的环境。 | |
env_cold_reset | 用于恢复卡住环境的最后手段;需要提供诊断原因。 | |
| Shell | shell_exec | 运行命令,支持设置超时、截取开头/结尾、交互模式或后台模式。 |
shell_send_raw | 向交互式应用发送字节;不会追加换行符。 | |
shell_provide_input | 在活动终端会话中回答简单提示;会追加换行符。对于 REPL 和 TUI,请使用 shell_send_raw。 | |
shell_resize | 调整活动 PTY 的大小。 | |
shell_interrupt | 中断命令或关闭交互会话。 | |
shell_task_output | 读取后台任务的输出和状态。 | |
shell_task_stop | 停止后台任务。 | |
| 文件 | file_write | 将文本原子性地写入远程文件。 |
file_upload | 将本地文件传输到环境中。 | |
file_download | 将远程文件传输到本地计算机。 | |
file_move | 移动或重命名远程文件。 | |
| 网络 | port_expose | 通过公共 HTTPS 隧道公开服务。 |
port_list | 列出已公开的端口和 URL。 | |
port_unexpose | 移除公开项;可选择指定一个域名。 | |
| 诊断 | env_stats | 检查磁盘、内存、CPU 和进程。 |
reload_config | 在其他终端中更改凭据后重新加载凭据并重置连接。 |
interactive 和 run_in_background 不能同时使用。后台执行会返回供任务工具使用的 task_id。
file_upload 和 file_download 中的本地路径仅限于 MCP 服务的工作目录,或你在服务环境中设置的 AGEND_LOCAL_ROOT。下载会返回传输元数据;请使用 shell_exec 读取文本,或打开下载到本地的文件。对于大文件,通常直接在远程环境中使用 curl 或 wget 下载更快。
CLI 参考
CLI 命令会在所选环境中执行。使用 agend env use 和其他 CLI 环境命令时,请使用环境 ID;MCP 工具也可以解析名称。
agend env list
agend env use <env-id>
agend exec 'pwd'
环境和账户
| 命令 | 用途 |
|---|---|
agend profiles | 列出账户可用的配置文件。 |
agend env create [--name NAME] [--description TEXT] [--profile ID] | 配置并选择一个工作区。 |
agend env list | 列出环境。 |
agend env use <env-id> | 选择一个环境;如果环境处于休眠状态,则将其唤醒。 |
agend env edit [env-id] --name NAME --description TEXT | 编辑元数据;--clear-name 和 --clear-description 可移除相应值。 |
agend env status [env-id] | 检查状态,但不会唤醒环境。 |
agend env wake [env-id] | 唤醒休眠中的环境。 |
agend env cold-reset [env-id] --reason TEXT | 通过冷启动恢复确实卡住的环境。 |
agend env delete [env-id] | 永久删除环境及其数据。 |
agend status | 显示身份验证状态和所选环境状态。 |
agend signup --email <email> | 创建账户,并通过密码提示登录。 |
agend login | 通过浏览器进行身份验证。 |
agend login --email <email> | 使用电子邮件和密码登录。 |
agend login --token <token> | 保存直接 API 令牌。 |
agend account list | 列出已保存的账户。 |
agend account switch <email> | 切换账户。 |
agend account remove <email> | 移除已保存的账户。 |
agend logout [--all] | 移除当前账户的本地凭据,或移除所有已保存的账户。 |
冷重置会保留持久数据磁盘,但会丢弃客户机内存、进程、会话和快照。这是一项恢复操作。在环境中创建、选择或执行操作可能会启动或唤醒环境;env status 是只读检查方式。
Shell、文件和任务
| 命令 | 用途 |
|---|---|
agend connect [--shell COMMAND] | 打开实时交互式终端。 |
agend watch [--typing-delay 40ms] | 镜像交互会话,但不发送输入。 |
agend exec <command> | 执行远程命令。 |
agend input <text> | 回答简单提示;会追加换行符。 |
agend resize <columns> <rows> | 调整活动 PTY 的大小。 |
agend interrupt | 中断活动命令/会话。 |
agend ping | 检查连接状态并显示后端版本。 |
agend file-get <remote-path> | 将远程文件内容输出到 stdout。 |
agend file-put <remote-path> <content> | 将提供的内容写入远程文件。 |
agend file-move <source> <destination> | 移动或重命名远程文件。 |
agend task-output <task-id> | 读取后台任务输出。 |
agend task-stop <task-id> | 停止后台任务。 |
exec 支持 --timeout,单位为毫秒(默认值:30000),以及 --head、--tail、--background 和 --interactive。实时终端请使用 connect;如果 Agent 要操作 REPL 或 TUI,请使用 MCP 的交互式工具工作流。
例如:
agend file-put /home/agend-user/hello.txt 'hello from agend'
agend file-get /home/agend-user/hello.txt
agend exec --timeout 60000 'python3 --version'
file-get 会将文件元数据写入 stderr。file-put 接收的是内容,而不是本地文件名;要传输本地文件,请使用 MCP 的 file_upload。这两个 CLI 文件命令都支持 --encoding text 或 --encoding base64;file-put 还支持 --create-dirs、--overwrite 和 --mode。
团队和共享环境
团队拥有共享环境。租约会授予成员独占访问权限,直到租约被释放或到期。
| 命令 | 用途 |
|---|---|
agend team create <name> | 创建由你拥有的团队。 |
agend team list | 列出你的团队。 |
agend team invite <team-id> <email> | 邀请成员。 |
agend team accept <team-id> | 接受邀请。 |
agend team members <team-id> | 列出成员。 |
agend team envs <team-id> | 列出共享环境及其租约状态。 |
agend profiles --team <team-id> | 查看团队可用的配置文件。 |
agend team env-create <team-id> [--profile ID] | 配置共享环境。 |
agend env acquire <env-id> | 获取独占租约。 |
agend env heartbeat <env-id> | 延长租约。 |
agend env release <env-id> | 释放租约。 |
当所选环境属于某个团队时,agend mcp 会尝试获取该环境的租约,在连接期间发送心跳,并在正常关闭时释放租约。由其他成员持有的租约会阻止访问。客户端被强制终止时,租约可能会一直保留到到期。
agend update
更新器会在替换二进制文件前验证签名校验和清单和归档文件。已在运行的 MCP 进程会继续使用当前版本,直到重启。发布版本构建还会自动检查更新,每 24 小时最多一次;设置 AGEND_NO_AUTOUPDATE=1 可禁用这些自动检查。对于由 Homebrew 管理的安装,请使用 brew upgrade agend。
| 情况 | 处理方法 |
|---|---|
安装程序输出 agend setup claude,或 config claude 失败 | 使用 agend config claude-code 或 agend config claude-desktop。 |
| Agent 找不到服务 | 检查 agend version,重新运行 agend config <client>,然后重启其 MCP 集成。手动配置可能需要使用绝对二进制文件路径。 |
| CLI 未选择环境 | 运行 agend env list,然后运行 agend env use <env-id>。 |
| 新环境暂时无法访问 | 查看 agend env status;等待隧道上线,然后重试 agend ping。 |
| 输入提示没有活动会话 | 使用 interactive: true 启动应用。普通前台命令不会保持 stdin 打开以供后续工具调用。 |
退出时 connect 报告 no active session waiting for input | 当前后端在 shell 成功运行后偶尔会出现此情况。请参阅验证报告;如需继续,请启动新的 connect 会话。 |
| 本地文件路径被拒绝 | 将其保留在 MCP 工作目录内,或配置 AGEND_LOCAL_ROOT。 |
| 浏览器预览 URL 暂时无法打开 | 检查服务是否正在运行并绑定到 0.0.0.0;等待隧道/DNS 传播,然后检查 port_list。如果主机名仍无法解析,请检查 DNS 解析器。 |
| 环境似乎卡住 | 首先查看 env status。只有在常规重新连接/唤醒恢复无效后,才使用冷重置。 |
| 公司代理阻止连接 | 设置 HTTPS_PROXY / HTTP_PROXY;Go 二进制文件不会使用 Windows 系统代理设置。 |
凭据和按账户选择的环境存储在 ~/.config/agend/credentials.json 中;在 Unix 上,该文件仅允许所有者访问。在 Windows 上,~ 是你的用户配置文件目录,访问权限由 Windows 文件系统权限控制。使用脚本进行电子邮件/密码身份验证时,请使用 AGEND_PASSWORD;否则 CLI 会提示输入密码。
开发
需要 Go 1.26.9+。在源码检出目录中:
git clone https://github.com/agend-sh/cli.git
cd cli
make build
./bin/agend version
make install 会构建二进制文件并复制到 /usr/local/bin;该目录必须可写。在 Windows 上,直接使用 go build -o agend.exe ./cmd/agend 构建。
go test ./...
go vet ./...
CI 会在 Linux 和 Windows 上进行构建、测试和代码检查,并执行额外的交叉编译检查。版本标签会触发 GoReleaser,发布适用于 amd64 和 arm64 的 Linux/macOS tarball 以及 Windows zip 归档、校验和清单及其 Sigstore 签名包。Homebrew tap 通过自己的工作流更新。make release 是本地 Unix 交叉编译目标,并非发布工作流。
请参阅 README 验证报告,了解已测试的版本、实时检查、当前问题和覆盖范围限制。
工作原理
Your MCP agent
│ stdio / JSON-RPC
▼
agend mcp ──────────────── agend connect / agend watch
│ authenticated gRPC over a WebSocket tunnel
▼
Environment backend
│
▼
Isolated Linux workspace
MCP 桥接会按需解析每个环境的端点、维护连接池并处理连接恢复。直接通过 CLI 访问 shell 使用相同的后端。无需安装单独的隧道客户端。
| 路径 | 用途 |
|---|---|
cmd/agend/ | 入口和注入的版本信息。 |
internal/cmd/ | CLI 命令、客户端配置和更新。 |
internal/mcp/ | JSON-RPC 服务、工具定义、连接池和本地路径规则。 |
internal/grpc/ | 后端客户端和传输。 |
internal/api/ | 控制平面 HTTP 客户端。 |
internal/auth/ | 账户、凭证和浏览器身份验证。 |
internal/recovery/ | 连接错误分类。 |
proto/agentd/v1/ | 生成的 protobuf 和 gRPC 定义。 |
许可证
MIT.
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。