@uzysjung/agent-harness 26.151.0 → 26.153.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.ko.md +2 -2
  2. package/README.md +2 -2
  3. package/dist/{chunk-3QBHZUVB.js → chunk-OYNSK6QF.js} +49 -33
  4. package/dist/chunk-OYNSK6QF.js.map +1 -0
  5. package/dist/index.js +157 -243
  6. package/dist/index.js.map +1 -1
  7. package/dist/trust-tier-drift.js +1 -1
  8. package/package.json +1 -1
  9. package/templates/CLAUDE.md +93 -145
  10. package/templates/codex/README.md +6 -7
  11. package/templates/codex/config.toml.template +1 -9
  12. package/templates/rules/change-management.md +2 -3
  13. package/templates/rules/cli-development.md +2 -4
  14. package/templates/rules/doc-governance.md +1 -1
  15. package/templates/skills/audit-harness-fit/README.md +76 -43
  16. package/templates/skills/audit-harness-fit/SKILL.md +62 -47
  17. package/templates/skills/audit-harness-fit/evals/scenarios.yaml +179 -22
  18. package/templates/skills/audit-harness-fit/references/apply.md +74 -45
  19. package/templates/skills/audit-harness-fit/references/audit.md +142 -118
  20. package/templates/skills/audit-harness-fit/references/populate.md +53 -49
  21. package/templates/skills/audit-harness-fit/references/verification.md +131 -100
  22. package/templates/skills/audit-service-gaps/SKILL.md +0 -2
  23. package/templates/skills/clear-korean-communication/SKILL.md +76 -209
  24. package/templates/skills/external-model-consult/scripts/codex-ask.sh +9 -4
  25. package/templates/skills/external-model-consult/scripts/gemini-ask.sh +9 -4
  26. package/templates/skills/model-orchestration/SKILL.md +123 -285
  27. package/templates/skills/objective-brief/SKILL.md +3 -3
  28. package/templates/track-mcp-map.tsv +1 -1
  29. package/dist/chunk-3QBHZUVB.js.map +0 -1
  30. package/templates/agents/build-error-resolver.md +0 -111
  31. package/templates/agents/plan-checker.md +0 -116
  32. package/templates/agents/silent-failure-hunter.md +0 -50
  33. package/templates/codex/hooks/README.md +0 -37
  34. package/templates/codex/hooks/session-start.sh +0 -7
  35. package/templates/codex/hooks/uncommitted-check.sh +0 -7
  36. package/templates/skills/agent-introspection-debugging/SKILL.md +0 -153
  37. package/templates/skills/clear-korean-communication/references/pre-send-checklist.md +0 -37
  38. package/templates/skills/clear-korean-communication/references/why-it-works.md +0 -24
  39. package/templates/skills/clear-korean-communication/references/worked-examples.md +0 -89
  40. package/templates/skills/deep-research/SKILL.md +0 -179
  41. package/templates/skills/deep-research/agents/openai.yaml +0 -7
  42. package/templates/skills/eval-harness/SKILL.md +0 -306
  43. package/templates/skills/eval-harness/agents/openai.yaml +0 -7
  44. package/templates/skills/verification-loop/SKILL.md +0 -250
  45. package/templates/skills/verification-loop/agents/openai.yaml +0 -7
  46. package/templates/skills/verification-loop/references/tracks.md +0 -49
package/README.ko.md CHANGED
@@ -63,9 +63,9 @@ npx -y @uzysjung/agent-harness uninstall # 무엇을 뺄지 고른다
63
63
 
64
64
  ## 무엇을 얻는가
65
65
 
66
- - **스택 기반 큐레이션.** 검증된 옵션 중에서 이 프로젝트에 실제로 필요한 자산만 골라 설치한다. `csr-supabase` 를 고르면 세 묶음이 미리 체크된다 — 모든 track 이 받는 4종(`north-star`·`objective-brief`·`gh-issue-workflow`·`audit-harness-fit`), 개발 track 이 받는 것들(`find-skills`·`agent-browser`·`frontend-design` + 방법론 스킬 6종), 그리고 이 스택이 필요로 하는 React·shadcn·Supabase·Postgres. 카탈로그의 나머지는 처음부터 끼어들지 않는다.
66
+ - **스택 기반 큐레이션.** 검증된 옵션 중에서 이 프로젝트에 실제로 필요한 자산만 골라 설치한다. `csr-supabase` 를 고르면 세 묶음이 미리 체크된다 — 모든 track 이 받는 4종(`north-star`·`objective-brief`·`gh-issue-workflow`·`audit-harness-fit`), 개발 track 이 받는 것들(`find-skills`·`agent-browser`·`frontend-design` + 방법론 스킬 5종), 그리고 이 스택이 필요로 하는 React·shadcn·Supabase·Postgres. 카탈로그의 나머지는 처음부터 끼어들지 않는다.
67
67
 
68
- - **규율 레이어.** 실제 프로덕션 프로젝트를 에이전트로 운영하며 추출한 룰·훅·방법론 스킬·CI 스캐폴드로 구성된다. 문서 거버넌스와 검증 게이트, 작업 브리프 정규화, 재발 방지 체계를 아우르며, 특히 스킬 14종은 마켓플레이스에 의존하지 않고 이 저장소에서 직접 쓰고 관리한다. 그중 12종은 id 로 지정할 수 있고(`--with`/`--without`), 그 12종 가운데 6종은 3단계 화면에서 한 줄로 묶여 함께 켜지고 꺼진다. 이 레이어 덕분에 단순한 skill 모음을 넘어선 하네스로 작동한다.
68
+ - **규율 레이어.** 실제 프로덕션 프로젝트를 에이전트로 운영하며 추출한 룰·훅·방법론 스킬·CI 스캐폴드로 구성된다. 문서 거버넌스와 검증 게이트, 작업 브리프 정규화, 재발 방지 체계를 아우르며, 특히 스킬 14종은 마켓플레이스에 의존하지 않고 이 저장소에서 직접 쓰고 관리한다. 그중 13종은 id 로 지정할 수 있고(`--with`/`--without`), 그 13종 가운데 5종은 3단계 화면에서 한 줄로 묶여 함께 켜지고 꺼진다. 이 레이어 덕분에 단순한 skill 모음을 넘어선 하네스로 작동한다.
69
69
 
70
70
  - **4개 CLI, 하나의 어휘.** 1급 지원 대상인 Claude Code 에는 모든 자산·훅·plugin 을 적용하고, Codex, OpenCode, Antigravity 에는 skill 과 rule 레이어를 적용한다. 프로젝트가 특정 CLI 에 묶이지 않는다.
71
71
 
package/README.md CHANGED
@@ -59,9 +59,9 @@ This tool starts from the stack instead. You pick a track, and it pre-checks the
59
59
 
60
60
  ## What you get
61
61
 
62
- - **Curation by tech stack.** Of the vetted options, you install only what this project calls for. Pick `csr-supabase` and step 3 pre-checks three groups: the four that every track gets (`north-star`, `objective-brief`, `gh-issue-workflow`, `audit-harness-fit`), the dev-track set (`find-skills`, `agent-browser`, `frontend-design`, and the six method skills), and the ones this stack calls for — React, shadcn, Supabase, Postgres. Not the rest of the catalog.
62
+ - **Curation by tech stack.** Of the vetted options, you install only what this project calls for. Pick `csr-supabase` and step 3 pre-checks three groups: the four that every track gets (`north-star`, `objective-brief`, `gh-issue-workflow`, `audit-harness-fit`), the dev-track set (`find-skills`, `agent-browser`, `frontend-design`, and the five method skills), and the ones this stack calls for — React, shadcn, Supabase, Postgres. Not the rest of the catalog.
63
63
 
64
- - **A discipline layer.** Rules, hooks, method skills, and CI scaffolds distilled from running real production projects with agents: doc governance, verification gates, normalized task briefs, recurrence prevention. Fourteen of those skills are written and maintained in this repo rather than pulled from a marketplace — twelve of them selectable by id with `--with` / `--without`, six of which collapse into one row at step 3 — so the harness ships the method, not just a pointer to one. This layer is what makes it a harness rather than a skill pack.
64
+ - **A discipline layer.** Rules, hooks, method skills, and CI scaffolds distilled from running real production projects with agents: doc governance, verification gates, normalized task briefs, recurrence prevention. Fourteen of those skills are written and maintained in this repo rather than pulled from a marketplace — thirteen of them selectable by id with `--with` / `--without`, five of which collapse into one row at step 3 — so the harness ships the method, not just a pointer to one. This layer is what makes it a harness rather than a skill pack.
65
65
 
66
66
  - **Four CLIs, one vocabulary.** Claude Code is first class — all assets, hooks, and plugins. Codex, OpenCode, and Antigravity get the skills and rules layer. Your project is not locked to one CLI.
67
67
 
@@ -195,16 +195,6 @@ var EXTERNAL_ASSETS = [
195
195
  condition: { kind: "has-dev-track" },
196
196
  method: { kind: "internal", key: "audit-service-gaps" }
197
197
  },
198
- {
199
- id: "verification-loop",
200
- tier: "official",
201
- // uzys 자사 스킬 리포
202
- description: "Verification loop \u2014 run proportional verification tracks (UI \xB7 API \xB7 CLI \xB7 library \xB7 docs \xB7 real user flow) and end with evidence plus a fixed verdict; a green build is not proof of user-visible completion",
203
- category: "dev-tools",
204
- source: "uzys",
205
- condition: { kind: "has-dev-track" },
206
- method: { kind: "internal", key: "verification-loop" }
207
- },
208
198
  {
209
199
  id: "multi-persona-review",
210
200
  tier: "official",
@@ -285,7 +275,7 @@ var EXTERNAL_ASSETS = [
285
275
  id: "audit-harness-fit",
286
276
  tier: "official",
287
277
  // uzys 자사 스킬
288
- description: "Audit harness fit \u2014 audit or clean up agent instructions and skills: remove needless questions and rechecks, reconcile conflicting or changed guidance, retire low-value rules and skills, move decision history out of resident text, right-size user-journey verification; also fill or refresh AGENTS.md / CLAUDE.md project context from repository evidence",
278
+ description: "Audit harness fit \u2014 improve agent instructions and skills for autonomous, productive delivery with verifiable quality: resolve needless questions and repeated checks, conflicting decisions, missing actionable context, and low-value procedures; adapt guidance to demonstrated model and tool capabilities; also fill or refresh AGENTS.md / CLAUDE.md project context from repository evidence",
289
279
  category: "workflow",
290
280
  source: "uzys",
291
281
  condition: { kind: "any-track", tracks: [...TRACKS] },
@@ -526,7 +516,10 @@ var EXTERNAL_ASSETS = [
526
516
  condition: { kind: "opt-in" },
527
517
  // 리포에 스킬 14종(brandkit·brutalist·minimalist 등)이 있고 본체가 `taste-skill` —
528
518
  // 스타일 변형은 그 안에서 고른다. 다른 단일 대표 자산(remotion)과 같은 형태.
529
- method: { kind: "skill", source: "Leonxlnx/taste-skill", skill: "taste-skill" }
519
+ // 2026-09-20 (#420) 업스트림이 SKILL.md `name:` 을 `design-taste-frontend` 로 바꿨다. `npx skills
520
+ // add --skill` 은 디렉터리명이 아니라 **frontmatter name** 으로 맞춘다(실측: 옛 이름은 "No matching
521
+ // skills found", 새 이름은 설치 완료). 디렉터리는 여전히 `skills/taste-skill/` 이다.
522
+ method: { kind: "skill", source: "Leonxlnx/taste-skill", skill: "design-taste-frontend" }
530
523
  },
531
524
  {
532
525
  id: "scroll-world",
@@ -541,10 +534,10 @@ var EXTERNAL_ASSETS = [
541
534
  // 2026-08-16 — Preline 은 Tailwind 컴포넌트 킷이지만 **프레임워크에 매이지 않는다**: htmx·
542
535
  // vanilla 에도 붙는다(사용자 확인). 그래서 `frontend` 이면서 React/Vue 트랙 전용이 아니다.
543
536
  //
544
- // 리포 안에 스킬은 `skills/theme-generator/` **하나**다 공식 문서는 이것을
545
- // "preline-theme-generator" 부르지만 실제 디렉터리명은 `theme-generator` 이고,
546
- // `npx skills add` 보는 것은 디렉터리명이다(실측 2026-08-16). 문서 표기를 그대로 옮겼다면
547
- // 설치가 조용히 빗나갔다.
537
+ // 리포 안에 테마 스킬은 `skills/theme-generator/` 하나다. 2026-08-16 실측에서는 `npx skills add`
538
+ // 가 디렉터리명(`theme-generator`)으로 맞췄는데, 2026-09-01 부터 이름이 "No matching skills
539
+ // found" 됐다(#420) 지금은 SKILL.md 의 `name:`(`preline-theme-generator`)으로 맞춘다(실측
540
+ // 2026-09-20: 이름 exit 1 · 새 이름 설치 완료). 이름이 바뀌면 월 1회 catalog-verify 가 잡는다.
548
541
  //
549
542
  // 같은 날 조사한 flowbite 는 **넣지 않는다**: 에이전트용 제공물이 MCP 서버뿐인데, 이 저장소의
550
543
  // `.mcp.json` 조립은 트랙 조건만 읽어 opt-in 경로가 없다 — 넣으면 해당 트랙 전원에게 항상
@@ -557,7 +550,11 @@ var EXTERNAL_ASSETS = [
557
550
  category: "frontend",
558
551
  source: "htmlstreamofficial",
559
552
  condition: { kind: "opt-in" },
560
- method: { kind: "skill", source: "htmlstreamofficial/preline", skill: "theme-generator" }
553
+ method: {
554
+ kind: "skill",
555
+ source: "htmlstreamofficial/preline",
556
+ skill: "preline-theme-generator"
557
+ }
561
558
  },
562
559
  // === dev tools (has_dev_track) ===
563
560
  // v26.110.0 (ADR-039) — code-review: /code-review 커맨드 1개 (다중 에이전트 confidence
@@ -1026,8 +1023,7 @@ var DEV_METHOD_SKILL_IDS = [
1026
1023
  "clear-korean-communication",
1027
1024
  "audit-service-gaps",
1028
1025
  "multi-persona-review",
1029
- "recurrence-prevention",
1030
- "verification-loop"
1026
+ "recurrence-prevention"
1031
1027
  ];
1032
1028
  var INTERNAL_BUNDLED_SKILL_IDS = [
1033
1029
  ...DEV_METHOD_SKILL_IDS,
@@ -1057,7 +1053,12 @@ var RENAMED_SKILL_IDS = {
1057
1053
  var RETIRED_SKILL_IDS = [
1058
1054
  "strategic-compact",
1059
1055
  "continuous-learning-v2",
1060
- "spec-scaling"
1056
+ "spec-scaling",
1057
+ // ADR-090 (#452) — 관측 없는 자산 은퇴. 앞 세 종과 같은 경로로 안내한다.
1058
+ "verification-loop",
1059
+ "deep-research",
1060
+ "eval-harness",
1061
+ "agent-introspection-debugging"
1061
1062
  ];
1062
1063
  var TRUST_TIER = Object.fromEntries(
1063
1064
  EXTERNAL_ASSETS.map((a) => [a.id, a.tier])
@@ -1666,17 +1667,29 @@ function resolveRules(spec) {
1666
1667
  return [...set].sort();
1667
1668
  }
1668
1669
  var ALL_RULES = resolveRules({ tracks: [...TRACKS] });
1669
- var CORE_AGENTS = ["reviewer", "data-analyst", "strategist"];
1670
- var DEV_AGENTS = ["plan-checker", "implementer"];
1671
- var DEV_AGENTS_ECC = ["silent-failure-hunter", "build-error-resolver"];
1672
- var RETIRED_AGENT_IDS = ["code-reviewer", "security-reviewer"];
1670
+ var CORE_AGENTS = ["reviewer"];
1671
+ var DEV_AGENTS = ["implementer"];
1672
+ var TRACK_AGENTS = [
1673
+ ["data-analyst", "data|full"],
1674
+ ["strategist", "executive|full"]
1675
+ ];
1676
+ var RETIRED_AGENTS = [
1677
+ { id: "code-reviewer", instead: "Claude Code \uC758 `/code-review` \uAC00 \uAC19\uC740 \uC77C\uC744 \uD55C\uB2E4" },
1678
+ { id: "security-reviewer", instead: "Claude Code \uC758 `/security-review` \uAC00 \uAC19\uC740 \uC77C\uC744 \uD55C\uB2E4" },
1679
+ // ADR-090 (#452) — spawn 0 · 결함만 관측된 세 종. **대안을 종마다 적는다**: 한 문구로 뭉치면
1680
+ // 자기 에이전트와 상관없는 대안을 읽게 되고, 그건 "대신 쓸 것을 말한다"의 뜻을 잃는다.
1681
+ { id: "plan-checker", instead: "`reviewer` \uAC00 \uACC4\uD68D \uBB38\uC11C\uB3C4 \uAC19\uC740 \uACC4\uC57D\uC73C\uB85C \uAC80\uD1A0\uD55C\uB2E4" },
1682
+ { id: "silent-failure-hunter", instead: "Claude Code \uC758 `/code-review` \uAC00 \uAC19\uC740 \uC77C\uC744 \uD55C\uB2E4" },
1683
+ { id: "build-error-resolver", instead: "\uBAA8\uB378\uC774 \uAE30\uBCF8\uC73C\uB85C \uD558\uB294 \uC77C\uC774\uB77C \uB300\uCCB4 \uC790\uC0B0\uC774 \uC5C6\uB2E4" }
1684
+ ];
1685
+ var RETIRED_AGENT_IDS = RETIRED_AGENTS.map((a) => a.id);
1673
1686
  var ALWAYS_HOOKS = ["session-start.sh", "protect-files.sh"];
1674
1687
  var COMMON_SKILL_DIRS = [];
1675
1688
  var COMMON_SKILL_DIRS_ECC = [];
1676
- var MODIFIED_COMMON_SKILL_DIRS = ["deep-research"];
1689
+ var MODIFIED_COMMON_SKILL_DIRS = [];
1677
1690
  var DEV_SKILL_DIRS = [];
1678
- var DEV_SKILL_DIRS_ECC = ["agent-introspection-debugging"];
1679
- var MODIFIED_DEV_SKILL_DIRS = ["eval-harness"];
1691
+ var DEV_SKILL_DIRS_ECC = [];
1692
+ var MODIFIED_DEV_SKILL_DIRS = [];
1680
1693
  var MODIFIED_ECC_SKILL_DIRS = [...MODIFIED_COMMON_SKILL_DIRS, ...MODIFIED_DEV_SKILL_DIRS];
1681
1694
  var UI_SKILL_DIRS = ["ui-visual-review"];
1682
1695
  var UI_SKILL_DIRS_ECC = ["e2e-testing"];
@@ -1734,12 +1747,12 @@ function buildManifest(spec) {
1734
1747
  applies: dev
1735
1748
  });
1736
1749
  }
1737
- for (const a of DEV_AGENTS_ECC) {
1750
+ for (const [a, pattern] of TRACK_AGENTS) {
1738
1751
  m.push({
1739
1752
  source: `agents/${a}.md`,
1740
1753
  target: `.claude/agents/${a}.md`,
1741
1754
  type: "file",
1742
- applies: (s) => !s.withEcc && hasDevTrack(s.tracks)
1755
+ applies: onTracks(pattern)
1743
1756
  });
1744
1757
  }
1745
1758
  for (const sd of COMMON_SKILL_DIRS) {
@@ -1948,6 +1961,7 @@ function descriptorTokens(path2) {
1948
1961
  }
1949
1962
  function residentCost(entries, root = resolveBundleRoot()) {
1950
1963
  const tpl = (source) => join3(root, "templates", source);
1964
+ const measured = (e) => e.file ?? tpl(e.source);
1951
1965
  const perSkill = {};
1952
1966
  let rules = 0;
1953
1967
  let skillDescriptors = 0;
@@ -1957,13 +1971,13 @@ function residentCost(entries, root = resolveBundleRoot()) {
1957
1971
  let agentItems = 0;
1958
1972
  for (const e of entries) {
1959
1973
  if (e.target.startsWith(".claude/rules/")) {
1960
- rules += fileTokens(tpl(e.source));
1974
+ rules += fileTokens(measured(e));
1961
1975
  ruleItems += 1;
1962
1976
  } else if (e.target.startsWith(".claude/agents/")) {
1963
- agentDescriptors += descriptorTokens(tpl(e.source));
1977
+ agentDescriptors += descriptorTokens(measured(e));
1964
1978
  agentItems += 1;
1965
1979
  } else if (e.target.startsWith(".claude/skills/")) {
1966
- const t = descriptorTokens(join3(tpl(e.source), "SKILL.md"));
1980
+ const t = descriptorTokens(join3(measured(e), "SKILL.md"));
1967
1981
  skillDescriptors += t;
1968
1982
  skillItems += 1;
1969
1983
  const id = /\.claude\/skills\/([^/]+)/.exec(e.target)?.[1];
@@ -2128,6 +2142,8 @@ export {
2128
2142
  buildAssetSpec,
2129
2143
  resolveRules,
2130
2144
  ALL_RULES,
2145
+ TRACK_AGENTS,
2146
+ RETIRED_AGENTS,
2131
2147
  RETIRED_AGENT_IDS,
2132
2148
  isCliNeutralTarget,
2133
2149
  buildManifest,
@@ -2141,4 +2157,4 @@ export {
2141
2157
  formatResidentCostLine,
2142
2158
  formatResidentCostBlock
2143
2159
  };
2144
- //# sourceMappingURL=chunk-3QBHZUVB.js.map
2160
+ //# sourceMappingURL=chunk-OYNSK6QF.js.map