@uzysjung/agent-harness 26.95.0 → 26.97.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 (97) hide show
  1. package/README.ko.md +1 -3
  2. package/README.md +4 -6
  3. package/dist/{chunk-DSWWKCW3.js → chunk-WKXYOTUV.js} +1 -21
  4. package/dist/{chunk-DSWWKCW3.js.map → chunk-WKXYOTUV.js.map} +1 -1
  5. package/dist/index.js +219 -216
  6. package/dist/index.js.map +1 -1
  7. package/dist/trust-tier-drift.js +1 -3
  8. package/dist/trust-tier-drift.js.map +1 -1
  9. package/package.json +1 -1
  10. package/templates/antigravity/AGENTS.md.template +4 -0
  11. package/templates/codex/AGENTS.md.template +4 -0
  12. package/templates/opencode/AGENTS.md.template +4 -0
  13. package/templates/skills/compaction-handoff/SKILL.md +264 -130
  14. package/templates/project-claude/_base.md +0 -23
  15. package/templates/project-claude/fragments/csr-fastapi/active-rules.md +0 -13
  16. package/templates/project-claude/fragments/csr-fastapi/agents.md +0 -5
  17. package/templates/project-claude/fragments/csr-fastapi/boundaries.md +0 -17
  18. package/templates/project-claude/fragments/csr-fastapi/commands.md +0 -5
  19. package/templates/project-claude/fragments/csr-fastapi/plugins.md +0 -2
  20. package/templates/project-claude/fragments/csr-fastapi/skills.md +0 -5
  21. package/templates/project-claude/fragments/csr-fastapi/stack.md +0 -6
  22. package/templates/project-claude/fragments/csr-fastapi/tagline.md +0 -1
  23. package/templates/project-claude/fragments/csr-fastify/active-rules.md +0 -13
  24. package/templates/project-claude/fragments/csr-fastify/agents.md +0 -5
  25. package/templates/project-claude/fragments/csr-fastify/boundaries.md +0 -17
  26. package/templates/project-claude/fragments/csr-fastify/commands.md +0 -5
  27. package/templates/project-claude/fragments/csr-fastify/plugins.md +0 -2
  28. package/templates/project-claude/fragments/csr-fastify/skills.md +0 -5
  29. package/templates/project-claude/fragments/csr-fastify/stack.md +0 -6
  30. package/templates/project-claude/fragments/csr-fastify/tagline.md +0 -1
  31. package/templates/project-claude/fragments/csr-supabase/active-rules.md +0 -12
  32. package/templates/project-claude/fragments/csr-supabase/agents.md +0 -5
  33. package/templates/project-claude/fragments/csr-supabase/boundaries.md +0 -18
  34. package/templates/project-claude/fragments/csr-supabase/commands.md +0 -5
  35. package/templates/project-claude/fragments/csr-supabase/plugins.md +0 -4
  36. package/templates/project-claude/fragments/csr-supabase/skills.md +0 -7
  37. package/templates/project-claude/fragments/csr-supabase/stack.md +0 -6
  38. package/templates/project-claude/fragments/csr-supabase/supabase-auth.md +0 -19
  39. package/templates/project-claude/fragments/csr-supabase/tagline.md +0 -1
  40. package/templates/project-claude/fragments/data/active-rules.md +0 -10
  41. package/templates/project-claude/fragments/data/agents.md +0 -6
  42. package/templates/project-claude/fragments/data/boundaries.md +0 -19
  43. package/templates/project-claude/fragments/data/commands.md +0 -5
  44. package/templates/project-claude/fragments/data/plugins.md +0 -2
  45. package/templates/project-claude/fragments/data/skills.md +0 -3
  46. package/templates/project-claude/fragments/data/stack.md +0 -7
  47. package/templates/project-claude/fragments/data/tagline.md +0 -1
  48. package/templates/project-claude/fragments/executive/active-rules.md +0 -6
  49. package/templates/project-claude/fragments/executive/agents.md +0 -6
  50. package/templates/project-claude/fragments/executive/boundaries.md +0 -16
  51. package/templates/project-claude/fragments/executive/commands.md +0 -10
  52. package/templates/project-claude/fragments/executive/plugins.md +0 -1
  53. package/templates/project-claude/fragments/executive/skills.md +0 -7
  54. package/templates/project-claude/fragments/executive/stack.md +0 -4
  55. package/templates/project-claude/fragments/executive/tagline.md +0 -1
  56. package/templates/project-claude/fragments/executive/workflow.md +0 -9
  57. package/templates/project-claude/fragments/growth-marketing/active-rules.md +0 -7
  58. package/templates/project-claude/fragments/growth-marketing/agents.md +0 -6
  59. package/templates/project-claude/fragments/growth-marketing/boundaries.md +0 -16
  60. package/templates/project-claude/fragments/growth-marketing/commands.md +0 -10
  61. package/templates/project-claude/fragments/growth-marketing/plugins.md +0 -9
  62. package/templates/project-claude/fragments/growth-marketing/skills.md +0 -8
  63. package/templates/project-claude/fragments/growth-marketing/stack.md +0 -7
  64. package/templates/project-claude/fragments/growth-marketing/tagline.md +0 -1
  65. package/templates/project-claude/fragments/growth-marketing/workflow.md +0 -10
  66. package/templates/project-claude/fragments/project-management/active-rules.md +0 -7
  67. package/templates/project-claude/fragments/project-management/agents.md +0 -6
  68. package/templates/project-claude/fragments/project-management/boundaries.md +0 -15
  69. package/templates/project-claude/fragments/project-management/commands.md +0 -9
  70. package/templates/project-claude/fragments/project-management/plugins.md +0 -6
  71. package/templates/project-claude/fragments/project-management/skills.md +0 -5
  72. package/templates/project-claude/fragments/project-management/stack.md +0 -4
  73. package/templates/project-claude/fragments/project-management/tagline.md +0 -1
  74. package/templates/project-claude/fragments/project-management/workflow.md +0 -11
  75. package/templates/project-claude/fragments/ssr-htmx/active-rules.md +0 -11
  76. package/templates/project-claude/fragments/ssr-htmx/agents.md +0 -5
  77. package/templates/project-claude/fragments/ssr-htmx/boundaries.md +0 -19
  78. package/templates/project-claude/fragments/ssr-htmx/commands.md +0 -5
  79. package/templates/project-claude/fragments/ssr-htmx/plugins.md +0 -2
  80. package/templates/project-claude/fragments/ssr-htmx/skills.md +0 -3
  81. package/templates/project-claude/fragments/ssr-htmx/stack.md +0 -6
  82. package/templates/project-claude/fragments/ssr-htmx/tagline.md +0 -1
  83. package/templates/project-claude/fragments/ssr-nextjs/active-rules.md +0 -12
  84. package/templates/project-claude/fragments/ssr-nextjs/agents.md +0 -5
  85. package/templates/project-claude/fragments/ssr-nextjs/boundaries.md +0 -19
  86. package/templates/project-claude/fragments/ssr-nextjs/commands.md +0 -5
  87. package/templates/project-claude/fragments/ssr-nextjs/plugins.md +0 -2
  88. package/templates/project-claude/fragments/ssr-nextjs/skills.md +0 -5
  89. package/templates/project-claude/fragments/ssr-nextjs/stack.md +0 -5
  90. package/templates/project-claude/fragments/ssr-nextjs/tagline.md +0 -1
  91. package/templates/project-claude/fragments/tooling/active-rules.md +0 -11
  92. package/templates/project-claude/fragments/tooling/agents.md +0 -5
  93. package/templates/project-claude/fragments/tooling/boundaries.md +0 -16
  94. package/templates/project-claude/fragments/tooling/commands.md +0 -3
  95. package/templates/project-claude/fragments/tooling/skills.md +0 -4
  96. package/templates/project-claude/fragments/tooling/stack.md +0 -5
  97. package/templates/project-claude/fragments/tooling/tagline.md +0 -1
@@ -6,7 +6,7 @@ import {
6
6
  INTERNAL_BUNDLED_SKILL_IDS,
7
7
  TRUST_TIER,
8
8
  init_esm_shims
9
- } from "./chunk-DSWWKCW3.js";
9
+ } from "./chunk-WKXYOTUV.js";
10
10
 
11
11
  // src/trust-tier-drift.ts
12
12
  init_esm_shims();
@@ -20,8 +20,6 @@ var REPO_OVERRIDE = {
20
20
  // npm
21
21
  "agent-browser": "vercel-labs/agent-browser",
22
22
  // npm
23
- "gsd-orchestrator": "gsd-build/get-shit-done",
24
- // npx-run
25
23
  openspec: "Fission-AI/OpenSpec",
26
24
  // npm (v26.75.0)
27
25
  "bmad-method": "bmad-code-org/BMAD-METHOD"
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/trust-tier-drift.ts"],"sourcesContent":["/**\n * A1 — Trust Tier star-drift 검출 데이터 + 순수 로직.\n *\n * TRUST_TIER 의 star 기반 라벨(vetted ≥ 1000★ / experimental < 1000★)이 실제 GitHub\n * star 와 어긋났는지(drift) 판정한다. `official` 은 star 무관(Anthropic 공식·하네스 자체)\n * 이라 검사 제외.\n *\n * repo 출처 = 각 자산 method (in-code authoritative — 주석이 아니라 실제 설치 source):\n * skill → method.source (\"owner/repo\" 또는 github URL)\n * plugin → method.marketplace (\"owner/repo\")\n * npm → NPM_REPO_OVERRIDE[id] (pkg 는 npm 명이므로 GitHub repo 를 별도 명시)\n *\n * fetch/네트워크는 본 모듈에 없음 — 순수 로직만(테스트 가능). 실 fetch 는\n * `scripts/trust-tier-drift.mjs` 가 담당.\n */\nimport { EXTERNAL_ASSETS, type ExternalAsset, TRUST_TIER } from \"./external-assets.js\";\n\n// v26.79.0 — gen-compatibility 의 카테고리 exhaustiveness 가드용 SSOT (하드코딩 drift 차단).\nexport { CATEGORIES } from \"./categories.js\";\n// v26.76.0 — gen-compatibility.mjs 가 dist 에서 자산 카탈로그+tier 를 읽도록 re-export.\n// v26.93.0 — DEV_METHOD_SKILL_IDS 추가: gen-compatibility 의 CLI scope override 를\n// 하드코딩 id 목록 대신 SSOT 에서 derive (no-false-ship drift 구조 차단).\n// v26.95.0 — INTERNAL_BUNDLED_SKILL_IDS (dev-method + opt-in gemini-consult) 로 CLI scope derive.\nexport {\n DEV_METHOD_SKILL_IDS,\n EXTERNAL_ASSETS,\n INTERNAL_BUNDLED_SKILL_IDS,\n TRUST_TIER,\n} from \"./external-assets.js\";\n\n/** vetted 경계 (NORTH_STAR / PRD v26-71 D2). */\nexport const STAR_THRESHOLD = 1000;\n\nexport type StarTier = \"vetted\" | \"experimental\";\nexport type DriftVerdict = \"ok\" | \"promote\" | \"demote\";\n\n/**\n * method 가 GitHub repo 를 안 담는 자산(npm.pkg / npx-run.cmd 는 npm 명) → 트러스트 근거가\n * 된 GitHub repo 를 명시 매핑. override 가 method 도출보다 우선.\n */\nconst REPO_OVERRIDE: Record<string, string> = {\n \"vercel-cli\": \"vercel/vercel\", // npm\n \"netlify-cli\": \"netlify/cli\", // npm\n \"supabase-cli\": \"supabase/cli\", // npm\n \"agent-browser\": \"vercel-labs/agent-browser\", // npm\n \"gsd-orchestrator\": \"gsd-build/get-shit-done\", // npx-run\n openspec: \"Fission-AI/OpenSpec\", // npm (v26.75.0)\n \"bmad-method\": \"bmad-code-org/BMAD-METHOD\", // npx-run (v26.75.0)\n};\n\n/** \"https://github.com/owner/repo\" 또는 \"owner/repo[/...]\" → \"owner/repo\". 실패 시 null. */\nexport function normalizeRepo(source: string): string | null {\n const stripped = source.replace(/^https?:\\/\\/github\\.com\\//i, \"\");\n const m = stripped.match(/^([^/\\s]+\\/[^/\\s]+)/);\n return m?.[1] ?? null;\n}\n\n/** 자산의 GitHub owner/repo 도출. override 우선 → skill/plugin method. 도출 불가 시 null. */\nexport function repoForAsset(asset: ExternalAsset): string | null {\n const override = REPO_OVERRIDE[asset.id];\n if (override) return override;\n const m = asset.method;\n if (m.kind === \"skill\") return normalizeRepo(m.source);\n if (m.kind === \"plugin\") return normalizeRepo(m.marketplace);\n return null;\n}\n\nexport interface DriftTarget {\n id: string;\n tier: StarTier;\n repo: string;\n}\n\n/** star 기반(vetted/experimental) 자산만 + repo 도출 가능한 것만 검사 대상. */\nexport function driftTargets(\n assets: ReadonlyArray<ExternalAsset> = EXTERNAL_ASSETS,\n): DriftTarget[] {\n const out: DriftTarget[] = [];\n for (const a of assets) {\n const tier = TRUST_TIER[a.id];\n if (tier !== \"vetted\" && tier !== \"experimental\") continue;\n const repo = repoForAsset(a);\n if (!repo) continue; // 도출 불가 — 테스트가 0건을 강제하므로 정상 경로에선 발생 안 함\n out.push({ id: a.id, tier, repo });\n }\n return out;\n}\n\n/** 정적 tier 가 실제 star 와 어긋났는지 판정. */\nexport function classifyDrift(tier: StarTier, stars: number): DriftVerdict {\n if (tier === \"vetted\" && stars < STAR_THRESHOLD) return \"demote\";\n if (tier === \"experimental\" && stars >= STAR_THRESHOLD) return \"promote\";\n return \"ok\";\n}\n"],"mappings":";;;;;;;;;;;AAAA;AA+BO,IAAM,iBAAiB;AAS9B,IAAM,gBAAwC;AAAA,EAC5C,cAAc;AAAA;AAAA,EACd,eAAe;AAAA;AAAA,EACf,gBAAgB;AAAA;AAAA,EAChB,iBAAiB;AAAA;AAAA,EACjB,oBAAoB;AAAA;AAAA,EACpB,UAAU;AAAA;AAAA,EACV,eAAe;AAAA;AACjB;AAGO,SAAS,cAAc,QAA+B;AAC3D,QAAM,WAAW,OAAO,QAAQ,8BAA8B,EAAE;AAChE,QAAM,IAAI,SAAS,MAAM,qBAAqB;AAC9C,SAAO,IAAI,CAAC,KAAK;AACnB;AAGO,SAAS,aAAa,OAAqC;AAChE,QAAM,WAAW,cAAc,MAAM,EAAE;AACvC,MAAI,SAAU,QAAO;AACrB,QAAM,IAAI,MAAM;AAChB,MAAI,EAAE,SAAS,QAAS,QAAO,cAAc,EAAE,MAAM;AACrD,MAAI,EAAE,SAAS,SAAU,QAAO,cAAc,EAAE,WAAW;AAC3D,SAAO;AACT;AASO,SAAS,aACd,SAAuC,iBACxB;AACf,QAAM,MAAqB,CAAC;AAC5B,aAAW,KAAK,QAAQ;AACtB,UAAM,OAAO,WAAW,EAAE,EAAE;AAC5B,QAAI,SAAS,YAAY,SAAS,eAAgB;AAClD,UAAM,OAAO,aAAa,CAAC;AAC3B,QAAI,CAAC,KAAM;AACX,QAAI,KAAK,EAAE,IAAI,EAAE,IAAI,MAAM,KAAK,CAAC;AAAA,EACnC;AACA,SAAO;AACT;AAGO,SAAS,cAAc,MAAgB,OAA6B;AACzE,MAAI,SAAS,YAAY,QAAQ,eAAgB,QAAO;AACxD,MAAI,SAAS,kBAAkB,SAAS,eAAgB,QAAO;AAC/D,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../src/trust-tier-drift.ts"],"sourcesContent":["/**\n * A1 — Trust Tier star-drift 검출 데이터 + 순수 로직.\n *\n * TRUST_TIER 의 star 기반 라벨(vetted ≥ 1000★ / experimental < 1000★)이 실제 GitHub\n * star 와 어긋났는지(drift) 판정한다. `official` 은 star 무관(Anthropic 공식·하네스 자체)\n * 이라 검사 제외.\n *\n * repo 출처 = 각 자산 method (in-code authoritative — 주석이 아니라 실제 설치 source):\n * skill → method.source (\"owner/repo\" 또는 github URL)\n * plugin → method.marketplace (\"owner/repo\")\n * npm → NPM_REPO_OVERRIDE[id] (pkg 는 npm 명이므로 GitHub repo 를 별도 명시)\n *\n * fetch/네트워크는 본 모듈에 없음 — 순수 로직만(테스트 가능). 실 fetch 는\n * `scripts/trust-tier-drift.mjs` 가 담당.\n */\nimport { EXTERNAL_ASSETS, type ExternalAsset, TRUST_TIER } from \"./external-assets.js\";\n\n// v26.79.0 — gen-compatibility 의 카테고리 exhaustiveness 가드용 SSOT (하드코딩 drift 차단).\nexport { CATEGORIES } from \"./categories.js\";\n// v26.76.0 — gen-compatibility.mjs 가 dist 에서 자산 카탈로그+tier 를 읽도록 re-export.\n// v26.93.0 — DEV_METHOD_SKILL_IDS 추가: gen-compatibility 의 CLI scope override 를\n// 하드코딩 id 목록 대신 SSOT 에서 derive (no-false-ship drift 구조 차단).\n// v26.95.0 — INTERNAL_BUNDLED_SKILL_IDS (dev-method + opt-in gemini-consult) 로 CLI scope derive.\nexport {\n DEV_METHOD_SKILL_IDS,\n EXTERNAL_ASSETS,\n INTERNAL_BUNDLED_SKILL_IDS,\n TRUST_TIER,\n} from \"./external-assets.js\";\n\n/** vetted 경계 (NORTH_STAR / PRD v26-71 D2). */\nexport const STAR_THRESHOLD = 1000;\n\nexport type StarTier = \"vetted\" | \"experimental\";\nexport type DriftVerdict = \"ok\" | \"promote\" | \"demote\";\n\n/**\n * method 가 GitHub repo 를 안 담는 자산(npm.pkg / npx-run.cmd 는 npm 명) → 트러스트 근거가\n * 된 GitHub repo 를 명시 매핑. override 가 method 도출보다 우선.\n */\nconst REPO_OVERRIDE: Record<string, string> = {\n \"vercel-cli\": \"vercel/vercel\", // npm\n \"netlify-cli\": \"netlify/cli\", // npm\n \"supabase-cli\": \"supabase/cli\", // npm\n \"agent-browser\": \"vercel-labs/agent-browser\", // npm\n openspec: \"Fission-AI/OpenSpec\", // npm (v26.75.0)\n \"bmad-method\": \"bmad-code-org/BMAD-METHOD\", // npx-run (v26.75.0)\n};\n\n/** \"https://github.com/owner/repo\" 또는 \"owner/repo[/...]\" → \"owner/repo\". 실패 시 null. */\nexport function normalizeRepo(source: string): string | null {\n const stripped = source.replace(/^https?:\\/\\/github\\.com\\//i, \"\");\n const m = stripped.match(/^([^/\\s]+\\/[^/\\s]+)/);\n return m?.[1] ?? null;\n}\n\n/** 자산의 GitHub owner/repo 도출. override 우선 → skill/plugin method. 도출 불가 시 null. */\nexport function repoForAsset(asset: ExternalAsset): string | null {\n const override = REPO_OVERRIDE[asset.id];\n if (override) return override;\n const m = asset.method;\n if (m.kind === \"skill\") return normalizeRepo(m.source);\n if (m.kind === \"plugin\") return normalizeRepo(m.marketplace);\n return null;\n}\n\nexport interface DriftTarget {\n id: string;\n tier: StarTier;\n repo: string;\n}\n\n/** star 기반(vetted/experimental) 자산만 + repo 도출 가능한 것만 검사 대상. */\nexport function driftTargets(\n assets: ReadonlyArray<ExternalAsset> = EXTERNAL_ASSETS,\n): DriftTarget[] {\n const out: DriftTarget[] = [];\n for (const a of assets) {\n const tier = TRUST_TIER[a.id];\n if (tier !== \"vetted\" && tier !== \"experimental\") continue;\n const repo = repoForAsset(a);\n if (!repo) continue; // 도출 불가 — 테스트가 0건을 강제하므로 정상 경로에선 발생 안 함\n out.push({ id: a.id, tier, repo });\n }\n return out;\n}\n\n/** 정적 tier 가 실제 star 와 어긋났는지 판정. */\nexport function classifyDrift(tier: StarTier, stars: number): DriftVerdict {\n if (tier === \"vetted\" && stars < STAR_THRESHOLD) return \"demote\";\n if (tier === \"experimental\" && stars >= STAR_THRESHOLD) return \"promote\";\n return \"ok\";\n}\n"],"mappings":";;;;;;;;;;;AAAA;AA+BO,IAAM,iBAAiB;AAS9B,IAAM,gBAAwC;AAAA,EAC5C,cAAc;AAAA;AAAA,EACd,eAAe;AAAA;AAAA,EACf,gBAAgB;AAAA;AAAA,EAChB,iBAAiB;AAAA;AAAA,EACjB,UAAU;AAAA;AAAA,EACV,eAAe;AAAA;AACjB;AAGO,SAAS,cAAc,QAA+B;AAC3D,QAAM,WAAW,OAAO,QAAQ,8BAA8B,EAAE;AAChE,QAAM,IAAI,SAAS,MAAM,qBAAqB;AAC9C,SAAO,IAAI,CAAC,KAAK;AACnB;AAGO,SAAS,aAAa,OAAqC;AAChE,QAAM,WAAW,cAAc,MAAM,EAAE;AACvC,MAAI,SAAU,QAAO;AACrB,QAAM,IAAI,MAAM;AAChB,MAAI,EAAE,SAAS,QAAS,QAAO,cAAc,EAAE,MAAM;AACrD,MAAI,EAAE,SAAS,SAAU,QAAO,cAAc,EAAE,WAAW;AAC3D,SAAO;AACT;AASO,SAAS,aACd,SAAuC,iBACxB;AACf,QAAM,MAAqB,CAAC;AAC5B,aAAW,KAAK,QAAQ;AACtB,UAAM,OAAO,WAAW,EAAE,EAAE;AAC5B,QAAI,SAAS,YAAY,SAAS,eAAgB;AAClD,UAAM,OAAO,aAAa,CAAC;AAC3B,QAAI,CAAC,KAAM;AACX,QAAI,KAAK,EAAE,IAAI,EAAE,IAAI,MAAM,KAAK,CAAC;AAAA,EACnC;AACA,SAAO;AACT;AAGO,SAAS,cAAc,MAAgB,OAA6B;AACzE,MAAI,SAAS,YAAY,QAAQ,eAAgB,QAAO;AACxD,MAAI,SAAS,kBAAkB,SAAS,eAAgB,QAAO;AAC/D,SAAO;AACT;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uzysjung/agent-harness",
3
- "version": "26.95.0",
3
+ "version": "26.97.0",
4
4
  "description": "Curate vetted AI-coding skills & plugins by your tech stack — install only what you need, across Claude Code, Codex, OpenCode & Antigravity",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -4,6 +4,10 @@
4
4
  > **Antigravity**: 2.0+ (`agy` CLI + desktop IDE)
5
5
  > **Location**: workspace rule — `.agents/rules/uzys-harness.md`
6
6
 
7
+ ## Project Context
8
+
9
+ {PROJECT_CONTEXT}
10
+
7
11
  ## Project Rules
8
12
 
9
13
  {PROJECT_RULES}
@@ -4,6 +4,10 @@
4
4
  > **Codex Version**: 0.124.0+
5
5
  > **Linked SPEC**: `docs/specs/codex-compat.md`
6
6
 
7
+ ## Project Context
8
+
9
+ {PROJECT_CONTEXT}
10
+
7
11
  ## Project Rules
8
12
 
9
13
  {PROJECT_RULES}
@@ -4,6 +4,10 @@
4
4
  > **OpenCode Version**: 0.x (anomalyco/opencode)
5
5
  > **Linked SPEC**: `docs/specs/opencode-compat.md`
6
6
 
7
+ ## Project Context
8
+
9
+ {PROJECT_CONTEXT}
10
+
7
11
  ## Project Rules
8
12
 
9
13
  {PROJECT_RULES}
@@ -1,178 +1,312 @@
1
1
  ---
2
2
  name: compaction-handoff
3
3
  description: >-
4
- Execute a structured handoff right before a context compaction so no state is lost — persist
5
- durable facts to memory, take an atomic git snapshot (clean tree + open-PR check), and emit a
6
- fixed-field resume anchor (current state / verified / what's left / next action) plus a suggested
7
- custom /compact summary line. Use when the user says "컴팩션 준비해줘", "컴팩션하고 이어서
8
- 진행할 있게 준비해줘", "핸드오프 준비해줘", or in English "prepare for compaction",
9
- "get ready to compact and continue", "hand off before /compact", "checkpoint before compacting".
10
- Also fire proactively when context is nearing the window limit and an auto-compact is imminent.
4
+ Create a compact, reconstructible checkpoint immediately before context compaction. Persist only
5
+ durable facts and decisions, overwrite one current resume anchor, verify Git and open-PR state,
6
+ and emit one concrete next action plus a short /compact line. Use for "컴팩션 준비해줘",
7
+ "컴팩션하고 이어서 진행할 있게 준비해줘", "핸드오프 준비해줘", or "prepare for
8
+ compaction", or equivalent. Repeated execution must be idempotent and must not grow state files
9
+ without bound.
11
10
  ---
12
11
 
13
12
  # Compaction Handoff Protocol
14
13
 
15
- A context window is about to be summarized and reinitialized. The model is stateless, so **only
16
- what you write out survives** — the new window starts from a lossy summary, not the live history.
17
- This skill runs the handoff deliberately so the resumed session can pick up without re-deriving
18
- lost state.
14
+ Context compaction is lossy. Create a deliberate checkpoint that lets the next session resume from
15
+ verified state without replaying the full conversation.
19
16
 
20
- > Sibling skill `strategic-compact` decides **WHEN** to compact (phase boundaries, token pressure).
21
- > This skill is the **HOW**: it executes the handoff at that moment. Run `strategic-compact`'s
22
- > decision first if you're unsure whether to compact at all; run this when the answer is "yes".
17
+ This protocol is **snapshot-based, not append-based**:
23
18
 
24
- ## When to use
19
+ - `MEMORY.md`: durable facts and pointers only.
20
+ - `docs/decisions/`: durable, load-bearing decisions only.
21
+ - `.handoff/CURRENT.md`: current resumable state; overwrite on every handoff.
22
+ - Git and PR state: authoritative implementation snapshot.
23
+ - `/compact` line: short pointer to the anchor, not another summary.
25
24
 
26
- The user works in Korean and triggers this repeatedly. Treat any of these as a fire signal:
25
+ > `strategic-compact` decides **when** to compact. This skill defines **how** to checkpoint.
27
26
 
28
- - **"컴팩션 준비해줘"** / **"컴팩션하고 이어서 진행할 수 있게 준비해줘"** / **"핸드오프 준비해줘"**
29
- - English equivalents: "prepare for compaction", "get ready to compact and continue", "hand off".
30
- - **Proactively, before the cliff.** Don't wait for auto-compact at 100%. Auto-compaction fires
31
- near the window limit; a common practice is to trigger the handoff earlier (around ~80% of the
32
- window) so there's still budget to write a clean anchor — a rushed handoff at the cliff is exactly
33
- where load-bearing context gets dropped.
27
+ ## Goals
34
28
 
35
- Why proactive matters: auto-compact optimizes for *generic* continuity, not for THIS task's
36
- load-bearing facts (an open PR, a chosen-but-unwritten decision). If you skip the handoff because
37
- the task "looks finished," you risk silent information loss — the resumed agent assumes work
38
- shipped that did not.
29
+ A valid handoff is:
39
30
 
40
- ## The model: three legs of a checkpoint
31
+ - **Recoverable:** the next session can start from one exact action.
32
+ - **Atomic:** the anchor refers to one coherent repository state.
33
+ - **Evidence-based:** verified results are distinct from claims and pending work.
34
+ - **Compact:** only load-bearing information survives.
35
+ - **Idempotent:** rerunning updates existing state instead of duplicating it.
36
+ - **Bounded:** state files remain within fixed size limits.
41
37
 
42
- Treat the handoff as a deliberate checkpoint, not a passive summary. Three legs, each grounded in
43
- an established practice:
38
+ ## Trigger
44
39
 
45
- 1. **Persist durable facts to external memory** *(before compacting, never after)*.
46
- The window will be wiped; structured note-taking exists precisely because the summary alone
47
- can't be trusted to carry everything. Route load-bearing *decisions* to ADRs (`docs/decisions/`)
48
- so the *why* survives every future compaction, not just this one.
49
- 2. **Take an atomic, reconstructible snapshot** — git clean (or a `savepoint` commit) plus an
50
- **open-PR check**. A dirty/half-committed tree is a corrupt checkpoint; an open PR is itself
51
- critical state that belongs in "what's left." This is the Checkpoint **Atomicity** and **State
52
- Completeness** principles applied to the working tree.
53
- 3. **Emit a fixed-field resume anchor** — current state / verified / what's left / next action —
54
- framed *working backwards* from the next concrete step so a freshly-compacted agent re-orients
55
- instantly instead of replaying history forward.
40
+ Run on explicit compaction or handoff requests, or proactively before automatic compaction while
41
+ there is still enough context to write a clean checkpoint.
56
42
 
57
- ### Preserve-list, not a prose blob
43
+ Do not run after compaction without first reconstructing the best available state.
58
44
 
59
- Use an explicit preserve-list rather than a free-form paragraph (Anthropic's stated preserve/discard
60
- split):
45
+ ## State and retention rules
61
46
 
62
- | Preserve (high-value) | Discard (low-value) |
47
+ ### `.handoff/CURRENT.md` transient resume SSOT
48
+
49
+ - Single source of truth for current resumable state.
50
+ - Overwrite; never append old anchors.
51
+ - No raw logs, full file contents, or conversation replay.
52
+ - Reference commits, PRs, tests, files, and ADRs instead of copying them.
53
+ - Target: **120 lines / 12 KB maximum**.
54
+ - Write atomically through a temporary file when practical.
55
+ - Historical archives are disabled by default. If explicitly required, keep them under
56
+ `.handoff/archive/`, apply a retention limit, and never auto-load them on resume.
57
+
58
+ ### `MEMORY.md` — durable facts only
59
+
60
+ Keep:
61
+
62
+ - stable purpose, scope, constraints, invariants, and operating principles;
63
+ - durable repository or user preferences;
64
+ - pointers to active ADRs and `.handoff/CURRENT.md`.
65
+
66
+ Remove or exclude:
67
+
68
+ - current branch, test failure, task progress, temporary blocker, raw output;
69
+ - completed session history, old anchors, duplicated repository content.
70
+
71
+ Update or replace existing entries; do not append near-duplicates. Remove superseded facts. Target:
72
+ **200 lines / 20 KB maximum**, unless the repository defines another limit.
73
+
74
+ ### `docs/decisions/` — durable decisions only
75
+
76
+ Create or update an ADR only for expensive-to-reverse decisions such as:
77
+
78
+ - architecture or major dependency choices;
79
+ - API, data-model, compatibility, or migration contracts;
80
+ - security trust boundaries and control ownership;
81
+ - deployment topology, operational responsibility, or deliberate breaking changes.
82
+
83
+ Do not create ADRs for branch status, task order, temporary workarounds, test failures, or today's
84
+ remaining work. Search existing ADRs first; update or supersede rather than duplicate.
85
+
86
+ ### Git and PR state — implementation authority
87
+
88
+ Inspect:
89
+
90
+ ```bash
91
+ git status --short
92
+ git branch --show-current
93
+ git rev-parse --short HEAD
94
+ git log -1 --oneline
95
+ ```
96
+
97
+ When GitHub CLI is available:
98
+
99
+ ```bash
100
+ gh pr list --state open
101
+ gh pr status
102
+ ```
103
+
104
+ Never assume a PR is merged. Surface open PR number, CI/review status, and mergeability when
105
+ available. Never merge or modify a PR unless separately requested.
106
+
107
+ ## Preserve versus discard
108
+
109
+ | Preserve | Discard |
63
110
  |---|---|
64
- | Architectural decisions + their *why* (link ADR) | Redundant tool outputs, raw logs |
65
- | Unresolved bugs / blockers | Intermediate reasoning already acted on |
66
- | Processed-vs-remaining boundary | File contents you can re-read from disk |
67
- | Open PRs / unpushed branches | Tool-call counts and history |
68
- | Verified-vs-merely-claimed evidence | Restated CLAUDE.md / rules (already loaded) |
111
+ | Current objective and processed/remaining boundary | Full conversation replay |
112
+ | Durable decisions via ADR reference | Intermediate reasoning already acted on |
113
+ | Unresolved blockers and exact impact | Raw logs and repetitive tool output |
114
+ | Branch, commit, dirty state, open PRs | Re-readable file contents |
115
+ | Test/build evidence | Unsupported "done" claims |
116
+ | One exact next action | Broad speculative future work |
117
+
118
+ When uncertain, preserve a concise reference rather than duplicated content.
69
119
 
70
120
  ## Workflow
71
121
 
72
- Run these in order. Each writes durable state *before* the window is touched.
122
+ ### 1. Inspect existing state
123
+
124
+ ```bash
125
+ test -f MEMORY.md && sed -n '1,240p' MEMORY.md
126
+ test -f .handoff/CURRENT.md && sed -n '1,180p' .handoff/CURRENT.md
127
+ find docs/decisions -maxdepth 1 -type f 2>/dev/null | sort
128
+ ```
129
+
130
+ Use existing files to update and prune. Never blindly append.
131
+
132
+ ### 2. Classify each item
133
+
134
+ Route each fact once:
135
+
136
+ 1. durable fact → `MEMORY.md`;
137
+ 2. durable decision with rationale → ADR;
138
+ 3. transient resumable state → `.handoff/CURRENT.md`;
139
+ 4. reconstructible or low-value detail → discard.
140
+
141
+ A fact should not exist in multiple places unless one location contains only a pointer.
73
142
 
74
- **1. Memory — persist durable facts.**
75
- Update the auto-memory (`MEMORY.md`) and any session-summary entry with the preserve-list items.
76
- For a load-bearing decision (architecture, dependency, data model, breaking change), write or update
77
- an ADR in `docs/decisions/` — this is the one place "the why behind the constraint" survives lossy
78
- compaction. Don't rely on the `/compact` summary to carry a decision; it strips provenance.
143
+ ### 3. Update durable state
144
+
145
+ For `MEMORY.md`:
146
+
147
+ - merge duplicates;
148
+ - replace superseded facts;
149
+ - remove completed transient state;
150
+ - add only genuinely durable information;
151
+ - keep a pointer to `.handoff/CURRENT.md`.
152
+
153
+ For ADRs:
154
+
155
+ - confirm the decision is durable;
156
+ - search for an equivalent ADR;
157
+ - update or supersede when possible;
158
+ - create a new ADR only when necessary.
159
+
160
+ If there are no durable changes, leave these files unchanged.
161
+
162
+ ### 4. Make Git state reconstructible
163
+
164
+ Preferred order:
165
+
166
+ 1. reuse the current meaningful commit if the tree is clean;
167
+ 2. make a normal semantic commit for a coherent completed unit when authorized;
168
+ 3. otherwise use a named stash when safe and authorized;
169
+ 4. use a temporary savepoint commit only as a last resort;
170
+ 5. if no safe write action is authorized, leave the tree unchanged and record dirty files and risk.
171
+
172
+ Do not stage unrelated files. Do not create another savepoint when state has not materially changed.
173
+
174
+ ### 5. Overwrite `.handoff/CURRENT.md`
175
+
176
+ Use this structure:
177
+
178
+ ```markdown
179
+ # Compaction Resume Anchor
180
+
181
+ - Updated: <ISO-8601 timestamp with timezone>
182
+ - Repository: <name or path>
183
+ - Branch: <branch or n/a>
184
+ - Commit: <short SHA or n/a>
185
+ - Working tree: <clean | concise dirty-file summary>
186
+ - Open PRs: <none | concise status>
187
+
188
+ ## Current state
189
+ <Active objective, completed work, and processed-vs-remaining boundary.>
190
+
191
+ ## Verified
192
+ <Evidence only: command and exit status, reviewed diff, artifact, merged PR, or "not verified".>
193
+
194
+ ## What's left
195
+ <Pending work, blockers, dirty or unpushed state, open PRs, and unresolved decisions.>
196
+
197
+ ## Next action
198
+ <Exactly one executable next step, preferably naming the file, command, or decision target.>
199
+
200
+ ## References
201
+ - <Only directly useful plan/spec/ADR/PR/file references>
202
+ ```
203
+
204
+ Requirements:
205
+
206
+ - `Next action` is mandatory and singular.
207
+ - `Verified` must name evidence; assumptions are not passes.
208
+ - `What's left` must expose relevant uncommitted, unpushed, unmerged, failed, or blocked state.
209
+ - Keep references minimal.
210
+
211
+ Atomic write example:
79
212
 
80
- **2. Git — atomic snapshot + open-PR check.**
81
- Make the working tree reflect a consistent state. The `gh pr list` step is **not optional** — it is
82
- the git-policy **Session Cleanup** gate, which is mandatory before any `/clear` or `/compact`. Run it
83
- every handoff:
84
213
  ```bash
85
- git status --short # is the tree clean?
86
- # IF tree is dirty AND the work is worth keeping:
87
- git add -A && git commit -m "chore: savepoint before compaction handoff"
88
- gh pr list --state open # list open PRs — each open PR is what's-left state to surface, not necessarily an anomaly
89
- git branch --show-current # note unpushed branch state
214
+ mkdir -p .handoff
215
+ cat > .handoff/CURRENT.md.tmp <<'ANCHOR'
216
+ ...
217
+ ANCHOR
218
+ mv .handoff/CURRENT.md.tmp .handoff/CURRENT.md
90
219
  ```
91
- This folds the git-policy **Session Cleanup** gate into the handoff. An open PR is not a
92
- loose end to hide — surface it in the anchor's "what's left" with its number, CI status, and
93
- mergeability, and let the user decide (no auto-merge).
94
220
 
95
- **3. Resume anchor — four fixed fields.**
96
- Emit the anchor. Keep "verified" distinct from "done": *done* is a claim, *verified* encodes the
97
- evidence (test PASS output, exit 0, a merged PR). The resumed agent re-trusts only what's verified.
98
- Make **next action** mandatory and singular — it's the entry point the resumed session executes
99
- first, so the anchor is self-serve (Recovery Automation), not a note to re-interpret.
221
+ ### 6. Validate
100
222
 
101
- **4. Suggested /compact line.**
102
- Hand the user a one-line custom summary to pass to `/compact` (e.g.
103
- `/compact Resume: finish ADR-022 flag removal; PR #160 merged, branches drift test failing`). This
104
- is a pointer to the durable anchor, not a replacement for it.
223
+ ```bash
224
+ wc -l -c MEMORY.md .handoff/CURRENT.md 2>/dev/null
225
+ git status --short
226
+ git diff --check
227
+ ```
228
+
229
+ Confirm:
105
230
 
106
- ## Handoff report format
231
+ - anchor matches current branch and commit;
232
+ - no old anchor was appended;
233
+ - no transient state leaked into `MEMORY.md`;
234
+ - no duplicate ADR was created;
235
+ - open PR state is visible;
236
+ - `Verified` is evidence-backed;
237
+ - `Next action` is singular and executable.
107
238
 
108
- Present a compact status table, then the anchor:
239
+ If size limits are exceeded, prune. Do not create another summary file to hide the problem.
109
240
 
241
+ ### 7. Report and suggest `/compact`
242
+
243
+ ```markdown
244
+ | Check | Result | Status |
245
+ |---|---|---|
246
+ | Durable memory | unchanged / updated and pruned | ✓ / ⚠ |
247
+ | ADRs | none / updated / created | ✓ / ⚠ |
248
+ | Git snapshot | branch, commit, clean/dirty | ✓ / ⚠ |
249
+ | Open PRs | none / concise status | ✓ / ⚠ |
250
+ | Resume anchor | overwritten and validated | ✓ / ⚠ |
110
251
  ```
111
- | Check | Result | Status |
112
- |----------------|-----------------------------------------|--------|
113
- | Memory | MEMORY.md + ADR-022 updated | ✓ |
114
- | Git | tree clean, savepoint a1b2c3d | ✓ |
115
- | Open PRs | gh pr list 0 open | ✓ |
116
- | Files | resume anchor written, plan SSOT synced | ✓ |
252
+
253
+ Then give the four resume fields in concise form and one short pointer:
254
+
255
+ ```text
256
+ /compact Resume from .handoff/CURRENT.md; next: <single action>; <branch>@<sha>; <PR or dirty-state warning if material>
117
257
  ```
118
258
 
119
- ## Worked example
259
+ ## Resume protocol
120
260
 
121
- **Input** (user, at ~78% context):
122
- > 컴팩션하고 이어서 진행할 수 있게 준비해줘
261
+ After compaction, load only:
123
262
 
124
- **Output:**
263
+ 1. repository instructions (`CLAUDE.md` or equivalent);
264
+ 2. `MEMORY.md`;
265
+ 3. `.handoff/CURRENT.md`;
266
+ 4. ADRs referenced by the anchor;
267
+ 5. current Git and open-PR state;
268
+ 6. source files required for the next action.
125
269
 
126
- Handoff checks:
270
+ Do not auto-load archives, old summaries, raw logs, or the full prior conversation. If Git conflicts
271
+ with the anchor, Git wins; report the discrepancy before continuing.
127
272
 
128
- | Check | Result | Status |
129
- |----------|-------------------------------------------------|--------|
130
- | Memory | MEMORY.md code-quality-cycle entry refreshed | ✓ |
131
- | Git | tree clean (no savepoint needed) | ✓ |
132
- | Open PRs | `gh pr list` → **1 open: #165** CI pass, mergeable | ⚠ surfaced |
133
- | Files | resume anchor below; persona-feedback SSOT synced | ✓ |
273
+ ## Idempotency checks
134
274
 
135
- **Resume anchor**
136
- - **Current state:** Persona P0 fixes in progress on branch `fix/persona-p0`. 2 of 4 fixes landed.
137
- - **Verified:** `npm run ci` exit 0 on current HEAD (typecheck + lint + coverage branches 88.4% + build). Docker scenario for `--with <id>` exit 0.
138
- - **What's left:** Fixes 3 & 4 (wizard copy + COMPATIBILITY honesty). **Open PR #165 is not merged** — publishing is blocked until P0 complete (per persona-feedback-improvements.md). Branch `fix/persona-p0` unpushed for the last 2 commits.
139
- - **Next action:** Implement fix 3 (wizard understanding-category copy), then re-run `npm run ci`.
275
+ Every rerun must satisfy:
140
276
 
141
- **Suggested /compact line:**
142
- `/compact Resume fix/persona-p0: do fix 3 (wizard copy) next, then ci; PR #165 open & blocks publish until all 4 P0 done`
277
+ - `CURRENT.md` replaced, not appended;
278
+ - memory facts updated, not duplicated;
279
+ - ADRs reused, updated, or superseded rather than cloned;
280
+ - no new savepoint without material repository change;
281
+ - one open PR represented once;
282
+ - completed work removed from `What's left`;
283
+ - file sizes remain stable.
143
284
 
144
- Notice what the anchor does deliberately: it leads with the **next action** (working-backwards), keeps
145
- the open PR visible in "what's left" instead of assuming it shipped, and separates the *verified* CI
146
- evidence from the *unverified* remaining fixes.
285
+ ## Failure handling
147
286
 
148
- ## Pitfalls this guards against
287
+ If tools or repository access are unavailable:
149
288
 
150
- - **Lossy summary-stripping** a headline-only handoff looks complete but is unrecoverable because
151
- the evidence and reasoning chains are gone. Fix: preserve-list + ADR provenance, not a prose blob.
152
- - **Lost-in-the-Middle over-stuffing** dumping full history into the new window doesn't help;
153
- buried facts follow a U-shaped accuracy curve. The anchor stays short and structured.
154
- - **Telephone-game decay** fidelity erodes across successive compactions. Routing load-bearing
155
- facts to stable memory/ADRs breaks the degradation chain a chain of summaries can't.
156
- - **Non-atomic snapshot** — handing off with a half-committed tree reconstructs an inconsistent
157
- state. The git leg forces a clean or savepoint-committed tree.
158
- - **Incomplete state save** — omitting the processed-vs-remaining boundary forces duplicate work or
159
- silent re-execution of irreversible actions. The "what's left" field is mandatory.
289
+ - do not fabricate Git, PR, CI, or test status;
290
+ - mark unavailable evidence as `not verified`;
291
+ - create the best available anchor from known state;
292
+ - identify missing verification as a blocker or next action when material;
293
+ - do not claim an atomic checkpoint when repository state could not be inspected.
160
294
 
161
- ## References
295
+ If durable files cannot be written, do not claim that compaction is safe. Report the failure and emit
296
+ a minimal manual resume anchor in the response.
297
+
298
+ ## Anti-patterns
162
299
 
163
- - Anthropic *Effective context engineering for AI agents* (Compaction; Structured Note-Taking /
164
- Agentic Memory): https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents
165
- - Hendricks.ai Checkpoint patterns (State Completeness, Atomicity, Recovery Automation):
166
- https://hendricks.ai/insights/checkpoint-patterns-long-running-ai-agent-tasks
167
- - XTrace AI agent context handoff (Decisions / Artifacts / Preferences / Timeline; decision
168
- provenance): https://xtrace.ai/blog/ai-agent-context-handoff
169
- - Architectural Decision Records (ADR) append-only single-decision records; route load-bearing
170
- decisions here so the *why* survives compaction.
171
- - Amazon *Working Backwards* — lead the anchor with the end state and the single next action.
300
+ - Appending each handoff to `MEMORY.md`.
301
+ - Keeping multiple active anchors.
302
+ - Creating ADRs for routine task progress.
303
+ - Copying complete logs into the anchor.
304
+ - Loading all historical handoffs after compaction.
305
+ - Creating a savepoint commit on every run.
306
+ - Hiding dirty files, failed CI, unpushed commits, or open PRs.
307
+ - Listing several possible next actions instead of one entry point.
172
308
 
173
309
  ## Related skills
174
310
 
175
- - **strategic-compact** — decides WHEN to compact (phase boundaries, token pressure). Pair with it:
176
- it answers "compact now?", this skill executes the handoff when the answer is yes.
177
- - **git-policy Session Cleanup** — the open-PR check (leg 2) is the same gate; this skill folds it
178
- into the pre-compaction moment.
311
+ - **strategic-compact** — decides when to compact.
312
+ - **git-policy Session Cleanup** defines repository and PR cleanup expectations.
@@ -1,23 +0,0 @@
1
- # [Project Name]
2
-
3
- > 활성 Track(s): <!-- INSERT: track-list -->
4
- >
5
- > <!-- INSERT: tagline -->
6
-
7
- <!-- INSERT: stack -->
8
-
9
- <!-- INSERT: workflow -->
10
-
11
- <!-- INSERT: active-rules -->
12
-
13
- <!-- INSERT: agents -->
14
-
15
- <!-- INSERT: skills -->
16
-
17
- <!-- INSERT: plugins -->
18
-
19
- <!-- INSERT: commands -->
20
-
21
- <!-- INSERT: boundaries -->
22
-
23
- <!-- INSERT: supabase-auth -->
@@ -1,13 +0,0 @@
1
- | Rule | 설명 |
2
- |------|------|
3
- | git-policy | 브랜치 전략, PR 필수, main 직접 커밋 금지 |
4
- | change-management | 변경 영향 분석, DO NOT CHANGE 영역 보호 |
5
- | test-policy | 단위/통합/E2E (pytest + Playwright). 커버리지 80% 이상 |
6
- | ship-checklist | 배포 전 최종 점검 체크리스트 |
7
- | code-style | 불변성(Pydantic 모델), 소형 파일, 함수 50줄 이하 |
8
- | error-handling | 명시적 에러 처리. HTTPException 계층화 |
9
- | design-workflow | UI/UX 설계 프로세스. shape -> build -> polish |
10
- | tauri | Tauri IPC, 보안 설정, 빌드 구성 |
11
- | shadcn | shadcn/ui 컴포넌트 사용 규칙, 커스터마이징 패턴 |
12
- | api-contract | REST API 계약. Pydantic 스키마, OpenAPI 자동 생성 |
13
- | database | Alembic 마이그레이션, 쿼리 최적화, 인덱스 전략 |
@@ -1,5 +0,0 @@
1
- | Agent | Scope | Model | 역할 |
2
- |-------|-------|-------|------|
3
- | reviewer | global | opus | 검증 전용 (SOD). 코드/문서/UI 관점 전환 |
4
- | code-reviewer | project | sonnet | 일상적 코드 리뷰. CRITICAL -> LOW 분류 |
5
- | security-reviewer | project | sonnet | OWASP Top 10, FastAPI 보안 미들웨어 검증 |
@@ -1,17 +0,0 @@
1
- **Always (자동 실행)**:
2
- - 코드 변경 후 code-reviewer 실행
3
- - 커밋 전 보안 체크 (하드코딩된 시크릿 탐지)
4
- - FastAPI 엔드포인트 추가 시 Pydantic 스키마 검증
5
- - git pull로 세션 시작
6
-
7
- **Ask First (확인 후 실행)**:
8
- - Alembic 마이그레이션 실행 (되돌리기 어려움)
9
- - Railway 배포
10
- - Tauri 빌드/릴리스
11
- - main 브랜치 머지
12
-
13
- **Never (금지)**:
14
- - main 직접 커밋
15
- - 시크릿 하드코딩
16
- - 프로덕션 DB 직접 조작
17
- - DO NOT CHANGE 영역 수정
@@ -1,5 +0,0 @@
1
- | Namespace | Command | 용도 |
2
- |-----------|---------|------|
3
- | ecc: | security-scan, instinct-status, evolve, promote | 보안 스캔, 학습 관리 |
4
- | imm: | teach, polish, critique, audit, shape, adapt | 디자인 품질 관리 |
5
- | gsd: | (선택 설치) | 대형 프로젝트 오케스트레이션 |
@@ -1,2 +0,0 @@
1
- - **agent-skills**: 개발 워크플로우 백본
2
- - **Railway**: 배포 자동화 (FastAPI 서비스 + PostgreSQL)
@@ -1,5 +0,0 @@
1
- - **agent-skills**: 워크플로우 백본 (spec-driven-development, idea-refine)
2
- - **ECC CL-v2**: instinct 기반 학습. 세션 관찰 -> 패턴 축적
3
- - **Impeccable**: 프론트엔드 디자인 품질 (polish, critique, audit)
4
- - **react-best-practices**: React 패턴, 훅 규칙, 상태 관리
5
- - **shadcn-ui**: shadcn/ui 컴포넌트 가이드, 테마 커스터마이징
@@ -1,6 +0,0 @@
1
- - **Backend**: FastAPI + Python 3.12+ (uvicorn)
2
- - **Database**: PostgreSQL (SQLAlchemy / SQLModel)
3
- - **Frontend**: React + TypeScript + Vite
4
- - **UI**: shadcn/ui + Tailwind CSS
5
- - **Desktop**: Tauri (Rust shell)
6
- - **Infra**: Railway
@@ -1 +0,0 @@
1
- FastAPI + React + Tauri 데스크탑 앱을 위한 클라이언트 사이드 렌더링 풀스택 트랙.