| name | searchflow |
| description | Use when a research question needs sourced, cross-checked findings โ fact-checks, market/company/tech/policy research, comparisons, or open exploration. Routes the question to a research type, spawns per-frame investigators, grades sources, and re-investigates the weakest axis until a deadline or round cap. Replaces /deep-research. |
SearchFlow
์์ค ๋ฑ๊ธ ๊ฐ์ค ์ ์ + ์๋ ๋ฌธํฑ ๊ฒ์ดํธ๋ก ๊น์ด๋ฅผ ์ฌํ ๊ฒฐ์ ํ๋ ๋ฆฌ์์น ๊ณต์ .
๊น์ด๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฏธ๋ฆฌ ๋ฌป์ง ์๋๋ค. ์ฌ์ด ์ง์๋ 1๋ผ์ด๋์์ ๋ฌธํฑ์ ๋์ด ์ฆ์ ๋๋๊ณ , ์ด๋ ค์ด ์ง์๋ง ์ฌ์กฐ์ฌ๋ฅผ ๋๋ค โ ํ๊ท ์ ๋ด๋ ค๊ฐ๊ณ ํํ์ ์ฌ๋ผ๊ฐ๋ค.
0. ๋ ์ธต
- core (๊ธฐ๋ณธ): ์์ Claude Code ๋๋ ์์ Codex CLI + ์ด ์คํฌ ๋ฒ๋ค๋ง์ผ๋ก ์์ฃผํ๋ค. ์ธ๋ถ ํจํค์ง ยท ๋ด๋ถ MCP ยท ํน์ ํ๋ฌ๊ทธ์ธ requirement 0.
- enhanced (์ ํ): ํ๊ฒฝ์ ์์ผ๋ฉด ์น๋๋ค. ์์ผ๋ฉด ์๋ฌ ์์ด core ๋ก ๊ฐ๋ฑํ๊ณ ๊ฒฉํ ๋ผ๋ฒจ์ ๋ณด๊ณ ์์ ๋จ๊ธด๋ค โ ์กฐ์ฉํ skip ๊ธ์ง.
scripts/env-detect.mjs ๋ฅผ ์์ ์ 1ํ ์คํํด ์ฐธ๊ณ ๊ฐ์ ์ป๋๋ค(์ธ์ ์์ด ํธ์ถ = exit 0 ๊ณ ์ , stdout 1์ค JSON). ํ์ง ๊ฒฐ๊ณผ๋ ๋ฆฌ๋๋ง ์๋นํ๋ค.
โ ๏ธ multi_agent_api ๊ฐ์ ์ฐธ๊ณ ๋ค. multi-agent ๊ฒฝ๋ก์ ์ต์ข
ํ์ ์ ๋ฆฌ๋๊ฐ ์๊ธฐ tool ๋ชฉ๋ก์ ๋ณด๊ณ ํ๋ค โ shell ์คํฌ๋ฆฝํธ๊ฐ ๋ชจ๋ธ์ tool ๋
ธ์ถ์ ๋์ ํ์ ํ๋ฉด ํ๋ฆฐ๋ค.
0-1. ๊ณต์ ์์ ๊ถ โ ์คํฌ์ด ์ฅ๋, ์๋ฒ๊ฐ ์ฅ๋
์ ๋ ์ธต๊ณผ ์ง๊ตํ๋ ์ถ์ด๋ค(core/enhanced = ์ด๋ค ๋๊ตฌ๋ฅผ ์น๋ ยท ์๋ = ๋๊ฐ ๊ณต์ ์ ๊ฐ์ ํ๋).
| ๋ชจ๋ | ์กฐ๊ฑด | ์ฑ์ ๊ธฐ์ค์ด ์ฌ๋ ๊ณณ | ํ์ |
|---|
| skill-owned (๊ธฐ๋ณธ) | searchflow_* ๋๊ตฌ๊ฐ tool surface ์ ์๋ค | references/scoring.md โ ๋ฆฌ๋๊ฐ ์ฝ๊ณ ๋ฆฌ๋๊ฐ ์ฑ์ | ๋ฆฌ๋ |
| server-owned | searchflow_startยทsearchflow_submitยทsearchflow_gate ๊ฐ tool surface ์ ์๋ค | MCP ์๋ฒ ๋ด๋ถ(ํ์ผ๋ก ์กด์ฌํ์ง ์์) | ์๋ฒ |
- ํ์ ์ฃผ์ฒด = ๋ฆฌ๋๊ฐ ์๊ธฐ tool ๋ชฉ๋ก์ ๋ณด๊ณ ํ๋ค. ์
multi_agent_api ์ฃผ์์ ๊ฐ์ ์ด์ ๋ก shell ์ด ๋์ ํ์ ํ์ง ์๋๋ค. ์๋ฒ๊ฐ ์ ๋ ์์ผ๋ฉด ๋๊ตฌ๊ฐ ์ ์ด์ ์ ๋ณด์ด๋ฏ๋ก ํ์ง ์คํจ = skill-owned ๋ก fail-open(์๋ฌ โ).
- server-owned ๋ฉด ๋ฆฌ๋๋
scoring.md ๋ฅผ ์ด์ง ์๋๋ค. ํ๋ ์ยท๋ธ๋ฆฌํยทํ์ ์ ์ ๋ถ ์๋ฒ์์ ๋ฐ๊ณ , ์๋ฒ๊ฐ ์ค worker_brief ๋ฅผ ๊ทธ๋๋ก ์์ปค์๊ฒ ๋๊ธด๋ค(๋ฌธ์ฅ์ ๋๋ฆฌ์ง ์๋๋ค โ ยงP2.5 ์ ๊ฐ์ ์ด์ ).
- ์ด๋ ์ชฝ์ด๋ ๋ณด๊ณ ์์ ๋ชจ๋๋ฅผ ์ ๋๋ค:
process_owner: skill | server. ์กฐ์ฉํ ์ ํ ๊ธ์ง โ ๊ฐ์ ์ง์๊ฐ ๋ค๋ฅธ ๊น์ด๋ก ๋๋ฌ์ ๋ ์์ธ์ด ๋ชจ๋์๋์ง ์ ์ ์์ด์ผ ํ๋ค.
โ ๏ธ ์ด ํ๋ 2026-08-02 ์ ์ค์ด๋ค. ๊ทธ์ ๊น์ง ์๋ฒ๋ ์กด์ฌํ์ง๋ง ์คํฌ์ด ๊ทธ ์กด์ฌ๋ฅผ ๋ชฐ๋๋ค โ ์ฆ ใ2๋ชจ๋ใ๊ฐ ์ค๊ณ ๋ฌธ์์๋ง ์๊ณ ์คํ ๊ฒฝ๋ก์ ์์๋ค. ๋ ๋ชจ๋๋ฅผ ๋น๊ตํ๋ ค๋ฉด ๋จผ์ ๋ชจ๋๊ฐ ์์ด์ผ ํ๋ค.
1. ๊ณต์ (P0 โ P4)
P0 ์ค์ฝํ โโ ์ ํ ํ์ โ ํ๋ ์ ํ์ โ ๊น์ด ๋ผ์ฐํ
โ ๋ฌถ์ ์ง๋ฌธ 1ํ(๋ง๊ฐ ์ํ ํฌํจ) โ ๊ถํ preflight
P1 ์คํฐ โโ ํ๋ ์ ์ถ๋ง๋ค ์กฐ์ฌ ๋จ์ 1๊ฐ (ํ๋ค์ค๋ณ ๋ถ๊ธฐ ยง3)
P2 ์์ง โโ ์์ปค: ๊ทผ๊ฑฐ + SELF-REPORT(Y/N + ๊ทผ๊ฑฐ 1์ค)๋ง ๋ฐํ. ๋ฑ๊ธ ๋ถ์ฌ โ
P3 ์ฑ์ โโ ๋ฆฌ๋: ์์ค ๋ฑ๊ธ ๋ถ์ฌ โ ์์ฅ ๊ธฐ๋ก โ ์ถ๋ณ ์ฑ์ โ ๋ฌธํฑ ๋์กฐ โ ๋ฆฌ๋ ์ ์ฉ
P4 ๊ฒ์ดํธ โโ ๋ฌธํฑ ํต๊ณผ โ ์ข
๋ฃ / ๋ฏธ๋ฌ โ ์ต์ ์ถ๋ง ์ฌ์กฐ์ฌ(P1 ๋ก) โ ์ต๋ 2๋ผ์ด๋
P0 โ ์ค์ฝํ
- ์ ํ ํ์ โ
references/frames.md ยง1 ํ์ ํ. ๋ณตํฉ ํ์ฉ, ์คํจ ์ discovery ํด๋ฐฑ.
- ํ๋ ์ ํ์ โ ๊ฐ์ ํ์ผ ยง2 ํ์์ ์ถ ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๊ณ , ๋ณตํฉ์ด๋ฉด ยง1 ๊ฒฐํฉ ๊ท์น์ผ๋ก ์ ๋๋ค. ์ถ id =
f1โฆfN.
- ๊น์ด ์๋ ๋ผ์ฐํ
โ ์๋ ยง2 ํ. ์ฌ์ฉ์์๊ฒ ๊น์ด๋ฅผ ๊ณ ๋ฅด๊ฒ ํ์ง ์๋๋ค.
- ๋ฌถ์ ์ง๋ฌธ 1ํ โ ยง4.
- ๊ถํ preflight โ ยง5.
- run_id ๋ฐ๊ธ โ
sf-<YYYYMMDDTHHMMSSZ>-<4hex>, ์ดํ ๋ชจ๋ ์์ฅ ๋ผ์ธยทrelay envelope ์ ๋์ผ ๊ฐ.
P1 โ ์ทจ๋ (์ฌ๋ค๋ฆฌ + ์ฐจ๋จ ๊ฒ์ดํธ)
references/acquisition.md ์ ์ฌ๋ค๋ฆฌ๋ฅผ ์์์๋ถํฐ, ๊ฐ์ ๋จ ์์์๋ ์ต์ ๋ฐํ๋ถ๋ถํฐ(ยง1). ์ทจ๋ ์๋ ์ ์ ์ฐจ๋จ ์ฌ๋ถ๋ฅผ ๊ธฐ๊ณ๋ก ํ์ ํ๋ค:
node scripts/robots-gate.mjs <๋์ URL> [...]
- ํ์ ์ ์ ์ฉ ๊ฐ๋ฅํ User-agent ๊ทธ๋ฃน ์ค ๊ฐ์ฅ ์ํ ๊ฒ์ด๋ค.
* ๋ง ๋ณด๋ฉด ์ ๋๋ค โ ๋ฐํ์ฒ๊ฐ * ๋ ์ด์ด๋๊ณ AI ์์ง ๊ณ์ด ์ด๋ฆ์๋ง ์ ๋ฉด ๋ถํ๋ฅผ ๊ฑฐ๋ ๊ฒฝ์ฐ๊ฐ ์ค์ฌํ๋ค(fixtures/blocked-observed.md ์ค์ธก). --ua-only "*" ๋ก ์ํ ๊ฐ๋ฅํ์ง๋ง ๊ธฐ๋ณธ๊ฐ์ ๋ฐ๊พธ์ง ๋ง ๊ฒ.
tos_notice ๊ฐ ๋ถ์ผ๋ฉด robots.txt ์ฃผ์์ ์ด์ฉ ์ ํ ๋ฌธ๊ตฌ๊ฐ ์๋ค๋ ๋ป์ด๋ค. ๊ธฐ๊ณ ํ์ ๋ฐ์ด๋ฏ๋ก ๋ฆฌ๋๊ฐ ์๋ฌธ์ ์ฝ๊ณ ํ๋จํ๋ค โ "ํ์ฑ ๋ชป ํ์ผ๋ ์์"์ผ๋ก ๋๊ธฐ๋ฉด ํ๋ ๊ฒ์ดํธ์ ToS ์ถ์ด ์กฐ์ฉํ ์ฌ๋ผ์ง๋ค.
- ๋ก๊ทธ์ธ ยท ํ์ด์ ยท CAPTCHA ๋ ์ด ์คํฌ๋ฆฝํธ๋ก ํ์ ๋ถ๊ฐํ๋ค. ์ทจ๋ ์๋ ์ค ๊ด์ธกํด ๊ฐ์ ํ์์ผ๋ก ์์ฅ์ ์ ๋๋ค.
P2 โ ์์ปค ๊ณ์ฝ (์๋์ ์ค์ฒด)
์์ปค์๊ฒ ์ฃผ๋ ๊ฒ: ๋ด๋น ์ถ 1๊ฐ ยท ์ง์ ยท ์ทจ๋ ์ฌ๋ค๋ฆฌ(references/acquisition.md) ยท ๋ฐํ ํ์.
์์ปค์๊ฒ ์ฃผ์ง ์๋ ๊ฒ: ๋ฑ๊ธ ์ ์ ยท ์ถ ๊ฐ์ค์น ยท ํฉ๊ฒฉ ๋ฌธํฑ ยท ๋ค๋ฅธ ์ถ์ ์ฐ์ถ.
์์ปค ๋ฐํ:
{ "frame_id": "f3", "findings": [ { "url": "...", "claim": "...", "verbatim": "...", "accessed_at": "..." } ],
"self_report": { "S1": {"y": true, "why": "..."}, "S2": {...}, "S3": {...}, "S4": {...}, "S5": {...
grade ํ๋๋ ์์ปค ์ฐ์ถ์ ์๋ค. ๋ฑ๊ธ์ ๋ฆฌ๋๊ฐ ๋ถ์ฌํ๋ค.
์ฌ์กฐ์ฌ ์ง์๋ฌธ์ "์ด ์ถ์ด ์ฝํ๋ค"๊น์ง๋ง ์ด๋ค โ ์ ์ยท๋ฌธํฑยท๋ชฉํ์น๋ฅผ ์ ์ง ์๋๋ค. ๋ฌธํฑ์ ์๋ ์กฐ์ฌ์๋ ๋ฌธํฑ์ ํฅํด ์ต์ ํํ๋ค(์๋ณธ์ ์ฐพ๋ ๊ฒ๋ณด๋ค ์๋ณธ์ด๋ผ๊ณ ์ฃผ์ฅํ๋ ๊ฒ ์ธ๋ค).
P2.5 โ ์์ปค ํ๋กฌํํธ ์กฐ๋ฆฝ (์๋์ ๊ตฌํ = ํ์ผ ๊ฒฝ๊ณ)
์กฐ๋ฆฝ ์
๋ ฅ์ ๋ค์ 3๊ฐ๋ฟ์ด๋ค. references/scoring.md ๋ ์
๋ ฅ ๋ชฉ๋ก์ ์๋ค โ ๊ทธ ํ์ผ์ ์ด์ง ์๋ ๊ฒ์ด ์๋์ ์ ๋ถ์ด๊ณ , ์ ๊ทผ ํต์ ๋ ์ฃผ์๋ ฅ์ ์์กดํ์ง ์๋๋ค.
| ์กฐ๋ฆฝ ์
๋ ฅ | ๋ฌด์ |
|---|
| ์ฌ์ฉ์ ์ง์ + P0 ๋ต๋ณ | ์กฐ์ฌ ๋์ยท๋ง๊ฐ |
references/frames.md | ๋ด๋น ์ถ 1๊ฐ์ ์ ์ |
references/acquisition.md | ์ทจ๋ ์ฌ๋ค๋ฆฌยทํ๋ ๊ฒ์ดํธ |
์๋ ํ
ํ๋ฆฟ์ ๊ทธ๋๋ก ์ฑ์ ์ด๋ค. {} ๋ง ์นํํ๊ณ ๋ฌธ์ฅ์ ๋๋ฆฌ์ง ์๋๋ค โ ๋์ด๋ ๋ฌธ์ฅ์ด ์์น๋ฅผ ์ค์ด ๋๋ฅธ๋ค.
์ง์: {์ง์}
๋ด๋น ์ถ: {frame_id} โ {์ถ ์ด๋ฆ}: {frames.md ์ ์ถ ์ ์ 1์ค}
๋น์ ์ ์ด ์ถ๋ง ์กฐ์ฌํ๋ค. ๋ค๋ฅธ ์ถ์ ๋ค๋ฅธ ์กฐ์ฌ์๊ฐ ๋งก๊ณ ์๊ณ , ๊ทธ์ชฝ ์ฐ์ถ์ ๋ณด์ง ์๋๋ค.
์ทจ๋: references/acquisition.md ์ ์ฌ๋ค๋ฆฌ๋ฅผ ์์์๋ถํฐ ์๋ํ๋ค.
ํ์ ์์: ์ต์ ๋ฐํ๋ถ๋ถํฐ ์ฐ๋ค. ์ค๋๋ ์๋ฃ๋ ๊ทผ๊ฑฐ๊ฐ ๋์ง๋ง, ๋ ์ต์ ์ ์ ์ ยทํ์์ ํ์ธํ๊ธฐ ์ ๊น์ง
๊ฒฐ๋ก ์ผ๋ก ๊ตณํ์ง ์๊ณ ํ์ธ ์ฌ๋ถ๋ฅผ findings ์ claim ์ 1์ค ์ ๋๋ค.
robots.txtยทToSยทํ์ด์ยทCAPTCHA ๋ ์ฐํํ์ง ์๋๋ค โ ๋ฏธ๋๋ฌ๋ก ๊ธฐ๋กํ๋ค.
2์ฐจ ์๋ฃ๋ฅผ ๊ทผ๊ฑฐ๋ก ์ธ ๋๋ ์๋ณธ ๋งํฌ ์ถ์ ์ 1ํ ์๋ํ๊ณ , ์คํจํ๋ฉด "์๋ณธ ๋ฏธ๋๋ฌ"์ด๋ผ ์ ๋๋ค.
๋ฐํ(JSON):
{
"frame_id": "{frame_id}",
"findings": [ { "url": "", "claim": "", "verbatim": "", "accessed_at": "" } ],
"self_report": {
"S1": {"y": true|false, "why": "๊ทผ๊ฑฐ 1์ค"},
"S2": {"y": true|false, "why": "๊ทผ๊ฑฐ 1์ค"},
"S3": {"y": true|false, "why": "๊ทผ๊ฑฐ 1์ค"},
"S4": {"y": true|false, "why": "๊ทผ๊ฑฐ 1์ค"},
"S5": {"y": true|false, "why": "๊ทผ๊ฑฐ 1์ค"}
}
}
S1 ๊ทผ๊ฑฐ๊ฐ๋ / S2 ๊ต์ฐจ๊ฒ์ฆ / S3 ๋ฐ์ฆํ์ / S4 ์ ์ ๋ / S5 ๊ณต๋ฐฑ์ ์ธ โ ๊ฐ Y/N + ๊ทผ๊ฑฐ 1์ค.
findings ์ ๋ฑ๊ธ ์นธ์ ์๋ค. ๋ฑ๊ธ์ ๋น์ ์ด ๋งค๊ธฐ์ง ์๋๋ค.
์์ฅ ํ์ผ์ ์ง์ ์ฐ์ง ์๋๋ค โ ์ฐ์ถ์ ๋ฐํํ๋ฉด ๋ณํฉ์ ๋ฆฌ๋๊ฐ ํ๋ค.
๋ง๊ฐ: {๋ง๊ฐ ์๊ฐ}. ๋๋ฌํ๋ฉด ๊ทธ ์์ ์ฐ์ถ์ ๊ทธ๋๋ก ๋ฐํํ๋ค(๋ฏธ์๋ ๋ฐํ).
์ฌ์กฐ์ฌ ๋ผ์ด๋ ์ถ๊ฐ๋ฌธ (์ด๊ฒ ์ธ์ ๋ฌธ์ฅ์ ๋ถ์ด์ง ์๋๋ค):
์ฌ์กฐ์ฌ: {์ถ ์ด๋ฆ} ์ด ์ฝํ๋ค. {์ฝํ ์ด์ ๋ฅผ ๊ด์ธก ์ฌ์ค๋ก๋ง 1์ค โ ์: "๋
๋ฆฝ ๊ฒฝ๋ก๊ฐ ํ๋๋ฟ์ด๋ค" / "๋ฐ๋ ์ฆ๊ฑฐ๋ฅผ ์ฐพ์ง ๋ชปํ๋ค"}
{ํ ๋ฌธ์ฅ ์ง์ โ ์: "๋
๋ฆฝ ๊ฒฝ๋ก๋ฅผ ํ๋ ๋ ์ฐพ์๋ผ" / "๋ฐ๋ ์ฆ๊ฑฐ๋ฅผ ์ฐพ์๋ผ"}
์กฐ๋ฆฝ ํ ๊ฒ์ฌ:
node scripts/hide-check.mjs <์กฐ๋ฆฝ๋ ํ๋กฌํํธ ํ์ผ>...
โ ๏ธ ๊ฒ์ฌ ๋์์ ์กฐ๋ฆฝ ๊ฒฐ๊ณผ๋ฌผ์ด๋ค. ์ด SKILL.md ๋ scoring.md ๋ฅผ ๋์์ผ๋ก ๋๊ธฐ๋ฉด ๋น์ฐํ ๊ฑธ๋ฆฐ๋ค โ ๊ทธ๊ฑด ๋ฆฌ๋ ์ ์ฉ ์ธต์ด๋ผ ๊ฑธ๋ฆฌ๋ ๊ฒ์ด ์ ์์ด๋ค.
exit 1 ์ด ๋๋ฉด ํ๋กฌํํธ๋ฅผ ์๋ฆฌํ ๋ค ์คํฐํ๋ค. ํจํด์ ์ขํ์ ํต๊ณผ์ํค์ง ์๋๋ค(ํจํด์ ์ขํ๋ฉด ์๋์ด ํจ๊ป ์์์ง๋ค).
P3/P4 โ ๋ฆฌ๋ ์ ์ฉ
๋ฑ๊ธ ๊ธฐ์ค ยท ์ถ ๊ฐ์ค์น ยท ๋ฌธํฑ์ references/scoring.md(๐ ๋ฆฌ๋ ์ ์ฉ) ์ ์๋ค. ์ด ํ์ผ๊ณผ references/frames.md ยท acquisition.md ยท report-contract.md ์๋ ๊ทธ ์์น๊ฐ ์๋ค โ ์์ปค ํ๋กฌํํธ๊ฐ ์ด ๊ฒฝ๋ก๋ง ๋ฐ๋๋ก ์กฐ๋ฆฝํ๊ธฐ ๋๋ฌธ์ด๋ค(ยงP2.5).
โ ๏ธ scoring.md ์ ๋ฑ๊ธ ์ ์ยท๊ฐ์ค์นยท๋ฌธํฑ์ ์ ๋ถ ์ ์ ๊ฐ์ด๋ค. census held-out ๊ฒ์ฆ(๊ตฌํ S4 ๋จ๊ณ) ์ ์๋ ๊ณ ์ ํ์ง ์์ผ๋ฉฐ, ์ค์ธก์ฒ๋ผ ์ธ์ฉํ์ง ์๋๋ค.
์์ฅ ๊ธฐ๋ก์ single-writer: sources.jsonl append ๋ ๋ฆฌ๋ ํ๋ก์ธ์ค๋ง ํ๋ค. ์์ปค๋ ์๊ธฐ ์ฐ์ถ์ ๊ฐ๋ณ ํ์ผ๋ก ๋ฐํํ๊ณ ๋ฆฌ๋๊ฐ ๋ณํฉ ๊ธฐ๋กํ๋ค(JSONL ๋์ append ๊ฒฝ์์ ์ค๊ณ์์ ์ ๊ฑฐ).
๊ธฐ๋ก ํ node scripts/grade-ledger.mjs <๊ฒฝ๋ก> ๋ก ์คํค๋ง๋ฅผ ๊ฒ์ฆํ๋ค. exit 1=์๋ฐ ์๋ฆฌ, exit 2=์คํฌ๋ฆฝํธ ์ค๋ฅ์ด๋ฉฐ ํต๊ณผ ์ทจ๊ธํ์ง ์๋๋ค(์ฌ์ ๊ธฐ๋ก ํ core ์งํ).
2. ๊น์ด ์๋ ๋ผ์ฐํ
| ์ ํธ | ์คํฐ ํญ | ๋ผ์ด๋ ์์ฐ | ์ํ ์ถ์ฒ |
|---|
๋จ์ผ ์ฃผ์ฅ ยท ๋จ์ผ ์ ํ (factcheck ๋ฑ) | ํ๋ ์ ํ ๊ทธ๋๋ก | 1 (๋ฌธํฑ ํต๊ณผ ์ ์ฆ์ ์ข
๋ฃ) | 10๋ถ |
| ๋ณตํฉ 2์ ํ ยท ๋น๊ต | ์ ์ ์ถ ์ ๋ถ | ์ต๋ 2 | 20๋ถ |
๋ณตํฉ 3์ ํ+ ยท discovery ๊ด๋ฒ์ | ์ ์ ์ถ ์ ๋ถ (์ํ 6) | ์ต๋ 2 | 30๋ถ |
์ํ์ ์ถ์ฒ๊ฐ์ด๋ฉฐ P0 ๋ฌถ์ ์ง๋ฌธ์์ ์ฌ์ฉ์๊ฐ ๋ฎ์ด์ธ ์ ์๋ค. ๋ผ์ด๋ ์ํ 2๋ ๋ฎ์ด์ธ ์ ์๋ค.
3. ํ๋ค์ค ๋ถ๊ธฐ โ ์กฐ์ฌ ๋จ์ ์คํฐ
Claude Code (3๋จ ํด๋ฐฑ)
| ์์ | ๊ฒฝ๋ก | ์กฐ๊ฑด | tier ๋ผ๋ฒจ |
|---|
| 1 | Workflow ๋๊ตฌ โ ์ถ๋ณ ์์ปค๋ฅผ ํ ์คํฌ๋ฆฝํธ๋ก ํฌ์์ | ๋ฆฌ๋ ์๊ธฐ tool surface ์ Workflow ๋
ธ์ถ | cc-workflow |
| 2 | ์๋ธ์์ด์ ํธ(Task/Agent โ ์ฝ๊ธฐ ์ ์ฉ ์กฐ์ฌ) ์ถ๋ณ ๋ณ๋ ฌ | 1๋จ ๋ถ์ฌ, Task ๋๋ Agent ๋
ธ์ถ | cc-subagent |
| 3 | ์์ฐจ ์คํ + ๊ฒฉํ ๋ผ๋ฒจ | ๋ ๋ค ๋ถ์ฌ | sequential |
๐ด 1๋จ ๋๊ตฌ ์ด๋ฆ์ ์ฌ๊ธฐ ์ ์ด๋๋ ๊ฒ ์์ฒด๊ฐ ๋ฐฐ์ ์ด๋ค. ํ๋ค์ค๊ฐ ๋ณ๋ ฌ ๋๊ตฌ์ ์ฌ์ฉ์ ๋ช
์ opt-in ์ ์๊ตฌํ๋ ๊ฒฝ์ฐ, ๊ทธ ์กฐ๊ฑด ์ค ํ๋๊ฐ "์คํฌ์ ์ง์๊ฐ ๊ทธ ๋๊ตฌ๋ฅผ ๋ถ๋ฅด๋ผ๊ณ ํ ๋" ๋ค. ์ด๋ฆ์ ์ ์ ์ผ๋ฉด ๋๊ตฌ๊ฐ ์์ด๋ ๋ฆฌ๋๊ฐ ์์ ํด 2๋จ์ผ๋ก ๋ด๋ ค๊ฐ๊ณ , ๊ทธ ๊ฐ๋ฑ์ ๋ผ๋ฒจ ์์ด ์ผ์ด๋๋ค(์ฑ๋ฅ์ ๋จ์ด์ง๋๋ฐ ๋ณด๊ณ ์์๋ ํ์ ์ด ์๋ค). ๊ทธ๋์ 1๋จ์ ์ด๋ฆ์ผ๋ก ์ง๋ชฉํ๋ค.
๋ถ์ฌ ํ์ ์ ๋ฆฌ๋๊ฐ ์๊ธฐ tool surface ๋ก ํ๋ค. env-detect.mjs ์ ๊ฐ์ ์ฐธ๊ณ ์ฉ์ด๋ค โ shell ํ๋ก์ธ์ค๋ ๋ชจ๋ธ์ ๋๊ตฌ ๋
ธ์ถ์ ๋์ ํ์ ํ ์ ์๋ค.
์ค์ธก ์ฐธ๊ณ (2026-07, CLI 2.1.220 ยท headless): ํ๋ฌ๊ทธ์ธยท์ค์ ยทMCP ์ ๋ถ 0์ธ ํ๋กํ์์๋ Workflow ๋ ๊ธฐ๋ณธ ๋๊ตฌ ๋ชฉ๋ก์ ์์๊ณ ์คํธ์ถ๋ ๋๋ค. ์ฆ 3๋จ ํด๋ฐฑ์ 1๋จ์ ํต์ ์ค์ฌํ๋ค. ๋ฐ๋ฉด CLI ์ ์ต์ ๋ชจ๋(--bare)์๋ 1ยท2๋จ์ด ๋์์ ์์๋ค โ 3๋จ์ ์ด๋ก ์ ๋ฐ๋ฅ์ด ์๋๋ผ ์ค์ฌ ๊ฒฝ๋ก๋ค(fixtures/ac9-degrade-bare.sh). ๋ฒ์ ์์กด์ผ ์ ์์ผ๋ฏ๋ก ๊ทธ fixture ๋ ๋ฒ์ ์คํฌํ๋ฅผ ๋ค๊ณ ์๋ค.
Codex CLI (capability adapter)
| ์์ | ๊ฒฝ๋ก | ์กฐ๊ฑด | ์ธต |
|---|
| 1 | ๊ณต๊ฐ multi_agent API (spawn / send-or-resume / wait) | tool surface ์ ๋
ธ์ถ | core |
| 2 | collab_v2 (spawn_agent / send_message / followup_task / wait_agent) | v2 namespace ๋
ธ์ถ ์ | enhanced |
| 3 | ์์ฐจ ์คํ (๊ฐ์ ํ๋ ์ ๋ชฉ๋ก) + parallelism=sequential ๋ผ๋ฒจ | ์ด๋ multi-agent API ๋ ์์ | core ํด๋ฐฑ |
goal: top-level 1๊ฐ(์กฐ์ฌ ์ ์ฒด ๋ํ) + ๋ฆฌ๋๊ฐ task DAG ๋ฅผ ๋ ๋ค. goal ํธ๋ฆฌ(ํ์ goal) ๋ ๋ง๋ค์ง ์๋๋ค.
- thread ์ ์ด๋ฏธ active goal ์ด ์์ผ๋ฉด ์ goal ์์ฑ์ ์๋ํ์ง ์๊ณ task DAG ๋ง์ผ๋ก ์งํ +
goal=skipped-collision ๋ผ๋ฒจ.
- run ์ข
๋ฃ ์ goal ์ close/complete ๋ก ๋ช
์ ์ข
๊ฒฐํ๋ค. ๋ฐฉ์น๋ goal ์ด ๋ค์ run ์ ์ถฉ๋ ์์ธ์ด ๋๋ค.
์์ฐจ ๊ฐ๋ฑ์ ํ๋ ์์ ํฉ์น์ง ์๋๋ค. ํนํ factcheck ์ ์ง์ง/๋ฐ์ฆ ์ถ์ ์์ฐจ์์๋ ๋ณ๊ฐ ์กฐ์ฌ ๋จ์๋ก ์ ์งํ๋ค(ํธํฅ ์ฐจ๋จ ์ฅ์น โ frames.md ยง2).
๊ฒฝ๋ก ๋ฑ๊ฐ โ ๊ธฐ๊ณ๋ก ๊ฐ์ ํ๋ค
tier ๋ ์คํ ๋ฐฉ์๊ณผ ๋ผ๋ฒจ๋ง ๋ฐ๊พผ๋ค. ์กฐ์ฌ ๋จ์ ์งํฉ์ ์ด๋ tier ์์๋ ๊ฐ์์ผ ํ๋ค. ๋์ผ๋ก ์งํค์ง ์๊ณ ์คํฌ๋ฆฝํธ๋ก ๊ณ ์ ํ๋ค:
node scripts/spawn-plan.mjs --type <์ ํ[,์ ํ2]> --harness cc --tools "<๋ฆฌ๋๊ฐ ์ค์ ๋ก ๋ณด๋ ๋๊ตฌ ์ด๋ฆ๋ค>"
node scripts/spawn-plan.mjs --type <์ ํ> --harness codex --multi-agent-api public|collab_v2|none
node scripts/spawn-plan.mjs --test
- ์ ํโ์ถ ํ์ ์ ์ผ SoT ๋
references/frames.md ยง2 ๋ค. ์คํฌ๋ฆฝํธ๋ ๊ทธ๊ฒ์ ํ์ฑํ๋ค โ ํ๋ฅผ ์ฝ๋์ ๋ณต์ ํ์ง ์๋๋ค(์ด์ค ๊ด๋ฆฌ๋ ํ์ชฝ๋ง ๊ฐฑ์ ๋๋ ์๊ฐ ์กฐ์ฉํ ๊ฐ๋ฆฐ๋ค).
dedupe_required:true = ๋ณตํฉ ์ ํ์ด๋ค. ์๋ฏธ์ ์ค๋ณต ์ ๊ธฐ๋ ๊ธฐ๊ณ๊ฐ ๋ชป ํ๋ค โ ๋ฆฌ๋๊ฐ frames.md ยง1 ๊ฒฐํฉ๊ท์น 2 ๋ฅผ ์ ์ฉํ๊ณ , ์ ์ ์ถ์ ใ๊ด์ฐฐ ๋ฒ์ ์ ์ธใ์ ์ ๋๋ค.
labels ๋ฅผ ๋ณด๊ณ ์ ใํ๊ฒฝยทํ๊ณใ ์นธ์ ๊ทธ ๋ฌธ์์ด ๊ทธ๋๋ก ์ฎ๊ธด๋ค. ๋ฌธ์์ด์ด ๋ฐ๋๋ฉด ๊ฒฉํ ์ฌ๋ถ๋ฅผ ๊ธฐ๊ณ๋ก ํ์ธํ ์ ์๊ฒ ๋๋ค.
4. ์ง๋ฌธ ์ฃผ์ฒด = ๋ฆฌ๋ ์ผ๊ด
์คํฐ ์ ์ ๋ฆฌ๋๊ฐ ์ ํ๋ณ ํ
ํ๋ฆฟ์ผ๋ก 1ํ ๋ฌถ์ ์ง๋ฌธ์ ํ๋ค. ์ถ๋ง๋ค ๋ฐ๋ก ๋ฌป์ง ์๋๋ค โ ๋ณ๋ ฌ ์กฐ์ฌ์๋ค์ด ๊ฐ์ ์ฌ์ฉ์์๊ฒ ๋ฌผ์ผ๋ฉด ์ฌ์ฉ์๊ฐ ๋์์ ์ฌ๋ฌ ์ง๋ฌธ์ ๋ฐ๊ณ ์ ์์ด ๋ต๊น์ง ๋ธ๋ก๋๋ค.
๋ฌถ์ ์ง๋ฌธ์ ๋ฐ๋์ ํฌํจ: ๋ง๊ฐ ์ํ(1์ฐจ ์ข
๋ฃ ์กฐ๊ฑด).
์ฑ๋: CC = ๋ํํ ์ง๋ฌธ ๋๊ตฌ / Codex = ๋ฆฌ๋๊ฐ ์ฌ์ฉ์์๊ฒ ๋ฌป๊ณ ๋ต์ ์์ปค์ ์ฃผ์
.
์คํฐ ํ ์ ์ง๋ฌธ (blocked node)
์์ปค๊ฐ ์กฐ์ฌ ์ค ์ ์ง๋ฌธ์ ๋ฐ์ ํ๋ฉด:
- ๋ฆฌ๋๊ฐ ์ค๋ณต ์ ๊ฑฐ
- ๋ผ์ด๋ ๊ฒฝ๊ณ์์ ๋ฌถ์ ์ง๋ฌธ ์ต๋ 1ํ/๋ผ์ด๋
- ๋ต ๋๊ธฐ ์ค ๋ค๋ฅธ ํ๋ ์์ ๋
๋ฆฝ ์งํ
- ๋ต ์์ ์ ยง3 ๊ฒฝ๋ก๋ก ์ฃผ์
ํด ์ฌ๊ฐ
relay envelope: {run_id, frame_id, question_id, round, status} โ status ์ ์ด = pending โ asked โ answered โ resumed, ๊ฐ ์ ์ด๋ ๋ฆฌ๋๋ง ๊ธฐ๋ก. ๊ธฐ๋ก ์์น = out/relay.jsonl(๋ฆฌ๋ single-writer, ์์ฅ๊ณผ ๊ฐ์ ๊ท์จ).
node scripts/relay-check.mjs out/relay.jsonl
node scripts/relay-check.mjs --test
์๋ฃ ์์ปค ์ฌ์ง์
(E-FUP): ์ด๋ค ์ถ์ ๋ผ์ด๋ 1 ์ฃผ๊ธฐ๊ฐ resumed ๊น์ง ๋๋ ๋ค ๊ทธ ์ถ์ ๋ผ์ด๋ 2 ์ง๋ฌธ์ด ์ด๋ฆฌ๋ฉด, ๋ฆฌ๋๋ ๊ทธ ์์ปค๋ฅผ ์ฌ์คํฐํ์ง ์๊ณ ์ฌ์ง์
์ํจ๋ค(collab_v2 ๋ followup_task). ์ฌ์คํฐํ๋ฉด ๋ผ์ด๋ 1์์ ์ด๋ฏธ ์ฝ์ ๊ฒ์ ๋ค์ ์ฝ๋๋ค. relay-check ์ efup ๋ฐฐ์ด์ด ์์ฅ์ ๊ทธ ํํ๊ฐ ๋จ์๋์ง ํ์ธํ๋ค.
โ ๏ธ ๊ทธ ๊ฒ์ฌ๋ ์์ฅ์ ํํ๋ฅผ ์ฌ๋ ๊ฒ์ด๊ณ ๋ฐํ์์ด ์ค์ ๋ก ์ฌ์ง์
ํ๋์ง๋ฅผ ์ฌ๋ ๊ฒ์ด ์๋๋ค โ GREEN ์ "์ฌ์ง์
์ด ๋์ํ๋ค"๋ก ์ธ์ฉํ์ง ์๋๋ค.
๋น๋ํ ์คํ (์ง๋ฌธ ์ฑ๋ ์์)
codex exec ๋ฅ๋ก ์ง๋ฌธํ ์ ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ ์ฑํํ๋ค: ์ํ = ์์ + 30๋ถ ยท ๋ผ์ด๋ ์ํ 2. ๋ณด๊ณ ์ ใํ๊ฒฝยทํ๊ณใ์ deadline=default ๋ผ๋ฒจ.
5. ๊ถํ preflight (์์ ์ 1ํ)
| ๊ฑฐ๋ถ๋ ๊ถํ | ์ฒ๋ถ |
|---|
web | hard stop โ ๋ฆฌ์์น ๋ถ๋ฅ. ์ฌ์ ๋ณด๊ณ ํ ์ข
๋ฃ |
shell | degrade โ ์คํฌ๋ฆฝํธ ๊ฒ์ฆ skip + ๋ผ๋ฒจ |
agent ยท goal | ์์ฐจ ๊ฐ๋ฑ |
๊ฑฐ๋ถ(permission)์ ๋ถ์ฌ(dependency)๋ฅผ ๋ผ๋ฒจ์์ ๊ตฌ๋ถํ๋ค. "๋๊ตฌ๊ฐ ์๋ค"์ "๋๊ตฌ๋ฅผ ๋ชป ์ฐ๊ฒ ํ๋ค"๋ ๋ค๋ฅธ ์ฌ์ค์ด๋ค. ์ฐ๋ฌธ์ผ๋ก๋ง ๊ตฌ๋ถํ์ง ๋ง๊ณ ๊ธฐ๊ณ ๋ผ๋ฒจ์์ ๊ฐ๋ผ๋ผ โ ์์ฐจ ๊ฐ๋ฑ ์ ์ฌ์ ๋ฅผ ๊ณจ๋ผ ๋ฃ๋๋ค:
| ์ฌ์ | ํธ์ถ | ๋ผ๋ฒจ |
|---|
| ๋ถ์ฌ โ ์ด ํ๊ฒฝ์ ์ค์ผ์คํธ๋ ์ด์
๋๊ตฌ๊ฐ ์๋ค | spawn-plan.mjs --type <t> (๋๊ตฌ ๋ชฉ๋ก์ ์์) | degraded=no-orchestration-tool |
| ๊ฑฐ๋ถ โ ๋๊ตฌ๋ ์ค์ฌํ๋ ์ ์ฑ
ยท๊ถํ์ด ํธ์ถ์ ๋ง๋๋ค | spawn-plan.mjs --type <t> --tools Workflow,Task --denied | degraded=orchestration-denied |
--tools ์๋ ์ค์ ๋ณด์ด๋ ๋๊ตฌ๋ฅผ ์ฌ์ค๋๋ก ์ ๊ณ ๊ฑฐ๋ถ๋ --denied ๋ก ์ ์ธํ๋ค. ๋๊ตฌ๋ฅผ ๋ชฉ๋ก์์ ๋นผ์ ์์ฐจ๋ก ๋ด๋ ค๊ฐ๋ฉด ๋ผ๋ฒจ์ด "์๋ค"๊ณ ๊ฑฐ์ง ์ฃผ์ฅํ๋ค. ๋ฐ๋ ์ธํ๋ ๋งํ ์๋ค โ ๋๊ตฌ ์์ด --denied ๋ exit 1 ์ด๋ค.
์ด ๊ฐ๋ฆผ์ ์ค์ธก์์ ๋์๋ค(AC8 RUN1, 2026-07-31): ์ธ์
์ WorkflowยทAgent ๊ฐ ์ค์ฌํ๋๋ฐ ์ ์ฑ
์ด ํธ์ถ์ ๊ธ์งํด ์์ฐจ๋ก ๊ฐ๊ณ , ๊ทธ๋ ๊ธฐ๊ณ ๋ผ๋ฒจ์ ๋ถ์ฌ๋ฅผ ์ฃผ์ฅํ๋ค. ๋ฆฌ๋๊ฐ ๋ณธ๋ฌธ์ ์ฌ์ ๋ฅผ ๋ฐ๋ก ์ ์ด ์ด๋ ธ์ง๋ง ๊ธฐ๊ณ ๋์กฐ๋ก๋ ์กํ์ง ์๋ ๊ฑฐ์ง๋ง์ด์๋ค.
6. ์๋ฌ ๋งคํธ๋ฆญ์ค
| ์ํ | ์ฒ๋ถ |
|---|
success | ์ ์ ์ข
๋ฃ |
deadline | ์ํ ๋๋ฌ โ ํ์ฌ ์ฐ์ถ์ ์กฐ๊ฑด๋ถ ๋ฐํ(์ ์ ยท ๋ฏธ์ถฉ์กฑ ์ถ ยท ์ฌ์ ๋ช
์) |
cancel | ์ฌ์ฉ์ ์ค๋จ โ ์์ฅยท๋ถ๋ถ ์ฐ์ถ ๋ณด์กด |
agent-denied | ํด๋น ํ๋ ์ ์์ฐจ ๊ฐ๋ฑ. ์ ํ๋ ์ ๊ฑฐ๋ถ๋ฉด ์ ์ฒด ์์ฐจ |
goal-collision | goal ์์ด task DAG ์งํ + ๋ผ๋ฒจ |
worker-error | ๊ทธ ํ๋ ์ ์์ฐจ ์ฌ์๋ 1ํ โ ์คํจ ์ ํ๋ ์ ๊ฒฐ์ธก ๋ผ๋ฒจ๋ก ๊ณ์ |
malformed-relay | envelope ํค ๊ฒฐ์ยทํ์ฑ ๋ถ๊ฐ = ๊ทธ ์ง๋ฌธ ํ๊ธฐ + ๋ผ๋ฒจ, ์์ปค๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์งํ |
7. ์ข
๋ฃ ์กฐ๊ฑด
- 1์ฐจ = ์ฌ์ฉ์ ๋ง๊ฐ ์ํ (P0 ์์ ๋ฌผ์ ๊ฐ, ๋น๋ํ๋ฉด ๊ธฐ๋ณธ 30๋ถ)
- 2์ฐจ = ๋ผ์ด๋ ์ํ 2ํ
์ํ ๋๋ฌ = ์คํจ๊ฐ ์๋๋ค. ํ์ฌ ์ฐ์ถ์ ์กฐ๊ฑด๋ถ๋ก ๋ฐํํ๊ณ ใ์ข
๋ฃ ์กฐ๊ฑด ์ฑ์ ํใ ์นธ์ ์ด๋์ ๋ฉ์ท๋์ง ์ ๋๋ค. ๋ฏธ๋ฌ์ธ ์ฑ๋ก ์ ์งํ๊ฒ ๋ณด๊ณ ํ๋ ๊ฒ์ด ๋ฌดํ ์ฌ์กฐ์ฌ๋ณด๋ค ์ธ๊ณ ์ ์งํ๋ค.
8. ์ฐ์ถ
out/report.md โ references/report-contract.md ์ ์นธ ๋ชฉ๋ก ์ ๊ฑด. ํฉ์ฑ ๋ฐฐ์ด์ references/synthesis.md
(์ ํ๋ณ ํ
ํ๋ฆฟยทํ์ ํ ์ค์ผ๋ ํค). ํ
ํ๋ฆฟ์ด ์กฐ์ฌ๋ฅผ ๋๋ฆฌ์ง ์๋๋ค โ ๋น ์นธ์ ใ๊ณต๋ฐฑ ์ ์ธใ์ผ๋ก.
node scripts/report-check.mjs out/report.md --labels "$(node scripts/spawn-plan.mjs --type <์ ํ> --harness cc --tools "<๋๊ตฌ>" | node -e 'let d="";process.stdin.on("data",c=>d+=c).on("end",()=>console.log(JSON.parse(d).labels.join(",")))')"
node scripts/report-check.mjs --test
์ด ๊ฒ์ฌ๊ธฐ๋ ์นธ์ด ์๊ณ ๋น์ด์์ง ์์๊ฐ๋ง ๋ณธ๋ค. ๋ด์ฉ์ ์ง์ยท์ธ์ฉ ์ผ์นยท์ ์ ๊ณ์ฐ์ ๋ณด์ง ์๋๋ค โ GREEN ์ "๋ณด๊ณ ์๊ฐ ์ณ๋ค"๋ก ์ธ์ฉํ์ง ๋ง ๊ฒ.
out/sources.jsonl โ schema v1 (๋ฆฌ๋ single-writer, grade-ledger.mjs ํต๊ณผ)
out/relay.jsonl โ ์ฌ์ฉ์ ์ง๋ฌธ ๋ฆด๋ ์ด ์์ฅ (๋ฆฌ๋ single-writer, relay-check.mjs ํต๊ณผ). ์ง๋ฌธ์ด 0๊ฑด์ด์์ผ๋ฉด ์ด ํ์ผ์ ๋ง๋ค์ง ์๋๋ค โ ๋น ํ์ผ์ ๋จ๊ธฐ์ง ์๋๋ค(๊ฒ์ฌ๊ธฐ๊ฐ ๋น ์์ฅ์ ์๋ฐ์ผ๋ก ์ก๋๋ค).
9. ๊ณต๊ฐ ์์
๋ด๋ถ ์ ๋๊ฒฝ๋ก ยท ๋ด ์ด๋ฆ ยท ์ค๋ ๋ id ยท ๊ฐ์ธ ์๋ณ์ ๋ณด๋ฅผ ์ฐ์ถ๋ฌผ์ ๋ฃ์ง ์๋๋ค. person ์ ํ์ ๊ณต๊ฐ ์ง๋ฌด ์ฌ์ค๋ง(frames.md ยง1 ํน์น). ์ ์๋ ๊ณต๊ฐํ๋ ๊ฐ์ค์น๋ ๋น๊ณต๊ฐ(report-contract.md ยง3).