项目快照:anomalyco/opencode,约 196,987 个 Star,25,329 个 Fork;最新推送时间 2026-08-13T15:46:18Z。本文基于仓库公开资料撰写。

项目地址:https://github.com/anomalyco/opencode · https://opencode.ai

opencode 从代码、运行环境到实践流程的项目封面
opencode 的项目能力与实践流程示意。

项目速览(TL;DR)

opencode 是 anomalyco 维护的开源人工智能编程代理(AI coding agent),主要以 TypeScript 开发,仓库许可证为 MIT,默认分支为 dev。项目资料显示,仓库拥有 196987 个 Star 和 25329 个 Fork;这些数字属于题目提供的 GitHub 元信息快照,未附带统计时间,不能据此推断当前实时数量。

仓库同时包含命令行开发入口、桌面应用、Web 应用、控制台、软件开发工具包(SDK)、插件与统计相关工作区。README 明确提供了多种安装渠道,并列出 buildplangeneral 三类内置 Agent 能力;具体模型、身份认证、服务端口、生产部署参数和接口签名,官方仓库资料未完整提供,建议以最新 README 和官方文档为准。

“The open source AI coding agent.”
来源:README
项目属性 资料中的值 说明
仓库 anomalyco/opencode GitHub 开源仓库
主要语言 TypeScript GitHub 元信息提供
许可证 MIT 以仓库 LICENSE 文件为准
默认分支 dev 题目提供的仓库元信息
Star 196987 题目提供的统计快照
Fork 25329 题目提供的统计快照

定位与目标用户

OpenCode 的定位是面向软件开发任务的开源 Agent,而不是仅提供代码补全的编辑器插件。根据 README,用户可以在开发模式与只读规划模式之间切换,并让 Agent 参与代码分析、探索、文件修改以及命令执行相关流程。

它的目标使用场景是“在代码库中完成工作”:用户通过交互式界面提出任务,Agent 根据所处模式处理代码库,并在需要时使用相关工具。资料没有给出模型供应商、上下文窗口、任务成功率、并发限制或企业级服务等级协议(SLA),这些内容不应从项目名称或 Star 数量推断。

面向开发任务的交互边界

build 是默认 Agent,具有完整访问权限,README 将其定位为开发工作模式。plan 是只读 Agent,默认拒绝文件编辑,并在执行 Bash 命令前请求许可,因此更适合先理解陌生代码库,再形成修改计划。

general 是用于复杂搜索和多步骤任务的子 Agent。README 说明它会被内部使用,也可以在消息中通过 @general 调用;资料没有公开其具体工具集合、上下文传递协议或调度策略。

核心功能

项目的核心价值集中在 Agent 模式切换、代码库探索和开发任务执行三个层面。每项能力都由权限模式、用户输入和项目工作区共同决定,不能把它简单理解为静态的代码生成命令。

开发模式:build

build 是默认模式,输入通常是用户在交互界面中描述的开发任务,输出则是 Agent 对代码库执行分析、提出或实施修改的过程结果。README 只明确写出它具有完整访问权限,并未给出每一种可用工具的完整清单。

触发方式是进入 OpenCode 后使用 Agent 交互界面,或通过 Tab 键从其他内置 Agent 切换到 build。实际行为还会受到项目配置、运行环境和所接入模型的影响;相关配置字段和模型参数,官方仓库资料未提供完整说明。

规划模式:plan

plan 面向分析与代码探索,输入可以是对陌生代码库的理解请求或变更规划请求。它默认拒绝文件编辑,并在运行 Bash 命令前询问权限,因此输出重点是分析结果和执行计划,而不是直接完成文件修改。

该模式适合把“了解现状”和“实施变更”拆开:先用只读模式观察,再由用户决定是否切换到开发模式。README 没有承诺它能阻止所有外部副作用,也没有给出权限审批的配置接口;在受控环境中仍应使用操作系统权限和隔离目录限制风险。

复杂搜索:general

general 子 Agent 用于复杂搜索和多步骤任务。用户可以在消息中使用 @general 调用它,或者由 OpenCode 在内部流程中使用它。

从资料能够确认的输入触发方式只有消息中的 @general,不能进一步确认它是否支持独立模型、并发执行、持久化记忆或自定义工具。需要这些能力时,应查阅官方 Agent 文档,而不是依据名称扩展功能边界。

系统架构与关键模块

从根目录 package.json 可以确认,OpenCode 采用 Bun 工作区和 Turbo 任务编排,多个包共同组成命令行、桌面、Web、控制台、SDK、插件及统计应用。资料只提供工作区声明和脚本,未提供完整架构图,因此下述模块关系仅描述可由仓库配置直接核查的内容。

工作区组织

根配置的 workspaces.packages 包含 packages/*packages/console/*packages/stats/*packages/sdk/jspackages/slack。这表明仓库采用多包工作区,而不是把全部代码放在单一目录中。

根依赖还声明了 @opencode-ai/plugin@opencode-ai/script@opencode-ai/sdk 的工作区依赖。它们的详细 API、版本发布关系和跨包调用方式没有出现在所给资料中,不能据此编写未核实的 SDK 示例。

可确认的应用入口

根脚本提供了多个开发入口:dev 指向 packages/opencode 下的 src/index.tsdev:desktop 指向 packages/desktopdev:web 指向 packages/appdev:console 指向 packages/console/appdev:stats 指向 packages/stats/app

这些脚本足以确认仓库存在不同运行目标,但不能确认每个目标的网络协议、端口、数据库连接方式或部署拓扑。资料没有给出 Docker 镜像、Compose 文件、云资源清单和生产启动命令,因此不应补写容器化部署方案。

技术栈线索

根配置使用 TypeScript 模块类型,并将 Bun 声明为包管理器,版本为 bun@1.3.14。依赖中可以核查到 Hono、Effect、Drizzle ORM、Solid、Vite、Playwright、Shiki、Zod、OpenTelemetry 相关包以及若干 AI SDK 包,但依赖存在不等于每个包都直接暴露为用户功能。

根据 package.json,类型检查通过 Turbo 执行,代码检查使用 Oxlint,前端相关工作区使用 Solid、Vite 和 Tailwind CSS。根目录的 test 脚本明确输出“do not run tests from root”并退出失败,测试应在对应工作区查找;所给资料没有提供各工作区测试命令。

依赖与运行环境

官方配置明确把 Bun 作为仓库包管理器,因此从源码参与开发时应优先围绕 Bun 工作流准备环境。面向普通用户,README 同时提供 npm、Bun、pnpm、Yarn、Homebrew、Scoop、Chocolatey、Pacman、AUR、mise 和 Nix 等安装渠道。

桌面应用处于 BETA 状态,README 列出 macOS Apple Silicon、macOS Intel、Windows x64 和 Linux 的下载形式。资料未列出最低操作系统版本、最低内存、模型服务要求或网络访问要求,部署评估时应以官方文档和对应发行包说明为准。

根目录可核查的开发依赖

  • 包管理器:bun@1.3.14
  • TypeScript:目录依赖通过 catalog 引用 5.8.2
  • 任务编排:turbo 版本为 2.10.2
  • 代码检查:oxlint 版本为 1.60.0
  • 前端构建:vite 版本为 7.1.4
  • 测试工具:@playwright/test 版本为 1.59.1,但资料没有给出根目录测试入口。

快速开始

快速开始可以分为发行版安装和源码开发两条路径。发行版路径最短,但 README 没有在给定内容中提供首次启动命令;源码路径可以使用根目录已声明的开发脚本,但需要先获得仓库源码并安装工作区依赖。

发行版安装

下面的命令直接来自 README,适用于将 npm 包安装到全局环境。命令不包含 API 密钥、远程目标或破坏性操作;安装前应按照 README 提示移除早于 0.1.x 的旧版本。

Bash
npm i -g opencode-ai@latest

安装目录由安装脚本决定时,README 给出了明确的优先级:$OPENCODE_INSTALL_DIR 高于 $XDG_BIN_DIR,其后是可创建的 $HOME/bin,最后是 $HOME/.opencode/bin。如果使用安装脚本,目录可以这样显式指定:

Bash
XDG_BIN_DIR=$HOME/.local/bin curl -fsSL https://opencode.ai/install | bash

上述命令会执行远程安装脚本,生产环境使用前应先审阅脚本内容并按照组织的软件供应链政策执行。资料没有给出安装后可核验的版本命令或 CLI 参数,因此验证安装是否成功的具体命令,官方仓库未提供该信息,建议以最新 README 为准。

源码开发的最小闭环

package.jsonbun@1.3.14 声明为包管理器,并提供 devtypecheck 脚本。以下示例使用已存在于 package.json 的脚本完成“安装依赖、运行开发入口、执行类型检查”闭环;其中源码获取命令未出现在给定 README 资料中,因此这里不虚构克隆命令。

Bash
# 在已获得 opencode 源码的仓库根目录执行
bun install

# 启动 packages/opencode 的开发入口
bun run dev

# 在另一个终端执行类型检查,作为源码验证步骤
bun run typecheck

bun install 是与 packageManager 声明匹配的依赖安装步骤,但该命令没有出现在给定 README 的安装清单中;如果严格按照“资料中明确给出的命令”执行,建议先阅读仓库最新贡献文档。bun run dev 实际执行 bun run --cwd packages/opencode --conditions=browser src/index.tsbun run typecheck 实际执行 bun turbo typecheck,两者均来自 package.json。

桌面应用安装

桌面应用标记为 BETA,下载入口是 GitHub Releases 和官网下载页。README 给出的文件名可用于识别目标平台,但没有提供桌面应用的启动参数、自动更新机制或数据目录说明。

  • macOS Apple Silicon:opencode-desktop-mac-arm64.dmg
  • macOS Intel:opencode-desktop-mac-x64.dmg
  • Windows:opencode-desktop-windows-x64.exe
  • Linux:.deb.rpm.AppImage

配置说明

给定资料中没有提供 OpenCode Agent 配置文件示例、模型配置字段、环境变量模板或服务端配置章节。因此,能够严谨列出的配置项主要来自根 package.json;它们描述仓库构建与开发行为,不应被误认为是运行时 Agent 配置。

字段名 类型 默认值 作用
type 字符串 "module" 声明根项目使用 ECMAScript 模块。
private 布尔值 true 将根包标记为私有包。
packageManager 字符串 "bun@1.3.14" 声明仓库使用的包管理器及版本。
workspaces.packages 字符串数组 未提供单一默认值 定义 packages/*、控制台、统计、SDK 和 Slack 工作区范围。
scripts.dev 字符串 "bun run --cwd packages/opencode --conditions=browser src/index.ts" 启动命令行开发入口。
scripts.dev:desktop 字符串 "bun --cwd packages/desktop dev" 启动桌面应用开发脚本。
scripts.dev:web 字符串 "bun --cwd packages/app dev" 启动 Web 应用开发脚本。
scripts.typecheck 字符串 "bun turbo typecheck" 通过 Turbo 执行类型检查。
prettier.semi 布尔值 false 配置格式化工具不使用分号。
prettier.printWidth 数字 120 配置格式化工具的打印宽度。

安装脚本相关环境变量是 README 明确提供的另一组配置项,包括 OPENCODE_INSTALL_DIRXDG_BIN_DIR。资料没有给出它们的类型声明、统一默认值、模型密钥变量或运行时配置文件名;未提供的配置字段应以官方文档为准。

进阶用法

进阶使用的重点不是增加未经验证的参数,而是合理安排 Agent 权限和任务阶段。已知的交互入口包括 Tab 切换 Agent,以及在消息中使用 @general 调用复杂搜索子 Agent。

先规划、后修改

  1. plan 模式下提出代码库理解或变更规划请求。
  2. 检查其只读分析结果,并确认涉及的文件范围与命令需求。
  3. 使用 Tab 切换到 build,再决定是否执行实际开发修改。
  4. 完成后结合项目已有检查脚本验证;根目录可使用 bun run typecheck

这种流程利用了 README 已明确声明的权限差异,将探索与修改分离。根据本文作者的经验判断,在陌生代码库中先使用只读模式能够减少误改范围,但这属于工作流建议,不是仓库提供的性能或安全保证。

调用 general 处理多步骤搜索

当任务包含复杂搜索和多个连续步骤时,可以在消息中使用 @general。输入是自然语言任务和代码库上下文,输出行为由 Agent 调度逻辑决定;资料只确认该调用形式,没有提供独立命令、返回格式或失败重试参数。

从源码运行不同应用

根脚本为不同工作区提供独立入口,开发者可以根据目标选择对应脚本。它们的执行命令如下,均来自 package.json:

Bash
bun run dev:desktop
bun run dev:web
bun run dev:console
bun run dev:stats
bun run dev:storybook

dev:console 还会先设置文件描述符上限:ulimit -n 10240 2>/dev/null;这是脚本中的实际内容,不代表所有系统都支持同样的资源限制行为。各应用是否需要额外服务、端口或凭据,官方仓库资料未提供。

可观测性与运维

给定 package.json 能确认仓库依赖了 @effect/opentelemetry,并包含 Sentry Solid 与 Vite 插件依赖;这只能说明代码库纳入了相关依赖,不能证明某个部署环境已经启用、上报了哪些指标或满足生产监控要求。

根脚本还提供 linttypecheck 和构建相关开发入口,可作为源码变更后的基础检查。根目录 test 脚本明确禁止直接运行测试,因此运维或持续集成流程不能把根目录 bun run test 当作有效测试命令。

可执行的基础检查

  • bun run lint:执行根目录声明的 Oxlint 检查。
  • bun run typecheck:通过 Turbo 执行类型检查。
  • bun run dev:进入 packages/opencode 的开发脚本。

资料没有提供日志格式、健康检查端点、指标名称、告警阈值、备份策略、回滚流程、SLA 或容量数据。涉及线上运维时,应将这些项目列为上线前必须补齐的文档项,而不是从依赖名称推导出已具备的运维能力。

安全与合规边界

OpenCode 的 Agent 会参与代码库开发,并且 README 明确区分了完整访问权限与只读权限,因此使用时必须把代码、命令和凭据视为受保护对象。以下边界仅适用于用户拥有授权的本地或测试环境,不提供针对未授权目标的操作方法,也不讨论绕过检测或规避权限的技巧。

授权与隔离

  • 仅在自己拥有权限的代码库、测试项目或明确获授权的组织环境中运行。
  • 首次探索陌生代码库时优先使用 plan,并在切换到 build 前复核修改范围。
  • 不要把生产凭据、个人身份信息或未脱敏业务数据直接放入 Agent 上下文;仓库资料没有说明其数据保留和传输策略。
  • 将 Agent 运行目录限制在专用工作区,并通过操作系统用户权限控制文件和命令访问范围。
  • 对远程安装脚本、第三方模型服务和插件进行组织级供应链审查;资料未提供安全审计结论或 CVE 清单。

项目使用 MIT 许可证不等于模型服务、依赖包、用户数据或企业内部代码自动获得相同授权。涉及隐私、跨境传输、软件供应链和行业监管的场景,应由使用方依据适用法律、合同和内部政策完成评估;官方仓库未提供合规认证或法律意见。

许可证与商用条款

LICENSE 文件声明 OpenCode 使用 MIT License,版权标注为 “Copyright (c) 2025 opencode”。MIT 文本授予获得软件及其文档副本的人使用、复制、修改、合并、发布、分发、再许可和销售副本的权限,但须满足许可证列出的条件。

分发时需要注意的条款

  • 软件副本或其重要部分必须包含版权声明。
  • 必须保留 MIT 许可证的许可声明。
  • 软件按“现状”提供,许可证明确排除保证责任。
  • 许可证包含责任限制条款,具体边界以仓库 LICENSE 原文为准。

因此,依据给定 LICENSE 文本,商业使用在许可范围内是允许的;但再分发时仍需保留版权与许可声明,并同时核查依赖包、模型服务、插件及平台分发规则。商标、品牌关联、服务条款和第三方组件的额外要求不由这份 MIT 文本自动覆盖,存在不确定部分时以仓库 LICENSE 和相关组件许可证为准。

局限性与已知限制

当前资料足以说明项目定位、安装渠道、内置 Agent 和源码工作区,但不足以建立完整的生产部署手册。将资料边界明确记录下来,比补写未经验证的命令或性能结论更适合技术决策。

  • 官方仓库未提供模型供应商、模型选择、API 配置字段和密钥环境变量。
  • 官方仓库未提供 CLI 完整命令参考、参数签名和退出码说明。
  • 官方仓库未提供默认服务端口、网络拓扑或生产部署配置。
  • 官方仓库未提供性能基准、并发上限、资源需求、SLA 或任务成功率。
  • 桌面应用在 README 中标记为 BETA,不能据此推断其生产稳定性。
  • 根目录测试脚本明确不允许直接运行,工作区级测试入口未出现在给定资料中。
  • 依赖列表包含多个补丁依赖和受信任依赖,但资料没有提供补丁原因、审计结果或供应链风险评估。

这些限制不等同于项目缺少相应实现,而是表示所给仓库材料没有公开足够信息来核查。需要将 OpenCode 接入团队开发平台、统一身份认证或生产代码流水线时,建议先补充版本锁定、权限模型、日志策略和回滚方案。

适合谁

以下信号表明 OpenCode 与需求较匹配,判断依据限于仓库提供的 Agent、工作区和安装方式。具体模型效果与团队生产效率不能从仓库元信息直接推断。

  • 团队需要一个可阅读、规划并参与修改本地代码库的开源 Agent,而不是只需要静态代码片段生成。
  • 开发人员希望在只读分析和完整开发权限之间切换,并接受通过 Tab 进行交互式模式切换。
  • 项目技术栈能够接受 TypeScript、Bun 工作区和多包仓库结构,且维护者愿意使用根目录的 lint 与 typecheck 脚本。
  • 组织需要 CLI、桌面、Web 或控制台中的一种开发入口,并能够自行完成未在资料中说明的模型与凭据配置核验。
  • 团队可以在授权的本地或测试目录中运行 Agent,并建立代码审查、权限隔离和敏感数据脱敏流程。

不适合谁

以下信号表示不应直接把 OpenCode 作为现成生产方案采用,除非先完成额外验证。判断重点是资料中明确缺失的运行和治理信息,而不是对项目能力作负面推断。

  • 要求官方直接提供生产级 SLA、容量上限、延迟基准或已验证的高并发指标,但仓库资料没有这些承诺。
  • 团队无法允许 Agent 访问本地代码、执行潜在命令,或无法建立独立工作区与操作系统权限隔离。
  • 项目必须使用已明确记录的企业身份认证、审计日志、数据驻留和合规认证,而当前资料没有对应说明。
  • 维护者只接受单仓库、单运行时和固定部署方式,无法承担 Bun 工作区、多应用入口或第三方模型配置的维护成本。
  • 使用场景要求稳定的桌面发行版体验,而当前 README 将桌面应用标记为 BETA,且没有给出稳定性承诺。

常见问题与排查(FAQ / Troubleshooting)

排查优先级应从版本、安装目录、工作区脚本和权限边界开始。以下问题只引用资料中可以验证的命令和事实,不扩展未公开的网络或模型配置。

安装后找不到命令怎么办

如果使用安装脚本,先检查安装目录是否符合 README 的优先级:OPENCODE_INSTALL_DIRXDG_BIN_DIR$HOME/bin$HOME/.opencode/bin。资料没有提供自动修改 PATH 的说明,因此 PATH 配置方式官方仓库未提供该信息,建议核对当前 shell 的 PATH 和最新安装文档。

是否需要先删除旧版本

README 明确提示,安装前请移除 0.1.x 之前的旧版本。该提示适用于 README 所覆盖的安装流程;旧版本的具体卸载命令没有出现在给定资料中。

根目录为什么不能运行测试

根 package.json 的 test 脚本会输出 do not run tests from root 并以失败状态退出。这是仓库的显式约束;应进入对应工作区查看其测试配置,但所给资料未提供工作区级测试命令。

类型检查失败如何定位

根目录可以执行 bun run typecheck,其实际脚本是 bun turbo typecheck。如果失败,应记录具体工作区和 TypeScript 错误,再在对应包中处理;资料没有提供错误码、缓存清理命令或兼容性矩阵。

开发入口是否使用固定端口

给定 package.json 和 README 没有出现端口号、端口环境变量或监听地址。官方仓库未提供该信息,不能在部署脚本中预设端口,也不应把某个前端工具的默认行为当作 OpenCode 的正式接口。

如何确认 Agent 是否有写权限

根据 README,plan 默认拒绝文件编辑,build 具有完整访问权限。可以先使用 Tab 切换到 plan,确认分析阶段不产生修改;权限审批的详细界面和配置字段,官方仓库未提供该信息。

贡献与项目治理

项目欢迎贡献者参与,但 README 要求提交 Pull Request(PR)前阅读仓库中的 CONTRIBUTING.md。贡献流程、分支策略、提交格式、审查要求和发布流程没有包含在给定资料中,不能代替贡献指南编写具体规则。

仓库默认分支是 dev,发布工作流徽章也使用 dev 分支作为状态参考。该信息只能说明资料中的分支与工作流配置,不能推断其发布稳定性或版本生命周期。

基于项目进行二次开发

如果二次项目名称中使用 “opencode”,README 要求在 README 中明确说明该项目不是 OpenCode 团队开发,也不与 OpenCode 团队存在隶属关系。这个要求适用于示例中的 opencode-dashboardopencode-mobile 等命名场景。

二次开发者还应分别核查 OpenCode 本身、工作区依赖、插件、模型服务和发行渠道的许可证与使用条款。MIT 许可证给予的权限不能替代第三方组件的独立许可义务。

版本与发布信息

README 的 npm 安装示例使用 opencode-ai@latest,并提供了 npm 包页面和发布工作流徽章。题目资料没有提供当前 npm 具体版本、GitHub Release 版本号或变更日志,因此本文不填写未核实的版本数字。

源码仓库的 packageManager 版本为 bun@1.3.14,这是根 package.json 的开发环境声明,不是 OpenCode 应用版本。安装发行版与从 dev 分支运行源码也不应被视为同一发布物。

项目地址与资源

以下链接均来自题目提供的仓库、README 或 package.json,分别对应源代码、官方文档、下载、社区和发布相关页面。