最近技术圈最热的话题绕不开Claude Code。安装教程到处都是接DeepSeek的折腾帖一个接一个突然“Claude Code源码泄露”的消息又冲上热门直接把这款AI编程工具推到风口浪尖。我也花了不少时间把社区里流传的零碎信息翻来覆去看了好几遍结合自己平时折腾终端AI工具的经验把这次事件背后的技术架构、社区反应和实操门道完整梳理了一遍。这篇报告不是炒冷饭也不打算传播那些没法核实的截图和链接。我想借这个机会把Claude Code的设计逻辑拆开讲清楚说说泄露的到底是什么层面的东西、为什么社区会出现一波“接DeepSeek”的热潮以及我们普通人该怎么在合法合规的前提下从这件事里学到真正有用的东西。1. 事件全貌为什么一份“泄露源码”能引爆技术圈1.1 Claude Code到底是个什么东西先给还没上车的朋友补个基础知识。Claude Code是Anthropic推出的一款终端AI编程代理它不是IDE插件也不带图形界面而是直接在终端命令行里运行。你给它一句自然语言指令比如“帮我看看这个项目里所有没处理的TODO”它就能自己读文件、搜索代码、定位问题、修改文件、执行命令然后给出总结。相比Cursor这类编辑器形态的AI工具Claude Code最大的区别在于“自主性”。它在终端里像一个坐你旁边的结对程序员能连续完成多步操作。比如让它“把登录接口的超时时间改成可配置项并更新所有调用方”它会自己找到配置文件、列出现有调用点、完成改动、跑一遍测试。这种工作方式对很多老程序员来说反而比IDE里的弹窗更顺手毕竟终端是大家的老地盘。正因为它的工作方式和传统AI辅助编程工具差异明显一旦有什么内部资料流传出来技术圈自然高度关注。大家想知道的不只是代码本身更想知道Anthropic到底怎么把AI Agent塞进了一个终端外壳里。1.2 “泄露”消息是怎么传开的影响半径有多大结合社区讨论看这次事件的源头并不算清晰大致指向某次构建产物或内部分支意外流传随后被人在技术社区二次转发。流传的物料大多是零散文件、截图和二次整理的摘要并不是一个完整可运行的仓库。这一点很重要——很多人以为拿到的是完整源码实际上大概率是部分模块和配置文件的拼凑。影响半径可以从几类人群来看。普通用户最关心的是“这东西到底怎么装、怎么用”所以热搜词里大量出现“claude code安装”“claude code使用教程”。研究型开发者想借泄露内容扒架构看看Agent主循环、工具调用、权限模型是怎么设计的。AI工具创业者则更关注产品设计思路比如Skill机制、MCP接入方式想从中找灵感。安全从业者关心的则是泄露路径本身以及AI编程工具在处理敏感代码时的权限边界。这批人群叠加起来热度自然被顶得很高。但我个人认为事件本身的八卦价值远不如它暴露出来的技术设计思路有价值。Claude Code的设计逻辑即使不看泄露内容也可以通过官方文档、使用经验和部分开源替代品逆向理解出来。2. 扒开Claude Code的设计骨架用泄露源码看懂架构2.1 入口层一个CLI外壳如何包住一个AgentClaude Code从使用形态上看是个标准Node.js CLI应用命令行入口负责解析参数、加载配置、初始化会话然后进入和模型交互的主循环。CLI外壳本身并不复杂本质上就是把终端输入、文件系统操作、命令执行这些能力封装成一套接口供AI代理调用。我见过不少朋友对“CLI工具”有误解觉得命令行程序都很简单。实际上这里CLI更像是一个“中枢神经”用户输入从这里进入模型决策从这里分发工具执行结果也从这里回流。设计得好不好直接决定Agent能不能稳定地完成多步操作。从设计意图上看用CLI而不是IDE插件还有一层考虑跨平台、可脚本化、易自动化。CI/CD流水线里可以跑远程服务器上可以跑甚至你可以在SSH会话里直接让它修服务器上的配置。这是IDE插件很难做到的场景覆盖。2.2 核心循环规划、执行、观察、再规划所有AI编程工具的核心都是那个看不见的Agent主循环。Claude Code也不例外它大致遵循“规划—执行—观察—再规划”的模式。用户提出任务后模型先生成执行计划然后逐步调用工具每完成一步就把结果反馈给模型模型根据反馈调整下一步操作直到任务完成。这个循环用伪代码看会更直观def agent_loop(user_task): plan llm.plan(user_task) while not plan.is_done(): action llm.next_action(plan) if action.type read_file: result file_reader(action.path) elif action.type edit_file: result file_editor(action.path, action.patch) elif action.type run_command: result command_runner(action.command) else: result tool_dispatcher(action) plan llm.update_plan(plan, result) return plan.summary()这段逻辑看着简单里面的坑可不少。比如上下文管理每一步工具执行结果都要塞回模型上下文塞得太多会爆掉token上限所以必须有取舍有些中间输出要截断有些要摘要。再比如错误恢复命令执行失败了Agent是应该换个方案重试还是停下来问用户这需要一个判断机制。我自己在调试这类Agent时踩过最深的一个坑是“模型陷入循环却不自知”。比如它尝试读一个不存在的文件工具返回报错它不换思路反而换个路径继续尝试来回折腾五六次。好的Agent循环设计必须给这种场景设定重试上限超过就主动向用户确认而不是闷头硬闯。这属于那种不实际跑上百次任务根本发现不了的问题。2.3 工具调用与权限边界Claude Code的核心能力来自工具调用读取文件、写入文件、执行Shell命令、搜索代码、网页抓取等。每个工具都像一枚印章模型按照需求盖在不同的地方。工具集本身不稀奇稀奇的是权限边界怎么划定。我在实际使用中遇到的典型场景是这样的让它读项目文件它可以直接访问包括源码、配置文件、测试用例在内的所有路径但一旦涉及写操作或执行有副作用的命令它会停下来跟用户确认。这种“读宽写严”的策略很符合工程直觉——读操作风险低尽量放开提升效率写操作和命令执行风险高必须有人把关。权限控制层面我看到的设计思想大致有几层。第一层是目录白名单限制Agent访问范围避免它乱翻系统目录第二层是危险命令拦截比如rm -rf这类破坏性命令要单独确认第三层是会话级别的权限记忆同一会话内用户批准过的操作后续类似操作可以自动放行。这三层设计组合在一起既保证了Agent的自主性又保留了人的控制力。这里要特别说一句类似“--dangerously-skip-permissions”这种跳过全部确认的选项确实能大幅提升自动化效率但风险极高。我建议只在完全可信的隔离环境或CI执行特定任务时使用日常工作千万别图省事全跳确认。信任边界这种东西失守一次就够喝一壶的。2.4 Skill机制给Agent塞“操作手册”Claude Code里有个非常有特色的设计——Agent Skills。简单理解Skill是一个带说明文档和示例脚本的技能包告诉模型“在什么场景下按什么步骤用哪些工具完成什么任务”。它不是代码库更像是一本给AI看的手册。举个例子默认情况下Claude Code可能不知道你团队的代码规范是怎么定的。但如果你写了一个“代码规范检查”Skill里面描述了检查规则、命令示例、常见问题解法Agent在遇到相关任务时就会主动参考这份手册来执行。这种机制的价值在于把团队知识沉淀成模型可消费的资产。Skill的文件结构通常是一个目录里面包含一个有YAML元信息头和Markdown正文的SKILL.md外加若干辅助脚本。元信息声明Skill名称、描述、适用场景正文写操作步骤、注意事项、示例辅助脚本负责具体执行。模型会通过描述信息判断当前任务是否该引用某个Skill。我后来用这个机制给团队做过一个“前端项目脚手架初始化”的Skill效果很明显。以前让Agent创建新页面每次都凭感觉自由发挥目录结构和命名风格五花八门挂上Skill之后它会严格按团队规范来先用模板生成目录再补路由注册最后跑Lint检查。这种“工具灵活性流程标准化”的结合正是AI编程工具在团队场景里最实用的用法。3. 泄露源码背后的二次开发潮从“接DeepSeek”说起3.1 为什么都想着给Claude Code换模型热搜词里“claude code接入deepseek”“claude code接deepseek”反复出现这背后是一个很现实的需求换掉默认模型改成自己想用的模型。技术上Claude Code这类工具本身是模型无关的架构。核心循环只依赖模型的文本理解和生成能力工具调用通过结构化指令完成。只要模型支持类似的指令格式理论上就可以替换。正因如此社区里有人通过配置API地址、调整模型映射把Claude Code的底层模型从默认模型切换成其他大模型服务。这个需求爆发还有个现实背景不同模型在不同场景下的表现各有长短。有的模型在中文理解上更自然有的模型在代码生成上更强有的模型在成本上有明显优势。用户自然希望用更划算、更顺手的方式组合出适合自己的工具链。3.2 社区常见的“嫁接”方案思路是什么社区里流行的方案核心思路是在Claude Code和第三方模型之间插一个“翻译层”。这个翻译层负责把Claude Code发出的请求转换成目标模型能理解的格式再把模型返回的结果转换回Claude Code期望的格式。常见做法是通过环境变量或配置文件指定一个兼容的API端点然后在模型映射表里把默认模型名替换成目标模型名。大致是这样export ANTHROPIC_BASE_URLhttps://your-compatible-api.example.com export ANTHROPIC_MODELdeepseek-chat这里要特别强调任何第三方嫁接方案前提都必须是服务商允许、接口协议兼容、并且符合相关的服务条款和法律边界。我不是在教大家怎么绕过任何限制而是提醒一句——技术方案能不能用技术只占一半合规性占另一半这一点无论什么时候都别忽略。从工程角度说这类嫁接方案的难点不在改URL而在协议兼容细节。模型返回格式里有没有包含工具调用标记错误码是否一致流式输出是否标准这些都会影响嫁接效果。这也是为什么社区里有些桥接项目反复迭代版本本质上都是在补齐协议细节的坑。3.3 合法扩展路线与其扒泄露不如用官方接口和开源替代每次有源码泄露事件都有朋友想着“能不能扒下来自己改一个更好用的”。我的态度很明确泄露物既不完整也不合法拿它做开发等于在流动沙地上盖楼——随时可能塌而且塌的时候会连累你。真正稳妥的扩展路线是走官方支持的机制。MCPModel Context Protocol协议就是很好的一条路。通过MCP你可以给Claude Code挂上自定义工具让它访问内部数据库、调用公司API、操作私有系统整个过程完全在官方支持框架内。这比修改底层源码安全得多也干净得多。如果你想深度研究这类Agent工具的实现我建议去看开源的替代项目和各类Agent框架。那里有完整的代码、活跃的社区和正当的使用许可能学到的东西一点不比看泄露源码少。对我个人来说从开源项目里学到的Agent循环设计思路比从泄露文件里看到的零碎片段有价值十倍。4. 从零开始一套上手Claude Code的完整实操4.1 安装与初始化环境准备和认证如果你还没试过Claude Code我建议先装上跑一遍再回来看架构分析体验完全不一样。前提条件很简单一台能联网的电脑装了Node.js 18或更高版本然后通过npm全局安装npm install -g anthropic-ai/claude-code安装完成后在终端输入claude即可启动首次运行。首次运行需要完成身份认证按照官方提示登录或配置API密钥。关于地区可用性的差异以官方支持信息和条款说明为准我不在合规边界之外做过多讨论各位按自己所在环境的合法途径操作即可。我实测下来安装过程本身非常顺真正容易出问题的是Node.js版本太老。如果你之前装过其他Node工具全局目录权限不足的概率也比较高。遇到这类问题优先升级Node.js版本而不是用sudo硬装路径权限混乱后患无穷。4.2 高频命令与工作流配置上手之后有几个命令是我日常高频使用的claude # 启动交互式对话 claude -p 解释这个项目的架构 # 非交互模式执行一次就退出 claude --continue # 继续上一次会话 claude --allowedTools Bash,Edit # 限定本次会话可用工具范围非交互模式特别适合集成进脚本和CI流水线。比如我写过一个自动化脚本每天让Claude Code检查代码仓库里有没有未处理的调试输出有就自动列出来并生成清理建议。整个过程完全不需要人工介入。权限配置方面我建议第一次使用时把不同场景的确认策略想清楚。个人开发项目可以保持默认的“写操作和危险命令需确认”自动化流水线可以用配置文件单独指定允许工具范围。有个朋友把--dangerously-skip-permissions用在了生产服务器上Agent误操作改坏了Nginx配置这个教训我一直拿来提醒大家——权限跳过选项不是给你生产环境准备的。4.3 手写一个Skill的完整过程前面说过Skill机制很好用这里直接给一个可复现的案例。我写一个“代码规范检查”Skill让Claude Code在改完代码后自动检查风格问题。第一步创建Skill目录mkdir -p ~/.claude/skills/style-checker/scripts第二步在style-checker目录下创建SKILL.md--- name: style-checker description: 在修改JavaScript/TypeScript代码后检查是否符合项目的ESLint规范当用户提到“检查代码规范”“帮我跑一下lint”时使用。 --- # 代码规范检查 ## 适用场景 - 用户修改了JS/TS文件后要求检查代码风格 - 用户要求运行ESLint检查并修复自动可修复的问题 ## 操作步骤 1. 先确认项目根目录存在.eslintrc或eslint.config.js 2. 运行 npx eslint 目标文件 检查问题 3. 如果存在可自动修复的问题运行 npx eslint 目标文件 --fix 4. 将检查结果汇总给用户标注出错文件的路径和规则名 ## 注意事项 - 不要修改ESLint配置文件本身除非用户专门要求 - 如果项目使用pnpm将npx替换为pnpm exec第三步写一个辅助脚本scripts/check.sh用于在多个文件上批量执行检查#!/bin/bash files$ npx eslint $files --format compact第四步在Claude Code会话里测试。启动对话后说“检查一下src目录下所有ts文件的代码规范”Agent读到Skill描述后会自动加载这个技能包按SKILL.md里的步骤执行检查。实测效果很稳定团队同事拷贝过去也能直接用。Skill机制真正牛的地方在于它把“模型不知道你的项目有什么隐规则”这个痛点解决了。没有Skill之前每次都要在对话里反复解释规范有了Skill之后一次沉淀永久复用。5. 这次泄露事件给所有开发者的安全课5.1 于工具厂商AI编程工具的安全边界该怎么定源码泄露事件给AI编程工具厂商提了个醒安全边界不只是“能不能跑”更是“跑起来能碰什么”。终端AI代理拥有文件读写在理拥有命令执行能力也在理但这两项能力叠加在一起意味着它天然拥有生产系统的“半把钥匙”。从设计角度我认为好的Agent安全模型必须满足三条原则。第一最小权限默认情况下Agent只访问当前工作目录不默认越权读取系统敏感区域。第二可审计每个关键操作都要有日志事后能回溯Agent干了什么。第三人在环上破坏性操作、不可逆操作、涉及敏感信息的操作都要有人的确认环节并且不能轻易全跳。这些设计原则不只是厂商需要考虑的我们自己团队在使用这类工具时也要主动把边界画清楚。AI编程工具的账号权限应该和公司代码仓库的分支权限对齐别让Agent拿着一个可以乱写生产分支的令牌到处跑。5.2 于开发者哪些操作是红线结合这次的泄露事件我给自己立了几条明确红线也建议各位对照检查一下。第一条红线不传播、不扩散未授权的泄露物。无论消息多炸裂、截图多震撼转发一次就是在帮违规信息续命。技术社区里真正有价值的讨论不靠这种流量。第二条红线不把泄露代码用于商业产品。就算泄源码里真的有值得借鉴的设计用它做商业开发也绕不开授权问题。一旦追溯起来你产品的整个代码基底都可能受影响。第三条红线不做逆向破解。有人觉得“我不传播只是自己研究”但逆向绕过授权验证或加密机制本身就已经越界。技术研究也有边界研究开源代码和破解闭源产品是两回事。这中间有个很简单的判断标准如果你觉得某个操作需要偷偷摸摸地做那它就大概率踩线了。合规这件事心里有犹豫的时候就别干。5.3 我自己的几点态度和建议折腾了这么久的AI编程工具我的态度一直是工具越好用越要把合规和安全的弦绷紧。想学习Agent架构设计优先看官方文档和技术博客那里有最准确的信息。想看代码实现去找MIT或Apache协议的开源项目完整代码随便读还不用提心吊胆。想扩展工具能力走MCP和Skill这些官方支持的机制比绕路径、改源码稳妥一百倍。想换底层模型优先看官方是否支持多模型接入或合规的第三方兼容方案。还有个容易被忽视的点团队引入AI编程工具时最好提前定好“自动化边界”和“确认策略”。哪些操作允许Agent自主完成哪些必须人工确认这个不提前约定清楚实际跑起来就很容易出事故。我见过一个团队没做这个约定Agent在不知情的情况下改了公共配置文件导致其他同事的开发环境集体出问题。工具虽好规矩更要先行。说实话源码泄露这类事件在技术圈隔三差五就会出现一回热度来得快去得也快。但对我自己来说真正留下的收获是借这个机会我认真把Claude Code的工具调用、Skill机制和权限边界从头到尾梳理了一遍还顺手给团队写了好几个能落地用的Skill。这种“事件驱动式学习”其实挺高效的——流量散去之后留下的知识才是自己的。最后再分享一个小技巧。无论你用Claude Code还是其他AI编程工具都建议从一个小项目开始试用别一上来就拿生产仓库练手。先在玩具项目里摸清它的脾气知道它在什么场景下可靠、什么场景下容易翻车再逐步扩大使用范围。AI工具的使用能力本质上也是靠一次一次实操喂出来的这一点和写代码本身没什么两样。
企业数字化 ERP 产品动态
相关推荐
Webpack逆向分析与电商数据爬取实战 1. 项目背景与核心挑战最近在分析某电商平台数据时,发现其前端采用了webpack打包的JavaScript代码。与传统的前端代码不同,webpack打包后的代码结构复杂,关键业务逻辑被分散在各个模块中,给爬虫工程师带来了不小的挑战。这种场景下… · 2026/11/3 7:51:01
Redis集群客户端hiredis-cluster核心原理与实践 1. 为什么需要专业的Redis集群客户端在分布式系统架构中,Redis Cluster作为官方集群方案已经广泛应用于生产环境。与传统单节点Redis相比,集群模式带来了数据分片和高可用特性,但同时也引入了MOVED/ASK重定向、多节点命令路由等新的复杂度。这… · 2026/11/3 7:51:01
基于单片机的脉搏心跳检测Proteus仿真:从传感器选型到代码联调 简介:这份资源面向需要在Proteus中完成STM32脉搏心跳检测仿真的学习者,适合课程设计、毕业设计或单片机入门进阶阶段使用。方案以STM32F103为核心,用按键模拟脉搏跳动,每按一次即计为一次心跳,数码管实时显示心跳次数&… · 2026/11/3 7:51:01
Opus 5.5、Grok 4.7与GPT-5.6 Sol实测对比:谁是最强AI模型? 从昨天开始,AI圈的朋友应该都没睡好。Opus 5.5、Grok 4.7、GPT-5.6 Sol,三家重量级选手在两天内先后放榜,节奏紧凑得像是商量好的。我刷完三场发布的技术报告和实测数据,第一反应是:这哪是发布,分明是三场复… · 2026/11/3 16:36:58
RTL8367S五口千兆交换机原理图设计:GPIO复用与上电避坑 简介:面向硬件工程师、嵌入式开发者和网络设备学习者,基于RTL8367S芯片的五口交换机参考原理图,可用于理解以太网交换机的硬件架构、接口定义与外围电路组织,适合原理图评审、方案预研和教学参考。压缩包内共1个PDF文件࿰… · 2026/11/3 16:36:58
Prometheus告警规则模板:四层分级与阈值推导实战 告警规则写得好不好,直接决定了值班那晚能不能睡个整觉。我见过太多团队把 Prometheus 部署起来、Grafana 面板拉得漂漂亮亮,结果告警规则要么是从别处抄来的一堆 up 0 ,要么是阈值拍脑袋定的,上线第一周就被误报淹没ÿ… · 2026/11/3 16:36:58
渗透测试高阶技巧与实战经验分享 1. 渗透测试进阶学习路径解析最近完成了为期四天的渗透测试强化训练,这套课程设计针对已有基础的安全从业人员,重点突破Web应用和系统渗透中的高阶技术难点。不同于入门阶段的基础工具使用,本次课程更注重攻击链路的完整构建和对抗思维的培养… · 2026/11/3 16:36:58
DC-4靶机渗透实战:从Web漏洞到Root提权 1. 靶机渗透实战概述DC-4是Vulnhub平台上经典的Linux靶机环境,专为渗透测试实战训练设计。这个靶场模拟了企业环境中常见的Web应用漏洞、权限提升路径和系统配置缺陷,特别适合中高级安全爱好者练习综合渗透技巧。与DC系列前作相比,DC-4在权限… · 2026/11/3 16:36:58
Swisslog百年转型:从电气小厂到物流自动化巨头的历程 1. Swisslog百年转型史:从配电小厂到物流自动化巨头的蜕变1900年,瑞士阿尔劳小镇上,两位电气工程师创立了一家名为SprecherSchuh的小型配电设备厂。谁曾想到,这家最初生产电气控制柜的小作坊,会在125年后发展成为全球物… · 2026/11/3 16:35:57
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46