Windows 用户跑 install-all.ps1,TaoToken Key 填到环境变量
2026/9/19 4:57:15 网站建设 项目流程

1. install-all.ps1 跑通了,Agent 却报 401:问题不在 Skill

install-all.ps1在 Windows 上一跑,Cursor、Codex、Claude Code 三个 Skill 目录都装好了,SKILL.mdtemplates.md也在位,可第一次让 Agent 生成小程序提示词就翻车——终端回401,或者干脆读不到任何 Key。问题通常不在 Skill 本身,而在 Key 没进环境变量。安装完成后、首次调用模型之前,先去 TaoToken 官网 取一枚 TaoToken Key,Base URL 统一填https://taotoken.net/api,后面所有配置都围绕这两个值展开。

这篇不重复讲「提示词模板长什么样」,而是补上前一篇没覆盖的那一段:Windows 用户把 Skill 包装进三端之后,怎么让 Agent 真正把模型调用打通。包括四件事:

  1. install-all.ps1的完整执行流程,以及 PowerShell 执行策略、目录找不到、装了没生效这几类报错的对照处理;
  2. TaoToken Key 怎么写进 Windows 用户环境变量,让 Cursor、Codex、Claude Code 都能读到;
  3. 三端各自的配置文件写法——Claude Code 走settings.json+ANTHROPIC_*,Codex 走config.toml,CC Switch 用「Base URL / API Key / 默认模型」三件套;
  4. /doctor做验证,给出报错前后对照,确认 Skill 真的被 Agent 识别。

视角落在一个具体场景:小程序开发者装了wechat-miniprogram-prompts这个 Skill,对 Agent 说一句「我想做一个财务工具小程序」,Agent 按六阶段路由自动挑模板、填占位符,生成可直接复制的提示词。这整个过程消耗的是模型 Token,Token 走的是你自己配的 Key 和 Base URL。所以环境和配置不通,Skill 再全也跑不起来。

2. 三层结构先分清:Skill 目录、Agent 配置、模型 Key

很多人卡住是因为把三件不同的事混成了一件。

第一层:Skill 目录。它就是一个普通文件夹,名字必须叫wechat-miniprogram-prompts,里面至少两个文件:

wechat-miniprogram-prompts/ ├── SKILL.md # 触发条件、六阶段路由表、Agent 行为规则、常见坑 └── templates.md # 六类模板原文 + 填好占位符的示例,按需读取

SKILL.md负责「什么时候该干什么」,templates.md是资料库,Agent 需要哪条才读哪条,不会每次都把全部模板塞进上下文。

第二层:Agent 侧的 Skill 搜索路径。Cursor、Codex、Claude Code 各自有约定的 skills 目录,把上面那个文件夹复制进去,Agent 才会在会话里加载它。装错目录、目录名被改成别的、或者放进了内置保留目录,都会表现为「装了但没反应」。

第三层:模型访问凭证。Skill 只产出提示词,提示词最终要发给模型才有结果。你的 Agent 需要知道两件事:请求发到哪个地址(Base URL),用什么身份(API Key)。这两个值由环境变量或配置文件提供。

三层的排查顺序建议固定下来:先确认文件夹在不在、文件名对不对;再确认 Agent 会话是否重启;最后才去查 Key 和 Base URL。反过来的顺序会让你在配置文件里反复折腾,而真正的问题是第一层。

分享包本体和安装脚本可以对照 TaoToken 官网 的控制台一起看,Key 在控制台里生成,生成之后立刻写进环境变量,别留在记事本里。

3. Windows 一键安装:install-all.ps1 可复现执行流程

分享包解压后的目录长这样:

wechat-miniprogram-prompts-package/ ├── README.md # 安装说明 ├── install-all.ps1 # 一键安装三端 ├── install-cursor.ps1 # 只装 Cursor ├── install-codex.ps1 # 只装 Codex ├── install-claude.ps1 # 只装 Claude Code └── skill/ └── wechat-miniprogram-prompts/ ├── SKILL.md └── templates.md

install-all.ps1的核心逻辑是:定位分享包根目录 → 校验源目录里的SKILL.md→ 依次把整个文件夹复制到三端目标路径 → 打印每个目标的落地结果。下面这份是等价的可运行版本,可以直接改成自己的脚本:

# install-all.ps1 # 用法:在分享包根目录打开 PowerShell,执行 .\install-all.ps1 $ErrorActionPreference = "Stop" $SkillName = "wechat-miniprogram-prompts" $PackageRoot = Split-Path -Parent $MyInvocation.MyCommand.Path $SourceDir = Join-Path $PackageRoot "skill\$SkillName" $ProjectRoot = (Get-Location).Path # Codex 家目录,未设置 CODEX_HOME 时回退到 %USERPROFILE%\.codex if ($env:CODEX_HOME) { $CodexHome = $env:CODEX_HOME } else { $CodexHome = Join-Path $env:USERPROFILE ".codex" } Write-Host "分享包根目录: $PackageRoot" -ForegroundColor Cyan Write-Host "当前项目目录: $ProjectRoot" -ForegroundColor Cyan if (-not (Test-Path (Join-Path $SourceDir "SKILL.md"))) { throw "未找到 $SourceDir\SKILL.md,请确认当前工作目录是分享包根目录" } if (-not (Test-Path (Join-Path $SourceDir "templates.md"))) { Write-Warning "未找到 templates.md,Skill 仍可安装,但模板库不完整" } $targets = @( @{ Name = "Cursor(个人)"; Path = Join-Path $env:USERPROFILE ".cursor\skills\$SkillName" }, @{ Name = "Cursor(项目)"; Path = Join-Path $ProjectRoot ".cursor\skills\$SkillName" }, @{ Name = "Codex"; Path = Join-Path $CodexHome "skills\$SkillName" }, @{ Name = "Claude Code"; Path = Join-Path $ProjectRoot ".claude\skills\$SkillName" } ) foreach ($t in $targets) { $parent = Split-Path -Parent $t.Path if (-not (Test-Path $parent)) { New-Item -ItemType Directory -Path $parent -Force | Out-Null } Copy-Item -Path $SourceDir -Destination $t.Path -Recurse -Force $okSkill = Test-Path (Join-Path $t.Path "SKILL.md") $okTpl = Test-Path (Join-Path $t.Path "templates.md") Write-Host ("[{0}] {1}`n SKILL.md={2} templates.md={3}" -f $t.Name, $t.Path, $okSkill, $okTpl) } Write-Host "`n安装完成。请重启对应 Agent 会话,再让它加载 Skill。" -ForegroundColor Green

第一次在 Windows 上跑.ps1,最可能撞上的不是脚本逻辑,而是执行策略:

无法加载文件 D:\wechat-miniprogram-prompts-package\install-all.ps1, 因为在此系统上禁止运行脚本。

三种处理方式,按侵入性从小到大排:

# 方式一:只对当前这一次进程放开,关掉窗口即失效(推荐) powershell -ExecutionPolicy Bypass -File .\install-all.ps1 # 方式二:在当前 PowerShell 会话里临时放开 Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass .\install-all.ps1 # 方式三:对当前用户永久放开(改动会写进用户配置,介意就别用) Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

如果不想跑脚本,手动复制同样可行:把skill\wechat-miniprogram-prompts整个文件夹,分别投放到下面这些位置。文件夹名必须原样保留wechat-miniprogram-prompts,改成中文名或加了后缀,斜杠命令和自动加载都会失效。

目标路径
Cursor(个人,所有项目可用)%USERPROFILE%\.cursor\skills\wechat-miniprogram-prompts\
Cursor(项目,可提交给团队)<项目根>\.cursor\skills\wechat-miniprogram-prompts\
Codex%CODEX_HOME%\skills\wechat-miniprogram-prompts\,默认%USERPROFILE%\.codex
Claude Code(项目)<项目根>\.claude\skills\wechat-miniprogram-prompts\

两个容易踩的坑:

  • Cursor 有内置保留目录~/.cursor/skills-cursor/不要往那里放,放了不会作为你的自定义 Skill 生效;
  • Codex 的CODEX_HOME如果被改过,Skill 就要放到改后的目录下,否则 Agent 扫不到。

安装后确认两个文件都在目标目录里,这一步别跳过:

Get-ChildItem "$env:USERPROFILE\.cursor\skills\wechat-miniprogram-prompts" Get-ChildItem "$env:USERPROFILE\.codex\skills\wechat-miniprogram-prompts" Get-ChildItem ".\.claude\skills\wechat-miniprogram-prompts"

4. 把 TaoToken Key 写进 Windows 用户环境变量

Skill 装好只是「Agent 知道该问你什么」,真正把提示词变成结果,需要模型调用。Windows 上推荐把凭证写进用户级环境变量,好处是 Cursor、Codex、Claude Code 都能读到,不用在三份配置文件里各抄一遍 Key。

先取 Key:安装完成后、首次调用模型之前,到 TaoToken 官网 注册并生成 Key,控制台里可以随时轮换。Key 只显示一次的话,当场复制。

写入变量,两种写法任选:

# 写法一:setx,写入用户级环境变量,新开的终端才生效 setx TAOTOKEN_API_KEY "YOUR_API_KEY" setx ANTHROPIC_BASE_URL "https://taotoken.net/api" setx ANTHROPIC_AUTH_TOKEN "YOUR_API_KEY"
# 写法二:.NET API,明确指定 User 作用域,适合脚本里批量设置 [Environment]::SetEnvironmentVariable("TAOTOKEN_API_KEY", "YOUR_API_KEY", "User") [Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", "https://taotoken.net/api", "User") [Environment]::SetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", "YOUR_API_KEY", "User")

setx有两点需要知道:一是值超过 1024 字符会被截断(API Key 远小于这个数,不用担心);二是它只影响之后新启动的进程,当前窗口里的$env:TAOTOKEN_API_KEY不会立刻变。

写完必须验证,别凭感觉:

[Environment]::GetEnvironmentVariable("TAOTOKEN_API_KEY", "User") [Environment]::GetEnvironmentVariable("ANTHROPIC_BASE_URL", "User")

如果回显是空的,说明没写进去,重新执行上面的命令;如果回显正确但 Agent 里还是 401,问题多半在进程继承——从开始菜单或资源管理器图标启动的 Cursor、VS Code、终端,继承的是启动那一刻的环境快照。设置完环境变量后,最省事的做法是:

# 关掉所有相关进程,再从新终端里启动 taskkill /IM Cursor.exe /F taskkill /IM Code.exe /F

或者直接注销一次 Windows 账户再登录,保证所有 GUI 进程拿到新的环境块。这一步经常被忽略,然后被误判成「Key 是错的」。

5. 三端分别怎么接:settings.json、config.toml、CC Switch 三件套

环境变量只是备用弹药,各端还需要在配置里指到正确的地址。注意:不同客户端读的字段名不一样,Claude Code 的ANTHROPIC_*不要搬到 Codex 上,Codex 也不吃ANTHROPIC_BASE_URL

5.1 Claude Code:settings.json + ANTHROPIC_*

Claude Code 读settings.json,项目级放在<项目根>\.claude\settings.json,用户级放在%USERPROFILE%\.claude\settings.json。把模型端点指向 TaoToken:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "claude-sonnet-4-5" } }

几点说明:

  • ANTHROPIC_BASE_URLhttps://taotoken.net/api,不要手滑加/v1后缀,路径由客户端自己拼;
  • 部分版本优先读ANTHROPIC_API_KEY,如果配置好后仍提示未授权,把ANTHROPIC_AUTH_TOKEN换成ANTHROPIC_API_KEY再试一次;
  • 如果环境变量里已经写了同名值,配置文件和环境变量的优先级按客户端版本可能不同,建议只保留一处,避免互相覆盖后自己都搞不清用的是哪个。

Claude Code 会监听 skill 目录变化,但如果目录是本次会话启动之后才新建的,监听不会回溯,需要重启会话,斜杠命令/wechat-miniprogram-prompts才会出现在命令列表里(目录名即命令名)。

5.2 Codex:config.toml

Codex 走 TOML,配置文件在%USERPROFILE%\.codex\config.toml(或%CODEX_HOME%\config.toml)。这里用的是 OpenAI 兼容风格的自定义 provider,不要写ANTHROPIC_*

# %USERPROFILE%\.codex\config.toml model = "gpt-5" model_provider = "taotoken" approval_policy = "on-request" [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 = "TAOTOKEN_API_KEY"表示从同名环境变量里读 Key,这样 Key 不落在配置文件里,方便提交前检查;
  • model按你在控制台里可用的模型名填,写完先用一次最小请求验证,再放回日常使用。

如果 Codex 报 provider 找不到,检查model_provider的值和[model_providers.xxx]的表名是否完全一致——TOML 表名写错一个字母就会静默回退到默认 provider。

5.3 CC Switch:Base URL / API Key / 默认模型 三件套

用 CC Switch 这类配置切换工具时,本质上只改三个值:

配置项填什么
Base URLhttps://taotoken.net/api
API Key你的 TaoToken Key,占位符写YOUR_API_KEY
默认模型按控制台可用列表选,改完做一次最小请求验证

三件套改完,切一次配置、重启对应 Agent 会话,然后让它跑一次 Skill。切换工具的好处是可以同时保留多套配置,出问题时切回上一套做对比,快速判断是「配置问题」还是「Key 本身的问题」。Key 的统一管理入口在控制台,轮换后记得同步更新三端,别只改一处。

6. /doctor 验证:报错前后对照

Claude Code 里验证 Skill 是否被识别,最直接的方式是运行/doctor。典型的两组状态:

修复前

> /doctor Skills: none loaded MCP: ok Env: ANTHROPIC_BASE_URL=(not set)

修复后

> /doctor Skills: wechat-miniprogram-prompts (SKILL.md, templates.md) MCP: ok Env: ANTHROPIC_BASE_URL=https://taotoken.net/api

把 Windows 上常见的症状和成因对齐成一张表,按顺序排查基本不会绕路:

现象大概率原因处理
禁止运行脚本PowerShell 执行策略为 Restrictedpowershell -ExecutionPolicy Bypass -File .\install-all.ps1
未找到 ...\SKILL.md当前目录不是分享包根目录cdwechat-miniprogram-prompts-package再执行
装了但 Agent 里看不到 Skill会话没重启 / 目录名被改重启会话;目录名保持wechat-miniprogram-prompts
/doctor里 Skills 为空目录放错,或放进了skills-cursor移到%USERPROFILE%\.cursor\skills\或项目.claude\skills\
返回 401 / UnauthorizedKey 未写入、写错作用域、进程没继承重设用户级变量并重启终端与 IDE
请求 404Base URL 多写了/v1或写了别的路径改回https://taotoken.net/api
Codex 不读新 providermodel_provider与表名不一致校对 TOML 表名,重启 Codex

验证通过的标准很简单:/doctor能看到 Skill 名和两个文件,环境变量回显正确,然后让 Agent 实际跑一次生成,拿到非空的提示词输出。三步都过,链路才算通。

7. 装好之后跑一遍:财务工具小程序的六阶段路由

环境通了,回到 Skill 本身的价值。它的默认行为是只生成提示词,不直接改你的项目文件;需要 Agent 动手产出可运行改动时,明确说一句让它动手即可,模板里的约束依然生效。

拿「财务工具小程序」走一遍,看每个阶段 Agent 会给你什么:

01 需求拆解。你只说了「我想做一个财务工具小程序」,Agent 不会急着出代码,而是先把缺失信息列出来:目标用户是谁、核心问题是记账还是预算还是报表、主体是个人还是企业、用不用云开发、第一版最想有的一两个功能。

02 页面结构。你补充完信息,它会输出一段填好占位符的提示词,并附上「选用模板」「注意事项」「下一步建议」。这一步最容易犯的错是让它一次改app.json加三个页面,Skill 会提醒你一次只做一个页面,改完一个再看下一个。

03 单一功能实现。比如「实现新增一笔支出的功能」,生成的提示词自带验收标准:主路径能走通、异常有提示、不破坏已有功能。验收要你自己点一遍,Skill 不会替你省略。

04 排障。保存按钮没反应、真机抛出TypeError: Cannot read property 'amount' of undefined这类错误时,Skill 会要求你给全报错原文和复现步骤,而不是一句「坏了帮我修」——信息不全,Agent 只能猜。

05 合规检查。功能差不多了,检查类目、隐私说明、个人主体限制这些容易卡审核的点。

06 提审自查。主功能可用性、真机测试路径、一份十分钟能走完的行动清单。清单打完勾,自己再用手机走三遍主路径,模板不能代替真机自测。

推荐顺序是 01 → 02 → 03 →(04 按需)→ 05 → 06。整个流程里,消耗的都是你配好的那枚 Key 背后的模型 Token,所以前四节的配置做得越干净,后面越少被中断。

8. 常见追问:Skill 会不会每次都把模板塞进上下文

不会。这是把模板写成 Skill 而不是贴进对话的第一个收益:SKILL.md常驻,用来判断阶段和触发;templates.md按需读取,只有当 Agent 确实要生成某类提示词时才引用对应段落。这也是为什么建议把templates.md写成分节清晰的 Markdown,一节一类模板,标题明确,方便定位。

第二个追问是「我改了模板怎么办」。改templates.md即可,保存后重启会话让 Agent 重新加载;如果改的是SKILL.md里的路由规则,同样需要重启会话,否则旧规则还在内存里生效。

第三个追问是「三端能不能共用一份」。可以,文件夹本身是通用的,区别只在投放路径和各自的模型配置。真正的差异点是配置字段:Claude Code 认ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKEN,Codex 认config.toml里的base_urlenv_key,CC Switch 只要三件套。把字段用错端,比把路径写错更难查,因为报错往往只是 401,看不出根因。

9. 下一步:从一次对话验证到长期跑起来

先跑通最小闭环:装 Skill、配环境变量、/doctor看到 Skill、让 Agent 生成一次提示词。四步都过,再谈批量使用。

跑通之后按这个顺序往下走:

  • 想先验证模型质量和返回速度,用 模型对话 直接试一次,确认 Base URL 和 Key 在网页侧同样能通;
  • 打算把 Skill 用在日常开发流里、每天都要跑很多次生成,看 Coding Plan,把用量这件事先规划清楚;
  • 需要自己管理多枚 Key、做轮换或分环境隔离,去 创建与管理 API Keys;
  • Claude Code 的字段名、settings.json结构、环境变量优先级这些细节,以 Claude Code 文档 为准,配置改完记得重启会话再验证。

Windows 上的坑大多不在 Skill 写得好不好,而在三件事:脚本执行策略、目录放没放对、Key 有没有真正进到新进程的环境里。这三件事各花五分钟确认一次,后面就是纯开发了。你平时用 Cursor、Codex 还是 Claude Code 更多?卡在哪一步,留言说说,下一篇就写你问得最多的那个。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询