Obra Superpowers实战:用Java为团队打造统一的AI代码助手与自动化平台(含源码)
1. 从“AI 拍脑袋写代码”到团队级自动化平台团队里用 AI 写代码最怕的不是它写不出来而是它写得太“自由”。我见过太多场景同一个需求张三让 AI 生成一版李四让 AI 生成一版风格、异常处理、日志规范全不一样更麻烦的是AI 有时候会“顺手”改掉核心配置或者跳过测试直接提交。个人项目里这叫效率团队仓库里这叫事故。Obra Superpowers 这个项目解决的就是这个问题。它本质上是一套给 AI 编码助手用的“技能系统”Skills System通过结构化的 SKILL.md 文件强制 AI 遵循“先脑暴、再计划、TDD、子代理执行、代码审查”的标准流程。你可以把它理解成给 AI 套了一个紧箍咒想偷懒门儿都没有。但 Superpowers 原生是围绕 Claude Code 这类 CLI 工具设计的团队要用起来光靠每个人本地装插件远远不够。技能版本不一致、审计日志缺失、API Key 散落在各人电脑上、生成结果无法沉淀——这些都是企业级落地的拦路虎。所以我在中间加了一层 Java 网关用 Spring Boot 把 Superpowers 的工程化理念“翻译”成团队可管理、可审计、可复现的平台能力。这篇文章会带你从零搭起这套平台先讲清楚 Obra Superpowers 的核心机制再给出完整的 Java 工程目录和关键配置片段然后演示一次从提交需求到自动生成补丁的完整验证流程最后把踩过的坑和排查方法一并奉上。目标很明确让你在自有仓库内快速复现一个可维护的 AI 代码助手平台。2. Obra Superpowers 核心机制与 Java 网关层设计2.1 Superpowers 到底是什么Obra Superpowers 是 Jesse Vincent 发起的一个开源项目GitHub 上已经积累了相当高的关注度。它的核心不是模型本身而是一套“技能库”Skills Library。每个技能都是一个 SKILL.md 文件包含四个关键部分Purpose目的、Context触发条件、Methodology执行步骤、Anti-patterns严禁事项。这些技能分成四大类。测试类技能强制 AI 走 TDD 流程——先写失败测试RED再写实现GREEN最后重构REFACTOR。调试类技能要求 AI 用系统化四步法复现问题、加 instrumentation 收集数据、根因分析、用测试验证假设彻底告别“猜谜式 debug”。协作类技能包括 /brainstorm、/write-plan、subagent-driven-development支持用 git worktrees 做并行分支开发。元技能最野——AI 能自己读一本书然后生成对应的 SKILL.md 文件以后项目里自动套用这些规范。Superpowers 有一条核心规则原文是“If a skill applies, even 1% chance, you MUST use it.” 翻译过来就是只要有 1% 的可能性匹配就必须调用技能检查。这条规则是整套系统的灵魂也是 Java 网关层要重点落实的逻辑。2.2 为什么不能直接用 Claude Code 插件你可能会问既然 Superpowers 是 Claude Code 插件让团队成员各自安装不就行了干嘛还要用 Java 造轮子兄弟企业级应用和个人玩具最大的区别就是管控。想象一下这个场景小张用 v3.4.0 的技能集小李还在用 v2.1.0两个人生成的代码风格天差地别审计的时候你根本说不清哪版是对的。更严重的是每个开发都自己配 API Key哪天有人离职了密钥还在他本地机器上这风险谁担还有流程割裂的问题。AI 生成的计划、测试用例、审查报告散落在各个开发者的本地磁盘没法沉淀成团队知识库。Jira 里看不到 AI 的产出代码审查报告也不会自动发到飞书或钉钉。这些缺口都需要一个中间层来补。2.3 Java 网关层的四件事我在中间加的这层 Java 网关核心做四件事。第一统一技能配置中心。团队用哪些技能、什么版本、强制检查项是什么全在服务端配置客户端无权擅自更改。第二权限与审计。谁调用了 AI、用了什么技能、改了哪几行代码、基于什么上下文全部落库。第三企业 SSO 集成。对接公司 AD/LDAP离职自动回收所有 AI 访问权限。第四流水线打通。AI 生成的计划自动转 Jira Ticket代码审查报告自动发飞书/钉钉。这套架构用 Spring Boot 实现轻量但够猛。下面直接上硬菜。3. 可复制配置工程目录、依赖与关键片段3.1 工程目录结构先看整体目录你可以直接照着建superpowers-java-gateway/ ├── pom.xml ├── src/main/java/com/team/ai/ │ ├── AiGatewayApplication.java │ ├── config/ │ │ ├── TaoTokenProperties.java │ │ ├── SkillRegistryConfig.java │ │ └── SecurityConfig.java │ ├── domain/ │ │ ├── Skill.java │ │ ├── ExecutionPlan.java │ │ └── PlanStep.java │ ├── engine/ │ │ ├── SkillEngine.java │ │ └── SubagentScheduler.java │ ├── adapter/ │ │ └── TaoTokenClient.java │ ├── audit/ │ │ └── AIOperationAuditAspect.java │ └── controller/ │ └── PlanController.java ├── src/main/resources/ │ ├── application.yml │ └── skills/ │ ├── test-driven-development.md │ ├── systematic-debugging.md │ └── brainstorming.md └── docker-compose.yml3.2 Maven 依赖pom.xml 里核心依赖如下Spring Boot 3.2 起步dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-jpa/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-aop/artifactId /dependency dependency groupIdorg.postgresql/groupId artifactIdpostgresql/artifactId scoperuntime/scope /dependency dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency /dependencies3.3 application.yml 关键配置这里把模型接入层统一指向 TaoToken 的 API 网关Base URL 和 Key 都从环境变量注入避免硬编码server: port: 8080 spring: datasource: url: jdbc:postgresql://localhost:5432/ai_gateway username: ${DB_USER} password: ${DB_PASSWORD} jpa: hibernate: ddl-auto: update taotoken: base-url: https://taotoken.net/api api-key: ${TAOTOKEN_API_KEY} default-model: claude-sonnet-4-20250514 timeout-seconds: 120 skill: registry-path: classpath:skills/ enforce-mandatory: true version-lock: 3.4.03.4 模型适配器TaoTokenClient这是 Java 层调用模型的统一入口封装了 Base URL、Key 和 Model ID 三件套Component Slf4j public class TaoTokenClient { Value(${taotoken.base-url}) private String baseUrl; Value(${taotoken.api-key}) private String apiKey; Value(${taotoken.default-model}) private String defaultModel; private final RestClient restClient RestClient.create(); public AIResponse executeWithSkills(String prompt, String skillContext, String worktreePath) { MapString, Object body new HashMap(); body.put(model, defaultModel); body.put(messages, List.of( Map.of(role, system, content, skillContext), Map.of(role, user, content, prompt) )); body.put(temperature, 0.2); return restClient.post() .uri(baseUrl /v1/chat/completions) .header(Authorization, Bearer apiKey) .header(Content-Type, application/json) .body(body) .retrieve() .body(AIResponse.class); } }注意这里的baseUrl是https://taotoken.net/api后面拼/v1/chat/completions就是完整的请求地址。Key 从环境变量TAOTOKEN_API_KEY读取团队统一在配置中心下发个人本地不落盘。3.5 技能引擎强制触发逻辑SkillEngine 是平台的大脑负责根据用户输入匹配 Superpowers 技能。核心是那条“1% 规则”Service Slf4j public class SkillEngine { Autowired private SkillRepository skillRepository; public ListSkill detectApplicableSkills(String userInput, String context) { ListSkill allSkills skillRepository.findAllActive(); ListSkill matched new ArrayList(); for (Skill skill : allSkills) { boolean keywordMatch skill.getTriggerKeywords().stream() .anyMatch(kw - userInput.toLowerCase().contains(kw.toLowerCase())); boolean contextMatch checkContextPattern(context, skill.getCategory()); if (keywordMatch || contextMatch || isAmbiguousButPotentiallyRelated(userInput, skill)) { matched.add(skill); log.info([Skill Trigger] 检测到技能: {} (置信度: {}), skill.getSkillId(), calculateConfidence(userInput, skill)); } } matched.sort(Comparator.comparingInt(s - s.getCategory().getPriority())); return matched; } public void enforceMandatorySkills(String taskType, ExecutionPlan plan) { if (taskType.contains(coding) || taskType.contains(implementation)) { Skill tddSkill skillRepository.findById(test-driven-development) .orElseThrow(() - new SkillNotFoundException(TDD技能未配置)); if (tddSkill.isMandatory()) { PlanStep redStep new PlanStep(red, test-driven-development, RED: 编写失败的测试用例, false, null, null); plan.getSteps().add(0, redStep); log.info([Mandatory Skill] 强制注入TDD流程到计划 {}, plan.getPlanId()); } } } private boolean isAmbiguousButPotentiallyRelated(String input, Skill skill) { if (skill.getSkillId().equals(brainstorming) (input.contains(写) || input.contains(实现) || input.contains(功能))) { return true; } if (skill.getSkillId().equals(systematic-debugging) (input.contains(bug) || input.contains(报错) || input.contains(问题))) { return true; } return false; } }3.6 子代理调度器并行开发SubagentScheduler 负责用 git worktrees 做并行任务隔离每个子任务一个独立工作区互不干扰Service public class SubagentScheduler { Autowired private GitWorktreeManager gitManager; Autowired private TaoTokenClient aiClient; public ListSubagentResult executeParallelSubagents(ExecutionPlan plan, ListSubTask subTasks) { ListFutureSubagentResult futures new ArrayList(); ExecutorService executor Executors.newFixedThreadPool(subTasks.size()); for (SubTask task : subTasks) { FutureSubagentResult future executor.submit(() - { String worktreePath gitManager.createWorktree( plan.getProjectId(), subagent- task.getTaskId() - System.currentTimeMillis() ); try { String context buildSkillContext(task.getRequiredSkills()); AIResponse response aiClient.executeWithSkills( task.getDescription(), context, worktreePath ); boolean specCompliant validateSpecCompliance(response, task); boolean codeQuality validateCodeQuality(response); return new SubagentResult(task.getTaskId(), worktreePath, response.getOutput(), specCompliant codeQuality); } catch (Exception e) { log.error(子代理执行失败: {}, task.getTaskId(), e); return new SubagentResult(task.getTaskId(), worktreePath, e.getMessage(), false); } }); futures.add(future); } ListSubagentResult results futures.stream() .map(f - { try { return f.get(30, TimeUnit.MINUTES); } catch (Exception e) { return new SubagentResult(null, null, Timeout, false); } }) .collect(Collectors.toList()); mergeSuccessfulWorktrees(plan, results); executor.shutdown(); return results; } private String buildSkillContext(ListString skillIds) { StringBuilder sb new StringBuilder(); sb.append(You MUST follow these Superpowers skills exactly:\n\n); for (String skillId : skillIds) { Skill skill skillRepository.findById(skillId) .orElseThrow(() - new RuntimeException(Skill not found: skillId)); sb.append(## ).append(skill.getName()).append(\n); sb.append(skill.getContent()).append(\n\n); } sb.append(IF A SKILL APPLIES, YOU DO NOT HAVE A CHOICE. YOU MUST USE IT.\n); return sb.toString(); } }4. 验证请求从提交到自动生成补丁的完整流程4.1 启动服务与准备环境先把 PostgreSQL 和 Redis 拉起来docker-compose.yml 里已经配好docker-compose up -d postgres redis export TAOTOKEN_API_KEY你的Key export DB_USERai_gateway export DB_PASSWORDyour_password mvn spring-boot:run服务启动后监听 8080 端口。你可以先用 curl 测一下健康检查curl http://localhost:8080/actuator/health返回{status:UP}就说明基础环境通了。4.2 提交一个代码生成需求假设我们要给一个支付模块加“退款幂等校验”功能。提交请求如下curl -X POST http://localhost:8080/api/plans \ -H Content-Type: application/json \ -d { projectId: payment-service, requesterId: zhangsan, requirement: 为退款接口增加幂等校验防止重复退款需要写单元测试 }服务端收到请求后SkillEngine 会先做技能匹配。因为需求里包含“写单元测试”TDD 技能被强制触发因为包含“防止重复退款”systematic-debugging 的防御性检查也会被关联。返回的 planId 类似plan-20250612-001。4.3 查看执行计划用 planId 查询计划详情curl http://localhost:8080/api/plans/plan-20250612-001返回的 JSON 里steps 数组会包含类似这样的结构{ planId: plan-20250612-001, status: PLANNING, steps: [ {stepId: red, skillId: test-driven-development, description: RED: 编写失败的测试用例, completed: false}, {stepId: green, skillId: test-driven-development, description: GREEN: 实现幂等校验逻辑, completed: false}, {stepId: refactor, skillId: test-driven-development, description: REFACTOR: 重构并补充边界测试, completed: false} ] }注意第一步就是 RED这是强制注入的AI 没有选择余地。4.4 触发执行并生成补丁调用执行接口curl -X POST http://localhost:8080/api/plans/plan-20250612-001/execute后台会启动子代理调度器为每个步骤创建独立的 git worktree。执行完成后你会在项目目录下看到类似worktrees/subagent-red-xxx的工作区里面是 AI 生成的测试文件和实现代码。最终合并成功后平台会自动生成一个补丁文件git diff main..ai/plan-20250612-001 refund-idempotent.patch4.5 验证结果打开补丁文件你应该能看到新增的测试类RefundIdempotentTest.java里面包含重复退款的断言修改后的RefundService.java增加了基于 Redis 的幂等键校验以及对应的配置文件变更。整个过程从提交到补丁生成实测下来大约 3 到 5 分钟取决于模型响应速度。5. 本篇常见错排查5.1 401 Unauthorized这是最常见的报错通常出现在 TaoTokenClient 调用模型时。日志里会看到401 Unauthorized: {error:invalid_api_key}排查步骤先确认环境变量TAOTOKEN_API_KEY是否真的注入到了进程里用echo $TAOTOKEN_API_KEY检查。如果是在 IDE 里跑检查 Run Configuration 的 Environment Variables 有没有配。其次确认 Key 没有多余空格或换行。最后确认 Base URL 拼写正确是https://taotoken.net/api不要漏掉/api或者多加/v1。5.2 local proxy failed这个报错一般出现在网络层日志类似local proxy failed: connection refused说明 Java 进程无法直连到 API 网关。检查本机网络是否正常确认没有配置奇怪的系统级代理。如果是公司内网确认防火墙放行了 443 出站。另外检查application.yml里的timeout-seconds是否设得太短网络抖动时容易误报。5.3 reading choices 相关报错如果日志里出现reading choices或choices field missing说明模型返回的 JSON 结构不符合预期。常见原因是请求体里messages格式不对或者model字段填了一个不存在的模型 ID。检查default-model配置确认模型名称拼写正确。另外确认请求头Content-Type是application/json。5.4 OAuth 相关报错如果看到OAuth token expired或invalid_grant说明 SSO 集成环节出了问题。检查 AD/LDAP 配置里的 client id 和 secret 是否过期。如果是本地开发环境可以临时关闭 SSO 校验在SecurityConfig里把对应 profile 设为dev。5.5 技能未触发有时候 AI 明明应该走 TDD但计划里没有 RED 步骤。检查skill.enforce-mandatory是否为true以及version-lock是否和技能文件版本匹配。另外确认skills/目录下的 SKILL.md 文件被正确加载可以在启动日志里搜索[Skill Registry]关键字。5.6 git worktree 创建失败报错类似fatal: xxx is already checked out。这是因为同一个分支被多个 worktree 占用。检查GitWorktreeManager里的分支命名逻辑确保每次创建都带时间戳或 UUID。另外定期清理超过 24 小时的 worktree避免磁盘占满。6. 接入 TaoToken 与后续扩展这套平台能跑起来模型接入层是关键。我选 TaoToken 的原因很简单它提供了统一的 API 入口Base URL 是https://taotoken.net/apiKey 和 Model ID 三件套配齐就能用不需要在代码里维护多个厂商的适配逻辑。对于团队来说这意味着换模型只需要改配置不用动代码。如果你还没配 Key可以去 TaoToken 的 API Keys 页面生成一个然后在环境变量里注入。接入文档里有详细的请求示例和参数说明照着配就行。想先验证模型效果的话模型对话页面可以直接测试确认返回格式符合预期再接入 Java 层。对于长期做编码和 Agent 的团队Coding Plan 提供了更稳定的配额和优先级适合把 AI 助手当成日常开发的基础设施来用。后续扩展方向有几个一是把审计日志接到公司的 SIEM 系统做实时告警二是把技能市场做成内部 Git 仓库支持团队自定义 SKILL.md三是把子代理调度器改成基于 Kubernetes Job 的模式支持更大规模的并行任务。这套骨架已经搭好剩下的就是按团队需求往里填肉了。源码我放在 GitHub 上了包含 Spring Boot 完整工程、React 管理界面、Docker Compose 一键部署以及基于 Superpowers v3.4.0 的示例技能配置集。有问题的评论区见我看到都会回。

相关新闻

电力电子技术课后答案避坑指南:从波形推导到Python验证

电力电子技术课后答案避坑指南:从波形推导到Python验证

简介:这份资源是《电力电子技术》第五版(王兆安、刘进军主编)的课后习题详细答案,面向正在学习该课程的本科生、备战考研或期末考试的考生,以及需要快速核对习题思路的自学者。内容覆盖电力电子器件、整流电路、PWM技术…

2026/10/15 13:50:26 阅读更多 →
openrig:Node.js+tmux搭建本地AI编码环境与多模型切换

openrig:Node.js+tmux搭建本地AI编码环境与多模型切换

1. 从“openrig”说起:一个被低估的本地AI编码环境搭建思路 第一次看到“openrig”这个词,我下意识地把它拆成了“open”和“rig”两部分。在开发者的语境里,“rig”通常指一套组装好的设备或环境配置,比如“mining rig”是矿机&a…

2026/10/15 13:49:24 阅读更多 →
Pandas按名取数:loc、iloc、at等五种索引器原理与实战

Pandas按名取数:loc、iloc、at等五种索引器原理与实战

1. 项目概述:为什么“按名取数”是Pandas最常踩坑却最该掌握的基本功你有没有遇到过这样的场景:刚用pd.read_csv()读进一个表格,第一反应是df.head()看看数据长啥样,结果发现索引不是默认的0、1、2……而是北京、上海、广州&#…

2026/10/15 13:49:24 阅读更多 →

最新新闻

OpenShell:面向开发者的Windows桌面增强工具

OpenShell:面向开发者的Windows桌面增强工具

1. OpenShell 是什么?它不是 Shell,更不是“开源外壳” OpenShell 这个名字,乍一听容易让人误以为是某种 Linux 或 macOS 的 shell 替代品——比如像 zsh、fish 那样的命令行解释器,或者某个带图形界面的终端模拟器。但事实恰恰相…

2026/10/15 14:31:41 阅读更多 →
OpenShell:跨平台终端环境协同方案详解

OpenShell:跨平台终端环境协同方案详解

1. OpenShell 是什么:一个被严重误读的“跨平台终端体验重构计划”OpenShell 这个名字在当前技术社区里,正经历一场典型的语义漂移——它既不是某个已发布的开源项目官方名称,也不是微软、苹果或Linux发行版的正式组件代号。但恰恰是这种模糊…

2026/10/15 14:31:41 阅读更多 →
FFmpeg转码核心技术解析与实战应用

FFmpeg转码核心技术解析与实战应用

1. 为什么需要系统掌握FFmpeg转码?第一次接触FFmpeg时,我像大多数人一样只会用简单的命令转换视频格式。直到有次客户要求将4K HDR素材转码为适配老旧机顶盒的MPEG-2格式,才发现参数配置不当会导致画质严重劣化。那次经历让我意识到&#xff…

2026/10/15 14:31:41 阅读更多 →
ShardingJDBC分库分表入门:分片键设计、配置实战与生产避坑指南

ShardingJDBC分库分表入门:分片键设计、配置实战与生产避坑指南

这两年总有同事问我,说订单表已经两千多万行了,到底要不要拆表?我的回答通常是:先别急着拆,先想想你的数据访问规律到底是什么。很多人被性能问题逼到分库分表面前,却没搞清楚中间件到底是怎么工作的&#…

2026/10/15 14:31:41 阅读更多 →
Intel SGX入门:硬件级可信执行环境原理与落地实践

Intel SGX入门:硬件级可信执行环境原理与落地实践

1. 从一个真实困惑说起:为什么需要关注SGX我第一次接触Intel SGX是在做一个跨平台数据协作项目的时候。当时的需求很朴素:多个参与方想联合计算一个统计结果,但谁都不愿意把原始数据交出去。我们试过同态加密,性能损耗大到没法接受…

2026/10/15 14:31:41 阅读更多 →
基于 GPU 算力集群利用率的反向限流:防止私有化推理卡池进入热崩溃

基于 GPU 算力集群利用率的反向限流:防止私有化推理卡池进入热崩溃

大模型私有化部署在各行各业落地过程中,绝大多数架构师在传统微服务中积累的限流经验都会彻底失效。传统的 API 网关限流通常基于固定的 QPS 或并发连接数,比如给某个接口配置 200 QPS 的令牌桶。但这套逻辑放在大模型推理集群上几乎等于自杀。 在 LLM 推…

2026/10/15 14:30:40 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →