| name | debug |
| description | Debug an Apps in Toss mini-app across two environments โ local browser
(devtools panel, `window.__ait`, browser DevTools) and on-device
intoss-private candidate (real Toss WebView via `ait-devtools` MCP
relay-staging QR attach). Branches by what it observes, then runs an
autonomous observe โ hypothesize โ minimal-fix โ re-verify loop and hands off
when it stalls (ยง6). Triggered by
`/ait:debug` (no args). Distinct from `status`/`logs` (console-side, not
live device state).
|
| argument-hint | |
| adapter-note | ยง5 (on-device MCP attach) is Claude Code-only โ run_in_background, /mcp auto-start and notifications/tools/list_changed handling are Claude Code-specific. Not supported on Codex or Cursor; environment 1 (browser) works there unchanged. Replace ยง5 with an adapter-specific overlay when targeting other agents. |
debug skill
๋ชฉ์
/ait:debug๋ ๋ฏธ๋์ฑ์ ๋ ๊ฒน์ ํ๊ฒฝ์์ ๋๋ฒ๊น
ํ๋ ๊ฒฝ๋ก๋ฅผ ์๋ดํ๋ค. ํ ๋ช
๋ น์ด
๊ด์ฐฐ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ํ๊ฒฝ์ ๋ถ๊ธฐํ๋ค (ํ๊ฒฝ ๋ชจ๋ธยทfidelity ์ฌ๋ค๋ฆฌ: ๋ก์ปฌ docs/design/three-environments-fidelity.md โ maintainer-internal ๋ฌธ์, repo ๋ฏธํฌํจ):
| ํ๊ฒฝ | ์คํ ๋ฉด | ์ด skill์ ๊ฒฝ๋ก |
|---|
| 1. ๋ก์ปฌ ๋ธ๋ผ์ฐ์ | desktop Chromium + mock SDK + Panel | 2-A/2-B/3 โ panel ยท window.__ait ยท ๋ธ๋ผ์ฐ์ DevTools |
| 3. intoss-private relay dev | ์ค๊ธฐ๊ธฐ ํ ์ค ์ฑ WebView(dogfood) + CDP relay | 5 โ start_attach({mode:'relay-staging', scheme_url}) 1ํธ์ถ QR attach |
ํ๊ฒฝ ๋ฒํธ๋ fidelity ์ฌ๋ค๋ฆฌ์ ์ ๋ฒํธ๋ฅผ ๊ทธ๋๋ก ์ด๋ค โ ์ค๊ฐ ๋จ(ํ๊ฒฝ 2, PWA Sandbox
launcher)์ 2026-08-10 ๊ฒฐ์ ์ผ๋ก ์ ๊ฑฐ๋๊ณ ๋จ์ ๋ ๋จ์ ๋ฒํธ๋ ๋ฐ๊พธ์ง ์์๋ค.
๋๋ฒ๊น
์ด ์๋๋ผ "์ค์ ํ ์ค ์ฑ์์ ํ ๋ฒ ๋๋ ค๋ณด๊ณ ์ถ๋ค"๋ฉด /ait:test-on-device๊ฐ
์ ๊ท ๊ฒฝ๋ก๋ค โ ๋ฒ๋ค ๋น๋ โ ์ฝ์ ์
๋ก๋ โ ์ปดํ์ผ ํ์ธ โ ๋๊ตฌ๊ฐ ๋๋ ค์ค ๋งํฌ๋ก ์ด๊ธฐ.
์ด skill(ํ๊ฒฝ 3)์ ๊ทธ๋ ๊ฒ ํ์ธํ ๋ค ํฐ์์๋ง ์ฌํ๋๋ ๋ฌธ์ ๋ฅผ CDP๋ก ๊ด์ธกํ ๋
์ด๋ค.
- ํ๊ฒฝ 1์ ์ง๊ธ ๋ฐ๋ก, ์์กด ์์ด ์ด๋ค:
@apps-in-toss/devtools์ floating panel โ mock ์ํ(๊ถํยท์์นยทIAPยท์ด๋ฒคํธ ๋ฑ)๋ฅผ
์ค์๊ฐ ๊ด์ฐฐยท์กฐ์ (12๊ฐ ํญ). ์ฆ์๋ณ๋ก ์ด๋ ํญ์ ๋ณผ์ง๋ references/panel-tabs.md ์ฐธ์กฐ.
window.__ait โ ๋ฐํ์ mock SDK ์ํ ๊ฐ์ฒด. ์ฝ์์ด๋ ์์ด์ ํธ๊ฐ ์ง์ ์ฝ๋๋ค.
- ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ DevTools โ console / network / sources.
- ํ๊ฒฝ 3์
ait-devtools MCP ์๋ฒ๋ก ๋ฟ๋๋ค. ์ด ์๋ฒ๋ ํ๋ก์ ํธ opt-in์ด๋ค โ
/ait:setup-debugger๊ฐ ํ๋ก์ ํธ .mcp.json์ ๋ฐฐ์ ํ๊ณ , ์ธ์
์ ๋ก๋๋ผ ์์ผ๋ฉด
/ait:debug๋ ์ ์๋ฒ๋ฅผ ๋์ฐ์ง ์๊ณ start_attach({mode:'relay-staging', scheme_url})๋ก
ํ๊ฒฝ ์ ํ๊ณผ QR attach ๊ฒฝ๋ก ๋ฐ๊ธ์ ํ ํธ์ถ๋ก ์ฒ๋ฆฌํ๋ค(์๋ 5). bootstrap ๋๊ตฌ๊ฐ
์ธ์
์ ์ ๋ณด์ด๋ฉด ๋ฐฐ์ ์ด ์ ๋ ๊ฒ โ /ait:setup-debugger๋ฅผ ๋จผ์ ์๋ดํ๋ค. QR์
intoss-private deep-link๋ผ ํ ์ค ์ฑ WebView๊ฐ ์ฐ๋ค. attach ์ ์๋ bootstrap ๋๊ตฌ
(start_debugยทstart_attachยทlist_pagesยทget_debug_status)๋ง ๋ณด์ด๊ณ , ํฐ์ด
relay์ ๋ถ์ผ๋ฉด ๋๋จธ์ง ๋๊ตฌ๊ฐ ๊ฐ์ ์ธ์
์์ ๋์ ๋ฑ๋ก๋๋ค.
๋ ํ๊ฒฝ ๋ชจ๋ attach ํ run_tests๋ก ๋ฏธ๋์ฑ test case ํ์ผ(glob)์ ๊ทธ ํ๊ฒฝ์์ ์คํํ ์ ์๋ค โ ํ๊ฒฝ 1์ mock + ๋ก์ปฌ CDP, ํ๊ฒฝ 3์ ์ค ํ ์ค WebView์์ ๊ฐ์ ํ
์คํธ๋ฅผ ๋๋ ค ํ๊ฒฝ๋ณ ๊ฑฐ๋ ์ฐจ์ด๋ฅผ ๋ณธ๋ค. ์์ธ๋ references/attach-tools.md.
์์ฑยท์์ ํ๋ ๋ชจ๋ ๋ฉ์์ง์ ๊ณผ์ฅยทํ๋ณด์ฑ ๋ฌธ๊ตฌ๋ฅผ ๋ฃ์ง ์๋๋ค. ์์ฑํ๋ ์๋ด๋
๊ด์ฐฐยท์ง๋จ์ ์ค๋ช
ํ๋ ์ต์ํ์ผ๋ก.
์์กด
@apps-in-toss/devtools๊ฐ devDependencies์ ์์ด์ผ floating panel์ ์ธ ์ ์๋ค.
์์ผ๋ฉด /ait:inject-devtools๋ฅผ ๋จผ์ ์๋ดํ๋ค (์์ด๋ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ DevTools
๊ฐ์ด๋๋ ์งํ ๊ฐ๋ฅ).
package.json์ด cwd์ ์์ด์ผ ํ๋ค. ์์ผ๋ฉด ํ๋ก์ ํธ ๋ฃจํธ๋ก ์ด๋ ์๋ด.
- ํ๊ฒฝ 1: ์์ด์ ํธ๊ฐ ํ์ ์ dev ์๋ฒ๋ฅผ ์๋ ๊ธฐ๋ํ๋ค(์๋ 2-A ์ฌ์ ๊ธฐ๋ ๋ธ๋ก).
- ํ๊ฒฝ 3:
ait-devtools MCP ์๋ฒ(@apps-in-toss/debugger)๊ฐ ์ธ์
์ ๋ก๋๋ผ ์์ด์ผ ํ๋ค โ
ํ๋ก์ ํธ .mcp.json์ ๋ฐฐ์ ๋ผ ์์ง ์์ผ๋ฉด /ait:setup-debugger๋ฅผ ๋จผ์ ์๋ดํ๋ค(opt-in).
- ํ๊ฒฝ 3: candidate ๋น๋์
@apps-in-toss/debug-console์ด dependencies๋ก ์ค์น๋ผ ์์ด์ผ attach ํ๋ฉด์ด ๋จ๋๋ค(์์ผ๋ฉด /ait:inject-debug-console ๋จผ์ ์๋ด โ inject skill์ debug-console facet).
์ด skill์ ์ฝ์ ์ธ์ฆ์ ์๊ตฌํ์ง ์๋๋ค. ๋ธ๋ผ์ฐ์ ๋๋ฒ๊น
์ ๋ก์ปฌ ์ ์ฉ.
์
๋ ฅ
/ait:debug๋ ์ธ์๋ฅผ ๋ฐ์ง ์๋๋ค. ์ฌ์ฉ์๊ฐ ์ฆ์์ ์์ฐ์ด๋ก ์ค๋ช
ํ๋ฉด (์: "๋ก๊ทธ์ธ
๋ฒํผ์ ๋๋ฌ๋ authorizationCode๊ฐ ์ ์ด", "swipe๋ก ๋ค๋ก ๊ฐ๋ฉด ์ฑ์ด ์ข
๋ฃ๋จ") ๊ทธ
์ฆ์์ ๋ง๋ ๊ด์ฐฐ ์ง์ ์ ๊ณจ๋ผ ์๋ดํ๋ค.
์คํ ์์
1. ํ๊ฒฝ ํ์ธ
ls package.json
์์ผ๋ฉด ์ค๋จ:
package.json์ด ์์ต๋๋ค. ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์์ ๋ค์ ์คํํด์ฃผ์ธ์.
์: cd <project-root> && /ait:debug
package.json์ Read๋ก ์ฝ์ด @apps-in-toss/devtools๊ฐ devDependencies์ ์๋์ง
ํ์ธํ๋ค.
- ์์ผ๋ฉด: floating panel ๊ฒฝ๋ก(์๋ 2-A)๋ฅผ ์ฐ์ ์๋ด.
- ์์ผ๋ฉด: ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ DevTools ๊ฒฝ๋ก(2-B)๋ง ์๋ดํ๊ณ , panel์ ์ํ๋ฉด
/ait:inject-devtools๋ฅผ ๋จผ์ ์คํํ๋ผ๊ณ ๋ง๋ถ์ธ๋ค.
2-A. devtools floating panel๋ก mock ์ํ ๊ด์ฐฐ
dev ์๋ฒ ์ฌ์ ๊ธฐ๋ (idempotent):
์์ด์ ํธ๋ ํจ๋ ์๋ด ์ ์ dev ์๋ฒ๊ฐ ์ด๋ฏธ ๊ธฐ๋ ์ค์ธ์ง ํ์ธํ๊ณ , ์๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ๋์ด๋ค.
-
dev ๋ช
๋ น + ๊ธฐ๋ณธ ํฌํธ ํ์ธ: package.json์ scripts.dev๋ฅผ ์ฝ์ด ์ค์ ๋ช
๋ น์ ํ์ธํ๋ค. ํฌํธ๋ ๋ค์ ์์๋ก ๊ฒฐ์ ํ๋ค โ devtools๋ Vite๋ฟ ์๋๋ผ Next.jsยทRspackยทWebpack ํ๋ก์ ํธ์๋ ์ฃผ์
๋ ์ ์์ผ๋ฏ๋ก 5173์ ๊ฐ์ ํ์ง ์๋๋ค:
scripts.dev์ --port <n>(๋๋ Next.js -p <n>)๊ฐ ์์ผ๋ฉด ๊ทธ ๊ฐ.
- ์์ผ๋ฉด config ํ์ผ๋ก ๋น๋ ๋๊ตฌ๋ฅผ ํ๋ณํด ๊ธฐ๋ณธ ํฌํธ:
vite.config.* โ 5173, next.config.* โ 3000, rspack.config.*/webpack.config.* โ 8080.
-
๊ธฐ๋ ์ฌ๋ถ ํ์ธ: ์์์ ๊ฒฐ์ ํ ํฌํธ($PORT)๊ฐ ์๋ตํ๋์ง ํ์ธํ๋ค:
curl -s -o /dev/null -w "%{http_code}" "http://localhost:$PORT/" || true
200 ์๋ต์ด๋ฉด ์ด๋ฏธ ๊ธฐ๋ ์ค โ ๊ธฐ๋ ๋จ๊ณ๋ฅผ ๊ฑด๋๋ด๋ค. ์ฐ๊ฒฐ ๊ฑฐ๋ถ(exit code โ 0 ๋๋ 000)์ด๋ฉด ์์ง ๋ฏธ๊ธฐ๋.
-
๋ฏธ๊ธฐ๋ ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ๊ธฐ๋: run_in_background: true๋ก dev ์๋ฒ๋ฅผ ์์ํ๋ค:
npm run dev
-
URL ์ถ๋ ฅ: Vite๊ฐ stdout์ Local: http://localhost:<port>/๋ฅผ ์ถ๋ ฅํ๋ค. ์์ด์ ํธ๋ ์ด ์ค์ ํ์ฑํด ํฌํธ๋ฅผ ํ์ธํ๊ณ ์ฌ์ฉ์์๊ฒ URL์ ๋ช
์์ ์ผ๋ก ์๋ฆฐ๋ค:
dev ์๋ฒ๊ฐ ๊ธฐ๋๋์ต๋๋ค: http://localhost:5173/
๋ธ๋ผ์ฐ์ ์์ ์ด ์ฃผ์๋ฅผ ์ด์ด์ฃผ์ธ์. (๋ธ๋ผ์ฐ์ ๋ ์ง์ ์ฌ์ธ์ โ ์์ด์ ํธ๋ URL๋ง ์๋ ค๋๋ฆฝ๋๋ค.)
stdout์ Local: http://localhost:<port>/ ์ค์ ํ์ฑํด ์ค์ ํฌํธ๋ฅผ ํ์ธํ๋ค(๋น๋ ๋๊ตฌ๋ง๋ค ์ถ๋ ฅ ํ์์ด ์กฐ๊ธ์ฉ ๋ค๋ฅด๋ค). ํ์ฑ ์ ์์ ํฌํธ๋ ์ 1๋จ๊ณ์์ ๊ฒฐ์ ํ ๊ฐ(Vite 5173 / Next.js 3000 / RspackยทWebpack 8080, ๋๋ --port ๋ช
์๊ฐ)์ด๋ค.
๋ธ๋ผ์ฐ์ ์์ ์ฐ ๋ค ํ๋ฉด ํ๋จ์ AIT ๋ฒํผ์ ๋๋ฅด๋ฉด ํจ๋์ด ์ด๋ฆฐ๋ค. ์ฆ์๋ณ๋ก ์ด๋ ํญ์ ๋ณผ์ง๋ references/panel-tabs.md์ ์ ๋ฆฌ๋ผ ์๋ค โ ์์ธ๊ฐ ํ์ํ๋ฉด Read <์ด skill์ base directory>/references/panel-tabs.md.
2-B. ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ DevTools
panel ์ ๋ฌด์ ๋ฌด๊ดํ๊ฒ ํญ์ ๊ฐ๋ฅํ ๊ด์ฐฐ:
- Console: ์ฑ ์ฝ๋์
console.* ์ถ๋ ฅ, ๋์ ธ์ง ์์ธ ์คํ. devtools mock์
๋ฏธ๊ตฌํ SDK API ์ ๊ทผ ์ throwํ๋ฏ๋ก(์ ๋๋ ์ฒ ๋ฐฉ์ง), "devtools์์ ๋๋๋ฐ
์ค SDK์์ ์ ๋จ"์ด ์๋๋ผ ๋ฏธ๊ตฌํ mock์ด ์์ธ์ด๋ฉด ์ฌ๊ธฐ์ ๋ช
ํํ ์๋ฌ๊ฐ ๋ฌ๋ค.
- Network: SDK๊ฐ ํธ์ถํ๋ fetch/XHR ๋ฑ.
- Sources: breakpoint, source map.
3. window.__ait ๋ฐํ์ ์ํ ์ง์ ์ฝ๊ธฐ
devtools mock์ ์ํ๋ฅผ window.__ait(AitStateManager)์ ๋ณด๊ดํ๋ค. ๋ธ๋ผ์ฐ์
์ฝ์์์ ์ง์ ๋ค์ฌ๋ค๋ณด๋ฉด ํจ๋์ ์ด์ง ์๊ณ ๋ ํ์ฌ mock ์ํ๋ฅผ ํ์ธํ ์ ์๋ค:
window.__ait
window.__ait?.state
์ฆ์์ ์ฝ๋๋ก ์ฌํยท๊ฒ์ฆํ ๋, ์์ด์ ํธ๋ Playwright MCP๊ฐ ์ฐ๊ฒฐ๋ผ ์์ผ๋ฉด
browser_evaluate๋ก ์ ๊ฐ์ ์ฝ์ด ๊ฐ์ค์ ๊ฒ์ฆํ ์ ์๋ค. (์ด skill ์์ฒด๊ฐ
๋ธ๋ผ์ฐ์ ๋ฅผ ๋์ฐ์ง๋ ์๋๋ค โ ์ฌ์ฉ์๊ฐ ์ด๋ฏธ ๋์ด dev ์๋ฒ๋ฅผ ๊ฐ์ .)
4. ์ฆ์ โ ๊ฐ์ค โ ๊ด์ฐฐ ์ง์ ์ ๋ฆฌ
์์งํ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์์ด์ ํธ๊ฐ ๊ฐ์ค์ ์ธ์ฐ๊ณ , ์ ๊ด์ฐฐ ์ง์ ์ค ์ด๋์ ๊ฒ์ฆํ ์ง
ํ ๋ธ๋ก์ผ๋ก ์ ์ํ๋ค. ์:
์ฆ์: swipe๋ก ๋ค๋ก ๊ฐ๋ฉด ์ฑ์ด ์ข
๋ฃ๋จ
๊ฐ์ค: BrowserRouter์ history.length === 1์ด๋ผ native swipe๊ฐ ๋ฏธ๋์ฑ ์ข
๋ฃ๋ก ๋น ์ง
๊ด์ฐฐ: ๋ธ๋ผ์ฐ์ ์ฝ์์์ `window.history.length` ํ์ธ โ ๋ฉ๋ด ์ง์
ํ์๋ 1์ด๋ฉด ๊ฐ์ค ์ฑ๋ฆฝ
๊ฒ์ฆ: ๋ผ์ฐํ
์ history depth๊ฐ ์์ด๋ ๊ตฌ์กฐ๋ก ๋ฐ๊พธ๊ฑฐ๋ swipe gesture ๋นํ์ฑํ ํ ์ฌํ
๊ฐ์ค์ด ํ๋ ์๋ฉด ๊ฑฐ๊ธฐ์ ๋ฉ์ถ์ง ๋ง๊ณ ยง6์ ๋ฃจํ๋ก ์ด์ด๊ฐ๋ค โ ๊ด์ธกยท์์ ยท์ฌ๊ฒ์ฆ์ ์์ด์ ํธ๊ฐ
๋ฐ๋ณตํ๊ณ , ํ์ถ ์กฐ๊ฑด์ ๊ฑธ๋ฆด ๋๋ง ์ฌ์ฉ์์๊ฒ ๋๊ธด๋ค.
5. on-device ๋๋ฒ๊น
(ํ๊ฒฝ 3) โ MCP attach
๋ธ๋ผ์ฐ์ ๋๋ฒ๊น
(1~4)์ dev ๋ฒ๋ค(mock + panel)์๋ง ์ ์ฉ๋๋ค. ์ค๊ธฐ๊ธฐ์์ ๋๋
๋ฒ๋ค์ mock๋ panel๋ ์์ด, ํฐ์์๋ง ์ฌํ๋๋ ํ๊ท(์: native swipe-back)๋
CDP(Chrome DevTools Protocol) relay๋ก attachํด์ผ ๊ด์ธก๋๋ค.
์ด ๊ฒฝ๋ก๋ ait-devtools MCP ์๋ฒ๊ฐ ๋ด๋นํ๋ค โ /ait:setup-debugger๊ฐ ํ๋ก์ ํธ
.mcp.json์ ๋ฐฐ์ ํ๋ opt-in ์๋ฒ๋ก(์ฐ๊ฒฐ๋๋ฉด /mcp์ ait-devtools๋ก ๋ฌ๋ค),
์ด skill์ ์ ์๋ฒ๋ฅผ ๋์ฐ์ง ์๊ณ attach ๊ฒฝ๋ก๋ง ๋ฐ๊ธํ๋ค. bootstrap ๋๊ตฌ
(start_attach ๋ฑ)๊ฐ ์ธ์
์ ์์ผ๋ฉด ๋จผ์ /ait:setup-debugger๋ก ๋ฐฐ์ ํ๋ค.
5-A. ๋์ ํ๊ฒฝ
ํฐ ๋๋ฒ๊น
๋์์ ํ๊ฒฝ 3 (intoss-private candidate) ํ๋๋ค โ
RELEASE_CHANNEL=dogfood๋ก ๋น๋ํ ๋ค console MCP๋ก ๋ฑ๋กยท์
๋ก๋ํด ๋ฐ๋
intoss-private://โฆ?_deploymentId=<uuid> candidate๋ค. PREPARE ์ํ์์๋
cold-load๋๋ฏ๋ก ์ถ์ ์ ์ค๊ธฐ๊ธฐ ๊ฐ๋ฐ ๋ฃจํ๋ก ์ด๋ค.
candidate scheme URL์ด ์์ผ๋ฉด 5-B์์ ๋น๋ โ console MCP
(miniapp_create/bundle_upload/bundle_upload_complete)๋ก candidate๋ฅผ
๋ง๋ค๋๋ก ์๋ดํ๋ค.
start_debug/start_attach์ mode ๊ฐยท๋ด๋ถ ๋์(dual-connection ๋ผ์ฐํฐ, lazy-boot relay, ์๋ /mcp ์ฌ๊ตฌ์ฑ fallback)์ ์ ์ ๊ฒฝ๋ก์์๋ ๋ชฐ๋ผ๋ ๋๋ ์ธ๋ถ๋ค โ ์์ธ๊ฐ ํ์ํ๋ฉด Read <์ด skill์ base directory>/references/mode-switching.md. attach๊น์ง ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ ค๋ฉด ๋ฐ๋ก ์๋ 5-Bยท5-C ์์๋ฅผ ๋ฐ๋ฅธ๋ค(start_attach๊ฐ ํ๊ฒฝ ์ ํ+QR ๋ฐ๊ธ์ 1ํธ์ถ๋ก).
5-B. candidate ๋ฒ๋ค ์ค๋น
ํ๊ฒฝ 3 attach์๋ ์ด๋ฏธ ์ฌ๋ผ๊ฐ ์๋ candidate scheme URL์ด ํ์ํ๋ค.
candidate scheme URL์ด ์์ผ๋ฉด ์์ด์ ํธ๋ ์ด ์๋ฆฌ์์ ์ง์ ํ๋ณด ๋น๋โ๋ฑ๋กโ์
๋ก๋๋ฅผ ์งํํ๋ค:
RELEASE_CHANNEL=dogfood npm run build๋ก candidate ๋ฒ๋ค์ ๋ง๋ ๋ค.
ait build๋ฅผ ๋จ๋
์ผ๋ก ๋ถ๋ฅด์ง ์๋๋ค โ 3.x(apps-in-toss.config.ts)์
ait build๋ ์ด๋ฏธ ๋ง๋ค์ด์ง dist/๋ฅผ ํฌ์ฅ๋ง ํ๋ฏ๋ก ์น ๋น๋ ์์ด ๋ถ๋ฅด๋ฉด
์น ๋น๋ ๋๋ ํ ๋ฆฌ(dist)๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค๋ก ์ข
๋ฃํ๊ณ , ํ๊ฒฝ ๋ณ์๋ ์น
๋น๋์ ๋ฟ์ง ๋ชปํ๋ค. 3.x์ build ์คํฌ๋ฆฝํธ๊ฐ vite build && ait build๋ผ
ํ ์ค๋ก ๋ ๋ค ์ฒ๋ฆฌํ๋ค. 2.x ํด๋ฐฑ(granite.config.ts)์ด๋ฉด
RELEASE_CHANNEL=dogfood npm run bundle:ait์ ์ด๋ค โ ๊ทธ์ชฝ ait build๋
web.commands.build๋ฅผ ์ค์ค๋ก ์คํํ๋ค. (CLI 2.10.8ยท3.0.5 ์์ค ํ์ธ)
- ์์ง ์ฝ์์ ๋ฑ๋ก๋์ง ์์ ์ฑ์ด๋ฉด console MCP
miniapp_create๋ก ๋ฑ๋กํ๋ค
(์ด๋ฏธ ๋ฑ๋ก๋ผ ์์ผ๋ฉด ๊ฑด๋๋ด๋ค).
- console MCP
bundle_upload โ bundle_upload_complete๋ก ๋ฒ๋ค์ ์
๋ก๋ํ๋ค.
- ์
๋ก๋ ์๋ฃ ์๋ต์์
intoss-private://โฆ?_deploymentId=<uuid> scheme URL์ ๋ฐ๋๋ค.
์์ด์ ํธ๋ ๊ทธ URL์ ๊ฐ์ ํ๋ฆ์์ ๊ณง๋ฐ๋ก 5-C์
start_attach({mode:'relay-staging', scheme_url})์ผ๋ก ์ ๋ฌํ๋ค โ ์ฌ์ฉ์์๊ฒ
URL์ ๋ณต์ฌยท์ฌ์
๋ ฅํ๊ฒ ํ์ง ์๋๋ค.
(์ฝ์ ๋ฑ๋กยท์
๋ก๋๋ 1ํ ์ธ๊ฐ๊ฐ ํ์ํ๋ค โ /mcp์์ apps-in-toss-console์
์น์ธํ๋ค. ๋ฑ๋กยท์
๋ก๋๊ฐ 4046 lockยท์ฝ๊ด ๋ฏธ์ฒด๊ฒฐ ๋ฑ์ผ๋ก ๋ฉ์ถ๋ฉด scheme URL ์์ด
๋์์ค๋ฉฐ, ์์ด์ ํธ๋ ๊ทธ ์๋ฌ๋ฅผ ์ฌ์ฉ์์๊ฒ ๊ทธ๋๋ก ์ ๋ฌํ๊ณ 5-C ์งํ์
์ค๋จํ๋ค. ์ด skill์ ait deploy(API ํค ๊ธฐ๋ฐ ์ง์ ๋ฐฐํฌ)๋ฅผ Bash๋ก ํธ์ถํ์ง
์๋๋ค โ ์ธ๊ฐ๋ ํญ์ console MCP์ OAuth ์ธ์
์ ํตํ๋ค.)
5-C. attach โ start_attach QR
QR ์ค์บ์ด ๋จ์ผ ์ง์
์ด๋ค โ devicectl/adb ๊ฐ์ device-control ๋ฐ์ฌ๋ ์ฐ์ง
์๋๋ค(์ค์ ์ ํ๋ก์ฐ ์๋). ์ฌ์ ์กฐ๊ฑด ํ์ธยท๋ฐฑ๊ทธ๋ผ์ด๋ ๊ธฐ๋ยทํด๋ง ๋ฑ ๋จ๊ณ๋ณ ์์ธ๋
Read <์ด skill์ base directory>/references/attach-flow.md.
๊ฒฝ๋ก ์์ฝ: start_attach({mode: 'relay-staging', scheme_url, projectRoot}) ํธ์ถ
(5-B์์ ๋ฐ์ scheme URL์ ๊ทธ๋๋ก ์ ๋ฌ โ ์ฌ์ฉ์ ๋ณต์ฌ ์์. ?debug=1&relay=<wss://...>์ spliceํด
deep-link ํฉ์ฑ + QR ๋ฐ๊ธ, attach๊น์ง ์ต๋ 60s ํด๋ง) โ ์ฌ์ฉ์๊ฐ ํฐ ์นด๋ฉ๋ผ๋ก QR ์ค์บ โ ํ ์ค ์ฑ
WebView๊ฐ deep-link๋ฅผ ์ด์ด in-app gate๋ฅผ ํต๊ณผํ๊ณ relay์ attach.
TOTP ์ฝ๋๊ฐ ๋ง๋ฃ๋๋ฉด start_attach๊ฐ ์๋์ผ๋ก ์ฌ๋ฐํํด QR/๋์๋ณด๋๋ฅผ ๊ฐฑ์ ํ๋ฏ๋ก
ํ์์์๋ง๋ค ์ฌํธ์ถํ ํ์๊ฐ ์๋ค.
5-D. attach ํ์ธ ๋ฐ ๋๊ตฌ ์๋ ๋ฑ๋ก
-
list_pages ๋๊ตฌ๋ฅผ ํธ์ถํด attach ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
- attach ์ : ๋น ๋ชฉ๋ก โ 5-C ์ค์บ ๋จ๊ณ๋ก ๋์๊ฐ๋ค.
- attach ํ: ์ฐ๊ฒฐ๋ ํ์ด์ง(WebView) ๋ชฉ๋ก์ด ๋ณด์ธ๋ค.
-
attach ์ฑ๊ณต ์๊ฐ ์๋ฒ๊ฐ notifications/tools/list_changed๋ฅผ emit โ Claude Code๊ฐ
tool ๋ชฉ๋ก์ ์๋ ๊ฐฑ์ ํ๋ค. attach ์์กด ๋๊ตฌ 13์ข
์ด ๊ฐ์ ์ธ์
์์ ์ฆ์ callableํด์ง๋ค โ
์ ์ฒด ๋ชฉ๋กยท์ฉ๋ยทSECRET-HANDLING ์ธ๋ถ๋ Read <์ด skill์ base directory>/references/attach-tools.md.
attach ์ ์ ๋ณด์ด๋ ๋๊ตฌ๋ bootstrap 4์ข
(start_debugยทstart_attachยท
list_pagesยทget_debug_status)๋ฟ์ด๋ค โ ๊ทธ๊ฒ ์ ์์ด๋ค. ๋๋จธ์ง๊ฐ ์ ๋ณด์ด๋ฉด ์์ง ํฐ์ด ์
๋ถ์ ๊ฒ์ด๋ 5-C ์ค์บ ๋จ๊ณ๋ก ๋์๊ฐ๋ค.
5-E. ์ค๊ธฐ๊ธฐ ํ
์คํธ ์คํ โ run_tests
attach๊ฐ ์๋ฃ๋ ์ํ(5-D์์ list_pages๋ก ํ์ด์ง๊ฐ ํ์ธ๋ ํ)๋ผ๋ฉด, ํ๋ก์ ํธ์ *.ait.test.ts ํ์ผ์ด ์์ ๊ฒฝ์ฐ ๊ฐ์ relay ์ฐ๊ฒฐ์ ๊ทธ๋๋ก ์ฌ์ฌ์ฉํด ์ค๊ธฐ๊ธฐ WebView์์ ํ
์คํธ๋ฅผ ์คํํ ์ ์๋ค. ํธ์ถ ํํยท์ต์
ยทํ๊ฒฝ๋ณ ๊ฒ์ฆ ๋ฒ์๋ Read <์ด skill์ base directory>/references/attach-tools.md.
6. ์์จ ๋๋ฒ๊น
๋ฃจํ โ ๊ด์ธก โ ๊ฐ์ค โ ์ต์ ์์ โ ์ฌ๊ฒ์ฆ
์ง๋จ์์ ๋ฉ์ถ์ง ์๋๋ค. ๊ฐ์ค์ด ์๋ฉด ์์ด์ ํธ๊ฐ ํ ์ฌ์ดํด์ฉ ์ค์ค๋ก ๋๋ฆฐ๋ค โ ๊ด์ธกํ๊ณ ,
๊ฐ์ค ํ๋๋ฅผ ์ธ์ฐ๊ณ , ๊ทธ ๊ฐ์ค๋ง ํ๋๋ ์ต์ ์์ ์ ํ๊ณ , ์ ์ฆ์ ์ฌํ ์ ์ฐจ๋ก ์ฌ๊ฒ์ฆํ๋ค.
์ฌ์ฉ์์๊ฒ ๋๊ธฐ๋ ๊ฑด ์๋ ํ์ถ ์กฐ๊ฑด์ ๊ฑธ๋ฆด ๋๋ฟ์ด๋ค.
ํ ๋ฐํด: ๊ด์ธก โ ๊ฐ์ค 1๊ฐ(๋ฐ์ฆ ๊ฐ๋ฅํ ํํ) โ ์ต์ ์์ (ํ ๋ฒ์ ํ ๋ณ์) โ ์ฌ๊ฒ์ฆ(๊ฐ์
๊ด์ธก ์ง์ + ์ ์ฌํ ์ ์ฐจ) โ ํ์ (์ข
๋ฃ / ๋๋๋ฆฌ๊ณ ๋ค์ ๊ฐ์ค / ํ๊ฒฝ ์น๊ธ / hand-off).
๊ด์ธก ์
๋ ฅ์ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค:
- ํ๊ฒฝ 1: devtools panel ํญ(
references/panel-tabs.md), ๋ธ๋ผ์ฐ์ ์ฝ์ยทNetworkยท์์ธ ์คํ,
window.__ait?.state, ๋ฐฑ๊ทธ๋ผ์ด๋ dev ์๋ฒ ์ถ๋ ฅ. Playwright MCP๊ฐ ๋ถ์ด ์์ผ๋ฉด
browser_evaluate๋ก ์์ด์ ํธ๊ฐ ์ง์ ์ฝ๊ณ , ์์ผ๋ฉด ๋ถ์ฌ๋ฃ์ ์ค๋ํซ์ ์ธ์ํ๊ณ ์ฌ์ฉ์
์ถ๋ ฅ์ ๋ฐ์ ๊ทธ ๋จ๊ณ๋ง ์ฌ๋ ๊ฒฝ์ ๋ก degradeํ๋ค โ ๋ฃจํ๋ ๊ณ์ ๋๋ค.
- ํ๊ฒฝ 3: attach ํ ๋๊ตฌ 13์ข
(
references/attach-tools.md)ยทrun_testsยทlist_pagesยท
get_debug_status. ait-devtools MCP๊ฐ ๋ฐฐ์ ๋ผ ์์ง ์์ผ๋ฉด ํ๊ฒฝ 3 ๊ด์ธก์ ๋ถ๊ฐํ๋ฏ๋ก
/ait:setup-debugger๋ฅผ ์๋ดํ๊ณ ๊ทธ๋๊น์ง๋ ํ๊ฒฝ 1 ์์์๋ง ๋ฃจํ๋ฅผ ๋๋ค.
์์ ์ต์ํ (ํ ๋ฒ์ ํ ๋ณ์): ํ ์ฌ์ดํด์ ๋
ผ๋ฆฌ ๋ณ๊ฒฝ ํ๋. ์คํจํ ์์ ์ ๋ค์ ์ฌ์ดํด
์ ์ ๋๋๋ฆฐ๋ค(๋์ ๊ธ์ง โ ๋์ ํ๋ฉด ์์ธ ํ๋ณ์ด ๋ถ๊ฐ๋ฅํด์ง๋ค). ์์ ๊ณ์ธก์ ํ์ฉํ๋ ๋ฃจํ
์ข
๋ฃ ์ ์ ๋ถ ์ ๊ฑฐํ๊ณ ๊ทธ ์ฌ์ค์ ์์ฝ์ ์ ๋๋ค. ๋ฆฌํฉํฐ๋งยท๋ฌด๊ด ํ์ผ ์ ๋ฆฌยท์์กด์ฑ ๋ณ๊ฒฝ์
๋ฃจํ ๋ฐ์ด๋ค.
ํ์ถ ์กฐ๊ฑด:
- ๊ฐ์ ๊ฐ์ค 2ํ ์คํจ โ ์ฆ์ ์ค๋จํ๊ณ ์ฌ์ฉ์ ํ์ธ(๊ด์ธก ์์ฝ + ๋ค์ ํ๋ณด 2~3๊ฐ). 3๋ฒ์งธ
์๋๋ ํ์ง ์๋๋ค.
- ์ฆ์ ์ฌํ ๋ถ๊ฐ โ ์์ ๊ธ์ง. ์ฌํ ํ๋ณด๊ฐ ์ ํ์ด๋ค โ ์ฌํ ์ ์ฐจ๋ฅผ ํ์ ํ๊ธฐ ์ ์๋
์์ค๋ฅผ ๊ณ ์น์ง ์๋๋ค(์ฌํ์ด ์์ผ๋ฉด ์ฌ๊ฒ์ฆ์ด ์ฑ๋ฆฝํ์ง ์๋๋ค).
- ์๋ก ๋ค๋ฅธ ๊ฐ์ค 3๊ฐ ์ฐ์ ๊ธฐ๊ฐ, ๋๋ ์ฌ์ดํด 5ํ ์ด๊ณผ โ hand-off. ํ๊ฒฝ ์น๊ธ(1 โ 3)
ํ์ ์ฌ๋ถ๋ฅผ ํจ๊ป ์ ์ํ๋ค.
- ํ๊ฒฝ 1์์ ์ฌํ ์ ๋จ + ์ค SDKยท๋ค์ดํฐ๋ธ ๋ธ๋ฆฌ์ง ์์ฌ โ ๋ฃจํ๋ฅผ ํ๊ฒฝ 3์ผ๋ก ์ฎ๊ธด๋ค(5-B โ 5-C).
๋ฃจํ ๊ฒฝ๊ณ: ๋ฏธ๋์ฑ ์์ค ํธ์งยท์์ ๊ณ์ธกยทdev ์๋ฒ ์ฌ๊ธฐ๋ยท๋ก์ปฌ ํ
์คํธยทrun_testsยทait build
์ฌ๋น๋๋ ๋ฃจํ ์์์ ํ๋ค. ๊ฒ์ ์ ์ถ(review_*ยทbundle_submit_review)ยท๋ฆด๋ฆฌ์ฆ/๋กค๋ฐฑยท
ํ๋ก๋ชจ์
ยทํธ์ ๋ฐ์ก, ๊ทธ ๋ฐ์ ์ฝ์ ์ํ ๋ณ์ด, ์์กด์ฑ ๋ณ๊ฒฝ, git commitยทpush๋ ์ฌ์ฉ์ ๋ช
์
์น์ธ ์์ด๋ ํ์ง ์๋๋ค. ์ ์ผํ ์์ธ๋ 5-B์ candidate ๋ฑ๋กยท์
๋ก๋(ํ๊ฒฝ 3 ์ง์
์ ํ์,
๋๋ฒ๊น
๋ชฉ์ ํ์ โ ์ฌ์ฉ์๊ฐ ํ๊ฒฝ 3 ์น๊ธ์ ๋์ํ ๋ค).
์ฌ์ดํด ๋ก๊ทธ ํ์ยทdegrade ํยท์์ ํ ๋ฐํด๋ Read <์ด skill์ base directory>/references/debug-loop.md.
๋ฃจํ๋ฅผ ๋๋ด๊ฑฐ๋ ๋๊ธธ ๋๋ ์ด ํํ๋ก ๋ง๋ฌด๋ฆฌํ๋ค:
๋๋ฒ๊น
๋ฃจํ ์ข
๋ฃ (์ฌ์ดํด 3/5, ํ๊ฒฝ 1)
๊ฐ์ค: ๋ผ์ฐํ
์ด replace๋ผ history depth๊ฐ ์ ์์
์์ : src/pages/Menu.tsx ๋ผ์ฐํ
1๊ฑด์ push ๋ก ๋ณ๊ฒฝ
์ฌ๊ฒ์ฆ: ์ ์ฌํ ์ ์ฐจ ์ฌ์คํ - ์ค์์ดํ ํ ์ฑ ์ ์ง๋จ (ํต๊ณผ)
์์ ๊ณ์ธก: ์ ๋ถ ์ ๊ฑฐํจ
๋ค์ (๋ช
๋ น์ ๋ชฐ๋ผ๋ ๋ฉ๋๋ค - ๋ฐ์ดํ ์ ๋ฌธ์ฅ์ ๊ทธ๋๋ก ๋งํด๋ ๊ฐ์ ๋จ๊ณ๋ก ๊ฐ๋๋ค):
/ait:debug # ์ค๊ธฐ๊ธฐ์์๋ ๊ฐ์์ง ํ์ธ - ํ๊ฒฝ 3 attach (5-B -> 5-C)
# ๋ง๋ก: "์ด๊ฑฐ ์ค๊ธฐ๊ธฐ์์๋ ๊ฐ์์ง ํ์ธํด์ค"
/ait:setup-debugger # ํ๊ฒฝ 3 attach ์๋ฒ๊ฐ ์์ง ์์ผ๋ฉด ์ด๊ฑธ ๋จผ์
# ๋ง๋ก: "๋์ค์ ํฐ ๋๋ฒ๊น
ํ ์ ์๊ฒ ๋๋ฒ๊ฑฐ ์ฐ๊ฒฐ์ ๋ฏธ๋ฆฌ ์ธํ
ํด์ค"
Out of scope (์ด skill์ด ํ์ง ์๋ ๊ฒ)
- โ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ ์ด๊ธฐ โ ํ๊ฒฝ 1์์ ์์ด์ ํธ๋ dev ์๋ฒ๋ฅผ ์๋ ๊ธฐ๋ํ๊ณ URL์ ์ถ๋ ฅํ๋ฉฐ,
๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉ์๊ฐ ์ง์ ์ฐ๋ค(์์ด์ ํธ๋ URL๋ง ์ถ๋ ฅ). ํ๊ฒฝ 3์ QR ์ค์บ์ ์ฌ๋์ด ํฐ ์นด๋ฉ๋ผ๋ก ํ๋ค(์ด skill์ QR์ ๋ฐ๊ธ).
- โ
ait-devtools MCP ์๋ฒ ๋ฐฐ์ ยท๊ธฐ๋ โ ๋ฐฐ์ ์ /ait:setup-debugger(ํ๋ก์ ํธ
.mcp.json), ๊ธฐ๋์ Claude Code๊ฐ ํ๋ค. ์ด skill์ attach ๊ฒฝ๋ก๋ง ๋ฐ๊ธํ๋ค.
- โ ๊ฒ์ ํ ์ ์ถ(ํ๊ฒฝ 3 ๋ฐ์ ๋ฐฐํฌ ์ํ ์ ํ, ๋น๊ฐ์ญ) โ ๋ช
์ ์น์ธ ์์ด ํ์ง ์๋๋ค.
(5-B์ candidate ๋ฑ๋กยท์
๋ก๋๋ ๋๋ฒ๊น
๋ชฉ์ ํ์ ์ด๋ฉฐ ๊ฒ์ ์ ์ถ๊ณผ๋ ๋ค๋ฅด๋ค.)
- โ devtools ์ค์ ์ฃผ์
โ
/ait:inject-devtools.
- โ ํ๊ฒฝ 3 attach ํ๋ฉด ์ค์น โ
/ait:inject-debug-console(@apps-in-toss/debug-console์ dependencies๋ก ์ค์น + /auto ์์ด์ด์
). ์ด skill์ ๊ทธ ์์์(ํ๋ฉด์ด ๋ฒ๋ค์ ๋ค์ด๊ฐ ์ํ์์) QR attach์ CDP ๊ด์ธก์ ๋ด๋นํ๋ค.
- โ ๋ฐฐํฌ ํ ์ด์ ์ํ ์กฐํ โ ํ์ํ๋ฉด console MCP
miniapp_get_status๋ฅผ ์ง์
ํธ์ถํ๋ค. ์ด skill์ ๋๋ฒ๊น
๋ชฉ์ ์ candidate ๋ฑ๋กยท์
๋ก๋๊น์ง๋ง ํ๋ค.
- โ ์ฆ์๊ณผ ๋ฌด๊ดํ ์ฝ๋ ์์ โ ยง6 ๋ฃจํ๋ ๊ฐ์ค ํ๋๋ฅผ ํ๋๋ ์ต์ ์์ ๋ง ํ๋ค.
๋ฆฌํฉํฐ๋งยทํฌ๋งคํ
ยท๋ฌด๊ด ํ์ผ ์ ๋ฆฌยท์์กด์ฑ ์ถ๊ฐ/๋ฒ์ ๋ณ๊ฒฝ์ ๋ฃจํ ๋ฐ์ด๊ณ , ํ์ํ๋ฉด ์์ฝ์
์ ์ด ์ฌ์ฉ์์๊ฒ ๋๊ธด๋ค.
ํ์ง ๋ง์์ผ ํ ๊ฒ
- โ attach ์ ์ attach ์์กด ๋๊ตฌ๊ฐ ์ ๋ณด์ด๋ ๊ฑธ "๋ฒ๊ทธ"๋ก ์ค์ธ. bootstrap 4์ข
(
start_debugยทstart_attachยทlist_pagesยทget_debug_status)๋ง ๋ณด์ด๋ ๊ฒ ์ ์์ด๊ณ , ํฐ์ด
๋ถ์ผ๋ฉด ๋๋จธ์ง 13์ข
์ด ๋์ ๋ฑ๋ก๋๋ค(5-D, ์์ธ๋ references/attach-tools.md).
- โ
devicectl/adb ๋ฑ device-control๋ก ํฐ์ ๋ฐ์ฌ. ์ง์
์ QR ์ค์บ ๋จ์ผ ๊ฒฝ๋ก๋ค(5-C).
- โ ๋ธ๋ผ์ฐ์ (ํ๊ฒฝ 1)์์ ์ฌํ๋์ง ์๋ ํ๊ท๋ฅผ mock ๊ธฐ์ค์ผ๋ก ๋จ์ . ์ค SDKยท๋ค์ดํฐ๋ธ
๋ธ๋ฆฌ์ง fidelity๊ฐ ํ์ํ๋ฉด ํ๊ฒฝ 3(intoss-private dogfood)์ผ๋ก ์ฌ๋ผ๊ฐ๋ค.
- โ candidate ๋ฒ๋ค์
@apps-in-toss/debug-console์ด ์๋ ์ํ๋ก attach ์๋. attach
ํ๋ฉด์ด ๋ฒ๋ค์ ์์ผ๋ฉด QR์ ์ค์บํด๋ relay์ ๋ถ์ง ์๋๋ค โ /ait:inject-debug-console ๋จผ์ .
- โ ์ํฌ๋ฆฟ/์ธ์ฆ ์ฝ๋ ๊ฐ์ stdoutยท๋ก๊ทธยท๋ฉ์์ง์ ์ถ๋ ฅ.
- โ
window.__ait์ ๋ฉ์๋๋ช
์ ๊ณ ์ ์ผ๋ก ๋จ์ . ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ผ๋ ๊ฐ์ฒด๋ฅผ
ํผ์ณ ํ์ธํ๋๋ก ์๋ด.
- โ ๋ฏธ๊ตฌํ mock์ throw๋ฅผ "๋ฒ๊ทธ"๋ก ์ค์ธ. ์๋๋ ๋์์ด๋ฉฐ ๋๋ฝ API๋ devtools
์ด์๋ก ๋ณด๊ณ ์๋ด.
- โ ํ ์ฌ์ดํด์ ์ฌ๋ฌ ๋ณ์๋ฅผ ๋์์ ์์ ํ๊ฑฐ๋, ์คํจํ ์์ ์ ๋๋๋ฆฌ์ง ์๊ณ ๋ค์ ๊ฐ์ค๋ก
๋์ด๊ฐ๊ธฐ(ยง6). ์ด๋ ๋ณ๊ฒฝ์ด ์์ธ์ธ์ง ํ๋ณํ ์ ์๊ฒ ๋๋ค.
- โ ์ฌํ์ด ์ ์กํ ์ํ์์ ์์ค๋ถํฐ ๊ณ ์น๊ธฐ. ์ฌํ ์ ์ฐจ ํ์ ์ด ์ ํ์ด๋ค(ยง6 ํ์ถ ์กฐ๊ฑด).
- โ ๋ฃจํ ์์์ ๊ฒ์ ์ ์ถยท๋ฆด๋ฆฌ์ฆ/๋กค๋ฐฑยทํ๋ก๋ชจ์
ยทํธ์ ๋ฐ์ก ๋ฑ ์ฝ์ ์ํ ๋ณ์ด ๋๊ตฌ ํธ์ถ.
ํ๊ฒฝ 3 ์ง์
์ ํ์ํ 5-B์ candidate ๋ฑ๋กยท์
๋ก๋๋ง ์์ธ๋ค(๋๋ฒ๊น
๋ชฉ์ ํ์ ).
- โ ๋ฉ์์ง์ ๊ณผ์ฅยทํ๋ณด์ฑ ๋ฌธ๊ตฌ. ์์ฑํ๋ ์๋ด๋ ๊ด์ฐฐยท์ง๋จ์ ์ค๋ช
ํ๋ ์ต์ํ์ผ๋ก.
- โ
MCP_ENV ๊ธฐ๋ฐ ๊ตฌ๋ฒ์ ์ง์
๋ฐฉ์์ ์์กด. ํ๊ฒฝ ์ ํ์ start_debug({mode})๋ก
๋ฐํ์์ ํ๋ค(์์ธ๋ references/mode-switching.md).
- โ ํ๊ฒฝ 3 scheme URL์ ์ป์ผ๋ ค
ait deploy --api-key/--profile(API ํค ๊ธฐ๋ฐ ์ง์
๋ฐฐํฌ)๋ฅผ Bash๋ก ํธ์ถ. ์ฝ์ ๋ฑ๋กยท์
๋ก๋๋ ํญ์ console MCP ๋๊ตฌ๋ก ์ฒ๋ฆฌํ๋ค โ
OAuth ์ธ์
์ธ๊ฐ๋ง ์ฐ๊ณ Deploy Key/API ํค ๊ฒฝ๋ก๋ ์ฐ์ง ์๋๋ค(5-B).
๋ค์ ๋จ๊ณ (๊ด์ฐฐ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๋ถ๊ธฐ)
- bootstrap ๋๊ตฌ(
start_attach ๋ฑ 4์ข
)๊ฐ ์ธ์
์ ์ ๋ณด์ โ ait-devtools MCP ๋ฏธ๋ฐฐ์ .
/ait:setup-debugger๋ก ํ๋ก์ ํธ .mcp.json์ ๋ฑ๋กํ๊ณ ์๋ฒ ์ฐ๊ฒฐ ํ ๋ค์ /ait:debug.
- ํ๊ฒฝ 1์์ ์ฌํยท์ง๋จ ๋ โ ยง6 ๋ฃจํ๋ก ๊ด์ธกโ์ต์ ์์ โ์ฌ๊ฒ์ฆ์ ๋๋ฆฐ๋ค. ๋ธ๋ผ์ฐ์ ์์
์ฌํ๋์ง ์๊ณ ์ค SDK fidelity(ํ ์ค WebViewยท๋ค์ดํฐ๋ธ ๋ธ๋ฆฌ์ง)๊ฐ ์์ฌ๋๋ฉด ํ๊ฒฝ 3์ผ๋ก
์ฌ๋ผ๊ฐ๋ค: 5-B์์
ait build โ console MCP๋ก ๋ฑ๋กยท์
๋ก๋ํด scheme URL์ ๋ฐ์ ๋ฐ๋ก
start_attach({mode:'relay-staging', scheme_url})์ผ๋ก QR attach (๋ณต์ฌ ์์ โ 5-B ์ฐธ์กฐ).
- candidate scheme URL์ด ์์ง ์์ โ 5-B๋ก
ait build โ console MCP
(miniapp_create โ bundle_upload โ bundle_upload_complete)๋ก candidate๋ฅผ
๋ง๋ ๋ค ๋ค์ /ait:debug.
start_attach ์ค์บ ๋๊ธฐ ์ค โ ํฐ ์นด๋ฉ๋ผ๋ก QR ์ค์บ.
attach ํ list_pages๋ก ํ์ธ โ ํ์ด์ง๊ฐ ๋ณด์ด๋ฉด 5-D์ 13์ข
๋๊ตฌ๋ก ๋๋ฒ๊น
์์.
- attach ํ ๋ฏธ๋์ฑ์
*.ait.test.ts ํ
์คํธ๊ฐ ์์ผ๋ฉด โ run_tests({ files: ["**/*.ait.test.ts"], projectRoot: "<ํ๋ก์ ํธ ๋ฃจํธ>" })๋ก ์ค๊ธฐ๊ธฐ์์ ์คํ (5-E). env๋ณ ๊ฒฐ๊ณผ๋ฅผ ๋์กฐํ๋ฉด SDK ๋ฒ์ ยทํ๋ซํผ ๊ฑฐ๋ ์ฐจ์ด๋ฅผ ์ก๋๋ค.
- attach๋ ๋๋๋ฐ ๋๊ตฌ๊ฐ ์์ง ์ ๋ณด์ โ
notifications/tools/list_changed๊ฐ
Claude Code์ ์ ๋ฌ๋๊ธฐ๊น์ง ์ ์ด ๊ฑธ๋ฆด ์ ์๋ค. ์ ์ ํ ์์ด์ ํธ์ ๋๊ตฌ ๋ชฉ๋ก์
๋ค์ ํ์ธ. ์ฌ์ ํ ์์ผ๋ฉด get_debug_status๋ก ํ์ฌ ํ๊ฒฝ/๋ชจ๋ยทrelay ์ฐ๊ฒฐ ์ํ ์ ๊ฒ.
- ์ฝ์ ์ด์ ๊ด์ธก โ console MCP
miniapp_get_status๋ก ์ฝ์ ์ํ๋ ํจ๊ป ํ์ธ.
์ฐธ๊ณ
- ์์ธ๊ฐ ํ์ํ๋ฉด Read <์ด skill์ base directory>/references/panel-tabs.md (ํ๊ฒฝ 1 ํจ๋ ํญ๋ณ ๊ด์ฐฐ ์ง์ ), references/mode-switching.md (
start_debug/start_attach mode ๋ด๋ถ ๋์ยทfallback), references/attach-tools.md (attach ํ 13์ข
๋๊ตฌ + run_tests ์์ธ + SECRET-HANDLING), references/debug-loop.md (ยง6 ์์จ ๋ฃจํ โ ํ๊ฒฝ๋ณ ๊ด์ธก ์
๋ ฅยทdegradeยทํ์ถ ์กฐ๊ฑดยท์ฌ์ดํด ๋ก๊ทธ ํ์).
- ์ง skill:
inject-devtools (panel ์ค์ ), inject-debug-console (ํ๊ฒฝ 3 candidate ๋น๋์ attach ํ๋ฉด ์ค์น โ @apps-in-toss/debug-console dependencies), setup-debugger (ait-devtools MCP๋ฅผ ํ๋ก์ ํธ .mcp.json์ ๋ฐฐ์ โ ยง5์ ์ ์ ).
- ํ๊ฒฝ ๋ชจ๋ธ ร fidelity ์ค๊ณ ์ ๋ณธ: ๋ก์ปฌ
docs/design/three-environments-fidelity.md(maintainer-internal ๋ฌธ์, repo ๋ฏธํฌํจ) โ ยง1 ํ๊ฒฝ ๋ชจ๋ธ, ยง5 ๋์ ๋๊ตฌ ๋ฑ๋ก, ยง7 CDP ๋จ์ผ transport.
- ํ๊ฒฝ 3 ์ง์
์๋๋ฆฌ์ค + QR relay ํ๋ฆ ๋ฌธ์(devtools
docs/scenarios/env-3.md) โ ๊ตฌ repo ์ด๋ ฅ์๋ง ์กด์ฌ(์ฌ์์ฑ์ผ๋ก ๋งํฌ ์๋ฉธ, maintainer ๋ก์ปฌ ๋ฐฑ์
mirror์์ ์ด๋ ๊ฐ๋ฅ)
- dogfood relay ๋ฃจํ (candidate ๋น๋ โ QR ์ค์บ โ attach โ ๊ด์ธก ์ฌ์ดํด) ๋ฌธ์(devtools
docs/dogfood-relay-loop.md) โ ๊ตฌ repo ์ด๋ ฅ์๋ง ์กด์ฌ(์ฌ์์ฑ์ผ๋ก ๋งํฌ ์๋ฉธ, maintainer ๋ก์ปฌ ๋ฐฑ์
mirror์์ ์ด๋ ๊ฐ๋ฅ)
- devtools (mock + panel + unplugin, ๋ธ๋ผ์ฐ์ dev ์ ์ฉ) ์์ค โ ๊ตฌ repo ์ด๋ ฅ์๋ง ์กด์ฌ(์ฌ์์ฑ์ผ๋ก ๋งํฌ ์๋ฉธ, maintainer ๋ก์ปฌ ๋ฐฑ์
mirror์์ ์ด๋ ๊ฐ๋ฅ)
- on-device debug MCP ๋ฐ๋ชฌ(
start_debug/start_attach ๋ฑ attach ๋๊ตฌ): @apps-in-toss/debugger(/mcp/server + /mcp/cli exports, debuggerยทdebugger-test bin) โ /ait:setup-debugger๊ฐ ๋ฐฐ์ ํ ํ๋ก์ ํธ .mcp.json์ mcpServers."ait-devtools"๊ฐ npx -y -p https://github.com/toss/apps-in-toss-harness/releases/download/debugger-v0.2.2/apps-in-toss-debugger-0.2.2.tgz debugger๋ก ๊ธฐ๋. server key ait-devtools๋ ์ ์งํ๋ ์ค์ ๋ฐ๋ชฌ ํจํค์ง๋ @apps-in-toss/debugger๋ค(Phase 3 ๋ถ๋ฆฌ, ์ด์ ์๋ devtools repo์ devtools-mcp bin์ด์๋ค): https://github.com/toss/apps-in-toss-harness/tree/main/packages/debugger
- on-device attach ๋ฐํ์(WebView ์์์ relay์ ๋ถ๋ ์ฝ๋ + eruda):
@apps-in-toss/debug-console(. + /auto exports) โ ํ๊ฒฝ 3(intoss-private candidate)์ ait build production-adjacent ๋น๋๋ผ devtools unplugin์ dev-only CDP ๋ธ๋ฆฌ์ง๊ฐ ์๋ ๋นํ์ฑํ๋๋ฏ๋ก, attach ํ๋ฉด์ ๋จ๊ธฐ๋ ค๋ฉด ๋ฏธ๋์ฑ dependencies๋ก ๋ณ๋ ์ค์นํด์ผ ํ๋ค. ์ค์นยท์์ด์ด์
์ ( skill์ debug-console facet)์ด ๋ด๋นํ๋ค.