OpenCode 离线便携包配置
本文将完整复盘如何把 OpenCode 桌面版 打包成一个解压即用、纯离线、无需管理员权限的便携工具包并集成自定义技能和常用插件。即便在加密且封闭的虚拟桌面环境下它也能稳定工作。一、方案目标完全离线所有依赖Python 环境、Playwright 浏览器、npm 插件都内置于文件夹中。解压即用用户只需解压 ZIP 并双击一个脚本首次自动部署配置后续直接使用。无权限要求不修改系统环境变量不写入 Program Files不强制管理员权限。跨盘符自适应无论解压到 C 盘、D 盘还是 R 盘路径都能自动适配。二、核心思路便携 OpenCode 程序将安装好的 OpenCode.exeWindows或 OpenCode.appmacOS完整复制到工具包目录。便携 Python 环境使用 python -m venv --copies 创建完全独立的虚拟环境确保拷贝到其他电脑也能正常运行。自定义技能Skills用 Markdown 文件定义技能配合 Python 脚本实现浏览器截图功能。离线插件Plugins利用 Node.js 模块解析机制通过“包装 JS 文件”桥接离线插件包实现 PDF/Word 等高级文件解析。启动引导脚本负责首次部署技能文件、插件包装文件并动态替换路径占位符然后启动程序三、详细搭建步骤3.1 环境准备构建机在一台可联网的电脑上完成以下操作安装 Node.js ——用于 npm 管理插件安装 Python 33.8——用于创建虚拟环境和运行脚本下载 OpenCode 桌面版安装包Windows 选 .exemacOS 选 .dmg3.2 构建目录骨架新建一个根文件夹例如 OpenCodePortable内部结构如下OpenCodePortable/├── opencode-aidesktop/ # OpenCode 程序文件夹Windows├── offline/│ └── opencode_fies/│ ├── python/ # 便携 Python 虚拟环境│ ├── scripts/ # 自定义 Python 脚本│ └── skills/ # 技能文件.md├── plugin_wrappers/ # 插件包装文件.js├── userdata/ # 用户数据目录│ ├── opencode.jsonc # 插件配置文件│ └── .config/opencode/│ └── packages/ # 离线插件包└── 启动.bat # Windows 启动脚本3.3 制作便携 Python 环境cmdcd offline/opencode_fies python -m venv --copies python⚠️ 参数--copies是核心它会将python.exe和标准库拷贝到虚拟环境中而不是创建链接这样换到其他电脑才不依赖原系统。激活环境并安装依赖cmdpython/Scripts/activate pip install playwright # 可选pip install python-docx openpyxl PyPDF2 deactivate如果目标电脑已有 Chrome/Edge我们就不必下载 Chromium脚本中可指定channelchrome来调用系统浏览器。3.4 编写功能脚本以浏览器截图为例在scripts/下新建run_browser.pypythonimport sys, asyncio, datetime from playwright.async_api import async_playwright async def main(): print(f[{datetime.datetime.now():%H:%M:%S}] Python 解释器: {sys.executable}) url sys.argv[1] if len(sys.argv) 1 else https://www.baidu.com output sys.argv[2] if len(sys.argv) 2 else screenshot.png print(f[{datetime.datetime.now():%H:%M:%S}] 目标 URL: {url}) print(f[{datetime.datetime.now():%H:%M:%S}] 截图保存: {output}) async with async_playwright() as p: print(f[{datetime.datetime.now():%H:%M:%S}] 启动 Chrome...) browser await p.chromium.launch(channelchrome, headlessFalse) page await browser.new_page() print(f[{datetime.datetime.now():%H:%M:%S}] 正在加载页面...) await page.goto(url, wait_untildomcontentloaded) print(f[{datetime.datetime.now():%H:%M:%S}] 页面加载完成开始截图...) await page.screenshot(pathoutput, full_pageTrue) print(f[{datetime.datetime.now():%H:%M:%S}] 截图完成) await browser.close() print(f[{datetime.datetime.now():%H:%M:%S}] 浏览器已关闭) asyncio.run(main())如果目标电脑只有 Edge将channelchrome改为msedge。3.5 创建技能文件技能文件存放在offline/opencode_fies/skills/技能名/SKILL.mdSKILL.md命名需完全一致示例浏览器截图技能browser-use-chromemarkdown--- name: browser-use-chrome description: 打开网页并截图使用系统 Chrome 浏览器 --- # 浏览器截图 ## 运行命令 cmd /c set PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD1 %OFFLINE_ROOT%\python\Scripts\python.exe %OFFLINE_ROOT%\scripts\run_browser.py {{url}} {{output}}注意Windows 命令使用cmd /cmacOS 应改为/bin/bash -c环境变量%OFFLINE_ROOT%或$OFFLINE_ROOT会在启动脚本中设置指向便携包内的offline/opencode_fies{{url}}和{{output}}为参数占位符由 OpenCode 自动填充3.6 离线插件配置PDF/Word很多高效插件如opencode-betterread底层依赖 npm 包和外部node_modules。离线加载的秘诀是利用包装 JS 文件让 Node.js 的模块解析机制自动找到依赖。步骤 1获取插件缓存在联网的电脑上先配置好opencode.jsonc并启动 OpenCode插件会自动下载到缓存目录Windows:%USERPROFILE%\.cache\opencode\packages\macOS:~/.cache/opencode/packages/将整个packages目录复制到便携包的userdata/.config/opencode/packages/下。步骤 2创建插件包装文件在便携包根目录下创建plugin_wrappers文件夹为每个插件新建一个.js文件例如opencode-betterread.jsexport * from __PORTABLE_ROOT__/userdata/.config/opencode/packages/opencode-betterread/node_modules/opencode-betterread/dist/index.js;这里的__PORTABLE_ROOT__是占位符启动脚本会在首次运行时替换为实际盘符路径。步骤 3修改opencode.jsoncjsonc{ $schema: https://opencode.ai/config.json, plugin: [ opencode-betterread, opencode-parser, opencode-multimodal ] }插件实际代码留在packages中不动包装文件会被部署到用户配置目录下OpenCode 启动时自动识别。7 编写启动脚本Windows 示例在根目录创建启动.bat内容如下echo off setlocal enabledelayedexpansion :: 获取便携包根目录去掉末尾反斜杠 set PORTABLE_ROOT%~dp0 if %PORTABLE_ROOT:~-1%\ set PORTABLE_ROOT%PORTABLE_ROOT:~0,-1% :: 设置离线 Python 路径 set OFFLINE_ROOT%PORTABLE_ROOT%\offline\opencode_fies :: :: 技能部署 :: set SKILL_DEST%USERPROFILE%\.config\opencode\skill\browser-use-chrome if not exist %SKILL_DEST%\SKILL.md ( echo 正在初始化浏览器技能... mkdir %SKILL_DEST% 2nul copy /y %OFFLINE_ROOT%\skills\browser-use-chrome\SKILL.md %SKILL_DEST%\ ) :: :: 插件包装文件部署 :: set WRAPPER_SRC%PORTABLE_ROOT%\plugin_wrappers set PLUGINS_DEST%USERPROFILE%\.config\opencode\plugins if not exist %PLUGINS_DEST%\opencode-betterread.js ( echo 正在初始化插件... mkdir %PLUGINS_DEST% 2nul copy /y %WRAPPER_SRC%\*.js %PLUGINS_DEST%\ ) :: :: 替换占位符如果包装文件使用了 __PORTABLE_ROOT__ :: set WRAPPER_DEST_FILE%PLUGINS_DEST%\opencode-betterread.js if exist %WRAPPER_DEST_FILE% ( findstr /c:__PORTABLE_ROOT__ %WRAPPER_DEST_FILE% nul if %errorlevel% equ 0 ( powershell -Command (Get-Content %WRAPPER_DEST_FILE%) -replace __PORTABLE_ROOT__, %PORTABLE_ROOT:\/% | Set-Content %WRAPPER_DEST_FILE% ) ) :: 如果 opencode.jsonc 中也有占位符也进行替换 set CONFIG_FILE%PORTABLE_ROOT%\userdata\opencode.jsonc if exist %CONFIG_FILE% ( findstr /c:__PORTABLE_ROOT__ %CONFIG_FILE% nul if %errorlevel% equ 0 ( powershell -Command (Get-Content %CONFIG_FILE%) -replace __PORTABLE_ROOT__, %PORTABLE_ROOT:\/% | Set-Content %CONFIG_FILE% ) ) :: :: 启动 OpenCode :: start %PORTABLE_ROOT%\opencode-aidesktop\OpenCode.exe --disable-gpu --disable-gpu-sandbox --disable-software-rasterizer --user-data-dir%PORTABLE_ROOT%\userdata四、用户使用流程解压收到的 ZIP 包到任意盘符路径不要有中文和空格。进入文件夹双击启动.bat。首次会看到黑窗提示“复制文件1”稍等即自动打开 OpenCode。测试技能对话框输入用 browser-use-chrome 技能打开 https://www.baidu.com 并保存截图为 test.png测试插件对话输入“读取D:\报告\季度总结.pdf”如果能提取文字说明插件生效。以后每次使用可以直接双击OpenCode.exe因为配置已写入系统但推荐继续使用启动.bat以便后续更新五、问题记录1.opencode自动下载插件后插件会位于C:\Users\Lenovo\.cache\opencode\packages2.离线插件需要自己在.config中创建plugins文件夹并放置其中位置位于C:\Users\Lenovo\.config\opencode下由于插件包多为依赖外置的形式包名/node_modules/包名(包依赖)/dist/index.js。因此需要建立js文件才能进行引入。该位置的插件被加载优先度会高于缓存中的插件3.skill文件位于C:\Users\Lenovo\.config\opencode下需自己创建skill文件夹,且要求文件名必须为SKILL.md参考目录结构skill文件夹/技能名称文件夹/SKILL.md六、结语通过这套方案我们成功地在各种受限环境中搭建了一个功能齐全的离线 AI 工作台。从浏览器截图到 PDF 解析从一键部署到跨机器迁移整个流程无需任何联网或管理员权限真正实现了“解压即用”。教程仅提供思路具体细节请结合实际情况变更。

相关新闻

美媒称伊朗向霍尔木兹海峡商船发射导弹,两艘商船受损

美媒称伊朗向霍尔木兹海峡商船发射导弹,两艘商船受损

据Axios报道,一名美国官员称,伊朗方面向霍尔木兹海峡的商船至少发射了两枚导弹。报道称,两艘商船在事件中被击中并严重受损,但目前没有人员伤亡报告。路透社也援引Axios报道称,伊朗向经过霍尔木兹海峡的商船发射导弹&a…

2026/7/8 8:11:34 阅读更多 →
CE修改器内存断点解析:访问与写入断点的2种机制对比及5个应用场景

CE修改器内存断点解析:访问与写入断点的2种机制对比及5个应用场景

CE修改器内存断点深度解析:从原理到高阶应用实战在逆向工程和游戏修改领域,内存断点技术一直是分析程序行为的核心工具。Cheat Engine作为最受欢迎的内存修改工具之一,其内置的两种内存断点机制——访问断点和写入断点——为逆向分析提供了强…

2026/7/8 8:09:34 阅读更多 →
防火窗价格核心影响因素

防火窗价格核心影响因素

一、耐火等级与隔热类型(价差最大项)依据 GB16809-2024,直接决定整套材料配置成本:耐火时长:甲级 1.5h > 乙级 1.0h > 丙级 0.5h 甲级对型材壁厚、防火填充、玻璃隔热层要求翻倍,每平差价 200&#x…

2026/7/8 8:09:34 阅读更多 →

最新新闻

【Java毕业设计】基于 SpringBoot+Vue 的地方特色水果商城管理系统的设计与实现 基于前后端分离的农产品线上零售交易系统(源码+文档+远程调试,全bao定制等)

【Java毕业设计】基于 SpringBoot+Vue 的地方特色水果商城管理系统的设计与实现 基于前后端分离的农产品线上零售交易系统(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/8 9:13:53 阅读更多 →
# 2026年AI API中转平台选型指南:高并发能力、协议兼容与白盒计费体系深度解析

# 2026年AI API中转平台选型指南:高并发能力、协议兼容与白盒计费体系深度解析

随着2026年AI应用全面进入产业化阶段,大模型API已经不再只是开发接口,而逐渐演变为企业AI系统中的核心基础设施。 从AI编程助手、自动化Agent,到多模型协同推理平台,企业对于API中转层的要求正在迅速提高。过去只关注“能否调用模…

2026/7/8 9:13:53 阅读更多 →
时间序列滑动窗口分割:5个关键参数对模型性能的影响分析

时间序列滑动窗口分割:5个关键参数对模型性能的影响分析

时间序列滑动窗口分割:5个关键参数对模型性能的影响分析在金融风控、工业设备监测和气象预测等领域,时间序列预测的准确性直接影响决策质量。滑动窗口作为时间序列建模的核心预处理技术,其参数配置往往被开发者忽视,却对模型表现有…

2026/7/8 9:13:53 阅读更多 →
从漂移检测到灰度部署的六步实践

从漂移检测到灰度部署的六步实践

1. 引言:为什么需要标准化的模型更新流程? 在工业AI应用场景中,模型部署上线并非终点,而是持续运营的开始。数据分布会随时间“漂移”,设备工况会变化,新的异常模式也会出现。一个缺乏标准化更新流程的模型…

2026/7/8 9:13:53 阅读更多 →
STM32 USART 轮询与中断模式对比:实测 115200 波特率下 CPU 占用率差异

STM32 USART 轮询与中断模式对比:实测 115200 波特率下 CPU 占用率差异

STM32 USART轮询与中断模式深度评测:115200波特率下的CPU占用率实测与选型指南在嵌入式开发中,串口通信(USART/UART)是最基础也最常用的外设之一。无论是调试信息输出、传感器数据采集,还是与上位机通信,都离不开它。但对于资源有…

2026/7/8 9:11:52 阅读更多 →
永久保存青春记忆:QQ空间导出助手完整备份指南

永久保存青春记忆:QQ空间导出助手完整备份指南

永久保存青春记忆:QQ空间导出助手完整备份指南 【免费下载链接】QZoneExport QQ空间导出助手,用于备份QQ空间的说说、日志、私密日记、相册、视频、留言板、QQ好友、收藏夹、分享、最近访客为文件,便于迁移与保存 项目地址: https://gitcod…

2026/7/8 9:11:52 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻