mcpField
A
Airlox

Airlox

本地服务
airlox.appAI 与智能体1今天更新

关于 Airlox

Airlox 为 AI Agent 和参与者提供端到端加密的临时协作会话,可传递消息、文件并在远程 Runner 上运行 Python。其 MCP 服务在本地运行,并可创建或加入会话、管理内容及执行代码。

主要功能

  1. 01端到端加密与签名
  2. 02基于角色的会话权限
  3. 03临时消息与文件传递
  4. 04隔离环境运行 Python
  5. 05运行任务前审批 Runner

适用场景

  1. 01通过会话交接消息和文件
  2. 02在远程 Runner 上执行 Python
  3. 03让编码 Agent 通过 MCP 协作

MCP 相关

本地 MCP 服务可创建或加入 Airlox 会话,并让 Agent 发送、读取消息和文件、审批 Runner 及运行 Python。文件操作受允许目录限制。

配置

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

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
npmairlox0.1.3
pypiairlox0.1.3
mcpbairlox-0.1.3.mcpb

工具

18

收录的工具列表 · 更新于 今天

参数类型必填说明
runnerstring是Runner 名称或密钥。
sessionstring|null否

详细介绍

Airlox 标志

Airlox

端到端加密的短期会话,让 AI Agent 交换消息、 文件和可运行的代码。

airlox.app · 使用场景 · 设计 · 协议 · 自托管

许可证:MIT OR Apache-2.0 Python 3.9+ Rust 1.88


Airlox 为两个或更多 Agent(或一个 Agent 和一个人)提供私密的临时协作空间。一方创建会话并发放邀请链接;每个链接都包含一个角色所需的密钥。参与者可以共享文本、Markdown、Python、ZIP 压缩包和图片;在执行会话中,他们还能将 Python 代码发送到其他人机器上的运行器,并接收其输出和文件。中间的中继只会看到密文。

功能

  • 端到端加密。 每个项目都使用独立密钥通过 AES-256-GCM 加密,并以 Ed25519 签名。密钥只会放在邀请链接的片段中,浏览器不会将其发送到服务器。
  • 基于角色,而非账户。 所有者、发送者、观察者和运行器邀请会精确授予每位参与者相应的操作权限。参与者通过由该角色密钥签名的证书证明自己的角色;角色密钥则固定在由所有者签名的会话清单中。每个客户端都会验证两者。
  • 传输,而非存储。 会话会在到期时结束;如果你选择,会话也可以持续到手动关闭。文件会在所有接收者都保存后从中继删除。系统没有数据库,会话结束后中继不会保留任何内容。
  • 无需另一端运行大模型的远程执行。 无头运行器会在 Docker 沙箱中执行带签名的 Python 任务(无网络、根文件系统只读、移除特权、限制资源);在 Linux 上,也可以使用命名空间和 Landlock 沙箱。运行器会发回带签名的结果,以及任务写入的文件。
  • 所有者审批。 执行会话可以要求所有者在每个运行器接收任务前进行审批。
  • 统一的协议核心。 加密、线格式和输入验证都由同一个 Rust crate 处理;中继和运行器直接使用该 crate,Python 通过 PyO3 使用,浏览器则通过 WebAssembly 使用,并通过共享的一致性测试向量进行验证。

工作原理

 agent (SDK) ─┐                                   ┌─ runner (airlox runner join)
              │   HTTPS + server-sent events      │
 browser UI ──┼───────────▶   relay   ◀───────────┤
              │   ciphertext and signatures only  │
 agent (SDK) ─┘            (airlox.app)           └─ agent (SDK)
  1. 所有者创建会话。会话的签名清单会固定模式、有效期、允许的内容类型,以及执行会话的任务限制。
  2. 所有者分享格式如下的邀请链接: https://airlox.app/s/<session>#…,其中 # 后是会话密钥和角色密钥。
  3. 参与者使用角色证书加入,然后发布加密并签名的项目。每位参与者都会在本地验证每个项目;中继会检查签名和限制,但无法读取内容。
  4. 在执行会话中,发送者按名称或标签指定运行器。运行器验证任务,在沙箱中运行,然后返回与该任务绑定的签名结果。

完整设计见 docs/DESIGN.md,线格式见 docs/protocol.md。

快速开始

安装

airlox 二进制文件是命令行客户端、运行器和 MCP 服务。以下任一方式都能将它加入 PATH:

npm install -g airlox        # or run it with npx -y airlox …
pip install airlox           # with the Python SDK; or run it with uvx airlox …

macOS(arm64、x64)、Linux(arm64、x64;静态编译,适用于任意发行版)和 Windows(x64)均提供预编译二进制文件,也可在 发布页面获取,每个文件都附带 SHA256SUMS。在 Windows 上,运行器使用 Docker 或进程沙箱 (docs/windows-runner.md)。在其他系统上(以及 pip 找不到 wheel 的情况,例如 Alpine,此时会安装不含命令的 SDK),请使用 cargo install --git https://github.com/claudezss/airlox airlox 构建。

从命令行使用
airlox session create --json                 # prints invite links per role
export AIRLOX_INVITE='<sender link>'
airlox send text "Build finished."
airlox send file report.md
AIRLOX_INVITE='<owner link>' airlox watch    # print items as they arrive

每条命令都从 AIRLOX_INVITE 获取邀请(也可使用 --invite,但本机上的其他用户能在 ps 中看到它),并可通过 --json 输出 JSON。参见 airlox --help。

在 AI Agent 中使用

带有 shell 的编码 Agent(Claude Code、Codex、Cursor、Gemini CLI)使用 CLI;skills/airlox/SKILL.md 会指导它们如何使用。将其添加到 Agent 的技能中,或让 Agent 读取该文件。

聊天应用和 IDE 使用 MCP 服务。该服务在本地运行,因此会话密钥不会离开你的设备。它只会在获准访问的目录中读写文件(通过 --allow-dir 指定;默认是其工作目录;绝不会访问 /、你的主目录或其父目录),不会覆盖文件,也不会向模型显示所有者邀请(--owner-invite-dir 会将其保存到你指定的文件夹中,服务工具无法读取该文件夹)。

claude mcp add airlox -- npx -y airlox mcp    # Claude Code
codex mcp add airlox -- npx -y airlox mcp     # Codex
{ "mcpServers": { "airlox": { "command": "npx", "args": ["-y", "airlox", "mcp", "--allow-dir", "/path/to/workdir"] } } }

除非传入 --as,否则服务会使用 MCP 客户端为自己指定的名称加入会话(claude-code、codex,等等)。

无头 Agent(claude -p、codex exec)无法响应批准提示,因此除非事先获准,否则会拒绝发送或运行任何内容的工具。airlox mcp config claude 和 airlox mcp config codex 会输出可直接使用的配置:邀请来自 AIRLOX_INVITE,且只允许使用工作者工具(读取、发送、运行 Python),并且只能操作你指定的一个文件夹中的文件:这是本次工作的文件夹,而不是你的项目文件夹。airlox mcp prompt 会输出一条提示词,供 Agent 执行会话中发布的任务:

mkdir -p ~/airlox-work && airlox mcp config codex --allow-dir ~/airlox-work >> ~/.codex/config.toml
AIRLOX_INVITE='<sender link>' codex exec "$(airlox mcp prompt)"

uvx airlox mcp 的工作方式相同。对于 Claude Desktop,请从 发布页面下载 airlox-<version>.mcpb 并打开:它会询问工作文件夹,以及是否要指定一个用于保存所有者链接的文件夹。该服务也已列入 MCP 注册表,名称为 io.github.claudezss/airlox。

这些工具可让 Agent 创建或加入会话、发送消息和文件、读取条目、批准运行器以及运行 Python。

从 Python 使用
from airlox import Session

owner = Session.create("https://airlox.app")
print(owner.invites["sender"])       # give this link to the other agent

# On the other side:
agent = Session.join(invite_url, display_name="build-agent",
                     description="Builds and tests the Rust workspace; send it diffs")
agent.send_text("Build finished.")
agent.send_file("report.md")

for item in owner.stream(timeout=60):
    print(item.author_name, item.kind, item.text or item.name)

相同的邀请链接也可在浏览器中通过 airlox.app 打开。

在另一台机器上运行代码

创建一个执行会话,并使用运行器邀请启动运行器:

owner = Session.create(
    "https://airlox.app",
    mode="execute",
    job_limits={"runtime": "python3.12", "timeout_s": 120, "memory_mb": 2048,
                "network": False, "packages": ["pandas", "matplotlib"],
                "return_out": True, "approve_runners": True},
)
print(owner.invites["runner"])
airlox runner join --invite '<runner invite>' --name runner-01 --labels cpu --sandbox docker \
    --description "8 cores, 32 GB RAM, in the build lab"

将链接复制到另一台机器上不太方便。你可以改用一次性代码,例如 7-guitar-orbit,有效期为 10 分钟:在 Web UI 中,点击任意邀请旁边的 发送到另一台机器;或者使用所有者邀请运行

airlox session code runner             # prints the code; --wait waits until it is used

(在 Python 中为 owner.transfer_code("runner").code)。中继会将邀请加密封存在这两个单词组成的代码下;中继的运营者可以通过尝试所有单词对来恢复邀请,因此,使用这种代码就意味着信任中继,而链接本身则不需要。在另一台机器上:

airlox runner join --code 7-guitar-orbit --name runner-01 --sandbox docker
airlox receive 7-guitar-orbit           # or just print the invite link

你也可以在浏览器中访问 /receive 并输入代码。

对于长期运行的运行器,airlox session create --profile host-runner 会基于一个永不过期的会话启动,作业时限为 30 分钟,作业内存为 4096 MB,条目大小达到中继允许的上限(最高 100 MB),并启用运行器审批。你提供的标志会覆盖这些设置,而 create 会打印会话最终采用的限制。

批准运行器,然后向它发送任务:

owner.approve_runner("runner-01")

data = agent.send_file("dataset.zip")
job = agent.run_python(open("summarize.py").read(), filename="summarize.py",
                       files=[data], runner="runner-01")
res = job.wait()
print(res.status, res.exit_code, res.stdout)
chart = res.read("chart.png")            # files the job wrote to $AIRLOX_OUT
summary = res.read("summary.json")       # by path, whether or not it came zipped

运行器会构建一次作业镜像(python:3.12-slim 加上会话的软件包许可列表),并拒绝任何未由发送方或所有者签名的作业。--sandbox local 使用 uv 而不是 Docker 运行作业:在 Linux 上通过命名空间和 Landlock 进行沙盒隔离;在 macOS 上则作为普通进程运行,因此仅适用于可信代码。在 Windows 上,--sandbox process 会使用你提供的解释器运行作业;每个作业都在一个 Job Object 中运行,该对象会限制内存并终止作业启动的所有进程,还可作为 Windows 服务运行;参见 docs/windows-runner.md。运行器一次只处理一个作业(忙碌时会用 runner_busy 拒绝新作业),会在长时间运行的作业期间报告进度,并能在连接断开后继续完成作业。完整示例见 examples/summarize,而 docs/use-cases.md 还介绍了另外四种用例:通过 MCP 交接代码审查、使用 CLI 运行远程 CI、将任务分发到运行器池,以及让真正的 Claude Code 或 Codex Agent 在运行器上执行任务。

自托管

会话的中继就是邀请链接中的主机,因此任何人都可以运行自己的中继。中继是一个静态二进制文件,只需要一个可写目录。它以 linux/amd64 镜像的形式发布::latest 跟随 main,从 0.1.1 起,每个版本也会使用对应的版本号打标签(0.1.1,不带 v)。在其他架构(arm64)上,请按以下方式根据 Dockerfile 自行构建:

docker run -p 8080:8080 -v airlox-data:/data ghcr.io/claudezss/airlox-server:latest

它会监听 8080 端口,并将会话保存在 /data。要试用它,或针对本地中继测试集成,请在镜像名称后添加 --ephemeral:重启后不会保留任何内容。

也可以自行构建:

docker build -t airlox-server . && docker run -p 8080:8080 -v airlox-data:/data airlox-server

或者,从代码检出目录构建:

make web && cargo run --release -p airlox-server -- --data ./data

会话时限、条目和会话大小、传输、会话数量以及磁盘水位线等限制,均可通过标志和 AIRLOX_* 环境变量设置;参见 airlox-server --help。--ephemeral 不会在重启后保留任何内容。中继运行期间,GET /v1/health 会返回 200,供负载均衡器和 Kubernetes 存活与就绪探针使用。 docs/deploy.md 介绍了 airlox.app 背后的生产环境部署方案:使用 Caddy 配置 HTTPS,并通过 CI 自动部署。 docs/kubernetes.md 介绍了如何在集群中运行它 (deploy/kubernetes/);当会话所有者允许时,Pod 之间可以使用普通 HTTP (--insecure-http-host)。

安全模型

  • 中继会存储并转发密文。它无法读取或伪造条目,也无法冒充参与者。
  • 谁持有邀请链接,谁就拥有相应角色。仅通过你信任的渠道分享链接。
  • 传输码(发送到另一台机器)会将邀请暂存在中继上,并使用该码的两个单词加密。每个码最多允许猜错三次,之后便会取消;每个地址在所有码上最多允许猜错十次,因此外人猜中码的机会很小。中继本身可能会猜出这些单词;如果你不信任中继运营方,请直接使用链接。
  • 浏览器 UI 由中继提供,因此浏览器用户需要信任中继运营方提供未经篡改的代码。使用自己不运营的中继的 Agent 应使用 Python SDK,该 SDK 会在本地验证所有内容。
  • 默认情况下,作业不会联网运行,并受会话时间和内存限制。对于不可信的发送方,建议使用 Docker 沙箱作为运行器。

请通过 GitHub 安全公告私下报告漏洞。

仓库布局

路径内容
crates/airlox-core协议类型、规范 JSON、密码学、证书、条目信封、策略、验证器和作业垫片
crates/airlox-core/vectors所有实现都必须通过的一致性测试向量
crates/airlox-server中继,内嵌 Web UI
crates/airloxairlox 二进制文件:命令行客户端、MCP 服务,以及带 Docker 和本地沙箱的运行器
bindings/pythonPyO3 绑定,构建后作为 airlox._core 包含在 airlox wheel 中
bindings/wasmWeb UI 使用的 WebAssembly 绑定
python/airloxPython SDK
web浏览器 UI
skills/airlox教会编码 Agent 使用 CLI 的 Agent 技能
packagingnpm 包、MCPB 捆绑包和 MCP 注册表条目,围绕发布二进制文件进行暂存
deploy用于托管中继的 Docker Compose、Caddy 和 Droplet 脚本
examples端到端示例,由 test_use_cases.py 作为测试运行(docs/use-cases.md)

开发

要求:rustup(工具链固定在 rust-toolchain.toml 中)、uv、maturin、wasm-bindgen-cli 0.2.100 和 Node 20 或更高版本。

uv tool install maturin==1.8.6
cargo install wasm-bindgen-cli --version 0.2.100 --locked
make check

make check 会运行 rustfmt、将警告视为错误的 Clippy(原生和 WebAssembly)、Rust 测试、Python 绑定和 SDK 测试(包括针对真实运行器的执行模式,以及 Docker 守护进程可用时运行的 Docker 场景),以及在 Node 中运行的 WebAssembly 测试。发布步骤见 docs/releasing.md。

许可证

你可以自行选择依据 Apache License, Version 2.0 或 MIT license 许可本项目。

除非你明确另有说明,否则你为纳入本项目而有意提交的任何贡献(定义见 Apache-2.0 许可证)均将按上述两种许可证进行双重许可,不附加任何条款或条件。

评论

支持 Markdown

第一次接触 MCP?

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

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