@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.
- package/README.ko.md +2 -2
- package/README.md +2 -2
- package/dist/{chunk-3QBHZUVB.js → chunk-OYNSK6QF.js} +49 -33
- package/dist/chunk-OYNSK6QF.js.map +1 -0
- package/dist/index.js +157 -243
- package/dist/index.js.map +1 -1
- package/dist/trust-tier-drift.js +1 -1
- package/package.json +1 -1
- package/templates/CLAUDE.md +93 -145
- package/templates/codex/README.md +6 -7
- package/templates/codex/config.toml.template +1 -9
- package/templates/rules/change-management.md +2 -3
- package/templates/rules/cli-development.md +2 -4
- package/templates/rules/doc-governance.md +1 -1
- package/templates/skills/audit-harness-fit/README.md +76 -43
- package/templates/skills/audit-harness-fit/SKILL.md +62 -47
- package/templates/skills/audit-harness-fit/evals/scenarios.yaml +179 -22
- package/templates/skills/audit-harness-fit/references/apply.md +74 -45
- package/templates/skills/audit-harness-fit/references/audit.md +142 -118
- package/templates/skills/audit-harness-fit/references/populate.md +53 -49
- package/templates/skills/audit-harness-fit/references/verification.md +131 -100
- package/templates/skills/audit-service-gaps/SKILL.md +0 -2
- package/templates/skills/clear-korean-communication/SKILL.md +76 -209
- package/templates/skills/external-model-consult/scripts/codex-ask.sh +9 -4
- package/templates/skills/external-model-consult/scripts/gemini-ask.sh +9 -4
- package/templates/skills/model-orchestration/SKILL.md +123 -285
- package/templates/skills/objective-brief/SKILL.md +3 -3
- package/templates/track-mcp-map.tsv +1 -1
- package/dist/chunk-3QBHZUVB.js.map +0 -1
- package/templates/agents/build-error-resolver.md +0 -111
- package/templates/agents/plan-checker.md +0 -116
- package/templates/agents/silent-failure-hunter.md +0 -50
- package/templates/codex/hooks/README.md +0 -37
- package/templates/codex/hooks/session-start.sh +0 -7
- package/templates/codex/hooks/uncommitted-check.sh +0 -7
- package/templates/skills/agent-introspection-debugging/SKILL.md +0 -153
- package/templates/skills/clear-korean-communication/references/pre-send-checklist.md +0 -37
- package/templates/skills/clear-korean-communication/references/why-it-works.md +0 -24
- package/templates/skills/clear-korean-communication/references/worked-examples.md +0 -89
- package/templates/skills/deep-research/SKILL.md +0 -179
- package/templates/skills/deep-research/agents/openai.yaml +0 -7
- package/templates/skills/eval-harness/SKILL.md +0 -306
- package/templates/skills/eval-harness/agents/openai.yaml +0 -7
- package/templates/skills/verification-loop/SKILL.md +0 -250
- package/templates/skills/verification-loop/agents/openai.yaml +0 -7
- 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` + 방법론 스킬
|
|
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종은 마켓플레이스에 의존하지 않고 이 저장소에서 직접 쓰고 관리한다. 그중
|
|
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
|
|
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 —
|
|
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
|
|
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
|
-
|
|
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
|
-
//
|
|
546
|
-
//
|
|
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: {
|
|
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"
|
|
1670
|
-
var DEV_AGENTS = ["
|
|
1671
|
-
var
|
|
1672
|
-
|
|
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 = [
|
|
1689
|
+
var MODIFIED_COMMON_SKILL_DIRS = [];
|
|
1677
1690
|
var DEV_SKILL_DIRS = [];
|
|
1678
|
-
var DEV_SKILL_DIRS_ECC = [
|
|
1679
|
-
var MODIFIED_DEV_SKILL_DIRS = [
|
|
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
|
|
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: (
|
|
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(
|
|
1974
|
+
rules += fileTokens(measured(e));
|
|
1961
1975
|
ruleItems += 1;
|
|
1962
1976
|
} else if (e.target.startsWith(".claude/agents/")) {
|
|
1963
|
-
agentDescriptors += descriptorTokens(
|
|
1977
|
+
agentDescriptors += descriptorTokens(measured(e));
|
|
1964
1978
|
agentItems += 1;
|
|
1965
1979
|
} else if (e.target.startsWith(".claude/skills/")) {
|
|
1966
|
-
const t = descriptorTokens(join3(
|
|
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-
|
|
2160
|
+
//# sourceMappingURL=chunk-OYNSK6QF.js.map
|