@uzysjung/agent-harness 26.147.0 → 26.148.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 CHANGED
@@ -50,28 +50,28 @@ npx -y @uzysjung/agent-harness uninstall # 무엇을 뺄지 고른다
50
50
  ```
51
51
 
52
52
  터미널에서 `uninstall` 을 실행하면 항목별로 지울지 전부 지울지 묻는다. 안전하게 되돌릴 수 있는
53
- 것만 되돌리고, 글로벌 자산·훅 등록·`.mcp.json` 같은 `.claude/` 밖 파일은 지우는 대신 경로를
53
+ 것만 되돌리고, 글로벌 자산과 `.mcp.json` 같은 `.claude/` 밖 파일은 지우는 대신 경로를
54
54
  *출력한다* — 사용자 내용이 섞인 파일은 기계적으로 고치지 않는다. 설치 화면에서 체크를 풀어도
55
55
  제거되지 않으며, 제거는 오직 이 명령에서만 일어난다. 자세한 내용은
56
56
  [uninstall](docs/USAGE.md#uninstall-v26640) 참고.
57
57
 
58
58
  ## 왜
59
59
 
60
- 코딩 에이전트는 계속 강해지지만, 한 번 설치한 skill 과 MCP 는 실제 사용 여부와 무관하게 매 세션 context window 를 차지한다. awesome-list 에 수백 개의 선택지가 있어도 내 기술 스택에 맞는 항목을 짚어주지는 않는다. 결국 전부 설치해 매 세션 불필요한 비용을 치르거나, 프로젝트를 시작할 때마다 직접 목록을 읽고 골라야 한다.
60
+ 코딩 에이전트는 계속 발전하지만, 한 번 설치한 skill 과 MCP 는 실제 사용과 무관하게 매 세션 context window 를 점유한다. awesome-list 에 수백 개의 선택지가 있어도 내 기술 스택에 맞는 항목을 찾아주지는 않는다. 결국 전부 설치해 매 세션 불필요한 비용을 치르거나, 프로젝트를 시작할 때마다 직접 목록을 확인하고 골라야 한다.
61
61
 
62
62
  이 도구는 스택에서 출발한다. 원하는 track 을 고르면 해당 track 이 필요로 하는 자산이 미리 체크된다. 사용자는 설치를 진행하기 전에 선택된 자산을 검토하고 필요 없는 항목을 해제할 수 있다.
63
63
 
64
64
  ## 무엇을 얻는가
65
65
 
66
- - **스택 기반 큐레이션.** 검증된 옵션 중에서 이 프로젝트에 실제로 필요한 자산만 골라 설치한다. `csr-supabase` 를 고르면 React, shadcn, Supabase, Postgres 자산만 미리 체크된다 나머지 38개는 처음부터 끼어들지 않는다.
66
+ - **스택 기반 큐레이션.** 검증된 옵션 중에서 이 프로젝트에 실제로 필요한 자산만 골라 설치한다. `csr-supabase` 를 고르면 묶음이 미리 체크된다 — 모든 track 이 받는 4종(`north-star`·`task-brief`·`gh-issue-workflow`·`audit-harness-fit`), 개발 track 이 받는 것들(`find-skills`·`agent-browser`·`frontend-design` + 방법론 스킬 6종), 그리고 스택이 필요로 하는 React·shadcn·Supabase·Postgres. 카탈로그의 나머지는 처음부터 끼어들지 않는다.
67
67
 
68
- - **규율 레이어.** 실제 프로덕션 프로젝트를 에이전트로 운영하며 추출한 룰·훅·방법론 스킬·CI 스캐폴드로 구성된다. 문서 거버넌스와 검증 게이트, 벤치마크 패리티 루프, 재발 방지 체계를 아우르며, 특히 스킬 11종은 마켓플레이스에 의존하지 않고 이 저장소에서 직접 쓰고 관리한다. 이 레이어 덕분에 단순한 skill 모음을 넘어선 하네스로 작동한다.
68
+ - **규율 레이어.** 실제 프로덕션 프로젝트를 에이전트로 운영하며 추출한 룰·훅·방법론 스킬·CI 스캐폴드로 구성된다. 문서 거버넌스와 검증 게이트, 작업 브리프 정규화, 재발 방지 체계를 아우르며, 특히 스킬 14종은 마켓플레이스에 의존하지 않고 이 저장소에서 직접 쓰고 관리한다. 그중 12종은 id 로 지정할 수 있고(`--with`/`--without`), 그 12종 가운데 6종은 3단계 화면에서 한 줄로 묶여 함께 켜지고 꺼진다. 이 레이어 덕분에 단순한 skill 모음을 넘어선 하네스로 작동한다.
69
69
 
70
70
  - **4개 CLI, 하나의 어휘.** 1급 지원 대상인 Claude Code 에는 모든 자산·훅·plugin 을 적용하고, Codex, OpenCode, Antigravity 에는 skill 과 rule 레이어를 적용한다. 프로젝트가 특정 CLI 에 묶이지 않는다.
71
71
 
72
72
  ## 검증
73
73
 
74
- vetted 등급의 조건은 셋이다 — GitHub star 1,000개 이상, 활발한 유지보수, 격리된 Docker 컨테이너에서의 실설치 검증 통과. CI cron 이 매월 세 기준을 다시 검사한다.
74
+ vetted 등급의 조건은 GitHub star 1,000개 이상, 활발한 유지보수, 격리된 Docker 컨테이너에서의 실설치 검증 통과 세 가지다. 매월 CI cron 이 세 기준을 다시 검사한다.
75
75
 
76
76
  단, vetted 가 라인 단위 보안 감사나 prompt-injection 스캔을 거쳤다는 뜻은 아니다. npm 과 npx 자산은 버전을 고정하지만, plugin 과 skill 자산은 upstream HEAD 를 참조하므로 아직 commit 을 고정하지 않는다. 설치하는 모든 자산은 일반적인 서드파티 의존성과 똑같이 취급할 것 — [SECURITY.md](SECURITY.md) 참고.
77
77
 
package/README.md CHANGED
@@ -49,7 +49,7 @@ npx -y @uzysjung/agent-harness update # refresh it to the current release
49
49
  npx -y @uzysjung/agent-harness uninstall # pick what to remove
50
50
  ```
51
51
 
52
- Run in a terminal, `uninstall` asks what to take out — item by item, or everything. It reverses what it safely can and *prints* the rest — global assets, hook registrations, and files outside `.claude/` such as `.mcp.json` — instead of editing files that hold your own content. Unchecking something in the installer never removes it; removal only happens here. See [uninstall](docs/USAGE.md#uninstall-v26640).
52
+ Run in a terminal, `uninstall` asks what to take out — item by item, or everything. It reverses what it safely can and *prints* the rest — global-scope assets, and files outside `.claude/` such as `.mcp.json` — instead of editing files that hold your own content. Unchecking something in the installer never removes it; removal only happens here. See [uninstall](docs/USAGE.md#uninstall-v26640).
53
53
 
54
54
  ## Why
55
55
 
@@ -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 React, shadcn, Supabase, and Postgres assets not the other forty.
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`, `task-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.
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, benchmark-parity loops, recurrence prevention. Eleven of those skills are written and maintained in this repo rather than pulled from a marketplace, 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 — 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.
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
 
@@ -443,23 +443,25 @@ var EXTERNAL_ASSETS = [
443
443
  method: { kind: "npm", pkg: "supabase", version: "2.108.0" }
444
444
  },
445
445
  // === UI tracks (csr-*|ssr-*|full) ===
446
- // v26.92.0 — frontend-design (Anthropic official, claude-plugins-official 984.5K installs).
446
+ // v26.92.0 — frontend-design (Anthropic official).
447
447
  // 사용자 결정: has-dev-track 기본추천 (모든 개발 트랙, executive 제외).
448
448
  // category=frontend (UI 자산, wizard 그룹).
449
- // repoForAsset=marketplace(anthropics/claude-plugins-official); official tier=drift 제외.
449
+ //
450
+ // 2026-08-26 (#344) — **plugin → skill.** 배달 방식이 도달 CLI 를 정한다(assetCliSupport):
451
+ // `plugin` 은 `claude plugin install` 을 spawn 하므로 **구조적으로 Claude Code 전용**이라,
452
+ // Codex·OpenCode·Antigravity 를 고른 사용자는 기본 추천 자산인데도 한 번도 받지 못했다
453
+ // (사용자 적발). 같은 스킬이 `anthropics/skills` 에 원본으로 있고 `npx skills add` 는
454
+ // `--agent` 로 네 CLI 전부에 깐다 — 실재 확인 2026-08-26: `skills/frontend-design/SKILL.md`.
455
+ // tier 는 official 그대로(저자 동일). marketplace 경유가 아니게 되어 upstream 판본을 직접 쓴다.
450
456
  {
451
457
  id: "frontend-design",
452
458
  tier: "official",
453
- // anthropics/claude-plugins-official (Anthropic 저자, 984.5K installs)
459
+ // anthropics/skills (Anthropic 저자, ★171.5K — 2026-08-26 gh api 실측)
454
460
  description: "frontend-design \u2014 distinctive production-grade UI generation (Anthropic official, avoids generic AI aesthetics)",
455
461
  category: "frontend",
456
462
  source: "anthropics",
457
463
  condition: { kind: "has-dev-track" },
458
- method: {
459
- kind: "plugin",
460
- marketplace: "anthropics/claude-plugins-official",
461
- pluginId: "frontend-design@claude-plugins-official"
462
- }
464
+ method: { kind: "skill", source: "anthropics/skills", skill: "frontend-design" }
463
465
  },
464
466
  // 2026-08-02 정비 — 프론트엔드 품질 3종 (사용자 지시). 전부 opt-in: frontend-design 이 기본
465
467
  // 생성기이고 이 셋은 그 위의 취향·디테일 층이라 상시 비용을 물릴 근거가 없다 (ADR-032/035
@@ -1093,12 +1095,21 @@ function copyFile(source, target) {
1093
1095
  mkdirSync(dirname(target), { recursive: true });
1094
1096
  copyFileSync(source, target);
1095
1097
  }
1096
- function copyDir(source, target) {
1098
+ function copyDir(source, target, foreignOf) {
1097
1099
  if (!existsSync(source)) {
1098
1100
  throw new Error(`Source dir not found: ${source}`);
1099
1101
  }
1100
1102
  mkdirSync(target, { recursive: true });
1101
- cpSync(source, target, { recursive: true, force: true });
1103
+ const skipped = [];
1104
+ for (const rel of listFilesRecursive(source)) {
1105
+ const foreign = foreignOf(rel);
1106
+ if (foreign !== null) {
1107
+ skipped.push(foreign);
1108
+ continue;
1109
+ }
1110
+ copyFile(join(source, rel), join(target, rel));
1111
+ }
1112
+ return skipped;
1102
1113
  }
1103
1114
  var MAX_BACKUP_CLAIMS = 100;
1104
1115
  function claimBackupPath(base, claim) {
@@ -1664,25 +1675,19 @@ function buildManifest(spec) {
1664
1675
  type: "file",
1665
1676
  applies: all
1666
1677
  });
1667
- m.push({
1668
- source: "skills/market-research",
1669
- target: ".claude/skills/market-research",
1670
- type: "dir",
1671
- applies: onTracks("executive|full")
1672
- });
1673
- for (const sd of ["investor-materials", "investor-outreach"]) {
1678
+ for (const sd of ["market-research", "investor-materials", "investor-outreach"]) {
1674
1679
  m.push({
1675
1680
  source: `skills/${sd}`,
1676
1681
  target: `.claude/skills/${sd}`,
1677
1682
  type: "dir",
1678
- applies: onTracks("executive|full")
1683
+ applies: (s) => !s.withEcc && onTracks("executive|full")(s)
1679
1684
  });
1680
1685
  }
1681
1686
  m.push({
1682
1687
  source: "skills/nextjs-turbopack",
1683
1688
  target: ".claude/skills/nextjs-turbopack",
1684
1689
  type: "dir",
1685
- applies: onTracks("ssr-nextjs|full")
1690
+ applies: (s) => !s.withEcc && onTracks("ssr-nextjs|full")(s)
1686
1691
  });
1687
1692
  for (const sd of INTERNAL_BUNDLED_SKILL_IDS) {
1688
1693
  m.push({
@@ -1997,4 +2002,4 @@ export {
1997
2002
  formatResidentCostLine,
1998
2003
  formatResidentCostBlock
1999
2004
  };
2000
- //# sourceMappingURL=chunk-GPH5AWLX.js.map
2005
+ //# sourceMappingURL=chunk-PTUM2NI3.js.map