English | 简体中文
一条命令在信创内网 GPU 盒上启动编码 Agent——零云上出口、零 SSH 隧道拼装、全量出口调用留痕可审。数据不出境的国企研发,第一次像用云端 runner 一样顺手。
把 6 步 SSH + tmux + 端口转发压成一条命令,让数据不出境的国企研发第一次像用云端 runner 一样顺手。
两个进程、各一个二进制:笔记本上的 airtap 客户端,与信创内网 GPU 盒上的 airtapd 守护进程。客户端经 mTLS(tcp :7437)与守护进程建立一条隧道,同一条连接既跑 agent 的工具调用流,也回传 TUI 流。Agent 在盒上本地运行——read / write / list / bash 工具直接操作盒上仓库,模型调用走盒内 127.0.0.1;egress allowlist 代理是盒上唯一的网络出口,任何不在 egress.allow 里的拨号都被拒绝并写入 audit.log。没有 SSH,没有 tmux,没有端口转发,没有云后端。
信创 / 国企研发要在内网 GPU 盒(昇腾 910C / 海光 DCU)上跑编码 Agent,因为《数据安全法》与等保 2.0 要求 prompt 和代码上下文不得离开企业内网。现实是:SSH 进每台盒子、手工拼端口转发让笔记本够到 agent 的 HTTP 面、tmux 守会话、断线重连全套再来一遍,而且合规团队看不到"到底什么流量出了网"。Airtap 把 SSH + tmux + 隧道 + 逐盒配置压成一份声明式 airtap.yaml 契约:守护进程拒绝任何不在 egress.allow 里的出站拨号,每一次拨号(允许或拒绝)都追加进 audit.log。云端 runner(Harness IDE / Reachpad)假设后端云可达,数据不出境在架构上禁掉这个假设——所以这不是"难用",是云 runner 结构上服务不了这个面。
# macOS(Homebrew)
brew install SuperMarioYL/tap/airtap
# Linux(直接下载二进制)
curl -L https://github.com/SuperMarioYL/airtap/releases/latest/download/airtap-linux-amd64.tar.gz | tar xz
sudo mv airtap /usr/local/bin/
# 或从源码
go install github.com/SuperMarioYL/airtap/cmd/airtap@latestGitee 镜像:https://gitee.com/SuperMarioYL/airtap(CN 网络优先)。需要 Go 1.24+。支持国产算力盒上运行 airtapd(Linux 昇腾 / 海光);笔记本侧客户端支持 Linux 与 macOS,Windows 暂不在 v0.1 范围。
三条命令从冷启动到第一条 agent 流。airtapd 在每台盒子上只部署一次,之后永久复用。
# 1. 在笔记本上初始化(生成 airtap.yaml + mTLS CA / 客户端证书)
airtap init --box 10.0.0.5:7437
# 2.(一次性)把守护进程和 CA 拷到 GPU 盒并启动,监听 :7437 mTLS
scp airtapd ca.pem ops@gpu-box:/opt/airtap/ && ssh ops@gpu-box '/opt/airtap/airtapd &'
# 3. 连接 → 跑 agent → 看出口审计
airtap connect
airtap run "给 server.go 加一个 /health 接口"
airtap audit示例输出
$ airtap connect
connected to 10.0.0.5:7437 (mTLS, ca=sha256:9f3a…) ✓
$ airtap run "给 server.go 加一个 /health 接口"
▸ reading /opt/proj/server.go (tool: read)
▸ calling model deepseek-v3 @ 127.0.0.1:8000 (egress: allow)
▸ writing /opt/proj/server.go (tool: write)
✓ done — 1 file changed, +9 −0
$ airtap audit
2026-07-24T10:11:02 ALLOW 127.0.0.1:8000 deepseek-v3 model call
# 全程只有这一条出站记录——零其他拨号
五个最常见的工作流。完整示例见 examples/。
# 切换盒上国产模型(DeepSeek-V3 / Qwen3-Coder / GLM-4.6,OpenAI 兼容端点)
airtap run --model qwen3-coder "把 /health 改成带就绪探针"
# 指定工作目录与允许的工具子集
airtap run --workdir /opt/proj/svc-a --tools read,bash "跑一下 go test ./..."
# 只跑一次连通性自检,不启动 agent
airtap connect --check
# 把出口审计导出给 SIEM(append-only,OEM tier 加 hash chain)
airtap audit --since 24h --json > audit-24h.json
# 在新盒子上重新签发客户端证书(旧证书吊销后)
airtap init --box 10.0.0.6:7437 --rotateairtap run "<prompt>" 会在盒上跑一个最小 ReAct 循环:系统提示 → 调盒上模型 → 工具分发(read / write / list / bash)→ 循环到完成;只有工具结果与 diff 会过隧道回传到 TUI,模型拨号永远停在 127.0.0.1。
90 秒演示:airtap init → airtap connect → airtap run "给 server.go 加一个 /health 接口" → airtap audit。演示在 QEMU 昇腾模拟器(CPU mock 模型)上录制,assets/demo.cast 是 asciinema 源,assets/demo.gif 是渲染产物,由 docs/demo.tape + .github/workflows/demo.yml 在发版时自动重渲。
核心是 EgressManifest ——一份 airtap.yaml 把原本散在 SSH config、tmux 脚本、逐盒 env 里的四件事绑成一条契约:
| 键 | 类型 | 默认 | 含义 |
|---|---|---|---|
box.addr |
string | 必填 | GPU 盒地址 host:port |
box.tls |
string | mTLS |
隧道鉴权方式(v0.1 仅 mTLS) |
box.ca |
string | ./ca.pem |
CA 证书路径 |
model.endpoint |
string | 必填 | 盒上模型端点(OpenAI 兼容,127.0.0.1) |
model.name |
string | 必填 | 模型名:deepseek-v3 / qwen3-coder / glm-4.6 |
egress.allow |
[]string | 必填 | 允许拨号的目标白名单 |
egress.mode |
string | airgap |
airgap = 拒绝一切不在 allow 里的出站 |
egress.audit |
string | ./audit.log |
审计日志路径(append-only) |
agent.workdir |
string | 必填 | 盒上工作目录 |
agent.tools |
[]string | [read,write,list,bash] |
启用的工具 |
守护进程把这份 manifest 当契约执行:不在 egress.allow 里的出站一律拒绝,允许与拒绝都写 audit.log。这不是配置文件,是云 runner 结构上做不到的 airgap + 审计原语。
| 能力 | Airtap | Harness IDE / Reachpad | RelayBar |
|---|---|---|---|
| 数据不出境 / airgap 出口 | ✓ | — | partial(只转发,不强制内网) |
| 出站审计 trail | ✓ | — | — |
| agent 生命周期(起 / 跑 / 停) | ✓ | ✓ | — |
| 信创国产算力(昇腾 / 海光) | ✓ | — | — |
| 一键安装 / 零后端运维 | partial(要拷一次 airtapd) | ✓(云托管) | ✓ |
诚实说:在"云端托管、零运维"这一项上 Harness IDE / Reachpad 更省心——它们的后端是云托管的,Airtap 要在盒上放一个守护进程。代价换来的是 airgap 出口 + 审计 + 信创面,这三样是云 runner 架构上给不了的。
v0.1.0(已发布)
-
airtap.yaml解析 + 校验,airtap init签发 mTLS CA / 客户端证书 -
airtapd在 :7437 接受 mTLS,airtap connect回显连接 - 盒上 ReAct agent 循环 + egress allowlist 代理 +
airtap runTUI 流 -
airtap audit渲染 append-only trail,录制assets/demo.cast
下一步
- v0.2:agent-plugin spec(适配 Aider / Cline / Continue,内置最小循环之外)
- v0.3:多盒 / fleet 调度(一份 manifest 对一盒 → 一对多)
- hash-chained
audit.log(OEM tier,防篡改) - GPU / NPU 自动发现(当前端点手填)
- Windows 笔记本客户端(v0.1 仅 Linux / macOS)
- RBAC / 多用户 / SSO(v0.1 单人单盒)
Airtap 是商业产品,私有化部署授权。二进制对个人评估免费(你可以 clone、跑、看审计),但生产 / OEM 场景需要授权——这不是"以后再说",是数据不出境客户的采购清单本来就有的项。
私有化部署 + OEM 授权解锁三项:
- OEM branding —— 把 Airtap logo 换成企业 logo,集成商可贴牌进自有国产化栈
- 审计聚合 —— 多盒
audit.log汇总进企业 SIEM,统一出口留痕视图 - air-gap egress 策略包 —— 预置国企等保三级合规 allowlist 模板,开箱即过等保
定价:
- 试点:¥30,000 / 首个组织 / 12 个月(pilot tier)
- 常年:¥80,000 / 组织 / 年(ongoing)
- 对公转账 + 增值税专用发票(国企采购标准流程;不支持信用卡)
Hosted SaaS 结构上不提供 —— 数据不出境禁止任何把 prompt / 上下文发到境外端点的路径,包括付款数据。我们用自建极简 license-server(Go,on-prem,离线激活文件 .lic),不走 Stripe。
最小成单路径: 设计合作伙伴访谈 → 在他们盒上现场 airtap run "给 server.go 加一个 /health 接口" 跑通 → 生成 airtap audit 报告证明零出口 → IT 负责人拿审计报告走内部采购立项 → ¥30k 对公打款 + 开票 → 邮寄 .lic + 离线策略包。
要在你的信创环境里做一次试点评估,见 examples/airtap.yaml 起一份 manifest,或邮件 leo.stack@outlook.com。
MIT — 见 LICENSE。个人评估与 OSS 使用免费;生产 / OEM 部署见上面的付费与授权。
欢迎 issue 与 PR。先开 issue 描述场景与复现路径,再发 PR。在信创 / 国产算力盒上的真实踩坑报告尤其有价值。
MIT © 2026 SuperMarioYL
