agentsclimarketplace

Doa harness

Skill medalsoftchina/workcopilot/embedded-skills/doa-harness

Full project lifecycle AI workstation — orchestrates Agents, Skills, Hooks & Prompts for end-to-end development workflow, from requirements analysis to delivery. 项目全生命周期 AI 工作站。

Install
npx -y skills add medalsoftchina/workcopilot --skill doa-harness

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

自动为项目搭建 Harness Engineering 工程轨道。一键生成 copilot-instructions.md、AGENTS.md、 tasks.json、CODEOWNERS、rules/*.md 五大配置文件,让 GitHub Copilot 从"碰运气"变成"稳定交付"。 USE FOR: 初始化 harness、搭建 copilot 工程轨道、配置 agent 约束、创建 instructions、 创建验证链、配置审批钩子、setup harness、init harness、harness engineering。 DO NOT USE FOR: 生成 PPT(使用 doa-ppt)、写代码逻辑、调试 bug。

SKILL.md

15.7 KB, as published. Nobody here has run it

DOA Harness — 一键搭建 Copilot 工程轨道(团队版)

核心理念

Copilot 的上限不取决于提示词,而取决于它运行在怎样的工程轨道上。 三层公式:Context(给什么)→ Constraints(守什么)→ GC(清什么)。

运行模式

模式触发方式行为
初始化首次运行(默认)完整探测 → 交互确认 → 生成全部 5 类文件
增量更新参数含 --update扫描已有文件 → 仅 patch 新增部分(如新模块),保留用户自定义内容
预览模式参数含 --dry-run执行探测和模板渲染,输出预览但不写入文件

工作流

调用 skill
  → Step 0: 判断运行模式(初始化 / 增量更新 / 预览)
  → Step 1: 深度探测项目结构与技术栈
  → Step 2: 交互确认关键信息
  → Step 3: 生成 / 更新 5 类配置文件
  → Step 4: 注入 GC 指令
  → Step 5: 验证完整性 & 一致性
  → Step 6: 输出 Day-1 验证指令

Step 0: 判断运行模式

  1. 检查参数中是否含 --update--dry-run
  2. 扫描工作区,检查 .github/copilot-instructions.md 是否已存在
    • 已存在且未指定 --update:提示用户 "Harness 已初始化,是否切换到增量更新模式?"
    • 不存在:进入初始化模式

Step 1: 深度探测项目结构与技术栈

1.1 递归扫描子项目

不再只看根目录。用 list_dir 递归扫描根目录及一级子目录,收集所有包含信号文件的子项目:

扫描策略:
1. list_dir 根目录 → 识别子目录
2. 对每个子目录 list_dir → 查找信号文件
3. 构建子项目列表: [{name, path, stack, signals}]

1.2 信号文件匹配表

信号文件技术栈大类需要进一步读取
package.json + tsconfig.jsonNode/TypeScript读 package.json → 判断具体框架
*.csproj / *.sln.NET读 .csproj → 判断 SDK 版本和项目类型
pyproject.toml / requirements.txtPython读依赖列表 → 判断框架
go.modGo读 go.mod → 判断主要依赖
Cargo.tomlRust读 Cargo.toml
pom.xml / build.gradleJava/Kotlin读构建文件

1.3 前端框架深度探测

当检测到 package.json 时,必须读取其 dependencies / devDependencies 来判断:

依赖关键字识别为典型配套
umi / @umijs/*UmiJSAnt Design Pro · dva · umi-request
nextNext.jsApp Router / Pages Router
nuxtNuxtVue 3
vue (无 nuxt)Vue SPAVue Router · Pinia · Axios
react (无 umi/next)React SPAReact Router · 状态管理待探测
@angular/coreAngularRxJS · NgRx
svelte / @sveltejs/kitSvelte/SvelteKit

同时检测:

  • 包管理器: 检查 yarn.lock → Yarn | pnpm-lock.yaml → pnpm | package-lock.json → npm
  • CSS 方案: 检查 tailwind.config.* → Tailwind | .less 文件 → Less | *.module.css → CSS Modules
  • 状态管理: 检查依赖中的 zustand / dva / redux / pinia / vuex / ahooks
  • 请求层: 检查 axios / umi-request / @tanstack/react-query / swr
  • 测试框架: 检查 vitest / jest / @testing-library/* / cypress
  • Lint 工具: 检查 eslint / prettier / biome

1.4 后端框架深度探测

.NET 项目(检测到 .csproj / .sln):

  • 读取 .csproj<TargetFramework> → 判断 .NET 版本
  • 读取 <Sdk> 属性 → Microsoft.NET.Sdk.Web 为 Web 项目,Microsoft.NET.Sdk.Worker 为后台服务
  • 扫描 Program.cs / Startup.cs → 判断 Minimal API / MVC / 传统分层
  • 扫描 NuGet 依赖 → EF Core / Dapper / MediatR / FluentValidation 等
  • 检查认证方式 → Azure AD / JWT / IdentityServer

Python 项目

  • 读取 pyproject.tomlrequirements.txt → FastAPI / Django / Flask
  • 检测 ORM → SQLAlchemy / Django ORM / Tortoise

1.5 CI/CD 探测

扫描以下文件以识别 CI 平台:

信号文件CI 平台
.github/workflows/*.ymlGitHub Actions
azure-pipelines.ymlAzure DevOps
.gitlab-ci.ymlGitLab CI
JenkinsfileJenkins
.circleci/config.ymlCircleCI

1.6 代码托管平台探测

通过 .git/config 或目录特征推断:

信号平台
存在 .github/ 目录GitHub
存在 .gitlab/ 目录GitLab
remote URL 含 dev.azure.comAzure DevOps
无法确定在 Step 2 交互中询问

1.7 探测结果数据结构

将所有探测结果汇总为结构化数据,供后续步骤使用:

project:
  name: "{项目名}"
  type: "monorepo" | "single"
  hosting: "github" | "gitlab" | "azure-devops"
  ci: "github-actions" | "azure-pipelines" | "gitlab-ci"
  subprojects:
    - name: "{子项目名}"
      path: "{相对路径}"
      stack: "react-ts" | "vue-ts" | "dotnet" | "python" | ...
      framework: "{具体框架}"
      package_manager: "yarn" | "pnpm" | "npm" | null
      css: "less" | "tailwind" | "css-modules" | null
      state: "dva" | "zustand" | "pinia" | null
      request: "umi-request" | "axios" | "react-query" | null
      test: "vitest" | "jest" | "xunit" | "pytest" | null
      lint: "eslint" | "prettier" | "biome" | "dotnet-format" | null
      entry: "{入口文件路径}"
      verify_chain: ["{cmd1}", "{cmd2}", "{cmd3}"]

Step 2: 交互确认

使用 vscode_askQuestions 向用户确认以下关键信息(一次性收集):

必填项

  1. 项目描述: 一句话概括项目(用于 copilot-instructions.md 项目概述)
  2. 确认探测结果: 展示探测到的子项目列表和技术栈,让用户确认或修正
  3. 代码托管平台: GitHub / GitLab / Azure DevOps(影响 CODEOWNERS 路径和语法)

可选项(有默认值)

  1. 团队 Owner 列表: 输入格式 @user1 @user2,默认 @todo-fill-team
  2. 额外编码规则: 是否有团队特有的编码规约需要生成为 rules/ 文件
  3. 是否将 .vscode/tasks.json 纳入版本控制: 默认 Yes

增量更新模式下:跳过已确认的信息,仅询问新增部分(如新发现的子项目)


Step 3: 生成配置文件

按以下顺序依次生成 5 类文件。

初始化模式:生成前检查是否已存在,已存在则跳过并提示。 增量更新模式:读取已有文件,仅 patch 新增内容(如新模块加入模块地图),不覆盖用户自定义段落。 预览模式:渲染模板内容输出到聊天窗口,不写入文件。

每个生成的文件头部加注版本标记:

# Generated by doa-harness v2.0 on {YYYY-MM-DD}

3.1 copilot-instructions.md

路径:.github/copilot-instructions.md

读取 templates/copilot-instructions.md 获取骨架模板。

模板采用骨架 + 占位符模式,不硬编码任何特定框架:

段落结构(固定):
1. 项目概述 — {project.name} + 各子项目入口
2. 技术栈 — 按子项目分段,每段由探测结果填充
3. 安全边界 — 按子项目分段
4. 前后端联动(仅 monorepo)
5. 验证命令 — 从 verify_chain 生成
6. 代码约定 — 按语言生成
7. 操作安全 — 合并 CI 平台 + 核心目录
8. 垃圾回收(固定段落)

占位符清单:

  • {project_description} — 用户输入的项目描述
  • {sub.name} / {sub.entry} — 子项目名和入口
  • {sub.framework} — 具体框架(UmiJS / Next.js / ASP.NET Core...)
  • {sub.state} — 状态管理方案
  • {sub.css} — CSS 方案
  • {sub.request} — 请求层方案
  • {sub.package_manager} — 包管理器
  • {ci_platform} — CI 平台名及配置文件路径
  • {hosting_platform} — 代码托管平台

3.2 AGENTS.md

路径:.github/AGENTS.md

读取 templates/agents-md.md 获取骨架模板。

生成规则:

  • 快速入口: 自动探测 docs/README.mdCHANGELOG.md 等是否存在并列出
  • 关键约束: 自动扫描 rules/ 目录列出
  • 模块地图: 对每个子项目,扫描其目录结构并按下表标注

权限标注规则(按目录名模式匹配):

目录名模式标注含义
core kernel foundation framework Framework🔒 需审批核心 / 底层框架
auth security identity Authorization License🔒 需审批认证 / 安全
infra infrastructure deploy ActionFilter🔒 需审批基础设施
migrations database SQL_Script🔒 需审批数据库变更
app layouts (前端配置目录)🔒 需审批前端核心配置
Program.cs Startup.cs (入口文件)🔒 需审批启动入口
shared common lib tools components⚠️ 注意复用共享模块
api contracts interfaces Controllers ExternalApi ExternalService⚠️ 有契约约束接口层
config settings appsettings ScheduleJobs⚠️ 需确认配置 / 定时任务
features modules pages Service✅ 可自由修改业务功能
components (非共享) views Dto Model✅ 可自由修改UI / 数据模型
tests __tests__ spec✅ 可自由修改测试文件
assets public static locales✅ 可自由修改静态资源

生成后通过交互让用户确认或修正权限标注,避免误判。 总行数控制在 200 行以内。

3.3 tasks.json

路径:.vscode/tasks.json

读取 templates/tasks-json.md 获取骨架模板。

支持 N 个子项目,生成逻辑:

对每个子项目 sub:
  1. 根据 sub.verify_chain 生成对应 task 列表
  2. 每个 task 的 label 格式: "{sub.name}:{step}"
  3. 每个 task 添加 options.cwd = "${workspaceFolder}/{sub.path}"
  4. 生成子验证任务: "verify:{sub.name}" dependsOn 该子项目所有 step
最后生成总验证任务:
  "verify" dependsOn 所有 "verify:{sub.name}"

包管理器感知

  • 检测到 yarn.lock → 命令用 yarn
  • 检测到 pnpm-lock.yaml → 命令用 pnpm
  • 默认 → 命令用 npm run

problemMatcher 映射

  • TypeScript 编译 → ["$tsc"]
  • ESLint → ["$eslint-stylish"]
  • .NET build → ["$msCompile"]
  • 其他 → []

3.4 CODEOWNERS

路径:根据代码托管平台决定

平台默认路径说明
GitHubCODEOWNERS(项目根目录)也支持 .github/CODEOWNERSdocs/CODEOWNERS
GitLabCODEOWNERS(项目根目录)支持 [Section] 分组语法
Azure DevOps不生成提示用户通过分支策略配置审阅者规则

读取 templates/codeowners.md 获取骨架模板。

生成规则:

  • 扫描项目所有子项目的核心目录,自动标注 owner
  • 使用用户在 Step 2 提供的团队 Owner 列表(未提供则用 @todo-fill-team
  • CI/CD 配置文件自动纳入 CODEOWNERS
  • Agent 配置文件(copilot-instructions.mdAGENTS.md)纳入 CODEOWNERS
  • GitLab 项目使用 [Section] 分组语法增强可读性

3.5 rules/*.md

路径:rules/ 目录

读取 templates/rules.md 获取各技术栈的规则模板。

每条规则文件包含:

  • 规则名称 + 原因
  • 正确示例 ✅
  • 错误示例 ❌
  • 检测方式

根据技术栈生成核心规则 + 通用规则:

按技术栈生成

技术栈规则文件
React/TSreact-patterns.mdno-direct-fetch.md
Vue/TSvue-patterns.mdno-direct-fetch.md
.NETdotnet-data-access.mdno-lazy-load.md
Pythonpython-imports.mdno-raw-sql.md
Gogo-error-handling.md

通用规则(所有项目都生成)

规则文件内容
no-secrets-in-code.md禁止硬编码密钥、token、连接字符串

用户自定义规则: 如果用户在 Step 2 提供了额外规约,为每条生成一个独立 rules/{name}.md 文件。


Step 4: 注入 GC 指令

copilot-instructions.md 的末尾追加 GC 段落:

# 垃圾回收

每次完成任务后,检查是否有:
- 临时文件、未使用的 import / using
- 重复代码或重复函数
- 过期的 TODO / FIXME 注释
如有,顺手清理。

Step 5: 验证完整性 & 一致性

生成完成后执行以下检查:

5.1 文件存在性

确认 5 类文件全部存在(Azure DevOps 项目跳过 CODEOWNERS)。

5.2 内容一致性校验

校验项检查逻辑
验证链一致tasks.json 的 verify 链 ↔ copilot-instructions.md 的验证命令段落,两者引用的命令必须匹配
模块地图覆盖AGENTS.md 模块地图 ↔ 实际目录结构,不遗漏核心目录
CODEOWNERS 语法根据平台校验语法格式(GitHub: path @owner,GitLab: [Section] + path @owner
rules 引用AGENTS.md 关键约束段落引用的 rules/ 文件 ↔ 实际生成的 rules/*.md 文件

5.3 生成 harness 自检 task

tasks.json 中追加一个 verify:harness 任务,检查 5 类文件的存在性:

{
  "label": "verify:harness",
  "type": "shell",
  "command": "echo Checking harness files... && test -f .github/copilot-instructions.md && test -f .github/AGENTS.md && test -f .vscode/tasks.json && test -f CODEOWNERS && test -d rules/ && echo 'All harness files OK' || echo 'MISSING harness files!'",
  "problemMatcher": []
}

Step 6: 输出 Day-1 验证指令

输出生成文件清单,并给出 Day-1 验证指令:

打开 Copilot Agent 模式,输入:
"读一下项目指令,然后告诉我:
 1. 哪些目录不能修改?
 2. 验证命令是什么?
 3. 哪些操作需要先确认?"

如果 Copilot 能准确回答这 3 个问题,说明 Harness 已生效。


增量更新行为说明

当以 --update 模式运行时:

  1. copilot-instructions.md: 读取已有文件,仅更新探测到变化的段落(如新子项目的技术栈段),保留用户手动添加的自定义段落
  2. AGENTS.md: 重新扫描目录结构,将新目录追加到模块地图末尾,保留已有目录的标注和用户修正
  3. tasks.json: 检测新子项目,追加对应的 task,更新 verify 的 dependsOn 列表
  4. CODEOWNERS: 追加新目录的 owner 映射,不修改已有行
  5. rules/*.md: 仅生成不存在的规则文件,已有文件不动

快速参考

文件用途核心内容
copilot-instructions.mdAgent 指令技术栈 + 安全边界 + 验证命令
AGENTS.md知识索引快速入口 + 模块地图 + 约束清单
tasks.json验证链每子项目独立链 → verify 总汇
CODEOWNERS审批钩子核心目录 → 团队 owner(多平台适配)
rules/*.md编码规则正例 + 反例 + 检测方式

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.