xiaohack's Blog - OpenCode
type: channel
link: https://blog.xiaohack.org/tag/opencode/
items: 更懂你，更安全！枫清科技（Fabarta）首发中国版OpenClaw“龙虾”, 重新定义本地AI生产力
items: 大伙在没有 ai 的时候都是怎么分析开源项目的源代码
items: 说出一个让你非用 Antigravity 不可的理由
items: 用 opencode 全程 vibe coding 了一个文字 RPG 游戏
items: Antigravity 账户接入 Opencode支持(包含详细配置和Oh My OpenCode 配置支持)
items: 分享一个编程 AI 实测项目 — You
items: opencode 尽量不要更新，web 端使用当前最新版本存在严重 bug
items: opencode + oh-my-opencode 配置教程
items: 让 OpenCode 里的 GPT5.2 自己翻译自己

更懂你，更安全！枫清科技（Fabarta）首发中国版OpenClaw“龙虾”, 重新定义本地AI生产力
type: item
date: 2026-01-31T12:54:45+08:00
description: 2026年开年又迎来AI领域“ChatGPT时刻”，GitHub爆火的开源AI助手OpenClaw(原名Clawdbot、Moltbot)上线后在全球迅速走红。用户无需打开各类网站或应用，直接通过通讯软件发送消息即可下达指令、执行任务。不少海外用户已在苹果Mac mini上实现OpenClaw本地部署。 当OpenClaw这类“全职AI员工”加速出圈，中国也不乏能打的智能体产品。枫清科技（Fabarta）近期将推出搭载Fabarta个人专属智能体的基于苹果Mac mini 预装版，主打“开箱即用、本地安全、数据永不离开设备”的超性价比解决方案。该方案依托Apple Silicon（M4）平台的高能效算力，并联合国际头部产业伙伴推进落地交付，让本地AI从“能跑”走向“好用、可管、可规模化部署”。 该产品基于苹果M4芯片平台，深度融合本地执行能力，可直接操作文件、浏览器及终端命令，实现文件系统管理、浏览器操作、代码生成、数据抓取等复杂任务，全面覆盖企业办公、开发运维及科研场景需求。 枫清科技（Fabarta）此举旨在推动本地AI普及，为注重数据安全与效率的企业提供新一代生产力工具。 Fabarta个人专属智能体基于苹果Mac mini预装版可支持个性化工作流推荐与多轮对话记忆，主动适配用户习惯，并兼容OpenCode技能生态，可调用本地工具链实现自动化，将提供更“懂你”的智能体验——更关键的是，Fabarta 的“个人记忆库”默认在本地持续沉淀：你的常用流程、偏好、术语、项目背景与常用文件路径会在设备端逐步形成可控的长期记忆，越用越贴合，但不必上云。该产品的所有数据本地操作设置白名单功能，具备更安全的数据保障；同时，其整合Mac mini M4芯片与Fabarta智能体平台，并预置垂直行业技能包，降低技术门槛，软硬一体打造高性价比的生产力支持。在合作层面，国际稳定可靠的终端算力与生态底座、国内全渠道与交付能力，枫清科技提供Fabarta 智能体平台与行业技能包，各方共同推动本地AI在真实业务中可复制、可交付、可规模化落地。

大伙在没有 ai 的时候都是怎么分析开源项目的源代码
type: item
date: 2026-01-26T22:19:29+08:00
description: 现在有了 ai 我遇到不懂的方法直接让 ai 分析输入输出和调用关系直接就出来了 例如:opencode 的源代码用户发送消息 ↓ ┌─────────────────────────────────────────────────────────────┐ │ Server (routes/session.ts:733) │ │ SessionPrompt.prompt({ ...body, sessionID }) │ └─────────────────────┬───────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ SessionPrompt.prompt (prompt.ts:151) │ │ 1. 创建用户消息 │ │ 2. 调用 loop(sessionID) │ └─────────────────────┬───────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ SessionPrompt.loop (prompt.ts:258) │ │ while (true) { │ │ 1. 获取 Agent 配置: Agent.get(lastUser.agent) │ │ 2. 解析工具: resolveTools({ agent, session, ... }) │ │ 3. 创建处理器: SessionProcessor.create(...) │ │ 4. 调用处理器: processor.process({ user, agent, ... }) │ │ } │ └─────────────────────┬───────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ SessionProcessor.process (processor.ts:45) │ │ while (true) { │ │ 1. 调用 LLM: LLM.stream(streamInput) │ │ 2. 处理流式响应: │ │ - reasoning-delta → 更新推理部分 │ │ - text-delta → 更新文本部分 │ │ - tool-call → 执行工具 │ │ 3. 工具执行完成后继续循环 │ │ } │ └─────────────────────┬───────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────────┐ │ LLM.stream (llm.ts) │ │ 1. 构建系统提示词 │ │ 2. 调用 AI SDK: streamText({ model, messages, tools }) │ │ 3. 返回流式响应 │ └─────────────────────────────────────────────────────────────┘ TUI ↔ Server 通信机制架构图┌─────────────────────────────────────────────────────────────┐ │ 主线程 (thread.ts) │ │ - 运行 TUI 界面 │ │ - 创建 RPC 客户端 │ └─────────────────────┬───────────────────────────────────────┘ │ RPC 通信 ▼ ┌─────────────────────────────────────────────────────────────┐ │ Worker 线程 (worker.ts) │ │ - 运行 Server.App() │ │ - 处理 fetch 请求 │ │ - 转发事件 │ └─────────────────────────────────────────────────────────────┘ Worker 启动流程用户运行 `opencode` ↓ index.ts 解析命令 → TuiThreadCommand ($0 默认命令) ↓ thread.ts handler 执行： ↓ 第 79-85 行：确定 …

说出一个让你非用 Antigravity 不可的理由
type: item
date: 2026-01-26T19:40:59+08:00
description: 最近一直在玩 vibe coding ，主力工具是 OpenCode 和 Gemini CLI，用着其实挺顺手，基本需求都能 cover 。 但用久了，发现这哥俩也是各有特点： OpenCode 是我的“远程工作站”。最大的爽点就是部署灵活，很方便远程访问，而且能自由“换脑”——我现在主力搭配的是 MiniMax 2.1 / Code Plan - Plus ，响应快得飞起，额度还根本用不完……所以一些轻量级或者需要快速验证想法的项目，我都会丢给它。其他模型还没怎么试，感觉这个组合已经够香了 Gemini CLI 则是我的“精准武器”。特别是处理 Rust 项目的时候，Gemini 3 Pro 的表现明显比 MiniMax 更稳、更准，那种“懂我”的感觉很到位。但痛点也很明显：额度太不经用了，虽然用用给我切到 Flash 模型，被打断的感觉很不尽兴.. 明明就快出来了... 所以，问题来了。我看 Antigravity 的使用要突破层层障碍，它有什么独特的绝活让你无法割舍的?

用 opencode 全程 vibe coding 了一个文字 RPG 游戏
type: item
date: 2026-01-26T02:27:41+08:00
description: 在线地址： https://johnsmith2078.github.io/webjrpg/完成度比我想象地高很多，第一次直出的版本就完全能跑了，不过后续稍微迭代了一下，加了一些传统 RPG 的特性，omo 也确实是 token 消耗器，几下把我 codex 的周额度就花完了，目前流程还很短，只有十来分钟的样子，不过毕竟只是一个实验性的项目。

Antigravity 账户接入 Opencode支持(包含详细配置和Oh My OpenCode 配置支持)
type: item
date: 2026-01-25T23:17:12+08:00
description: 最近对 CRS 自己二开的项目优化和重构拉一下，并且添加拉 Opencode支持 包含Oh My OpenCode 插件支持，想看配置的直接划到下面或者直接访问 ：https://github.com/dadongwo/claude-relay-service最近优化亮点:OpenCode & Oh My OpenCode 原生支持：:完美兼容 Antigravity 账户体系下的 OpenCode 配置智能风控对齐：自动注入 requestType: 'agent' 并优化 System Prompt 插入策略，降低被上游风控拦截的概率。智能重试与切换账号：针对 Antigravity 429 Resource Exhausted 深度解析（区分 Quota/RateLimit/Capacity），自动清理会话并切换账号重试。模型级智能冷却：支持对 Claude/Opus/Flash 等不同模型分别计算冷却时间，避免因单一模型限流影响整个账号使用。UI页面展示:Note: 若某个模型触发了限流，此处还会显示该模型的 冷却倒计时 (Cooling Down)，方便您了解何时可以恢复使用。– 小更新 针对Antigravity 账户的gemin 模型兼容和工具调用对齐 解决 最新429 问题 mcp工具调用兼容等等需要的可自取:https://github.com/dadongwo/claude-relay-service/blob/main/README.mdOpenCode 集成配置在用户目录下的 .config\opencode\opencode.json 文件中配置 provider：// antigravity 配置示例 "antigravity": { "npm": "@ai-sdk/anthropic", "name": "Antigravity", "options": { "baseURL": "http://localhost:3000/antigravity/api/v1", "apiKey": "cr_XXXXXXXXX" }, "models": { "claude-opus-4-5-thinking": { "name": "Claude Opus 4.5 Thinking", "thinking": true, "limit": { "context": 200000, "output": 8192 }, "modalities": { "input": ["text", "image"], "output": ["text"] } }, "claude-sonnet-4-5-thinking": { "name": "Claude Sonnet 4.5 Thinking", "thinking": true, "limit": { "context": 200000, "output": 8192 }, "modalities": { "input": ["text", "image"], "output": ["text"] } }, "gemini-3-flash-preview": { "name": "Gemini 3 Flash Preview", "attachment": true, "limit": { "context": 1000000, "output": 8192 }, "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] } }, "gemini-3-pro-preview": { "name": "Gemini 3 Pro Preview", "thinking": true, "attachment": true, "limit": { "context": 1000000, "output": 8192 }, "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] } } } }, // codex cli 接入账户示例 "openai-custom": { "npm": "@ai-sdk/openai", "name": "OpenAI Custom", "options": { "baseURL": "http://localhost:3200/openai", "apiKey": "cr_xxxxxxxxxxxxxxxx" }, "models": { "gpt-5.2": { "name": "GPT 5.2 (Custom)", "limit": { "context": 272000, …

Antigravity 账户接入 Opencode支持(包含详细配置和Oh My OpenCode 配置支持)
type: item
date: 2026-01-25T23:15:37+08:00
description: 最近对 CRS 自己二开的项目优化和重构拉一下，并且添加拉 Opencode支持 包含Oh My OpenCode 插件支持，想看配置的直接划到下面或者直接访问 ：https://github.com/dadongwo/claude-relay-service最近优化亮点:OpenCode & Oh My OpenCode 原生支持：:完美兼容 Antigravity 账户体系下的 OpenCode 配置智能风控对齐：自动注入 requestType: 'agent' 并优化 System Prompt 插入策略，降低被上游风控拦截的概率。智能重试与切换账号：针对 Antigravity 429 Resource Exhausted 深度解析（区分 Quota/RateLimit/Capacity），自动清理会话并切换账号重试。模型级智能冷却：支持对 Claude/Opus/Flash 等不同模型分别计算冷却时间，避免因单一模型限流影响整个账号使用。UI页面展示:Note: 若某个模型触发了限流，此处还会显示该模型的 冷却倒计时 (Cooling Down)，方便您了解何时可以恢复使用。– 小更新 针对Antigravity 账户的gemin 模型兼容和工具调用对齐 解决 最新429 问题 mcp工具调用兼容等等需要的可自取:https://github.com/dadongwo/claude-relay-service/blob/main/README.mdOpenCode 集成配置在用户目录下的 .config\opencode\opencode.json 文件中配置 provider：// antigravity 配置示例 "antigravity": { "npm": "@ai-sdk/anthropic", "name": "Antigravity", "options": { "baseURL": "http://localhost:3000/antigravity/api/v1", "apiKey": "cr_XXXXXXXXX" }, "models": { "claude-opus-4-5-thinking": { "name": "Claude Opus 4.5 Thinking", "thinking": true, "limit": { "context": 200000, "output": 8192 }, "modalities": { "input": ["text", "image"], "output": ["text"] } }, "claude-sonnet-4-5-thinking": { "name": "Claude Sonnet 4.5 Thinking", "thinking": true, "limit": { "context": 200000, "output": 8192 }, "modalities": { "input": ["text", "image"], "output": ["text"] } }, "gemini-3-flash-preview": { "name": "Gemini 3 Flash Preview", "attachment": true, "limit": { "context": 1000000, "output": 8192 }, "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] } }, "gemini-3-pro-preview": { "name": "Gemini 3 Pro Preview", "thinking": true, "attachment": true, "limit": { "context": 1000000, "output": 8192 }, "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] } } } }, // codex cli 接入账户示例 "openai-custom": { "npm": "@ai-sdk/openai", "name": "OpenAI Custom", "options": { "baseURL": "http://localhost:3200/openai", "apiKey": "cr_xxxxxxxxxxxxxxxx" }, "models": { "gpt-5.2": { "name": "GPT 5.2 (Custom)", "limit": { "context": 272000, …

分享一个编程 AI 实测项目 — You
type: item
date: 2026-01-25T08:05:30+08:00
description: 我和同事们目前正在利用 OpenCode（Claude Code 的一个替代方案）进行一项小研究。目前我们刚开始测试 gpt-5-mini，看看它在编程辅助方面的性能能否与 Claude Sonnet 媲美。也非常欢迎大家亲自尝试研究并分享心得，比如哪种 LLM 模型成功率最高，以及使用了什么样的 Prompt（提示词）。注：我是来自印尼的用户，正在使用 Google Gemini 协助翻译论坛里的讨论。如果翻译有不准确的地方，还请大家多多包涵，手下留情。 github.com GitHub - galpt/you: An autonomous AI agent orchestrator that...An autonomous AI agent orchestrator that coordinates an entire software company within OpenCode 📌 转载信息来源： https://linux.do/t/topic/1510629原作者： galpt转载时间： 2026/1/25 08:06:35

opencode 尽量不要更新，web 端使用当前最新版本存在严重 bug
type: item
date: 2026-01-23T19:24:37+08:00
description: 受到影响的版本为 1.1.33 和 1.1.34如果为桌面版，1.1.34 解决了一些问题，但 web 端并未解决今天一觉醒来，mac 端和 Linux 端的 Opencode 都报错了我是通过 Opencode web 的方式，在浏览器里使用的这样我可以在我的 Windows 上同时操控多个 opencode 的多个 session(ps: 在这个页面里尽管更新到了 1.1.34 依旧会显示版本为 1.1.33)OpenCode Desktop v1.1.33 版本界面显示空白问题 Github Issue #10136很显然，我在 issue 里找到了很多受到该 bug 影响的人们，证明我并不是一个人如果使用 web 端来使用 Opencode 的话，似乎只能回退到 1.1.32 或更早来解决目前的话最新的 1.1.34 版本并未解决该问题，或许要等待下一个版本额外的，TUI 是正常的，所以如果在使用 TUI 的话不必担心另外，感觉 web 端使用起来比 TUI 要好呢，安利一下:p📌 转载信息来源： https://linux.do/t/topic/1505630原作者： ufhy转载时间： 2026/1/23 19:24:35

opencode + oh-my-opencode 配置教程
type: item
date: 2026-01-23T15:36:09+08:00
description: 花了两三天时间，查了大量资料，终于把 oh-my-opencode 配置明白了。注意： 以下所有配置均已进行脱敏处理（隐藏了具体的 session_id、本机用户路径、工作区路径以及真实的 provider 地址）。无广 我自用的 provider 未完全脱敏，感觉脱敏看起来好奇怪，model key 我懒得处理。 个人不推荐任何 providerAgents 与 Categories 自述AI 生成出来的，各类代理（Agents）和分类（Categories）的职责：{ "agents": { "build": { "agent": "build", "model": "未知", "suitable_for": [ "代码实现与重构", "Bug 定位与修复", "单元测试与测试策略", "构建与CI排障", "项目结构与可维护性优化" ], "core_principles": [ "先澄清需求与边界", "最小改动达成目标", "保持一致性与可读性", "优先可靠性与可测试性", "避免过度设计（YAGNI）", "减少重复（DRY）", "遵循SOLID与KISS" ] }, "plan": { "agent": "plan", "model": "未知", "suitable_for": [ "需求澄清与范围界定", "技术方案设计与权衡", "任务拆解与里程碑规划", "风险识别与应对预案", "验收标准与测试策略制定" ], "core_principles": [ "先理解问题再提出方案", "以最小可行改动达成目标", "优先降低风险与不确定性", "明确假设、边界与验收标准", "可执行、可验证、可回滚", "沟通简洁且信息密度高" ] }, "general": { "agent": "general", "model": "未知", "suitable_for": [ "通用问答与信息整理", "编程概念解释与示例", "需求澄清与方案对比", "写作润色与结构化输出", "基础调试思路与排错建议" ], "core_principles": [ "遵循指令优先级：系统 > 开发者 > 用户", "不编造事实；不确定时明确说明", "输出清晰、简洁、可执行", "在安全与隐私上保持保守", "按受众调整表达与细节深度", "优先给出可验证的步骤与依据" ] }, "explore": { "agent": "explore", "model": "未知", "suitable_for": [ "探索代码库模式", "分析文件结构", "使用AST-grep搜索", "并行执行搜索任务", "识别代码模式", "构建代码索引" ], "core_principles": [ "最大化搜索努力", "并行启动多个代理", "不限于第一个结果", "彻底且详尽", "使用多种工具", "忽略无关上下文", "专注于内置角色" ] }, "librarian": { "agent": "librarian", "model": "Antigravity", "suitable_for": [ "开源代码库深度解析", "第三方库 API 使用咨询", "代码实现逻辑溯源", "库的版本差异与历史变更分析", "获取 GitHub 源码实证与 Permalinks" ], "core_principles": [ "证据优先：所有技术主张必须附带 GitHub 永久链接证据", "时效感知：严格区分过时信息，优先检索 2025+ 最新数据", "深度溯源：通过克隆仓库、分析提交历史和代码逻辑提供答案", "多维调研：结合官方文档、源码搜索与 Issue/PR 背景", "引用规范：严格执行强制性代码片段与路径引用格式", "分类执行：针对概念、实现、上下文采用定制化搜索策略" ] }, "oracle": { "agent": "oracle", "model": "未知", "suitable_for": [ "系统架构与技术选型评审", "复杂问题根因分析与排障策略", "重构路线规划与风险控制", "代码库结构解读与一致性治理", "性能与可靠性权衡建议" ], "core_principles": [ "KISS：优先最简单可行方案", "YAGNI：只做当前明确需求", "复用优先：尽量沿用现有模式与依赖", "可维护性优先：降低认知负担", "单一路径：给出一个主推荐方案", "投入可见：明确工作量与边界条件", "止于足够好：避免过度优化与过度设计" ] }, "multimodal-looker": { "agent": "multimodal-looker", "model": "未知", "s…

让 OpenCode 里的 GPT5.2 自己翻译自己
type: item
date: 2026-01-23T15:34:53+08:00
description: 前几天看到: 让 GPT5.2 在 OpenCode 里说人话思路，我进行了尝试，他使用了 gemini-3-flash 对 GPT5.2 的思考块进行翻译，我用过之后，经常翻译超时，于是想到，能不能让 GPT5.2 自己翻译自己，基于这位佬友的代码进行了二开，效果嘎嘎好。效果如图：安装：1、复制本帖最下方代码，保存为 think-translator.ts（文件名随意）2、打开 think-translator.ts3、把 GPT5.2 的中转 API 信息写到 6~8 行（加了注释了，一眼就能看到）4、把 think-translator.ts 放到 C:\Users\xxxx (你的名字).config\opencode\plugin 里，opencode 会自动加载5、完事，开蹬import type { Plugin } from "@opencode-ai/plugin"; import type { Message, Part } from "@opencode-ai/sdk"; declare function require(id: string): unknown; // OpenAI 兼容接口（可用 /v1、/v1/chat/completions 或 /v1/responses 作为 baseURL） const TRANSLATION_BASE_URL = "https://www.right.codes/codex/v1";// 填你的订阅 地址（示例是right code） const TRANSLATION_API_KEY = ""; // 填你的订阅 Key const TRANSLATION_MODEL_ID = "gpt-5.2"; // 可选：gpt-5.2 | gpt-5.2-low | gpt-5.2-medium type PartEvent = Part & { time?: { end?: unknown; }; text?: string; }; type PatchResult = { response?: { status?: number; }; }; type ProviderConfig = { baseURL: string; apiKey: string; modelID: string; }; const START_TAG = "[〔翻译开始〕]"; const END_TAG = "[〔翻译结束〕]"; const TITLE_TRANSLATION_PREFIX = "〔译: "; const TITLE_TRANSLATION_SUFFIX = "〕"; function stripTranslationBlocks(text: string): string { while (true) { const start = text.indexOf(START_TAG); if (start === -1) return text; const end = text.indexOf(END_TAG, start + START_TAG.length); if (end === -1) return text.slice(0, start).trimEnd(); const after = end + END_TAG.length; let restStart = after; while (restStart < text.length && text[restStart] === "\n") restStart += 1; const left = text.slice(0, start).trimEnd(); const right = text.slice(restStart); text = left ? left + "\n\n" + right : right; } } function stripTitleTranslation(title: string): string { const start = title.indexOf(TITLE_TRANSLATION_PREFIX); if (start === -1) return title.trim(); const end = title.indexOf(TITLE_TRANSLATION_SUFFIX, start + TITLE_TRANSLATION_PREFIX.length); if (end === -1) return title.slice(0, start).trim(); return (title.slice(0, start) + title.slice(e…