1. Codex 网页设计交付流程里,Skill 到底解决什么问题
Codex 现在默认的前端能力已经不算弱。我拿同一份个人资料做过对照:不给任何第三方 Skill,直接让 Codex CLI 读input/vic-source.md,它自己就能跑完信息整理、页面结构、视觉设计、响应式适配,甚至调用浏览器检查桌面端和移动端,发现标题拥挤后回头改 CSS 再验证。黑底加荧光黄绿的方案,把$42K ARR、2,800+ 用户、3.2M 摄影浏览提成独立指标,这些都不是我教的。
所以问题就变成了:Agent 已经会做页面,再叠 Skill 还能提升什么?
我的实测结论是,Skill 提升的不是"会不会做",而是"按什么标准做、做到什么程度、最后怎么检查"。这三个 Skill 分别卡在交付流程的三个节点上:
design-taste-frontend:给页面加设计约束,把"画一张海报"变成"搭一套可维护的组件系统"humanizer:只动文案不动页面,去掉 AI 写作痕迹和空洞升华better-interface:交付前做界面 Review,抓出肉眼容易漏掉的可访问性和交互状态问题
适合谁看这篇:已经在用 Codex CLI 做前端、想让输出更稳定的人;被 AI 文案的"在城市之间,做产品,也做记录"这类句子尬到过的人;以及每次交付前都要手动检查对比度、焦点环、aria 状态的强迫症选手。
不适合谁:只想让 AI 随便生成一个静态页、不打算复用工作流的人。这种情况下 Codex 默认能力就够了,装 Skill 反而增加变量。
整条链路我用 TaoToken 统一 Key 接入,一个 API Key 跑通模型调用,省得在多个平台之间切来切去。下面按"前置准备 → 配置 → 验证 → 排障"的顺序拆开讲,每一步都能直接复制。
2. TaoToken 统一 Key 前置准备与 Codex 环境接入
先说清楚为什么要用统一 Key。Codex CLI 这类工具在跑 Skill 的时候,一次任务里可能触发多轮模型调用:读资料、生成页面、调浏览器检查、根据 Review 结果修复。如果每换一个模型或工具就换一套鉴权,配置会散得到处都是。TaoToken 的做法是给你一个 Base URL 加一个 Key,模型 ID 按需切换,Codex 侧只认这一套。
官网入口在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api ,注意 API 地址不带 UTM 参数,配置的时候别把查询串带进去。
前置准备分三步。
第一步,拿 Key。进控制台创建 API Key,路径是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,创建完复制出来,只显示一次。如果你还没想好模型,可以先去模型对话页 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite 试一下同一个 Key 能不能正常出结果,确认通道没问题再往 Codex 里配。
第二步,确认 Codex CLI 版本。我这次用的是 Codex 0.149.1,模型走 GPT-5.6 Sol High。版本差异会影响配置文件位置,先codex --version看一眼。低于 0.140 的建议先升级,老版本的 auth 处理和新版不一致,容易在排障时误判。
第三步,决定 Skill 的安装范围。所有第三方 Skill 我都装在当前项目的.agents/skills/下,不写全局。原因很实际:每轮只增加一个变量,避免测试 Skill 污染其他 Codex 项目。Project 级安装还有个好处,删项目目录就等于清理干净,不留残留。
环境变量这块,Codex 支持从 shell 读,也支持写进配置文件。我倾向写配置文件,因为 Skill 执行时可能起子进程,环境变量不一定继承得到。下面第三节给完整片段。
有一点要提醒:TaoToken 在这里的角色是统一的模型调用通道,不是替代 Codex 或编辑器。Codex 还是那个 Codex,Skill 还是那些 Skill,TaoToken 只是让鉴权和模型切换这件事收敛到一个 Key 上。
3. 可复制的 Skill 配置片段与 Codex 调用示例
这一节是全文最该抄的部分。配置分两块:Codex 侧的模型接入,和 Skill 侧的安装与调用。
先看 Codex 的模型接入配置。Codex CLI 的配置目录在用户主目录下的.codex/,里面有个config.toml。把下面这段按你的实际路径填进去:
# ~/.codex/config.toml model = "gpt-5.6-sol" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat"base_url一定写https://taotoken.net/api,不要带任何查询参数。env_key指向环境变量名,Key 本身不写进配置文件,避免误提交。
然后设置环境变量。Windows PowerShell 用:
$env:TAOTOKEN_API_KEY = "sk-你的Key"macOS 或 Linux 用:
export TAOTOKEN_API_KEY="sk-你的Key"想持久化就写进 shell 的 profile 文件,或者 Windows 的系统环境变量面板。
如果你用的是 Codex 的auth.json方式(部分版本走这个),结构是这样:
{ "OPENAI_API_KEY": "sk-你的Key", "OPENAI_BASE_URL": "https://taotoken.net/api" }三件套对齐检查:Base URL 是https://taotoken.net/api,Key 是控制台创建的那串,Model ID 是gpt-5.6-sol。这三个任何一个错位,都会在下一节验证时报错。
Skill 安装。三个 Skill 都走npx skills add,Project 级:
# 设计约束 npx skills add https://github.com/Leonxlnx/taste-skill \ --skill "design-taste-frontend" # 文案优化 npx skills add https://github.com/blader/humanizer # 交付 Review,只装本次需要的 7 个 npx skills add jakubkrehel/skills \ --skill better-interface \ --skill better-accessibility \ --skill better-layout \ --skill better-writing \ --skill better-typography \ --skill better-colors \ --skill better-ui装完检查.agents/skills/目录,确认每个 Skill 下有SKILL.md。
调用示例。Codex CLI 里用$前缀触发 Skill。设计阶段:
$design-taste-frontend 读取当前工作目录中的 input/vic-source.md。 请根据其中提供的资料,为 Vic 制作一个完整的单页个人主页, 并将全部文件保存到:outputs/01-taste/ 要求: 1. 页面使用 HTML、CSS、JavaScript 实现,可以直接在本地浏览器打开; 2. 请严格按照 design-taste-frontend Skill 的设计原则完成页面设计; 3. 页面需要清晰呈现人物介绍、重要经历、产品/作品、关键数据、 内容创作、工具/设备和社交链接; 4. 同时兼顾桌面端和移动端浏览; 5. 不得添加 vic-source.md 中不存在的人物经历、数字、产品信息; 6. 不参考 outputs/00-baseline,从原始资料独立完成这一版; 7. 不要主动调用其他第三方自定义 Skill。文案阶段,关键是"只改文字不动结构":
$humanizer 请基于 outputs/01-taste/ 中已经完成的个人主页, 使用 humanizer Skill 优化页面中的用户可见文案。 请先将 outputs/01-taste/ 的最终交付文件完整复制到: outputs/02-humanizer/ 之后只修改 outputs/02-humanizer/。 本轮要求: 1. 只优化页面文案,不改变页面整体布局、CSS 视觉系统、 组件结构和交互逻辑; 2. 使用 humanizer Skill 去除明显的 AI 写作痕迹、空洞升华、 营销式表达和不自然的措辞; 3. 尽量使用具体动作、真实事实和已有数字表达人物经历; 4. 不得添加 input/vic-source.md 中不存在的事实; 5. 不要为了"更像人"而改变原始信息含义; 6. 页面整体表达保持自然、简洁,符合个人主页而不是企业宣传稿的语气。 完成后,请另外告诉我:哪些文案被修改、原文是什么、 修改后是什么、为什么修改。Review 阶段,第一次只审不改:
$better-interface 请对 outputs/02-humanizer/ 中已经完成的个人主页 做一次 full interface review。 这一轮只审查,不修改任何文件。 要求: 1. 不修改 outputs/02-humanizer/ 中的 HTML、CSS、JavaScript、 图片或其他文件; 2. 不复制文件到 outputs/03-final/,03-final 暂时保持为空; 3. 可以读取页面代码、原始资料和必要的 Skill, 也可以使用本地浏览器做桌面端、移动端或主题检查; 4. 请按照 better-interface 的完整审查流程,重点检查: Accessibility / Layout / Writing / Typography / Colors / UI; 5. 所有问题必须基于当前实际页面,不要为了凑数量而提出修改; 6. 不要重新设计页面,也不要把纯审美偏好当成错误。 请把发现的问题分成三类: A. 明确需要修复的问题 B. 建议优化但不影响正常使用的问题 C. 纯审美偏好或可选建议 本轮完成 Review 后停止,不要自动修复。这三段提示词的核心思路是控制变量:每轮只加一个 Skill,每轮只改一个维度,输出目录分开。这样出问题时能快速定位是哪一步引入的。
4. 验证请求与端到端成功结果
配置完别急着跑完整任务,先做一次最小验证,确认 TaoToken 通道通了。
最直接的方式是 curl 打一次 chat 接口:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-5.6-sol", "messages": [{"role": "user", "content": "回复 OK 两个字母"}] }'返回里能看到choices[0].message.content是OK,说明 Key、Base URL、Model ID 三件套对齐了。这一步过了,再进 Codex。
Codex 侧验证,直接跑一个轻量任务:
codex exec "读取 input/vic-source.md,只输出文件里出现过的数字,不要做别的"如果模型正常返回那些数字,说明 Codex 已经通过 TaoToken 拿到模型响应。
然后是端到端。我按00-baseline → 01-taste → 02-humanizer → 03-final四个目录跑完整流程,每轮结果如下。
Baseline 轮,Codex 默认能力输出黑底荧光黄绿方案,主动提取$42K ARR、2,800+ 用户、3.2M 摄影浏览、4 年+旅居成独立指标,调浏览器检查后发现标题拥挤,改 CSS 重新验证。这一轮证明默认能力已经能跑完信息整理到自我修复的闭环。
Taste 轮,挂design-taste-frontend后,页面方向明显变了。Baseline 像一张有视觉张力的海报,Taste 版更像懂工程规范的前端工程师做的:文字、按钮、交互图片解耦,做成可维护的双主题组件系统,支持明暗主题。QA 覆盖也更全,检查了图片与文字关系、Hero 标题换行、390px 和 500px 移动端横向溢出、深色主题、完整长页面、prefers-reduced-motion、文字对比度。有个细节:一张生成图片把说明文字烘焙进了图里,Codex 读 Skill 规则后主动改成"图片 + 独立 HTML 文本"。
这里要划清归因边界。Taste 版同时用了 Codex 自带的图像生成能力生成 3 张场景配图,最终页面是 GPT-5.6 Sol 本身的前端能力、Skill 规则、图像生成能力、本轮 QA 共同作用的结果,不能把所有视觉变化都算到design-taste-frontend头上。
Humanizer 轮,文案变化比"删几个 AI 高频词"有意思。比如:
Before:在城市之间,做产品,也做记录。 After:在不同城市生活,做产品,也拍照。
Before:过去几年,Vic 在不同城市生活,独立完成产品、代码、摄影和播客。 After:过去几年,Vic 一边在不同城市生活,一边做产品、写代码、拍照和录播客。
变化集中在三处:抽象名词变具体动作,泛化总结变具体事实,介绍稿语气变自然个人表达。数字、年份、项目名、技术栈这些明确信息基本保持原样。
Better-interface 轮,第一次只 Review 不改,结果:
A 明确需要修复 4 B 建议优化 4 C 纯审美偏好 0 Layout Clear Writing Clear Typography Clear Verdict Block页面肉眼看已经没明显问题,它没纠结圆角留白,而是抓出颜色、可访问性、交互状态上的 4 个交付问题:小字号强调色文字对比度不足、焦点环对比度不足、可见标签与 accessible name 不一致、系统主题变化后aria-pressed状态不同步。
修复轮只修 A1 到 A4,B 类建议全部保留不动。修完重新验证,4 个问题均解决,Verdict 从Block变成PASS。这里的 PASS 只代表本轮 Review 没有 A 类阻断问题,不等于完成生产级可访问性认证,也没做真实屏幕阅读器或 Axe、Lighthouse 独立审计。
5. 本篇常见报错排查:401、local proxy failed、reading choices、OAuth
跑这套流程,报错基本集中在接入层。下面按我实际遇到和常见反馈整理。
401 Unauthorized。最常见的原因是 Key 没生效或写错位置。检查顺序:echo $TAOTOKEN_API_KEY看环境变量有没有值;config.toml里env_key拼写是否和实际变量名一致;Key 有没有多余空格或换行。还有一种情况是 Key 创建后没复制全,控制台只显示一次,漏了就重新建一个。如果 curl 能通但 Codex 报 401,多半是 Codex 进程没继承到环境变量,改成写进auth.json或重启终端。
local proxy failed。这个报错通常出现在 Codex 尝试走本地代理但代理没起来,或者base_url被错误地指向了本地地址。检查config.toml里base_url是不是https://taotoken.net/api,别写成http://localhost或带端口。另外确认没有残留的代理环境变量,HTTP_PROXY、HTTPS_PROXY这类如果指向一个不存在的本地端口,也会触发这个错。清掉再试。
reading choices 相关报错。典型表现是解析响应时读不到choices字段,报cannot read property 'choices' of undefined或类似。原因一般是返回体不是标准 chat 格式,可能是wire_api配错了。config.toml里wire_api = "chat"要和实际接口对齐。如果返回的是错误 JSON(比如 401 的 body),解析自然失败,所以先确认鉴权没问题,再看这个错。
OAuth 相关报错。Codex 某些版本默认走 OAuth 登录流程,如果你用 API Key 接入,可能会看到 OAuth token 刷新失败或登录态冲突。处理方式是明确走 API Key 模式,别混用登录态。检查auth.json里是不是同时存在 OAuth 字段和 API Key 字段,冲突时清掉 OAuth 部分,只留OPENAI_API_KEY和OPENAI_BASE_URL。如果之前登录过官方账号,先登出再配 Key。
Skill 安装安全提示。装humanizer时我碰到过安装器给的安全扫描结果:Gen Safe、Socket 0 alerts、Snyk High Risk。第一次看到没继续装,先取消,人工检查仓库里的SKILL.md,重点看:是否要求执行外部脚本、是否下载未知文件、是否上传本地数据、是否读取无关目录、是否调用额外网络服务。当前SKILL.md主要是文本处理规则,没看到明显高风险指令,才在隔离的 Project 里继续测。这里没法简单判断 Snyk 的 High Risk 就是误报,人工检查SKILL.md也不等于完整安全审计。更实用的做法是:扫描结果冲突时,先确认 Skill 来源和实际指令,再决定是否安装、权限限制在什么范围。所有 Skill 走 Project 级安装也是出于这个考虑。
Skill 不生效。$skill-name敲了没反应,先确认.agents/skills/下有对应目录和SKILL.md;再确认当前工作目录是项目根目录,Codex 从当前目录往上找.agents;最后看 Skill 名拼写,design-taste-frontend和better-interface这类带连字符的容易打错。
排障时如果拿不准是通道问题还是 Skill 问题,先用模型对话页 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite 单独发一条消息,通道通了再回 Codex 查 Skill。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,参数细节以文档为准。
6. 三个 Skill 怎么选,以及长期编码场景的接入方式
跑完整个流程,三个 Skill 的定位比较清楚了。
design-taste-frontend适合你已经有明确设计规范、想让 Agent 稳定执行的时候。它把设计原则固化成规则,Codex 会按规则做组件解耦、双主题、QA 检查。代价是执行链变长,一轮任务里模型调用次数明显增加。如果你只是临时做个简单页面,Codex 默认能力就够,不必上这个。
humanizer适合文案是交付物一部分的场景。它只动文字不动结构,这个边界很重要,意味着你可以放心在已经定稿的页面上跑它。但它给的是 Review 建议,具体改不改还得人工判断,别全盘接受。
better-interface适合交付前的最后一道检查。它不纠结审美,专抓对比度、焦点环、aria 状态这类肉眼容易漏的问题。第一次跑建议只 Review 不改,看清楚它报什么,再决定修哪些。A 类必修,B 类看情况,C 类忽略。
组合方式上,我的建议是串行:设计 → 文案 → Review → 修复,每步输出到独立目录。这样任何一步出问题都能回退,也方便对比每轮变化。别三个 Skill 一起上,变量太多,出了问题定位不到。
长期做编码和 Agent 任务的话,单次调用按量走不如用 Coding Plan 划算,入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。它适合那种每天都要跑 Codex、频繁触发多轮模型调用的场景。API Key 管理在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite ,需要多把 Key 分项目隔离的时候用得上。
最后说个实测感受:模型能力越强,Skill 的价值越往"把专业工作方法、约束和检查流程固化给 Agent"这个方向走。"会不会做"已经不是唯一问题,按什么标准做、做到什么程度、最后怎么检查,才是 Skill 真正值得看的部分。这次三个 Skill 跑下来,最大的收获不是页面变好看了,而是整条交付流程变得可复现、可回退、可检查。