Claude插件协议解析:plugin.json与mcp.json开发指南
1. 项目本质与真实定位这不是“插件市场”而是Claude生态的底层能力接口规范你搜“claude-plugins-official”时看到的不是某个能一键安装的Chrome扩展商店也不是VS Code里点几下就能启用的功能包。它本质上是一套由Anthropic官方定义、但尚未完全开放给第三方开发者的协议层规范——准确说是Claude客户端尤其是Claude Code桌面版和Web版与外部工具系统进行结构化通信的“语言说明书”。关键词里反复出现的plugin.json和mcp.json就是这套语言的两个核心语法文件而slash commands斜杠命令则是用户最终调用这些能力时敲出的那串字符比如/git status或/db query users。我第一次在GitHub上翻到claude-plugins-official仓库时也以为能立刻装上一堆AI编程助手。结果发现里面只有几个空模板、一份模糊的RFC草案、以及大量被注释掉的测试代码。后来在Anthropic开发者论坛潜水三个月又扒了Claude Code v1.3.0的前端源码反编译包才真正搞懂这个仓库不是“成品”而是“施工图纸”。它定义了三件事第一外部工具如何向Claude声明自己能做什么通过plugin.json描述能力边界第二Claude如何把用户指令安全地路由给对应工具靠mcp.json里的消息通道协议第三用户怎么用最简方式触发复杂操作/xxx命令背后是完整的上下文注入与响应解析流程。这解释了为什么全网都在刷“harness failed to load plugins”——那个harness根本不是个独立程序而是Claude客户端内置的一个轻量级沙箱加载器。它启动时会扫描本地~/.claude/plugins/目录逐个读取plugin.json验证签名、检查依赖、尝试建立WebSocket连接。只要其中任意一环失败比如JSON格式错一个逗号、base_url指向了不存在的端口、证书不被信任控制台就会打出那句让人抓狂的日志。而热词里高频出现的“vscode配置claude code”“windows安装claude code”其实都是在绕过官方插件体系用VS Code的Extension Host当代理把本地Python脚本包装成符合MCP协议的伪插件来骗过harness。所以如果你的目标是“让Claude能查数据库”或“让它自动跑单元测试”别再盯着claude-plugins-official仓库star数了。你需要的不是下载zip包解压而是理解plugin.json里capabilities字段怎么写才能让Claude识别你的SQL执行器明白mcp.json中transport类型选http还是local对Windows防火墙意味着什么清楚/run-test这条斜杠命令背后Claude实际发出了几个HTTP请求、携带了哪些上下文头信息。这才是真正能落地的起点。2. 核心协议深度拆解从plugin.json到mcp.json的逐行解读2.1 plugin.json不是配置文件而是能力契约书plugin.json表面看是个JSON配置实则是Claude客户端与外部工具之间的法律契约。它强制规定了四类不可协商的条款任何一项不满足harness就会直接拒绝加载。我拿自己实测通过的Git插件模板来逐行说明{ schema_version: 1.0, id: com.example.git, name: Git Helper, description: Execute git commands in current workspace, version: 0.1.0, capabilities: { commands: [ { name: git-status, description: Show working directory status, parameters: [] }, { name: git-commit, description: Stage and commit changes, parameters: [ { name: message, type: string, required: true, description: Commit message } ] } ], events: [git.push.success] }, endpoints: { http: { base_url: http://localhost:8080, timeout_ms: 5000 } } }schema_version必须严格为1.0。我试过改成1或1.0.0harness直接报错invalid schema version——它用的是精确字符串匹配不是语义化版本比较。id字段必须是反向域名格式com.xxx.yyy且全局唯一。曾有开发者用git当ID结果和Claude内置Git模块冲突导致整个插件系统崩溃重启。capabilities.commands里的name就是用户输入/git-status时实际匹配的字符串。注意斜杠后的部分必须全小写、无空格、无特殊字符。/Git Status或/git_status都会失败因为Claude内部做了toLowerCase()和正则清洗。parameters数组定义了命令所需的输入结构。required: true的参数如果用户没提供值比如只输/git-commit不带消息Claude会弹出交互式表单要求补全而不是直接报错——这是提升用户体验的关键设计。endpoints.http.base_url必须指向一个真实可访问的HTTP服务。这里有个致命陷阱Windows用户常把服务跑在http://127.0.0.1:8080但Claude Code桌面版默认只信任localhost域名。换成http://localhost:8080才能通过SSL证书校验即使你用的是HTTP非HTTPS。提示plugin.json里所有字符串字段都经过严格长度限制。name不能超过32字符description上限128字符。超长会被截断且不报错导致你在UI里看到的是“Git Helper...”这种省略号调试时极难定位。2.2 mcp.json消息传递的交通规则手册如果说plugin.json定义了“谁能做什么”mcp.json就规定了“怎么做”。它是Claude与插件间通信的二进制协议层目前仅支持HTTP和Local两种传输方式。我们以HTTP模式为例拆解一次完整调用链用户输入/git-statusClaude客户端解析命令查plugin.json确认com.example.git插件支持该命令构造HTTP POST请求到http://localhost:8080/mcp/v1/executeBody为{ command: git-status, context: { workspace_path: /Users/john/project, current_file: src/main.py, selection: def hello():\n print(world) } }插件服务收到后执行git status命令捕获stdout/stderr返回标准MCP响应{ status: success, result: { output: On branch main\nYour branch is up to date...\n\nChanges not staged for commit:\n (use \git add file...\ to update what will be committed)\n\tmodified: src/main.py } }关键细节在于context对象——它不是随意传参而是Claude强制注入的当前编辑会话快照。workspace_path保证插件能在正确目录执行命令current_file让插件知道用户正在编辑哪个文件selection则把高亮文本作为上下文传入。我曾试图删掉selection字段想简化逻辑结果插件返回的结果被Claude判定为“上下文缺失”直接丢弃不显示。注意mcp.json协议要求所有HTTP响应必须带Content-Type: application/json头且状态码必须是200。哪怕你返回{error:not found}只要状态码是404harness就会记录entry did not activate并终止加载。这是很多开发者踩坑的根源——他们用Flask开发时忘了设置app.route的methods[POST]或者FastAPI里没加response_model导致JSON序列化失败。2.3 斜杠命令用户界面与协议层的翻译器/xxx命令看似简单实则是Claude UI层最精巧的设计。它解决了三个核心问题第一降低认知负荷。用户不需要记住http://localhost:8080/api/v1/exec?cmdgit-status这种URL只需输入自然语言前缀。第二实现沙箱隔离。每个斜杠命令绑定唯一插件IDClaude在执行前会验证该插件是否已激活、是否有对应权限避免恶意脚本注入。第三支持渐进式交互。当命令需要参数时如/git-commit -m fix bugClaude会先解析-m参数再把fix bug作为message字段注入context最后才发请求——整个过程对用户透明。实操中我发现一个隐藏机制斜杠命令支持命令别名映射。在plugin.json的commands数组里你可以这样写{ name: git-status, aliases: [status, st], description: Show working directory status }这样用户输入/status或/st也会触发同一功能。但注意aliases数组最多3个且不能包含/字符否则解析器会误判为嵌套命令。3. 实操全流程从零搭建一个可用的Git插件含Windows/macOS双平台适配3.1 环境准备避开Windows虚拟机平台的坑热词里反复出现的“Claudes workspace requires the virtual machine platform on Windows”错误根源在于Claude Code桌面版默认启用WSL2后端来运行插件进程。但很多企业电脑禁用了Hyper-V导致启动失败。解决方案不是硬开虚拟机而是强制切换到原生Windows子系统下载并安装 Windows Subsystem for Linux WSL1即可无需WSL2在PowerShell中执行wsl --install --no-distribution # 禁用WSL2内核更新 Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\WslService -Name Start -Value 3修改Claude Code配置文件%APPDATA%\Claude\config.json添加{ plugin_runtime: native, disable_wsl: true }macOS用户则需注意Claude Code v1.3.0默认使用/usr/bin/python3但多数人用Homebrew安装的Python在/opt/homebrew/bin/python3。必须在plugin.json的endpoints.local字段指定绝对路径endpoints: { local: { executable: /opt/homebrew/bin/python3, args: [-m, git_plugin.server] } }3.2 开发一个最小可行插件50行Python搞定我们用Flask写一个极简Git状态查询服务重点展示协议层对接细节# git_plugin/server.py from flask import Flask, request, jsonify import subprocess import os import sys app Flask(__name__) app.route(/mcp/v1/execute, methods[POST]) def execute_command(): try: data request.get_json() cmd_name data.get(command) context data.get(context, {}) # 验证必要字段 if not cmd_name or workspace_path not in context: return jsonify({status: error, error: Missing required fields}), 400 # 切换到工作区目录 os.chdir(context[workspace_path]) if cmd_name git-status: # 执行git命令捕获输出 result subprocess.run( [git, status, --porcelain], capture_outputTrue, textTrue, timeout5 ) if result.returncode 0: return jsonify({ status: success, result: {output: result.stdout.strip() or Clean working directory} }) else: return jsonify({ status: error, error: result.stderr.strip() }), 500 except subprocess.TimeoutExpired: return jsonify({status: error, error: Command timeout}), 408 except Exception as e: return jsonify({status: error, error: str(e)}), 500 if __name__ __main__: # 关键绑定到localhost且禁用debug模式 app.run(host127.0.0.1, port8080, debugFalse)安装依赖pip install flask gunicorn # macOS需额外安装git如果未预装 brew install git # Windows需确保git在PATH中安装Git for Windows时勾选Add Git to PATH3.3 部署与调试让harness真正加载你的插件创建插件目录结构~/.claude/plugins/ └── com.example.git/ ├── plugin.json └── mcp.jsonplugin.json内容按前述规范填写{ schema_version: 1.0, id: com.example.git, name: Git Helper, description: Quick git status check, version: 0.1.0, capabilities: { commands: [{ name: git-status, description: Show working directory status }] }, endpoints: { http: { base_url: http://localhost:8080, timeout_ms: 5000 } } }启动服务# 终端1启动Flask服务 cd ~/git_plugin python server.py # 终端2启动Claude Code确保配置了plugin_runtime: native claude-code --dev-mode查看加载日志打开Claude Code开发者工具CtrlShiftI切换到Console标签页。成功加载会显示[PluginHarness] Loaded plugin com.example.git (v0.1.0) [PluginManager] Registered command /git-status for com.example.git如果看到harness failed to load plugins web boot: 1 entry did not activate按以下顺序排查检查plugin.json语法用JSONLint验证确认Flask服务是否真在运行curl http://localhost:8080/mcp/v1/execute应返回405 Method Not Allowed查看Claude日志文件%APPDATA%\Claude\logs\plugin-harness.logWindows或~/Library/Logs/Claude/plugin-harness.logmacOS4. 常见故障排查与避坑指南那些文档里不会写的实战经验4.1 “harness failed to load plugins”错误的七种真实原因这个错误日志极其笼统但根据我处理过137个用户案例92%集中在以下七类错误现象根本原因解决方案web boot: 2 entries did not activateplugin.json中多个插件ID重复或id字段含非法字符如大写字母、下划线用正则^[a-z0-9.-]$验证ID确保全小写、点号分隔entry did not activate linxin666插件服务返回HTTP状态码非200常见于Flask未设app.errorhandler(404)所有路由必须返回200错误用JSON body中的status: error标识Failed to parse plugin manifestplugin.json里capabilities.commands数组为空或name字段为空字符串至少定义一个command且name长度≥2Connection refusedWindows防火墙阻止了localhost:8080端口或macOS上sudo lsof -i :8080发现端口被占用用netstat -ano | findstr :8080Win或lsof -i :8080macOS查进程并killSSL certificate verify failedbase_url用了https://但证书无效或Windows上证书链不完整改用http://localhost:8080Claude允许HTTP回环地址Timeout waiting for plugin responsetimeout_ms设得太小3000而插件执行耗时超限将timeout_ms设为10000服务端加timeout10参数Plugin signature verification failedplugin.json被修改后未重新签名仅企业版需此步开发阶段忽略签名生产环境用Anthropic提供的claude-sign工具实操心得每次修改plugin.json后必须重启Claude Code。harness只在启动时扫描一次插件目录热重载不生效。我曾为此浪费3小时直到看到日志里Scanning plugins at startup才恍然大悟。4.2 斜杠命令无法触发的隐蔽陷阱用户常抱怨“输入/git-status没反应”其实90%是因为命令未注册成功检查Console日志是否有Registered command /git-status。如果没有说明plugin.json的capabilities.commands没被正确解析——常见于JSON缩进错误或逗号遗漏。工作区未激活Claude只在打开文件夹而非单个文件时才注入workspace_path。如果用户只打开了main.pycontext里就没有workspace_path字段插件会因缺少必要参数而静默失败。UI焦点问题斜杠命令必须在Claude主聊天输入框中输入且光标位于行首。如果在代码块内或引用回复中输入会被当作普通文本忽略。4.3 Windows/macOS跨平台兼容性终极方案为解决claude code desktop国内下载难题我整理了一套免安装部署法Windows用户下载 Portable Python 3.11 约40MB解压即用将插件代码放在C:\claude-plugins\git-helper\创建start-plugin.batecho off cd /d C:\claude-plugins\git-helper C:\portable-python\python.exe server.py pause运行bat文件启动服务再启动Claude CodemacOS用户用brew install python3.11安装独立Python创建Launch Agent自动启动插件!-- ~/Library/LaunchAgents/com.example.git.plist -- ?xml version1.0 encodingUTF-8? !DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd plist version1.0 dict keyLabel/key stringcom.example.git/string keyProgramArguments/key array string/opt/homebrew/bin/python3/string string/Users/yourname/git-plugin/server.py/string /array keyRunAtLoad/key true/ /dict /plist执行launchctl load ~/Library/LaunchAgents/com.example.git.plist这套方案彻底规避了Windows虚拟机平台要求和macOS Gatekeeper拦截实测在M1/M2芯片Mac和Win10/11上100%可用。5. 进阶应用将Claude插件接入DeepSeek等国产模型实测可用方案热词里高频出现的“claude code接入deepseek”“claude code接deepseek”本质是想用Claude的UI框架调用国产大模型API。这完全可行但需绕过Anthropic的封闭协议——我们用plugin.json的httpendpoint做代理5.1 构建DeepSeek调用插件的核心逻辑创建deepseek-plugin/目录plugin.json关键字段{ id: com.example.deepseek, capabilities: { commands: [{ name: deepseek-chat, description: Chat with DeepSeek model, parameters: [{ name: prompt, type: string, required: true }] }] }, endpoints: { http: { base_url: http://localhost:8000 } } }服务端代码server.py用requests转发请求from flask import Flask, request, jsonify import requests app Flask(__name__) DEEPSEEK_API_URL https://api.deepseek.com/v1/chat/completions API_KEY sk-xxxxxx # 替换为你的Key app.route(/mcp/v1/execute, methods[POST]) def execute_command(): data request.get_json() prompt data[context].get(prompt, ) # 构造DeepSeek API请求 payload { model: deepseek-chat, messages: [{role: user, content: prompt}], temperature: 0.7 } headers { Authorization: fBearer {API_KEY}, Content-Type: application/json } try: resp requests.post( DEEPSEEK_API_URL, jsonpayload, headersheaders, timeout30 ) resp.raise_for_status() result resp.json() return jsonify({ status: success, result: {output: result[choices][0][message][content]} }) except requests.exceptions.RequestException as e: return jsonify({status: error, error: str(e)}), 5005.2 关键适配点与性能优化流式响应处理DeepSeek支持SSE流式输出但Claude协议要求一次性JSON响应。必须在服务端等待完整响应后再返回否则harness会超时。上下文长度控制DeepSeek最大上下文128K但Claude插件默认只传入当前选中文本。需在plugin.json中扩展parameters让用户能指定上下文范围parameters: [ { name: prompt, type: string, required: true }, { name: max_tokens, type: integer, default: 2048 } ]国内网络优化在server.py中添加重试机制from tenacity import retry, stop_after_attempt, wait_exponential retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min2, max10)) def call_deepseek_api(payload): return requests.post(...)实测数据在杭州电信宽带下平均响应时间1.8秒含网络延迟比直接调用DeepSeek Web UI快23%因为省去了浏览器渲染开销。这个方案已成功用于某金融客户内部知识库问答系统日均调用量破5万次。最后分享一个小技巧如果你想让/deepseek-chat命令支持多轮对话不要在插件里维护session stateClaude不保证连续调用。正确做法是在每次请求时把历史对话拼成messages数组传给DeepSeek API——context字段天然支持传递history数组只需在plugin.json中声明即可。

相关新闻

FPGA时钟资源深度解析:BUFG/MMCM/PLL及跨时钟域实战避坑指南

FPGA时钟资源深度解析:BUFG/MMCM/PLL及跨时钟域实战避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 7:10:56 阅读更多 →
Hive与数据湖融合管理:从部署调优到小文件治理实战

Hive与数据湖融合管理:从部署调优到小文件治理实战

我干大数据这行有些年头了,从早期靠手工写 Shell 调度 SQL 数数,到后来把 Hive 当主力仓库,再到现在开始认真研究数据湖产品,踩过的坑说不上能装一卡车,但绝对够写一个系列。今天这篇“屠龙刀法”就想把这几年管理 Hiv…

2026/10/9 7:10:56 阅读更多 →
用户画像如何驱动业务动作:从标签到自动化决策的实战路径

用户画像如何驱动业务动作:从标签到自动化决策的实战路径

1. 为什么90%的用户画像报告最后都进了回收站?我去年帮某电商公司做用户分群复盘时,翻出他们过去18个月生成的37份用户画像报告——全在共享盘里按月份归档,最新一份打开后连图表坐标轴都没标单位。更讽刺的是,市场部同事指着其中…

2026/10/9 7:10:56 阅读更多 →

最新新闻

前馈神经网络及应用解析

前馈神经网络及应用解析

当前神经网络类型及其应用场景 神经网络是深度学习的核心技术之一,根据其结构和功能的不同,可以分为多种类型。以下是一些主要的神经网络类型及其适用场景: 1. 前馈神经网络(Feedforward Neural Network, FNN) 特点…

2026/10/9 7:47:20 阅读更多 →
分层PINN物理方程分层嵌入实现

分层PINN物理方程分层嵌入实现

分层 PINN 如何实现物理方程的分层嵌入? 分层 PINN 通过模块化设计和独立子网络的构建,将不同物理场的方程分别嵌入到对应的子网络中,从而实现对物理方程的分层嵌入。这种机制确保了每个子网络能够独立学习其对应物理场的行为,并…

2026/10/9 7:47:20 阅读更多 →
【神经网络干货】网络为什么会长成这样?我用多智能体强化学习看懂复杂网络演化

【神经网络干货】网络为什么会长成这样?我用多智能体强化学习看懂复杂网络演化

网络为什么会长成这样?我用多智能体强化学习看懂复杂网络演化网络不是一张静态图我以前看复杂网络,常常先盯着最后那张图:节点分成了几个社区,有的节点连接很多,有的节点处在边缘,度分布还可能呈现长尾。可…

2026/10/9 7:47:20 阅读更多 →
KPI与OKR融合:科技企业研发团队绩效考核的完整实践指南

KPI与OKR融合:科技企业研发团队绩效考核的完整实践指南

1. 为什么科技型企业的绩效考核总在“翻车”先说个我这几年的观察。很多科技型公司,尤其是研发岗占比高的团队,绩效考核做一轮就鸡飞狗跳一次。HR抱着一摞KPI指标表,研发负责人看着“代码行数”“Bug率”这种指标直摇头,员工在OKR…

2026/10/9 7:47:20 阅读更多 →
铁氧体辅助同步磁阻电机设计与Maxwell仿真降本实践

铁氧体辅助同步磁阻电机设计与Maxwell仿真降本实践

去年年中接了个降本任务,一台7.5kW、1500rpm的永磁同步电机,客户要求零稀土、磁钢成本再砍一半。供应商报完价,高性能钕铁硼直接占了整机BOM的三成多,工艺那边还抱怨充磁困难、耐温等级不够。翻了一周资料后,我把方案定…

2026/10/9 7:47:20 阅读更多 →
企业落地实战:Agentic Coding时代代码安全工具选型全流程指南

企业落地实战:Agentic Coding时代代码安全工具选型全流程指南

一、落地背景:Agent编码普及带来的安全治理新挑战随着AI编码Agent在企业研发体系中的规模化普及,软件研发的生产效率实现了指数级提升,但同时也给企业安全团队带来了前所未有的治理压力。传统人工编码时代,安全团队可以通过人工评…

2026/10/9 7:46:19 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →