闲置主机 + 白嫖Claude Opus:零成本打造7x24小时的AI牛马

Claude Code 自发布以来,在开发者圈子里掀起了 Agent 的热潮。配合 Claude Opus 模型,它能自动编写代码、调试程序、安装依赖,让无数程序员惊呼"这才是未来的编程方式"。

但在日常使用中,两个痛点逐渐凸显:

第一个痛点是物理限制。电脑必须 24 小时开机,人必须坐在电脑前。Agent 在跑任务时,不能关机、不能离开,甚至不能让电脑休眠。

第二个痛点是权限控制。Claude Code 直接在主机环境运行,每次操作都需要手动确认权限。为了防止误删重要文件或污染系统环境,又不敢把所有权限默认放开。

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432025483-33311bc4-38b5-4c5f-ae80-dc032db04c80.png

实际上大部分操作都不需要人工干预。运行时间长了,守着屏幕也变得枯燥。真正需要关心的只有最终任务能不能完成,完成后通知看看结果就行。

这引出了一个问题:能否打造一个 7x24 小时运行的 AI 助手,在我吃饭、打游戏、甚至睡觉的时候,都能在后台干活?

解决这个问题需要三个关键要素:一个隔离的 Runtime 环境让 Agent 随意折腾,一个成本可控的大模型供 Agent 调用,以及一个支持远程访问的 Agent 框架。

经过一番研究和实践,最终选择了 PVE + LXC 作为 Runtime 方案,Antigravity Manager 白嫖 Claude Opus,OpenCode 作为 Agent 框架,成功打造了这个 7x24 运行的 AI 牛马。

Runtime 是 Agent 能力的基石。模型能在 Runtime 中获取真实的执行反馈、与外界环境互动,就像真人在操作电脑一样。

有了 Runtime,模型不需要害怕犯错。它可以根据报错信息不断调整决策,自己编写代码、运行脚本、安装缺失的依赖。缺少工具?自己去搜索、下载、配置。

有了 Runtime,文件系统成为天然的上下文存储,再也不用担心对话中途记忆丢失的问题。Claude Code 的成功验证了这一点,而更早的 Manus 项目更是领先一个大版本。

但与此同时,Runtime 也带来了安全风险。Agent 可能误删文件、污染系统环境,甚至遭遇供应链攻击。因此这个 Runtime 必须是隔离的,Agent 可以在里面随意造,出了问题就删掉重建,不影响主机环境。

基于这个需求,云服务化的独立运行环境成为最佳选择。

我把家里闲置的小主机利用起来,安装 Proxmox VE(PVE)虚拟化平台后创建 LXC 容器,并打包成模板。这样每次环境被污染,直接克隆模板就能在几秒内新建一个干净的机器。

LXC 比虚拟机更加轻量,可以最大限度利用主机性能。

方案选型时需要考虑几个关键问题:

为什么选择 LXC,而不是直接用 Docker?

因为需要 Agent 运行在一个完整的、模拟真实服务器的环境中。Agent 在执行复杂任务时可能需要运行 Docker 容器,而 Docker in Docker 嵌套方案存在诸多限制和性能问题。

LXC 提供了完整的操作系统环境,Agent 可以像在真实服务器上一样操作。

为什么不用 OpenHands 等开源方案?

OpenHands 的 Agent 与沙箱耦合太严重。沙箱不是独立的完整操作系统,而是通过 API 接口下发命令。这种设计限制了 Agent 的自由度,与"给 Agent 一个真实环境"的理念不符。

下图是在 PVE 中创建的 LXC 容器列表,每个容器都是一个独立的隔离环境:

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432025557-ed4c73db-a7fb-4aba-896b-e8446fc4bf5e.png

采用 Debian 作为基础容器镜像,预装了常用的 Python 库、Docker以及开发工具链。为了应对需要图形界面的任务,还在容器中部署了 Webtop 项目。

Webtop 是一个基于 Docker 的容器可视化方案,它能通过浏览器访问容器内的完整 XFCE 桌面环境。当 Agent 需要操作浏览器、运行 GUI 程序时,可以直接调用这个可视化界面。

通过浏览器访问 3001 端口(HTTPS),就能看到运行在容器中的图形化桌面:

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432025633-5d7546c3-0f06-4104-a17e-51d52f09ad41.png

虽然是隔离环境,但作为安全从业者,还是做了一些必要的加固措施:

  1. 内核更新:及时更新 LXC 容器的内核版本,修复已知安全漏洞
  2. 取消特权模式:禁用 LXC 特权容器,限制容器对宿主机的访问能力
  3. 网络隔离:配置防火墙规则,禁止容器访问内网敏感资源
  4. 资源限制:通过 cgroup 限制容器的 CPU、内存和磁盘使用

毕竟如果遭遇供应链攻击,隔离环境被突破,整个家庭网络都可能被偷家。

Runtime 环境搭建完成,第二个问题是模型选择。在我测试过的所有大模型中,Claude Opus 4.5 的能力是遥遥领先的——代码理解、复杂推理、上下文长度都碾压其他模型。

但问题在于,官方的 Claude API 价格实在太贵。如果让 Agent 7x24 小时运行,每月的 API 费用可能高达数百美元。对于个人开发者来说,这个成本难以承受。

这时候就要感谢大善人 Google 了。

Google 提供学生认证计划。通过学生邮箱认证后,就可以升级为 Gemini Pro 用户。Gemini Pro 用户可以使用 Google 推出的 Antigravity 代码编辑器(AI-powered IDE),而 Antigravity 不仅支持 Google 自家的 Gemini 模型,还集成了 Claude Opus 4.5Claude Sonnet 4.5

关键是,这个调用是免费的,没有硬性的 token 限制(有 rate limit 但足够个人使用)。

但 Antigravity 是一个 IDE,无法直接给 OpenCode 等 Agent 框架调用。这时候就要用到开源项目 Antigravity Manager 了。

这个项目的核心功能是把 Antigravity 的 Claude 接口反向代理出来,转换成标准的 OpenAI API 格式或 Anthropic API 格式,供其他应用调用。它还支持:

  • 多账号管理:轮流调用多个 Google 账号,分散 rate limit
  • 限流控制:避免触发 Google 的频率限制
  • 日志监控:记录每次 API 调用的详细信息
  • 模型映射:将 Antigravity 的模型名称映射为标准格式
  • 负载均衡:自动选择可用账号,实现高可用

下图展示了 Antigravity Manager 的管理界面,可以看到多个账号的调用情况:

https://cdn.nlark.com/yuque/0/2026/webp/1599908/1769432025702-d8dfe11b-3969-4440-9e78-979a2a2923a0.webp

它还提供 API 反代、流量日志等功能,可以学习官方的 Prompt 写法。

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432025790-8e28f521-0c50-4157-b9d7-4d4717783a91.png

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432025911-b0142fe4-7161-4df3-ba33-553709281fbd.png

Google 还有一个神仙功能:家庭组(Google Family)。一个主账号通过学生认证后,可以邀请最多 5 个其他账号加入家庭组。家庭组成员享有与主账号相同的 Gemini Pro 权限,可以同样免费使用 Antigravity。

这意味着,可以用 1 个学生账号 + 5 个普通账号,总共 6 个账号轮番调用 Claude Opus。配合 Antigravity Manager 的负载均衡功能,相当于 6 倍的 rate limit。

对比官方 API 动辄每月数百美元的费用,这套方案的成本为零。唯一的限制是 rate limit,但 6 个账号轮换已经足够个人使用,狠狠榨干最后一丝 token。

Runtime 和模型都准备好了,接下来要选择 Agent 框架。Claude Code 是 Anthropic 官方出品,稳定性和体验都很好。但它有两个限制:

  1. 模型绑定:只能使用 Claude 系列模型,无法灵活接入任意厂商
  2. 闭源设计:无法进行二次开发和定制

这时候 OpenCode 项目进入了视野。它可以看作是 Claude Code 的开源版,通过社区的力量增加了许多功能,在某些任务上体验甚至超过了官方版本。

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432025988-4aec6105-f03f-4721-b6ae-f2a5a9e72353.png

OpenCode 的核心优势在于开放性。它不仅支持 Claude、GPT、Gemini 等主流模型,还允许接入本地部署的开源模型。更重要的是,开源意味着可以进行深度定制——修改 prompt、调整工作流、添加自定义工具。

Github上作者也列出了OpenCode和Claude Code的对比:

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432026056-1ea11970-d692-4a97-9ced-38061ee3332a.png

OpenCode 最吸引人的地方是插件生态。社区开发了大量增强插件,其中最值得推荐的是 oh-my-opencode

这个插件提供了 ultrawork 模式,可以防止模型"偷懒"。常见的情况是:Agent 执行任务时遇到一次错误,尝试修复失败后就直接放弃了。

ultrawork 模式可以让模型无限制地尝试下去,直到任务成功或达到预设的最大轮次。启用 ultrawork 后,Agent 会更加"执着",不轻易放弃任务。这对于复杂的自动化场景非常有用。

还有一个关键问题:如何让 OpenCode 调用 Antigravity Manager 反代出来的 Claude 接口?我研究了一下,总共有三种方式:

方式 1:自定义 API 接口

OpenCode 支持添加自定义的 API provider。由于 Antigravity Manager 可以反代出标准的 OpenAI 格式接口,可以将其配置为一个自定义 provider。

方式 2:修改 baseURL

OpenCode 允许修改 Claude provider 的 baseURL,让它重定向到 Antigravity Manager 的反代地址。由于反代接口协议兼容 Anthropic API,这种方式可以无缝接入。

方式 3:使用 opencode-antigravity-auth 插件

最简单的方式是安装 opencode-antigravity-auth 插件。它可以直接把 Antigravity Manager 的模型加入到 OpenCode 的模型列表中,无需手动配置复杂的 baseURL 和 API key。

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432026174-263ba6cb-e014-40a1-b63b-dda92a811a74.png

这里贴一下完整配置,不想折腾的同学可以直接抄作业:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
{
  "$schema": "https://opencode.ai/config.json",
  "model": "anthropic/claude-opus-4-5",
  "provider": {
    "anthropic": {
      "options": {
        "baseURL": "http://192.168.1.100:8045/v1",
        "apiKey": "sk-antigravity-xxxxxxxx"
      }
    },
    "google": {
      "models": {
        "antigravity-gemini-3-pro": {
          "name": "Gemini 3 Pro (Antigravity)",
          "limit": {
            "context": 1048576,
            "output": 65535
          },
          "modalities": {
            "input": ["text", "image", "pdf"],
            "output": ["text"]
          },
          "variants": {
            "low": { "thinkingLevel": "low" },
            "high": { "thinkingLevel": "high" }
          }
        },
        "antigravity-gemini-3-flash": {
          "name": "Gemini 3 Flash (Antigravity)",
          "limit": {
            "context": 1048576,
            "output": 65536
          },
          "modalities": {
            "input": ["text", "image", "pdf"],
            "output": ["text"]
          },
          "variants": {
            "minimal": { "thinkingLevel": "minimal" },
            "low": { "thinkingLevel": "low" },
            "medium": { "thinkingLevel": "medium" },
            "high": { "thinkingLevel": "high" }
          }
        },
        "antigravity-claude-sonnet-4-5": {
          "name": "Claude Sonnet 4.5 (Antigravity)",
          "limit": {
            "context": 200000,
            "output": 64000
          },
          "modalities": {
            "input": ["text", "image", "pdf"],
            "output": ["text"]
          }
        },
        "antigravity-claude-sonnet-4-5-thinking": {
          "name": "Claude Sonnet 4.5 Thinking (Antigravity)",
          "limit": {
            "context": 200000,
            "output": 64000
          },
          "modalities": {
            "input": ["text", "image", "pdf"],
            "output": ["text"]
          },
          "variants": {
            "low": { "thinkingConfig": { "thinkingBudget": 8192 } },
            "max": { "thinkingConfig": { "thinkingBudget": 32768 } }
          }
        },
        "antigravity-claude-opus-4-5-thinking": {
          "name": "Claude Opus 4.5 Thinking (Antigravity)",
          "limit": {
            "context": 200000,
            "output": 64000
          },
          "modalities": {
            "input": ["text", "image", "pdf"],
            "output": ["text"]
          },
          "variants": {
            "low": { "thinkingConfig": { "thinkingBudget": 8192 } },
            "max": { "thinkingConfig": { "thinkingBudget": 32768 } }
          }
        },
        "gemini-2.5-flash": {
          "name": "Gemini 2.5 Flash (Gemini CLI)",
          "limit": {
            "context": 1048576,
            "output": 65536
          },
          "modalities": {
            "input": ["text", "image", "pdf"],
            "output": ["text"]
          }
        },
        "gemini-2.5-pro": {
          "name": "Gemini 2.5 Pro (Gemini CLI)",
          "limit": {
            "context": 1048576,
            "output": 65536
          },
          "modalities": {
            "input": ["text", "image", "pdf"],
            "output": ["text"]
          }
        },
        "gemini-3-flash-preview": {
          "name": "Gemini 3 Flash Preview (Gemini CLI)",
          "limit": {
            "context": 1048576,
            "output": 65536
          },
          "modalities": {
            "input": ["text", "image", "pdf"],
            "output": ["text"]
          }
        },
        "gemini-3-pro-preview": {
          "name": "Gemini 3 Pro Preview (Gemini CLI)",
          "limit": {
            "context": 1048576,
            "output": 65535
          },
          "modalities": {
            "input": ["text", "image", "pdf"],
            "output": ["text"]
          }
        }
      }
    },
    "local": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "本地API",
      "options": {
        "baseURL": "http://192.168.1.100:8045/v1",
        "apiKey": "sk-antigravity-xxxxxxxx"
      },
      "models": {
        "claude-opus-4-5-thinking": {
          "name": "Claude Opus 4.5 Thinking"
        },
        "gemini-3-pro-high": {
          "name": "Gemini 3 Pro High"
        }
      }
    }
  },
  "plugin": [
    "oh-my-opencode@latest",
    "opencode-antigravity-auth@latest"
  ]
}

OpenCode 不仅支持终端命令行,还支持 Web 界面。这样就不需要面对黑框框的命令行了,通过浏览器就能交互。

启动 Web 模式的命令如下:

1
opencode web --hostname 0.0.0.0 --port 4096

但 Web 模式有个明显的缺点:没有鉴权机制。任何知道 IP 和端口的人都能访问,存在安全风险。建议配合 VPN(如 ZeroTier)或反向代理(Nginx + Basic Auth)使用。

下图是 OpenCode Web 界面的主页:

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432026241-3cb49e59-043c-4f77-bb05-85207187ed6b.png

可以看到,界面风格类似 VSCode,左侧是文件树,右侧是对话区域,底部是终端输出。

环境配置完成后,用一个实际任务测试系统能力:在 Web 界面输入任务描述,要求 Agent 在当前系统中安装完整的桌面环境:

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432026336-21bf5bc9-97bc-4d5d-80b7-0fb4eaf45ea4.png

提交任务后,Agent 立即开始分析。它首先检查系统环境,然后制定执行计划:

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432026422-4b52ce20-1983-4504-b00d-792116d53ae4.png

从规划中可以看到完整的步骤:更新软件源、安装 XFCE4、配置启动脚本、开放端口。

Agent 依次执行每个步骤,遇到问题会自动调整策略。例如在安装过程中,某些软件包会弹出配置选项。Agent 使用了非交互模式(DEBIAN_FRONTEND=noninteractive),自动选择默认配置,确保安装流程顺利进行。

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432026488-be835b53-8090-4ac9-a325-268e8a40bd45.png

最后,Agent 输出了详细的访问说明。

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432026555-3396d1a3-b51a-46b1-8935-9ba7254b0e4e.png

有一个细节做得比较好:OpenCode 在任务执行完毕后会播放提示音(咔哒一声),非常适合长时间运行的任务。

测试过程中,OpenCode 也暴露出一些问题。

首先是稳定性问题。OpenCode 目前还在快速迭代,每天发布多个版本。插件有时会报错,上次还能正常运行,下次再执行就会出现兼容性问题。看了一下代码,很多都是 AI 生成的,质量参差不齐。

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432026622-9473a8ca-1157-42d7-aee9-463ebc639ffb.png

这张图展示了插件加载失败的错误信息。尝试重新安装插件,但问题依然存在,后来某次更新莫名其妙就解决了。

第二个问题是 Web 界面的文本无法复制。点击复制按钮没有反应,也无法通过快捷键复制内容。

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432026684-5dac3011-1019-4f7d-9f79-5d352543d2fd.png

第三个问题是某天启动突然报错,搜了一下发现是最近版本的不兼容更新导致的。这个问题在官方 issue 中已经有人反馈,但还没有修复。

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432026752-74ae28b2-9d0f-4087-b62c-da4149241491.png

总体来说,OpenCode 还处于早期阶段,bug 确实比较多。如果只是本地试验还可以接受,但如果要在生产环境中使用,需要谨慎评估稳定性。

为了避免频繁的权限确认,OpenCode 支持在项目级别配置权限策略。在项目根目录创建 opencode.json 文件,添加以下配置:

1
2
3
4
{
  "$schema": "https://opencode.ai/config.json",
  "permission": "allow"
}

这样 Agent 在该项目中执行的所有操作都会自动通过,无需人工确认。由于已经在隔离的 LXC 容器中运行,这个配置是安全的。

环境搭建完成后,还需要解决远程访问的问题。测试了两种方案。

第一种方案是使用 ZeroTier 虚拟局域网 + OpenCode Web 界面。

实现方式

  1. 在 LXC 容器和手机上安装 ZeroTier
  2. 加入同一个虚拟网络
  3. 通过手机浏览器访问容器的 4096 端口

优点

  • 配置简单,无需公网 IP
  • 通过加密的虚拟网络访问,相对安全
  • 支持跨平台(iOS、Android、PC)

缺点

  • 不能离开浏览器会话,一旦关闭页面连接就会断开
  • OpenCode Web 端 bug 较多,移动端体验不佳
  • 无法后台运行任务

下面是手机上通过 Chrome 访问 OpenCode Web 的截图:

https://cdn.nlark.com/yuque/0/2026/webp/1599908/1769432026811-dc412473-8441-4d69-a4f1-771767e7cd2a.webp

可以看到移动端的界面比较拥挤,操作不够流畅。

https://cdn.nlark.com/yuque/0/2026/webp/1599908/1769432026876-f2743a21-7d52-41ad-8e98-b5106bc75499.webp

最大的问题是无法后台运行。一旦切换到其他应用,浏览器会话就会被中断,Agent 的任务执行也会暂停。

经过一番搜索,发现了一个完美适配需求的项目:Happy Coderhttps://github.com/slopus/happy)。

项目介绍

Happy Coder 是一个专门为 Claude Code 设计的移动端客户端。它支持在手机上提交任务、查看执行进度、接收完成通知,真正实现了"提交任务后就去睡大觉"的体验。

核心功能

  1. 后台执行:任务提交后在服务器端持续运行,手机可以关闭应用
  2. 通知机制:需要确认时推送通知,任务完成时推送结果
  3. 移动优化:专门为触屏设计的交互界面,体验远超浏览器

适用场景

  • 外出时远程提交任务
  • 睡前启动长时间运行的任务
  • 需要随时查看 Agent 执行进度

虽然目前还不支持 OpenCode(社区已经有人提 PR,而且这个 PR 本身就是用 OpenCode 生成的代码)

https://cdn.nlark.com/yuque/0/2026/png/1599908/1769432026939-e967d721-2727-41db-8396-dc7a0fae600b.png

扫描二维码连接后,任务列表界面可以看到所有提交的任务和执行状态。

https://cdn.nlark.com/yuque/0/2026/webp/1599908/1769432027005-acab52b8-b9bc-4f00-a17c-4a350aa86b46.webp

在手机上提交任务后,Agent 会在服务器端自动执行。遇到需要确认的步骤时,Happy Coder 会推送通知到手机。既然已经在沙箱环境里运行,完全可以把所有权限放开,提交完就睡大觉,第二天早上醒来任务已经完成。

https://cdn.nlark.com/yuque/0/2026/webp/1599908/1769432027083-636c3eb4-65a4-40b1-975f-082d775fbe71.webp

经过这次改造,成功打造了一个可以 7x24 小时运行的 AI 助手:它运行在隔离的 LXC 容器中,调用白嫖的 Claude Opus 模型,通过 Happy Coder 实现移动端控制。

现在我们可以在任何时候、任何地点提交任务,让这个硅基牛马在后台默默干活。

此外,最近体验了很多AI产品,一个感觉越来越强烈:我们碳基生物的进化已经到头了,之后将是硅基文明的时代。

碳基生物受限于构造设计,信息交换效率远低于硅基智能。在公司里,完成一个项目,人类的沟通时间往往大于开发本身的时间。跨部门协作需要拉会、对齐目标、反复确认需求,这些过程消耗了大量时间和精力。

而两个 AI Agent 可以在几毫秒内完成信息同步,没有理解偏差、没有情绪内耗、没有利益博弈。

代替人类去探索宇宙、走出太阳系、走出银河系的,可能不是碳基生物,而是硅基智能。就像马斯克所说的那样:碳基生物的智慧是硅基生物的引导程序(bootloader)

我们这一代人赶上了一个绝无仅有的时代——碳基与硅基交接的时代。我们既是创造者,也是见证者。

珍惜现在的生活吧,留给人类的时间,真的不太多了。