| name | audit-public-rules |
| description | > Use when this capability is needed. |
audit-public-rules
๊ณต๊ฐ ์ง์นจ ํ์ผ์ ์ง๋จํด ์ด์๋ฅผ ๋ณด๊ณ ํ๊ณ , ์ฌ์ฉ์ ๋์๋ฅผ ๋ฐ์ ์ ํ์ ์ผ๋ก ๊ฐ์ ํ๋ค. ํธ๋ A(AGENTS.md + ๋ธ๋ฆฟ์ง) / ํธ๋ B(CLAUDE.md ๋จ๋
) ๋ชจ๋ ์ง์ํ๋ฉฐ, ํธ๋์ ๋ฃจํธ ํ์ผ ์กด์ฌ๋ก ์๋ ๊ฐ์งํ๋ค.
ํต์ฌ ์์น: ์ง๋จ โ ๋ณด๊ณ โ ๋์ ์ง๋ฌธ โ ์น์ธ๋ ๊ฒ๋ง ์ ์ฉ.
๋ฒ์
์ค์บ ๋์ (ํธ๋๋ณ):
| ํธ๋ | ํ์ผ | ๋น๊ณ |
|---|
| A | AGENTS.md | ๋ฉ์ธ ์ง๋จ ๋์ (source-of-truth) |
| A | CLAUDE.md, .claude/CLAUDE.md | Claude Code ๋ธ๋ฆฟ์ง |
| B | CLAUDE.md | ๋ฉ์ธ ์ง๋จ ๋์ (source-of-truth, ๋ธ๋ฆฟ์ง ์๋) |
| ๊ณตํต | CLAUDE.local.md | ๊ฐ์ธ ์ค์ (์กด์ฌ ์๋ง) |
์กด์ฌํ๋ ํ์ผ๋ง ๊ฒ์ฌ. ๋ ํธ๋ source ํ์ผ์ด ๋ชจ๋ ์์ผ๋ฉด: "์ค์บํ ํ์ผ์ด ์์ต๋๋ค. /draft-public-rules๋ก ๊ณต๊ฐ ์ง์นจ์ ๋จผ์ ์์ฑํ์ธ์."
์ธ์ด ์ ์ฑ
์ฌ์ฉ์ ๋๋ฉด ๋ณด๊ณ (์ด์ ์ค๋ช
, ์ ์ ๋ฉ์์ง, ์์ฝ)๋ ์ฌ์ฉ์ ์ธ์ด. ํ์ผ ๋ณธ๋ฌธ์ ์์ ํ ๋๋ ๊ธฐ์กด ์ธ์ด ์ ์ง (AGENTS.md๊ฐ ํ๊ตญ์ด๋ก ์ ํ์์ผ๋ฉด ์์ ๋ ํ๊ตญ์ด).
์ง๋จ ํญ๋ชฉ
"ํธ๋" ์ปฌ๋ผ: A+B = ๋ ํธ๋ ๊ณตํต, A only = ํธ๋ A์์๋ง ์ ์ฉ (ํธ๋ B๋ ์คํต).
Anti-pattern (A)
| ID | ์ด๋ฆ | Severity | ํธ๋ | ๊ธฐ์ค |
|---|
| A1 | Self-evident advice | Medium | A+B | "write clean code", "follow best practices" ๊ฐ์ด ํ๋ ๋ณํ๋ฅผ ์ฃผ์ง ๋ชปํ๋ ๋ฌธ๊ตฌ |
| A2 | Linter/formatter overlap | Medium | A+B | indentationยท์ธ๋ฏธ์ฝ๋ก ๋ฑ Prettier/Biome/ESLint์ด ์ด๋ฏธ ์ฒ๋ฆฌํ๋ ์คํ์ผ ๊ท์น |
| A3 | Code-readable content | Medium | A+B | package.json scripts ๋ณต๋ถ, ๊ธฐ์ ์คํ ๋์ด, ๋๋ ํ ๋ฆฌ ํธ๋ฆฌ ๋ถ์ฌ๋ฃ๊ธฐ |
| A4 | Stale references | High | A+B | ์กด์ฌํ์ง ์๋ ํ์ผ/๋๋ ํ ๋ฆฌ ์ธ๊ธ |
| A5 | Cross-tool duplication | Medium | A only | AGENTS.md์ CLAUDE.md์ ๊ฐ์ ๋ด์ฉ์ด ์ค๋ณต (ํธ๋ B๋ CLAUDE.md๊ฐ source๋ผ ๋ฌด๊ด) |
| A6 | Malformed Boundaries | Medium | A+B | ## Boundaries ์กด์ฌํ์ง๋ง 3-tier(Always/Ask/Never) ์๋ธํค๋ฉ ๋๋ฝ |
| A7 | Private settings in public file | High | A+B | source ํ์ผ์ ์๋ต ์ธ์ด, ๊ฐ์ธ URL, ๊ฐ์ธ ์ต๊ด ํฌํจ๋จ |
Token efficiency (T)
| ID | ํญ๋ชฉ | ํธ๋ | ๊ธฐ์ค |
|---|
| T1 | Total length | A+B | source ํ์ผ 150์ค ์ดํ ๊ถ์ฅ, 300 ๊ฒฝ๊ณ , 500+ ์ํ |
| T2 | Section balance | A+B | ํ ์น์
์ด ์ ์ฒด์ 40% ์ด๊ณผ ์ Medium ๊ฒฝ๊ณ |
| T3 | Bridge inefficiency | A only | CLAUDE.md๊ฐ @AGENTS.md/@../AGENTS.md ํ ์ค์ด ์๋๋ผ ์ค๋ณต ๋ด์ฉ์ ๋ด์ |
Structure (S)
| ID | ํญ๋ชฉ | Severity | ํธ๋ | ๊ธฐ์ค |
|---|
| S1 | Missing Boundaries | Low | A+B | ## Boundaries ์น์
์์ โ /refine-boundaries๋ก ๋์ ์์ ์ถ์ฒ |
| S2 | Missing bridge | Medium | A only | AGENTS.md๋ ์์ง๋ง CLAUDE.md / .claude/CLAUDE.md ๋ ๋ค ์์ (ํธ๋ B๋ ๋ธ๋ฆฟ์ง ์์ฒด๊ฐ ๋ถํ์) |
References (R)
| ID | ํญ๋ชฉ | Severity | ๊ธฐ์ค |
|---|
| R1 | Dead reference paths | High | ## References ์น์
์ ๊ฒฝ๋ก ์ค ๋์คํฌ์ ์ค์ ๋ก ์๋ ๊ฒ |
์ํฌํ๋ก์ฐ
Step 0: ํธ๋ ์๋ ๊ฐ์ง
๋ฃจํธ์์ ๋ค์ ์์๋ก source-of-truth ๊ฒฐ์ :
| ์ผ์ด์ค | ํ์ | ๋์ |
|---|
AGENTS.md๋ง ์กด์ฌ | ํธ๋ A | Step 1๋ก ์งํ |
CLAUDE.md๋ง ์กด์ฌ | ํธ๋ B | Step 1๋ก ์งํ |
๋ ๋ค + CLAUDE.md๊ฐ import-only(@AGENTS.md ํ ์ค, ํน์ ๋งค์ฐ ์งง์ import ๋ธ๋ก) | ํธ๋ A | ์๋ ํ์ , ์ง๋ฌธ ์๋ต |
๋ ๋ค + CLAUDE.md์ ๋ณธ๊ฒฉ ๊ท์น(์น์
ํค๋ฉ ๋ค์) | ์ฌ์ฉ์ ์ง๋ฌธ | "์ด๋ ๊ฒ source-of-truth์ธ๊ฐ์? a) AGENTS.md (CLAUDE.md๋ ๋ฐ๋ก ๊ฒ์ฌ) b) CLAUDE.md (AGENTS.md๋ ๋ฌด์) c) ํตํฉ ๋ง์ด๊ทธ๋ ์ด์
(๋ ์ค ํ ์ชฝ์ผ๋ก ์ผ์ํ โ /draft-public-rules ์ฌ์คํ ์๋ด)" |
| ๋ ๋ค ์์ | ์ข
๋ฃ | "์ค์บํ ํ์ผ์ด ์์ต๋๋ค. /draft-public-rules๋ก ๊ณต๊ฐ ์ง์นจ์ ๋จผ์ ์์ฑํ์ธ์." |
ํ์ ๋ ํธ๋์ Step 3 ๋ณด๊ณ ํค๋์ Detected track: X ํํ๋ก ๋ช
์ โ ์ฌ์ฉ์๊ฐ 1์ด์ ๋ฐ๋ฐ ๊ฐ๋ฅ.
Step 1: ํ์ผ ์์ง
Step 0์์ ๊ฒฐ์ ๋ ํธ๋์ ๋ฐ๋ผ ์ค์บ ๋์ ํ์ผ๋ค์ ์ฝ๊ณ ์ค ์, ๊ทผ์ฌ ํ ํฐ(์ค ร 3)์ ๊ณ์ฐ. ๋ด์ฉ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์งํด Step 2์์ ๋ฐ๋ณต ํ์ฑ ์์ด ์ฌ์ฉ.
- ํธ๋ A:
AGENTS.md + ์กด์ฌํ๋ ๋ธ๋ฆฟ์ง(CLAUDE.md, .claude/CLAUDE.md) + CLAUDE.local.md
- ํธ๋ B:
CLAUDE.md + CLAUDE.local.md
Step 2: ์ฒดํฌ๋ฆฌ์คํธ ์คํ
๋ชจ๋ anti-pattern / token / structure / references ํญ๋ชฉ์ ์ํ.
A4 (stale refs): ํ์ผ ๋ด์ฉ์์ ๊ฒฝ๋ก ํ ํฐ ์ถ์ถ โ ๋ฐฑํฑ ๊ฒฝ๋ก(`src/foo.ts`), ๋งํฌ๋ค์ด ๋งํฌ ํ๊น([x](path)), ๋ฆฌ์คํธ ๋ด ๊ฒฝ๋ก. URL์ ์ ์ธ. ๊ฐ ๊ฒฝ๋ก๊ฐ ๋์คํฌ์ ์กด์ฌํ๋์ง ํ์ธ.
A5 (cross-tool duplication, ํธ๋ A ํ์ ): AGENTS.md์ CLAUDE.md ์์ชฝ์ ์๋ ์น์
ยท๊ท์น ๋ฌธ์ฅ ๋น๊ต. CLAUDE.md๊ฐ ํ ์ค์ง๋ฆฌ ๋ธ๋ฆฟ์ง๋ฉด ์๋ ํต๊ณผ. ํธ๋ B์์๋ ํญ๋ชฉ ์์ฒด๋ฅผ skip.
A7 (private settings): source ํ์ผ(ํธ๋ A: AGENTS.md / ํธ๋ B: CLAUDE.md)์์ "ํญ์ ํ๊ตญ์ด๋ก ์๋ต", "๋ด X ์ ํธ" ๋ฑ ๊ฐ์ธ ๋๋ช
์ฌ/๊ฐ์ธ ์ ํธ ํํ ํ์ง.
R1: ## References ์น์
์กด์ฌ ์๋ง ์คํ. ์์ผ๋ฉด skip.
Step 3: ์ง๋จ ๋ณด๊ณ
Severity High โ Medium โ Low ์์ผ๋ก ์ ๋ ฌํด ๋ณด๊ณ :
๐ ๊ณต๊ฐ ์ง์นจ ์ง๋จ ๋ณด๊ณ
Detected track: A (AGENTS.md as source-of-truth + bridge). ๋ค๋ฅธ ํธ๋์ผ๋ก ๋ณด์๋ ค๋ฉด ์๋ ค์ฃผ์ธ์.
ํ์ผ: AGENTS.md (187์ค, ~561 ํ ํฐ)
ํ์ผ: .claude/CLAUDE.md (1์ค, @../AGENTS.md ๋ธ๋ฆฟ์ง)
๋ฐ๊ฒฌ๋ ์ด์ (5๊ฐ)
๐ด [A4] Stale reference
Line 32: `src/utils/auth.ts` โ ํ์ผ์ด ์กด์ฌํ์ง ์์
โ ์ ์: ํด๋น ์ค ์ ๊ฑฐ ๋๋ ์ค์ ๊ฒฝ๋ก๋ก ๊ฐฑ์
๐ด [R1] Dead reference path
Line 78: `docs/old-prd.md` โ ํ์ผ์ด ์กด์ฌํ์ง ์์
โ ์ ์: `## References`์์ ์ ๊ฑฐ
๐ก [A2] Linter overlap
Lines 45-48: "2-space indent, ์ธ๋ฏธ์ฝ๋ก ํ์" โ .prettierrc๊ฐ ์๋ ์ฒ๋ฆฌ
โ ์ ์: 4์ค ์ญ์
๐ก [A1] Self-evident advice
Line 71: "ํญ์ clean code ์์ฑ"
โ ์ ์: ์ญ์ (๊ตฌ์ฒด์ ํ๋ ์ง์๊ฐ ์๋)
๐ข [S1] Missing Boundaries
`## Boundaries` ์น์
์์
โ ์ ์: `/refine-boundaries`๋ก ์์ด์ ํธ ์ค์์์ ๊ท์น ๋์ ์์
ํต๊ณผํ ํญ๋ชฉ (8๊ฐ)
โ
๋ธ๋ฆฟ์ง ํ์ผ ์กด์ฌ
โ
์น์
๊ท ํ 40% ์ด๋ด
โ
Private settings ์ ์ถ ์์
...
์ด์๊ฐ ์์ผ๋ฉด: "โ
๋ชจ๋ ํต๊ณผ (N๊ฐ ํญ๋ชฉ ํ์ธ)"๋ง ๋ณด๊ณ ํ๊ณ ์ข
๋ฃ. Step 4 ์๋ต.
Step 4: ๊ฐ์ ์ฌ๋ถ ์ง๋ฌธ
์ด์๊ฐ ๋ฐ๊ฒฌ๋์ต๋๋ค. ๊ฐ์ ํ ๊น์?
1. ์ โ ์์ ํ ํญ๋ชฉ ์ ํ
2. ์๋์ค โ ๋ณด๊ณ ๋ง ๋จ๊ธฐ๊ณ ์ข
๋ฃ
**"์๋์ค"**๋ฉด ์ฌ๊ธฐ์ ์ข
๋ฃ.
Step 5: ํญ๋ชฉ ์ ํ ๋ฐ ์ ์ฉ
์ด๋ค ํญ๋ชฉ์ ์ ์ฉํ ๊น์?
๋ฒํธ๋ก ์ ํ(์: "1,3,4") ๋๋ "์ ๋ถ ์ ์ฉ"
์ ํ๋ ํญ๋ชฉ๋ง ์์ :
- ๊ฐ ์์ ์ ๋ํด before/after diff๋ฅผ ๋ณด์ฌ์ค ๋ค ์ ์ฉ (์ฌ๋ฌ ๊ฐ๋ฉด ์ผ๊ด diff๋ก)
- ์ฌ์ฉ์ ๋์ ์์ด ์๋ณธ์ ์ฌ์์ฑํ์ง ์๋๋ค
์๋ฃ ํ ๊ฐฑ์ ๋ ์ค ์/ํ ํฐ ํ์:
โ
4๊ฐ ํญ๋ชฉ ์ ์ฉ
AGENTS.md: 187์ค โ 171์ค (-16์ค, ~48 ํ ํฐ ์ ์ฝ)
๋ค๋ฅธ ์คํฌ๊ณผ์ ์ฐ๊ณ
์ง๋จ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ถ์ฒ:
| ๋ฐ๊ฒฌ | ์ถ์ฒ |
|---|
| S1 (missing Boundaries) | /refine-boundaries ์คํ |
| S2 (missing bridge, ํธ๋ A) | /draft-public-rules์ ๋ธ๋ฆฟ์ง ๋จ๊ณ(Step 7) ์ฌ์คํ |
| A6 (malformed Boundaries) | ์๋ ์ฌ๊ตฌ์ฑ ํ์ (restructure ๊ธฐ๋ฅ์ ํฅํ ๋ฆด๋ฆฌ์ค) |
| A7 (private settings) | ํด๋น ๋ด์ฉ์ CLAUDE.local.md๋ก ์ด๋ ๊ถ์ฅ |
| A5 (cross-tool duplication, ํธ๋ A) | ์ค๋ณต ๋ด์ฉ์ AGENTS.md์๋ง ๋๊ณ CLAUDE.md๋ @AGENTS.md ํ ์ค๋ก |
| ํธ๋ ๋ง์ด๊ทธ๋ ์ด์
(๋ ๋ค ๋ณธ๊ฒฉ ๊ท์น์ผ๋ก ์กด์ฌ) | /draft-public-rules๋ก ์๋ก ์์ฑํ์ฌ ํ ํธ๋์ผ๋ก ์ผ์ํ. ๊ธฐ์กด ํ์ผ์ ๋ฐฑ์
ํ ํตํฉ |
๊ธ์ง ํ๋
- ์ฌ์ฉ์ ๋์ ์์ด ํ์ผ ์์ โ ํญ์ ์ ํ์ ๋ฐ์ ๋ค ์ ์ฉ
- ์ด์๊ฐ ์์ ๋ ์ต์ง๋ก ๋ฌธ์ ๋ง๋ค๊ธฐ โ "๋ชจ๋ ํต๊ณผ"๋ฅผ ์ ์งํ๊ฒ ๋ณด๊ณ
- ํ์ผ ์ ์ฒด ์ฌ์์ฑ ์ ์ โ ํญ์ ๋ถ๋ถ ์์ ๋ง ์ ์
- fix-all์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ ์ โ ์ฌ์ฉ์๊ฐ ๋ช
์์ ์ผ๋ก "์ ๋ถ ์ ์ฉ" ์ ํํด์ผ๋ง
- ์กด์ฌํ์ง ์๋ ํ์ผ ์์ฑ โ ์ด ์คํฌ์ ๊ธฐ์กด ํ์ผ ์์ ์ ์ฉ
- ํธ๋์ ์ฌ์ฉ์ ๋์ ์์ด ๋ณ๊ฒฝ โ ์๋ ๊ฐ์ง ๊ฒฐ๊ณผ๋ ๋ณด๊ณ ํค๋์ ๋ช
์ํ๋, ๋ค๋ฅธ ํธ๋์ผ๋ก ๋ค์ ๊ฒ์ฌํ๋ ค๋ฉด ์ฌ์ฉ์๊ฐ ๋ช
์ ์์ฒญํด์ผ ํจ
- ํธ๋ B์์ ํธ๋ A ํ์ ํญ๋ชฉ(S2/A5/T3) ๊ฐ์ โ ํด๋น ํญ๋ชฉ์ ํธ๋ B์์ ํญ์ skip (๋ณด๊ณ ์์๋ ๋ฑ์ฅ ์ ํจ)
Source: dev-goraebap/grimoire โ distributed by TomeVault.