The English edition โ README.en.md
์ฑ์ ํ๋ ์ชฝ๊ณผ ์ฑ์ ๋ฐ๋ ์ชฝ์ด ๊ฐ์ผ๋ฉด, ๊ทธ๊ฑด ์ ์๊ฐ ์๋๋ค.
assay๋ ๊ทธ ๋ฌธ์ ํ๋๋ฅผ ๋ถ์ก๊ณ ๋ง๋ Claude Code ์คํฌ์ด๋ค. ์น์์ ์๋ฌธ์ ์ง์ ๋์ด์ ์ ์ฅํ๊ณ , ์ ์ฅ๋ ์๋ฌธ์ ํ ๊ธ์๋ ๋ค๋ฅด์ง ์๊ฒ ๋จ์ ์๋ ์ธ์ฉ๋ง ์ฑ์ ๊ธฐ์ค์ผ๋ก ์ฌ๋ฆฌ๊ณ , ๊ทธ ๊ธฐ์ค์ด ํต๊ณผ์ํฌ ๋๊น์ง๋ง ๊ฒฐ๊ณผ๋ฌผ์ ๊ณ ์น๋ค. ํต๊ณผ๋ฅผ ์ ์ธํ ์ ์๋ ๊ฒ์ ์์ด์ ํธ๊ฐ ์๋๋ผ ์คํฌ๋ฆฝํธ๋ค.
์ด ๋ฌธ์์์ ๊ณ์ ์ฐ๋ ๋ง ์ . Reach๋ ์น์์ ์๋ฌธ์ ๋์ด์ ์ค๋ ์ท์ผ๋ก ์ ์ฅํ๋ ์ถ์ด๋ค. Bench๋ ๊ทธ ์๋ฌธ ์ธ์ฉ๋ง์ผ๋ก ํฉ๊ฒฉ์ ์ ๋ง๋ค์ด ์ฑ์ ํ๋ ์ถ์ด๋ค. ์ต์ปค๋ ์ค๋ ์ท์ ํ ๊ธ์๋ ๋ค๋ฅด์ง ์๊ฒ ๋จ์ ์๋ ์ธ์ฉ ํ ๊ฑด์ด๋ค.
55์ด ์ผ์ผ์ด์ค ์ค ์ 11์ด. ์ ์ฒด ์์์ assets/assay-showcase.mp4 โ ํ๋ฉด์ ๋์ค๋ ๋ชจ๋ ๋ฌธ์์ด์ ์ด ๋ ํฌ์์ ๊ทธ๋๋ก ๊ฐ์ ธ์จ ๊ฒ์ด๊ณ ์ฐ์ถํ ์ถ๋ ฅ์ ์๋ค.
์ค๋ช
๋ณด๋ค ๊ฑฐ๋ถ๋นํ๋ ์ฅ๋ฉด์ด ๋น ๋ฅด๋ค. ์๋ ๋ค ๋ธ๋ก์ ์์ค 3๊ฑด์ง๋ฆฌ ๋ฐ์์ skill/scripts/๊ฐ ์ค์ ๋ก ๋ฑ์ ์ถ๋ ฅ์ด๋ค.
$ reach-gate.sh .assay/run1
Reach ๊ฒ์ดํธ ํต๊ณผ: usable=3, primary=2, active-confirmed-anchor=3
โ exit 0 โ ์ฌ์ฉ ๊ฐ๋ฅ ์์ค 3๊ฑด, ๊ทธ์ค 1์ฐจ ์ถ์ฒ 2๊ฑด, ํ์ ์ต์ปค 3๊ฑด
โ ์ต์ปค ํ๋์ excerpt๋ฅผ ์์ฝํฌ๋ก ๊ณ ์น๊ณ ๊ฐ์ ๋ช
๋ น์ ๋ค์ ์คํํ๋ค.
"Write terminal GIFs as code for integration testing and demoing your CLI tools."
โ "Write terminal GIFs as code โ for testing and demos."
$ reach-gate.sh .assay/run1
!! Reach ๊ณ์ฝ ์๋ฐ: anchors.jsonl:1: excerpt๊ฐ ์ค๋
์ท ์๋ฌธ์ ์์
โ exit 2 โ ์ค๋
์ท์ ์๋ ๋ฌธ์์ด์ด๋ค. ์์ฝ์ ์ต์ปค๊ฐ ์๋๋ค.
$ bench-log.sh .assay/run1 R1 A1 4,2,3 "A1๋ง ๊ฒจ๋ฅ"
[R1] min=2 sum=9/12 gate=FAIL verdict=REVERT (ํ๋ฝ: A2 โ ํ๋ ํ ์๋ฐ)
โ exit 1 โ ์ด์ ์ 9๋ก ์ ์ง๋์ผ๋(A1 3โ4, A3 ๋ถ๋ณ) A2๊ฐ 3์์ 2๋ก ๋ด๋ ค๊ฐ๋ค. ํ๋ ํ ์๋ฐ์ด๋ค.
$ bench-log.sh .assay/run1 R2 A2 4,3,3 "๋ค์ ๋ผ์ด๋"
!! ๋๋๋ฆฌ์ง ์์ R1 REVERT ๋ค์๋ bench-revert.sh๋ฅผ ๋จผ์ ์คํํด์ผ ํฉ๋๋ค.
โ exit 2 โ R1์ ์ค์ ๋ก ๋๋๋ฆฌ์ง ์์๋ค. ๋ค์ ๋ผ์ด๋๋ ๊ธฐ๋ก๋์ง ์๋๋ค.๋ ๋ฒ์งธ ๋ธ๋ก์์ ํ ์ผ์ ์ธ์ฉ ํ ๊ฑด์ ์์ฝํฌ๋ก ๋ค๋ฌ์ ๊ฒ๋ฟ์ธ๋ฐ ๊ฒ์ดํธ๋ ๊ทธ๊ฑธ ์ต์ปค๋ก ์ธ์ ํ์ง ์์๋ค. ์ธ ๋ฒ์งธ๋ ์ด์ ์ด ๊ทธ๋๋ก์ธ๋ฐ ์ถ ํ๋๊ฐ ๋ด๋ ค๊ฐ ๋ผ์ด๋์ด๊ณ , ๋ค ๋ฒ์งธ๋ ๊ทธ ๋๋๋ฆผ์ ๊ฑด๋๋ด ์ฑ ๋ค์ ๋ผ์ด๋๋ฅผ ๊ธฐ๋กํ๋ ค ํ ์๋๋ค. ๋ท ๋ค ์ฌ๋์ด ํ๋จํ ๊ฒ ์๋๋ค. ์คํฌ๋ฆฝํธ๊ฐ ์ข ๋ฃ์ฝ๋๋ก ๊ฑฐ๋ถํ๊ณ , ๊ทธ๊ฑธ ํต๊ณผ๋ก ๋ฐ๊พธ๋ ํ๋๊ทธ๋ ํ๊ฒฝ๋ณ์๋ ์ด ํธ๋ฆฌ ์ด๋์๋ ์๋ค.
๋ ํผ๋ฐ์ค๋ฅผ ๊ฐ์ํ์ง ๋ง๊ณ ์ฑ์ ๊ธฐ์ค์ผ๋ก ์น๊ฒฉ์์ผ๋ผ. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ธฐ์ค์ด ํต๊ณผ์ํฌ ๋๊น์ง๋ง ๊ณ ์ณ๋ผ.
์ผ๋ ์ํฉ. ์น ์์ค ์ฌ๋ฌ ๊ฑด์ ๋ชจ์์ผ ํ๊ณ ๋์ค์ ๊ทธ ์๋ฌธ์ ๋ค์ ์ด์ด ํ์ธํ ์ ์์ด์ผ ํ ๋. ๊ฒฐ๊ณผ๋ฌผ์ "์ค๋ช "์ด ์๋๋ผ ๋จ์ด ๊ฒ์ฆํ ์ ์๋ ๋ ํผ๋ฐ์ค ๋๋น๋ก ๊ฐ์ ํด์ผ ํ ๋. ํฉ๊ฒฉ์ ์ด ํ์ํ๋ฐ ์คํจํ ๋ค์ ๊ทธ ์ ์ ๋ฎ์ถ์ง ์์ ์์ ์ด ์ค์ค๋ก๋ ์์ ๋. ํธ๋ฆฌ๊ฑฐ ์์๋ "๋ ํผ๋ฐ์ค ๋๋น ์ฑ์ ", "๊ทผ๊ฑฐ๋ฅผ ๋ชจ์ ํ๊ฐํ๋ก", "๋ฒค์น๋งํนํด์ ํฉ๊ฒฉ์ ๊น์ง ๊ฐ์ ", "ํ์ง ๊ฒ์ดํธ"๋ค.
์ผ๋ฉด ์ ๋๋ ์ํฉ์ ์ด๋ ๋ค.
- ์ฌ์ค ํ๋ ํ์ธํ๋ฉด ๋๋๋ ์ง๋ฌธ.
WebSearchํ ๋ฒ์ด ๋ต์ด๋ฉด ๊ทธ๊ฑธ ์ด๋ค. - ์ด๋ฏธ ๋ฐ์ ์๋ฃ๋ก ๋ณด๊ณ ์ยท๋ฒ์ญยท์์ฝ์ ์ฐ๋ ์ผ. ์์ฝ์ ์ด ์คํฌ์ด ๊ทผ๊ฑฐ๋ก ์ธ์ ํ์ง ์๋ ํ์์ด๋ค.
- ๋ฐํ, ๋ก๊ทธ์ธ, ์ฟ ํค, API ํค๊ฐ ๊ฑธ๋ฆฐ ์์ . ํ์ง ์๋๋ค.
- ๊ทธ ํ๋ซํผ ์ ์ฉ ์คํฌ์ด ์ด๋ฏธ ๊น๋ ค ์๋ ๊ฒฝ์ฐ. ๊ทธ ์คํฌ์ ๋จผ์ ์ด๋ค.
๋ช ๋ น ๋ท, ๋ฒฝ์๊ณ๋ก 10์ด ๋จ์ง์ด๊ณ ๊ฐ์ ํ ์๋น์ค๋ ์๋ค.
ํ์ ์ฌํญ: bash 3.2 ์ด์, coreutils, python3 3.8 ์ด์(ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ์ฐ๋ฉฐ jqยทyq๋ฅผ ์๊ตฌํ์ง ์๋๋ค), git. ์ ํ์ gh, codex CLI, insane-search ์คํฌ์ด๊ณ , ์์ผ๋ฉด ์ ๊ทผ ์ฌ๋ค๋ฆฌ์ ๊ทธ ๋จ๋ง ๊ฑด๋๋ด๋ค.
git clone https://github.com/gongnyang/assay.git
cp -r assay/skill ~/.claude/skills/assay
bash ~/.claude/skills/assay/scripts/install-gate.sh ~/.claude/skills/assay์ค์น ๊ฒ์ดํธ ํต๊ณผ: /home/you/.claude/skills/assay (ํ๊ท 18์ผ์ด์ค)์ธ ๋ฒ์งธ ์ค์ด ๋ฐฐํฌ ์์ ๊ฒ์ดํธ๋ค. macOS ์์ถ ์์ฌ, ์คํ ๊ถํยทshebang ๊ฒฐ์ฌ, SKILL.md๊ฐ ์ ์ธํ๋๋ฐ ์ค๋ฌผ์ด ์๋ ํ์ผ, 130ํ ์ํ ์ด๊ณผ, ๊ทธ๋ฆฌ๊ณ ์ข
๋ฃ์ฝ๋์ README ๊ตฌ์กฐ ์ผ์น๋ฅผ ํจ๊ป ๊ฒ์ฌํ๋ ํ๊ท 18์ผ์ด์ค๋ฅผ ๋ณธ๋ค. exit 2๊ฐ ๋์จ ํธ๋ฆฌ๋ ์ค์นํ์ง ์๋๋ค.
bash ~/.claude/skills/assay/scripts/reach-doctor.sh[ok] github: gh-api โ probe ์ฑ๊ณต
L0 gh-api: ok โ probe ์ฑ๊ณต
L1 insane-search: missing โ insane-search ์์
L2 webfetch: ok โ probe ์ฑ๊ณต
L3 jina-reader: ok โ ์ฝ๊ธฐ probe ์ฑ๊ณต
L4 manual: warn โ ์ฌ๋ ์๋ ์
๋ ฅ ์ ์ฉcontracts/channels.yml์ ์ ์ธ๋ ์ฑ๋๋ง๋ค ํ ๋ธ๋ก์ฉ ๋์จ๋ค. ์ฝ๊ธฐ ์ ์ฉ probe์ด๋ฉฐ ์ง๋จ ๊ฒฝ๋ก๋ ์๋ฌด๊ฒ๋ ์ฐ์ง ์๋๋ค. missing์ ์คํจ๊ฐ ์๋๋ผ ๊ทธ ๋จ์ ๊ฑด๋๋ฐ๊ณ ๋ค์ ๋จ์ ์ด๋ค๋ ๋ป์ด๋ค.
cd /๊ฐ์ ํ /ํ๋ก์ ํธ/๊ฒฝ๋ก
cat > q.md <<'EOF'
์ง๋ฌธ: ์ด ๋ ํฌ๋ ์ฐ๋ฉ์ด๋ GitHub ๋ ํฌ ๋ฃจ๋ธ๋ฆญ์ ํต๊ณผํ๋๊ฐ?
์๋น์ฒ: ๊ณต๊ฐ ๋ฐํ ์ฌ๋ถ ๊ฒฐ์
EOF
bash ~/.claude/skills/assay/scripts/reach-init.sh .assay/run1 q.md 3 30R0 ๋ด์ธ ์๋ฃ: .assay/run1
์ง๋ฌธ ํด์์ ์์ง ํํ์ .assay/run1/reach.conf์ ๊ธฐ๋กํ๋ค.
๋ค์: reach-fanout.sh .assay/run1 <axes.tsv>๋ฐ ๋๋ ํฐ๋ฆฌ๋ ์์ด์ ํธ ์์ ๊ณต๊ฐ์ด ์๋๋ผ ๊ฐ์ ๋์ ํ๋ก์ ํธ ์์ ์๊ธด๋ค. ๊ฐ์ ๋ช ๋ น์ ๋ค์ ์คํํ๋ฉด exit 1๋ก ๊ฑฐ๋ถ๋๋ค. ์์ง์ด ์์๋ ๋ค์ ์ง๋ฌธ์ ๋ค์ ์ธ ์ ์๊ฒ ๋ง๋๋ ๊ฒ์ด ์ด ์คํฌ๋ฆฝํธ์ ์ ์ผํ ์กด์ฌ ์ด์ ๋ค.
์ฌ๊ธฐ๋ถํฐ๋ ์์ด์ ํธ๊ฐ ๋ชฌ๋ค. ๋จ๊ณ๋ณ ํ์ ์ฃผ์ฒด์ ์ ์ฒด ํธ๋ ์ด์ค๋ docs/how-it-works.md์ ์๋ค.
examples/์ ์ค์ ๋ฐ ํ๋๊ฐ ์๋์ง ์์ ์ฑ๋ก ๋ค์ด ์๋ค. 2026-07-29, ์ด์ ์๋ ๋คํธ์ํฌ์ ์ด์ ์๋ Codex ์์ปค๋ก ๋๋ฆฐ ๊ฒ์ด๋ค.
| ๋จ๊ณ | ์คํฌ๋ฆฝํธ | .assay/run1/์ ๋จ์ ๊ฒ |
|---|---|---|
| R0 | reach-init.sh |
reach.conf + reach.conf.seal โ ๋ด์ธ๋ ์์ง ํํ |
| R1 | reach-fanout.sh |
axes.tsv, briefs/AX-{1,2,3}.md โ ์ถ๋น ์์ง ๋ธ๋ฆฌํ ํ๋ |
| R2 | reach-fetch.sh ร3 |
sources/R-{A,B,C}.md ์ค๋
์ท, sources.jsonl, fetch-log.jsonl |
| R3 | reach-gate.sh |
anchors.jsonl, reach-gate.receipt โ Bench๋ก ๋ค์ด๊ฐ๋ ์ ์ผํ ๋ฌธ |
| S0 | bench-init.sh |
gate.conf + gate.conf.seal โ ์ฑ์ ์ด ์์๋๊ธฐ ์ ์ ๋ด์ธ๋ ํฉ๊ฒฉ์ |
| S2 | rubric-lint.sh |
๊ฒ์ฆ์ ํต๊ณผํ rubric.md |
| G2 | g2-spawn.sh |
g2/worker-1.csv, g2/receipt.json โ ์ถ์ฒ๊ฐ ๋ถ์ ๋
๋ฆฝ ์ฑ์ |
| S3 | bench-log.sh |
scores.tsv, ํด์ ์ฒด์ธ์ด ๊ฑธ๋ฆฐ rounds.jsonl, rounds/R0/ ์ค๋
์ท |
| G | verdict-gate.sh |
์ต์ข ํ์ |
sources.jsonl์ ์ด๋์ ์ธ์ ์ด๋ป๊ฒ ์ ๊ทผํ๊ณ ๋ฌด์์ ์ ์ฅํ๋์ง์ ์ ๋ ๊ธฐ๋ก์ด๋ค. ์ฑ๊ณตํ ๋ณธ๋ฌธ์ sources/<sid>.md ์ค๋
์ท๊ณผ SHA-256 ์์ด๋ ์์ค๋ก ์ธ์ ๋์ง ์๋๋ค. anchors.jsonl์ ๊ทธ์ค ์ค๋
์ท ๋์กฐ๋ฅผ ํต๊ณผํ ์ธ์ฉ๋ง ๋ด๋๋ค. Bench๋ ์ด ๋ ํ์ผ ๋ฐ์ ๊ฒ์ ์ฑ์ ์ฌ๋ฃ๋ก ์ฐ์ง ์๋๋ค.
๊ทธ ๋ฐ์ ๊ฒฐ๊ณผ๋ ์ด๋ ๊ฒ ๋จ์๋ค.
round axis A1 A2 A3 min sum gate verdict note
R0 - 4 1 1 1 6 PASS BASE ๋ฒ ์ด์ค๋ผ์ธ
G2 G2 3 0 0 0 3 PASS G2-ADOPTED ๋
๋ฆฝ ์ฑ์ ์ ๋ฎ์ ์ ์ ์ฑํ
๋ ๋ฒ์งธ ์ค์ด ์ด ์ค๊ณ์ ์ ๋ถ๋ค. ์๊ธฐ์ฑ์ ์ 4,1,1์ด์๋ค. ๋
๋ฆฝ Codex ์์ปค๋ 3,0,0์ ๋๋ ค์คฌ๋ค. ๋ฎ์ ์ชฝ์ด ์ด์ ์์ด ์ฑํ๋๊ณ , ๋ถ์ผ์น๋ ์ ์์๊ฒ ์ ๋ฆฌํ๊ฒ ํด์๋์ง ์๊ณ ๊ทธ๋๋ก ๊ธฐ๋ก๋๋ค. ๋จ๊ณ๋ณ ํด์ค์ examples/README.md์ ์๋ค.
๊ธฐ๊ณ๊ฐ ๊ฐ์ ํ๋ ๊ฒ
- ์ต์ปค์ excerpt๋ ์ ์ฅ๋ ์ค๋
์ท์ ๋ฆฌํฐ๋ด ๋ถ๋ถ๋ฌธ์์ด์ด์ด์ผ ํ๋ค.
reach-gate.sh๊ฐ ์ค๋ ์ท์ ๋ค์ ์ฝ์ด ๋์กฐํ๊ณ , ์ ๋์ฝ๋ ์ ๊ทํ๋ก๋ง ์ผ์นํ๋ excerpt๋ ๊ฒฝ๊ณ ๋ฅผ ์ฐ์ ๋ค ๊ทธ๋๋ก ์คํจํ๋ค. ์ ๊ทํ๋ ํจ๋ฌํ๋ ์ด์ฆ์ ์ฒซ ๋จ๊ณ๋ค. - ๋ด์ธ๋
gate.conf๋.seal์ฌ์ด๋์นด์ ํด์์ ์ด๊ธ๋๋ ์๊ฐ ๋ชจ๋ ์๋น์๊ฐ exit 2๋ก ๊ฑฐ๋ถํ๋ค. ์คํจํ ๋ค ํฉ๊ฒฉ์ ์ ๋ด๋ฆฌ๋ ๊ฒฝ๋ก๊ฐ ์๋ค. - ์ถ ํ๋๋ผ๋ ๋ด๋ ค๊ฐ ๋ผ์ด๋๋ REVERT์ด๊ณ ,
bench-revert.sh๊ฐ ํ์ผ์ ์ค์ ๋ก ๋ณต์ํ๊ณ ๋ณต์๋ ํธ๋ฆฌ์ ํด์๋ฅผ ๋จ๊ธฐ๊ธฐ ์ ๊น์ง ๋ค์ ๋ผ์ด๋๋ ๊ธฐ๋ก๋์ง ์๋๋ค. "๋ค์ ๋ผ์ด๋์์ ๊ณ ๋ คํ๊ฒ ๋ค"๋ ๋๋๋ฆผ์ด ์๋๋ค.
๊ธฐ๊ณ๊ฐ ๊ฐ์ ํ์ง ๋ชปํ๋ ๊ฒ
- sealยทreceiptยทํด์ ์ฒด์ธ์ ์ ๋ถ ๋ฌดํค SHA-256์ด๋ค. ๋ณ์กฐ๋ฅผ ๋๋ฌ๋ด์ง ๋ง์ง๋ ๋ชปํ๋ค โ
gate.conf์gate.conf.seal์ ํจ๊ป ๊ณ ์น๋ ์๋๋ ํต๊ณผํ๋ค. - G2 ๋
๋ฆฝ์ฑ์ ํธํฅ ์ถ์์ด์ง ์์ ๋
๋ฆฝ์ด ์๋๋ค. ์ฑ์ ์๋ ๊ฐ์ ์ด๋ ฅ์ด ์ ์ธ๋ ํ๋กฌํํธ๋ฅผ ๋ฐ์ ๋ณ๋
codexํ๋ก์ธ์ค๋ก ๋์ง๋ง, ์ค์ผ์คํธ๋ ์ดํฐ๋ ๊ฐ๋ค. - ๊ณ์ธก์ด ๋์์์ ์ฌ๋ ๊ฒ์ ๊ทธ ๊ณ์ธก์ด ์คํจ๋ก ๋ค์งํ์ง๋ฅผ ์ฌ๋ ๊ฒ์ด ์๋๋ค.
tests/smoke.sh์ ๋ง์ง๋ง ์คํ์pass=20 fail=0 SKIPPED=4 skipped_ratio=0.166667์ด๋ฉฐ, ๊ฑด๋๋ด 4๊ฑด์ ๋คํธ์ํฌ์ Codex ์์ปค๋ฅผ ์๊ตฌํ๋ ๋ผ์ด๋ธ ์ผ์ด์ค๋ค.
| ์ฝ๋ | ๋ป | ๋ฌด์์ ๊ณ ์น๋ |
|---|---|---|
0 |
๊ณ์ฝ์ด ์ง์ผ์ก๋ค | ๊ณ์ํ๋ค |
1 |
ํ์ ์คํจ โ ๊ฒฐ๊ณผ๋ฌผยท์ต์ปคยท์ถ์ด ์์ง ๋ถ์กฑํ๋ค | ์ฐ์ถ๋ฌผ์ ๊ณ ์น๊ณ ๋ค์ ๋๋ฆฐ๋ค. ํฉ๊ฒฉ์ ์ ๋ด๋ฆฌ์ง ์๋๋ค |
2 |
๊ณ์ฝ ์๋ฐ โ ๊ธฐ๋ก์ด๋ ์ฆ๊ฑฐ ์์ฒด๊ฐ ๋ฌดํจ์ด๊ณ ์๋ฌด๊ฒ๋ ์ฑํ๋์ง ์์๋ค | ์ ๋ ฅ์ ๊ณ ์น๊ณ ๊ฒ์ดํธ๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ๋๋ฆฐ๋ค |
3 |
ํ๊ฒฝ ๋ฏธ๋น โ ํ์ํ ๋๊ตฌ๊ฐ ์๋ค | reach-doctor.sh๋ก ์ง๋จํ๋ค. ํต๊ณผ๊ฐ ์๋๋ค |
64 |
์ฌ์ฉ๋ฒ ์ค๋ฅ | ๋ช ๋ น์ค์ ๊ณ ์น๋ค |
15๊ฐ ์ง์
์ ์ ๋ถ ๊ฐ์ ๊ฐ์ ์ฐ๊ณ , ์ด๋ ๊ฐ์๋ ์ง์ญ์ ์๋ฏธ๋ฅผ ๋ง์์ฐ์ง ์๋๋ค. 1๊ณผ 2์ ์ฐจ์ด๊ฐ ์ด ์ค๊ณ์ ๋๋ถ๋ถ์ด๋ค. ํ๋๋ "๋ค ๊ฒฐ๊ณผ๊ฐ ์์ง ๊ฑฐ๊ธฐ๊น์ง ์ ์๋ค"์ด๊ณ , ๋ค๋ฅธ ํ๋๋ "๋ฐฉ๊ธ ์ค ๊ฒ์ ๊ธฐ๋ก์ผ๋ก ์ ๋ขฐํ ์ ์๋ค"๋ค. ์คํฌ๋ฆฝํธ๋ณ ์ ์ฒด ํ๋ docs/gates.md์ ์๋ค.
| ๋ฌธ์ | ์ธ์ ์ฌ๋๊ฐ |
|---|---|
| examples/README.md | ์ฝ๊ธฐ๋ณด๋ค ๋์๊ฐ๋ ๊ฑธ ๋ณด๊ณ ์ถ์ ๋. ๊ธฐ๋ก๋ ๋ฐ์ ๋จ๊ณ๋ณ ํด์ค |
| docs/how-it-works.md | ์ค์ํ ๋์์ ์ด ์คํฌ์ ๊ฑธ๊ธฐ ์ ์. 1๋ฐ ์ ์ฒด ํธ๋ ์ด์ค์ ํ์ ์ฃผ์ฒด ๊ตฌ๋ถ (์์ด) |
| docs/gates.md | ๊ฑฐ๋ถ๋นํ์ ๋. ์คํฌ๋ฆฝํธ 15๋ณธ์ด ๊ฐ๊ฐ ๋ฌด์์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฑฐ๋ถํ๋์ง์ ํ (์์ด) |
| docs/design-decisions.md | ์งํ ๊ธฐ์ ์ ์๋๊ธฐ ์ ์. ๋ด์ธยท์์์ฆยทํด์ ์ฒด์ธ์ ๊ฐ์ ํ ์ ๋๊ฐ์ฌ ๊ฒฐํจ (์์ด) |
| docs/genealogy.md | ์ด ๋ ํฌ๊ฐ ์ด๋ค ์ฃผ์ฅ์ ์ค์ค๋ก ๊ทผ๊ฑฐ๋ก ์ฐ์ง ์๋์ง ๋ณผ ๋ (์์ด) |
๋ฃจํ ๊ท์จ์ karpathy/autoresearch์์ ์์ํ๋ค. ์ธก์ ํ๊ณ , ๋๋น ์ง๋ฉด ๋๋๋ฆฌ๊ณ , ์ ๋ ๋ก๊น
ํ๊ณ , ๋์ ์ด๋ฉด ๋จ์ํ ์ชฝ์ด ์ด๊ธด๋ค. ๋ ๋ฒ์งธ ๋ถ๋ชจ๋ก ์ง๋ชฉ๋๋ ์คํฌ์ ๊ฒ์ฆ์ ํต๊ณผํ์ง ๋ชปํด ์ธ์ฉ์ ์ ๋ ์ญ์ ํ๊ณ , install-gate.sh๊ฐ ๊ทธ ๋ฌธ์์ด์ ์ฌ์ ์
์ exit 2๋ก ๋ง๋๋ค.
assay/
โโโ skill/ ์ค์น๋๋ ์คํฌ ๋ณธ์ฒด
โ โโโ SKILL.md ์ ์ธ์ธต. ํธ๋ฆฌ๊ฑฐ ๋๋ง๋ค ์์ฃผ ๋ก๋(130ํ ์ํ)
โ โโโ references/ ์จ๋๋งจ๋ ๋ฌธ์ 6๋ณธ(ํ๊ตญ์ด ์ด์ฉ ๋งค๋ด์ผ)
โ โโโ scripts/ ์งํ์ธต 15๋ณธ + _common.sh
โ โโโ contracts/ channels.yml, JSON ์คํค๋ง 2๋ณธ, ํํ 2๋ณธ
โโโ docs/ ์ด ๋ ํฌ ์์ฒด์ ๋ฌธ์(์๋ฌธ)
โโโ examples/ ๊ธฐ๋ก๋ ๋ฐ ํ๋
โโโ tests/ smoke.sh โ ์ข
๋ฃ์ฝ๋ ํ๊ท ์ค์ํธ
โโโ README.md README.en.md
๋ฐ์ ์คํฌ ๋๋ ํฐ๋ฆฌ์๋ ์์ด์ ํธ ์์
๊ณต๊ฐ์๋ ์ฐ์ง ์๋๋ค. ๊ฐ์ ๋์ ํ๋ก์ ํธ ์์ .assay/<run>/์ ๋ด์ธ ํ์ผ, sources/ ์ค๋
์ท, ๊ณ์ฝ JSONL 2์ข
, rubric.md, scores.tsv, rounds.jsonl, metrics/, g2/, counterexample.md๋ฅผ ๋จ๊ธด๋ค.
์์ฃผ ๋ก๋๋๋ ๊ฒ์ skill/SKILL.md ํ๋(110ํ)๋ฟ์ด๊ณ , ๋ฌด๊ฑฐ์ด ์์ ์ ์ ๋ถ ์จ๋๋งจ๋๋ค.
reach-protocol.mdโ ์ง๋ฌธ ๊ณ ์ ยท์ถ ๋ถํ ยท์์งยท์ฌ๊ฒ์ฆaccess-ladder.mdโ ์ ๊ทผ์ด ๋งํ๊ฑฐ๋ ์ธ์ฆ์ด ์๊ตฌ๋๊ฑฐ๋ ํ๊ฒฝ์ ์ง๋จํ ๋rubric-design.mdโ ์ถ ์ ๋ยท0~4 ์ต์ปค ์์ฑยทํ์ ์ ๊ฒฐ์ loop-protocol.mdโ ๋ผ์ด๋ ์ด์ยทํ๋ ํ ๋น๊ตยท๋๋๋ฆผยท์ ์ฒด ์ง๋จcontracts.mdโ JSONLยทTSV ์์ฑ๊ณผ ๊ฒํ , exit code ๊ณ์ฝ ํ์ธinstruments.mdโ ์ ๋์ ์ ํ์ ๊ณ์ธก๊ธฐ๋ฅผ ์๋ก ์ธ ๋
๊ณ์ฝ ๋ฐ์ดํฐ ์ค ๋์ ํ์ฑ ๋์์ด๋ฉด์ ์ฌ๋์ด ์ง์ ์ฝ๋ ๋ฌธ์๋ค. rubric.template.md๋ rubric-lint.sh๊ฐ ๋์กฐํ๋ ๋ฃจ๋ธ๋ฆญ ํํ์ด๊ณ , g2-prompt.md๋ ๋
๋ฆฝ ์ฑ์ ์๊ฐ ๋ฐ๋ ํ๋กฌํํธ ์ ๋ณธ์ด๋ค. skill/ ์๋๋ ์ ๋ถ ํ๊ตญ์ด๋ค. ์คํฌ์ด ํ๊ตญ์ด๋ก ์ด์ฉ๋๊ณ ๊ทธ๊ฒ์ด ๋ค๋ฃจ๋ excerpt๋ ๋ฒ์ญ๋์ด์๋ ์ ๋๋ฏ๋ก, ์ด์ค์ธ์ด ์ ์ง๋น๋ ์ด ๋ ํฌ์ ๊ณต๊ฐ ๋ฌธ์ ํ ๊ณ์ธต์์๋ง ์ง๋ถํ๋ค.
- CLI ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋๋ค. ์์ด์ ํธ๊ฐ ๋ชจ๋ Claude Code ์คํฌ์ด๊ณ ๊ตฌ์ฑ์ bash ์คํฌ๋ฆฝํธยท๋ฌธ์ยท๊ณ์ฝ ๋ฐ์ดํฐ๋ค. ๋ฐ๋ชฌ๋ ๋ฐ์ด๋๋ฆฌ๋ ํจํค์ง ๋ฐฐํฌ๋ ์๋ค.
- ์ฑ๋๋ณ ์คํฌ๋ ์ดํผ๋ฅผ ๋๋ดํ์ง ์๋๋ค.
channels.yml์ ๋ผ์ฐํ ์ ์ธ ๋ฐ์ดํฐ์ผ ๋ฟ ์คํ ์ฝ๋๊ฐ ์๋๋ฉฐ, ์ฌ์ดํธ ์์๊ฐscripts/๋ก ์๋ฉดinstall-gate.sh๊ฐ ํธ๋ฆฌ๋ฅผ ๊ฑฐ๋ถํ๋ค. ์ค์ ๋ก ๋ซ๋ ์ผ์ ์์ํ๋ค. - ์๊ฒฉ์ฆ๋ช
์ ์ทจ๋ํ๊ฑฐ๋ ์ ์ฅํ์ง ์๋๋ค.
auth_required์not_found๋ ์ฌ์๋ ๋์์ด ์๋๋ผ terminal ์ํ์ด๋ฉฐ, L4๋ก ๋ด๋ ค๊ฐ ์ฌ๋์ด ์๋ฌธ์ ๋ถ์ฌ๋ฃ๊ณ ์ถ์ฒ๋ฅผ ๋ช ๊ธฐํ๋ค. - ๋ณด๊ณ ์๋ฅผ ๋์ ์ฐ์ง ์๋๋ค. ์ฐ์ถ๋ฌผ์ ๊ทผ๊ฑฐ๊ฐ ๋ถ์ ํ์ ๊ณผ ์ฌํ ๊ฐ๋ฅํ ๊ณ์ฝ ํ์ผ์ด๋ค. ์คํฌ ๋ฌธ์์ ์ด์ค์ธ์ดํ๋ ๋ช ์์ ๋น๋ชฉํ๋ค.
- ๋ฃจ๋ธ๋ฆญ์ ์ฐ์ถ๋ฌผ์ ์ฌ์ง ์ฐฉ์์ ์ฌ์ง ์๋๋ค. ์ ์ถ 4์ ์ ๋ฐ๊ณ ๋ ์๋ฌด๋ ์ฐ์ง ์์ ์ํํธ์จ์ด์ผ ์ ์๋ค. ์ ์ฉ์ฑ์ ๋ฃจํ๊ฐ ์๋๋ผ ๋ฃจํ ์ด์ ์ ๊ฒฐ์ ๋๋ค.
| ํ์ํ ๊ฒ | ๊ฐ ๊ณณ |
|---|---|
| ํธ์ํฐยท๋ ๋งยท์ ํ๋ธยท๋น๋ฆฌ๋น๋ฆฌยท์ค์คํ์ ๋ฑ ์ฐจ๋จ๋ ํ๋ซํผ์์ ์ค์ ๋ก ๋ณธ๋ฌธ์ ๊ฐ์ ธ์ค๊ธฐ | Panniantong/Agent-Reach โ API ๋น์ฉ ์์ด ์ฑ๋ ์ ๊ทผ์ ๋ด๋นํ๋ CLI |
| ์๊ฐํ URL ํ ๊ฑด์ ๋ํ WAF ์ฐํยทTLS ์ํผ์๋ค์ด์ ยท์ค์ ํฌ๋กฌ ํด๋ฐฑ | fivetaku/gptaku_plugins์ insane-search ์คํฌ โ assay๊ฐ L1 ๋จ์์ ์์ํ๋ ๋์ |
~/.claude/skills/์ SKILL.md front matter์ ๊ณต์ ๊ท๊ฒฉ |
Claude Code skills ๋ฌธ์ |
๋ฒ๊ทธ ๋ณด๊ณ ์ ์ฌํ ์ ์ฐจ๋ ํ์ํ๋ค. ๊ธฐ๋ฅ ์ถ๊ฐ๋ ์ข๊ฒ ๋ฐ๋๋ค. ์ด ๋ ํฌ์ ์ํ์ ๊ฒ์ดํธ์ด๋ฏ๋ก ์ฐํ ํ๋๊ทธยทํ๊ฒฝ๋ณ์ ๋ท๋ฌธยท๊ฒ์ฆ ์๋ต ๋ชจ๋๋ฅผ ์ถ๊ฐํ๋ PR์ ๊ทธ๊ฒ์ด ์๋ฌด๋ฆฌ ํธ๋ฆฌํด๋ ๋ซ๋๋ค. ์งํ์ ๋ฐ๊พธ๋ ๋ณ๊ฒฝ์๋ ๋ณ๊ฒฝ ์ ์ ์คํจํ๊ณ ๋ณ๊ฒฝ ํ์ ํต๊ณผํ๋ ํ๊ท ํฝ์ค์ฒ๊ฐ ํจ๊ป ์์ผ ํ๋ค. ์ ๋ฌธ์ CONTRIBUTING.md, ์ฐํ ๊ฒฝ๋ก๋ฅผ ๋ฐ๊ฒฌํ์ ๋ ์ด์ ๋์ ์ทจํ ์ ์ฐจ๋ SECURITY.md, ๋ฆด๋ฆฌ์ค ์ด๋ ฅ์ CHANGELOG.md์ ์๋ค.
MIT โ LICENSE.