@uzysjung/agent-harness 26.158.0 → 26.160.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.
@@ -69,7 +69,6 @@ function resolveScope(scope) {
69
69
  return scope ?? "project";
70
70
  }
71
71
  var DEFAULT_OPTIONS = {
72
- withPrune: false,
73
72
  withCodexTrust: false
74
73
  };
75
74
  var UPDATE_GROUPS = [
@@ -118,7 +117,7 @@ var EXTERNAL_ASSETS = [
118
117
  id: "anthropic-data-plugin",
119
118
  tier: "official",
120
119
  // anthropics/knowledge-work-plugins 18k
121
- description: "Anthropic data plugin (visualization, SQL exploration)",
120
+ description: "Anthropic data plugin \u2014 SQL exploration, analysis, and visualization workflows. Installing it does not connect your warehouse; that is a separate MCP setup",
122
121
  category: "data",
123
122
  source: "anthropics",
124
123
  condition: { kind: "any-track", tracks: ["data", "full"] },
@@ -328,79 +327,12 @@ var EXTERNAL_ASSETS = [
328
327
  method: { kind: "internal", key: "natural-korean" }
329
328
  },
330
329
  // === Option-gated (v26.42.0 — opt-in, BREAKING vs prior has-dev-track auto-install) ===
331
- {
332
- id: "addy-agent-skills",
333
- tier: "vetted",
334
- // addyosmani 47k
335
- description: "addy agent-skills (general dev)",
336
- category: "workflow",
337
- source: "addyosmani",
338
- condition: { kind: "opt-in" },
339
- method: {
340
- kind: "plugin",
341
- marketplace: "addyosmani/agent-skills",
342
- pluginId: "agent-skills@addy-agent-skills"
343
- }
344
- },
345
- {
346
- id: "superpowers",
347
- tier: "official",
348
- // anthropics/claude-plugins-official 공식 배포 (소스 obra 213k)
349
- // 저자 = obra (190k★ github.com/obra/superpowers). 호스팅 = Anthropic 공식
350
- // marketplace github.com/anthropics/claude-plugins-official ("Official,
351
- // Anthropic-managed directory of high quality Claude Code Plugins").
352
- // source/marketplace 분리는 의도적 — source=저자, marketplace=registry.
353
- description: "Superpowers \u2014 agentic skills framework (obra, Anthropic official marketplace)",
354
- category: "workflow",
355
- source: "obra",
356
- condition: { kind: "opt-in" },
357
- method: {
358
- kind: "plugin",
359
- marketplace: "anthropics/claude-plugins-official",
360
- pluginId: "superpowers@claude-plugins-official"
361
- }
362
- },
363
- // v26.110.0 (ADR-039, 오피셜 플러그인 큐레이션) — feature-dev: 탐색→설계→구현 워크플로우 +
364
- // 전용 에이전트 3종(탐색·설계·리뷰). 방법론류 — ADR-032 "워크플로우 강제 구조는 기본
365
- // 불필요" + 그 리뷰 에이전트가 Claude Code 기본 `/code-review` 와 중복(ADR-089)
366
- // → superpowers 와 동급 opt-in.
367
- {
368
- id: "feature-dev",
369
- tier: "official",
370
- // anthropics/claude-plugins-official (242.5K installs, 사용자 관측 2026-07-18)
371
- description: "feature-dev \u2014 guided feature workflow with explore/architect/review agents (Anthropic official)",
372
- category: "workflow",
373
- source: "anthropics",
374
- condition: { kind: "opt-in" },
375
- method: {
376
- kind: "plugin",
377
- marketplace: "anthropics/claude-plugins-official",
378
- pluginId: "feature-dev@claude-plugins-official"
379
- }
380
- },
381
- {
382
- // v26.75.0 (ADR-021) — wshobson/agents marketplace.json name = "claude-code-workflows"
383
- // (84 plugins). 대표 = full-stack-orchestration. 다른 orchestrator(agent-orchestration/
384
- // tdd-workflows/ship-mate 등): `claude plugin install <name>@claude-code-workflows`.
385
- id: "wshobson-agents",
386
- tier: "vetted",
387
- // wshobson/agents 36k
388
- description: "wshobson agents \u2014 multi-agent orchestration workflows (full-stack/tdd/review)",
389
- category: "workflow",
390
- source: "wshobson",
391
- condition: { kind: "opt-in" },
392
- method: {
393
- kind: "plugin",
394
- marketplace: "wshobson/agents",
395
- pluginId: "full-stack-orchestration@claude-code-workflows"
396
- }
397
- },
398
330
  {
399
331
  // v26.75.0 (ADR-021) — `npm i --save-dev @fission-ai/openspec` 후 `openspec init` 로 슬래시 주입.
400
332
  id: "openspec",
401
333
  tier: "vetted",
402
334
  // Fission-AI/OpenSpec 53k
403
- description: "OpenSpec \u2014 spec-driven brownfield delta workflow (propose \u2192 apply \u2192 archive)",
335
+ description: "OpenSpec \u2014 spec-driven change workflow for an existing codebase (propose \u2192 apply \u2192 archive). Use when your team has adopted a shared spec-and-delta process; it is a collaboration contract, not a coding aid",
404
336
  category: "workflow",
405
337
  source: "fission-ai",
406
338
  condition: { kind: "opt-in" },
@@ -412,7 +344,7 @@ var EXTERNAL_ASSETS = [
412
344
  id: "bmad-method",
413
345
  tier: "vetted",
414
346
  // bmad-code-org/BMAD-METHOD 48k
415
- description: "BMAD-METHOD \u2014 multi-agent agile workflow (PM/Architect/Dev, 12+ agents)",
347
+ description: "BMAD-METHOD \u2014 multi-agent agile workflow (PM / Architect / Dev roles). Use for team-scale delivery with fixed roles; the pinned 6.9.0 still runs the full ceremony, so skip it for solo or small changes",
416
348
  category: "workflow",
417
349
  source: "bmad-code-org",
418
350
  condition: { kind: "opt-in" },
@@ -436,7 +368,7 @@ var EXTERNAL_ASSETS = [
436
368
  id: "railway-skills",
437
369
  tier: "experimental",
438
370
  // railwayapp/railway-skills 268
439
- description: "Railway agent-skills (deploy + project/service/env management)",
371
+ description: "Railway skills \u2014 deploy and manage projects, services, and environments on Railway. Only for projects hosted on Railway; it drives a real account",
440
372
  category: "backend",
441
373
  source: "railwayapp",
442
374
  // 2026-08-02 사용자 결정: 트랙 기본 → opt-in (ADR-063)
@@ -452,7 +384,7 @@ var EXTERNAL_ASSETS = [
452
384
  id: "vercel-cli",
453
385
  tier: "vetted",
454
386
  // vercel/vercel 15k
455
- description: "Vercel CLI (npm)",
387
+ description: "Vercel CLI \u2014 the real deploy tool as a devDependency (global under --scope global). Only if this project deploys to Vercel",
456
388
  category: "backend",
457
389
  source: "vercel",
458
390
  // 2026-08-02 사용자 결정: 트랙 기본 → opt-in (ADR-063)
@@ -465,7 +397,7 @@ var EXTERNAL_ASSETS = [
465
397
  id: "netlify-cli",
466
398
  tier: "vetted",
467
399
  // netlify/cli 1.9k
468
- description: "Netlify CLI (npm)",
400
+ description: "Netlify CLI \u2014 the real deploy tool as a devDependency (global under --scope global). Only if this project deploys to Netlify",
469
401
  category: "backend",
470
402
  source: "netlify",
471
403
  condition: { kind: "opt-in" },
@@ -475,7 +407,7 @@ var EXTERNAL_ASSETS = [
475
407
  id: "supabase-cli",
476
408
  tier: "vetted",
477
409
  // supabase 103k
478
- description: "Supabase CLI (npm) \u2014 first 'supabase login' requires OAuth",
410
+ description: "Supabase CLI \u2014 the real Supabase tool as a devDependency (global under --scope global); first `supabase login` opens an OAuth browser flow. Only if this project uses Supabase",
479
411
  category: "backend",
480
412
  source: "supabase",
481
413
  // 2026-08-02 사용자 결정: 트랙 기본 → opt-in (ADR-063)
@@ -497,7 +429,7 @@ var EXTERNAL_ASSETS = [
497
429
  id: "frontend-design",
498
430
  tier: "official",
499
431
  // anthropics/skills (Anthropic 저자, ★171.5K — 2026-08-26 gh api 실측)
500
- description: "frontend-design \u2014 distinctive production-grade UI generation (Anthropic official, avoids generic AI aesthetics)",
432
+ description: "frontend-design \u2014 visual direction, typography, and anti-generic UI guidance (Anthropic official). For new UI or an explicit redesign; do not let it override an existing design system",
501
433
  category: "frontend",
502
434
  source: "anthropics",
503
435
  condition: { kind: "any-track", tracks: DEV_TRACKS_WITH_STACK },
@@ -510,7 +442,7 @@ var EXTERNAL_ASSETS = [
510
442
  id: "jakubkrehel-skills",
511
443
  tier: "vetted",
512
444
  // jakubkrehel/skills 2,602 (2026-08-02)
513
- description: "Better-* interface suite \u2014 7 skills reviewing/improving UI detail, typography, OKLCH color, accessibility, layout, and UX writing, one concern per skill",
445
+ description: "Better-* interface suite \u2014 one skill per concern: typography, OKLCH color, accessibility, layout, UX writing, component states. Add when you need a specific UI review, not as a default",
514
446
  category: "frontend",
515
447
  source: "jakubkrehel",
516
448
  condition: { kind: "opt-in" },
@@ -523,7 +455,7 @@ var EXTERNAL_ASSETS = [
523
455
  id: "taste-skill",
524
456
  tier: "vetted",
525
457
  // Leonxlnx/taste-skill 70,078 (2026-08-02)
526
- description: "Anti-slop frontend design \u2014 removes the boilerplate look of AI-generated UI; infers a design language and tunes VARIANCE/MOTION/DENSITY, with minimalist/brutalist/high-end style variants",
458
+ description: "taste-skill \u2014 tunes the look of landing pages, portfolios, and redesigns (variance \xB7 motion \xB7 density). Not for dashboards or multi-step product UI",
527
459
  category: "frontend",
528
460
  source: "Leonxlnx",
529
461
  condition: { kind: "opt-in" },
@@ -538,7 +470,7 @@ var EXTERNAL_ASSETS = [
538
470
  id: "scroll-world",
539
471
  tier: "vetted",
540
472
  // oso95/scroll-world 6,863 (2026-08-02)
541
- description: "Scroll-driven 3D world landing pages \u2014 interviews for brand/scene direction, generates AI assets, then builds a continuous camera-flight scroll engine",
473
+ description: "scroll-world \u2014 scroll-driven 3D landing pages with generated media assets. A special production pipeline that needs external image/video services; only when that effect is requested",
542
474
  category: "frontend",
543
475
  source: "oso95",
544
476
  condition: { kind: "opt-in" },
@@ -559,7 +491,7 @@ var EXTERNAL_ASSETS = [
559
491
  id: "preline",
560
492
  tier: "vetted",
561
493
  // htmlstreamofficial/preline 6,386 (2026-08-16)
562
- description: "Preline theme generator \u2014 turns a brand description into a Preline UI Tailwind theme (tokens, dark mode, component overrides); framework-agnostic, works with plain HTML and htmx",
494
+ description: "Preline theme generator \u2014 turns a brand description into a Preline UI Tailwind theme (tokens, dark mode, overrides) with a local generator script. Only for projects that use Preline",
563
495
  category: "frontend",
564
496
  source: "htmlstreamofficial",
565
497
  condition: { kind: "opt-in" },
@@ -570,23 +502,6 @@ var EXTERNAL_ASSETS = [
570
502
  }
571
503
  },
572
504
  // === dev tools (has_dev_track) ===
573
- // v26.110.0 (ADR-039) — code-review: /code-review 커맨드 1개 (다중 에이전트 confidence
574
- // 스코어링 PR 리뷰). 기본 리뷰 레인(`reviewer`)과 표면 중복 + Claude Code 네이티브
575
- // /code-review 와 충돌 소지 → opt-in. (ADR-089 로 우리 리뷰 에이전트 2종은 은퇴했다.)
576
- {
577
- id: "code-review",
578
- tier: "official",
579
- // anthropics/claude-plugins-official (404.3K installs, 사용자 관측 2026-07-18)
580
- description: "code-review \u2014 multi-agent PR review with confidence scoring (Anthropic official)",
581
- category: "dev-tools",
582
- source: "anthropics",
583
- condition: { kind: "opt-in" },
584
- method: {
585
- kind: "plugin",
586
- marketplace: "anthropics/claude-plugins-official",
587
- pluginId: "code-review@claude-plugins-official"
588
- }
589
- },
590
505
  // v26.110.0 (ADR-039) — security-guidance: 매 편집 패턴 경고 + LLM diff 리뷰 (훅 12파일,
591
506
  // Python + Agent SDK 의존). 상시 훅 = 매 편집 비용 + 폭발 반경 — 실측 전 기본설치 금지
592
507
  // (Context Cost NSM) → opt-in. Claude Code `/security-review`·agentshield ship 게이트와 보완.
@@ -594,7 +509,7 @@ var EXTERNAL_ASSETS = [
594
509
  id: "security-guidance",
595
510
  tier: "official",
596
511
  // anthropics/claude-plugins-official (220.8K installs, 사용자 관측 2026-07-18)
597
- description: "security-guidance \u2014 pattern-based security warnings on edits + LLM diff review (Anthropic official)",
512
+ description: "security-guidance \u2014 pattern warnings on every edit plus an LLM review of diffs and commits (Anthropic official). Weigh it against security tools you already run: overlap, false positives, and cost per edit",
598
513
  category: "dev-tools",
599
514
  source: "anthropics",
600
515
  condition: { kind: "opt-in" },
@@ -604,16 +519,6 @@ var EXTERNAL_ASSETS = [
604
519
  pluginId: "security-guidance@claude-plugins-official"
605
520
  }
606
521
  },
607
- {
608
- id: "find-skills",
609
- tier: "vetted",
610
- // vercel-labs/skills 20k (license none — 출처 신뢰)
611
- description: "find-skills \u2014 search \xB7 rank all installed skills (vercel-labs, all dev tracks)",
612
- category: "dev-tools",
613
- source: "vercel-labs",
614
- condition: { kind: "any-track", tracks: DEV_TRACKS_WITH_STACK },
615
- method: { kind: "skill", source: "vercel-labs/skills", skill: "find-skills" }
616
- },
617
522
  // v26.110.0 (ADR-039) — context7 플러그인은 **미등록** (검토 후 철회): templates/mcp.json ·
618
523
  // codex config.toml.template · opencode 설정이 이미 @upstash/context7-mcp 를 기본 wiring —
619
524
  // 플러그인 추가 = 동일 서버 중복 등록이고 도달 범위도 더 좁다(plugin=claude-only vs
@@ -622,7 +527,7 @@ var EXTERNAL_ASSETS = [
622
527
  id: "agent-browser",
623
528
  tier: "vetted",
624
529
  // vercel-labs/agent-browser 34k
625
- description: "agent-browser \u2014 agent-friendly Playwright wrapper (screenshot \xB7 DOM search CLI, dev tracks)",
530
+ description: "agent-browser \u2014 drives a real browser from the terminal (Playwright wrapper: screenshots, DOM search). Only if your CLI has no equivalent browser tool",
626
531
  // v26.78.0 — Understanding 으로 재분류: 웹 지각(screenshot·DOM). 영상/코드 지각과 같은 축.
627
532
  category: "understanding",
628
533
  source: "vercel-labs",
@@ -637,7 +542,7 @@ var EXTERNAL_ASSETS = [
637
542
  id: "claude-video",
638
543
  tier: "vetted",
639
544
  // bradautomates/claude-video 1.8k
640
- description: "Claude Video \u2014 /watch downloads any video, extracts frames + transcript so Claude can see + hear it (yt-dlp/ffmpeg auto on first run)",
545
+ description: "Claude Video \u2014 fetches a video from a URL, extracts frames and a transcript so the agent can see and hear it. For video evidence, not general image understanding",
641
546
  category: "understanding",
642
547
  source: "bradautomates",
643
548
  condition: { kind: "opt-in" },
@@ -651,7 +556,7 @@ var EXTERNAL_ASSETS = [
651
556
  id: "understand-anything",
652
557
  tier: "vetted",
653
558
  // Lum1104/Understand-Anything 53k
654
- description: "Understand Anything \u2014 multi-agent pipeline builds an interactive knowledge graph of your codebase (files/functions/deps) to explore + query",
559
+ description: "Understand Anything \u2014 builds an interactive knowledge graph and dashboard of your codebase. For visual exploration of a large codebase; the graph costs time to build and keep current",
655
560
  category: "understanding",
656
561
  source: "Lum1104",
657
562
  condition: { kind: "opt-in" },
@@ -665,7 +570,7 @@ var EXTERNAL_ASSETS = [
665
570
  id: "agentmemory",
666
571
  tier: "vetted",
667
572
  // rohitg00/agentmemory 21k
668
- description: "AgentMemory \u2014 persistent memory runtime; plugin auto-wires MCP (53 tools) + hooks + skills. Runtime server: npx @agentmemory/agentmemory",
573
+ description: "AgentMemory \u2014 a separate memory server (MCP + hooks) that persists state across sessions; the runtime server is its own install (npx @agentmemory/agentmemory). Check first whether your CLI's own memory and project records already cover it",
669
574
  category: "understanding",
670
575
  source: "rohitg00",
671
576
  condition: { kind: "opt-in" },
@@ -681,7 +586,7 @@ var EXTERNAL_ASSETS = [
681
586
  id: "frontend-slides",
682
587
  tier: "vetted",
683
588
  // zarazhangrui/frontend-slides 21k
684
- description: "frontend-slides \u2014 dependency-free HTML slide decks (presets \xB7 templates \xB7 PPTX\u2192HTML \xB7 PDF export)",
589
+ description: "frontend-slides \u2014 dependency-free HTML slide decks with PPTX-to-HTML and PDF export scripts. When an HTML deck is the actual deliverable",
685
590
  category: "visual-media",
686
591
  source: "zarazhangrui",
687
592
  condition: { kind: "opt-in" },
@@ -695,28 +600,18 @@ var EXTERNAL_ASSETS = [
695
600
  id: "marp-slide",
696
601
  tier: "vetted",
697
602
  // softaworks/agent-toolkit 2k
698
- description: "marp-slide \u2014 Marp Markdown slides (7 themes \xB7 PPTX/PDF export)",
603
+ description: "marp-slide \u2014 Marp Markdown slides with 7 themes and PPTX/PDF export. Only for a Marp-based workflow",
699
604
  category: "visual-media",
700
605
  source: "softaworks",
701
606
  // softaworks plugin dir 는 plugin.json 부재 → skill 경로가 안전 (Docker 검증).
702
607
  condition: { kind: "opt-in" },
703
608
  method: { kind: "skill", source: "softaworks/agent-toolkit", skill: "marp-slide" }
704
609
  },
705
- {
706
- id: "mermaid-diagrams",
707
- tier: "vetted",
708
- // softaworks/agent-toolkit 2k
709
- description: "mermaid-diagrams \u2014 Mermaid flow/sequence/ER/state diagram authoring (code \xB7 docs)",
710
- category: "visual-media",
711
- source: "softaworks",
712
- condition: { kind: "opt-in" },
713
- method: { kind: "skill", source: "softaworks/agent-toolkit", skill: "mermaid-diagrams" }
714
- },
715
610
  {
716
611
  id: "gsap-skills",
717
612
  tier: "vetted",
718
613
  // greensock/gsap-skills 9k (GSAP 본가 공식)
719
- description: "GSAP skills \u2014 official GreenSock motion/scroll animation guide (8 skills: timeline \xB7 scrolltrigger \xB7 react)",
614
+ description: "GSAP skills \u2014 GreenSock's own guide to timelines, ScrollTrigger, and framework lifecycle cleanup. Only for projects that already use GSAP; not a reason to pick it",
720
615
  category: "visual-media",
721
616
  source: "greensock",
722
617
  condition: { kind: "opt-in" },
@@ -733,7 +628,7 @@ var EXTERNAL_ASSETS = [
733
628
  id: "remotion",
734
629
  tier: "vetted",
735
630
  // remotion-dev/skills 3.6k (license none — 출처 신뢰; 코어 BUSL 고지)
736
- description: "Remotion \u2014 programmatic MP4 video from React components (data-driven). Core license = BUSL",
631
+ description: "Remotion \u2014 programmatic MP4 video from React components (core license BUSL). The skill is a reference; the renderer and its environment are a separate install",
737
632
  category: "visual-media",
738
633
  source: "remotion-dev",
739
634
  condition: { kind: "opt-in" },
@@ -744,28 +639,17 @@ var EXTERNAL_ASSETS = [
744
639
  id: "ppt-master",
745
640
  tier: "vetted",
746
641
  // hugohe3/ppt-master 29k
747
- description: "ppt-master \u2014 editable PowerPoint (.pptx) from any document (native shapes \xB7 speaker notes \xB7 custom .pptx template)",
642
+ description: "ppt-master \u2014 editable PowerPoint (.pptx) from a document, with native shapes, speaker notes, and your own template. When the deliverable must stay editable in PowerPoint",
748
643
  category: "visual-media",
749
644
  source: "hugohe3",
750
645
  condition: { kind: "opt-in" },
751
646
  method: { kind: "skill", source: "hugohe3/ppt-master", skill: "ppt-master" }
752
647
  },
753
- {
754
- // deer-flow 72k 거대 harness지만 --skill 로 ppt-generation 단일 skill만 설치 (skills/public/ 중첩, Docker 확인).
755
- id: "ppt-generation",
756
- tier: "vetted",
757
- // bytedance/deer-flow 72k
758
- description: "ppt-generation \u2014 PPTX by generating an image per slide and composing into PowerPoint (deer-flow skill)",
759
- category: "visual-media",
760
- source: "bytedance",
761
- condition: { kind: "opt-in" },
762
- method: { kind: "skill", source: "bytedance/deer-flow", skill: "ppt-generation" }
763
- },
764
648
  {
765
649
  id: "web-video-presentation",
766
650
  tier: "vetted",
767
651
  // ConardLi/garden-skills 8.4k
768
- description: "web-video-presentation \u2014 click-driven 16:9 web decks that look like video (optional TTS narration; garden-skills)",
652
+ description: "web-video-presentation \u2014 click-driven 16:9 web decks that play like video, with optional TTS narration. Keeps a step-by-step approval procedure; use for narrated web presentations",
769
653
  category: "visual-media",
770
654
  source: "ConardLi",
771
655
  condition: { kind: "opt-in" },
@@ -775,7 +659,7 @@ var EXTERNAL_ASSETS = [
775
659
  id: "revealjs",
776
660
  tier: "experimental",
777
661
  // ryanbbrown/revealjs-skill 347 (<1000 → experimental, opt-in + 경고)
778
- description: "reveal.js \u2014 polished HTML presentations (themes \xB7 multi-column \xB7 code highlight \xB7 speaker notes, no build step)",
662
+ description: "reveal.js \u2014 HTML presentations with themes, code highlighting, and speaker notes, no build step. Overlaps the other HTML deck assets; pick it when you specifically need reveal.js templates or compatibility",
779
663
  category: "visual-media",
780
664
  source: "ryanbbrown",
781
665
  condition: { kind: "opt-in" },
@@ -786,7 +670,7 @@ var EXTERNAL_ASSETS = [
786
670
  id: "supabase-agent-skills",
787
671
  tier: "vetted",
788
672
  // supabase/agent-skills 2.2k
789
- description: "Supabase \u2014 RLS \xB7 auth \xB7 edge function \xB7 realtime guide (csr-supabase \xB7 full tracks)",
673
+ description: "Supabase agent skills \u2014 auth, RLS, edge functions, realtime, and current docs (Supabase official). Only for projects on Supabase; pre-checked on csr-supabase and full",
790
674
  category: "backend",
791
675
  source: "supabase",
792
676
  condition: { kind: "any-track", tracks: ["csr-supabase", "full"] },
@@ -800,7 +684,7 @@ var EXTERNAL_ASSETS = [
800
684
  id: "postgres-best-practices",
801
685
  tier: "vetted",
802
686
  // supabase/agent-skills 2.2k
803
- description: "Postgres best practices \u2014 schema \xB7 index \xB7 query patterns (csr-supabase \xB7 full tracks)",
687
+ description: "Postgres best practices \u2014 schema, index, and query optimization reference (Supabase official). Reach for it when designing tables or fixing slow queries, not on every edit",
804
688
  category: "backend",
805
689
  source: "supabase",
806
690
  condition: { kind: "any-track", tracks: ["csr-supabase", "full"] },
@@ -817,7 +701,7 @@ var EXTERNAL_ASSETS = [
817
701
  id: "react-best-practices",
818
702
  tier: "vetted",
819
703
  // vercel-labs/agent-skills 27k (license none — 출처 신뢰)
820
- description: "React best practices \u2014 Vercel's hook \xB7 perf \xB7 component patterns (CSR \xB7 SSR \xB7 Next tracks)",
704
+ description: "React best practices \u2014 Vercel's data-fetching order, server rendering, serialization, and cache guidance. For performance work in React, not every component edit",
821
705
  category: "frontend",
822
706
  source: "vercel-labs",
823
707
  condition: { kind: "any-track", tracks: CSR_SSR_NEXTJS_FULL },
@@ -833,7 +717,7 @@ var EXTERNAL_ASSETS = [
833
717
  id: "shadcn-ui",
834
718
  tier: "vetted",
835
719
  // shadcn-ui/ui 115k
836
- description: "shadcn/ui \u2014 Radix-based React component copy + Tailwind theme (shadcn official)",
720
+ description: "shadcn/ui \u2014 reads this project's component config and registry so the agent adds components the way your setup expects (shadcn official). Only for projects that use shadcn",
837
721
  category: "frontend",
838
722
  source: "shadcn-ui",
839
723
  condition: { kind: "any-track", tracks: CSR_SSR_NEXTJS_FULL },
@@ -846,7 +730,7 @@ var EXTERNAL_ASSETS = [
846
730
  id: "web-design-guidelines",
847
731
  tier: "vetted",
848
732
  // vercel-labs/agent-skills 27k (license none — 출처 신뢰)
849
- description: "Web design guidelines \u2014 Vercel's visual hierarchy \xB7 color \xB7 spacing (CSR \xB7 SSR \xB7 Next tracks)",
733
+ description: "Web design guidelines \u2014 Vercel's review checklist for hierarchy, color, spacing, and accessibility. A review aid, not a generator; frontend-design covers the default",
850
734
  category: "frontend",
851
735
  source: "vercel-labs",
852
736
  condition: { kind: "opt-in" },
@@ -865,7 +749,7 @@ var EXTERNAL_ASSETS = [
865
749
  id: "game-engine",
866
750
  tier: "vetted",
867
751
  // github/awesome-copilot 37,909★ (MIT, 2026-08-17 `gh api` 실측 · GitHub 공식 조직)
868
- description: "Game engine \u2014 web game development with HTML5 Canvas \xB7 WebGL (Phaser \xB7 Three.js \xB7 Babylon.js): game loop, physics, collision, sprites, tilemaps, gamepad input, WebRTC multiplayer",
752
+ description: "Game engine \u2014 web game development with HTML5 Canvas / WebGL (Phaser, Three.js, Babylon.js): game loop, physics, sprites, tilemaps, input. Web games only, not Unity or Unreal",
869
753
  category: "frontend",
870
754
  source: "github",
871
755
  condition: { kind: "opt-in" },
@@ -875,38 +759,12 @@ var EXTERNAL_ASSETS = [
875
759
  skill: "game-engine"
876
760
  }
877
761
  },
878
- {
879
- // 2026-08-17 (사용자 지정) — 게임 스튜디오 **프로세스** 스킬 73종.
880
- //
881
- // description 이 두 가지를 반드시 말해야 하는 이유 (둘 다 Docker 실측):
882
- // ① **에이전트는 안 깔린다.** 리포의 엔진 전문성(`godot-specialist`·`unity-specialist`·
883
- // `unreal-specialist`)은 49개 *에이전트*에 있는데 `npx skills add` 는 `.claude/skills/`
884
- // 만 가져온다(실측: 73 SKILL.md, settings.json·rules·hooks 미설치). "Unity 되나?" 로
885
- // 고른 사용자가 스프린트 계획 스킬을 받게 되므로 안 적으면 그게 거짓 광고다.
886
- // ② **상주 ~4,440 tok/세션.** 73 descriptor 실측(17,760자/4). tooling 트랙 baseline 전체가
887
- // ~5,037 tok 이라 이 자산 하나가 상주를 거의 두 배로 만든다 — 이 저장소의 1차 지표를
888
- // 가장 크게 움직이는 자산이라 선택 시점에 숫자가 보여야 한다.
889
- //
890
- // 저자의 공식 설치법은 `git clone` (프로젝트 템플릿)이다. 그 경로는 `.claude/settings.json`·
891
- // rules·hooks 를 함께 들여와 우리 하네스와 같은 자리를 다투므로 카탈로그에 넣지 않는다.
892
- id: "game-studios",
893
- tier: "vetted",
894
- // Donchitos/Claude-Code-Game-Studios 23,924★ (MIT · 최종 push 2026-05-21, 2026-08-17 `gh api` 실측)
895
- description: "Game studio workflow \u2014 73 process skills (sprint-plan \xB7 qa-plan \xB7 playtest-report \xB7 release-checklist \xB7 art-bible \xB7 balance-check). Skills only: the repo's 49 engine agents (godot/unity/unreal-specialist) are NOT installed. ~4,440 tok/session resident",
896
- category: "workflow",
897
- source: "Donchitos",
898
- condition: { kind: "opt-in" },
899
- method: {
900
- kind: "skill",
901
- source: "https://github.com/Donchitos/Claude-Code-Game-Studios"
902
- }
903
- },
904
762
  // === Executive tracks ===
905
763
  {
906
764
  id: "anthropic-document-skills",
907
765
  tier: "official",
908
766
  // anthropics/skills 144k
909
- description: "Anthropic document-skills (pptx/docx/xlsx/pdf)",
767
+ description: "Anthropic document skills \u2014 pptx / docx / xlsx / pdf authoring with real scripts (slide duplication, OOXML validation, thumbnails). For document deliverables",
910
768
  category: "business",
911
769
  source: "anthropics",
912
770
  condition: { kind: "any-track", tracks: ["executive", "full"] },
@@ -923,7 +781,7 @@ var EXTERNAL_ASSETS = [
923
781
  id: "finance-skills",
924
782
  tier: "vetted",
925
783
  // alirezarezvani 16k
926
- description: "finance-skills (3 \u2014 financial analyst, SaaS metrics, investment advisor)",
784
+ description: "finance-skills \u2014 financial analyst, SaaS metrics, and investment advisor skills with calculation scripts. For financial analysis work; the tools matter more than the role names",
927
785
  category: "business",
928
786
  source: "alirezarezvani",
929
787
  // 2026-08-02 사용자 결정: 트랙 기본 → opt-in (ADR-063)
@@ -940,7 +798,7 @@ var EXTERNAL_ASSETS = [
940
798
  id: "product-skills",
941
799
  tier: "vetted",
942
800
  // alirezarezvani 16k
943
- description: "product-skills (15 \u2014 RICE, PRD, agile PO, UX research, SaaS scaffolder ...)",
801
+ description: "product-skills \u2014 RICE prioritization, PRD, interview analysis, design tokens, project scaffolding (15 skills with Python tools). Pick it for product-management work, and use the tools you need",
944
802
  category: "dev-tools",
945
803
  source: "alirezarezvani",
946
804
  // v26.106.0 (ADR-035, 사용자 승인 C): dev 8트랙 기본에서 제외 — PM 스킬 15종은 PM 트랙 목적
@@ -967,7 +825,7 @@ var EXTERNAL_ASSETS = [
967
825
  id: "marketingskills",
968
826
  tier: "vetted",
969
827
  // coreyhaines31 35k
970
- description: "marketingskills (45 \u2014 CRO/copywriting/SEO/AI-SEO/ads/growth, coreyhaines31 35k\u2605)",
828
+ description: "marketingskills \u2014 SEO, conversion, ads, content, and measurement (45 skills, cross-referenced). For marketing work; too broad as a default on a development track",
971
829
  category: "business",
972
830
  source: "coreyhaines31",
973
831
  condition: { kind: "opt-in" },
@@ -992,7 +850,7 @@ var EXTERNAL_ASSETS = [
992
850
  id: "trailofbits-skills",
993
851
  tier: "vetted",
994
852
  // trailofbits/skills 5.5k (CC-BY-SA — 출처 신뢰)
995
- description: "Trail of Bits differential-review plugin (security-focused code review)",
853
+ description: "Trail of Bits differential-review \u2014 security review of a change: history, call impact, attack scenarios, verification scope. For security-relevant changes, not every PR",
996
854
  category: "dev-tools",
997
855
  source: "trailofbits",
998
856
  condition: { kind: "opt-in" },
@@ -1001,37 +859,6 @@ var EXTERNAL_ASSETS = [
1001
859
  marketplace: "trailofbits/skills",
1002
860
  pluginId: "differential-review@trailofbits"
1003
861
  }
1004
- },
1005
- {
1006
- id: "ecc-plugin",
1007
- tier: "vetted",
1008
- // affaan-m/everything-claude-code 199k
1009
- description: "ECC \u2014 60 agents \xB7 230 skills \xB7 75 commands. Affaan's hackathon package",
1010
- category: "ecc-suite",
1011
- source: "affaan-m",
1012
- condition: { kind: "opt-in" },
1013
- // v26.54.1 — upstream marketplace.json 의 name 은 "ecc" (plugin name 도 "ecc").
1014
- // 기존 매핑 `everything-claude-code@everything-claude-code` 는 marketplace 가
1015
- // 그 이름으로 등록되던 옛 버전 기준. fresh install 에서는 "Plugin not found" 발생.
1016
- method: {
1017
- kind: "plugin",
1018
- marketplace: "affaan-m/everything-claude-code",
1019
- pluginId: "ecc@ecc"
1020
- }
1021
- },
1022
- {
1023
- id: "ecc-prune",
1024
- tier: "official",
1025
- // uzys 본 하네스 자체
1026
- description: "ECC prune (drop items beyond curated 89 KEEP \u2192 copy to .claude/local-plugins/ecc/)",
1027
- category: "ecc-suite",
1028
- source: "uzys",
1029
- condition: { kind: "option", flag: "withPrune" },
1030
- method: {
1031
- kind: "shell-script",
1032
- script: "scripts/prune-ecc.sh",
1033
- args: ["--apply", "--force"]
1034
- }
1035
862
  }
1036
863
  ];
1037
864
  var DEV_METHOD_SKILL_IDS = [
@@ -1078,7 +905,16 @@ var RETIRED_SKILL_IDS = [
1078
905
  "verification-loop",
1079
906
  "deep-research",
1080
907
  "eval-harness",
1081
- "agent-introspection-debugging"
908
+ "agent-introspection-debugging",
909
+ // #492 — ECC cherry-pick 스킬 7종 은퇴. 번들에서 빠졌으니 설치본에 남은 디렉터리는 죽은
910
+ // 사본이다 — `update` 화면이 "지워도 된다"를 말하고 삭제는 사용자가 한다(위와 같은 규율).
911
+ "python-patterns",
912
+ "python-testing",
913
+ "e2e-testing",
914
+ "nextjs-turbopack",
915
+ "market-research",
916
+ "investor-materials",
917
+ "investor-outreach"
1082
918
  ];
1083
919
  var TRUST_TIER = Object.fromEntries(
1084
920
  EXTERNAL_ASSETS.map((a) => [a.id, a.tier])
@@ -1120,7 +956,6 @@ function assetCliSupport(asset) {
1120
956
  }
1121
957
  switch (asset.method.kind) {
1122
958
  case "plugin":
1123
- case "shell-script":
1124
959
  return ["claude"];
1125
960
  case "skill":
1126
961
  case "npm":
@@ -1152,13 +987,14 @@ var HARNESS_ANCHOR_FILE = "CLAUDE-uzys-harness.md";
1152
987
  var HARNESS_IMPORT_LINE = `@${HARNESS_ANCHOR_FILE}`;
1153
988
  var IMPORT_MARKER_START = "<!-- uzys-harness:import:start -->";
1154
989
  var IMPORT_MARKER_END = "<!-- uzys-harness:import:end -->";
990
+ var CONTINUOUS_SKILLS_HEADING = "## Skills that apply continuously";
1155
991
  function renderContinuousSkillsNote(selectedInternalSkills) {
1156
992
  const lines = CONTINUOUS_SKILLS.filter((s) => selectedInternalSkills.includes(s.id)).map(
1157
993
  (s) => `- \`${s.id}\` \u2014 ${s.whenToApply}.`
1158
994
  );
1159
995
  if (lines.length === 0) return "";
1160
996
  return [
1161
- "## Skills that apply continuously",
997
+ CONTINUOUS_SKILLS_HEADING,
1162
998
  "",
1163
999
  "These installed skills apply to every response or delegation; no prompt ever looks like their job, so open them from this list:",
1164
1000
  "",
@@ -1680,13 +1516,15 @@ function methodDetail(method) {
1680
1516
  return { pkg: method.pkg };
1681
1517
  case "npx-run":
1682
1518
  return { cmd: method.cmd, args: (method.args ?? []).join(" ") };
1683
- case "shell-script":
1684
- return { script: method.script, args: method.args.join(" ") };
1685
1519
  case "internal":
1686
1520
  return { key: method.key };
1687
1521
  }
1688
1522
  }
1523
+ var BUNDLED_SKILL_IDS = new Set(INTERNAL_BUNDLED_SKILL_IDS);
1689
1524
  function buildInstallLog(spec, external, scope, rootClaudeMd, previous, claudeDirMovedAside = false, rootFiles = []) {
1525
+ const skillExclude = (spec.userOverride?.forceExclude ?? []).filter(
1526
+ (id) => BUNDLED_SKILL_IDS.has(id)
1527
+ );
1690
1528
  const templates = {
1691
1529
  claudeDir: ".claude/",
1692
1530
  ...spec.cli.includes("codex") ? { codexDir: ".codex/" } : {},
@@ -1700,7 +1538,8 @@ function buildInstallLog(spec, external, scope, rootClaudeMd, previous, claudeDi
1700
1538
  spec: {
1701
1539
  tracks: spec.tracks,
1702
1540
  cli: spec.cli,
1703
- ...spec.baselineExclude && spec.baselineExclude.length > 0 ? { baselineExclude: spec.baselineExclude } : {}
1541
+ ...spec.baselineExclude && spec.baselineExclude.length > 0 ? { baselineExclude: spec.baselineExclude } : {},
1542
+ ...skillExclude.length > 0 ? { skillExclude } : {}
1704
1543
  },
1705
1544
  // 이번 설치가 만든 항목이 이기고, 이번에 안 만든 항목은 이전 값을 그대로 둔다.
1706
1545
  // (예: claude 로 깔고 나중에 codex 만 추가 설치해도 root CLAUDE.md 기록이 살아남는다)
@@ -1743,7 +1582,7 @@ function survivesClaudeDirRename(asset) {
1743
1582
  // `npx skills add` project scope → `.claude/skills/`
1744
1583
  case "shell-script":
1745
1584
  return false;
1746
- // ecc-prune → `.claude/local-plugins/`
1585
+ // legacy(#492 은퇴): ecc-prune → `.claude/local-plugins/`
1747
1586
  case "npx-run":
1748
1587
  return false;
1749
1588
  case "internal":
@@ -1839,8 +1678,6 @@ function buildAssetSpec(ctx) {
1839
1678
  return {
1840
1679
  tracks: ctx.tracks,
1841
1680
  withTauri: isAssetSelected("tauri-desktop", ctx),
1842
- // v26.55.0 — withEcc gating (ADR-016). withPrune 은 ecc-plugin 사용을 전제한다.
1843
- withEcc: isAssetSelected("ecc-plugin", ctx) || ctx.options.withPrune === true,
1844
1681
  // v26.87.0 — internal bundled skills (dev-method + opt-in advisors, v26.95.0). id 별 condition
1845
1682
  // (has-dev-track vs opt-in)은 isAssetSelected 가 적용한다.
1846
1683
  selectedInternalSkills: INTERNAL_BUNDLED_SKILL_IDS.filter((id) => isAssetSelected(id, ctx))
@@ -1907,15 +1744,8 @@ var RETIRED_AGENTS = [
1907
1744
  var RETIRED_AGENT_IDS = RETIRED_AGENTS.map((a) => a.id);
1908
1745
  var ALWAYS_HOOKS = ["session-start.sh", "protect-files.sh"];
1909
1746
  var COMMON_SKILL_DIRS = [];
1910
- var COMMON_SKILL_DIRS_ECC = [];
1911
- var MODIFIED_COMMON_SKILL_DIRS = [];
1912
1747
  var DEV_SKILL_DIRS = [];
1913
- var DEV_SKILL_DIRS_ECC = [];
1914
- var MODIFIED_DEV_SKILL_DIRS = [];
1915
- var MODIFIED_ECC_SKILL_DIRS = [...MODIFIED_COMMON_SKILL_DIRS, ...MODIFIED_DEV_SKILL_DIRS];
1916
1748
  var UI_SKILL_DIRS = ["ui-visual-review"];
1917
- var UI_SKILL_DIRS_ECC = ["e2e-testing"];
1918
- var PYTHON_SKILL_DIRS_ECC = ["python-patterns", "python-testing"];
1919
1749
  function isCliNeutralTarget(target) {
1920
1750
  return target.startsWith(`${INSTALL_LOG_DIR}/`);
1921
1751
  }
@@ -1985,36 +1815,6 @@ function buildManifest(spec) {
1985
1815
  applies: all
1986
1816
  });
1987
1817
  }
1988
- for (const sd of COMMON_SKILL_DIRS_ECC) {
1989
- m.push({
1990
- source: `skills/${sd}`,
1991
- target: `.claude/skills/${sd}`,
1992
- type: "dir",
1993
- applies: (s) => !s.withEcc
1994
- });
1995
- }
1996
- for (const sd of MODIFIED_COMMON_SKILL_DIRS) {
1997
- m.push({
1998
- source: `skills/${sd}`,
1999
- target: `.claude/skills/${sd}`,
2000
- type: "dir",
2001
- applies: all
2002
- });
2003
- }
2004
- for (const sd of ["market-research", "investor-materials", "investor-outreach"]) {
2005
- m.push({
2006
- source: `skills/${sd}`,
2007
- target: `.claude/skills/${sd}`,
2008
- type: "dir",
2009
- applies: (s) => !s.withEcc && onTracks("executive|full")(s)
2010
- });
2011
- }
2012
- m.push({
2013
- source: "skills/nextjs-turbopack",
2014
- target: ".claude/skills/nextjs-turbopack",
2015
- type: "dir",
2016
- applies: (s) => !s.withEcc && onTracks("ssr-nextjs|full")(s)
2017
- });
2018
1818
  for (const sd of INTERNAL_BUNDLED_SKILL_IDS) {
2019
1819
  m.push({
2020
1820
  source: `skills/${sd}`,
@@ -2023,14 +1823,6 @@ function buildManifest(spec) {
2023
1823
  applies: (s) => (s.selectedInternalSkills ?? []).includes(sd)
2024
1824
  });
2025
1825
  }
2026
- for (const sd of PYTHON_SKILL_DIRS_ECC) {
2027
- m.push({
2028
- source: `skills/${sd}`,
2029
- target: `.claude/skills/${sd}`,
2030
- type: "dir",
2031
- applies: (s) => !s.withEcc && anyTrack(s.tracks, "data|csr-fastapi|full")
2032
- });
2033
- }
2034
1826
  for (const sd of DEV_SKILL_DIRS) {
2035
1827
  m.push({
2036
1828
  source: `skills/${sd}`,
@@ -2039,22 +1831,6 @@ function buildManifest(spec) {
2039
1831
  applies: dev
2040
1832
  });
2041
1833
  }
2042
- for (const sd of DEV_SKILL_DIRS_ECC) {
2043
- m.push({
2044
- source: `skills/${sd}`,
2045
- target: `.claude/skills/${sd}`,
2046
- type: "dir",
2047
- applies: (s) => !s.withEcc && hasDevTrack(s.tracks)
2048
- });
2049
- }
2050
- for (const sd of MODIFIED_DEV_SKILL_DIRS) {
2051
- m.push({
2052
- source: `skills/${sd}`,
2053
- target: `.claude/skills/${sd}`,
2054
- type: "dir",
2055
- applies: dev
2056
- });
2057
- }
2058
1834
  for (const sd of UI_SKILL_DIRS) {
2059
1835
  m.push({
2060
1836
  source: `skills/${sd}`,
@@ -2063,14 +1839,6 @@ function buildManifest(spec) {
2063
1839
  applies: ui
2064
1840
  });
2065
1841
  }
2066
- for (const sd of UI_SKILL_DIRS_ECC) {
2067
- m.push({
2068
- source: `skills/${sd}`,
2069
- target: `.claude/skills/${sd}`,
2070
- type: "dir",
2071
- applies: (s) => !s.withEcc && hasUiTrack(s.tracks)
2072
- });
2073
- }
2074
1842
  for (const h of ALWAYS_HOOKS) {
2075
1843
  m.push({
2076
1844
  source: `hooks/${h}`,
@@ -2098,8 +1866,7 @@ var CATEGORIES = [
2098
1866
  "dev-tools",
2099
1867
  "understanding",
2100
1868
  "visual-media",
2101
- "workflow",
2102
- "ecc-suite"
1869
+ "workflow"
2103
1870
  ];
2104
1871
  var CATEGORY_TITLES = {
2105
1872
  frontend: "\u{1F3A8} Frontend (UI \xB7 Design)",
@@ -2111,8 +1878,7 @@ var CATEGORY_TITLES = {
2111
1878
  understanding: "\u{1F9E0} Understanding (Perception \xB7 Memory)",
2112
1879
  // v26.85.0 — 코드-퍼스트 비주얼/미디어 제작: 슬라이드·다이어그램·모션·동영상.
2113
1880
  "visual-media": "\u{1F3AC} Visual & Media (Slides \xB7 Diagrams \xB7 Motion \xB7 Video)",
2114
- workflow: "\u{1F504} Workflow (Development Cycle)",
2115
- "ecc-suite": "\u{1F4E6} ECC Suite"
1881
+ workflow: "\u{1F504} Workflow (Development Cycle)"
2116
1882
  };
2117
1883
 
2118
1884
  export {
@@ -2144,6 +1910,8 @@ export {
2144
1910
  filterApplicableAssets,
2145
1911
  HARNESS_ANCHOR_FILE,
2146
1912
  HARNESS_IMPORT_LINE,
1913
+ CONTINUOUS_SKILLS_HEADING,
1914
+ renderContinuousSkillsNote,
2147
1915
  withContinuousSkillsNote,
2148
1916
  renderFillScaffold,
2149
1917
  upsertHarnessImport,
@@ -2189,4 +1957,4 @@ export {
2189
1957
  CATEGORIES,
2190
1958
  CATEGORY_TITLES
2191
1959
  };
2192
- //# sourceMappingURL=chunk-HHCNPPGS.js.map
1960
+ //# sourceMappingURL=chunk-ZXWOY5VO.js.map