mcpField
P
Pibox

Pibox

本地服务
github.com/psyb0tAI 与智能体35 天前更新

关于 Pibox

Pibox 将 pi-coding-agent 封装在可自托管容器中,面向开发者和 Agent,提供交互、API、Telegram、定时任务及 MCP 模式。其命令包装器会保留工作区和运行状态。

主要功能

  1. 01交互运行 pi 或提交提示词
  2. 02提供兼容 OpenAI 的 HTTP API
  3. 03支持按聊天隔离工作区的 Telegram 机器人
  4. 04通过 cron 安排任务
  5. 05提供限制于工作区的 MCP 工具

适用场景

  1. 01在本地工作区运行 pi
  2. 02通过 HTTP API 暴露 Agent 运行能力
  3. 03安排定期执行的 pi 任务
  4. 04让 MCP 客户端远程调用 pi

MCP 相关

通过 streamable HTTP 暴露 `run_prompt` 和限制于工作区的文件工具。MCP 模式可与前台模式并行运行,并使用 API 端口或独立 sidecar 端口。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"psyb0t-pibox": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"docker.io/psyb0t/pibox:v0.21.0"
]
}
}
}
启动命令docker run -i --rm docker.io/psyb0t/pibox:v0.21.0

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocidocker.io/psyb0t/pibox:v0.21.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

docker-pibox

CI version license Docker Pulls

在 aicodebox 容器中运行 pi-coding-agent。一个镜像,多种接入方式:交互式 shell、单次提示词、HTTP API(带有 OpenAI 兼容端点)、MCP 服务、Telegram 机器人,以及可按需定时运行 pi 的 cron 调度器。

你与 pibox 对话。pibox 与 pi 对话。pi 与你指定的任意大模型对话。没人关心中间发生了什么。

目录

快速开始

安装主机包装器。

curl -fsSL https://raw.githubusercontent.com/psyb0t/docker-pibox/main/install.sh | bash

# Install the full image as the wrapper default.
curl -fsSL https://raw.githubusercontent.com/psyb0t/docker-pibox/main/install.sh | PIBOX_FULL=1 bash

安装程序会创建 Pi、pibox 状态和 SSH 目录,拉取所选镜像,并将 pibox 安装到 PATH。默认使用最小镜像。在管道的 bash 端设置 PIBOX_FULL=1 可选择完整镜像,并将此选择写入已安装的包装器。

如果你希望一个容器启动另一个容器,请在同一个命令目录(通常为 /usr/local/bin)中安装 pibox、codexbox 和 claudebox。每个包装器都会在该目录中查找同级包装器文件,并以只读方式挂载到自己的容器中。同级容器随后会通过主机 Docker 守护进程运行,并挂载自己的主机数据目录。

使用 pibox 包装器

从你希望 Pi 操作的目录运行 pibox。包装器会将该目录挂载到容器内相同的绝对路径,持久保存 ~/.pi、~/.aicodebox 和 ~/.ssh/pibox,转发 PIBOX_* 配置,并原样传递 Pi 参数。

# interactive Pi in the current directory
pibox

# one prompt, then exit
pibox -p "list the files in this workspace"

# use an Anthropic-compatible provider for this run
ANTHROPIC_AUTH_TOKEN=your-token \
ANTHROPIC_BASE_URL=https://api.z.ai/api/anthropic \
ANTHROPIC_MODEL=glm-4.6 \
pibox -p "explain this project"

# inspect Pi's native command surface
pibox --help

# temporarily use the full image instead of the installed default
PIBOX_FULL=1 pibox -p "run the test suite"

包装器也是启动长期运行模式的常规方式。设置 PIBOX_DETACH=1 可让命名容器在后台运行。

PIBOX_DETACH=1 \
PIBOX_API_MODE=1 \
PIBOX_API_MODE_TOKEN=your-secret \
PIBOX_AVAILABLE_MODELS=glm-4.6,glm-4.5-air \
ANTHROPIC_AUTH_TOKEN=your-token \
ANTHROPIC_BASE_URL=https://api.z.ai/api/anthropic \
ANTHROPIC_MODEL=glm-4.6 \
pibox

只有在明确不想使用主机包装器时,才使用原始的 docker run。包装器是常规的交互式和服务入口。

Agent 使用与嵌套启动

对于用户和 Agent,已安装的包装器是常规接口。Agent 应从指定的工作区运行 pibox,而不是自行拼装新的 docker run 命令。包装器会保留工作区路径、Pi 状态、aicodebox 状态、SSH 状态、镜像选择和容器生命周期。

pibox -p "inspect this workspace and report the failing tests"
PIBOX_FULL=1 pibox -p "run the full test suite"
pibox -p "list the files" --thinking high

当一个容器需要启动另一个容器时,请在同一个命令目录中安装 pibox、codexbox 和 claudebox。运行中的容器可以直接调用同级命令。父包装器会传递主机启动上下文,并且只挂载同级包装器文件。不要设置 AICODEBOX_HOST_*、复制包装器,或手动挂载其他容器的状态目录。

镜像变体

  • psyb0t/pibox:latest 是最小镜像。
  • psyb0t/pibox:latest-full 基于共享的 aicodebox:latest-full,然后添加 Pi 和 pibox。它包含共享的开发工具链,无需在此仓库中重新构建。

模式

前台模式(API / Telegram / Cron)互斥,但 PIBOX_TELEGRAM_MODE=1 + PIBOX_CRON_MODE=1 除外,两者可同时运行(Cron 在线程内运行于 Telegram 中)。如果 API 与其他模式同时设置,则以 API 为准。

MCP 模式(PIBOX_MCP_MODE=1)独立运行,可与任何正在运行的前台模式共存。在 API 模式下,它挂载于 API 端口的 /mcp/ 上(不带末尾斜杠的 /mcp 也会访问同一处理程序);在其他模式下,它会作为 sidecar uvicorn 运行在独立端口上,并在该端口的根路径提供服务。

每种模式都有单独的页面,包含完整的设置说明、环境变量和示例。

API 模式 →

长时间运行的 FastAPI 服务,监听 :8080。提供 Agent 运行(同步、带运行 ID 轮询的异步运行、可取消运行)、带路径遍历检查的工作区文件上传/下载/列表/删除,以及支持流式传输和客户端执行工具调用的 OpenAI 兼容 chat/completions 端点。

environment:
  - PIBOX_API_MODE=1
  - PIBOX_API_MODE_TOKEN=your-secret
  - PIBOX_AVAILABLE_MODELS=glm-4.6,glm-4.5-air
Telegram 模式 →

在 Telegram 中与 pi 对话。每个聊天都有隔离的工作区,可通过允许的聊天列表和每个聊天的允许用户设置进行访问控制,支持文件导入、通过 [SEND_FILE: path] 取回文件,以及可跨重启保留的每聊天 /model、/effort、/system_prompt、/append_system_prompt 覆盖设置。

environment:
  - PIBOX_TELEGRAM_MODE=1
  - PIBOX_TELEGRAM_MODE_TOKEN=123456:ABC
Cron 模式 →

使用 6 字段 croniter 计划、以 YAML 定义的定时任务。每次运行都会有历史目录,其中包含 meta.json、stdout.log、stderr.log、result.txt,并提供“上次运行”提示,以便任务引用自身的历史记录。

environment:
  - PIBOX_CRON_MODE=1
  - PIBOX_CRON_MODE_FILE=/home/aicode/.aicodebox/cron.yaml
MCP 模式 →

通过可流式传输的 HTTP 暴露 run_prompt 以及受工作区限制的文件工具,让其他 Agent 能够将 pi 作为工具使用。可与任何前台模式共存:在 API 模式下挂载于 API 端口的 /mcp/ 上,在其他模式下则作为 sidecar 运行于独立端口。

environment:
  - PIBOX_MCP_MODE=1
  - PIBOX_MCP_MODE_TOKEN=your-secret

配置

在主机上设置 PIBOX_GIT_NAME 和 PIBOX_GIT_EMAIL,以便在启动钩子运行前配置运行时用户的全局 Git 身份。直接部署容器时也可使用相同名称。在容器内设置非空的 AICODEBOX_GIT_NAME 和 AICODEBOX_GIT_EMAIL 时,它们具有更高优先级;通过封装脚本时,请将这些共享值设置为 AICODEBOX_ENV_AICODEBOX_GIT_NAME 和 AICODEBOX_ENV_AICODEBOX_GIT_EMAIL。空设置会保留现有 Git 配置。不接受多行值。

make version V=X.Y.Z 会同步软件包元数据、锁文件、Codex 插件清单和安装程序的封装脚本版本引用,但不会提交或打标签。远程安装会下载匹配的发行版封装脚本,除非设置了 PIBOX_INSTALL_REF 覆盖它。更新镜像不会更新已安装的封装脚本。

命名约定:PIBOX_<MODE>_MODE=1 是开关标志,PIBOX_<MODE>_MODE_<KNOB>=... 是对应的配置。非模式专属变量(工作区、容器名称、可用模型)不带模式前缀。

该镜像基于 aicodebox 构建,因此对应的 AICODEBOX_* 名称也可用——当只设置带 pibox 前缀的变量时,入口点会将 PIBOX_X 转换为 AICODEBOX_X。如果两者都设置,则以 AICODEBOX_* 为准。

使用 LLM 提供商设置上游端点 URL、协议、API 密钥或令牌,以及模型。PIBOX_PROVIDER_* 支持 Pi 文档中所述的 OpenAI、Anthropic 和 Google 自定义 HTTP API。下面的 ANTHROPIC_* 变量仍作为兼容方式保留,供现有的 Anthropic 兼容部署使用。

模式标志
变量默认值作用
PIBOX_API_MODE0启动 HTTP API 服务(前台运行)
PIBOX_TELEGRAM_MODE0启动 Telegram 机器人(前台运行)
PIBOX_CRON_MODE0启动 cron 调度器(前台运行;Telegram 也启用时在线程中运行)
PIBOX_MCP_MODE0暴露 MCP——在 API 模式下挂载到 /mcp/,否则作为边车运行

各模式的专属配置项(端口、令牌、配置路径、历史记录目录)请参阅对应模式页面:api.md、telegram.md、cron.md、mcp.md。

工作区与运行时
变量默认值作用
PIBOX_WORKSPACE/workspace容器内的根工作区目录
PIBOX_CONTAINER_NAMEaicodebox用于限定每个容器的状态文件(身份验证等)
PIBOX_AVAILABLE_MODELS—API 模式必需。 以 CSV 格式列出由 /openai/v1/models 返回并显示在 Telegram /model 选择器中的模型。pibox 会通过 PIBOX_PROVIDER_API 将列出的每个模型注册到上游提供方。若未设置此变量,API 模式将拒绝启动;Telegram /model 选择器则会退化为回复“设置此环境变量”。
PIBOX_AVAILABLE_EFFORTS适配器列表覆盖 Telegram /effort 选择器中显示的 effort/--thinking 列表(以逗号分隔)
PIBOX_DATA_DIR~/.pi主机上的 Pi 配置、身份验证、扩展和会话目录
PIBOX_STATE_DIR~/.aicodebox主机上的 pibox 模式配置和历史记录目录
PIBOX_SSH_DIR~/.ssh/pibox挂载到容器中的主机 SSH 目录
PIBOX_IMAGE已安装的镜像覆盖已安装包装器选用的镜像
PIBOX_FULL已安装的选项0 选择精简版,1 选择完整版
PIBOX_DETACH01 启动命名的后台容器,而不是一次性前台容器
PIBOX_ENV_*无将 pibox 环境变量传递到容器中
PIBOX_MOUNT_*无添加同路径或 host:container 绑定挂载
AICODEBOX_ENV_*无将共享环境变量传递到启动的容器中,并去掉前缀
AICODEBOX_MOUNT_*无为启动的容器添加共享的同路径或 host:container 绑定挂载

自动化可以通过 PIBOX_INSTALL_DIR 和 PIBOX_BIN_NAME 将包装器安装到其他命令目录。已安装的包装器支持带版本的 AICODEBOX_HOST_* 嵌套启动上下文。它会将这些主机路径用作 Docker 绑定挂载源,提供同级包装器,并将共享的 AICODEBOX_ENV_* 和 AICODEBOX_MOUNT_* 值应用到子容器。

在 PIBOX_STATE_DIR 下(默认为 ~/.aicodebox):

  • 放在 bin/ 中的可执行文件会优先于其他所有路径加入 PATH,适用于所有模式下的 pi、初始化脚本以及 docker exec shell。
  • 放在 init.d/*.sh 中的脚本会在每个容器启动后运行一次,执行时间在镜像自带的初始化脚本之后;运行用户为 aicode,并拥有免密码 sudo 权限。脚本失败时会记录日志,但其余脚本仍会继续运行。新容器会再次运行这些脚本,因此请确保它们可安全重复执行。

身份验证

对于兼容 Anthropic 的端点,请使用以下兼容性变量。对于 LiteLLM 或其他兼容 OpenAI 的端点,请使用通用提供商配置。

变量用途
ANTHROPIC_AUTH_TOKENBearer 令牌(Z.AI、直接使用 Anthropic 等)
ANTHROPIC_API_KEY同上 — pi 会读取这两项
ANTHROPIC_BASE_URL端点覆盖值(默认值:https://api.anthropic.com)
ANTHROPIC_MODEL调用方未指定模型时使用的默认模型

对于大多数任务,Z.AI 的 GLM 模型速度快、成本低 — 推荐的默认设置是 ANTHROPIC_BASE_URL=https://api.z.ai/api/anthropic + ANTHROPIC_MODEL=glm-4.6。

pi 的思考级别(--thinking):off、minimal、low、medium、high、xhigh。在 telegram 模式下以 /effort 命令的形式提供,在 API 请求中则以 thinking 的形式提供。

Agent 集成

技能适用于任何会读取 .agents/skills/ 的 Agent(例如 peen)。它会指示 Agent 本地工作时使用已安装的封装程序,只有在远程服务已运行时才使用 MCP。它可原生安装到以下客户端中。

Claude Code
claude plugin marketplace add psyb0t/agents
claude plugin install pibox@psyb0t

Claude Code 会提示输入 pibox URL;如果启用了身份验证,还会提示输入 API 和 MCP 令牌 — 敏感值会存储在你的操作系统钥匙串中。

Codex
codex plugin marketplace add psyb0t/agents
codex plugin add pibox@psyb0t

通过市场安装后,技能以 $pibox:pibox 的形式调用。在任何包含 .agents/skills/ 的仓库中,Codex 也会自动发现该技能,无需安装,并以普通的 $pibox 形式调用。

OpenClaw

每次发布时,都会将该技能发布到 ClawHub:

openclaw skills install @psyb0t/pibox

对于使用本地 stdio 的 MCP 客户端,@psyb0t/pibox 插件可桥接到服务的 /mcp/ 端点:

openclaw plugins install clawhub:@psyb0t/pibox

然后设置 PIBOX_URL(如果启动服务时启用了 MCP 身份验证,还要设置 PIBOX_MCP_MODE_TOKEN)。

开发

如需了解如何在只读上下文中运行一次性 GitHub 任务、查看实时工具日志并收集输出文件,请参阅 GitHub Action。

make help   # list targets
make build      # build the minimal image
make build-full # build the full image from aicodebox full
make build-all  # build both variants
make test   # run the full e2e suite (needs .env.test)
make test-action # test the GitHub Action contract without credentials
make clean  # remove built images

VERSION 从 pibox/pyproject.toml 读取。make build 会拉取 Dockerfile 中固定版本的已发布 psyb0t/aicodebox 基础镜像;设置 SKIP_BASE_PULL=1 可改用本地构建的基础镜像(例如来自同级的 ../docker-aicodebox 检出),也可以通过 make build BASE_IMAGE=... 覆盖。

测试

端到端测试会构建镜像,并针对真实的大模型端点运行。Telegram 测试使用 psyb0t/telethon-plus 作为真实的 MTProto 用户机器人。

cp .env.test.example .env.test
$EDITOR .env.test   # fill in ANTHROPIC_* and optionally Coding Plan or Telegram creds
make test

如果 AICODEBOX_TELEGRAM_MODE_TOKEN 为空,Telegram 测试会自动跳过。通用提供商测试会使用 Z.AI Coding Plan 的两个端点;除非设置了 ZAI_CODING_AUTH_TOKEN,否则会复用 ANTHROPIC_AUTH_TOKEN。

许可证

WTFPL — 参见 LICENSE。想做什么就做什么。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。