news 2026/10/11 5:47:52

Tack Harness 编程工作流:用 Skill 与 AGENTS.md 把任务拆成可复用步骤

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Tack Harness 编程工作流:用 Skill 与 AGENTS.md 把任务拆成可复用步骤

1. 为什么你的 AI 编程助手总在重复劳动

用 AI 写代码的人大多经历过这个阶段:第一次让助手帮你搭项目,它表现得像个资深工程师;第二次换个需求,它又像个刚入职的实习生,连项目用哪个包管理器都要重新问一遍。问题不在模型能力,而在于每次对话都是「失忆」的——你昨天教它的目录规范、今天要遵守的提交格式、这个项目特有的质量门禁,它一概不记得。

Tack Harness 编程工作流要解决的就是这件事。它是一套精简克制、人类可读、任意配置的编程工作流 Skill,通过/tack触发,覆盖从工作区初始化到代码上线的完整开发流程。核心思路是把「重复开发任务」沉淀成可复用的步骤文件,让 AI 每次执行时都按同一套剧本走,而不是即兴发挥。

这套工作流适合谁?如果你符合下面任意一条,它值得你花半小时落地:

  • 手上有多个项目,每个项目的规范、目录、命令都不一样,每次都要重新交代;
  • 团队里多人用 AI 编程,输出风格和质量参差不齐,想统一标准;
  • 需求拆解、任务分解、单元测试这些环节你希望有固定套路,而不是每次靠提示词碰运气;
  • 想把「怎么用 AI 干活」这件事本身变成项目资产,而不是散落在聊天记录里。

它由三个层次协作:SKILL.md定义通用能力(能做什么),AGENTS.md定义项目专属行为(在这个项目里怎么做),resources/目录下的执行指令定义每个环节的具体动作。三者分工明确,升级 Skill 不影响项目配置,改项目配置也不动通用能力。

我试过把这套东西套到一个前后端分离的项目上,最大的感受是:以前每次开新需求都要写一大段背景说明,现在只需要/tack new-req加分支名,剩下的上下文加载、任务拆解、开发、单测都有固定流程接管。下面把目录结构、配置片段和一次完整执行过程拆开讲。

2. TaoToken 前置准备:把模型接入配好

Tack Harness 本身是工作流编排层,它需要调用大模型来执行分析、拆解、编码这些动作。所以第一步是把模型接入配置好。这里用 TaoToken 作为接入层,它提供统一的 API 入口,兼容主流模型调用格式,配置一次就能在多个工具里复用。

官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口是 https://taotoken.net/api 。注意 API 地址不带 UTM 参数,配置时直接用这个。

你需要先拿到 API Key。进入控制台创建密钥,路径在 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 。创建后复制那串以sk-开头的字符串,后面配置里会用到。

拿到 Key 之后,关键是把三件套配齐:Base URL、API Key、Model ID。这三样缺一不可,很多接入失败都是因为只填了 Key 没填 Base URL,或者 Model ID 写错。

Base URL 填https://taotoken.net/api,注意结尾不要多加/v1之类的路径,具体以接入文档为准。Model ID 根据你实际要用的模型填,比如claude-sonnet-4-20250514这类标识。API Key 就是刚才复制的那串。

如果你用的是 Claude Code 这类工具,配置方式略有不同。Claude Code 通过环境变量或配置文件读取接入信息,你需要设置ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY两个变量,Base URL 同样指向 TaoToken 的 API 入口。具体写法参考接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有各工具的完整配置示例。

配好之后建议先做一次连通性验证,别等到跑工作流时才发现 Key 无效。验证方法很简单,用 curl 发一个最小请求:

curl -X POST https://taotoken.net/api/v1/messages \ -H "Content-Type: application/json" \ -H "x-api-key: sk-你的密钥" \ -H "anthropic-version: 2023-06-01" \ -d '{ "model": "claude-sonnet-4-20250514", "max_tokens": 64, "messages": [{"role": "user", "content": "回复 ok"}] }'

如果返回里能看到模型输出,说明接入层通了。如果报 401,检查 Key 是否复制完整、有没有多余空格;如果报连接失败,检查 Base URL 是否写对。这一步过了,再往下装 Tack Harness 才有意义。

3. 可复制配置:AGENTS.md 与 SKILL.md 目录结构

这一节是整篇的核心,给你可以直接抄的目录结构和配置片段。Tack Harness 的安装方式有几种,最省事的是让 agent 自己装,在 TRAE 里输入「安装这个 skill:https://github.com/frcoder-lh/tack-harness」即可。也可以用一键脚本:

curl -fsSL https://raw.githubusercontent.com/frcoder-lh/tack-harness/main/install.sh | sh -s -- --agent trae

或者克隆后手动执行:

git clone git@github.com:frcoder-lh/tack-harness.git cd tack-harness sh install.sh --agent trae # 安装到 TRAE sh install.sh --agent cursor # 安装到 Cursor sh install.sh --target ~/my-agent # 自定义路径 sh install.sh --list # 查看所有支持的 agent sh install.sh --agent trae --dry-run # 预览安装

安装完成后,Skill 会落到~/.trae/skills/tack/目录下,结构如下:

tack/ ├── SKILL.md # Skill 定义(AI 读取) ├── README.md # 说明文档 ├── resources/ # 12 个工作流执行指令 ├── script/ # 4 个自动化脚本 └── template/ # 项目初始化模板

resources/里每个环节一份详细执行指令,比如implement.md、tdd.md、code-review.md、diagnosing-bugs.md、handoff.md等。script/里是骨架、仓库克隆、需求创建、worktree 辅助这几个脚本。template/里是 AGENTS.md、wiki 占位、文档模板、编码规范、脚本副本,大约 20 个文件。

真正让工作流「认项目」的是项目级的 AGENTS.md。它在init-workspace时自动生成,定义这个项目的最高优先级约束、目录结构、命令路由。下面是一份可以直接改的 AGENTS.md 片段:

# AGENTS.md ## 最高优先级约束 - 不篡改原始信息,所有修改必须可追溯 - 代码审查为必选环节,跳过需显式说明理由 - Git 操作遵循安全规范,禁止 force push 到主分支 ## 项目目录结构 - `src/` 源码目录 - `tests/` 测试目录 - `harness/` 工作流定义(rule / doc / script / template) - `wiki/` 全局上下文 - `work/<branch>/` 每个需求一个文件夹 ## 命令路由 ### `/tack 开发` 或 `/tack develop` - 调用: `implement.md` + `tdd.md` + `code-review.md` + `script/git-worktree-helper.sh` - 新增: 先执行 `my-custom-check.md`(业务特有的质量门禁) ### `/tack 单测` 或 `/tack unit-test` - 调用: `tdd.md` + `code-review.md`

项目运行时的完整目录长这样:

<project>/ ├── AGENTS.md # 项目常驻说明书 ├── harness/ # 流程定义(从 template 复制) │ ├── rule/ # coding-standards、development-workflow │ ├── doc/ # PRD / 技术设计 / 测试计划模板 │ ├── script/ # 项目级脚本副本 │ └── template/work/ # status.yaml、repo_readme.md ├── wiki/ # 全局上下文 ├── work/<branch>/ # 每个需求一个文件夹 │ ├── status.yaml # 进度跟踪 │ ├── wiki/ # 需求上下文 │ ├── harness/ # 技术设计 │ ├── plan/ # 任务清单 │ └── repo/ # git worktree └── repo/ # 代码主仓库

SKILL.md 和 AGENTS.md 的分工要拎清楚:SKILL.md 定义「能做什么」,是通用能力,换项目不变;AGENTS.md 定义「在这个项目里怎么做」,是项目专属行为,每个项目独立维护。升级 Skill 只需替换~/.trae/skills/tack/下的文件,项目级 AGENTS.md 和 harness/ 配置保持不动。

如果你用 Cline MCP 或 Codex 这类工具,配置思路一致,同样要写全 Base URL、Key、Model ID 三件套。Codex 的auth.json里填对应的接入信息,Cline 的 MCP 配置里指定模型端点。具体字段名以各工具文档为准,但三件套的逻辑不变。

4. 验证请求:从需求到执行的一次完整跑通

配置写完,得跑一遍才知道对不对。这一节演示从初始化到单测的完整流程,每一步都有可复制的命令和预期结果。

先在 TRAE 里输入/tack,看到命令列表就说明安装成功。然后按顺序执行:

# 初始化项目 /tack init-workspace ~/projects/my-app # 输入业务上下文 /tack init-context business-prd.md architecture-doc.md # 克隆代码仓库 /tack init-repos git@github.com:org/backend.git git@github.com:org/frontend.git

init-workspace会在目标目录生成 AGENTS.md、harness/、wiki/、work/ 这套骨架。init-context把 PRD 和架构文档读进 wiki/ 作为全局上下文。init-repos把代码仓库克隆到 repo/ 下,后续每个需求用 git worktree 隔离。

接下来走一个真实需求:

# 新建需求 /tack new-req feature/user-auth # 输入需求上下文 /tack req-context prd.md # 分析需求 /tack analyze-req # 任务拆解 /tack breakdown # 开发 /tack develop

new-req会在work/feature/user-auth/下建好文件夹,生成 status.yaml 跟踪进度。req-context把 PRD 读进需求上下文。analyze-req让模型分析需求边界、依赖、风险。breakdown把需求拆成可执行的任务清单,落到plan/目录。develop按 AGENTS.md 里定义的路由,依次调用 implement.md、tdd.md、code-review.md,并用 git-worktree-helper.sh 在隔离环境里改代码。

整个流程的走向是这样的:

init-workspace ──> init-context ──> init-repos │ ▼ new-req ──> req-context ──> analyze-req ──> breakdown │ ▼ develop ⇄ fix-req │ ▼ unit-test

跑完之后,work/feature/user-auth/status.yaml里会记录每个环节的完成状态,plan/里有任务清单,repo/里有 worktree 里的代码改动。你可以打开 status.yaml 确认进度,也可以直接看 plan/ 里的任务是否都勾掉了。

验证成功的标志有三个:一是/tack命令列表能正常显示;二是init-workspace后目录结构完整,AGENTS.md 内容符合预期;三是develop跑完后 worktree 里有实际代码改动,且 code-review 环节有输出。三个都满足,说明工作流落地成功。

如果中途想跳过某个环节,直接不执行对应命令即可,各环节独立。也可以在 AGENTS.md 的命令路由里删掉对应命令,让它彻底不出现在流程里。

5. 常见报错排查:401、local proxy failed 与 OAuth

接入和工作流跑起来的过程中,最容易卡在几个固定报错上。这一节按真实报错对照排查,帮你快速定位。

401 Unauthorized。这是最常见的接入错误,几乎都是 Key 或 Base URL 的问题。先检查 API Key 是否复制完整,有没有首尾空格,有没有把sk-前缀漏掉。再检查 Base URL 是否写成https://taotoken.net/api,不要多加/v1或结尾斜杠。如果用的是 Claude Code,检查ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY两个环境变量是否都设了,只设一个也会 401。还有一种情况是 Key 被禁用或额度耗尽,去控制台确认密钥状态。

local proxy failed。这个报错通常出现在工具尝试走本地代理但代理没起来的时候。检查你的工具配置里有没有指向127.0.0.1:xxxx的代理设置,如果有但本地没有对应服务,就会报这个。解决办法是把代理配置去掉,直接指向 TaoToken 的 API 入口。另外检查系统环境变量里有没有残留的HTTP_PROXY、HTTPS_PROXY,这些也会干扰。

reading choices 相关报错。这类错误一般是响应格式不符合预期,常见于 Model ID 写错或模型不支持当前调用方式。检查 Model ID 是否拼写正确,是否是该接入层支持的模型。如果返回体里没有choices字段,说明请求根本没到模型,多半是 Base URL 或鉴权的问题,回到 401 的排查思路。

OAuth 相关报错。如果你用的是需要 OAuth 登录的工具,报错通常和 token 过期或回调地址不匹配有关。检查登录状态是否有效,必要时重新走一遍授权流程。如果工具同时支持 API Key 和 OAuth,优先用 API Key,配置更简单也更稳定。

Skill 装了但/tack不识别。先确认安装目录对不对,TRAE 是~/.trae/skills/tack/,Cursor 是~/.cursor/skills/tack/。再确认 SKILL.md 文件存在且格式正确。如果目录对但命令不出现,重启一下编辑器,有些工具需要重新加载 skill 列表。

AGENTS.md 改了但行为没变。检查改的是不是项目根目录的 AGENTS.md,而不是 Skill 安装目录里的。项目级配置只认项目根目录那份。另外确认命令路由的格式没写错,/tack 开发和/tack develop要能对应上。

排查时有个通用技巧:先用 curl 直接打 API,确认接入层本身是通的。curl 通了再查工具配置,curl 不通就先解决 Key 和 Base URL。这样能把问题范围缩小一半。

6. 把工作流变成项目资产

Tack Harness 这套东西的价值,不在于它替你写了多少代码,而在于它把「怎么用 AI 干活」这件事从聊天记录里捞出来,变成了项目里可版本控制、可 review、可传承的文件。SKILL.md 是工具箱,AGENTS.md 是项目说明书,resources/ 是每个环节的标准动作。三者配合,AI 每次执行都按同一套剧本走。

落地建议从一个小项目开始,先跑通 init-workspace 到 develop 的完整链路,确认接入层没问题,再把 AGENTS.md 按自己项目的规范改一遍。改的时候重点放在命令路由和质量门禁上,这两块最能体现项目特色。等一个需求完整跑完,你会拿到一份 status.yaml 和 plan/ 任务清单,这就是可复用的模板,下个需求直接套。

如果后续要长期用 AI 做编码和 Agent 任务,可以考虑 Coding Plan,路径在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。需要管理多个密钥或查看用量,去 API Keys 页面 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。想先试试模型对话效果,模型对话入口在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite 。接入细节以文档为准:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。

最后留一个实用技巧:每次跑完一个需求,把work/<branch>/下的 status.yaml 和 plan/ 归档到一个work/_archive/目录。积累十几个需求后,你会发现哪些环节经常卡住、哪些任务类型反复出现,这些就是下一步该沉淀成新 Skill 或新命令路由的地方。工作流不是一次配好就完事,它是跟着项目一起长的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 5:46:48

Go微服务分布式事务Saga模式补偿机制实战

Go微服务分布式事务Saga模式补偿机制实战 导语 分布式系统中&#xff0c;一次业务操作往往需要跨多个微服务写数据。传统的数据库事务&#xff08;ACID&#xff09;无法跨越服务边界&#xff0c;CAP定理又告诉我们不可能同时满足一致性和可用性。Saga模式是业界解决分布式事务的…

作者头像 李华
网站建设 2026/10/11 5:44:00

从SAR点目标仿真到实测数据处理:原理、MATLAB实现与避坑指南

简介&#xff1a;这套MATLAB资源围绕SAR雷达成像原理&#xff0c;提供从点目标仿真到实测数据处理的完整代码链&#xff0c;面向雷达信号处理、遥感成像等方向的学生与工程师&#xff0c;帮助理解距离多普勒&#xff08;RD&#xff09;成像的基本步骤&#xff0c;以及压缩感知&…

作者头像 李华
网站建设 2026/10/11 5:40:34

Agentic RL 源码阅读笔记:OpenClaw-RL 总体思考与 TaoToken 接入实践

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

作者头像 李华
网站建设 2026/10/11 5:38:00

金蝶苍穹,父子页面传参

父页面发送参数先拼接发送个子页面的参数灰色浮动文本&#xff08;调试信息&#xff09;父页面拼借参数public void beforeDoOperation(BeforeDoOperationEventArgs e) {super.beforeDoOperation(e);FormOperate formOperate (FormOperate) e.getSource();if (formOperate.get…

作者头像 李华