Codex 写 Commit,你敢全自动?TaoToken 统一 Key 下的 Git Hook 实战
1. 为什么我不建议你把 Commit 全交给 Codex先说结论Codex 生成 Conventional Commits 这件事本身没问题问题出在「生成完直接git commit不给人看」这一步。我见过太多团队在 CI 里塞一个自动提交脚本跑了两周之后git log变成一坨没人看得懂的机器话回滚的时候连哪次提交改了什么都要靠git show一条条翻。这个场景的核心矛盾在于Commit Message 是给人看的但生成它的是机器。Codex 这类模型能读懂 diff能按feat(scope): xxx的格式输出甚至能猜出你这次改的是「修复登录态过期」还是「重构订单校验」。但它猜错的代价比它省下的那点打字时间大得多。我试过在一个内部工具仓库里跑全自动链路结果有一次 Codex 把一次「删除旧迁移脚本」的变更描述成了feat(db): 新增数据迁移支持方向完全反了。如果当时没人工看一眼后面的人按这条 message 去排查问题会被带到沟里。所以这篇要解决的不是「怎么让 Codex 写 Commit」而是「怎么让 Codex 写 Commit 的同时把鉴权、回滚、人工确认这三个边界卡死」。具体拆成三件事第一Codex 调用需要一个稳定的 API 入口和统一的 Key 管理不然每个开发者本地配一套 OpenAI Key轮换和审计都是灾难。这里我用 TaoToken 做统一网关一个 Key 覆盖 Codex 和后续可能接入的其他模型。第二Git Hook 的选择很关键。prepare-commit-msg适合「生成草稿让人改」commit-msg适合「校验格式」而post-commit才是「提交后触发动作」。全自动链路如果挂在pre-commit上一旦生成失败整个提交就卡死体验极差。第三回滚边界。自动提交必须能一键撤销且撤销动作本身不能依赖 AI。我的做法是每次自动提交前打一个轻量 tag回滚时直接git reset --soft到上一个 tag不碰工作区。适合谁看已经在用 Codex 或 OpenAI API 做代码辅助、想进一步自动化提交、但又不想让仓库历史失控的开发者。如果你只是偶尔手动写 Commit这篇的 Hook 部分可以直接跳过看第 2 节的 Key 配置就够了。下面按「问题场景 → TaoToken 前置 → 可复制配置 → 验证 → 排错 → 后续」的顺序展开每一步都有能直接跑的代码。2. TaoToken 统一 Key 与 Codex 接入前置在写 Hook 之前先把 API 入口统一掉。原因很简单Git Hook 是跑在开发者本地的如果每个本地环境都直连不同厂商的 APIKey 泄露风险、额度管理、模型切换都会变成运维负担。TaoToken 在这里的角色是一个兼容 OpenAI 接口规范的网关你拿一个 Key就能在 Codex、Claude Code、Cline 这些工具里复用同一套鉴权。先明确几个地址后面配置里会反复用到官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI 基址https://taotoken.net/api 注意这个不带 UTM 参数配置里写这个模型对话页https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewriteCoding Plan 页https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewriteAPI Keys 管理https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewriteClaude Code 接入说明https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude_codeutm_campaignrewrite拿到 Key 之后先做一件事把它写进环境变量而不是硬编码进脚本。Git Hook 脚本会被提交到仓库里如果 Key 写在脚本里等于把钥匙挂在门上。# 写入 shell 配置macOS/Linux 用 ~/.zshrc 或 ~/.bashrc export TAOTOKEN_API_KEYsk-你的Key export TAOTOKEN_BASE_URLhttps://taotoken.net/apiWindows 下用 PowerShell[Environment]::SetEnvironmentVariable(TAOTOKEN_API_KEY, sk-你的Key, User) [Environment]::SetEnvironmentVariable(TAOTOKEN_BASE_URL, https://taotoken.net/api, User)配完之后验证一下环境变量是否生效echo $TAOTOKEN_API_KEY # 应该输出 sk- 开头的字符串而不是空行这里有个坑要提前说Git Hook 执行时的 shell 环境和你终端里的环境可能不一样。macOS 上 GUI 客户端触发的 Git 操作可能读不到~/.zshrc里的变量。稳妥做法是在 Hook 脚本开头显式 source 一次配置文件或者把 Key 写进仓库外的独立文件比如~/.config/taotoken/envHook 里读取这个文件。我选的是后者因为这样 Key 不依赖 shell 类型换终端也不影响。文件内容就一行# ~/.config/taotoken/env TAOTOKEN_API_KEYsk-你的Key TAOTOKEN_BASE_URLhttps://taotoken.net/api权限设成 600避免其他用户读到chmod 600 ~/.config/taotoken/env到这一步前置就完成了。接下来是 Hook 脚本本身。3. 可复制的 Git Hook 与配置片段这一节是全文的核心给出完整的prepare-commit-msgHook 脚本以及配套的 Codex 调用配置。选prepare-commit-msg而不是commit-msg是因为前者在编辑器打开之前执行生成的草稿会直接填进 Commit Message 编辑框开发者能看到、能改、能删。这就是「半自动」的物理实现。先看目录结构。Hook 放在仓库的.git/hooks/下但为了能版本化管理我建议放在仓库内的.githooks/目录然后用git config core.hooksPath指过去mkdir -p .githooks git config core.hooksPath .githooks这样 Hook 脚本本身也能被提交、被团队共享、被 Code Review。下面是.githooks/prepare-commit-msg的完整内容#!/usr/bin/env bash # prepare-commit-msg: 调用 Codex 生成 Conventional Commits 草稿 # 用法: 正常 git commit脚本会自动填充 message 草稿 set -euo pipefail COMMIT_MSG_FILE$1 COMMIT_SOURCE${2:-} # 只在没有指定 -m 且不是 merge/squash 时生成草稿 if [ -n $COMMIT_SOURCE ]; then exit 0 fi # 读取 TaoToken 配置 ENV_FILE$HOME/.config/taotoken/env if [ ! -f $ENV_FILE ]; then echo [hook] 未找到 $ENV_FILE跳过自动生成 exit 0 fi # shellcheck disableSC1090 source $ENV_FILE if [ -z ${TAOTOKEN_API_KEY:-} ]; then echo [hook] TAOTOKEN_API_KEY 为空跳过 exit 0 fi # 获取暂存区 diff限制长度避免 token 爆炸 DIFF$(git diff --cached --no-color --unified3 | head -c 12000) if [ -z $DIFF ]; then exit 0 fi # 构造 prompt PROMPT$(cat EOF 你是一个 Git Commit Message 生成器。根据下面的代码 diff生成一条符合 Conventional Commits 规范的 Commit Message。 要求 1. 格式为 type(scope): description 2. type 只能是 feat/fix/docs/style/refactor/perf/test/chore 3. description 用中文不超过 50 字 4. 如果变更涉及破坏性修改在 type 后加 ! 5. 只输出一行 message不要解释不要 markdown 代码块 代码 diff EOF ) FULL_PROMPT${PROMPT} ${DIFF} # 调用 TaoToken 的 OpenAI 兼容接口 RESPONSE$(curl -sS --max-time 30 \ -X POST ${TAOTOKEN_BASE_URL}/v1/chat/completions \ -H Authorization: Bearer ${TAOTOKEN_API_KEY} \ -H Content-Type: application/json \ -d $(jq -n \ --arg model gpt-4o-mini \ --arg content $FULL_PROMPT \ {model: $model, messages: [{role: user, content: $content}], temperature: 0.3, max_tokens: 120} ) 2/dev/null) || { echo [hook] API 调用失败跳过自动生成 exit 0 } # 解析返回内容 MESSAGE$(echo $RESPONSE | jq -r .choices[0].message.content // empty 2/dev/null | head -n 1 | tr -d \r) if [ -z $MESSAGE ]; then echo [hook] 未解析到 message跳过 exit 0 fi # 写入 commit message 文件保留原有注释 { echo $MESSAGE echo cat $COMMIT_MSG_FILE } ${COMMIT_MSG_FILE}.tmp mv ${COMMIT_MSG_FILE}.tmp $COMMIT_MSG_FILE echo [hook] 已生成草稿: $MESSAGE给脚本加执行权限chmod x .githooks/prepare-commit-msg这段脚本有几个设计点值得说明。第一set -euo pipefail保证任何一步失败都不会静默通过但关键调用后面都跟了|| exit 0意思是「生成失败就跳过不阻塞提交」。这是全自动链路里最重要的安全阀——AI 挂了不能让人也提交不了代码。第二diff 用head -c 12000截断。大仓库一次提交可能几千行 diff全塞进去 token 费用和延迟都受不了。12000 字符大约对应 3000 token对大多数单次提交够用。第三temperature: 0.3压低随机性Commit Message 不需要创意需要稳定。第四jq用来构造和解析 JSON。如果你的环境没有 jqmacOS 用brew install jqUbuntu 用apt install jq。没有 jq 的话脚本会直接跳过不会报错阻塞。如果你用的是 Codex CLI 而不是裸 API配置方式不同。Codex 的auth.json和config.toml需要指向 TaoToken 的基址。~/.codex/auth.json内容{ OPENAI_API_KEY: sk-你的Key }~/.codex/config.toml内容model gpt-4o-mini model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api/v1 env_key TAOTOKEN_API_KEY这三件套——Base URL、Key、Model ID——在任何接入场景里都要对齐。Base URL 是https://taotoken.net/api/v1Key 从 API Keys 页面拿Model ID 按你实际用的填。Cline 的 MCP 配置、CC Switch 的切换配置本质都是这三个字段的变体。配置写完后git add几个文件然后git commit不带-m编辑器里应该能看到 Codex 生成的草稿。4. 验证一次提交触发与一次失败回滚配置写完不验证等于没写。这一节做两个动作一次正常触发一次故意失败后回滚。先做正常触发。随便改一个文件暂存然后提交echo // test src/utils.js git add src/utils.js git commit此时编辑器会打开第一行应该是类似chore(utils): 添加测试注释的草稿。确认无误后保存退出提交完成。用git log -1 --pretty%B看结果git log -1 --pretty%B # chore(utils): 添加测试注释如果编辑器里是空的说明 Hook 没执行。检查git config core.hooksPath是否指向.githooks以及脚本是否有执行权限。再做失败回滚。这里模拟两种失败API 调用失败、生成内容不可用。模拟 API 失败最简单的方式是把 Key 改错# 临时改错 Key sed -i s/sk-.*/sk-invalid/ ~/.config/taotoken/env git commit此时 Hook 会打印[hook] API 调用失败跳过自动生成编辑器打开时 message 为空你手动写一条即可。提交本身不受影响。验证完把 Key 改回来。第二种失败更隐蔽API 返回了内容但格式不对。比如返回了feat: 修复bug缺 scope或者返回了多行解释。脚本里head -n 1只取第一行能挡掉大部分多行情况但格式校验没做。如果你需要严格校验可以在 Hook 里加一段正则if ! echo $MESSAGE | grep -qE ^(feat|fix|docs|style|refactor|perf|test|chore)(\(.\))?!?: .; then echo [hook] 生成内容不符合规范已丢弃: $MESSAGE exit 0 fi回滚动作本身要独立于 AI。我的做法是在自动提交前打 tag# 在 prepare-commit-msg 之外用一个包装脚本 git tag -f auto-commit-$(date %s) HEAD git commit回滚时# 软回滚到上一个 tag保留工作区改动 git reset --soft $(git tag --sort-creatordate | head -n 1)注意--soft和--hard的区别。--soft只移动 HEAD暂存区和工作区不动适合「提交信息写错了想重来」。--hard会丢弃改动只在确认不要这些代码时用。自动提交场景下永远用--soft。验证回滚git log --oneline -3 # 记下最新一条的 hash git reset --soft HEAD~1 git log --oneline -3 # 最新一条应该消失了但 git status 里改动还在 git status到这里触发和回滚两条路径都验证过了。接下来是排错。5. 常见报错排查401、local proxy failed、reading choices这一节列几个我在实际配置里踩过的报错以及对应的定位方法。这些报错在 TaoToken 接入 Codex 的场景里出现频率最高。401 Unauthorized。最常见的原因是 Key 没读到或者读错了。先确认环境变量source ~/.config/taotoken/env echo $TAOTOKEN_API_KEY curl -sS -X POST $TAOTOKEN_BASE_URL/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d {model:gpt-4o-mini,messages:[{role:user,content:hi}]}如果 curl 返回 401说明 Key 本身有问题去 API Keys 页面重新生成一个。如果 curl 成功但 Hook 里失败说明 Hook 执行环境没读到变量。检查~/.config/taotoken/env的路径和权限以及脚本里source那一行是否写对。local proxy failed。这个报错通常出现在 Codex CLI 或 Cline 这类工具里意思是工具尝试走本地代理但连不上。检查两点一是config.toml里的base_url是否写成了https://taotoken.net/api/v1末尾的/v1不能少二是系统环境变量里有没有残留的HTTP_PROXY/HTTPS_PROXY指向一个不存在的本地端口。用env | grep -i proxy查一下有的话 unset 掉。reading choices 相关报错。典型形式是Cannot read properties of undefined (reading choices)意思是代码在解析响应时没找到choices字段。原因通常是 API 返回了错误结构比如{error: {message: ...}}但调用方直接按成功结构解析。在 Hook 脚本里jq -r .choices[0].message.content // empty的// empty就是防这个的——字段不存在时返回空字符串而不是报错。如果你用的是其他工具检查它是否处理了错误响应。OAuth 相关报错。Codex CLI 某些版本会尝试 OAuth 登录流程如果你用的是 API Key 模式需要在配置里显式关闭 OAuth。检查~/.codex/config.toml里有没有preferred_auth_method apikey这一项没有的话加上。同时确认auth.json里只有OPENAI_API_KEY字段没有残留的 OAuth token。Hook 不执行。先确认git config core.hooksPath的值git config core.hooksPath # 应该输出 .githooks如果输出为空说明没配置。如果输出正确但 Hook 还是不跑检查文件名是否完全匹配——prepare-commit-msg不能写成prepare-commit-msg.shGit 不认扩展名。生成内容为空但无报错。检查 diff 是否为空。git commit时如果暂存区没有改动git diff --cached返回空脚本会直接exit 0。另外检查head -c 12000截断后是否恰好截在 JSON 转义字符中间导致 API 收到非法 JSON。这种情况概率低但可以用jq -n --arg构造请求体来规避脚本里已经是这么做的。排错的核心思路是先隔离是 API 层的问题还是 Hook 层的问题。用 curl 直接打 API通了再查 Hook。这样能快速定位。6. 从半自动到可控自动后续怎么走把 Hook 跑通之后下一步不是「去掉人工确认」而是「把人工确认做得更省力」。全自动提交的风险不在生成质量在于你失去了对仓库历史的即时感知。一旦某次自动提交写错了方向后面的人要花几倍时间纠正。我的建议是分三档推进。第一档就是这篇实现的Hook 生成草稿编辑器里人工确认。第二档是加格式校验和敏感词过滤比如 diff 里出现password、secret、token这类词时Hook 直接拒绝生成并提示人工检查。第三档才是「低风险变更自动提交」比如只改.md文件或只改注释的提交可以跳过人工确认但依然打 tag 保留回滚点。如果你团队里用 Claude Code 做代码审查可以把 Commit Message 的生成和审查串起来。Claude Code 的接入配置和 Codex 类似Base URL 和 Key 复用同一套Model ID 换成对应的即可。具体接入方式在 Claude Code 接入说明页有完整示例。长期跑自动化的团队建议看一下 Coding Plan 的额度模型比按次调用更适合高频场景。控制台里能看到每次调用的 token 消耗方便估算成本。最后说一个我自己的习惯每次改 Hook 脚本后先在一个临时仓库里跑一遍完整流程确认触发和回滚都正常再推到团队仓库。Hook 脚本是基础设施它出问题的影响面比业务代码大得多。宁可多花十分钟验证也不要让一个坏掉的 Hook 卡住所有人的提交。

相关新闻

odoo20 windows postgresql

odoo20 windows postgresql

postgresql16 odoo20 night Index of /20.0/nightly/ navicat (1) 360卸载已经安装的postgresql 卸载odoo 安装postgresql, 启动postgresql psql.exe -U postgres CREATE USER odoo20 WITH PASSWORD your_strong_password CREATEDB; ALTER USER odoo20 NOSUP…

2026/10/7 7:57:54 阅读更多 →
Delphi 读写 Excel 总报错?用 TaoToken 统一 Key 打通数据导出链路

Delphi 读写 Excel 总报错?用 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/7 7:57:54 阅读更多 →
STM32嵌入式C++调试实战:VSCode+GDB+OpenOCD环境搭建与问题排查

STM32嵌入式C++调试实战:VSCode+GDB+OpenOCD环境搭建与问题排查

1. 从“还差活滴”说起:这个项目到底在做什么“哟哟哟,咱们还差活滴”——这句话放在嵌入式开发的语境里,其实特别传神。它说的不是别的,就是代码写完了、编译也过了、板子也上电了,但程序跑起来就是不对劲&#xff0c…

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

最新新闻

铝电解电容选型设计规范

铝电解电容选型设计规范

前言文档版本:V1.0编制目的:规范铝电解电容器选型、电路设计、降额设计、PCB布局及可靠性验证,明确寿命、纹波电流、温度、反压等关键限制,规避鼓包漏液、容量衰减、ESR上升、爆炸失效等风险。适用范围:直插有极性铝电…

2026/10/7 8:35:19 阅读更多 →
千问无门槛券申领通道,限新人,【新人5047】,日常消费都能抵

千问无门槛券申领通道,限新人,【新人5047】,日常消费都能抵

​ 先把千问这个APP弄在手机里,然后在对话框里输入10月专属口令内容(新人5047)后,会看到"待领取"按钮,按照页面指引完成账号绑定,成功后8面额的券就会自动发放到你的卡包中,整个流程也就完成了。快去试一试吧…

2026/10/7 8:35:19 阅读更多 →
开源 Probe the Harness: 论文初稿都写好了,我才发现“全面碾压”是 4 个 bug 堆出来的

开源 Probe the Harness: 论文初稿都写好了,我才发现“全面碾压”是 4 个 bug 堆出来的

你的 RL 训练日志,可能正在对你撒谎。 这是一次真实的翻车复盘,附赠一个开源工具 PTH(Probe The Harness):pip install probe-the-harness,一条命令扫描你的 verl 日志,把藏在"正常日志&qu…

2026/10/7 8:35:19 阅读更多 →
Cell Rep Med | 胰腺癌多模态图谱揭示TIMP-1主导的促肿瘤免疫训导轴

Cell Rep Med | 胰腺癌多模态图谱揭示TIMP-1主导的促肿瘤免疫训导轴

胰腺导管腺癌(PDAC)最难处理的地方之一,是它很早就形成免疫抑制性肿瘤微环境,而且对很多以T细胞为中心的免疫治疗反应并不理想。 这篇 Cell Reports Medicine 的工作把问题进一步拆开:胰腺癌细胞究竟通过哪些分泌因子去…

2026/10/7 8:35:19 阅读更多 →
J. Adv. Res. | 血液cfDNA甲基化双模型实现胃肠道早癌和癌前病变筛查

J. Adv. Res. | 血液cfDNA甲基化双模型实现胃肠道早癌和癌前病变筛查

胃癌和结直肠癌的筛查难点很现实:内镜准确,但侵入性强、资源消耗大;血清标志物方便,但早期敏感性有限;粪便检测适合部分场景,却很难同时覆盖胃癌和结直肠癌。 这篇文章提出的思路是用血液cfDNA甲基化做一个…

2026/10/7 8:35:19 阅读更多 →
字母表几何生成论——26全部由圆·三角·线三零基元构成

字母表几何生成论——26全部由圆·三角·线三零基元构成

BSD 字母表几何生成论——0 即圆V 即三角两大主形构成全部字母圆对应 0 空三角对应 0 反(围出最小的间)直线即 0 意边界为二者公共边字形即本体L0 总本源层六系核心公理Step321L0 层:总本源层 六系核心公理(元理论级符号生成&…

2026/10/7 8:34:18 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

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

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

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

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

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

2026/10/7 1:02:00 阅读更多 →

周新闻

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/6 7:15:40 阅读更多 →
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/6 5:29:09 阅读更多 →
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/6 6:26:51 阅读更多 →

月新闻

我发现了一个新思路:用 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/6 8:21:32 阅读更多 →
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/6 4:21:51 阅读更多 →
黑夜航拍船只数据集训练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/6 1:18:13 阅读更多 →