TAPD Skill
覆盖研发团队最常接的 TAPD 数据:需求、缺陷、任务、迭代、工时、测试用例的查询与写入,以及 Webhook 事件订阅。重点讲清 API 账号与开放应用两套鉴权、把运算符写在值里的查询语法、20000 条深分页上限与游标翻页,以及各对象不一致的字段名。
安装
选你用的 Agent,复制命令。
npx -y skills add fxp/skillify --skill tapd --agent claude-code --yes装到项目的 .claude/skills/;加 -g 装到全局。装完需要你手动执行 /reload-plugins,这一步 Agent 代劳不了。
npx -y skills add fxp/skillify --skill tapd --agent codex --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill tapd --agent cursor --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill tapd --agent opencode --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill tapd --agent gemini-cli --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill tapd --agent github-copilot --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill tapd --agent trae --yes装到项目的 .trae/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill tapd --agent windsurf --yes装到项目的 .windsurf/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill tapd --agent qwen-code --yes把 --agent 换成你用的 Agent 标识,可以一次写多个。skills CLI 1.5.25 共支持 79 个,例如 qwen-code、kimi-code-cli、trae-cn、qoder、lingma、cline、roo。
或者让 Agent 自己装
读 https://github.com/fxp/skillify/blob/main/skills/tapd/prompt.md 并照它执行装对了的标志:references/ 下有 7 份文档,里面 grep '<!-- Gap:' 能搜到 3 处。
装好后,可以这样问你的 Agent
这份 Skill 覆盖的典型任务。点一下复制。
7 类能力
每类能力对应一份 reference,Agent 按任务只打开需要的那份。
鉴权与项目前置
API 账号 Basic、开放应用 token、OAuth 与 scope;查项目 ID、成员昵称,短 ID 换长 ID
需求
查询、创建、更新与流转需求,状态和自定义字段元数据,变更历史
缺陷
提交、查询、流转缺陷,严重程度与解决方法枚举,缺陷变更历史
任务与迭代
任务的增改查与完成,迭代的创建、更新、锁定,把工作项放进迭代
工时与测试用例
记录、修改、删除工时;测试用例、批量建用例、测试计划与执行结果
Webhook 与事件
两条订阅渠道、事件名、报文字段与验证方式,以及向 TAPD 推送事件
查询语法、错误码与限流
时间 / 枚举 / 模糊查询写法、分页与游标、响应结构、错误码、频率限制与参考客户端
当前事实
整理自官方文档(抓取于 2026-09-11),还没有用真实凭证验证。
| 项 | 值 |
|---|---|
| Base URL | https://api.tapd.cn,http:// 不跳转 |
| 鉴权 | Authorization: Basic base64(api_user:api_password),API 账号不是登录账号 |
| 开放应用 | POST /tokens/request_token + grant_type=client_credentials → Bearer,7200 秒,无 refresh_token |
| 必传 | workspace_id;对象 ID 是 19 位字符串 |
| 分页 | limit ≤ 200,page×limit ≤ 20000,更深用 cursor |
照通用经验写容易错的 7 件事
来自官方文档,还没有用真实凭证验证。
- API 账号不是登录账号,Basic 不是 Bearer。企业脚本用管理员申请的 API 账号做 HTTP Basic;只有开放应用换到的 token 才用 Bearer,且没有 refresh_token。
- 没有 PUT / DELETE。创建和更新是同一个
POST /stories,带id就是更新;文档里没有删除需求、缺陷、任务的接口。 - 运算符写在值里。
modified=>2026-09-01、created=起~止、status=a|b、name=EQ<标题>,没有modified_after这类参数。 - 缺陷的字段名和需求不一样。需求用
name/owner/creator,缺陷用title/current_owner/reporter;优先级统一用priority_label。 - 深分页有硬上限。
page×limit超过 20000 会报错,要改用cursor(仅 id 排序、串行翻页);需求变更历史limit最大 100。 - 工时有唯一约束,更新是覆盖。同一对象 + 日期 + 人只能有一条,追加工时要先查出记录再改
timespent。 - Webhook 没有签名,默认 form 编码。只能比对 body 里的明文
secret;更新报文只有old_*旧值,新值要再调 API。
无凭证探测
- 不带凭证或伪造 Basic:HTTP
401 Unauth,body{"status":401,"info":"401 Unauthorized"},带WWW-Authenticate: Basic - 伪造 Bearer token 返回 HTTP 422
The access token provided is invalid,不是 401 - 拼错的顶层路径(如
/storys)即使不带凭证也返回 HTTP 200 +status:1+ Hello world 字符串 http://api.tapd.cn不跳转 https,直接按明文处理- 所有响应都带
X-RateLimit-Limit: 10000与递减的X-RateLimit-Remaining - 文档「使用必读」的示例命令是
curl –u(EN DASH),照抄会不带凭证发请求并得到 401