手搓龙虾 (3): 将微信连接到 CLI 原生内核

继我们之前讨论过的 RoleEngine 核心 之后,是时候填补原生 CLI “大脑”与现实世界通信平台——微信之间的鸿沟了。 在 VisAgent 中,我们不迷信臃肿的重量级框架。相反,我们采用 CLI 原生桥接 (CLI-Native Bridge) 模式。本文将探讨我们如何将 “Clawbot”(我们的微信接口)连接到手搓的 Gemini CLI 内核。 请求流:从聊天到 CLI 该架构是一系列专用工具组成的链条,每个工具只做一件事并做到极致。以下是消息如何从手机传递到 AI 的过程: sequenceDiagram participant User as 📱 微信用户 participant Daemon as ⚙️ WeClaw (Go) participant Bridge as 🌉 visagent_invoke.py participant Engine as 🧠 RoleEngine (Python) participant CLI as 🐚 Gemini CLI (Binary) User->>Daemon: 发送消息 Daemon->>Bridge: 生成进程 (JSON) Bridge->>Engine: 初始化角色 Engine->>CLI: subprocess.run(stdin=prompt) CLI-->>Engine: 原始 AI 输出 Engine->>Engine: 过滤 Agent 噪音 Engine-->>Bridge: OK + 清净输出 Bridge-->>Daemon: JSON 事件 Daemon-->>User: 回复微信 1. 桥梁:visagent_invoke.py 由于我们的微信守护进程 (WeClaw) 是用 Go 编写的,而我们的 Agent 逻辑是用 Python 编写的,我们需要一个轻量化、高性能的桥梁。我们没有采用复杂的 RPC 系统,而是使用了 CLI 桥接。 ...

March 24, 2026 · 2 min · Square Uncle

手搓龙虾系列 (1):基于 CLI 的 RoleEngine 核心架构

[!TIP] 目标:不依赖框架,通过封装 CLI (如 gemini CLI) 构建具备状态管理与隔离能力的 Agent 引擎。 1. 为什么选择 CLI 而非框架? VISAGENT 的核心设计哲学是 CLI-Native。相比于黑盒框架,直接封装 CLI (如 gemini CLI) 具有更高的可控性和透明度: 原子性:单次调用即单次推演。 状态透明:Session 的恢复与挂起完全由路径和 Resume 标志控制。 环境隔离:利用系统级工具即可实现权限沙箱。 2. 底层封装:RoleEngineBase 核心逻辑通过 subprocess 触发。为了处理长 Prompt 导致的 Shell 参数溢出,我们坚持使用 stdin 传输: def _do_raw_invoke(self, message: str, context: str = "", files: List[str] = None) -> dict: cmd = [AI_BIN, "--resume", "latest"] if self._get_turns() > 0 else [AI_BIN] # 应对超长 Prompt 使用 stdin use_stdin = len(message + context) > 2000 if use_stdin: cmd += ["-p", "-"] result = subprocess.run( cmd, input=f"{message}\n\n{context}" if use_stdin else None, capture_output=True, text=True, encoding='utf-8' ) if result.returncode == 0: self._inc_turns() return {"ok": True, "output": result.stdout} 3. 隔离与会话管理 凭证沙箱 (Symlink) 为了实现多角色、多项目并发而不产生凭证污染,我们利用 软链接 (Symlink) 动态注入 .gemini 配置: ...

March 20, 2026 · 2 min · Square Uncle