SpyBara
Go Premium

Documentation 2026-05-08 22:00 UTC to 2026-05-09 04:57 UTC

19 files changed +1,294 โˆ’146. View all changes and history on the product overview
2026
Sun 31 06:39 Sat 30 06:23 Fri 29 06:38 Thu 28 06:37 Wed 27 06:42 Tue 26 06:33 Sun 24 06:25 Sat 23 06:18 Fri 22 06:33 Thu 21 06:36 Wed 20 06:35 Tue 19 06:34 Mon 18 23:59 Sun 17 01:01 Fri 15 22:58 Thu 14 17:02 Wed 13 23:01 Tue 12 22:57 Mon 11 23:00 Sun 10 23:03 Sat 9 04:57 Fri 8 22:00 Thu 7 22:59 Tue 5 23:00 Mon 4 22:58 Sat 2 18:14 Fri 1 18:19

agent-sdk/mcp.md +1 โˆ’1

Details

309 </Tab>309 </Tab>

310</Tabs>310</Tabs>

311 311 

312HTTP(๋น„์ŠคํŠธ๋ฆฌ๋ฐ)์˜ ๊ฒฝ์šฐ `"type": "http"` ๋Œ€์‹  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.312์ŠคํŠธ๋ฆฌ๋ฐ ๊ฐ€๋Šฅํ•œ HTTP ์ „์†ก์˜ ๊ฒฝ์šฐ `"type": "http"` ๋Œ€์‹  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. `.mcp.json` ๋ฐ ๊ธฐํƒ€ JSON ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ `"streamable-http"`๋Š” `"http"`์˜ ๋ณ„์นญ์œผ๋กœ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ `mcpServers` ์˜ต์…˜์€ `"http"`๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

313 313 

314### SDK MCP ์„œ๋ฒ„314### SDK MCP ์„œ๋ฒ„

315 315 

agent-sdk/python.md +111 โˆ’109

Details

2294 2294 

2295```python theme={null}2295```python theme={null}

2296{2296{

2297 "description": str, # A short (3-5 word) description of the task2297 "description": str, # ์ž‘์—…์˜ ์งง์€ ์„ค๋ช… (3-5๋‹จ์–ด)

2298 "prompt": str, # The task for the agent to perform2298 "prompt": str, # ์—์ด์ „ํŠธ๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ž‘์—…

2299 "subagent_type": str, # The type of specialized agent to use2299 "subagent_type": str, # ์‚ฌ์šฉํ•  ํŠนํ™”๋œ ์—์ด์ „ํŠธ์˜ ์œ ํ˜•

2300}2300}

2301```2301```

2302 2302 


2304 2304 

2305```python theme={null}2305```python theme={null}

2306{2306{

2307 "result": str, # Final result from the subagent2307 "result": str, # ์„œ๋ธŒ์—์ด์ „ํŠธ์˜ ์ตœ์ข… ๊ฒฐ๊ณผ

2308 "usage": dict | None, # Token usage statistics2308 "usage": dict | None, # ํ† ํฐ ์‚ฌ์šฉ ํ†ต๊ณ„

2309 "total_cost_usd": float | None, # Estimated total cost in USD2309 "total_cost_usd": float | None, # USD๋กœ ์˜ˆ์ƒ๋˜๋Š” ์ด ๋น„์šฉ

2310 "duration_ms": int | None, # Execution duration in milliseconds2310 "duration_ms": int | None, # ์‹คํ–‰ ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)

2311}2311}

2312```2312```

2313 2313 


2321 2321 

2322```python theme={null}2322```python theme={null}

2323{2323{

2324 "questions": [ # Questions to ask the user (1-4 questions)2324 "questions": [ # ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌผ์–ด๋ณผ ์งˆ๋ฌธ (1-4๊ฐœ ์งˆ๋ฌธ)

2325 {2325 {

2326 "question": str, # The complete question to ask the user2326 "question": str, # ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌผ์–ด๋ณผ ์™„์ „ํ•œ ์งˆ๋ฌธ

2327 "header": str, # Very short label displayed as a chip/tag (max 12 chars)2327 "header": str, # ์นฉ/ํƒœ๊ทธ๋กœ ํ‘œ์‹œ๋˜๋Š” ๋งค์šฐ ์งง์€ ๋ ˆ์ด๋ธ” (์ตœ๋Œ€ 12์ž)

2328 "options": [ # The available choices (2-4 options)2328 "options": [ # ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์„ ํƒ (2-4๊ฐœ ์˜ต์…˜)

2329 {2329 {

2330 "label": str, # Display text for this option (1-5 words)2330 "label": str, # ์ด ์˜ต์…˜์˜ ํ‘œ์‹œ ํ…์ŠคํŠธ (1-5๋‹จ์–ด)

2331 "description": str, # Explanation of what this option means2331 "description": str, # ์ด ์˜ต์…˜์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”์— ๋Œ€ํ•œ ์„ค๋ช…

2332 }2332 }

2333 ],2333 ],

2334 "multiSelect": bool, # Set to true to allow multiple selections2334 "multiSelect": bool, # ์—ฌ๋Ÿฌ ์„ ํƒ์„ ํ—ˆ์šฉํ•˜๋ ค๋ฉด true๋กœ ์„ค์ •

2335 }2335 }

2336 ],2336 ],

2337 "answers": dict | None, # User answers populated by the permission system2337 "answers": dict[str, str | list[str]] | None,

2338 # ๊ถŒํ•œ ์‹œ์Šคํ…œ์— ์˜ํ•ด ์ฑ„์›Œ์ง„ ์‚ฌ์šฉ์ž ๋‹ต๋ณ€. ๋‹ค์ค‘ ์„ ํƒ

2339 # ๋‹ต๋ณ€์€ ๋ ˆ์ด๋ธ” ๋ชฉ๋ก ๋˜๋Š” ์‰ผํ‘œ๋กœ ์—ฐ๊ฒฐ๋œ ๋ฌธ์ž์—ด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

2338}2340}

2339```2341```

2340 2342 


2342 2344 

2343```python theme={null}2345```python theme={null}

2344{2346{

2345 "questions": [ # The questions that were asked2347 "questions": [ # ๋ฌผ์–ด๋ณธ ์งˆ๋ฌธ

2346 {2348 {

2347 "question": str,2349 "question": str,

2348 "header": str,2350 "header": str,


2350 "multiSelect": bool,2352 "multiSelect": bool,

2351 }2353 }

2352 ],2354 ],

2353 "answers": dict[str, str], # Maps question text to answer string2355 "answers": dict[str, str], # ์งˆ๋ฌธ ํ…์ŠคํŠธ๋ฅผ ๋‹ต๋ณ€ ๋ฌธ์ž์—ด์— ๋งคํ•‘

2354 # Multi-select answers are comma-separated2356 # ๋‹ค์ค‘ ์„ ํƒ ๋‹ต๋ณ€์€ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋จ

2355}2357}

2356```2358```

2357 2359 


2363 2365 

2364```python theme={null}2366```python theme={null}

2365{2367{

2366 "command": str, # The command to execute2368 "command": str, # ์‹คํ–‰ํ•  ๋ช…๋ น

2367 "timeout": int | None, # Optional timeout in milliseconds (max 600000)2369 "timeout": int | None, # ์„ ํƒ์  ์‹œ๊ฐ„ ์ดˆ๊ณผ(๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„, ์ตœ๋Œ€ 600000)

2368 "description": str | None, # Clear, concise description (5-10 words)2370 "description": str | None, # ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•œ ์„ค๋ช… (5-10๋‹จ์–ด)

2369 "run_in_background": bool | None, # Set to true to run in background2371 "run_in_background": bool | None, # ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด true๋กœ ์„ค์ •

2370}2372}

2371```2373```

2372 2374 


2374 2376 

2375```python theme={null}2377```python theme={null}

2376{2378{

2377 "output": str, # Combined stdout and stderr output2379 "output": str, # ๊ฒฐํ•ฉ๋œ stdout ๋ฐ stderr ์ถœ๋ ฅ

2378 "exitCode": int, # Exit code of the command2380 "exitCode": int, # ๋ช…๋ น์˜ ์ข…๋ฃŒ ์ฝ”๋“œ

2379 "killed": bool | None, # Whether command was killed due to timeout2381 "killed": bool | None, # ์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ ์ธํ•ด ๋ช…๋ น์ด ์ข…๋ฃŒ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€

2380 "shellId": str | None, # Shell ID for background processes2382 "shellId": str | None, # ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค์˜ ์…ธ ID

2381}2383}

2382```2384```

2383 2385 


2391 2393 

2392```python theme={null}2394```python theme={null}

2393{2395{

2394 "command": str, # Shell script; each stdout line is an event, exit ends the watch2396 "command": str, # ์…ธ ์Šคํฌ๋ฆฝํŠธ; ๊ฐ stdout ์ค„์€ ์ด๋ฒคํŠธ์ด๊ณ , ์ข…๋ฃŒ๋Š” ๊ฐ์‹œ๋ฅผ ๋๋ƒ…๋‹ˆ๋‹ค

2395 "description": str, # Short description shown in notifications2397 "description": str, # ์•Œ๋ฆผ์— ํ‘œ์‹œ๋˜๋Š” ์งง์€ ์„ค๋ช…

2396 "timeout_ms": int | None, # Kill after this deadline (default 300000, max 3600000)2398 "timeout_ms": int | None, # ์ด ๊ธฐํ•œ ํ›„ ์ข…๋ฃŒ (๊ธฐ๋ณธ๊ฐ’ 300000, ์ตœ๋Œ€ 3600000)

2397 "persistent": bool | None, # Run for the lifetime of the session; stop with TaskStop2399 "persistent": bool | None, # ์„ธ์…˜์˜ ์ˆ˜๋ช… ๋™์•ˆ ์‹คํ–‰; TaskStop์œผ๋กœ ์ค‘์ง€

2398}2400}

2399```2401```

2400 2402 


2402 2404 

2403```python theme={null}2405```python theme={null}

2404{2406{

2405 "taskId": str, # ID of the background monitor task2407 "taskId": str, # ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ชจ๋‹ˆํ„ฐ ์ž‘์—…์˜ ID

2406 "timeoutMs": int, # Timeout deadline in milliseconds (0 when persistent)2408 "timeoutMs": int, # ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„์˜ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๊ธฐํ•œ (์ง€์†์ ์ผ ๋•Œ 0)

2407 "persistent": bool | None, # True when running until TaskStop or session end2409 "persistent": bool | None, # TaskStop ๋˜๋Š” ์„ธ์…˜ ์ข…๋ฃŒ๊นŒ์ง€ ์‹คํ–‰ ์ค‘์ผ ๋•Œ True

2408}2410}

2409```2411```

2410 2412 


2416 2418 

2417```python theme={null}2419```python theme={null}

2418{2420{

2419 "file_path": str, # The absolute path to the file to modify2421 "file_path": str, # ์ˆ˜์ •ํ•  ํŒŒ์ผ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ

2420 "old_string": str, # The text to replace2422 "old_string": str, # ๋ฐ”๊ฟ€ ํ…์ŠคํŠธ

2421 "new_string": str, # The text to replace it with2423 "new_string": str, # ๋ฐ”๊ฟ€ ํ…์ŠคํŠธ

2422 "replace_all": bool | None, # Replace all occurrences (default False)2424 "replace_all": bool | None, # ๋ชจ๋“  ํ•ญ๋ชฉ ๋ฐ”๊พธ๊ธฐ (๊ธฐ๋ณธ๊ฐ’ False)

2423}2425}

2424```2426```

2425 2427 


2427 2429 

2428```python theme={null}2430```python theme={null}

2429{2431{

2430 "message": str, # Confirmation message2432 "message": str, # ํ™•์ธ ๋ฉ”์‹œ์ง€

2431 "replacements": int, # Number of replacements made2433 "replacements": int, # ์ˆ˜ํ–‰๋œ ๋ฐ”๊พธ๊ธฐ ์ˆ˜

2432 "file_path": str, # File path that was edited2434 "file_path": str, # ํŽธ์ง‘๋œ ํŒŒ์ผ ๊ฒฝ๋กœ

2433}2435}

2434```2436```

2435 2437 


2441 2443 

2442```python theme={null}2444```python theme={null}

2443{2445{

2444 "file_path": str, # The absolute path to the file to read2446 "file_path": str, # ์ฝ์„ ํŒŒ์ผ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ

2445 "offset": int | None, # The line number to start reading from2447 "offset": int | None, # ์ฝ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•  ์ค„ ๋ฒˆํ˜ธ

2446 "limit": int | None, # The number of lines to read2448 "limit": int | None, # ์ฝ์„ ์ค„ ์ˆ˜

2447}2449}

2448```2450```

2449 2451 


2451 2453 

2452```python theme={null}2454```python theme={null}

2453{2455{

2454 "content": str, # File contents with line numbers2456 "content": str, # ์ค„ ๋ฒˆํ˜ธ๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ ๋‚ด์šฉ

2455 "total_lines": int, # Total number of lines in file2457 "total_lines": int, # ํŒŒ์ผ์˜ ์ด ์ค„ ์ˆ˜

2456 "lines_returned": int, # Lines actually returned2458 "lines_returned": int, # ์‹ค์ œ๋กœ ๋ฐ˜ํ™˜๋œ ์ค„

2457}2459}

2458```2460```

2459 2461 


2461 2463 

2462```python theme={null}2464```python theme={null}

2463{2465{

2464 "image": str, # Base64 encoded image data2466 "image": str, # Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ

2465 "mime_type": str, # Image MIME type2467 "mime_type": str, # ์ด๋ฏธ์ง€ MIME ํƒ€์ž…

2466 "file_size": int, # File size in bytes2468 "file_size": int, # ํŒŒ์ผ ํฌ๊ธฐ(๋ฐ”์ดํŠธ)

2467}2469}

2468```2470```

2469 2471 


2475 2477 

2476```python theme={null}2478```python theme={null}

2477{2479{

2478 "file_path": str, # The absolute path to the file to write2480 "file_path": str, # ์“ธ ํŒŒ์ผ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ

2479 "content": str, # The content to write to the file2481 "content": str, # ํŒŒ์ผ์— ์“ธ ๋‚ด์šฉ

2480}2482}

2481```2483```

2482 2484 


2484 2486 

2485```python theme={null}2487```python theme={null}

2486{2488{

2487 "message": str, # Success message2489 "message": str, # ์„ฑ๊ณต ๋ฉ”์‹œ์ง€

2488 "bytes_written": int, # Number of bytes written2490 "bytes_written": int, # ์“ด ๋ฐ”์ดํŠธ ์ˆ˜

2489 "file_path": str, # File path that was written2491 "file_path": str, # ์“ด ํŒŒ์ผ ๊ฒฝ๋กœ

2490}2492}

2491```2493```

2492 2494 


2498 2500 

2499```python theme={null}2501```python theme={null}

2500{2502{

2501 "pattern": str, # The glob pattern to match files against2503 "pattern": str, # ํŒŒ์ผ๊ณผ ์ผ์น˜์‹œํ‚ฌ glob ํŒจํ„ด

2502 "path": str | None, # The directory to search in (defaults to cwd)2504 "path": str | None, # ๊ฒ€์ƒ‰ํ•  ๋””๋ ‰ํ† ๋ฆฌ (๊ธฐ๋ณธ๊ฐ’์€ cwd)

2503}2505}

2504```2506```

2505 2507 


2507 2509 

2508```python theme={null}2510```python theme={null}

2509{2511{

2510 "matches": list[str], # Array of matching file paths2512 "matches": list[str], # ์ผ์น˜ํ•˜๋Š” ํŒŒ์ผ ๊ฒฝ๋กœ ๋ฐฐ์—ด

2511 "count": int, # Number of matches found2513 "count": int, # ์ฐพ์€ ์ผ์น˜ ์ˆ˜

2512 "search_path": str, # Search directory used2514 "search_path": str, # ์‚ฌ์šฉ๋œ ๊ฒ€์ƒ‰ ๋””๋ ‰ํ† ๋ฆฌ

2513}2515}

2514```2516```

2515 2517 


2521 2523 

2522```python theme={null}2524```python theme={null}

2523{2525{

2524 "pattern": str, # The regular expression pattern2526 "pattern": str, # ์ •๊ทœ ํ‘œํ˜„์‹ ํŒจํ„ด

2525 "path": str | None, # File or directory to search in2527 "path": str | None, # ๊ฒ€์ƒ‰ํ•  ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ

2526 "glob": str | None, # Glob pattern to filter files2528 "glob": str | None, # ํŒŒ์ผ์„ ํ•„ํ„ฐ๋งํ•  glob ํŒจํ„ด

2527 "type": str | None, # File type to search2529 "type": str | None, # ๊ฒ€์ƒ‰ํ•  ํŒŒ์ผ ํƒ€์ž…

2528 "output_mode": str | None, # "content", "files_with_matches", or "count"2530 "output_mode": str | None, # "content", "files_with_matches" ๋˜๋Š” "count"

2529 "-i": bool | None, # Case insensitive search2531 "-i": bool | None, # ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†๋Š” ๊ฒ€์ƒ‰

2530 "-n": bool | None, # Show line numbers2532 "-n": bool | None, # ์ค„ ๋ฒˆํ˜ธ ํ‘œ์‹œ

2531 "-B": int | None, # Lines to show before each match2533 "-B": int | None, # ๊ฐ ์ผ์น˜ ์ „์— ํ‘œ์‹œํ•  ์ค„

2532 "-A": int | None, # Lines to show after each match2534 "-A": int | None, # ๊ฐ ์ผ์น˜ ํ›„์— ํ‘œ์‹œํ•  ์ค„

2533 "-C": int | None, # Lines to show before and after2535 "-C": int | None, # ์ „ํ›„์— ํ‘œ์‹œํ•  ์ค„

2534 "head_limit": int | None, # Limit output to first N lines/entries2536 "head_limit": int | None, # ์ถœ๋ ฅ์„ ์ฒ˜์Œ N๊ฐœ ์ค„/ํ•ญ๋ชฉ์œผ๋กœ ์ œํ•œ

2535 "multiline": bool | None, # Enable multiline mode2537 "multiline": bool | None, # ๋‹ค์ค‘ ์ค„ ๋ชจ๋“œ ํ™œ์„ฑํ™”

2536}2538}

2537```2539```

2538 2540 


2557 2559 

2558```python theme={null}2560```python theme={null}

2559{2561{

2560 "files": list[str], # Files containing matches2562 "files": list[str], # ์ผ์น˜๋ฅผ ํฌํ•จํ•˜๋Š” ํŒŒ์ผ

2561 "count": int, # Number of files with matches2563 "count": int, # ์ผ์น˜๋ฅผ ํฌํ•จํ•˜๋Š” ํŒŒ์ผ ์ˆ˜

2562}2564}

2563```2565```

2564 2566 


2570 2572 

2571```python theme={null}2573```python theme={null}

2572{2574{

2573 "notebook_path": str, # Absolute path to the Jupyter notebook2575 "notebook_path": str, # Jupyter ๋…ธํŠธ๋ถ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ

2574 "cell_id": str | None, # The ID of the cell to edit2576 "cell_id": str | None, # ํŽธ์ง‘ํ•  ์…€์˜ ID

2575 "new_source": str, # The new source for the cell2577 "new_source": str, # ์…€์˜ ์ƒˆ๋กœ์šด ์†Œ์Šค

2576 "cell_type": "code" | "markdown" | None, # The type of the cell2578 "cell_type": "code" | "markdown" | None, # ์…€์˜ ํƒ€์ž…

2577 "edit_mode": "replace" | "insert" | "delete" | None, # Edit operation type2579 "edit_mode": "replace" | "insert" | "delete" | None, # ํŽธ์ง‘ ์ž‘์—… ํƒ€์ž…

2578}2580}

2579```2581```

2580 2582 


2582 2584 

2583```python theme={null}2585```python theme={null}

2584{2586{

2585 "message": str, # Success message2587 "message": str, # ์„ฑ๊ณต ๋ฉ”์‹œ์ง€

2586 "edit_type": "replaced" | "inserted" | "deleted", # Type of edit performed2588 "edit_type": "replaced" | "inserted" | "deleted", # ์ˆ˜ํ–‰๋œ ํŽธ์ง‘ ํƒ€์ž…

2587 "cell_id": str | None, # Cell ID that was affected2589 "cell_id": str | None, # ์˜ํ–ฅ์„ ๋ฐ›์€ ์…€ ID

2588 "total_cells": int, # Total cells in notebook after edit2590 "total_cells": int, # ํŽธ์ง‘ ํ›„ ๋…ธํŠธ๋ถ์˜ ์ด ์…€ ์ˆ˜

2589}2591}

2590```2592```

2591 2593 


2597 2599 

2598```python theme={null}2600```python theme={null}

2599{2601{

2600 "url": str, # The URL to fetch content from2602 "url": str, # ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ€์ ธ์˜ฌ URL

2601 "prompt": str, # The prompt to run on the fetched content2603 "prompt": str, # ๊ฐ€์ ธ์˜จ ์ฝ˜ํ…์ธ ์—์„œ ์‹คํ–‰ํ•  ํ”„๋กฌํ”„ํŠธ

2602}2604}

2603```2605```

2604 2606 


2606 2608 

2607```python theme={null}2609```python theme={null}

2608{2610{

2609 "response": str, # AI model's response to the prompt2611 "response": str, # ํ”„๋กฌํ”„ํŠธ์— ๋Œ€ํ•œ AI ๋ชจ๋ธ์˜ ์‘๋‹ต

2610 "url": str, # URL that was fetched2612 "url": str, # ๊ฐ€์ ธ์˜จ URL

2611 "final_url": str | None, # Final URL after redirects2613 "final_url": str | None, # ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ํ›„ ์ตœ์ข… URL

2612 "status_code": int | None, # HTTP status code2614 "status_code": int | None, # HTTP ์ƒํƒœ ์ฝ”๋“œ

2613}2615}

2614```2616```

2615 2617 


2621 2623 

2622```python theme={null}2624```python theme={null}

2623{2625{

2624 "query": str, # The search query to use2626 "query": str, # ์‚ฌ์šฉํ•  ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ

2625 "allowed_domains": list[str] | None, # Only include results from these domains2627 "allowed_domains": list[str] | None, # ์ด ๋„๋ฉ”์ธ์˜ ๊ฒฐ๊ณผ๋งŒ ํฌํ•จ

2626 "blocked_domains": list[str] | None, # Never include results from these domains2628 "blocked_domains": list[str] | None, # ์ด ๋„๋ฉ”์ธ์˜ ๊ฒฐ๊ณผ๋Š” ์ ˆ๋Œ€ ํฌํ•จํ•˜์ง€ ์•Š์Œ

2627}2629}

2628```2630```

2629 2631 


2647{2649{

2648 "todos": [2650 "todos": [

2649 {2651 {

2650 "content": str, # The task description2652 "content": str, # ์ž‘์—… ์„ค๋ช…

2651 "status": "pending" | "in_progress" | "completed", # Task status2653 "status": "pending" | "in_progress" | "completed", # ์ž‘์—… ์ƒํƒœ

2652 "activeForm": str, # Active form of the description2654 "activeForm": str, # ์„ค๋ช…์˜ ํ™œ์„ฑ ํ˜•์‹

2653 }2655 }

2654 ]2656 ]

2655}2657}


2659 2661 

2660```python theme={null}2662```python theme={null}

2661{2663{

2662 "message": str, # Success message2664 "message": str, # ์„ฑ๊ณต ๋ฉ”์‹œ์ง€

2663 "stats": {"total": int, "pending": int, "in_progress": int, "completed": int},2665 "stats": {"total": int, "pending": int, "in_progress": int, "completed": int},

2664}2666}

2665```2667```


2672 2674 

2673```python theme={null}2675```python theme={null}

2674{2676{

2675 "bash_id": str, # The ID of the background shell2677 "bash_id": str, # ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์…ธ์˜ ID

2676 "filter": str | None, # Optional regex to filter output lines2678 "filter": str | None, # ์ถœ๋ ฅ ์ค„์„ ํ•„ํ„ฐ๋งํ•  ์„ ํƒ์  ์ •๊ทœ์‹

2677}2679}

2678```2680```

2679 2681 


2681 2683 

2682```python theme={null}2684```python theme={null}

2683{2685{

2684 "output": str, # New output since last check2686 "output": str, # ๋งˆ์ง€๋ง‰ ํ™•์ธ ์ดํ›„์˜ ์ƒˆ๋กœ์šด ์ถœ๋ ฅ

2685 "status": "running" | "completed" | "failed", # Current shell status2687 "status": "running" | "completed" | "failed", # ํ˜„์žฌ ์…ธ ์ƒํƒœ

2686 "exitCode": int | None, # Exit code when completed2688 "exitCode": int | None, # ์™„๋ฃŒ ์‹œ ์ข…๋ฃŒ ์ฝ”๋“œ

2687}2689}

2688```2690```

2689 2691 


2695 2697 

2696```python theme={null}2698```python theme={null}

2697{2699{

2698 "shell_id": str # The ID of the background shell to kill2700 "shell_id": str # ์ข…๋ฃŒํ•  ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์…ธ์˜ ID

2699}2701}

2700```2702```

2701 2703 


2703 2705 

2704```python theme={null}2706```python theme={null}

2705{2707{

2706 "message": str, # Success message2708 "message": str, # ์„ฑ๊ณต ๋ฉ”์‹œ์ง€

2707 "shell_id": str, # ID of the killed shell2709 "shell_id": str, # ์ข…๋ฃŒ๋œ ์…ธ์˜ ID

2708}2710}

2709```2711```

2710 2712 


2716 2718 

2717```python theme={null}2719```python theme={null}

2718{2720{

2719 "plan": str # The plan to run by the user for approval2721 "plan": str # ์‚ฌ์šฉ์ž ์Šน์ธ์„ ์œ„ํ•ด ์‹คํ–‰ํ•  ๊ณ„ํš

2720}2722}

2721```2723```

2722 2724 


2724 2726 

2725```python theme={null}2727```python theme={null}

2726{2728{

2727 "message": str, # Confirmation message2729 "message": str, # ํ™•์ธ ๋ฉ”์‹œ์ง€

2728 "approved": bool | None, # Whether user approved the plan2730 "approved": bool | None, # ์‚ฌ์šฉ์ž๊ฐ€ ๊ณ„ํš์„ ์Šน์ธํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€

2729}2731}

2730```2732```

2731 2733 


2737 2739 

2738```python theme={null}2740```python theme={null}

2739{2741{

2740 "server": str | None # Optional server name to filter resources by2742 "server": str | None # ๋ฆฌ์†Œ์Šค๋ฅผ ํ•„ํ„ฐ๋งํ•  ์„ ํƒ์  ์„œ๋ฒ„ ์ด๋ฆ„

2741}2743}

2742```2744```

2743 2745 


2766 2768 

2767```python theme={null}2769```python theme={null}

2768{2770{

2769 "server": str, # The MCP server name2771 "server": str, # MCP ์„œ๋ฒ„ ์ด๋ฆ„

2770 "uri": str, # The resource URI to read2772 "uri": str, # ์ฝ์„ ๋ฆฌ์†Œ์Šค URI

2771}2773}

2772```2774```

2773 2775 

Details

308| `tag` | `string \| null` | ํ•„์ˆ˜ | ํƒœ๊ทธ ๋ฌธ์ž์—ด ๋˜๋Š” ์ง€์šฐ๋ ค๋ฉด `null` |308| `tag` | `string \| null` | ํ•„์ˆ˜ | ํƒœ๊ทธ ๋ฌธ์ž์—ด ๋˜๋Š” ์ง€์šฐ๋ ค๋ฉด `null` |

309| `options.dir` | `string` | `undefined` | ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ์ƒ๋žตํ•˜๋ฉด ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค |309| `options.dir` | `string` | `undefined` | ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ์ƒ๋žตํ•˜๋ฉด ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค |

310 310 

311### `resolveSettings()`

312 

313CLI์™€ ๋™์ผํ•œ ๋ณ‘ํ•ฉ ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์–ด์ง„ ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ ํšจ๊ณผ์ ์ธ Claude Code ์„ค์ •์„ ํ•ด๊ฒฐํ•˜๋ฉฐ, Claude CLI๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. `query()` ํ˜ธ์ถœ์„ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ์–ด๋–ค ๊ตฌ์„ฑ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

314 

315<Note>

316 ์ด ํ•จ์ˆ˜๋Š” ์•ŒํŒŒ ๋ฒ„์ „์ด๋ฉฐ ์•ˆ์ •ํ™” ์ „์— API๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CLI ์‹œ์ž‘๊ณผ์˜ ํŒจ๋ฆฌํ‹ฐ๋ฅผ ์œ„ํ•ด macOS plist ๋ฐ Windows HKLM/HKCU๋ฅผ ํฌํ•จํ•œ MDM ์†Œ์Šค๋ฅผ ์ฝ์ง€๋งŒ, ๊ด€๋ฆฌ์ž๊ฐ€ ๊ตฌ์„ฑํ•œ `policyHelper` ์„œ๋ธŒํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. `permissions.defaultMode` ํ•„๋“œ๋Š” ํ”„๋กœ์ ํŠธ ์„ค์ •์„ ํฌํ•จํ•œ ๋ชจ๋“  ๊ณ„์ธต์—์„œ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. CLI๊ฐ€ ๊ถŒํ•œ ์ƒ์Šน ๋ชจ๋“œ๋ฅผ ์ ์šฉํ•˜๊ธฐ ์ „์— ์ ์šฉํ•˜๋Š” ์‹ ๋ขฐ ํ•„ํ„ฐ๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

317</Note>

318 

319```typescript theme={null}

320function resolveSettings(

321 options?: ResolveSettingsOptions

322): Promise<ResolvedSettings>;

323```

324 

325#### ๋งค๊ฐœ๋ณ€์ˆ˜

326 

327`resolveSettings()`๋Š” ๋‹จ์ผ ์˜ต์…˜ ๊ฐ์ฒด๋ฅผ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํ•„๋“œ๋Š” ์„ ํƒ์ ์ž…๋‹ˆ๋‹ค.

328 

329| ๋งค๊ฐœ๋ณ€์ˆ˜ | ํƒ€์ž… | ๊ธฐ๋ณธ๊ฐ’ | ์„ค๋ช… |

330| :------------------------------ | :------------------------------------ | :-------------- | :----------------------------------------------------------------------------- |

331| `options.cwd` | `string` | `process.cwd()` | ํ”„๋กœ์ ํŠธ ๋ฐ ๋กœ์ปฌ ์„ค์ •์„ ์ƒ๋Œ€์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ๋””๋ ‰ํ† ๋ฆฌ |

332| `options.settingSources` | [`SettingSource`](#settingsource)`[]` | ๋ชจ๋“  ์†Œ์Šค | ๋กœ๋“œํ•  ํŒŒ์ผ ์‹œ์Šคํ…œ ์†Œ์Šค์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž, ํ”„๋กœ์ ํŠธ ๋ฐ ๋กœ์ปฌ ์„ค์ •์„ ๊ฑด๋„ˆ๋›ฐ๋ ค๋ฉด `[]`๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ ์ •์ฑ… ์„ค์ •์€ ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค |

333| `options.managedSettings` | `Settings` | `undefined` | ๊ด€๋ฆฌ ์ •์ฑ… ์šฐ์„ ์ˆœ์œ„ ์ˆ˜์ค€์—์„œ ๋ณ‘ํ•ฉ๋œ ์ œํ•œ์  ์ •์ฑ… ๊ณ„์ธต ์„ค์ •์ž…๋‹ˆ๋‹ค. `model`๊ณผ ๊ฐ™์€ ์ œํ•œ์ ์ด์ง€ ์•Š์€ ํ‚ค๋Š” ์ž๋™์œผ๋กœ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค |

334| `options.serverManagedSettings` | `Settings` | `undefined` | `/api/claude_code/settings`์˜ ์„œ๋ฒ„ ๊ด€๋ฆฌ ์„ค์ • ํŽ˜์ด๋กœ๋“œ์ž…๋‹ˆ๋‹ค. ์ œํ•œ์ ์ด์ง€ ์•Š์€ ํ‚ค๋Š” ํ•„ํ„ฐ๋ง ์—†์ด ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค |

335 

336#### ๋ฐ˜ํ™˜ ํƒ€์ž…: `ResolvedSettings`

337 

338`resolveSettings()`๋Š” ๋ณ‘ํ•ฉ๋œ ์„ค์ •๊ณผ ๊ฐ ํ‚ค์— ๊ธฐ์—ฌํ•œ ์†Œ์Šค๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

339 

340| ์†์„ฑ | ํƒ€์ž… | ์„ค๋ช… |

341| :----------- | :-------------------------------------------------- | :----------------------------------------- |

342| `effective` | `Settings` | ๋ชจ๋“  ํ™œ์„ฑํ™”๋œ ์†Œ์Šค๋ฅผ ์šฐ์„ ์ˆœ์œ„ ์ˆœ์„œ๋กœ ์ ์šฉํ•œ ํ›„ ๋ณ‘ํ•ฉ๋œ ์„ค์ • |

343| `provenance` | `Partial<Record<keyof Settings, ProvenanceEntry>>` | `effective`์˜ ๊ฐ ์ตœ์ƒ์œ„ ํ‚ค์— ๋Œ€ํ•ด ๊ฐ’์„ ์ œ๊ณตํ•œ ์†Œ์Šค |

344| `sources` | `Array<{ source, settings, path?, policyOrigin? }>` | ์†Œ์Šค๋ณ„ ์›๋ณธ ์„ค์ •, ๊ฐ€์žฅ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„์—์„œ ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ์ˆœ์„œ๋กœ ์ •๋ ฌ๋จ |

345 

346#### ์˜ˆ์ œ

347 

348์•„๋ž˜ ์˜ˆ์ œ๋Š” ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์„ค์ •์„ ํ•ด๊ฒฐํ•˜๊ณ  ์ •๋ฆฌ ๊ธฐ๊ฐ„์„ ์ œ์–ดํ•˜๋Š” ์†Œ์Šค๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.

349 

350```typescript theme={null}

351import { resolveSettings } from "@anthropic-ai/claude-agent-sdk";

352 

353const { effective, provenance } = await resolveSettings({

354 cwd: "/path/to/project",

355 settingSources: ["user", "project", "local"],

356});

357 

358console.log(`Cleanup period: ${effective.cleanupPeriodDays} days`);

359console.log(`Set by: ${provenance.cleanupPeriodDays?.source}`);

360```

361 

311## ํƒ€์ž…362## ํƒ€์ž…

312 363 

313### `Options`364### `Options`


864 | SDKFilesPersistedEvent915 | SDKFilesPersistedEvent

865 | SDKToolUseSummaryMessage916 | SDKToolUseSummaryMessage

866 | SDKRateLimitEvent917 | SDKRateLimitEvent

918 | SDKPermissionDeniedMessage

867 | SDKPromptSuggestionMessage;919 | SDKPromptSuggestionMessage;

868```920```

869 921 


1052};1104};

1053```1105```

1054 1106 

1107### `SDKPermissionDeniedMessage`

1108 

1109๊ถŒํ•œ ์‹œ์Šคํ…œ์ด ๋Œ€ํ™”ํ˜• ํ”„๋กฌํ”„ํŠธ ์—†์ด ๋„๊ตฌ ํ˜ธ์ถœ์„ ์ž๋™์œผ๋กœ ๊ฑฐ๋ถ€ํ•  ๋•Œ ๋‚ด๋ณด๋‚ด์ง€๋Š” ์ŠคํŠธ๋ฆผ ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฑฐ๋ถ€๋ฅผ UI์— ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋’ค๋”ฐ๋ฅด๋Š” `is_error` ๋„๊ตฌ ๊ฒฐ๊ณผ๋งŒ ๊ด€์ฐฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋Œ€ํ™”ํ˜• ์š”์ฒญ ๊ฒฝ๋กœ๋Š” [`canUseTool`](#canusetool) ์ฝœ๋ฐฑ์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ณ„๋„๋กœ ๋„๋‹ฌํ•ฉ๋‹ˆ๋‹ค. `PreToolUse` ํ›…์—์„œ ๋ฐœ๊ธ‰๋œ ๊ฑฐ๋ถ€๋Š” ์ด ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ๋ณด๊ณ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

1110 

1111์ด ์ด๋ฒคํŠธ๋Š” Claude Code v2.1.136 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

1112 

1113```typescript theme={null}

1114type SDKPermissionDeniedMessage = {

1115 type: "system";

1116 subtype: "permission_denied";

1117 tool_name: string;

1118 tool_use_id: string;

1119 agent_id?: string;

1120 decision_reason_type?: string;

1121 decision_reason?: string;

1122 message: string;

1123 uuid: UUID;

1124 session_id: string;

1125};

1126```

1127 

1128| ํ•„๋“œ | ํƒ€์ž… | ์„ค๋ช… |

1129| ---------------------- | -------- | --------------------------------------------------------------------------------- |

1130| `tool_name` | `string` | ๊ฑฐ๋ถ€๋œ ๋„๊ตฌ์˜ ์ด๋ฆ„ |

1131| `tool_use_id` | `string` | ์ด ๊ฑฐ๋ถ€๊ฐ€ ๋‹ตํ•˜๋Š” `tool_use` ๋ธ”๋ก์˜ ID |

1132| `agent_id` | `string` | ๊ฑฐ๋ถ€๋œ ํ˜ธ์ถœ์ด ์„œ๋ธŒ์—์ด์ „ํŠธ ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์„œ๋ธŒ์—์ด์ „ํŠธ ID์ž…๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ์ธก ๋ผ์šฐํŒ…์„ ์œ„ํ•ด `can_use_tool`์˜ ํ•„๋“œ๋ฅผ ๋ฏธ๋Ÿฌ๋งํ•ฉ๋‹ˆ๋‹ค |

1133| `decision_reason_type` | `string` | `"rule"`, `"mode"`, `"classifier"` ๋˜๋Š” `"asyncAgent"`์™€ ๊ฐ™์ด ๊ฒฐ์ •ํ•œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ํŒ๋ณ„์ž |

1134| `decision_reason` | `string` | ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•  ๋•Œ ๊ฒฐ์ • ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ธ๊ฐ„์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ด์œ  |

1135| `message` | `string` | `tool_result`์—์„œ ๋ชจ๋ธ์— ๋ฐ˜ํ™˜๋œ ๊ฑฐ๋ถ€ ๋ฉ”์‹œ์ง€ |

1136 

1055### `SDKPermissionDenial`1137### `SDKPermissionDenial`

1056 1138 

1057๊ฑฐ๋ถ€๋œ ๋„๊ตฌ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ •๋ณด์ž…๋‹ˆ๋‹ค.1139๊ฑฐ๋ถ€๋œ ๋„๊ตฌ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ •๋ณด์ž…๋‹ˆ๋‹ค.

agent-sdk/user-input.md +810 โˆ’0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# ์Šน์ธ ๋ฐ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ฒ˜๋ฆฌ

6 

7> Claude์˜ ์Šน์ธ ์š”์ฒญ ๋ฐ ๋ช…ํ™•ํ™” ์งˆ๋ฌธ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œํ•œ ํ›„ SDK์— ์‚ฌ์šฉ์ž์˜ ๊ฒฐ์ •์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

8 

9์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” ๋™์•ˆ Claude๋Š” ๋•Œ๋•Œ๋กœ ์‚ฌ์šฉ์ž์™€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ธฐ ์ „์— ๊ถŒํ•œ์ด ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๋ฌผ์–ด๋ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด๋Ÿฌํ•œ ์š”์ฒญ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œํ•˜์—ฌ Claude๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์œผ๋กœ ๊ณ„์† ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

10 

11Claude๋Š” ๋‘ ๊ฐ€์ง€ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. **๋„๊ตฌ ์‚ฌ์šฉ ๊ถŒํ•œ**์ด ํ•„์š”ํ•  ๋•Œ(ํŒŒ์ผ ์‚ญ์ œ ๋˜๋Š” ๋ช…๋ น ์‹คํ–‰ ๋“ฑ)์™€ **๋ช…ํ™•ํ™” ์งˆ๋ฌธ**์ด ์žˆ์„ ๋•Œ(`AskUserQuestion` ๋„๊ตฌ๋ฅผ ํ†ตํ•ด)์ž…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค `canUseTool` ์ฝœ๋ฐฑ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ฉฐ, ์ด๋Š” ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ๊นŒ์ง€ ์‹คํ–‰์„ ์ผ์‹œ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Claude๊ฐ€ ์™„๋ฃŒ๋˜๊ณ  ๋‹ค์Œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์ธ ๋Œ€ํ™” ํ„ด๊ณผ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

12 

13๋ช…ํ™•ํ™” ์งˆ๋ฌธ์˜ ๊ฒฝ์šฐ Claude๊ฐ€ ์งˆ๋ฌธ๊ณผ ์˜ต์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์—ญํ• ์€ ์ด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ์‹œํ•˜๊ณ  ์„ ํƒ ์‚ฌํ•ญ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํ๋ฆ„์— ์ž์‹ ์˜ ์งˆ๋ฌธ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ์ง์ ‘ ๋ฌผ์–ด๋ด์•ผ ํ•  ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์—์„œ ๋ณ„๋„๋กœ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

14 

15์ฝœ๋ฐฑ์€ ๋ฌด๊ธฐํ•œ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์œ ์ง€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ์ด ๋ฐ˜ํ™˜๋  ๋•Œ๊นŒ์ง€ ์‹คํ–‰์ด ์ผ์‹œ ์ค‘์ง€๋˜๋ฉฐ, SDK๋Š” ์ฟผ๋ฆฌ ์ž์ฒด๊ฐ€ ์ทจ์†Œ๋  ๋•Œ๋งŒ ๋Œ€๊ธฐ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์‹คํ–‰ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์˜ค๋ž˜ ์‘๋‹ตํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค๋ฉด, TypeScript SDK๋Š” [`defer` ํ›… ๊ฒฐ์ •](/ko/hooks#defer-a-tool-call-for-later)์„ ์ง€์›ํ•˜๋ฏ€๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ๋‚˜์ค‘์— ์ง€์†๋œ ์„ธ์…˜์—์„œ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์€ Python SDK์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

16 

17์ด ๊ฐ€์ด๋“œ๋Š” ๊ฐ ์œ ํ˜•์˜ ์š”์ฒญ์„ ๊ฐ์ง€ํ•˜๊ณ  ์ ์ ˆํ•˜๊ฒŒ ์‘๋‹ตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

18 

19## Claude๊ฐ€ ์ž…๋ ฅ์ด ํ•„์š”ํ•œ ์‹œ์  ๊ฐ์ง€

20 

21์ฟผ๋ฆฌ ์˜ต์…˜์— `canUseTool` ์ฝœ๋ฐฑ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ์€ Claude๊ฐ€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋˜๋ฉฐ, ๋„๊ตฌ ์ด๋ฆ„๊ณผ ์ž…๋ ฅ์„ ์ธ์ˆ˜๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.

22 

23<CodeGroup>

24 ```python Python theme={null}

25 async def handle_tool_request(tool_name, input_data, context):

26 # ์‚ฌ์šฉ์ž์—๊ฒŒ ํ”„๋กฌํ”„ํŠธํ•˜๊ณ  ํ—ˆ์šฉ ๋˜๋Š” ๊ฑฐ๋ถ€ ๋ฐ˜ํ™˜

27 ...

28 

29 

30 options = ClaudeAgentOptions(can_use_tool=handle_tool_request)

31 ```

32 

33 ```typescript TypeScript theme={null}

34 async function handleToolRequest(toolName, input, options) {

35 // options includes { signal: AbortSignal, suggestions?: PermissionUpdate[] }

36 // ์‚ฌ์šฉ์ž์—๊ฒŒ ํ”„๋กฌํ”„ํŠธํ•˜๊ณ  ํ—ˆ์šฉ ๋˜๋Š” ๊ฑฐ๋ถ€ ๋ฐ˜ํ™˜

37 }

38 

39 const options = { canUseTool: handleToolRequest };

40 ```

41</CodeGroup>

42 

43์ฝœ๋ฐฑ์€ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

44 

451. **๋„๊ตฌ๊ฐ€ ์Šน์ธ ํ•„์š”**: Claude๊ฐ€ [๊ถŒํ•œ ๊ทœ์น™](/ko/agent-sdk/permissions) ๋˜๋Š” ๋ชจ๋“œ์— ์˜ํ•ด ์ž๋™ ์Šน์ธ๋˜์ง€ ์•Š์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋„๊ตฌ์— ๋Œ€ํ•ด `tool_name`์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: `"Bash"`, `"Write"`).

462. **Claude๊ฐ€ ์งˆ๋ฌธํ•จ**: Claude๊ฐ€ `AskUserQuestion` ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. `tool_name == "AskUserQuestion"`์„ ํ™•์ธํ•˜์—ฌ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. `tools` ๋ฐฐ์—ด์„ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜๋ ค๋ฉด `AskUserQuestion`์„ ํฌํ•จํ•˜์‹ญ์‹œ์˜ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ [๋ช…ํ™•ํ™” ์งˆ๋ฌธ ์ฒ˜๋ฆฌ](#๋ช…ํ™•ํ™”-์งˆ๋ฌธ-์ฒ˜๋ฆฌ)๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

47 

48<Note>

49 ์‚ฌ์šฉ์ž์—๊ฒŒ ํ”„๋กฌํ”„ํŠธํ•˜์ง€ ์•Š๊ณ  ๋„๊ตฌ๋ฅผ ์ž๋™์œผ๋กœ ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€ํ•˜๋ ค๋ฉด [ํ›…](/ko/agent-sdk/hooks)์„ ๋Œ€์‹  ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ํ›…์€ `canUseTool` ์ „์— ์‹คํ–‰๋˜๋ฉฐ ์ž์‹ ์˜ ๋กœ์ง์— ๋”ฐ๋ผ ์š”์ฒญ์„ ํ—ˆ์šฉ, ๊ฑฐ๋ถ€ ๋˜๋Š” ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [`PermissionRequest` ํ›…](/ko/agent-sdk/hooks#available-hooks)์„ ์‚ฌ์šฉํ•˜์—ฌ Claude๊ฐ€ ์Šน์ธ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์„ ๋•Œ ์™ธ๋ถ€ ์•Œ๋ฆผ(Slack, ์ด๋ฉ”์ผ, ํ‘ธ์‹œ)์„ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

50</Note>

51 

52## ๋„๊ตฌ ์Šน์ธ ์š”์ฒญ ์ฒ˜๋ฆฌ

53 

54์ฟผ๋ฆฌ ์˜ต์…˜์— `canUseTool` ์ฝœ๋ฐฑ์„ ์ „๋‹ฌํ•˜๋ฉด, Claude๊ฐ€ ์ž๋™ ์Šน์ธ๋˜์ง€ ์•Š์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ์€ ์„ธ ๊ฐ€์ง€ ์ธ์ˆ˜๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

55 

56| ์ธ์ˆ˜ | ์„ค๋ช… |

57| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

58| `toolName` | Claude๊ฐ€ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๋„๊ตฌ์˜ ์ด๋ฆ„(์˜ˆ: `"Bash"`, `"Write"`, `"Edit"`) |

59| `input` | Claude๊ฐ€ ๋„๊ตฌ์— ์ „๋‹ฌํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๋‚ด์šฉ์€ ๋„๊ตฌ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. |

60| `options` (TS) / `context` (Python) | ์„ ํƒ์  `suggestions`(์žฌํ”„๋กฌํ”„ํŠธ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ์ œ์•ˆ๋œ `PermissionUpdate` ํ•ญ๋ชฉ)๊ณผ ์ทจ์†Œ ์‹ ํ˜ธ๋ฅผ ํฌํ•จํ•œ ์ถ”๊ฐ€ ์ปจํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค. TypeScript์—์„œ `signal`์€ `AbortSignal`์ž…๋‹ˆ๋‹ค. Python์—์„œ ์‹ ํ˜ธ ํ•„๋“œ๋Š” ํ–ฅํ›„ ์‚ฌ์šฉ์„ ์œ„ํ•ด ์˜ˆ์•ฝ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Python์˜ ๊ฒฝ์šฐ [`ToolPermissionContext`](/ko/agent-sdk/python#toolpermissioncontext)๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. |

61 

62`input` ๊ฐ์ฒด์—๋Š” ๋„๊ตฌ๋ณ„ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์˜ˆ:

63 

64| ๋„๊ตฌ | ์ž…๋ ฅ ํ•„๋“œ |

65| ------- | --------------------------------------- |

66| `Bash` | `command`, `description`, `timeout` |

67| `Write` | `file_path`, `content` |

68| `Edit` | `file_path`, `old_string`, `new_string` |

69| `Read` | `file_path`, `offset`, `limit` |

70 

71์™„์ „ํ•œ ์ž…๋ ฅ ์Šคํ‚ค๋งˆ๋Š” SDK ์ฐธ์กฐ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. [Python](/ko/agent-sdk/python#tool-input%2Foutput-types) | [TypeScript](/ko/agent-sdk/typescript#tool-input-types).

72 

73์ด ์ •๋ณด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œํ•˜์—ฌ ์ž‘์—…์„ ํ—ˆ์šฉํ• ์ง€ ๊ฑฐ๋ถ€ํ• ์ง€ ๊ฒฐ์ •ํ•œ ํ›„ ์ ์ ˆํ•œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

74 

75๋‹ค์Œ ์˜ˆ์ œ๋Š” Claude์—๊ฒŒ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์‚ญ์ œํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. Claude๊ฐ€ ๊ฐ ์ž‘์—…์„ ์‹œ๋„ํ•  ๋•Œ ์ฝœ๋ฐฑ์€ ๋„๊ตฌ ์š”์ฒญ์„ ํ„ฐ๋ฏธ๋„์— ์ธ์‡„ํ•˜๊ณ  y/n ์Šน์ธ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

76 

77<CodeGroup>

78 ```python Python theme={null}

79 import asyncio

80 

81 from claude_agent_sdk import ClaudeAgentOptions, ResultMessage, query

82 from claude_agent_sdk.types import (

83 HookMatcher,

84 PermissionResultAllow,

85 PermissionResultDeny,

86 ToolPermissionContext,

87 )

88 

89 

90 async def can_use_tool(

91 tool_name: str, input_data: dict, context: ToolPermissionContext

92 ) -> PermissionResultAllow | PermissionResultDeny:

93 # ๋„๊ตฌ ์š”์ฒญ ํ‘œ์‹œ

94 print(f"\nTool: {tool_name}")

95 if tool_name == "Bash":

96 print(f"Command: {input_data.get('command')}")

97 if input_data.get("description"):

98 print(f"Description: {input_data.get('description')}")

99 else:

100 print(f"Input: {input_data}")

101 

102 # ์‚ฌ์šฉ์ž ์Šน์ธ ๋ฐ›๊ธฐ

103 response = input("Allow this action? (y/n): ")

104 

105 # ์‚ฌ์šฉ์ž์˜ ์‘๋‹ต์— ๋”ฐ๋ผ ํ—ˆ์šฉ ๋˜๋Š” ๊ฑฐ๋ถ€ ๋ฐ˜ํ™˜

106 if response.lower() == "y":

107 # ํ—ˆ์šฉ: ๋„๊ตฌ๊ฐ€ ์›๋ณธ(๋˜๋Š” ์ˆ˜์ •๋œ) ์ž…๋ ฅ์œผ๋กœ ์‹คํ–‰๋จ

108 return PermissionResultAllow(updated_input=input_data)

109 else:

110 # ๊ฑฐ๋ถ€: ๋„๊ตฌ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์Œ, Claude๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ด„

111 return PermissionResultDeny(message="User denied this action")

112 

113 

114 # ํ•„์ˆ˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ๋”๋ฏธ ํ›…์ด can_use_tool์„ ์œ„ํ•ด ์ŠคํŠธ๋ฆผ์„ ์—ด์–ด ๋‘ 

115 async def dummy_hook(input_data, tool_use_id, context):

116 return {"continue_": True}

117 

118 

119 async def prompt_stream():

120 yield {

121 "type": "user",

122 "message": {

123 "role": "user",

124 "content": "Create a test file in /tmp and then delete it",

125 },

126 }

127 

128 

129 async def main():

130 async for message in query(

131 prompt=prompt_stream(),

132 options=ClaudeAgentOptions(

133 can_use_tool=can_use_tool,

134 hooks={"PreToolUse": [HookMatcher(matcher=None, hooks=[dummy_hook])]},

135 ),

136 ):

137 if isinstance(message, ResultMessage) and message.subtype == "success":

138 print(message.result)

139 

140 

141 asyncio.run(main())

142 ```

143 

144 ```typescript TypeScript theme={null}

145 import { query } from "@anthropic-ai/claude-agent-sdk";

146 import * as readline from "readline";

147 

148 // ํ„ฐ๋ฏธ๋„์—์„œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ํ”„๋กฌํ”„ํŠธํ•˜๋Š” ํ—ฌํผ

149 function prompt(question: string): Promise<string> {

150 const rl = readline.createInterface({

151 input: process.stdin,

152 output: process.stdout

153 });

154 return new Promise((resolve) =>

155 rl.question(question, (answer) => {

156 rl.close();

157 resolve(answer);

158 })

159 );

160 }

161 

162 for await (const message of query({

163 prompt: "Create a test file in /tmp and then delete it",

164 options: {

165 canUseTool: async (toolName, input) => {

166 // ๋„๊ตฌ ์š”์ฒญ ํ‘œ์‹œ

167 console.log(`\nTool: ${toolName}`);

168 if (toolName === "Bash") {

169 console.log(`Command: ${input.command}`);

170 if (input.description) console.log(`Description: ${input.description}`);

171 } else {

172 console.log(`Input: ${JSON.stringify(input, null, 2)}`);

173 }

174 

175 // ์‚ฌ์šฉ์ž ์Šน์ธ ๋ฐ›๊ธฐ

176 const response = await prompt("Allow this action? (y/n): ");

177 

178 // ์‚ฌ์šฉ์ž์˜ ์‘๋‹ต์— ๋”ฐ๋ผ ํ—ˆ์šฉ ๋˜๋Š” ๊ฑฐ๋ถ€ ๋ฐ˜ํ™˜

179 if (response.toLowerCase() === "y") {

180 // ํ—ˆ์šฉ: ๋„๊ตฌ๊ฐ€ ์›๋ณธ(๋˜๋Š” ์ˆ˜์ •๋œ) ์ž…๋ ฅ์œผ๋กœ ์‹คํ–‰๋จ

181 return { behavior: "allow", updatedInput: input };

182 } else {

183 // ๊ฑฐ๋ถ€: ๋„๊ตฌ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์Œ, Claude๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ด„

184 return { behavior: "deny", message: "User denied this action" };

185 }

186 }

187 }

188 })) {

189 if ("result" in message) console.log(message.result);

190 }

191 ```

192</CodeGroup>

193 

194<Note>

195 Python์—์„œ `can_use_tool`์€ [์ŠคํŠธ๋ฆฌ๋ฐ ๋ชจ๋“œ](/ko/agent-sdk/streaming-vs-single-mode)์™€ ์ŠคํŠธ๋ฆผ์„ ์—ด์–ด ๋‘๊ธฐ ์œ„ํ•ด `{"continue_": True}`๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” `PreToolUse` ํ›…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ›…์ด ์—†์œผ๋ฉด ๊ถŒํ•œ ์ฝœ๋ฐฑ์ด ํ˜ธ์ถœ๋˜๊ธฐ ์ „์— ์ŠคํŠธ๋ฆผ์ด ๋‹ซํž™๋‹ˆ๋‹ค.

196</Note>

197 

198์ด ์˜ˆ์ œ๋Š” `y` ์ด์™ธ์˜ ๋ชจ๋“  ์ž…๋ ฅ์ด ๊ฑฐ๋ถ€๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” y/n ํ๋ฆ„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜, Claude๋ฅผ ์™„์ „ํžˆ ๋ฆฌ๋””๋ ‰์…˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋” ํ’๋ถ€ํ•œ UI๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์€ [๋„๊ตฌ ์š”์ฒญ์— ์‘๋‹ต](#๋„๊ตฌ-์š”์ฒญ์—-์‘๋‹ต)์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

199 

200### ๋„๊ตฌ ์š”์ฒญ์— ์‘๋‹ต

201 

202์ฝœ๋ฐฑ์€ ๋‘ ๊ฐ€์ง€ ์‘๋‹ต ์œ ํ˜• ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

203 

204| ์‘๋‹ต | Python | TypeScript |

205| ------ | ------------------------------------------ | ------------------------------------- |

206| **ํ—ˆ์šฉ** | `PermissionResultAllow(updated_input=...)` | `{ behavior: "allow", updatedInput }` |

207| **๊ฑฐ๋ถ€** | `PermissionResultDeny(message=...)` | `{ behavior: "deny", message }` |

208 

209ํ—ˆ์šฉํ•  ๋•Œ ๋„๊ตฌ ์ž…๋ ฅ(์›๋ณธ ๋˜๋Š” ์ˆ˜์ •๋จ)์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๋ถ€ํ•  ๋•Œ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Claude๋Š” ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ณ  ์ ‘๊ทผ ๋ฐฉ์‹์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

210 

211<CodeGroup>

212 ```python Python theme={null}

213 from claude_agent_sdk.types import PermissionResultAllow, PermissionResultDeny

214 

215 # ๋„๊ตฌ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ—ˆ์šฉ

216 return PermissionResultAllow(updated_input=input_data)

217 

218 # ๋„๊ตฌ ์ฐจ๋‹จ

219 return PermissionResultDeny(message="User rejected this action")

220 ```

221 

222 ```typescript TypeScript theme={null}

223 // ๋„๊ตฌ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ—ˆ์šฉ

224 return { behavior: "allow", updatedInput: input };

225 

226 // ๋„๊ตฌ ์ฐจ๋‹จ

227 return { behavior: "deny", message: "User rejected this action" };

228 ```

229</CodeGroup>

230 

231ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฑฐ๋ถ€ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ๋„๊ตฌ์˜ ์ž…๋ ฅ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ Claude๊ฐ€ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์กฐ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

232 

233* **์Šน์ธ**: ๋„๊ตฌ๊ฐ€ Claude๊ฐ€ ์š”์ฒญํ•œ ๋Œ€๋กœ ์‹คํ–‰๋˜๋„๋ก ํ—ˆ์šฉ

234* **๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ํ•จ๊ป˜ ์Šน์ธ**: ์‹คํ–‰ ์ „์— ์ž…๋ ฅ ์ˆ˜์ •(์˜ˆ: ๊ฒฝ๋กœ ์ •์ œ, ์ œ์•ฝ ์กฐ๊ฑด ์ถ”๊ฐ€)

235* **๊ฑฐ๋ถ€**: ๋„๊ตฌ๋ฅผ ์ฐจ๋‹จํ•˜๊ณ  ์ด์œ ๋ฅผ Claude์— ์•Œ๋ฆผ

236* **๋Œ€์•ˆ ์ œ์•ˆ**: ์ฐจ๋‹จํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์œผ๋กœ Claude๋ฅผ ์•ˆ๋‚ด

237* **์™„์ „ํžˆ ๋ฆฌ๋””๋ ‰์…˜**: [์ŠคํŠธ๋ฆฌ๋ฐ ์ž…๋ ฅ](/ko/agent-sdk/streaming-vs-single-mode)์„ ์‚ฌ์šฉํ•˜์—ฌ Claude์— ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ์ง€์‹œ๋ฅผ ๋ณด๋ƒ„

238 

239<Tabs>

240 <Tab title="์Šน์ธ">

241 ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—…์„ ๊ทธ๋Œ€๋กœ ์Šน์ธํ•ฉ๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ์—์„œ `input`์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ „๋‹ฌํ•˜๋ฉด ๋„๊ตฌ๊ฐ€ Claude๊ฐ€ ์š”์ฒญํ•œ ๋Œ€๋กœ ์ •ํ™•ํžˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

242 

243 <CodeGroup>

244 ```python Python theme={null}

245 async def can_use_tool(tool_name, input_data, context):

246 print(f"Claude wants to use {tool_name}")

247 approved = await ask_user("Allow this action?")

248 

249 if approved:

250 return PermissionResultAllow(updated_input=input_data)

251 return PermissionResultDeny(message="User declined")

252 ```

253 

254 ```typescript TypeScript theme={null}

255 canUseTool: async (toolName, input) => {

256 console.log(`Claude wants to use ${toolName}`);

257 const approved = await askUser("Allow this action?");

258 

259 if (approved) {

260 return { behavior: "allow", updatedInput: input };

261 }

262 return { behavior: "deny", message: "User declined" };

263 };

264 ```

265 </CodeGroup>

266 </Tab>

267 

268 <Tab title="๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ํ•จ๊ป˜ ์Šน์ธ">

269 ์‚ฌ์šฉ์ž๊ฐ€ ์Šน์ธํ•˜์ง€๋งŒ ๋จผ์ € ์š”์ฒญ์„ ์ˆ˜์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋„๊ตฌ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ์ž…๋ ฅ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Claude๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ง€๋งŒ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์•Œ๋ ค์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ ์ •์ œ, ์ œ์•ฝ ์กฐ๊ฑด ์ถ”๊ฐ€ ๋˜๋Š” ์•ก์„ธ์Šค ๋ฒ”์œ„ ์ง€์ •์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

270 

271 <CodeGroup>

272 ```python Python theme={null}

273 async def can_use_tool(tool_name, input_data, context):

274 if tool_name == "Bash":

275 # ์‚ฌ์šฉ์ž๊ฐ€ ์Šน์ธํ–ˆ์ง€๋งŒ ๋ชจ๋“  ๋ช…๋ น์„ ์ƒŒ๋“œ๋ฐ•์Šค๋กœ ๋ฒ”์œ„ ์ง€์ •

276 sandboxed_input = {**input_data}

277 sandboxed_input["command"] = input_data["command"].replace(

278 "/tmp", "/tmp/sandbox"

279 )

280 return PermissionResultAllow(updated_input=sandboxed_input)

281 return PermissionResultAllow(updated_input=input_data)

282 ```

283 

284 ```typescript TypeScript theme={null}

285 canUseTool: async (toolName, input) => {

286 if (toolName === "Bash") {

287 // ์‚ฌ์šฉ์ž๊ฐ€ ์Šน์ธํ–ˆ์ง€๋งŒ ๋ชจ๋“  ๋ช…๋ น์„ ์ƒŒ๋“œ๋ฐ•์Šค๋กœ ๋ฒ”์œ„ ์ง€์ •

288 const sandboxedInput = {

289 ...input,

290 command: input.command.replace("/tmp", "/tmp/sandbox")

291 };

292 return { behavior: "allow", updatedInput: sandboxedInput };

293 }

294 return { behavior: "allow", updatedInput: input };

295 };

296 ```

297 </CodeGroup>

298 </Tab>

299 

300 <Tab title="๊ฑฐ๋ถ€">

301 ์‚ฌ์šฉ์ž๊ฐ€ ์ด ์ž‘์—…์ด ๋ฐœ์ƒํ•˜๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋„๊ตฌ๋ฅผ ์ฐจ๋‹จํ•˜๊ณ  ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Claude๋Š” ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ณ  ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

302 

303 <CodeGroup>

304 ```python Python theme={null}

305 async def can_use_tool(tool_name, input_data, context):

306 approved = await ask_user(f"Allow {tool_name}?")

307 

308 if not approved:

309 return PermissionResultDeny(message="User rejected this action")

310 return PermissionResultAllow(updated_input=input_data)

311 ```

312 

313 ```typescript TypeScript theme={null}

314 canUseTool: async (toolName, input) => {

315 const approved = await askUser(`Allow ${toolName}?`);

316 

317 if (!approved) {

318 return {

319 behavior: "deny",

320 message: "User rejected this action"

321 };

322 }

323 return { behavior: "allow", updatedInput: input };

324 };

325 ```

326 </CodeGroup>

327 </Tab>

328 

329 <Tab title="๋Œ€์•ˆ ์ œ์•ˆ">

330 ์‚ฌ์šฉ์ž๊ฐ€ ์ด ํŠน์ • ์ž‘์—…์„ ์›ํ•˜์ง€ ์•Š์ง€๋งŒ ๋‹ค๋ฅธ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„๊ตฌ๋ฅผ ์ฐจ๋‹จํ•˜๊ณ  ๋ฉ”์‹œ์ง€์— ์ง€์นจ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. Claude๋Š” ์ด๋ฅผ ์ฝ๊ณ  ํ”ผ๋“œ๋ฐฑ์— ๋”ฐ๋ผ ์ง„ํ–‰ ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

331 

332 <CodeGroup>

333 ```python Python theme={null}

334 async def can_use_tool(tool_name, input_data, context):

335 if tool_name == "Bash" and "rm" in input_data.get("command", ""):

336 # ์‚ฌ์šฉ์ž๊ฐ€ ์‚ญ์ œ๋ฅผ ์›ํ•˜์ง€ ์•Š์Œ, ๋Œ€์‹  ๋ณด๊ด€์„ ์ œ์•ˆ

337 return PermissionResultDeny(

338 message="User doesn't want to delete files. They asked if you could compress them into an archive instead."

339 )

340 return PermissionResultAllow(updated_input=input_data)

341 ```

342 

343 ```typescript TypeScript theme={null}

344 canUseTool: async (toolName, input) => {

345 if (toolName === "Bash" && input.command.includes("rm")) {

346 // ์‚ฌ์šฉ์ž๊ฐ€ ์‚ญ์ œ๋ฅผ ์›ํ•˜์ง€ ์•Š์Œ, ๋Œ€์‹  ๋ณด๊ด€์„ ์ œ์•ˆ

347 return {

348 behavior: "deny",

349 message:

350 "User doesn't want to delete files. They asked if you could compress them into an archive instead."

351 };

352 }

353 return { behavior: "allow", updatedInput: input };

354 };

355 ```

356 </CodeGroup>

357 </Tab>

358 

359 <Tab title="์™„์ „ํžˆ ๋ฆฌ๋””๋ ‰์…˜">

360 ๋ฐฉํ–ฅ์˜ ์™„์ „ํ•œ ๋ณ€๊ฒฝ(๋‹จ์ˆœํ•œ ๋ฐ€์–ด๋ถ™์ด๊ธฐ๊ฐ€ ์•„๋‹Œ)์˜ ๊ฒฝ์šฐ [์ŠคํŠธ๋ฆฌ๋ฐ ์ž…๋ ฅ](/ko/agent-sdk/streaming-vs-single-mode)์„ ์‚ฌ์šฉํ•˜์—ฌ Claude์— ์ƒˆ๋กœ์šด ์ง€์‹œ๋ฅผ ์ง์ ‘ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด๋Š” ํ˜„์žฌ ๋„๊ตฌ ์š”์ฒญ์„ ์šฐํšŒํ•˜๊ณ  Claude์— ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ์ง€์‹œ๋ฅผ ๋”ฐ๋ฅด๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

361 </Tab>

362</Tabs>

363 

364## ๋ช…ํ™•ํ™” ์งˆ๋ฌธ ์ฒ˜๋ฆฌ

365 

366Claude๊ฐ€ ์—ฌ๋Ÿฌ ์œ ํšจํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์žˆ๋Š” ์ž‘์—…์— ๋Œ€ํ•ด ๋” ๋งŽ์€ ๋ฐฉํ–ฅ์ด ํ•„์š”ํ•  ๋•Œ `AskUserQuestion` ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” `toolName`์ด `AskUserQuestion`์œผ๋กœ ์„ค์ •๋œ `canUseTool` ์ฝœ๋ฐฑ์„ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ์—๋Š” Claude์˜ ์งˆ๋ฌธ์ด ๊ฐ๊ด€์‹ ์˜ต์…˜์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œํ•˜๊ณ  ์„ ํƒ ์‚ฌํ•ญ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

367 

368<Tip>

369 ๋ช…ํ™•ํ™” ์งˆ๋ฌธ์€ ํŠนํžˆ [`plan` ๋ชจ๋“œ](/ko/agent-sdk/permissions#plan-mode-plan)์—์„œ ํ”ํ•˜๋ฉฐ, Claude๊ฐ€ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ๊ณ„ํš์„ ์ œ์•ˆํ•˜๊ธฐ ์ „์— ์งˆ๋ฌธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ณ„ํš ๋ชจ๋“œ๋ฅผ Claude๊ฐ€ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ˆ˜์ง‘ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๋Œ€ํ™”ํ˜• ์›Œํฌํ”Œ๋กœ์šฐ์— ์ด์ƒ์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

370</Tip>

371 

372๋‹ค์Œ ๋‹จ๊ณ„๋Š” ๋ช…ํ™•ํ™” ์งˆ๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

373 

374<Steps>

375 <Step title="canUseTool ์ฝœ๋ฐฑ ์ „๋‹ฌ">

376 ์ฟผ๋ฆฌ ์˜ต์…˜์— `canUseTool` ์ฝœ๋ฐฑ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ `AskUserQuestion`์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Claude์˜ ๊ธฐ๋Šฅ์„ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด `tools` ๋ฐฐ์—ด์„ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ(์˜ˆ: `Read`, `Glob` ๋ฐ `Grep`๋งŒ ์žˆ๋Š” ์ฝ๊ธฐ ์ „์šฉ ์—์ด์ „ํŠธ), ๊ทธ ๋ฐฐ์—ด์— `AskUserQuestion`์„ ํฌํ•จํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Claude๊ฐ€ ๋ช…ํ™•ํ™” ์งˆ๋ฌธ์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

377 

378 <CodeGroup>

379 ```python Python theme={null}

380 async for message in query(

381 prompt="Analyze this codebase",

382 options=ClaudeAgentOptions(

383 # ๋„๊ตฌ ๋ชฉ๋ก์— AskUserQuestion ํฌํ•จ

384 tools=["Read", "Glob", "Grep", "AskUserQuestion"],

385 can_use_tool=can_use_tool,

386 ),

387 ):

388 print(message)

389 ```

390 

391 ```typescript TypeScript theme={null}

392 for await (const message of query({

393 prompt: "Analyze this codebase",

394 options: {

395 // ๋„๊ตฌ ๋ชฉ๋ก์— AskUserQuestion ํฌํ•จ

396 tools: ["Read", "Glob", "Grep", "AskUserQuestion"],

397 canUseTool: async (toolName, input) => {

398 // ๋ช…ํ™•ํ™” ์งˆ๋ฌธ์„ ์—ฌ๊ธฐ์„œ ์ฒ˜๋ฆฌ

399 }

400 }

401 })) {

402 console.log(message);

403 }

404 ```

405 </CodeGroup>

406 </Step>

407 

408 <Step title="AskUserQuestion ๊ฐ์ง€">

409 ์ฝœ๋ฐฑ์—์„œ `toolName`์ด `AskUserQuestion`๊ณผ ๊ฐ™์€์ง€ ํ™•์ธํ•˜์—ฌ ๋‹ค๋ฅธ ๋„๊ตฌ์™€ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

410 

411 <CodeGroup>

412 ```python Python theme={null}

413 async def can_use_tool(tool_name: str, input_data: dict, context):

414 if tool_name == "AskUserQuestion":

415 # ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋‹ต๋ณ€์„ ์ˆ˜์ง‘ํ•˜๋Š” ๊ตฌํ˜„

416 return await handle_clarifying_questions(input_data)

417 # ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ

418 return await prompt_for_approval(tool_name, input_data)

419 ```

420 

421 ```typescript TypeScript theme={null}

422 canUseTool: async (toolName, input) => {

423 if (toolName === "AskUserQuestion") {

424 // ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋‹ต๋ณ€์„ ์ˆ˜์ง‘ํ•˜๋Š” ๊ตฌํ˜„

425 return handleClarifyingQuestions(input);

426 }

427 // ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ

428 return promptForApproval(toolName, input);

429 };

430 ```

431 </CodeGroup>

432 </Step>

433 

434 <Step title="์งˆ๋ฌธ ์ž…๋ ฅ ๊ตฌ๋ฌธ ๋ถ„์„">

435 ์ž…๋ ฅ์—๋Š” `questions` ๋ฐฐ์—ด์˜ Claude ์งˆ๋ฌธ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์งˆ๋ฌธ์—๋Š” `question`(ํ‘œ์‹œํ•  ํ…์ŠคํŠธ), `options`(์„ ํƒ ์‚ฌํ•ญ) ๋ฐ `multiSelect`(์—ฌ๋Ÿฌ ์„ ํƒ์ด ํ—ˆ์šฉ๋˜๋Š”์ง€ ์—ฌ๋ถ€)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

436 

437 ```json theme={null}

438 {

439 "questions": [

440 {

441 "question": "How should I format the output?",

442 "header": "Format",

443 "options": [

444 { "label": "Summary", "description": "Brief overview" },

445 { "label": "Detailed", "description": "Full explanation" }

446 ],

447 "multiSelect": false

448 },

449 {

450 "question": "Which sections should I include?",

451 "header": "Sections",

452 "options": [

453 { "label": "Introduction", "description": "Opening context" },

454 { "label": "Conclusion", "description": "Final summary" }

455 ],

456 "multiSelect": true

457 }

458 ]

459 }

460 ```

461 

462 ์ „์ฒด ํ•„๋“œ ์„ค๋ช…์€ [์งˆ๋ฌธ ํ˜•์‹](#์งˆ๋ฌธ-ํ˜•์‹)์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

463 </Step>

464 

465 <Step title="์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋‹ต๋ณ€ ์ˆ˜์ง‘">

466 ์‚ฌ์šฉ์ž์—๊ฒŒ ์งˆ๋ฌธ์„ ์ œ์‹œํ•˜๊ณ  ์„ ํƒ ์‚ฌํ•ญ์„ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„ ํ”„๋กฌํ”„ํŠธ, ์›น ์–‘์‹, ๋ชจ๋ฐ”์ผ ๋Œ€ํ™” ์ƒ์ž ๋“ฑ์ž…๋‹ˆ๋‹ค.

467 </Step>

468 

469 <Step title="Claude์— ๋‹ต๋ณ€ ๋ฐ˜ํ™˜">

470 `answers` ๊ฐ์ฒด๋ฅผ ๋ ˆ์ฝ”๋“œ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ ํ‚ค๋Š” `question` ํ…์ŠคํŠธ์ด๊ณ  ๊ฐ ๊ฐ’์€ ์„ ํƒ๋œ ์˜ต์…˜์˜ `label`์ž…๋‹ˆ๋‹ค.

471 

472 | ์งˆ๋ฌธ ๊ฐ์ฒด์—์„œ | ๋‹ค์Œ์œผ๋กœ ์‚ฌ์šฉ |

473 | ----------------------------------------------------- | ------- |

474 | `question` ํ•„๋“œ(์˜ˆ: `"How should I format the output?"`) | ํ‚ค |

475 | ์„ ํƒ๋œ ์˜ต์…˜์˜ `label` ํ•„๋“œ(์˜ˆ: `"Summary"`) | ๊ฐ’ |

476 

477 ๋‹ค์ค‘ ์„ ํƒ ์งˆ๋ฌธ์˜ ๊ฒฝ์šฐ ๋ ˆ์ด๋ธ” ๋ฐฐ์—ด์„ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ `", "`๋กœ ์กฐ์ธํ•ฉ๋‹ˆ๋‹ค. [์ž์œ  ํ…์ŠคํŠธ ์ž…๋ ฅ์„ ์ง€์›](#์ž์œ -ํ…์ŠคํŠธ-์ž…๋ ฅ-์ง€์›)ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์˜ ์‚ฌ์šฉ์ž ์ •์˜ ํ…์ŠคํŠธ๋ฅผ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

478 

479 <CodeGroup>

480 ```python Python theme={null}

481 return PermissionResultAllow(

482 updated_input={

483 "questions": input_data.get("questions", []),

484 "answers": {

485 "How should I format the output?": "Summary",

486 "Which sections should I include?": ["Introduction", "Conclusion"],

487 },

488 }

489 )

490 ```

491 

492 ```typescript TypeScript theme={null}

493 return {

494 behavior: "allow",

495 updatedInput: {

496 questions: input.questions,

497 answers: {

498 "How should I format the output?": "Summary",

499 "Which sections should I include?": "Introduction, Conclusion"

500 }

501 }

502 };

503 ```

504 </CodeGroup>

505 </Step>

506</Steps>

507 

508### ์งˆ๋ฌธ ํ˜•์‹

509 

510์ž…๋ ฅ์—๋Š” `questions` ๋ฐฐ์—ด์˜ Claude ์ƒ์„ฑ ์งˆ๋ฌธ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์งˆ๋ฌธ์—๋Š” ๋‹ค์Œ ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

511 

512| ํ•„๋“œ | ์„ค๋ช… |

513| ------------- | -------------------------------------------------------------------------------------------------------------------- |

514| `question` | ํ‘œ์‹œํ•  ์ „์ฒด ์งˆ๋ฌธ ํ…์ŠคํŠธ |

515| `header` | ์งˆ๋ฌธ์˜ ์งง์€ ๋ ˆ์ด๋ธ”(์ตœ๋Œ€ 12์ž) |

516| `options` | ๊ฐ๊ฐ `label` ๋ฐ `description`์ด ์žˆ๋Š” 2-4๊ฐœ ์„ ํƒ ์‚ฌํ•ญ์˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. TypeScript: ์„ ํƒ์ ์œผ๋กœ `preview`([์•„๋ž˜](#option-previews-type-script) ์ฐธ์กฐ) |

517| `multiSelect` | `true`์ธ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ์—ฌ๋Ÿฌ ์˜ต์…˜์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. |

518 

519์ฝœ๋ฐฑ์ด ๋ฐ›๋Š” ๊ตฌ์กฐ:

520 

521```json theme={null}

522{

523 "questions": [

524 {

525 "question": "How should I format the output?",

526 "header": "Format",

527 "options": [

528 { "label": "Summary", "description": "Brief overview of key points" },

529 { "label": "Detailed", "description": "Full explanation with examples" }

530 ],

531 "multiSelect": false

532 }

533 ]

534}

535```

536 

537#### ์˜ต์…˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ(TypeScript)

538 

539`toolConfig.askUserQuestion.previewFormat`์€ ๊ฐ ์˜ต์…˜์— `preview` ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ ์•ฑ์ด ๋ ˆ์ด๋ธ” ์˜†์— ์‹œ๊ฐ์  ๋ชฉ์—…์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์ด ์—†์œผ๋ฉด Claude๋Š” ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฉฐ ํ•„๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

540 

541| `previewFormat` | `preview` ํฌํ•จ |

542| :-------------- | :--------------------------------------------------------------------------------- |

543| ์„ค์ •๋˜์ง€ ์•Š์Œ(๊ธฐ๋ณธ๊ฐ’) | ํ•„๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Claude๋Š” ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. |

544| `"markdown"` | ASCII ์•„ํŠธ ๋ฐ ํŽœ์Šค ์ฝ”๋“œ ๋ธ”๋ก |

545| `"html"` | ์Šคํƒ€์ผ์ด ์ง€์ •๋œ `<div>` ์กฐ๊ฐ(SDK๋Š” ์ฝœ๋ฐฑ์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— `<script>`, `<style>` ๋ฐ `<!DOCTYPE>`์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.) |

546 

547ํ˜•์‹์€ ์„ธ์…˜์˜ ๋ชจ๋“  ์งˆ๋ฌธ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. Claude๋Š” ์‹œ๊ฐ์  ๋น„๊ต๊ฐ€ ๋„์›€์ด ๋˜๋Š” ์˜ต์…˜(๋ ˆ์ด์•„์›ƒ ์„ ํƒ, ์ƒ‰ ๊ตฌ์„ฑํ‘œ)์— `preview`๋ฅผ ํฌํ•จํ•˜๊ณ  ๋„์›€์ด ๋˜์ง€ ์•Š๋Š” ์˜ต์…˜(์˜ˆ/์•„๋‹ˆ์˜ค ํ™•์ธ, ํ…์ŠคํŠธ ์ „์šฉ ์„ ํƒ)์—์„œ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค. ๋ Œ๋”๋งํ•˜๊ธฐ ์ „์— `undefined`๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

548 

549```typescript theme={null}

550import { query } from "@anthropic-ai/claude-agent-sdk";

551 

552for await (const message of query({

553 prompt: "Help me choose a card layout",

554 options: {

555 toolConfig: {

556 askUserQuestion: { previewFormat: "html" }

557 },

558 canUseTool: async (toolName, input) => {

559 // input.questions[].options[].preview๋Š” HTML ๋ฌธ์ž์—ด ๋˜๋Š” undefined์ž…๋‹ˆ๋‹ค.

560 return { behavior: "allow", updatedInput: input };

561 }

562 }

563})) {

564 // ...

565}

566```

567 

568HTML ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ€ ์žˆ๋Š” ์˜ต์…˜:

569 

570```json theme={null}

571{

572 "label": "Compact",

573 "description": "Title and metric value only",

574 "preview": "<div style=\"padding:12px;border:1px solid #ddd;border-radius:8px\"><div style=\"font-size:12px;color:#666\">Active users</div><div style=\"font-size:28px;font-weight:600\">1,284</div></div>"

575}

576```

577 

578### ์‘๋‹ต ํ˜•์‹

579 

580๊ฐ ์งˆ๋ฌธ์˜ `question` ํ•„๋“œ๋ฅผ ์„ ํƒ๋œ ์˜ต์…˜์˜ `label`์— ๋งคํ•‘ํ•˜๋Š” `answers` ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

581 

582| ํ•„๋“œ | ์„ค๋ช… |

583| ----------- | ------------------------------ |

584| `questions` | ์›๋ณธ ์งˆ๋ฌธ ๋ฐฐ์—ด์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค(๋„๊ตฌ ์ฒ˜๋ฆฌ์— ํ•„์ˆ˜). |

585| `answers` | ํ‚ค๊ฐ€ ์งˆ๋ฌธ ํ…์ŠคํŠธ์ด๊ณ  ๊ฐ’์ด ์„ ํƒ๋œ ๋ ˆ์ด๋ธ”์ธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. |

586 

587๋‹ค์ค‘ ์„ ํƒ ์งˆ๋ฌธ์˜ ๊ฒฝ์šฐ ๋ ˆ์ด๋ธ” ๋ฐฐ์—ด์„ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ `", "`๋กœ ์กฐ์ธํ•ฉ๋‹ˆ๋‹ค. ์ž์œ  ํ…์ŠคํŠธ ์ž…๋ ฅ์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์˜ ์‚ฌ์šฉ์ž ์ •์˜ ํ…์ŠคํŠธ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

588 

589```json theme={null}

590{

591 "questions": [

592 // ...

593 ],

594 "answers": {

595 "How should I format the output?": "Summary",

596 "Which sections should I include?": ["Introduction", "Conclusion"]

597 }

598}

599```

600 

601#### ์ž์œ  ํ…์ŠคํŠธ ์ž…๋ ฅ ์ง€์›

602 

603Claude์˜ ์‚ฌ์ „ ์ •์˜๋œ ์˜ต์…˜์ด ํ•ญ์ƒ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์„ ๋‹ค๋ฃจ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ๋‹ต๋ณ€์„ ์ž…๋ ฅํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋ ค๋ฉด:

604 

605* Claude์˜ ์˜ต์…˜ ํ›„์— ์ถ”๊ฐ€ "Other" ์„ ํƒ์„ ํ‘œ์‹œํ•˜์—ฌ ํ…์ŠคํŠธ ์ž…๋ ฅ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

606* ์‚ฌ์šฉ์ž์˜ ์‚ฌ์šฉ์ž ์ •์˜ ํ…์ŠคํŠธ๋ฅผ ๋‹ต๋ณ€ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค("Other"๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์•„๋‹˜).

607 

608์ „์ฒด ๊ตฌํ˜„์€ ์•„๋ž˜์˜ [์™„์ „ํ•œ ์˜ˆ์ œ](#์™„์ „ํ•œ-์˜ˆ์ œ)๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

609 

610### ์™„์ „ํ•œ ์˜ˆ์ œ

611 

612Claude๋Š” ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด ํ•„์š”ํ•  ๋•Œ ๋ช…ํ™•ํ™” ์งˆ๋ฌธ์„ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ๋ฐ”์ผ ์•ฑ์˜ ๊ธฐ์ˆ  ์Šคํƒ์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์„ ๋‹ฌ๋ผ๋Š” ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด Claude๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋Œ€ ๋„ค์ดํ‹ฐ๋ธŒ, ๋ฐฑ์—”๋“œ ์„ ํ˜ธ๋„ ๋˜๋Š” ๋Œ€์ƒ ํ”Œ๋žซํผ์— ๋Œ€ํ•ด ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์งˆ๋ฌธ์€ Claude๊ฐ€ ์ถ”์ธกํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์‚ฌ์šฉ์ž์˜ ์„ ํ˜ธ๋„์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

613 

614์ด ์˜ˆ์ œ๋Š” ํ„ฐ๋ฏธ๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด๋Ÿฌํ•œ ์งˆ๋ฌธ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

615 

6161. **์š”์ฒญ ๋ผ์šฐํŒ…**: `canUseTool` ์ฝœ๋ฐฑ์€ ๋„๊ตฌ ์ด๋ฆ„์ด `"AskUserQuestion"`์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์ „์šฉ ํ•ธ๋“ค๋Ÿฌ๋กœ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค.

6172. **์งˆ๋ฌธ ํ‘œ์‹œ**: ํ•ธ๋“ค๋Ÿฌ๋Š” `questions` ๋ฐฐ์—ด์„ ๋ฐ˜๋ณตํ•˜๊ณ  ๊ฐ ์งˆ๋ฌธ์„ ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ง„ ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.

6183. **์ž…๋ ฅ ์ˆ˜์ง‘**: ์‚ฌ์šฉ์ž๋Š” ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์˜ต์…˜์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์ž์œ  ํ…์ŠคํŠธ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: "jquery", "i don't know").

6194. **๋‹ต๋ณ€ ๋งคํ•‘**: ์ฝ”๋“œ๋Š” ์ž…๋ ฅ์ด ์ˆซ์ž(์˜ต์…˜์˜ ๋ ˆ์ด๋ธ” ์‚ฌ์šฉ)์ธ์ง€ ์ž์œ  ํ…์ŠคํŠธ(ํ…์ŠคํŠธ ์ง์ ‘ ์‚ฌ์šฉ)์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

6205. **Claude์— ๋ฐ˜ํ™˜**: ์‘๋‹ต์—๋Š” ์›๋ณธ `questions` ๋ฐฐ์—ด๊ณผ `answers` ๋งคํ•‘์ด ๋ชจ๋‘ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

621 

622<CodeGroup>

623 ```python Python theme={null}

624 import asyncio

625 

626 from claude_agent_sdk import ClaudeAgentOptions, ResultMessage, query

627 from claude_agent_sdk.types import HookMatcher, PermissionResultAllow

628 

629 

630 def parse_response(response: str, options: list) -> str:

631 """์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์˜ต์…˜ ๋ฒˆํ˜ธ ๋˜๋Š” ์ž์œ  ํ…์ŠคํŠธ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค."""

632 try:

633 indices = [int(s.strip()) - 1 for s in response.split(",")]

634 labels = [options[i]["label"] for i in indices if 0 <= i < len(options)]

635 return ", ".join(labels) if labels else response

636 except ValueError:

637 return response

638 

639 

640 async def handle_ask_user_question(input_data: dict) -> PermissionResultAllow:

641 """Claude์˜ ์งˆ๋ฌธ์„ ํ‘œ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž ๋‹ต๋ณ€์„ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค."""

642 answers = {}

643 

644 for q in input_data.get("questions", []):

645 print(f"\n{q['header']}: {q['question']}")

646 

647 options = q["options"]

648 for i, opt in enumerate(options):

649 print(f" {i + 1}. {opt['label']} - {opt['description']}")

650 if q.get("multiSelect"):

651 print(" (Enter numbers separated by commas, or type your own answer)")

652 else:

653 print(" (Enter a number, or type your own answer)")

654 

655 response = input("Your choice: ").strip()

656 answers[q["question"]] = parse_response(response, options)

657 

658 return PermissionResultAllow(

659 updated_input={

660 "questions": input_data.get("questions", []),

661 "answers": answers,

662 }

663 )

664 

665 

666 async def can_use_tool(

667 tool_name: str, input_data: dict, context

668 ) -> PermissionResultAllow:

669 # AskUserQuestion์„ ์งˆ๋ฌธ ํ•ธ๋“ค๋Ÿฌ๋กœ ๋ผ์šฐํŒ…

670 if tool_name == "AskUserQuestion":

671 return await handle_ask_user_question(input_data)

672 # ์ด ์˜ˆ์ œ์—์„œ๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์ž๋™ ์Šน์ธ

673 return PermissionResultAllow(updated_input=input_data)

674 

675 

676 async def prompt_stream():

677 yield {

678 "type": "user",

679 "message": {

680 "role": "user",

681 "content": "Help me decide on the tech stack for a new mobile app",

682 },

683 }

684 

685 

686 # ํ•„์ˆ˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ๋”๋ฏธ ํ›…์ด can_use_tool์„ ์œ„ํ•ด ์ŠคํŠธ๋ฆผ์„ ์—ด์–ด ๋‘ 

687 async def dummy_hook(input_data, tool_use_id, context):

688 return {"continue_": True}

689 

690 

691 async def main():

692 async for message in query(

693 prompt=prompt_stream(),

694 options=ClaudeAgentOptions(

695 can_use_tool=can_use_tool,

696 hooks={"PreToolUse": [HookMatcher(matcher=None, hooks=[dummy_hook])]},

697 ),

698 ):

699 if isinstance(message, ResultMessage) and message.subtype == "success":

700 print(message.result)

701 

702 

703 asyncio.run(main())

704 ```

705 

706 ```typescript TypeScript theme={null}

707 import { query } from "@anthropic-ai/claude-agent-sdk";

708 import * as readline from "readline/promises";

709 

710 // ํ„ฐ๋ฏธ๋„์—์„œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ํ”„๋กฌํ”„ํŠธํ•˜๋Š” ํ—ฌํผ

711 async function prompt(question: string): Promise<string> {

712 const rl = readline.createInterface({ input: process.stdin, output: process.stdout });

713 const answer = await rl.question(question);

714 rl.close();

715 return answer;

716 }

717 

718 // ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์˜ต์…˜ ๋ฒˆํ˜ธ ๋˜๋Š” ์ž์œ  ํ…์ŠคํŠธ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„

719 function parseResponse(response: string, options: any[]): string {

720 const indices = response.split(",").map((s) => parseInt(s.trim()) - 1);

721 const labels = indices

722 .filter((i) => !isNaN(i) && i >= 0 && i < options.length)

723 .map((i) => options[i].label);

724 return labels.length > 0 ? labels.join(", ") : response;

725 }

726 

727 // Claude์˜ ์งˆ๋ฌธ์„ ํ‘œ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž ๋‹ต๋ณ€์„ ์ˆ˜์ง‘

728 async function handleAskUserQuestion(input: any) {

729 const answers: Record<string, string> = {};

730 

731 for (const q of input.questions) {

732 console.log(`\n${q.header}: ${q.question}`);

733 

734 const options = q.options;

735 options.forEach((opt: any, i: number) => {

736 console.log(` ${i + 1}. ${opt.label} - ${opt.description}`);

737 });

738 if (q.multiSelect) {

739 console.log(" (Enter numbers separated by commas, or type your own answer)");

740 } else {

741 console.log(" (Enter a number, or type your own answer)");

742 }

743 

744 const response = (await prompt("Your choice: ")).trim();

745 answers[q.question] = parseResponse(response, options);

746 }

747 

748 // Claude์— ๋‹ต๋ณ€ ๋ฐ˜ํ™˜(์›๋ณธ ์งˆ๋ฌธ ๋ฐฐ์—ด ํฌํ•จ ํ•„์ˆ˜)

749 return {

750 behavior: "allow",

751 updatedInput: { questions: input.questions, answers }

752 };

753 }

754 

755 async function main() {

756 for await (const message of query({

757 prompt: "Help me decide on the tech stack for a new mobile app",

758 options: {

759 canUseTool: async (toolName, input) => {

760 // AskUserQuestion์„ ์งˆ๋ฌธ ํ•ธ๋“ค๋Ÿฌ๋กœ ๋ผ์šฐํŒ…

761 if (toolName === "AskUserQuestion") {

762 return handleAskUserQuestion(input);

763 }

764 // ์ด ์˜ˆ์ œ์—์„œ๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์ž๋™ ์Šน์ธ

765 return { behavior: "allow", updatedInput: input };

766 }

767 }

768 })) {

769 if ("result" in message) console.log(message.result);

770 }

771 }

772 

773 main();

774 ```

775</CodeGroup>

776 

777## ์ œํ•œ ์‚ฌํ•ญ

778 

779* **์„œ๋ธŒ์—์ด์ „ํŠธ**: `AskUserQuestion`์€ ํ˜„์žฌ Agent ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์„œ๋ธŒ์—์ด์ „ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

780* **์งˆ๋ฌธ ์ œํ•œ**: ๊ฐ `AskUserQuestion` ํ˜ธ์ถœ์€ ๊ฐ๊ฐ 2-4๊ฐœ ์˜ต์…˜์ด ์žˆ๋Š” 1-4๊ฐœ ์งˆ๋ฌธ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

781 

782## ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์–ป๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

783 

784`canUseTool` ์ฝœ๋ฐฑ๊ณผ `AskUserQuestion` ๋„๊ตฌ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์Šน์ธ ๋ฐ ๋ช…ํ™•ํ™” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋‹ค๋ฃจ์ง€๋งŒ, SDK๋Š” ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ์„ ์–ป๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

785 

786### ์ŠคํŠธ๋ฆฌ๋ฐ ์ž…๋ ฅ

787 

788๋‹ค์Œ์ด ํ•„์š”ํ•  ๋•Œ [์ŠคํŠธ๋ฆฌ๋ฐ ์ž…๋ ฅ](/ko/agent-sdk/streaming-vs-single-mode)์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

789 

790* **์—์ด์ „ํŠธ ์ค‘๊ฐ„์— ์ค‘๋‹จ**: Claude๊ฐ€ ์ž‘์—… ์ค‘์ผ ๋•Œ ์ทจ์†Œ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๊ฑฐ๋‚˜ ๋ฐฉํ–ฅ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

791* **์ถ”๊ฐ€ ์ปจํ…์ŠคํŠธ ์ œ๊ณต**: Claude๊ฐ€ ๋ฌผ์–ด๋ณผ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

792* **์ฑ„ํŒ… ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ•**: ์žฅ์‹œ๊ฐ„ ์‹คํ–‰๋˜๋Š” ์ž‘์—… ์ค‘์— ์‚ฌ์šฉ์ž๊ฐ€ ํ›„์† ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

793 

794์ŠคํŠธ๋ฆฌ๋ฐ ์ž…๋ ฅ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์Šน์ธ ์ฒดํฌํฌ์ธํŠธ์—์„œ๋งŒ์ด ์•„๋‹ˆ๋ผ ์‹คํ–‰ ์ „์ฒด์—์„œ ์—์ด์ „ํŠธ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋Œ€ํ™”ํ˜• UI์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.

795 

796### ์‚ฌ์šฉ์ž ์ •์˜ ๋„๊ตฌ

797 

798๋‹ค์Œ์ด ํ•„์š”ํ•  ๋•Œ [์‚ฌ์šฉ์ž ์ •์˜ ๋„๊ตฌ](/ko/agent-sdk/custom-tools)๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

799 

800* **๊ตฌ์กฐํ™”๋œ ์ž…๋ ฅ ์ˆ˜์ง‘**: `AskUserQuestion`์˜ ๊ฐ๊ด€์‹ ํ˜•์‹์„ ๋„˜์–ด์„œ๋Š” ์–‘์‹, ๋งˆ๋ฒ•์‚ฌ ๋˜๋Š” ๋‹ค๋‹จ๊ณ„ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

801* **์™ธ๋ถ€ ์Šน์ธ ์‹œ์Šคํ…œ ํ†ตํ•ฉ**: ๊ธฐ์กด ํ‹ฐ์ผ“ํŒ…, ์›Œํฌํ”Œ๋กœ์šฐ ๋˜๋Š” ์Šน์ธ ํ”Œ๋žซํผ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

802* **๋„๋ฉ”์ธ๋ณ„ ์ƒํ˜ธ ์ž‘์šฉ ๊ตฌํ˜„**: ์ฝ”๋“œ ๊ฒ€ํ†  ์ธํ„ฐํŽ˜์ด์Šค ๋˜๋Š” ๋ฐฐํฌ ์ฒดํฌ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•„์š”์— ๋งž๋Š” ๋„๊ตฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

803 

804์‚ฌ์šฉ์ž ์ •์˜ ๋„๊ตฌ๋Š” ์ƒํ˜ธ ์ž‘์šฉ์„ ์™„์ „ํžˆ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ ์ œ๊ณต `canUseTool` ์ฝœ๋ฐฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๊ตฌํ˜„ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

805 

806## ๊ด€๋ จ ๋ฆฌ์†Œ์Šค

807 

808* [๊ถŒํ•œ ๊ตฌ์„ฑ](/ko/agent-sdk/permissions): ๊ถŒํ•œ ๋ชจ๋“œ ๋ฐ ๊ทœ์น™ ์„ค์ •

809* [ํ›…์œผ๋กœ ์‹คํ–‰ ์ œ์–ด](/ko/agent-sdk/hooks): ์—์ด์ „ํŠธ ์ˆ˜๋ช… ์ฃผ๊ธฐ์˜ ์ฃผ์š” ์ง€์ ์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ์ฝ”๋“œ ์‹คํ–‰

810* [TypeScript SDK ์ฐธ์กฐ](/ko/agent-sdk/typescript#canusetool): ์ „์ฒด canUseTool API ๋ฌธ์„œ

auto-mode-config.md +16 โˆ’11

Details

39 39 

40๋ถ„๋ฅ˜๊ธฐ๋Š” `.claude/settings.json`์˜ ๊ณต์œ  ํ”„๋กœ์ ํŠธ ์„ค์ •์—์„œ `autoMode`๋ฅผ ์ฝ์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ฒดํฌ์ธ๋œ ์ €์žฅ์†Œ๋Š” ์ž์ฒด ํ—ˆ์šฉ ๊ทœ์น™์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.40๋ถ„๋ฅ˜๊ธฐ๋Š” `.claude/settings.json`์˜ ๊ณต์œ  ํ”„๋กœ์ ํŠธ ์„ค์ •์—์„œ `autoMode`๋ฅผ ์ฝ์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ฒดํฌ์ธ๋œ ์ €์žฅ์†Œ๋Š” ์ž์ฒด ํ—ˆ์šฉ ๊ทœ์น™์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

41 41 

42๊ฐ ๋ฒ”์œ„์˜ ํ•ญ๋ชฉ์ด ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๊ฐœ์ธ ํ•ญ๋ชฉ์œผ๋กœ `environment`, `allow` ๋ฐ `soft_deny`๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ด€๋ฆฌ ์„ค์ •์ด ์ œ๊ณตํ•˜๋Š” ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ—ˆ์šฉ ๊ทœ์น™์ด ๋ถ„๋ฅ˜๊ธฐ ๋‚ด์˜ ์ฐจ๋‹จ ๊ทœ์น™์— ๋Œ€ํ•œ ์˜ˆ์™ธ๋กœ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ถ”๊ฐ€ํ•œ `allow` ํ•ญ๋ชฉ์€ ์กฐ์ง์˜ `soft_deny` ํ•ญ๋ชฉ์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐํ•ฉ์€ ๊ฐ€์‚ฐ์ ์ด๋ฉฐ, ํ•˜๋“œ ์ •์ฑ… ๊ฒฝ๊ณ„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.42๊ฐ ๋ฒ”์œ„์˜ ํ•ญ๋ชฉ์ด ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๊ฐœ์ธ ํ•ญ๋ชฉ์œผ๋กœ `environment`, `allow`, `soft_deny`, `hard_deny`๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ด€๋ฆฌ ์„ค์ •์ด ์ œ๊ณตํ•˜๋Š” ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ—ˆ์šฉ ๊ทœ์น™์ด ๋ถ„๋ฅ˜๊ธฐ ๋‚ด์˜ ์ฐจ๋‹จ ๊ทœ์น™์— ๋Œ€ํ•œ ์˜ˆ์™ธ๋กœ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ถ”๊ฐ€ํ•œ `allow` ํ•ญ๋ชฉ์€ ์กฐ์ง์˜ `soft_deny` ํ•ญ๋ชฉ์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐํ•ฉ์€ ๊ฐ€์‚ฐ์ ์ด๋ฉฐ, ํ•˜๋“œ ์ •์ฑ… ๊ฒฝ๊ณ„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

43 43 

44<Note>44<Note>

45 ๋ถ„๋ฅ˜๊ธฐ๋Š” [๊ถŒํ•œ ์‹œ์Šคํ…œ](/ko/permissions) ์ดํ›„์— ์‹คํ–‰๋˜๋Š” ๋‘ ๋ฒˆ์งธ ๊ฒŒ์ดํŠธ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์˜๋„๋‚˜ ๋ถ„๋ฅ˜๊ธฐ ๊ตฌ์„ฑ์— ๊ด€๊ณ„์—†์ด ์ ˆ๋Œ€ ์‹คํ–‰๋˜์–ด์„œ๋Š” ์•ˆ ๋˜๋Š” ์ž‘์—…์˜ ๊ฒฝ์šฐ, ๊ด€๋ฆฌ ์„ค์ •์—์„œ `permissions.deny`๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด๋Š” ๋ถ„๋ฅ˜๊ธฐ๊ฐ€ ์ฐธ์กฐ๋˜๊ธฐ ์ „์— ์ž‘์—…์„ ์ฐจ๋‹จํ•˜๋ฉฐ ์žฌ์ •์˜๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.45 ๋ถ„๋ฅ˜๊ธฐ๋Š” [๊ถŒํ•œ ์‹œ์Šคํ…œ](/ko/permissions) ์ดํ›„์— ์‹คํ–‰๋˜๋Š” ๋‘ ๋ฒˆ์งธ ๊ฒŒ์ดํŠธ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์˜๋„๋‚˜ ๋ถ„๋ฅ˜๊ธฐ ๊ตฌ์„ฑ์— ๊ด€๊ณ„์—†์ด ์ ˆ๋Œ€ ์‹คํ–‰๋˜์–ด์„œ๋Š” ์•ˆ ๋˜๋Š” ์ž‘์—…์˜ ๊ฒฝ์šฐ, ๊ด€๋ฆฌ ์„ค์ •์—์„œ `permissions.deny`๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด๋Š” ๋ถ„๋ฅ˜๊ธฐ๊ฐ€ ์ฐธ์กฐ๋˜๊ธฐ ์ „์— ์ž‘์—…์„ ์ฐจ๋‹จํ•˜๋ฉฐ ์žฌ์ •์˜๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.


99 99 

100## ์ฐจ๋‹จ ๋ฐ ํ—ˆ์šฉ ๊ทœ์น™ ์žฌ์ •์˜100## ์ฐจ๋‹จ ๋ฐ ํ—ˆ์šฉ ๊ทœ์น™ ์žฌ์ •์˜

101 101 

102๋‘ ๊ฐœ์˜ ์ถ”๊ฐ€ ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„๋ฅ˜๊ธฐ์˜ ๊ธฐ๋ณธ ์ œ๊ณต ๊ทœ์น™ ๋ชฉ๋ก์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: `autoMode.soft_deny`๋Š” ์ฐจ๋‹จ๋˜๋Š” ํ•ญ๋ชฉ์„ ์ œ์–ดํ•˜๊ณ , `autoMode.allow`๋Š” ์ ์šฉ๋˜๋Š” ์˜ˆ์™ธ๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์€ ์ž์—ฐ์–ด ๊ทœ์น™์œผ๋กœ ์ฝํžˆ๋Š” ์‚ฐ๋ฌธ ์„ค๋ช…์˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. `autoMode.deny` ํ•„๋“œ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์˜๋„์— ๊ด€๊ณ„์—†์ด ์ž‘์—…์„ ํ•˜๋“œ ๋ธ”๋กํ•˜๋ ค๋ฉด ๋ถ„๋ฅ˜๊ธฐ ์ด์ „์— ์‹คํ–‰๋˜๋Š” [`permissions.deny`](/ko/permissions)๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.102์„ธ ๊ฐœ์˜ ์ถ”๊ฐ€ ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„๋ฅ˜๊ธฐ์˜ ๊ธฐ๋ณธ ์ œ๊ณต ๊ทœ์น™ ๋ชฉ๋ก์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: `autoMode.hard_deny`๋Š” ๋ฌด์กฐ๊ฑด์ ์ธ ๋ณด์•ˆ ๊ฒฝ๊ณ„๋ฅผ ์œ„ํ•œ ๊ฒƒ์ด๊ณ , `autoMode.soft_deny`๋Š” ์‚ฌ์šฉ์ž ์˜๋„๋กœ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ๊ดด์ ์ธ ์ž‘์—…์„ ์œ„ํ•œ ๊ฒƒ์ด๋ฉฐ, `autoMode.allow`๋Š” ์˜ˆ์™ธ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ๊ฐ์€ ์ž์—ฐ์–ด ๊ทœ์น™์œผ๋กœ ์ฝํžˆ๋Š” ์‚ฐ๋ฌธ ์„ค๋ช…์˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. ๋ถ„๋ฅ˜๊ธฐ ์ด์ „์— ์‹คํ–‰๋˜๋Š” ๋„๊ตฌ ํŒจํ„ด ๊ธฐ๋ฐ˜์˜ ํ•˜๋“œ ๋ธ”๋ก์˜ ๊ฒฝ์šฐ [`permissions.deny`](/ko/permissions)๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

103 103 

104๋ถ„๋ฅ˜๊ธฐ ๋‚ด์—์„œ ์šฐ์„ ์ˆœ์œ„๋Š” ์„ธ ๊ฐ€์ง€ ๊ณ„์ธต์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:104๋ถ„๋ฅ˜๊ธฐ ๋‚ด์—์„œ ์šฐ์„ ์ˆœ์œ„๋Š” ๋„ค ๊ฐ€์ง€ ๊ณ„์ธต์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:

105 105 

106* `soft_deny` ๊ทœ์น™์ด ๋จผ์ € ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค106* `hard_deny` ๊ทœ์น™์€ ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์˜๋„์™€ `allow` ์˜ˆ์™ธ๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

107* `allow` ๊ทœ์น™์ด ์ผ์น˜ํ•˜๋Š” ์ฐจ๋‹จ์„ ์˜ˆ์™ธ๋กœ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค107* `soft_deny` ๊ทœ์น™์ด ๋‹ค์Œ์œผ๋กœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์˜๋„์™€ `allow` ์˜ˆ์™ธ๊ฐ€ ์ด๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

108* ๋ช…์‹œ์  ์‚ฌ์šฉ์ž ์˜๋„๊ฐ€ ๋‘˜ ๋‹ค ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค: ์‚ฌ์šฉ์ž์˜ ๋ฉ”์‹œ์ง€๊ฐ€ Claude๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ์ •ํ™•ํ•œ ์ž‘์—…์„ ์ง์ ‘์ ์ด๊ณ  ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…ํ•˜๋ฉด, `soft_deny` ๊ทœ์น™์ด ์ผ์น˜ํ•˜๋”๋ผ๋„ ๋ถ„๋ฅ˜๊ธฐ๊ฐ€ ์ด๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค108* `allow` ๊ทœ์น™์ด ์ผ์น˜ํ•˜๋Š” `soft_deny` ๊ทœ์น™์„ ์˜ˆ์™ธ๋กœ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

109* ๋ช…์‹œ์  ์‚ฌ์šฉ์ž ์˜๋„๊ฐ€ ๋‚˜๋จธ์ง€ ์†Œํ”„ํŠธ ๋ธ”๋ก์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค: ์‚ฌ์šฉ์ž์˜ ๋ฉ”์‹œ์ง€๊ฐ€ Claude๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ์ •ํ™•ํ•œ ์ž‘์—…์„ ์ง์ ‘์ ์ด๊ณ  ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…ํ•˜๋ฉด, `soft_deny` ๊ทœ์น™์ด ์ผ์น˜ํ•˜๋”๋ผ๋„ ๋ถ„๋ฅ˜๊ธฐ๊ฐ€ ์ด๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

109 110 

110์ผ๋ฐ˜์ ์ธ ์š”์ฒญ์€ ๋ช…์‹œ์  ์˜๋„๋กœ ๊ณ„์‚ฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Claude์—๊ฒŒ "์ €์žฅ์†Œ๋ฅผ ์ •๋ฆฌํ•ด ๋‹ฌ๋ผ"๊ณ  ์š”์ฒญํ•˜๋Š” ๊ฒƒ์€ ๊ฐ•์ œ ํ‘ธ์‹œ๋ฅผ ์Šน์ธํ•˜์ง€ ์•Š์ง€๋งŒ, "์ด ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ•์ œ ํ‘ธ์‹œํ•ด ๋‹ฌ๋ผ"๊ณ  ์š”์ฒญํ•˜๋Š” ๊ฒƒ์€ ์Šน์ธํ•ฉ๋‹ˆ๋‹ค.111์ผ๋ฐ˜์ ์ธ ์š”์ฒญ์€ ๋ช…์‹œ์  ์˜๋„๋กœ ๊ณ„์‚ฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Claude์—๊ฒŒ "์ €์žฅ์†Œ๋ฅผ ์ •๋ฆฌํ•ด ๋‹ฌ๋ผ"๊ณ  ์š”์ฒญํ•˜๋Š” ๊ฒƒ์€ ๊ฐ•์ œ ํ‘ธ์‹œ๋ฅผ ์Šน์ธํ•˜์ง€ ์•Š์ง€๋งŒ, "์ด ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ•์ œ ํ‘ธ์‹œํ•ด ๋‹ฌ๋ผ"๊ณ  ์š”์ฒญํ•˜๋Š” ๊ฒƒ์€ ์Šน์ธํ•ฉ๋‹ˆ๋‹ค.

111 112 

112๊ธฐ๋ณธ ๊ทœ์น™์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ž์‹ ์˜ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋ฐฐ์—ด์— ๋ฆฌํ„ฐ๋Ÿด ๋ฌธ์ž์—ด `"$defaults"`๋ฅผ ํฌํ•จํ•˜์„ธ์š”. ๊ธฐ๋ณธ ๊ทœ์น™์ด ํ•ด๋‹น ์œ„์น˜์— ์‚ฝ์ž…๋˜๋ฏ€๋กœ, ์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™์ด ์•ž์ด๋‚˜ ๋’ค์— ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฆด๋ฆฌ์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ ๊ธฐ๋ณธ ์ œ๊ณต ๋ชฉ๋ก์ด ๋ณ€๊ฒฝ๋˜๋ฉด์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ณ„์† ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค.113๋А์Šจํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด, ๋ถ„๋ฅ˜๊ธฐ๊ฐ€ ๊ธฐ๋ณธ ์˜ˆ์™ธ๊ฐ€ ๋‹ค๋ฃจ์ง€ ์•Š๋Š” ์ผ์ƒ์ ์ธ ํŒจํ„ด์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ”Œ๋ž˜๊ทธํ•  ๋•Œ `allow`์— ์ถ”๊ฐ€ํ•˜์„ธ์š”. ๋” ์—„๊ฒฉํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด, ๊ธฐ๋ณธ๊ฐ’์ด ๋†“์นœ ํ™˜๊ฒฝ์— ํŠน์ •ํ•œ ํŒŒ๊ดด์  ์œ„ํ—˜์— ๋Œ€ํ•ด `soft_deny`์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ์ ˆ๋Œ€ ๋„˜์–ด์„œ๋Š” ์•ˆ ๋˜๋Š” ๋ณด์•ˆ ๊ฒฝ๊ณ„์— ๋Œ€ํ•ด `hard_deny`์— ์ถ”๊ฐ€ํ•˜์„ธ์š”. ๊ธฐ๋ณธ ์ œ๊ณต ๊ทœ์น™์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ž์‹ ์˜ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋ฐฐ์—ด์— ๋ฆฌํ„ฐ๋Ÿด ๋ฌธ์ž์—ด `"$defaults"`๋ฅผ ํฌํ•จํ•˜์„ธ์š”. ๊ธฐ๋ณธ ๊ทœ์น™์ด ํ•ด๋‹น ์œ„์น˜์— ์‚ฝ์ž…๋˜๋ฏ€๋กœ, ์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™์ด ์•ž์ด๋‚˜ ๋’ค์— ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฆด๋ฆฌ์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ ๊ธฐ๋ณธ ์ œ๊ณต ๋ชฉ๋ก์ด ๋ณ€๊ฒฝ๋˜๋ฉด์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ณ„์† ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค.

113 114 

114```json theme={null}115```json theme={null}

115{116{


127 "$defaults",128 "$defaults",

128 "Never run database migrations outside the migrations CLI, even against dev databases",129 "Never run database migrations outside the migrations CLI, even against dev databases",

129 "Never modify files under infra/terraform/prod/: production infrastructure changes go through the review workflow"130 "Never modify files under infra/terraform/prod/: production infrastructure changes go through the review workflow"

131 ],

132 "hard_deny": [

133 "$defaults",

134 "Never send repository contents to third-party code-review APIs"

130 ]135 ]

131 }136 }

132}137}

133```138```

134 139 

135<Danger>140<Danger>

136 `environment`, `allow` ๋˜๋Š” `soft_deny` ์ค‘ ํ•˜๋‚˜๋ฅผ `"$defaults"` ์—†์ด ์„ค์ •ํ•˜๋ฉด ํ•ด๋‹น ์„น์…˜์˜ ์ „์ฒด ๊ธฐ๋ณธ ๋ชฉ๋ก์ด ๋ฐ”๋€๋‹ˆ๋‹ค. ๋‹จ์ผ ํ•ญ๋ชฉ์œผ๋กœ `soft_deny`๋ฅผ ์„ค์ •ํ•˜๊ณ  `"$defaults"`๋ฅผ ์ƒ๋žตํ•˜๋ฉด ๋ชจ๋“  ๊ธฐ๋ณธ ์ œ๊ณต ์ฐจ๋‹จ ๊ทœ์น™์ด ๋ฒ„๋ ค์ง‘๋‹ˆ๋‹ค: ๊ฐ•์ œ ํ‘ธ์‹œ, ๋ฐ์ดํ„ฐ ์œ ์ถœ, `curl | bash`, ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ ๋ฐ ๊ธฐํƒ€ ๋ชจ๋“  ๊ธฐ๋ณธ ์ฐจ๋‹จ ๊ทœ์น™์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. `"$defaults"`๋ฅผ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์€ ๋ชฉ๋ก์˜ ์ „์ฒด ์†Œ์œ ๊ถŒ์„ ๊ฐ€์งˆ ์˜๋„๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ํ•˜์„ธ์š”. ์ด ๊ฒฝ์šฐ `claude auto-mode defaults`๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ธฐ๋ณธ ์ œ๊ณต ๊ทœ์น™์„ ์ธ์‡„ํ•˜๊ณ , ์„ค์ • ํŒŒ์ผ์— ๋ณต์‚ฌํ•œ ๋‹ค์Œ, ๊ฐ ๊ทœ์น™์„ ์ž์‹ ์˜ ํŒŒ์ดํ”„๋ผ์ธ ๋ฐ ์œ„ํ—˜ ํ—ˆ์šฉ๋„์™€ ๋น„๊ตํ•˜์—ฌ ๊ฒ€ํ† ํ•˜์„ธ์š”.141 `environment`, `allow`, `soft_deny` ๋˜๋Š” `hard_deny` ์ค‘ ํ•˜๋‚˜๋ฅผ `"$defaults"` ์—†์ด ์„ค์ •ํ•˜๋ฉด ํ•ด๋‹น ์„น์…˜์˜ ์ „์ฒด ๊ธฐ๋ณธ ๋ชฉ๋ก์ด ๋ฐ”๋€๋‹ˆ๋‹ค. `"$defaults"`๊ฐ€ ์—†๋Š” `soft_deny` ๋ฐฐ์—ด์€ ๊ฐ•์ œ ํ‘ธ์‹œ, `curl | bash`, ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ๊ธฐ๋ณธ ์ œ๊ณต ์†Œํ”„ํŠธ ๋ธ”๋ก ๊ทœ์น™์„ ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. `"$defaults"`๊ฐ€ ์—†๋Š” `hard_deny` ๋ฐฐ์—ด์€ ๊ธฐ๋ณธ ์ œ๊ณต ๋ฐ์ดํ„ฐ ์œ ์ถœ ๋ฐ ์•ˆ์ „ ๊ฒ€์‚ฌ ์šฐํšŒ ๊ทœ์น™์„ ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

137</Danger>142</Danger>

138 143 

139๊ฐ ์„น์…˜์€ ๋…๋ฆฝ์ ์œผ๋กœ ํ‰๊ฐ€๋˜๋ฏ€๋กœ, `environment`๋งŒ ์„ค์ •ํ•˜๋ฉด ๊ธฐ๋ณธ `allow` ๋ฐ `soft_deny` ๋ชฉ๋ก์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.144๊ฐ ์„น์…˜์€ ๋…๋ฆฝ์ ์œผ๋กœ ํ‰๊ฐ€๋˜๋ฏ€๋กœ, `environment`๋งŒ ์„ค์ •ํ•˜๋ฉด ๊ธฐ๋ณธ `allow`, `soft_deny` ๋ฐ `hard_deny` ๋ชฉ๋ก์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. `"$defaults"`๋ฅผ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์€ ๋ชฉ๋ก์˜ ์ „์ฒด ์†Œ์œ ๊ถŒ์„ ๊ฐ€์งˆ ์˜๋„๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ํ•˜์„ธ์š”. ์ด ๊ฒฝ์šฐ `claude auto-mode defaults`๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ธฐ๋ณธ ์ œ๊ณต ๊ทœ์น™์„ ์ธ์‡„ํ•˜๊ณ , ์„ค์ • ํŒŒ์ผ์— ๋ณต์‚ฌํ•œ ๋‹ค์Œ, ๊ฐ ๊ทœ์น™์„ ์ž์‹ ์˜ ํŒŒ์ดํ”„๋ผ์ธ ๋ฐ ์œ„ํ—˜ ํ—ˆ์šฉ๋„์™€ ๋น„๊ตํ•˜์—ฌ ๊ฒ€ํ† ํ•˜์„ธ์š”.

140 145 

141## ๊ธฐ๋ณธ๊ฐ’ ๋ฐ ์œ ํšจํ•œ ๊ตฌ์„ฑ ๊ฒ€์‚ฌ146## ๊ธฐ๋ณธ๊ฐ’ ๋ฐ ์œ ํšจํ•œ ๊ตฌ์„ฑ ๊ฒ€์‚ฌ

142 147 

143์„ธ ๊ฐ€์ง€ CLI ํ•˜์œ„ ๋ช…๋ น์ด ๊ตฌ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.148์„ธ ๊ฐ€์ง€ CLI ํ•˜์œ„ ๋ช…๋ น์ด ๊ตฌ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

144 149 

145๊ธฐ๋ณธ ์ œ๊ณต `environment`, `allow` ๋ฐ `soft_deny` ๊ทœ์น™์„ JSON์œผ๋กœ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค:150๊ธฐ๋ณธ ์ œ๊ณต `environment`, `allow`, `soft_deny` ๋ฐ `hard_deny` ๊ทœ์น™์„ JSON์œผ๋กœ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค:

146 151 

147```bash theme={null}152```bash theme={null}

148claude auto-mode defaults153claude auto-mode defaults


154claude auto-mode config159claude auto-mode config

155```160```

156 161 

157์‚ฌ์šฉ์ž ์ •์˜ `allow` ๋ฐ `soft_deny` ๊ทœ์น™์— ๋Œ€ํ•œ AI ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค:162์‚ฌ์šฉ์ž ์ •์˜ `allow`, `soft_deny` ๋ฐ `hard_deny` ๊ทœ์น™์— ๋Œ€ํ•œ AI ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค:

158 163 

159```bash theme={null}164```bash theme={null}

160claude auto-mode critique165claude auto-mode critique

commands.md +3 โˆ’2

Details

46| `/btw <question>` | ๋Œ€ํ™”์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ๋น ๋ฅธ [side question](/ko/interactive-mode#side-questions-with-%2Fbtw)์„ ํ•ฉ๋‹ˆ๋‹ค |46| `/btw <question>` | ๋Œ€ํ™”์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ๋น ๋ฅธ [side question](/ko/interactive-mode#side-questions-with-%2Fbtw)์„ ํ•ฉ๋‹ˆ๋‹ค |

47| `/chrome` | [Claude in Chrome](/ko/chrome) ์„ค์ •์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค |47| `/chrome` | [Claude in Chrome](/ko/chrome) ์„ค์ •์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค |

48| `/claude-api [migrate\|managed-agents-onboard]` | **[Skill](/ko/skills#bundled-skills).** ํ”„๋กœ์ ํŠธ์˜ ์–ธ์–ด(Python, TypeScript, Java, Go, Ruby, C#, PHP ๋˜๋Š” cURL) ๋ฐ Managed Agents ์ฐธ์กฐ์— ๋Œ€ํ•œ Claude API ์ฐธ์กฐ ์ž๋ฃŒ๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ๋„๊ตฌ ์‚ฌ์šฉ, ์ŠคํŠธ๋ฆฌ๋ฐ, ๋ฐฐ์น˜, ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ ๋ฐ ์ผ๋ฐ˜์ ์ธ ํ•จ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฝ”๋“œ๊ฐ€ `anthropic` ๋˜๋Š” `@anthropic-ai/sdk`๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. `/claude-api migrate`๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ธฐ์กด Claude API ์ฝ”๋“œ๋ฅผ ์ตœ์‹  ๋ชจ๋ธ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. Claude๋Š” ์Šค์บ”ํ•  ํŒŒ์ผ๊ณผ ๋Œ€์ƒ ๋ชจ๋ธ์„ ๋ฌป๊ณ , ๋ชจ๋ธ ID, thinking ๊ตฌ์„ฑ ๋ฐ ๋ฒ„์ „ ๊ฐ„์— ๋ณ€๊ฒฝ๋œ ๊ธฐํƒ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. `/claude-api managed-agents-onboard`๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด Managed Agent๋ฅผ ๋งŒ๋“œ๋Š” ๋Œ€ํ™”ํ˜• ์•ˆ๋‚ด๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค |48| `/claude-api [migrate\|managed-agents-onboard]` | **[Skill](/ko/skills#bundled-skills).** ํ”„๋กœ์ ํŠธ์˜ ์–ธ์–ด(Python, TypeScript, Java, Go, Ruby, C#, PHP ๋˜๋Š” cURL) ๋ฐ Managed Agents ์ฐธ์กฐ์— ๋Œ€ํ•œ Claude API ์ฐธ์กฐ ์ž๋ฃŒ๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ๋„๊ตฌ ์‚ฌ์šฉ, ์ŠคํŠธ๋ฆฌ๋ฐ, ๋ฐฐ์น˜, ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ ๋ฐ ์ผ๋ฐ˜์ ์ธ ํ•จ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฝ”๋“œ๊ฐ€ `anthropic` ๋˜๋Š” `@anthropic-ai/sdk`๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. `/claude-api migrate`๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ธฐ์กด Claude API ์ฝ”๋“œ๋ฅผ ์ตœ์‹  ๋ชจ๋ธ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. Claude๋Š” ์Šค์บ”ํ•  ํŒŒ์ผ๊ณผ ๋Œ€์ƒ ๋ชจ๋ธ์„ ๋ฌป๊ณ , ๋ชจ๋ธ ID, thinking ๊ตฌ์„ฑ ๋ฐ ๋ฒ„์ „ ๊ฐ„์— ๋ณ€๊ฒฝ๋œ ๊ธฐํƒ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. `/claude-api managed-agents-onboard`๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด Managed Agent๋ฅผ ๋งŒ๋“œ๋Š” ๋Œ€ํ™”ํ˜• ์•ˆ๋‚ด๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค |

49| `/clear` | ๋นˆ ์ปจํ…์ŠคํŠธ๋กœ ์ƒˆ ๋Œ€ํ™”๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋Œ€ํ™”๋Š” `/resume`์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๋Œ€ํ™”๋ฅผ ๊ณ„์†ํ•˜๋ฉด์„œ ์ปจํ…์ŠคํŠธ๋ฅผ ํ™•๋ณดํ•˜๋ ค๋ฉด `/compact`๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜์„ธ์š”. ๋ณ„์นญ: `/reset`, `/new` |49| `/clear [name]` | ๋นˆ ์ปจํ…์ŠคํŠธ๋กœ ์ƒˆ ๋Œ€ํ™”๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋Œ€ํ™”๋Š” `/resume`์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์„ ์ „๋‹ฌํ•˜์—ฌ `/resume` ์„ ํƒ๊ธฐ์—์„œ ์ด์ „ ๋Œ€ํ™”์— ๋ ˆ์ด๋ธ”์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๋Œ€ํ™”๋ฅผ ๊ณ„์†ํ•˜๋ฉด์„œ ์ปจํ…์ŠคํŠธ๋ฅผ ํ™•๋ณดํ•˜๋ ค๋ฉด `/compact`๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜์„ธ์š”. ๋ณ„์นญ: `/reset`, `/new` |

50| `/color [color\|default]` | ํ˜„์žฌ ์„ธ์…˜์˜ ํ”„๋กฌํ”„ํŠธ ๋ฐ” ์ƒ‰์ƒ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒ‰์ƒ: `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, `cyan`. ์ดˆ๊ธฐํ™”ํ•˜๋ ค๋ฉด `default`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ธ์ˆ˜ ์—†์ด ์‹คํ–‰ํ•˜๋ฉด ๋ฌด์ž‘์œ„ ์ƒ‰์ƒ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. [Remote Control](/ko/remote-control)์ด ์—ฐ๊ฒฐ๋˜๋ฉด ์ƒ‰์ƒ์ด claude.ai/code์™€ ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค |50| `/color [color\|default]` | ํ˜„์žฌ ์„ธ์…˜์˜ ํ”„๋กฌํ”„ํŠธ ๋ฐ” ์ƒ‰์ƒ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒ‰์ƒ: `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, `cyan`. ์ดˆ๊ธฐํ™”ํ•˜๋ ค๋ฉด `default`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ธ์ˆ˜ ์—†์ด ์‹คํ–‰ํ•˜๋ฉด ๋ฌด์ž‘์œ„ ์ƒ‰์ƒ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. [Remote Control](/ko/remote-control)์ด ์—ฐ๊ฒฐ๋˜๋ฉด ์ƒ‰์ƒ์ด claude.ai/code์™€ ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค |

51| `/compact [instructions]` | ์ง€๊ธˆ๊นŒ์ง€์˜ ๋Œ€ํ™”๋ฅผ ์š”์•ฝํ•˜์—ฌ ์ปจํ…์ŠคํŠธ๋ฅผ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ์ ์œผ๋กœ ์š”์•ฝ์— ๋Œ€ํ•œ ํฌ์ปค์Šค ์ง€์นจ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. [compaction์ด ๊ทœ์น™, skills ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•](/ko/context-window#what-survives-compaction)์„ ์ฐธ์กฐํ•˜์„ธ์š” |51| `/compact [instructions]` | ์ง€๊ธˆ๊นŒ์ง€์˜ ๋Œ€ํ™”๋ฅผ ์š”์•ฝํ•˜์—ฌ ์ปจํ…์ŠคํŠธ๋ฅผ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ์ ์œผ๋กœ ์š”์•ฝ์— ๋Œ€ํ•œ ํฌ์ปค์Šค ์ง€์นจ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. [compaction์ด ๊ทœ์น™, skills ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•](/ko/context-window#what-survives-compaction)์„ ์ฐธ์กฐํ•˜์„ธ์š” |

52| `/config` | [Settings](/ko/settings) ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ด์–ด ํ…Œ๋งˆ, ๋ชจ๋ธ, [output style](/ko/output-styles) ๋ฐ ๊ธฐํƒ€ ๊ธฐ๋ณธ ์„ค์ •์„ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ณ„์นญ: `/settings` |52| `/config` | [Settings](/ko/settings) ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ด์–ด ํ…Œ๋งˆ, ๋ชจ๋ธ, [output style](/ko/output-styles) ๋ฐ ๊ธฐํƒ€ ๊ธฐ๋ณธ ์„ค์ •์„ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ณ„์นญ: `/settings` |

53| `/context` | ํ˜„์žฌ ์ปจํ…์ŠคํŠธ ์‚ฌ์šฉ๋Ÿ‰์„ ์ƒ‰์ƒ ๊ทธ๋ฆฌ๋“œ๋กœ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…์ŠคํŠธ ์ง‘์•ฝ์  ๋„๊ตฌ, ๋ฉ”๋ชจ๋ฆฌ ๋ถ€ํ’€๋ฆผ ๋ฐ ์šฉ๋Ÿ‰ ๊ฒฝ๊ณ ์— ๋Œ€ํ•œ ์ตœ์ ํ™” ์ œ์•ˆ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค |53| `/context [all]` | ํ˜„์žฌ ์ปจํ…์ŠคํŠธ ์‚ฌ์šฉ๋Ÿ‰์„ ์ƒ‰์ƒ ๊ทธ๋ฆฌ๋“œ๋กœ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…์ŠคํŠธ ์ง‘์•ฝ์  ๋„๊ตฌ, ๋ฉ”๋ชจ๋ฆฌ ๋ถ€ํ’€๋ฆผ ๋ฐ ์šฉ๋Ÿ‰ ๊ฒฝ๊ณ ์— ๋Œ€ํ•œ ์ตœ์ ํ™” ์ œ์•ˆ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. [fullscreen mode](/ko/fullscreen)์—์„œ๋Š” ํ•ญ๋ชฉ๋ณ„ ๋ถ„์„์ด ๊ทธ๋ฆฌ๋“œ๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์ถ•์†Œ๋ฉ๋‹ˆ๋‹ค. `all`์„ ์ „๋‹ฌํ•˜์—ฌ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค |

54| `/copy [N]` | ๋งˆ์ง€๋ง‰ ์–ด์‹œ์Šคํ„ดํŠธ ์‘๋‹ต์„ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž `N`์„ ์ „๋‹ฌํ•˜์—ฌ N๋ฒˆ์งธ ์ตœ์‹  ์‘๋‹ต์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค: `/copy 2`๋Š” ๋‘ ๋ฒˆ์งธ ๋งˆ์ง€๋ง‰ ์‘๋‹ต์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ธ”๋ก์ด ์žˆ์„ ๋•Œ๋Š” ๊ฐœ๋ณ„ ๋ธ”๋ก ๋˜๋Š” ์ „์ฒด ์‘๋‹ต์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ™”ํ˜• ์„ ํƒ๊ธฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ๊ธฐ์—์„œ `w`๋ฅผ ๋ˆ„๋ฅด๋ฉด ํด๋ฆฝ๋ณด๋“œ ๋Œ€์‹  ํŒŒ์ผ์— ์„ ํƒ ํ•ญ๋ชฉ์„ ์ž‘์„ฑํ•˜๋ฉฐ, ์ด๋Š” SSH๋ฅผ ํ†ตํ•ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค |54| `/copy [N]` | ๋งˆ์ง€๋ง‰ ์–ด์‹œ์Šคํ„ดํŠธ ์‘๋‹ต์„ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž `N`์„ ์ „๋‹ฌํ•˜์—ฌ N๋ฒˆ์งธ ์ตœ์‹  ์‘๋‹ต์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค: `/copy 2`๋Š” ๋‘ ๋ฒˆ์งธ ๋งˆ์ง€๋ง‰ ์‘๋‹ต์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ธ”๋ก์ด ์žˆ์„ ๋•Œ๋Š” ๊ฐœ๋ณ„ ๋ธ”๋ก ๋˜๋Š” ์ „์ฒด ์‘๋‹ต์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ™”ํ˜• ์„ ํƒ๊ธฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ๊ธฐ์—์„œ `w`๋ฅผ ๋ˆ„๋ฅด๋ฉด ํด๋ฆฝ๋ณด๋“œ ๋Œ€์‹  ํŒŒ์ผ์— ์„ ํƒ ํ•ญ๋ชฉ์„ ์ž‘์„ฑํ•˜๋ฉฐ, ์ด๋Š” SSH๋ฅผ ํ†ตํ•ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค |

55| `/cost` | `/usage`์˜ ๋ณ„์นญ์ž…๋‹ˆ๋‹ค |55| `/cost` | `/usage`์˜ ๋ณ„์นญ์ž…๋‹ˆ๋‹ค |

56| `/debug [description]` | **[Skill](/ko/skills#bundled-skills).** ํ˜„์žฌ ์„ธ์…˜์— ๋Œ€ํ•ด ๋””๋ฒ„๊ทธ ๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์„ธ์…˜ ๋””๋ฒ„๊ทธ ๋กœ๊ทธ๋ฅผ ์ฝ์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋””๋ฒ„๊ทธ ๋กœ๊น…์€ `claude --debug`๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊บผ์ ธ ์žˆ์œผ๋ฏ€๋กœ, ์„ธ์…˜ ์ค‘๊ฐ„์— `/debug`๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๊ทธ ์‹œ์ ๋ถ€ํ„ฐ ๋กœ๊ทธ ์บก์ฒ˜๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ์ ์œผ๋กœ ๋ถ„์„์— ์ดˆ์ ์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค |56| `/debug [description]` | **[Skill](/ko/skills#bundled-skills).** ํ˜„์žฌ ์„ธ์…˜์— ๋Œ€ํ•ด ๋””๋ฒ„๊ทธ ๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์„ธ์…˜ ๋””๋ฒ„๊ทธ ๋กœ๊ทธ๋ฅผ ์ฝ์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋””๋ฒ„๊ทธ ๋กœ๊น…์€ `claude --debug`๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊บผ์ ธ ์žˆ์œผ๋ฏ€๋กœ, ์„ธ์…˜ ์ค‘๊ฐ„์— `/debug`๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๊ทธ ์‹œ์ ๋ถ€ํ„ฐ ๋กœ๊ทธ ์บก์ฒ˜๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ์ ์œผ๋กœ ๋ถ„์„์— ์ดˆ์ ์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค |


88| `/powerup` | ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ๋ชจ๊ฐ€ ํฌํ•จ๋œ ๋น ๋ฅธ ๋Œ€ํ™”ํ˜• ๋ ˆ์Šจ์„ ํ†ตํ•ด Claude Code ๊ธฐ๋Šฅ์„ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค |88| `/powerup` | ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ๋ชจ๊ฐ€ ํฌํ•จ๋œ ๋น ๋ฅธ ๋Œ€ํ™”ํ˜• ๋ ˆ์Šจ์„ ํ†ตํ•ด Claude Code ๊ธฐ๋Šฅ์„ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค |

89| `/pr-comments [PR]` | {/* max-version: 2.1.90 */}v2.1.91์—์„œ ์ œ๊ฑฐ๋จ. ๋Œ€์‹  Claude์— ์ง์ ‘ pull request ๋Œ“๊ธ€์„ ๋ณด๋„๋ก ์š”์ฒญํ•˜์„ธ์š”. ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” GitHub pull request์˜ ๋Œ“๊ธ€์„ ๊ฐ€์ ธ์™€ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ PR์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ฑฐ๋‚˜ PR URL ๋˜๋Š” ๋ฒˆํ˜ธ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. `gh` CLI๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค |89| `/pr-comments [PR]` | {/* max-version: 2.1.90 */}v2.1.91์—์„œ ์ œ๊ฑฐ๋จ. ๋Œ€์‹  Claude์— ์ง์ ‘ pull request ๋Œ“๊ธ€์„ ๋ณด๋„๋ก ์š”์ฒญํ•˜์„ธ์š”. ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” GitHub pull request์˜ ๋Œ“๊ธ€์„ ๊ฐ€์ ธ์™€ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ PR์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ฑฐ๋‚˜ PR URL ๋˜๋Š” ๋ฒˆํ˜ธ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. `gh` CLI๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค |

90| `/privacy-settings` | ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ์„ค์ •์„ ๋ณด๊ณ  ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. Pro ๋ฐ Max ์š”๊ธˆ์ œ ๊ตฌ๋…์ž๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค |90| `/privacy-settings` | ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ์„ค์ •์„ ๋ณด๊ณ  ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. Pro ๋ฐ Max ์š”๊ธˆ์ œ ๊ตฌ๋…์ž๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค |

91| `/radio` | Claude FM lo-fi ๋ผ๋””์˜ค๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ฝ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„ ๋•Œ ์ŠคํŠธ๋ฆผ URL์„ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. Bedrock, Vertex ๋˜๋Š” Foundry์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค |

91| `/recap` | ํ˜„์žฌ ์„ธ์…˜์˜ ํ•œ ์ค„ ์š”์•ฝ์„ ์š”์ฒญ ์‹œ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ž๋™์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” [Session recap](/ko/interactive-mode#session-recap)์„ ์ฐธ์กฐํ•˜์„ธ์š”. ์ด๋Š” ๋– ๋‚œ ํ›„ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค |92| `/recap` | ํ˜„์žฌ ์„ธ์…˜์˜ ํ•œ ์ค„ ์š”์•ฝ์„ ์š”์ฒญ ์‹œ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ž๋™์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” [Session recap](/ko/interactive-mode#session-recap)์„ ์ฐธ์กฐํ•˜์„ธ์š”. ์ด๋Š” ๋– ๋‚œ ํ›„ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค |

92| `/release-notes` | ๋Œ€ํ™”ํ˜• ๋ฒ„์ „ ์„ ํƒ๊ธฐ์—์„œ ๋ณ€๊ฒฝ ๋กœ๊ทธ๋ฅผ ๋ด…๋‹ˆ๋‹ค. ํŠน์ • ๋ฒ„์ „์„ ์„ ํƒํ•˜์—ฌ ํ•ด๋‹น ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋ฅผ ๋ณด๊ฑฐ๋‚˜, ๋ชจ๋“  ๋ฒ„์ „์„ ํ‘œ์‹œํ•˜๋„๋ก ์„ ํƒํ•ฉ๋‹ˆ๋‹ค |93| `/release-notes` | ๋Œ€ํ™”ํ˜• ๋ฒ„์ „ ์„ ํƒ๊ธฐ์—์„œ ๋ณ€๊ฒฝ ๋กœ๊ทธ๋ฅผ ๋ด…๋‹ˆ๋‹ค. ํŠน์ • ๋ฒ„์ „์„ ์„ ํƒํ•˜์—ฌ ํ•ด๋‹น ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋ฅผ ๋ณด๊ฑฐ๋‚˜, ๋ชจ๋“  ๋ฒ„์ „์„ ํ‘œ์‹œํ•˜๋„๋ก ์„ ํƒํ•ฉ๋‹ˆ๋‹ค |

93| `/reload-plugins` | ๋ชจ๋“  ํ™œ์„ฑ [plugins](/ko/plugins)๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•˜์—ฌ ์žฌ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ณ  ๋ณด๋ฅ˜ ์ค‘์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋‹ค์‹œ ๋กœ๋“œ๋œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ณด๊ณ ํ•˜๊ณ  ๋กœ๋“œ ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค |94| `/reload-plugins` | ๋ชจ๋“  ํ™œ์„ฑ [plugins](/ko/plugins)๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•˜์—ฌ ์žฌ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ณ  ๋ณด๋ฅ˜ ์ค‘์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋‹ค์‹œ ๋กœ๋“œ๋œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ณด๊ณ ํ•˜๊ณ  ๋กœ๋“œ ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค |

env-vars.md +2 โˆ’0

Details

116| `CLAUDE_CODE_MAX_RETRIES` | ์‹คํŒจํ•œ API ์š”์ฒญ์„ ์žฌ์‹œ๋„ํ•  ํšŸ์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ๊ฐ’: 10) |116| `CLAUDE_CODE_MAX_RETRIES` | ์‹คํŒจํ•œ API ์š”์ฒญ์„ ์žฌ์‹œ๋„ํ•  ํšŸ์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ๊ฐ’: 10) |

117| `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` | ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ๊ธฐ ์ „์šฉ ๋„๊ตฌ ๋ฐ subagent์˜ ์ตœ๋Œ€ ์ˆ˜(๊ธฐ๋ณธ๊ฐ’: 10). ๋” ๋†’์€ ๊ฐ’์€ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค์ง€๋งŒ ๋” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค. |117| `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` | ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ๊ธฐ ์ „์šฉ ๋„๊ตฌ ๋ฐ subagent์˜ ์ตœ๋Œ€ ์ˆ˜(๊ธฐ๋ณธ๊ฐ’: 10). ๋” ๋†’์€ ๊ฐ’์€ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค์ง€๋งŒ ๋” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค. |

118| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | stdio MCP ์„œ๋ฒ„๋ฅผ ์•ˆ์ „ํ•œ ๊ธฐ๋ณธ ํ™˜๊ฒฝ๊ณผ ์„œ๋ฒ„์˜ ๊ตฌ์„ฑ๋œ `env`๋งŒ์œผ๋กœ ์ƒ์„ฑํ•˜๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์…ธ ํ™˜๊ฒฝ์„ ์ƒ์†ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. |118| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | stdio MCP ์„œ๋ฒ„๋ฅผ ์•ˆ์ „ํ•œ ๊ธฐ๋ณธ ํ™˜๊ฒฝ๊ณผ ์„œ๋ฒ„์˜ ๊ตฌ์„ฑ๋œ `env`๋งŒ์œผ๋กœ ์ƒ์„ฑํ•˜๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์…ธ ํ™˜๊ฒฝ์„ ์ƒ์†ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. |

119| `CLAUDE_CODE_NATIVE_CURSOR` | ํ„ฐ๋ฏธ๋„์˜ ์ž์ฒด ์ปค์„œ๋ฅผ ์ž…๋ ฅ ์บ๋Ÿฟ์—์„œ ๊ทธ๋ ค์ง„ ๋ธ”๋ก ๋Œ€์‹  ํ‘œ์‹œํ•˜๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ปค์„œ๋Š” ํ„ฐ๋ฏธ๋„์˜ ๊นœ๋ฐ•์ž„, ๋ชจ์–‘, ํฌ์ปค์Šค ์„ค์ •์„ ์กด์ค‘ํ•ฉ๋‹ˆ๋‹ค. |

119| `CLAUDE_CODE_NEW_INIT` | `/init`์ด ๋Œ€ํ™”ํ˜• ์„ค์ • ํ๋ฆ„์„ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ๋ฆ„์€ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ์ž‘์„ฑํ•˜๊ธฐ ์ „์— CLAUDE.md, skill ๋ฐ ํ›…์„ ํฌํ•จํ•˜์—ฌ ์ƒ์„ฑํ•  ํŒŒ์ผ์„ ๋ฌป์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€์ˆ˜๊ฐ€ ์—†์œผ๋ฉด `/init`์€ ํ”„๋กฌํ”„ํŠธ ์—†์ด ์ž๋™์œผ๋กœ CLAUDE.md๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. |120| `CLAUDE_CODE_NEW_INIT` | `/init`์ด ๋Œ€ํ™”ํ˜• ์„ค์ • ํ๋ฆ„์„ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ๋ฆ„์€ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ์ž‘์„ฑํ•˜๊ธฐ ์ „์— CLAUDE.md, skill ๋ฐ ํ›…์„ ํฌํ•จํ•˜์—ฌ ์ƒ์„ฑํ•  ํŒŒ์ผ์„ ๋ฌป์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€์ˆ˜๊ฐ€ ์—†์œผ๋ฉด `/init`์€ ํ”„๋กฌํ”„ํŠธ ์—†์ด ์ž๋™์œผ๋กœ CLAUDE.md๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. |

120| `CLAUDE_CODE_NO_FLICKER` | [์ „์ฒด ํ™”๋ฉด ๋ Œ๋”๋ง](/ko/fullscreen)์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊นœ๋ฐ•์ž„์„ ์ค„์ด๊ณ  ๊ธด ๋Œ€ํ™”์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ‰ํƒ„ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ์—ฐ๊ตฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ž…๋‹ˆ๋‹ค. [`tui`](/ko/settings#available-settings) ์„ค์ •๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. `/tui fullscreen`์œผ๋กœ๋„ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. |121| `CLAUDE_CODE_NO_FLICKER` | [์ „์ฒด ํ™”๋ฉด ๋ Œ๋”๋ง](/ko/fullscreen)์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊นœ๋ฐ•์ž„์„ ์ค„์ด๊ณ  ๊ธด ๋Œ€ํ™”์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ‰ํƒ„ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ์—ฐ๊ตฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ž…๋‹ˆ๋‹ค. [`tui`](/ko/settings#available-settings) ์„ค์ •๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. `/tui fullscreen`์œผ๋กœ๋„ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. |

121| `CLAUDE_CODE_OAUTH_REFRESH_TOKEN` | Claude.ai ์ธ์ฆ์šฉ OAuth ์ƒˆ๋กœ ๊ณ ์นจ ํ† ํฐ์ž…๋‹ˆ๋‹ค. ์„ค์ •ํ•˜๋ฉด `claude auth login`์ด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด์ง€ ์•Š๊ณ  ์ด ํ† ํฐ์„ ์ง์ ‘ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค. `CLAUDE_CODE_OAUTH_SCOPES`๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ํ™”๋œ ํ™˜๊ฒฝ์—์„œ ์ธ์ฆ์„ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. |122| `CLAUDE_CODE_OAUTH_REFRESH_TOKEN` | Claude.ai ์ธ์ฆ์šฉ OAuth ์ƒˆ๋กœ ๊ณ ์นจ ํ† ํฐ์ž…๋‹ˆ๋‹ค. ์„ค์ •ํ•˜๋ฉด `claude auth login`์ด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด์ง€ ์•Š๊ณ  ์ด ํ† ํฐ์„ ์ง์ ‘ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค. `CLAUDE_CODE_OAUTH_SCOPES`๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ํ™”๋œ ํ™˜๊ฒฝ์—์„œ ์ธ์ฆ์„ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. |


191| `DISABLE_TELEMETRY` | ์›๊ฒฉ ๋ถ„์„์„ ๊ฑฐ๋ถ€ํ•˜๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์›๊ฒฉ ๋ถ„์„ ์ด๋ฒคํŠธ์—๋Š” ์ฝ”๋“œ, ํŒŒ์ผ ๊ฒฝ๋กœ ๋˜๋Š” bash ๋ช…๋ น๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. |192| `DISABLE_TELEMETRY` | ์›๊ฒฉ ๋ถ„์„์„ ๊ฑฐ๋ถ€ํ•˜๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์›๊ฒฉ ๋ถ„์„ ์ด๋ฒคํŠธ์—๋Š” ์ฝ”๋“œ, ํŒŒ์ผ ๊ฒฝ๋กœ ๋˜๋Š” bash ๋ช…๋ น๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. |

192| `DISABLE_UPDATES` | ์ˆ˜๋™ `claude update` ๋ฐ `claude install`์„ ํฌํ•จํ•œ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๋ฅผ ์ฐจ๋‹จํ•˜๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. `DISABLE_AUTOUPDATER`๋ณด๋‹ค ๋” ์—„๊ฒฉํ•ฉ๋‹ˆ๋‹ค. ์ž์‹ ์˜ ์ฑ„๋„์„ ํ†ตํ•ด Claude Code๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ž์ฒด ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์•„์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. |193| `DISABLE_UPDATES` | ์ˆ˜๋™ `claude update` ๋ฐ `claude install`์„ ํฌํ•จํ•œ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๋ฅผ ์ฐจ๋‹จํ•˜๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. `DISABLE_AUTOUPDATER`๋ณด๋‹ค ๋” ์—„๊ฒฉํ•ฉ๋‹ˆ๋‹ค. ์ž์‹ ์˜ ์ฑ„๋„์„ ํ†ตํ•ด Claude Code๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ž์ฒด ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์•„์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. |

193| `DISABLE_UPGRADE_COMMAND` | `/upgrade` ๋ช…๋ น์„ ์ˆจ๊ธฐ๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. |194| `DISABLE_UPGRADE_COMMAND` | `/upgrade` ๋ช…๋ น์„ ์ˆจ๊ธฐ๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. |

195| `DO_NOT_TRACK` | ์›๊ฒฉ ๋ถ„์„์„ ๊ฑฐ๋ถ€ํ•˜๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. `DISABLE_TELEMETRY` ์„ค์ •๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. [ํ‘œ์ค€ ๊ต์ฐจ ๋„๊ตฌ ๊ทœ์น™](https://consoledonottrack.com/)๋กœ ์ธ์ •๋ฉ๋‹ˆ๋‹ค. |

194| `ENABLE_CLAUDEAI_MCP_SERVERS` | Claude Code์—์„œ [claude.ai MCP ์„œ๋ฒ„](/ko/mcp#use-mcp-servers-from-claude-ai)๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด `false`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. |196| `ENABLE_CLAUDEAI_MCP_SERVERS` | Claude Code์—์„œ [claude.ai MCP ์„œ๋ฒ„](/ko/mcp#use-mcp-servers-from-claude-ai)๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด `false`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. |

195| `ENABLE_PROMPT_CACHING_1H` | API ํ‚ค, [Bedrock](/ko/amazon-bedrock), [Vertex](/ko/google-vertex-ai), [Foundry](/ko/microsoft-foundry) ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ๊ธฐ๋ณธ 5๋ถ„ ๋Œ€์‹  1์‹œ๊ฐ„ ํ”„๋กฌํ”„ํŠธ ์บ์‹œ TTL์„ ์š”์ฒญํ•˜๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋… ์‚ฌ์šฉ์ž๋Š” ์ž๋™์œผ๋กœ 1์‹œ๊ฐ„ TTL์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. 1์‹œ๊ฐ„ ์บ์‹œ ์“ฐ๊ธฐ๋Š” ๋” ๋†’์€ ์š”๊ธˆ์œผ๋กœ ์ฒญ๊ตฌ๋ฉ๋‹ˆ๋‹ค. |197| `ENABLE_PROMPT_CACHING_1H` | API ํ‚ค, [Bedrock](/ko/amazon-bedrock), [Vertex](/ko/google-vertex-ai), [Foundry](/ko/microsoft-foundry) ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ๊ธฐ๋ณธ 5๋ถ„ ๋Œ€์‹  1์‹œ๊ฐ„ ํ”„๋กฌํ”„ํŠธ ์บ์‹œ TTL์„ ์š”์ฒญํ•˜๋ ค๋ฉด `1`๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋… ์‚ฌ์šฉ์ž๋Š” ์ž๋™์œผ๋กœ 1์‹œ๊ฐ„ TTL์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. 1์‹œ๊ฐ„ ์บ์‹œ ์“ฐ๊ธฐ๋Š” ๋” ๋†’์€ ์š”๊ธˆ์œผ๋กœ ์ฒญ๊ตฌ๋ฉ๋‹ˆ๋‹ค. |

196| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ. ๋Œ€์‹  `ENABLE_PROMPT_CACHING_1H` ์‚ฌ์šฉ |198| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ. ๋Œ€์‹  `ENABLE_PROMPT_CACHING_1H` ์‚ฌ์šฉ |

errors.md +16 โˆ’0

Details

31| `Not logged in ยท Please run /login` | [์ธ์ฆ](#not-logged-in) |31| `Not logged in ยท Please run /login` | [์ธ์ฆ](#not-logged-in) |

32| `Invalid API key` | [์ธ์ฆ](#invalid-api-key) |32| `Invalid API key` | [์ธ์ฆ](#invalid-api-key) |

33| `This organization has been disabled` | [์ธ์ฆ](#this-organization-has-been-disabled) |33| `This organization has been disabled` | [์ธ์ฆ](#this-organization-has-been-disabled) |

34| `Routines are disabled by your organization's policy` | [์ธ์ฆ](#routines-are-disabled-by-your-organizations-policy) |

34| `OAuth token revoked` / `OAuth token has expired` | [์ธ์ฆ](#oauth-token-revoked-or-expired) |35| `OAuth token revoked` / `OAuth token has expired` | [์ธ์ฆ](#oauth-token-revoked-or-expired) |

35| `does not meet scope requirement user:profile` | [์ธ์ฆ](#oauth-scope-requirement) |36| `does not meet scope requirement user:profile` | [์ธ์ฆ](#oauth-scope-requirement) |

36| `Unable to connect to API` | [๋„คํŠธ์›Œํฌ](#unable-to-connect-to-api) |37| `Unable to connect to API` | [๋„คํŠธ์›Œํฌ](#unable-to-connect-to-api) |


252* ๊ทธ ํ›„ `/status`๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ™œ์„ฑ ์ž๊ฒฉ ์ฆ๋ช…์ด ๊ตฌ๋…์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.253* ๊ทธ ํ›„ `/status`๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ™œ์„ฑ ์ž๊ฒฉ ์ฆ๋ช…์ด ๊ตฌ๋…์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

253* ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜๋Š”๋ฐ๋„ ์˜ค๋ฅ˜๊ฐ€ ์ง€์†๋˜๋ฉด ๋น„ํ™œ์„ฑํ™”๋œ ์กฐ์ง์ด `/login`์— ์—ฐ๊ฒฐ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ง€์›ํŒ€์— ๋ฌธ์˜ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.254* ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜๋Š”๋ฐ๋„ ์˜ค๋ฅ˜๊ฐ€ ์ง€์†๋˜๋ฉด ๋น„ํ™œ์„ฑํ™”๋œ ์กฐ์ง์ด `/login`์— ์—ฐ๊ฒฐ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ง€์›ํŒ€์— ๋ฌธ์˜ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.

254 255 

256### Routines are disabled by your organization's policy

257 

258ํŒ€ ๋˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ด€๋ฆฌ์ž๊ฐ€ ์กฐ์ง ์ˆ˜์ค€์—์„œ ๋ฃจํ‹ด์„ ๋น„ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๋Š” `/schedule` ๋ฐ claude.ai/code์˜ [Routines](/ko/routines) UI์—์„œ ๋ฃจํ‹ด์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

259 

260```text theme={null}

261Routines are disabled by your organization's policy.

262```

263 

264์ด๋Š” ์„œ๋ฒ„ ์ธก ์„ค์ •์ด๋ฏ€๋กœ ๋กœ์ปฌ ์„ค์ •, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋˜๋Š” CLI ํ”Œ๋ž˜๊ทธ์—์„œ ์žฌ์ •์˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

265 

266**ํ•  ์ผ:**

267 

268* ๊ด€๋ฆฌ์ž์—๊ฒŒ [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code)์—์„œ **Routines** ํ† ๊ธ€์„ ํ™œ์„ฑํ™”ํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

269* ์กฐ์ง ์ˆ˜์ค€์˜ ๋ฃจํ‹ด์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ผํšŒ์„ฑ ์˜ˆ์•ฝ ์ž‘์—…์˜ ๊ฒฝ์šฐ [์˜ˆ์•ฝ๋œ ์ž‘์—…](/ko/scheduled-tasks)์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

270 

255### OAuth token revoked or expired271### OAuth token revoked or expired

256 272 

257์ €์žฅ๋œ ๋กœ๊ทธ์ธ์ด ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ทจ์†Œ๋œ ํ† ํฐ์€ ์–ด๋””์„œ๋‚˜ ๋กœ๊ทธ์•„์›ƒํ–ˆ๊ฑฐ๋‚˜ ๊ด€๋ฆฌ์ž๊ฐ€ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ฑฐํ–ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋งŒ๋ฃŒ๋œ ํ† ํฐ์€ ์ž๋™ ์ƒˆ๋กœ ๊ณ ์นจ์ด ์„ธ์…˜ ์ค‘์— ์‹คํŒจํ–ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.273์ €์žฅ๋œ ๋กœ๊ทธ์ธ์ด ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ทจ์†Œ๋œ ํ† ํฐ์€ ์–ด๋””์„œ๋‚˜ ๋กœ๊ทธ์•„์›ƒํ–ˆ๊ฑฐ๋‚˜ ๊ด€๋ฆฌ์ž๊ฐ€ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ฑฐํ–ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋งŒ๋ฃŒ๋œ ํ† ํฐ์€ ์ž๋™ ์ƒˆ๋กœ ๊ณ ์นจ์ด ์„ธ์…˜ ์ค‘์— ์‹คํŒจํ–ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

interactive-mode.md +2 โˆ’2

Details

289 289 

290Claude๊ฐ€ ์‘๋‹ตํ•œ ํ›„ ๋‹ค์ค‘ ๋ถ€๋ถ„ ์š”์ฒญ์˜ ํ›„์† ๋‹จ๊ณ„ ๋˜๋Š” ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ณ„์†๊ณผ ๊ฐ™์€ ๋Œ€ํ™” ๊ธฐ๋ก์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ์•ˆ์ด ๊ณ„์† ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.290Claude๊ฐ€ ์‘๋‹ตํ•œ ํ›„ ๋‹ค์ค‘ ๋ถ€๋ถ„ ์š”์ฒญ์˜ ํ›„์† ๋‹จ๊ณ„ ๋˜๋Š” ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ณ„์†๊ณผ ๊ฐ™์€ ๋Œ€ํ™” ๊ธฐ๋ก์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ์•ˆ์ด ๊ณ„์† ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

291 291 

292* **Tab** ๋˜๋Š” **Right ํ™”์‚ดํ‘œ**๋ฅผ ๋ˆŒ๋Ÿฌ ์ œ์•ˆ์„ ์ˆ˜๋ฝํ•˜๊ฑฐ๋‚˜ **Enter**๋ฅผ ๋ˆŒ๋Ÿฌ ์ˆ˜๋ฝํ•˜๊ณ  ์ œ์ถœ292* **Tab** ๋˜๋Š” **Right ํ™”์‚ดํ‘œ**๋ฅผ ๋ˆŒ๋Ÿฌ ์ œ์•ˆ์„ ํ”„๋กฌํ”„ํŠธ ์ž…๋ ฅ์— ๋ฐฐ์น˜ํ•œ ํ›„ **Enter**๋ฅผ ๋ˆŒ๋Ÿฌ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค

293* ์ž…๋ ฅ์„ ์‹œ์ž‘ํ•˜์—ฌ ์ œ์•ˆ ํ•ด์ œ293* ์ž…๋ ฅ์„ ์‹œ์ž‘ํ•˜์—ฌ ์ œ์•ˆ์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค

294 294 

295์ œ์•ˆ์€ ๋ถ€๋ชจ ๋Œ€ํ™”์˜ ํ”„๋กฌํ”„ํŠธ ์บ์‹œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์š”์ฒญ์œผ๋กœ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ถ”๊ฐ€ ๋น„์šฉ์€ ์ตœ์†Œ์ž…๋‹ˆ๋‹ค. Claude Code๋Š” ๋ถˆํ•„์š”ํ•œ ๋น„์šฉ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์บ์‹œ๊ฐ€ ์ฝœ๋“œ์ผ ๋•Œ ์ œ์•ˆ ์ƒ์„ฑ์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.295์ œ์•ˆ์€ ๋ถ€๋ชจ ๋Œ€ํ™”์˜ ํ”„๋กฌํ”„ํŠธ ์บ์‹œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์š”์ฒญ์œผ๋กœ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ถ”๊ฐ€ ๋น„์šฉ์€ ์ตœ์†Œ์ž…๋‹ˆ๋‹ค. Claude Code๋Š” ๋ถˆํ•„์š”ํ•œ ๋น„์šฉ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์บ์‹œ๊ฐ€ ์ฝœ๋“œ์ผ ๋•Œ ์ œ์•ˆ ์ƒ์„ฑ์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

296 296 

mcp.md +2 โˆ’0

Details

263 --header "Authorization: Bearer your-token"263 --header "Authorization: Bearer your-token"

264```264```

265 265 

266`.mcp.json`, `~/.claude.json` ๋˜๋Š” `claude mcp add-json`์„ ํ†ตํ•ด JSON์œผ๋กœ MCP ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ, `type` ํ•„๋“œ๋Š” `http`์˜ ๋ณ„์นญ์œผ๋กœ `streamable-http`๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. MCP ์‚ฌ์–‘์€ ์ด ์ „์†ก์— ๋Œ€ํ•ด `streamable-http`๋ผ๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์„œ๋ฒ„ ์„ค๋ช…์„œ์—์„œ ๋ณต์‚ฌํ•œ ๊ตฌ์„ฑ์ด ์ˆ˜์ • ์—†์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

267 

266### ์˜ต์…˜ 2: ์›๊ฒฉ SSE ์„œ๋ฒ„ ์ถ”๊ฐ€268### ์˜ต์…˜ 2: ์›๊ฒฉ SSE ์„œ๋ฒ„ ์ถ”๊ฐ€

267 269 

268<Warning>270<Warning>

plugins-reference.md +8 โˆ’3

Details

423 423 

424| ํ•„๋“œ | ํƒ€์ž… | ์„ค๋ช… | ์˜ˆ์‹œ |424| ํ•„๋“œ | ํƒ€์ž… | ์„ค๋ช… | ์˜ˆ์‹œ |

425| :---------------------- | :-------------------- | :-------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |425| :---------------------- | :-------------------- | :-------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |

426| `skills` | string\|array | `<name>/SKILL.md`๋ฅผ ํฌํ•จํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ skill ๋””๋ ‰ํ† ๋ฆฌ (๊ธฐ๋ณธ `skills/` ๋Œ€์ฒด) | `"./custom/skills/"` |426| `skills` | string\|array | `<name>/SKILL.md`๋ฅผ ํฌํ•จํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ skill ๋””๋ ‰ํ† ๋ฆฌ (๊ธฐ๋ณธ `skills/` ์™ธ์— ์ถ”๊ฐ€) | `"./custom/skills/"` |

427| `commands` | string\|array | ์‚ฌ์šฉ์ž ์ •์˜ ํ‰๋ฉด `.md` skill ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ (๊ธฐ๋ณธ `commands/` ๋Œ€์ฒด) | `"./custom/cmd.md"` ๋˜๋Š” `["./cmd1.md"]` |427| `commands` | string\|array | ์‚ฌ์šฉ์ž ์ •์˜ ํ‰๋ฉด `.md` skill ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ (๊ธฐ๋ณธ `commands/` ๋Œ€์ฒด) | `"./custom/cmd.md"` ๋˜๋Š” `["./cmd1.md"]` |

428| `agents` | string\|array | ์‚ฌ์šฉ์ž ์ •์˜ agent ํŒŒ์ผ (๊ธฐ๋ณธ `agents/` ๋Œ€์ฒด) | `"./custom/agents/reviewer.md"` |428| `agents` | string\|array | ์‚ฌ์šฉ์ž ์ •์˜ agent ํŒŒ์ผ (๊ธฐ๋ณธ `agents/` ๋Œ€์ฒด) | `"./custom/agents/reviewer.md"` |

429| `hooks` | string\|array\|object | Hook ๊ตฌ์„ฑ ๊ฒฝ๋กœ ๋˜๋Š” ์ธ๋ผ์ธ ๊ตฌ์„ฑ | `"./my-extra-hooks.json"` |429| `hooks` | string\|array\|object | Hook ๊ตฌ์„ฑ ๊ฒฝ๋กœ ๋˜๋Š” ์ธ๋ผ์ธ ๊ตฌ์„ฑ | `"./my-extra-hooks.json"` |


510 510 

511### ๊ฒฝ๋กœ ๋™์ž‘ ๊ทœ์น™511### ๊ฒฝ๋กœ ๋™์ž‘ ๊ทœ์น™

512 512 

513`skills`, `commands`, `agents`, `outputStyles`, `experimental.themes` ๋ฐ `experimental.monitors`์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ •์˜ ๊ฒฝ๋กœ๋Š” ๊ธฐ๋ณธ๊ฐ’์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ๋งค๋‹ˆํŽ˜์ŠคํŠธ๊ฐ€ `skills`๋ฅผ ์ง€์ •ํ•˜๋ฉด ๊ธฐ๋ณธ `skills/` ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์Šค์บ”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งค๋‹ˆํŽ˜์ŠคํŠธ๊ฐ€ `experimental.monitors`๋ฅผ ์ง€์ •ํ•˜๋ฉด ๊ธฐ๋ณธ `monitors/monitors.json`์€ ๋กœ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. [Hooks](#hooks), [MCP servers](#mcp-servers) ๋ฐ [LSP servers](#lsp-servers)๋Š” ์—ฌ๋Ÿฌ ์†Œ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.513์‚ฌ์šฉ์ž ์ •์˜ ๊ฒฝ๋กœ๊ฐ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊ธฐ๋ณธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋Œ€์ฒดํ•˜๋Š”์ง€ ํ™•์žฅํ•˜๋Š”์ง€๋Š” ํ•„๋“œ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค:

514 

515* **๊ธฐ๋ณธ๊ฐ’ ๋Œ€์ฒด**: `commands`, `agents`, `outputStyles`, `experimental.themes`, `experimental.monitors`. ์˜ˆ๋ฅผ ๋“ค์–ด ๋งค๋‹ˆํŽ˜์ŠคํŠธ๊ฐ€ `commands`๋ฅผ ์ง€์ •ํ•˜๋ฉด ๊ธฐ๋ณธ `commands/` ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์Šค์บ”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์„ ์œ ์ง€ํ•˜๊ณ  ๋” ๋งŽ์€ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋ช…์‹œ์ ์œผ๋กœ ๋‚˜์—ดํ•˜์„ธ์š”: `"commands": ["./commands/", "./extras/"]`

516* **๊ธฐ๋ณธ๊ฐ’์— ์ถ”๊ฐ€**: `skills`. ๊ธฐ๋ณธ `skills/` ๋””๋ ‰ํ† ๋ฆฌ๋Š” ํ•ญ์ƒ ์Šค์บ”๋˜๋ฉฐ, `skills`์— ๋‚˜์—ด๋œ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ํ•จ๊ป˜ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

517* **์ž์ฒด ๋ณ‘ํ•ฉ ๊ทœ์น™**: [hooks](#hooks), [MCP servers](#mcp-servers) ๋ฐ [LSP servers](#lsp-servers). ๊ฐ ์„น์…˜์—์„œ ์—ฌ๋Ÿฌ ์†Œ์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉ๋˜๋Š”์ง€ ์ฐธ์กฐํ•˜์„ธ์š”.

518 

519๋ชจ๋“  ๊ฒฝ๋กœ ํ•„๋“œ์˜ ๊ฒฝ์šฐ:

514 520 

515* ๋ชจ๋“  ๊ฒฝ๋กœ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ์— ์ƒ๋Œ€์ ์ด์–ด์•ผ ํ•˜๋ฉฐ `./`๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.521* ๋ชจ๋“  ๊ฒฝ๋กœ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ์— ์ƒ๋Œ€์ ์ด์–ด์•ผ ํ•˜๋ฉฐ `./`๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

516* ์‚ฌ์šฉ์ž ์ •์˜ ๊ฒฝ๋กœ์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋™์ผํ•œ ๋ช…๋ช… ๋ฐ ๋„ค์ž„์ŠคํŽ˜์ด์‹ฑ ๊ทœ์น™์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.522* ์‚ฌ์šฉ์ž ์ •์˜ ๊ฒฝ๋กœ์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋™์ผํ•œ ๋ช…๋ช… ๋ฐ ๋„ค์ž„์ŠคํŽ˜์ด์‹ฑ ๊ทœ์น™์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

517* ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ๋ฅผ ๋ฐฐ์—ด๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.523* ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ๋ฅผ ๋ฐฐ์—ด๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

518* skills, commands, agents ๋˜๋Š” output styles์˜ ๊ธฐ๋ณธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๋” ๋งŽ์€ ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋ฐฐ์—ด์— ๊ธฐ๋ณธ๊ฐ’์„ ํฌํ•จํ•˜์„ธ์š”: `"skills": ["./skills/", "./extras/"]`

519* skill ๊ฒฝ๋กœ๊ฐ€ `SKILL.md`๋ฅผ ์ง์ ‘ ํฌํ•จํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ (์˜ˆ: ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” `"skills": ["./"]`), frontmatter์˜ `name` ํ•„๋“œ๊ฐ€ skill์˜ ํ˜ธ์ถœ ์ด๋ฆ„์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„ค์น˜ ๋””๋ ‰ํ† ๋ฆฌ์™€ ๊ด€๊ณ„์—†์ด ์•ˆ์ •์ ์ธ ์ด๋ฆ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. `name`์ด frontmatter์— ์„ค์ •๋˜์ง€ ์•Š์œผ๋ฉด ๋””๋ ‰ํ† ๋ฆฌ basename์ด ํด๋ฐฑ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.524* skill ๊ฒฝ๋กœ๊ฐ€ `SKILL.md`๋ฅผ ์ง์ ‘ ํฌํ•จํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ (์˜ˆ: ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฃจํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” `"skills": ["./"]`), frontmatter์˜ `name` ํ•„๋“œ๊ฐ€ skill์˜ ํ˜ธ์ถœ ์ด๋ฆ„์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„ค์น˜ ๋””๋ ‰ํ† ๋ฆฌ์™€ ๊ด€๊ณ„์—†์ด ์•ˆ์ •์ ์ธ ์ด๋ฆ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. `name`์ด frontmatter์— ์„ค์ •๋˜์ง€ ์•Š์œผ๋ฉด ๋””๋ ‰ํ† ๋ฆฌ basename์ด ํด๋ฐฑ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

520 525 

521**๊ฒฝ๋กœ ์˜ˆ์‹œ**:526**๊ฒฝ๋กœ ์˜ˆ์‹œ**:

routines.md +8 โˆ’0

Details

22 22 

23๋ฃจํ‹ด์€ [์›น์—์„œ Claude Code](/ko/claude-code-on-the-web)๊ฐ€ ํ™œ์„ฑํ™”๋œ Pro, Max, Team ๋ฐ Enterprise ํ”Œ๋žœ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [claude.ai/code/routines](https://claude.ai/code/routines)์—์„œ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ CLI์—์„œ `/schedule`๋กœ ๊ด€๋ฆฌํ•˜์„ธ์š”.23๋ฃจํ‹ด์€ [์›น์—์„œ Claude Code](/ko/claude-code-on-the-web)๊ฐ€ ํ™œ์„ฑํ™”๋œ Pro, Max, Team ๋ฐ Enterprise ํ”Œ๋žœ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [claude.ai/code/routines](https://claude.ai/code/routines)์—์„œ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ CLI์—์„œ `/schedule`๋กœ ๊ด€๋ฆฌํ•˜์„ธ์š”.

24 24 

25Team ๋ฐ Enterprise ๊ด€๋ฆฌ์ž๋Š” [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code)์˜ ๋ฃจํ‹ด ํ† ๊ธ€๋กœ ๋ชจ๋“  ๊ตฌ์„ฑ์›์— ๋Œ€ํ•ด ๋ฃจํ‹ด์„ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™”๋˜๋ฉด ๊ธฐ์กด ๋ฃจํ‹ด์ด ์‹คํ–‰์„ ์ค‘์ง€ํ•˜๊ณ  ๊ตฌ์„ฑ์›์€ ์ƒˆ๋กœ์šด ๋ฃจํ‹ด์„ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

26 

25์ด ํŽ˜์ด์ง€์—์„œ๋Š” ๋ฃจํ‹ด ์ƒ์„ฑ, ๊ฐ ํŠธ๋ฆฌ๊ฑฐ ์œ ํ˜• ๊ตฌ์„ฑ, ์‹คํ–‰ ๊ด€๋ฆฌ ๋ฐ ์‚ฌ์šฉ ์ œํ•œ ์ ์šฉ ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.27์ด ํŽ˜์ด์ง€์—์„œ๋Š” ๋ฃจํ‹ด ์ƒ์„ฑ, ๊ฐ ํŠธ๋ฆฌ๊ฑฐ ์œ ํ˜• ๊ตฌ์„ฑ, ์‹คํ–‰ ๊ด€๋ฆฌ ๋ฐ ์‚ฌ์šฉ ์ œํ•œ ์ ์šฉ ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

26 28 

27## ์‚ฌ์šฉ ์‚ฌ๋ก€ ์˜ˆ์‹œ29## ์‚ฌ์šฉ ์‚ฌ๋ก€ ์˜ˆ์‹œ


360 362 

361์ผํšŒ์„ฑ ์‹คํ–‰์€ ์ผ์ผ ๋ฃจํ‹ด ์‹คํ–‰ ์ƒํ•œ์„ ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์„ธ์…˜๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ •๊ธฐ ๊ตฌ๋… ์‚ฌ์šฉ์„ ์†Œ๋น„ํ•˜์ง€๋งŒ ๊ณ„์ •๋‹น ์ผ์ผ ๋ฃจํ‹ด ์‹คํ–‰ ํ—ˆ์šฉ๋Ÿ‰์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.363์ผํšŒ์„ฑ ์‹คํ–‰์€ ์ผ์ผ ๋ฃจํ‹ด ์‹คํ–‰ ์ƒํ•œ์„ ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์„ธ์…˜๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ •๊ธฐ ๊ตฌ๋… ์‚ฌ์šฉ์„ ์†Œ๋น„ํ•˜์ง€๋งŒ ๊ณ„์ •๋‹น ์ผ์ผ ๋ฃจํ‹ด ์‹คํ–‰ ํ—ˆ์šฉ๋Ÿ‰์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

362 364 

365## ๋ฌธ์ œ ํ•ด๊ฒฐ

366 

367### "๋ฃจํ‹ด์ด ์กฐ์ง์˜ ์ •์ฑ…์— ์˜ํ•ด ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค"

368 

369Team ๋˜๋Š” Enterprise ๊ด€๋ฆฌ์ž๊ฐ€ [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code)์˜ **๋ฃจํ‹ด** ํ† ๊ธ€์„ ๊บผ๋†จ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„ ์ธก ์กฐ์ง ์„ค์ •์ด๋ฏ€๋กœ ๋กœ์ปฌ ๊ตฌ์„ฑ์—์„œ ์žฌ์ •์˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์กฐ์ง์— ๋Œ€ํ•ด ๋ฃจํ‹ด์„ ํ™œ์„ฑํ™”ํ•˜๋„๋ก ์š”์ฒญํ•˜๋ ค๋ฉด ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•˜์„ธ์š”.

370 

363## ๊ด€๋ จ ๋ฆฌ์†Œ์Šค371## ๊ด€๋ จ ๋ฆฌ์†Œ์Šค

364 372 

365* [`/loop` ๋ฐ ์„ธ์…˜ ๋‚ด ์˜ˆ์•ฝ](/ko/scheduled-tasks): ์—ด๋ฆฐ CLI ์„ธ์…˜ ๋‚ด์—์„œ ๋กœ์ปฌ ์ž‘์—… ์˜ˆ์•ฝ373* [`/loop` ๋ฐ ์„ธ์…˜ ๋‚ด ์˜ˆ์•ฝ](/ko/scheduled-tasks): ์—ด๋ฆฐ CLI ์„ธ์…˜ ๋‚ด์—์„œ ๋กœ์ปฌ ์ž‘์—… ์˜ˆ์•ฝ

security.md +1 โˆ’1

Details

59* **๋„คํŠธ์›Œํฌ ์š”์ฒญ ์Šน์ธ**: ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ํ•˜๋Š” ๋„๊ตฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ์ž ์Šน์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.59* **๋„คํŠธ์›Œํฌ ์š”์ฒญ ์Šน์ธ**: ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ํ•˜๋Š” ๋„๊ตฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ์ž ์Šน์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

60* **๊ฒฉ๋ฆฌ๋œ ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ**: ์›น ๊ฐ€์ ธ์˜ค๊ธฐ๋Š” ๋ณ„๋„์˜ ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž ์žฌ์ ์œผ๋กœ ์•…์˜์ ์ธ ํ”„๋กฌํ”„ํŠธ ์ฃผ์ž…์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.60* **๊ฒฉ๋ฆฌ๋œ ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ**: ์›น ๊ฐ€์ ธ์˜ค๊ธฐ๋Š” ๋ณ„๋„์˜ ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž ์žฌ์ ์œผ๋กœ ์•…์˜์ ์ธ ํ”„๋กฌํ”„ํŠธ ์ฃผ์ž…์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

61* **์‹ ๋ขฐ ํ™•์ธ**: ์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ๋ฒ ์ด์Šค ์‹คํ–‰ ๋ฐ ์ƒˆ MCP ์„œ๋ฒ„๋Š” ์‹ ๋ขฐ ํ™•์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.61* **์‹ ๋ขฐ ํ™•์ธ**: ์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ๋ฒ ์ด์Šค ์‹คํ–‰ ๋ฐ ์ƒˆ MCP ์„œ๋ฒ„๋Š” ์‹ ๋ขฐ ํ™•์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

62 * ์ฐธ๊ณ : `-p` ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋Œ€ํ™”ํ˜•์œผ๋กœ ์‹คํ–‰ํ•  ๋•Œ ์‹ ๋ขฐ ํ™•์ธ์ด ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.62 * ์ฐธ๊ณ : `-p` ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋Œ€ํ™”ํ˜•์œผ๋กœ ์‹คํ–‰ํ•  ๋•Œ ์‹ ๋ขฐ ํ™•์ธ์ด ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์™ธ๋Š” [`--worktree`](/ko/worktrees)์ด๋ฉฐ, ์ด๋Š” ์—ฌ์ „ํžˆ ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•ด ์‹ ๋ขฐ๊ฐ€ ์ˆ˜๋ฝ๋˜์—ˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

63* **๋ช…๋ น ์ฃผ์ž… ๊ฐ์ง€**: ์˜์‹ฌ์Šค๋Ÿฌ์šด bash ๋ช…๋ น์€ ์ด์ „์— ํ—ˆ์šฉ ๋ชฉ๋ก์— ์žˆ์—ˆ๋”๋ผ๋„ ์ˆ˜๋™ ์Šน์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.63* **๋ช…๋ น ์ฃผ์ž… ๊ฐ์ง€**: ์˜์‹ฌ์Šค๋Ÿฌ์šด bash ๋ช…๋ น์€ ์ด์ „์— ํ—ˆ์šฉ ๋ชฉ๋ก์— ์žˆ์—ˆ๋”๋ผ๋„ ์ˆ˜๋™ ์Šน์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

64* **ํ์‡„ํ˜• ๋งค์นญ ์‹คํŒจ**: ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ช…๋ น์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆ˜๋™ ์Šน์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.64* **ํ์‡„ํ˜• ๋งค์นญ ์‹คํŒจ**: ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ช…๋ น์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆ˜๋™ ์Šน์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

65* **์ž์—ฐ์–ด ์„ค๋ช…**: ๋ณต์žกํ•œ bash ๋ช…๋ น์—๋Š” ์‚ฌ์šฉ์ž ์ดํ•ด๋ฅผ ์œ„ํ•œ ์„ค๋ช…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.65* **์ž์—ฐ์–ด ์„ค๋ช…**: ๋ณต์žกํ•œ bash ๋ช…๋ น์—๋Š” ์‚ฌ์šฉ์ž ์ดํ•ด๋ฅผ ์œ„ํ•œ ์„ค๋ช…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Details

41 </Step>41 </Step>

42 42 

43 <Step title="์„ค์ • ์ •์˜">43 <Step title="์„ค์ • ์ •์˜">

44 ๊ตฌ์„ฑ์„ JSON์œผ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. [`settings.json`์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์„ค์ •](/ko/settings#available-settings)์ด ์ง€์›๋˜๋ฉฐ, [hooks](/ko/hooks), [ํ™˜๊ฒฝ ๋ณ€์ˆ˜](/ko/env-vars), ๋ฐ `allowManagedPermissionRulesOnly`์™€ ๊ฐ™์€ [๊ด€๋ฆฌ ์ „์šฉ ์„ค์ •](/ko/permissions#managed-only-settings)๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.44 ๊ตฌ์„ฑ์„ JSON์œผ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. [`settings.json`์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์„ค์ •](/ko/settings#available-settings)์ด ์ง€์›๋˜๋ฉฐ, OS ์ˆ˜์ค€ ์ •์ฑ… ์ „๋‹ฌ๋กœ ์ œํ•œ๋œ ์„ค์ •์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋‘ ์ง€์›๋ฉ๋‹ˆ๋‹ค. [ํ˜„์žฌ ์ œํ•œ์‚ฌํ•ญ](#current-limitations)์—์„œ ํ•ด๋‹น ์งง์€ ๋ชฉ๋ก์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์—ฌ๊ธฐ์—๋Š” [hooks](/ko/hooks), [ํ™˜๊ฒฝ ๋ณ€์ˆ˜](/ko/env-vars), ๋ฐ `allowManagedPermissionRulesOnly`์™€ ๊ฐ™์€ [๊ด€๋ฆฌ ์ „์šฉ ์„ค์ •](/ko/permissions#managed-only-settings)์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

45 45 

46 ์ด ์˜ˆ์ œ๋Š” ๊ถŒํ•œ ๊ฑฐ๋ถ€ ๋ชฉ๋ก์„ ์ ์šฉํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๊ถŒํ•œ์„ ์šฐํšŒํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ฉฐ, ๊ถŒํ•œ ๊ทœ์น™์„ ๊ด€๋ฆฌ ์„ค์ •์— ์ •์˜๋œ ๊ทœ์น™์œผ๋กœ๋งŒ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.46 ์ด ์˜ˆ์ œ๋Š” ๊ถŒํ•œ ๊ฑฐ๋ถ€ ๋ชฉ๋ก์„ ์ ์šฉํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๊ถŒํ•œ์„ ์šฐํšŒํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ฉฐ, ๊ถŒํ•œ ๊ทœ์น™์„ ๊ด€๋ฆฌ ์„ค์ •์— ์ •์˜๋œ ๊ทœ์น™์œผ๋กœ๋งŒ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

47 47 


93 }93 }

94 ```94 ```

95 95 

96 Hook์€ ์…ธ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋Š” ์ ์šฉ๋˜๊ธฐ ์ „์— [๋ณด์•ˆ ์Šน์ธ ๋Œ€ํ™”](#security-approval-dialogs)๋ฅผ ๋ด…๋‹ˆ๋‹ค. `autoMode` ํ•ญ๋ชฉ์ด ๋ถ„๋ฅ˜๊ธฐ๊ฐ€ ์ฐจ๋‹จํ•˜๋Š” ๊ฒƒ์— ์–ด๋–ป๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  `allow` ๋ฐ `soft_deny` ํ•„๋“œ์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ๊ฒฝ๊ณ ๋Š” [์ž๋™ ๋ชจ๋“œ ๊ตฌ์„ฑ](/ko/auto-mode-config)์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.96 Hook์€ ์…ธ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋Š” ์ ์šฉ๋˜๊ธฐ ์ „์— [๋ณด์•ˆ ์Šน์ธ ๋Œ€ํ™”](#security-approval-dialogs)๋ฅผ ๋ด…๋‹ˆ๋‹ค. `autoMode` ํ•ญ๋ชฉ์ด ๋ถ„๋ฅ˜๊ธฐ๊ฐ€ ์ฐจ๋‹จํ•˜๋Š” ๊ฒƒ์— ์–ด๋–ป๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  `environment`, `allow`, `soft_deny`, ๋ฐ `hard_deny` ํ•„๋“œ์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ๊ฒฝ๊ณ ๋Š” [์ž๋™ ๋ชจ๋“œ ๊ตฌ์„ฑ](/ko/auto-mode-config)์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

97 </Step>97 </Step>

98 98 

99 <Step title="์ €์žฅ ๋ฐ ๋ฐฐํฌ">99 <Step title="์ €์žฅ ๋ฐ ๋ฐฐํฌ">


124 124 

125* ์„ค์ •์€ ์กฐ์ง์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ท ์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฃน๋ณ„ ๊ตฌ์„ฑ์€ ์•„์ง ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.125* ์„ค์ •์€ ์กฐ์ง์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ท ์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฃน๋ณ„ ๊ตฌ์„ฑ์€ ์•„์ง ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

126* [MCP ์„œ๋ฒ„ ๊ตฌ์„ฑ](/ko/mcp#managed-mcp-configuration)์€ ์„œ๋ฒ„ ๊ด€๋ฆฌ ์„ค์ •์„ ํ†ตํ•ด ๋ฐฐํฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.126* [MCP ์„œ๋ฒ„ ๊ตฌ์„ฑ](/ko/mcp#managed-mcp-configuration)์€ ์„œ๋ฒ„ ๊ด€๋ฆฌ ์„ค์ •์„ ํ†ตํ•ด ๋ฐฐํฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

127* OS ์ˆ˜์ค€ ์ •์ฑ… ์†Œ์Šค๋กœ ์ œํ•œ๋œ ์„ค์ •(์˜ˆ: `policyHelper` ๋ฐ `wslInheritsWindowsSettings`)์€ ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  MDM ๋˜๋Š” ์‹œ์Šคํ…œ `managed-settings.json` ํŒŒ์ผ์„ ํ†ตํ•ด ๋ฐฐํฌํ•˜์‹ญ์‹œ์˜ค.

127 128 

128## ์„ค์ • ์ „๋‹ฌ129## ์„ค์ • ์ „๋‹ฌ

129 130 

settings.md +28 โˆ’1

Details

169| `attribution` | git ์ปค๋ฐ‹ ๋ฐ pull request์— ๋Œ€ํ•œ attribution์„ ์‚ฌ์šฉ์ž ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. [Attribution ์„ค์ •](#attribution-settings)์„ ์ฐธ์กฐํ•˜์„ธ์š” | `{"commit": "๐Ÿค– Generated with Claude Code", "pr": ""}` |169| `attribution` | git ์ปค๋ฐ‹ ๋ฐ pull request์— ๋Œ€ํ•œ attribution์„ ์‚ฌ์šฉ์ž ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. [Attribution ์„ค์ •](#attribution-settings)์„ ์ฐธ์กฐํ•˜์„ธ์š” | `{"commit": "๐Ÿค– Generated with Claude Code", "pr": ""}` |

170| `autoMemoryDirectory` | [์ž๋™ ๋ฉ”๋ชจ๋ฆฌ](/ko/memory#storage-location) ์ €์žฅ์†Œ๋ฅผ ์œ„ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ ˆ๋Œ€ ๊ฒฝ๋กœ ๋˜๋Š” `~/` ์ ‘๋‘์‚ฌ ๊ฒฝ๋กœ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ •์ฑ… ๋ฐ ์‚ฌ์šฉ์ž ์„ค์ •๊ณผ `--settings` ํ”Œ๋ž˜๊ทธ์—์„œ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ณต์ œ๋œ ์ €์žฅ์†Œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์“ฐ๊ธฐ๋ฅผ ๋ฏผ๊ฐํ•œ ์œ„์น˜๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ”„๋กœ์ ํŠธ ๋˜๋Š” local ์„ค์ •์—์„œ๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค | `"~/my-memory-dir"` |170| `autoMemoryDirectory` | [์ž๋™ ๋ฉ”๋ชจ๋ฆฌ](/ko/memory#storage-location) ์ €์žฅ์†Œ๋ฅผ ์œ„ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ ˆ๋Œ€ ๊ฒฝ๋กœ ๋˜๋Š” `~/` ์ ‘๋‘์‚ฌ ๊ฒฝ๋กœ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ •์ฑ… ๋ฐ ์‚ฌ์šฉ์ž ์„ค์ •๊ณผ `--settings` ํ”Œ๋ž˜๊ทธ์—์„œ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ณต์ œ๋œ ์ €์žฅ์†Œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์“ฐ๊ธฐ๋ฅผ ๋ฏผ๊ฐํ•œ ์œ„์น˜๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ”„๋กœ์ ํŠธ ๋˜๋Š” local ์„ค์ •์—์„œ๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค | `"~/my-memory-dir"` |

171| `autoMemoryEnabled` | [์ž๋™ ๋ฉ”๋ชจ๋ฆฌ](/ko/memory#enable-or-disable-auto-memory)๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. `false`์ผ ๋•Œ Claude๋Š” ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ฝ๊ฑฐ๋‚˜ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’: `true`. ์„ธ์…˜ ์ค‘์— `/memory`๋กœ๋„ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด `env`์—์„œ [`CLAUDE_CODE_DISABLE_AUTO_MEMORY`](/ko/env-vars)๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค | `false` |171| `autoMemoryEnabled` | [์ž๋™ ๋ฉ”๋ชจ๋ฆฌ](/ko/memory#enable-or-disable-auto-memory)๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. `false`์ผ ๋•Œ Claude๋Š” ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ฝ๊ฑฐ๋‚˜ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’: `true`. ์„ธ์…˜ ์ค‘์— `/memory`๋กœ๋„ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด `env`์—์„œ [`CLAUDE_CODE_DISABLE_AUTO_MEMORY`](/ko/env-vars)๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค | `false` |

172| `autoMode` | [์ž๋™ ๋ชจ๋“œ](/ko/permission-modes#eliminate-prompts-with-auto-mode) ๋ถ„๋ฅ˜๊ธฐ๊ฐ€ ์ฐจ๋‹จํ•˜๊ณ  ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์„ ์‚ฌ์šฉ์ž ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. `environment`, `allow` ๋ฐ `soft_deny` ๋ฐฐ์—ด์˜ ์‚ฐ๋ฌธ ๊ทœ์น™์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์— ๋ฆฌํ„ฐ๋Ÿด ๋ฌธ์ž์—ด `"$defaults"`๋ฅผ ํฌํ•จํ•˜์—ฌ ํ•ด๋‹น ์œ„์น˜์—์„œ ๊ธฐ๋ณธ ์ œ๊ณต ๊ทœ์น™์„ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค. [์ž๋™ ๋ชจ๋“œ ๊ตฌ์„ฑ](/ko/auto-mode-config)์„ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ณต์œ  ํ”„๋กœ์ ํŠธ ์„ค์ •์—์„œ๋Š” ์ฝ์ง€ ์•Š์Œ | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |172| `autoMode` | [์ž๋™ ๋ชจ๋“œ](/ko/permission-modes#eliminate-prompts-with-auto-mode) ๋ถ„๋ฅ˜๊ธฐ๊ฐ€ ์ฐจ๋‹จํ•˜๊ณ  ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์„ ์‚ฌ์šฉ์ž ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. `environment`, `allow`, `soft_deny` ๋ฐ `hard_deny` ๋ฐฐ์—ด์˜ ์‚ฐ๋ฌธ ๊ทœ์น™์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์— ๋ฆฌํ„ฐ๋Ÿด ๋ฌธ์ž์—ด `"$defaults"`๋ฅผ ํฌํ•จํ•˜์—ฌ ํ•ด๋‹น ์œ„์น˜์—์„œ ๊ธฐ๋ณธ ์ œ๊ณต ๊ทœ์น™์„ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค. [์ž๋™ ๋ชจ๋“œ ๊ตฌ์„ฑ](/ko/auto-mode-config)์„ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ณต์œ  ํ”„๋กœ์ ํŠธ ์„ค์ •์—์„œ๋Š” ์ฝ์ง€ ์•Š์Œ | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |

173| `autoScrollEnabled` | [fullscreen ๋ Œ๋”๋ง](/ko/fullscreen)์—์„œ ์ƒˆ ์ถœ๋ ฅ์„ ๋Œ€ํ™”์˜ ๋งจ ์•„๋ž˜๋กœ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’: `true`. `/config`์— **์ž๋™ ์Šคํฌ๋กค**๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊บผ์ ธ ์žˆ์„ ๋•Œ๋„ ๊ถŒํ•œ ํ”„๋กฌํ”„ํŠธ๋Š” ์—ฌ์ „ํžˆ ๋ณด๊ธฐ๋กœ ์Šคํฌ๋กค๋ฉ๋‹ˆ๋‹ค | `false` |173| `autoScrollEnabled` | [fullscreen ๋ Œ๋”๋ง](/ko/fullscreen)์—์„œ ์ƒˆ ์ถœ๋ ฅ์„ ๋Œ€ํ™”์˜ ๋งจ ์•„๋ž˜๋กœ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’: `true`. `/config`์— **์ž๋™ ์Šคํฌ๋กค**๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊บผ์ ธ ์žˆ์„ ๋•Œ๋„ ๊ถŒํ•œ ํ”„๋กฌํ”„ํŠธ๋Š” ์—ฌ์ „ํžˆ ๋ณด๊ธฐ๋กœ ์Šคํฌ๋กค๋ฉ๋‹ˆ๋‹ค | `false` |

174| `autoUpdatesChannel` | ์—…๋ฐ์ดํŠธ๋ฅผ ๋”ฐ๋ฅผ ๋ฆด๋ฆฌ์Šค ์ฑ„๋„์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์•ฝ 1์ฃผ์ผ ๋œ ๋ฒ„์ „์ด๊ณ  ์ฃผ์š” ํšŒ๊ท€๊ฐ€ ์žˆ๋Š” ๋ฒ„์ „์„ ๊ฑด๋„ˆ๋›ฐ๋Š” `"stable"`์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฐ€์žฅ ์ตœ๊ทผ ๋ฆด๋ฆฌ์Šค์ธ `"latest"` (๊ธฐ๋ณธ๊ฐ’)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฅผ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด `env`์—์„œ [`DISABLE_AUTOUPDATER`](/ko/setup#disable-auto-updates)๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค | `"stable"` |174| `autoUpdatesChannel` | ์—…๋ฐ์ดํŠธ๋ฅผ ๋”ฐ๋ฅผ ๋ฆด๋ฆฌ์Šค ์ฑ„๋„์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์•ฝ 1์ฃผ์ผ ๋œ ๋ฒ„์ „์ด๊ณ  ์ฃผ์š” ํšŒ๊ท€๊ฐ€ ์žˆ๋Š” ๋ฒ„์ „์„ ๊ฑด๋„ˆ๋›ฐ๋Š” `"stable"`์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฐ€์žฅ ์ตœ๊ทผ ๋ฆด๋ฆฌ์Šค์ธ `"latest"` (๊ธฐ๋ณธ๊ฐ’)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฅผ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด `env`์—์„œ [`DISABLE_AUTOUPDATER`](/ko/setup#disable-auto-updates)๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค | `"stable"` |

175| `availableModels` | `/model`, `--model` ๋˜๋Š” `ANTHROPIC_MODEL`์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋ธ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์˜ต์…˜์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. [๋ชจ๋ธ ์„ ํƒ ์ œํ•œ](/ko/model-config#restrict-model-selection)์„ ์ฐธ์กฐํ•˜์„ธ์š” | `["sonnet", "haiku"]` |175| `availableModels` | `/model`, `--model` ๋˜๋Š” `ANTHROPIC_MODEL`์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋ธ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์˜ต์…˜์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. [๋ชจ๋ธ ์„ ํƒ ์ œํ•œ](/ko/model-config#restrict-model-selection)์„ ์ฐธ์กฐํ•˜์„ธ์š” | `["sonnet", "haiku"]` |


215| `permissions` | ๊ถŒํ•œ์˜ ๊ตฌ์กฐ๋Š” ์•„๋ž˜ ํ‘œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. | |215| `permissions` | ๊ถŒํ•œ์˜ ๊ตฌ์กฐ๋Š” ์•„๋ž˜ ํ‘œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. | |

216| `plansDirectory` | ๊ณ„ํš ํŒŒ์ผ์ด ์ €์žฅ๋˜๋Š” ์œ„์น˜๋ฅผ ์‚ฌ์šฉ์ž ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝ๋กœ๋Š” ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ์ƒ๋Œ€์ ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’: `~/.claude/plans` | `"./plans"` |216| `plansDirectory` | ๊ณ„ํš ํŒŒ์ผ์ด ์ €์žฅ๋˜๋Š” ์œ„์น˜๋ฅผ ์‚ฌ์šฉ์ž ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝ๋กœ๋Š” ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ์ƒ๋Œ€์ ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’: `~/.claude/plans` | `"./plans"` |

217| `pluginTrustMessage` | (Managed ์„ค์ •๋งŒ) ์„ค์น˜ ์ „์— ํ‘œ์‹œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹ ๋ขฐ ๊ฒฝ๊ณ ์— ์ถ”๊ฐ€๋  ์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ง ํŠน์ • ์ปจํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด๋ถ€ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๊ฒ€์ฆ๋˜์—ˆ์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. | `"All plugins from our marketplace are approved by IT"` |217| `pluginTrustMessage` | (Managed ์„ค์ •๋งŒ) ์„ค์น˜ ์ „์— ํ‘œ์‹œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹ ๋ขฐ ๊ฒฝ๊ณ ์— ์ถ”๊ฐ€๋  ์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ง ํŠน์ • ์ปจํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด๋ถ€ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๊ฒ€์ฆ๋˜์—ˆ์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. | `"All plugins from our marketplace are approved by IT"` |

218| `policyHelper` | {/* min-version: 2.1.136 */}๊ด€๋ฆฌ์ž ๋ฐฐํฌ ์‹คํ–‰ ํŒŒ์ผ๋กœ ์‹œ์ž‘ ์‹œ managed ์„ค์ •์„ ๋™์ ์œผ๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. MDM ๋˜๋Š” ์‹œ์Šคํ…œ `managed-settings.json` ํŒŒ์ผ์—์„œ๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. [์ •์ฑ… ๋„์šฐ๋ฏธ๋กœ managed ์„ค์ • ๊ณ„์‚ฐ](#compute-managed-settings-with-a-policy-helper)์„ ์ฐธ์กฐํ•˜์„ธ์š”. Claude Code v2.1.136 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค | `{"path": "/usr/local/bin/claude-policy"}` |

218| `preferredNotifChannel` | ์ž‘์—… ์™„๋ฃŒ ๋ฐ ๊ถŒํ•œ ํ”„๋กฌํ”„ํŠธ ์•Œ๋ฆผ ๋ฐฉ๋ฒ•: `"auto"`, `"terminal_bell"`, `"iterm2"`, `"iterm2_with_bell"`, `"kitty"`, `"ghostty"` ๋˜๋Š” `"notifications_disabled"`. ๊ธฐ๋ณธ๊ฐ’: `"auto"`๋กœ, iTerm2, Ghostty ๋ฐ Kitty์—์„œ ๋ฐ์Šคํฌํ†ฑ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๊ณ  ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์—์„œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํ„ฐ๋ฏธ๋„์—์„œ ๋ฒจ ๋ฌธ์ž๋ฅผ ์šธ๋ฆฌ๋ ค๋ฉด `"terminal_bell"`์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. `/config`์— **์•Œ๋ฆผ**์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. [ํ„ฐ๋ฏธ๋„ ๋ฒจ ๋˜๋Š” ์•Œ๋ฆผ ๋ฐ›๊ธฐ](/ko/terminal-config#get-a-terminal-bell-or-notification)๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š” | `"terminal_bell"` |219| `preferredNotifChannel` | ์ž‘์—… ์™„๋ฃŒ ๋ฐ ๊ถŒํ•œ ํ”„๋กฌํ”„ํŠธ ์•Œ๋ฆผ ๋ฐฉ๋ฒ•: `"auto"`, `"terminal_bell"`, `"iterm2"`, `"iterm2_with_bell"`, `"kitty"`, `"ghostty"` ๋˜๋Š” `"notifications_disabled"`. ๊ธฐ๋ณธ๊ฐ’: `"auto"`๋กœ, iTerm2, Ghostty ๋ฐ Kitty์—์„œ ๋ฐ์Šคํฌํ†ฑ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๊ณ  ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์—์„œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํ„ฐ๋ฏธ๋„์—์„œ ๋ฒจ ๋ฌธ์ž๋ฅผ ์šธ๋ฆฌ๋ ค๋ฉด `"terminal_bell"`์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. `/config`์— **์•Œ๋ฆผ**์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. [ํ„ฐ๋ฏธ๋„ ๋ฒจ ๋˜๋Š” ์•Œ๋ฆผ ๋ฐ›๊ธฐ](/ko/terminal-config#get-a-terminal-bell-or-notification)๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š” | `"terminal_bell"` |

219| `prefersReducedMotion` | ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•ด UI ์• ๋‹ˆ๋ฉ”์ด์…˜ (์Šคํ”ผ๋„ˆ, shimmer, flash ํšจ๊ณผ) ๊ฐ์†Œ ๋˜๋Š” ๋น„ํ™œ์„ฑํ™” | `true` |220| `prefersReducedMotion` | ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•ด UI ์• ๋‹ˆ๋ฉ”์ด์…˜ (์Šคํ”ผ๋„ˆ, shimmer, flash ํšจ๊ณผ) ๊ฐ์†Œ ๋˜๋Š” ๋น„ํ™œ์„ฑํ™” | `true` |

220| `prUrlTemplate` | PR ๋ฐฐ์ง€์— ๋Œ€ํ•œ URL ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๋ฐ”๋‹ฅ๊ธ€ ๋ฐ ๋„๊ตฌ ๊ฒฐ๊ณผ ์š”์•ฝ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. `gh`์—์„œ ๋ณด๊ณ ํ•œ PR URL์—์„œ `{host}`, `{owner}`, `{repo}`, `{number}` ๋ฐ `{url}`์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. `github.com` ๋Œ€์‹  ๋‚ด๋ถ€ ์ฝ”๋“œ ๊ฒ€ํ†  ๋„๊ตฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Claude์˜ ์‚ฐ๋ฌธ์—์„œ `#123` ์ž๋™ ๋งํฌ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค | `"https://reviews.example.com/{owner}/{repo}/pull/{number}"` |221| `prUrlTemplate` | PR ๋ฐฐ์ง€์— ๋Œ€ํ•œ URL ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๋ฐ”๋‹ฅ๊ธ€ ๋ฐ ๋„๊ตฌ ๊ฒฐ๊ณผ ์š”์•ฝ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. `gh`์—์„œ ๋ณด๊ณ ํ•œ PR URL์—์„œ `{host}`, `{owner}`, `{repo}`, `{number}` ๋ฐ `{url}`์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. `github.com` ๋Œ€์‹  ๋‚ด๋ถ€ ์ฝ”๋“œ ๊ฒ€ํ†  ๋„๊ตฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Claude์˜ ์‚ฐ๋ฌธ์—์„œ `#123` ์ž๋™ ๋งํฌ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค | `"https://reviews.example.com/{owner}/{repo}/pull/{number}"` |


470}471}

471```472```

472 473 

474### ์ •์ฑ… ๋„์šฐ๋ฏธ๋กœ managed ์„ค์ • ๊ณ„์‚ฐ

475 

476`policyHelper` ์„ค์ •์€ ์‹œ์ž‘ ์‹œ managed ์„ค์ •์„ ๋™์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜๋Š” ์‹คํ–‰ ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ ๊ด€๋ฆฌ์ž๋Š” ์žฅ์น˜ ์ƒํƒœ, ID ๋˜๋Š” ์›๊ฒฉ ์„œ๋น„์Šค์—์„œ ์ •์ฑ…์„ ํŒŒ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MDM ๋˜๋Š” ์‹œ์Šคํ…œ `managed-settings.json` ํŒŒ์ผ์—์„œ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. Claude Code๋Š” ์‚ฌ์šฉ์ž ์„ค์ •, ํ”„๋กœ์ ํŠธ ์„ค์ •, HKCU ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ํ•˜์ด๋ธŒ ๋ฐ [์„œ๋ฒ„ ๊ด€๋ฆฌ ์„ค์ •](/ko/server-managed-settings)์„ ํฌํ•จํ•œ ๋‹ค๋ฅธ ๋ฒ”์œ„์— ๋‚˜ํƒ€๋‚˜๋Š” `policyHelper`๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

477 

478์„ค์ •์€ ๋‹ค์Œ ํ‚ค๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค:

479 

480| ํ‚ค | ์œ ํ˜• | ์„ค๋ช… |

481| ------------------- | ------ | -------------------------------------------------------------------- |

482| `path` | string | ๋„์šฐ๋ฏธ ์‹คํ–‰ ํŒŒ์ผ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ |

483| `timeoutMs` | number | ๋„์šฐ๋ฏธ๊ฐ€ ์‹คํŒจํ•œ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „์— ๋Œ€๊ธฐํ•  ์‹œ๊ฐ„ |

484| `refreshIntervalMs` | number | ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋„์šฐ๋ฏธ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•  ๋นˆ๋„. ์ƒˆ๋กœ๊ณ ์นจ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด `0`์œผ๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์ตœ์†Œ `60000`์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค |

485 

486๋„์šฐ๋ฏธ๋Š” stdout์— JSON ๋ด‰ํˆฌ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •์„ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์ด ์•„๋‹Œ `managedSettings` ํ‚ค ์•„๋ž˜์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ฒ ์–ด ์„ค์ • ๊ฐ์ฒด๋Š” `managedSettings` undefined๋กœ ํŒŒ์‹ฑ๋˜๊ณ  ์•„๋ฌด๊ฒƒ๋„ ์ ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค:

487 

488```json theme={null}

489{

490 "managedSettings": {

491 "permissions": { "deny": ["Read(//etc/secrets/**)"] }

492 },

493 "claudeMd": "# Organization context\n...",

494 "appendSystemPrompt": "Always cite the internal style guide."

495}

496```

497 

498๋„์šฐ๋ฏธ๊ฐ€ `managedSettings`๋ฅผ ๋‚ด๋ณด๋‚ผ ๋•Œ ํ•ด๋‹น ๊ฐ์ฒด๋Š” ์‹คํ–‰์„ ์œ„ํ•ด ํŒŒ์ผ ๊ธฐ๋ฐ˜ managed ์„ค์ •์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ๋„์šฐ๋ฏธ๊ฐ€ ์‹œ์ž‘ ์‹œ 0์ด ์•„๋‹Œ ๊ฐ’์œผ๋กœ ์ข…๋ฃŒ๋˜๋ฉด Claude Code๋Š” ์˜ค๋ฅ˜๋ฅผ ์ธ์‡„ํ•˜๊ณ  ์‹œ์ž‘์„ ๊ฑฐ๋ถ€ํ•˜๋ฏ€๋กœ ์ค‘๋‹จ ๋ณต์›๋ ฅ์ด ํ•„์š”ํ•œ ๋„์šฐ๋ฏธ๋Š” ์ž์‹ ์˜ ์บ์‹œ์—์„œ ์ œ๊ณตํ•˜๊ณ  `0`์œผ๋กœ ์ข…๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

499 

473### ์„ค์ • ์šฐ์„ ์ˆœ์œ„500### ์„ค์ • ์šฐ์„ ์ˆœ์œ„

474 501 

475์„ค์ •์€ ์šฐ์„ ์ˆœ์œ„ ์ˆœ์„œ๋Œ€๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋†’์Œ์—์„œ ๊ฐ€์žฅ ๋‚ฎ์Œ:502์„ค์ •์€ ์šฐ์„ ์ˆœ์œ„ ์ˆœ์„œ๋Œ€๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋†’์Œ์—์„œ ๊ฐ€์žฅ ๋‚ฎ์Œ:

whats-new.md +17 โˆ’1

Details

8 8 

9์ฃผ๊ฐ„ ๊ฐœ๋ฐœ์ž ๋‹ค์ด์ œ์ŠคํŠธ๋Š” ์—…๋ฌด ๋ฐฉ์‹์„ ๋ฐ”๊ฟ€ ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ€์žฅ ๋†’์€ ๊ธฐ๋Šฅ๋“ค์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ•ญ๋ชฉ์—๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ, ์งง์€ ๋ฐ๋ชจ, ๊ทธ๋ฆฌ๊ณ  ์ „์ฒด ๋ฌธ์„œ๋กœ์˜ ๋งํฌ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ์‚ฌ์†Œํ•œ ๊ฐœ์„  ์‚ฌํ•ญ์€ [changelog](/ko/changelog)๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.9์ฃผ๊ฐ„ ๊ฐœ๋ฐœ์ž ๋‹ค์ด์ œ์ŠคํŠธ๋Š” ์—…๋ฌด ๋ฐฉ์‹์„ ๋ฐ”๊ฟ€ ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ€์žฅ ๋†’์€ ๊ธฐ๋Šฅ๋“ค์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ•ญ๋ชฉ์—๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ, ์งง์€ ๋ฐ๋ชจ, ๊ทธ๋ฆฌ๊ณ  ์ „์ฒด ๋ฌธ์„œ๋กœ์˜ ๋งํฌ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ์‚ฌ์†Œํ•œ ๊ฐœ์„  ์‚ฌํ•ญ์€ [changelog](/ko/changelog)๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

10 10 

11<Update label="Week 19" description="2026๋…„ 5์›” 4โ€“8์ผ" tags={["v2.1.128โ€“v2.1.136"]}>

12 **ํ”Œ๋Ÿฌ๊ทธ์ธ์ด `.zip` ์•„์นด์ด๋ธŒ ๋ฐ URL์—์„œ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค**: `--plugin-dir`์€ ์ด์ œ `.zip` ํŒŒ์ผ์„ ํ—ˆ์šฉํ•˜๋ฉฐ, `--plugin-url`์€ ํ˜„์žฌ ์„ธ์…˜์— ๋Œ€ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์•„์นด์ด๋ธŒ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

13 

14 ์ด๋ฒˆ ์ฃผ์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋“ค: \*\*`worktree.baseRef`\*\*๋Š” ์ƒˆ๋กœ์šด worktree๊ฐ€ ์›๊ฒฉ ๊ธฐ๋ณธ๊ฐ’ ๋˜๋Š” ๋กœ์ปฌ `HEAD`์—์„œ ๋ถ„๊ธฐํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. **auto mode hard deny rules**๋Š” allow ์˜ˆ์™ธ์™€ ๊ด€๊ณ„์—†์ด ์ž‘์—…์„ ๋ฌด์กฐ๊ฑด ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  **hooks๋Š” ํ™œ์„ฑ ๋…ธ๋ ฅ ์ˆ˜์ค€์„ ๋ด…๋‹ˆ๋‹ค** `effort.level` ๋ฐ `$CLAUDE_EFFORT`๋ฅผ ํ†ตํ•ด.

15 

16 [Week 19 ๋‹ค์ด์ œ์ŠคํŠธ ์ฝ๊ธฐ โ†’](/ko/whats-new/2026-w19)

17</Update>

18 

19<Update label="Week 18" description="2026๋…„ 4์›” 27์ผ โ€“ 5์›” 1์ผ" tags={["v2.1.120โ€“v2.1.126"]}>

20 **Git Bash ์—†๋Š” Windows**: Git for Windows๋Š” ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ, Claude Code๋Š” Bash๊ฐ€ ์—†์„ ๋•Œ PowerShell์„ ์…ธ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

21 

22 ์ด๋ฒˆ ์ฃผ์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋“ค: \*\*`claude ultrareview`\*\*๋Š” CI ๋ฐ ์Šคํฌ๋ฆฝํŠธ์— ํด๋ผ์šฐ๋“œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. \*\*`claude project purge`\*\*๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋กœ์ปฌ ์ƒํƒœ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  **PR URL์„ `/resume`์— ๋ถ™์—ฌ๋„ฃ๊ธฐ**ํ•˜๋ฉด ์ด๋ฅผ ์ƒ์„ฑํ•œ ์„ธ์…˜์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

23 

24 [Week 18 ๋‹ค์ด์ œ์ŠคํŠธ ์ฝ๊ธฐ โ†’](/ko/whats-new/2026-w18)

25</Update>

26 

11<Update label="Week 17" description="2026๋…„ 4์›” 20โ€“24์ผ" tags={["v2.1.114โ€“v2.1.119"]}>27<Update label="Week 17" description="2026๋…„ 4์›” 20โ€“24์ผ" tags={["v2.1.114โ€“v2.1.119"]}>

12 \*\*`/ultrareview`\*\*๊ฐ€ ๊ณต๊ฐœ ์—ฐ๊ตฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋กœ ์ถœ์‹œ๋ฉ๋‹ˆ๋‹ค: ํด๋ผ์šฐ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ๋ฒ„๊ทธ ์‚ฌ๋ƒฅ ์—์ด์ „ํŠธ ํ”Œ๋ฆฟ์ด ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์„ CLI ๋˜๋Š” Desktop์œผ๋กœ ์ž๋™์œผ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.28 \*\*`/ultrareview`\*\*๊ฐ€ ๊ณต๊ฐœ ์—ฐ๊ตฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋กœ ์ถœ์‹œ๋ฉ๋‹ˆ๋‹ค: ํด๋ผ์šฐ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ๋ฒ„๊ทธ ์‚ฌ๋ƒฅ ์—์ด์ „ํŠธ ํ”Œ๋ฆฟ์ด ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์„ CLI ๋˜๋Š” Desktop์œผ๋กœ ์ž๋™์œผ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

13 29 


19<Update label="Week 16" description="2026๋…„ 4์›” 13โ€“17์ผ" tags={["v2.1.105โ€“v2.1.113"]}>35<Update label="Week 16" description="2026๋…„ 4์›” 13โ€“17์ผ" tags={["v2.1.105โ€“v2.1.113"]}>

20 **Claude Opus 4.7**์ด Max ๋ฐ Team Premium์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ถœ์‹œ๋˜๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋”ฉ ์ž‘์—…์— ๊ถŒ์žฅ๋˜๋Š” ์ƒˆ๋กœ์šด `xhigh` ๋…ธ๋ ฅ ์ˆ˜์ค€๊ณผ ์ด๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ™”ํ˜• `/effort` ์Šฌ๋ผ์ด๋”๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.36 **Claude Opus 4.7**์ด Max ๋ฐ Team Premium์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ถœ์‹œ๋˜๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋”ฉ ์ž‘์—…์— ๊ถŒ์žฅ๋˜๋Š” ์ƒˆ๋กœ์šด `xhigh` ๋…ธ๋ ฅ ์ˆ˜์ค€๊ณผ ์ด๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ™”ํ˜• `/effort` ์Šฌ๋ผ์ด๋”๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

21 37 

22 ์ด๋ฒˆ ์ฃผ์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋“ค: Claude Code on the web์˜ **Routines**์€ ์ผ์ •, GitHub ์ด๋ฒคํŠธ ๋˜๋Š” API ํ˜ธ์ถœ์—์„œ ํ…œํ”Œ๋ฆฟ ํด๋ผ์šฐ๋“œ ์—์ด์ „ํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. `/ultrareview`๋Š” ํด๋ผ์šฐ๋“œ์—์„œ ๋ณ‘๋ ฌ ๋‹ค์ค‘ ์—์ด์ „ํŠธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. `/usage`๋Š” ์ œํ•œ์„ ์œ ๋ฐœํ•˜๋Š” ์š”์†Œ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  CLI๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.38 ์ด๋ฒˆ ์ฃผ์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋“ค: Claude Code on the web์˜ **Routines**์€ ์ผ์ •, GitHub ์ด๋ฒคํŠธ ๋˜๋Š” API ํ˜ธ์ถœ์—์„œ ํ…œํ”Œ๋ฆฟ ํด๋ผ์šฐ๋“œ ์—์ด์ „ํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. **mobile push notifications**์€ ๊ธด ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ Claude๊ฐ€ ํ•„์š”ํ•  ๋•Œ ํœด๋Œ€ํฐ์— ์•Œ๋ฆผ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. `/usage`๋Š” ์ œํ•œ์„ ์œ ๋ฐœํ•˜๋Š” ์š”์†Œ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  CLI๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

23 39 

24 [Week 16 ๋‹ค์ด์ œ์ŠคํŠธ ์ฝ๊ธฐ โ†’](/ko/whats-new/2026-w16)40 [Week 16 ๋‹ค์ด์ œ์ŠคํŠธ ์ฝ๊ธฐ โ†’](/ko/whats-new/2026-w16)

25</Update>41</Update>

whats-new/2026-w16.md +11 โˆ’13

Details

4 4 

5# 16์ฃผ์ฐจ ยท 2026๋…„ 4์›” 13โ€“17์ผ5# 16์ฃผ์ฐจ ยท 2026๋…„ 4์›” 13โ€“17์ผ

6 6 

7> ์ƒˆ๋กœ์šด xhigh ๋…ธ๋ ฅ ์ˆ˜์ค€์ด ํฌํ•จ๋œ Claude Opus 4.7, Claude Code ์›น์˜ ๋ฃจํ‹ด, /ultrareview ํด๋ผ์šฐ๋“œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ, ์‚ฌ์šฉ ํ•œ๋„๋ฅผ ์ฃผ๋„ํ•˜๋Š” ์š”์†Œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” /usage ๋ถ„์„, ๊ทธ๋ฆฌ๊ณ  ๋ฒˆ๋“ค๋œ JavaScript๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ.7> ์ƒˆ๋กœ์šด xhigh ๋…ธ๋ ฅ ์ˆ˜์ค€์ด ํฌํ•จ๋œ Claude Opus 4.7, Claude Code ์›น์˜ ๋ฃจํ‹ด, Claude๊ฐ€ ํ•„์š”ํ•  ๋•Œ ํœด๋Œ€ํฐ์— ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๋ชจ๋ฐ”์ผ ํ‘ธ์‹œ ์•Œ๋ฆผ, ์‚ฌ์šฉ ํ•œ๋„๋ฅผ ์ฃผ๋„ํ•˜๋Š” ์š”์†Œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” /usage ๋ถ„์„, ๊ทธ๋ฆฌ๊ณ  ๋ฒˆ๋“ค๋œ JavaScript๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ.

8 8 

9<div className="digest-meta">9<div className="digest-meta">

10 <span>๋ฆด๋ฆฌ์Šค <a href="/ko/docs/changelog#2-1-105">v2.1.105 โ†’ v2.1.113</a></span>10 <span>๋ฆด๋ฆฌ์Šค <a href="/ko/docs/changelog#2-1-105">v2.1.105 โ†’ v2.1.113</a></span>


73 73 

74<div className="digest-feature">74<div className="digest-feature">

75 <div className="digest-feature-header">75 <div className="digest-feature-header">

76 <span className="digest-feature-title">/ultrareview</span>76 <span className="digest-feature-title">๋ชจ๋ฐ”์ผ ํ‘ธ์‹œ ์•Œ๋ฆผ</span>

77 <span className="digest-feature-pill">v2.1.111</span>77 <span className="digest-feature-pill">๋ชจ๋ฐ”์ผ</span>

78 </div>78 </div>

79 79 

80 <p className="digest-feature-lede">ํด๋ผ์šฐ๋“œ์—์„œ์˜ ํฌ๊ด„์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์ž…๋‹ˆ๋‹ค. Ultrareview๋Š” ๋ธŒ๋žœ์น˜๋ฅผ Claude Code ์›น์˜ ๋ณ‘๋ ฌ ๋ฆฌ๋ทฐ์–ด ์ „์ฒด์— ๋ถ„์‚ฐ์‹œํ‚ค๊ณ , ๊ฐ ๋ฐœ๊ฒฌ์— ๋Œ€ํ•ด ์ ๋Œ€์  ๋น„ํŒ ํŒจ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ, ํ„ฐ๋ฏธ๋„์ด ์ž์œ ๋กœ์šด ์ƒํƒœ์—์„œ ๊ฒ€์ฆ๋œ ๋ฐœ๊ฒฌ ๋ณด๊ณ ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ˆ˜ ์—†์ด ํ˜ธ์ถœํ•˜์—ฌ ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋ฅผ ๋ฆฌ๋ทฐํ•˜๊ฑฐ๋‚˜, PR ๋ฒˆํ˜ธ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ํ•ด๋‹น PR์„ ๊ฐ€์ ธ์™€ ๋ฆฌ๋ทฐํ•ฉ๋‹ˆ๋‹ค. ์‹œ์ž‘ ๋Œ€ํ™”์ƒ์ž๋Š” ์ด์ œ ํ™•์ธํ•˜๊ธฐ ์ „์— ์–ด๋–ค ๋‚ด์šฉ์ด ์˜ฌ๋ผ๊ฐ€๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก diffstat์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.</p>80 <p className="digest-feature-lede"><a href="/ko/docs/remote-control">์›๊ฒฉ ์ œ์–ด</a>๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด, Claude๋Š” ๊ธด ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ ๊ณ„์† ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๊ฒฐ์ •์ด ํ•„์š”ํ•  ๋•Œ ํœด๋Œ€ํฐ์— ํ‘ธ์‹œ ์•Œ๋ฆผ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. <code>/config</code>์—์„œ "Claude๊ฐ€ ๊ฒฐ์ •ํ•  ๋•Œ ํ‘ธ์‹œ"๋ฅผ ์ผœ๊ฑฐ๋‚˜ ํ”„๋กฌํ”„ํŠธ์—์„œ ํ•˜๋‚˜๋ฅผ ์š”์ฒญํ•˜์„ธ์š”. ๊ธด ์—์ด์ „ํŠธ ์‹คํ–‰์„ ์‹œ์ž‘ํ•˜๊ณ  ํ„ฐ๋ฏธ๋„์—์„œ ๋–จ์–ด์ ธ ์žˆ๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.</p>

81 81 

82 <p className="digest-feature-try">ํ˜„์žฌ ๋ธŒ๋žœ์น˜ ๋ฆฌ๋ทฐํ•˜๊ธฐ:</p>82 <Frame>

83 83 <video autoPlay muted loop playsInline className="w-full" src="https://mintcdn.com/claude-code/uII1TETOZxBUZ3lB/images/whats-new/push-notifications.mp4?fit=max&auto=format&n=uII1TETOZxBUZ3lB&q=85&s=c91a967139596500cbdb581a53822ac1" data-path="images/whats-new/push-notifications.mp4" />

84 ```text Claude Code theme={null}84 </Frame>

85 > /ultrareview

86 ```

87 85 

88 <p className="digest-feature-try">๋˜๋Š” PR์„ ์ง€์ •ํ•˜๊ธฐ:</p>86 <p className="digest-feature-try">Claude๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋„๋ก ์š”์ฒญํ•˜๊ธฐ:</p>

89 87 

90 ```text Claude Code theme={null}88 ```text Claude Code theme={null}

91 > /ultrareview 123489 > notify me when the tests pass

92 ```90 ```

93 91 

94 <a className="digest-feature-link" href="/ko/docs/ultrareview">Ultrareview ๊ฐ€์ด๋“œ</a>92 <a className="digest-feature-link" href="/ko/docs/remote-control#mobile-push-notifications">์›๊ฒฉ ์ œ์–ด: ๋ชจ๋ฐ”์ผ ํ‘ธ์‹œ ์•Œ๋ฆผ</a>

95</div>93</div>

96 94 

97<div className="digest-feature">95<div className="digest-feature">


116 <p className="digest-wins-title">๊ธฐํƒ€ ๊ฐœ์„  ์‚ฌํ•ญ</p>114 <p className="digest-wins-title">๊ธฐํƒ€ ๊ฐœ์„  ์‚ฌํ•ญ</p>

117 115 

118 <div className="digest-wins-grid">116 <div className="digest-wins-grid">

117 <div>์ƒˆ๋กœ์šด <a href="/ko/docs/ultrareview"><code>/ultrareview</code></a>: ๋ณ‘๋ ฌ ๋‹ค์ค‘ ์—์ด์ „ํŠธ ๋ถ„์„๊ณผ ์ ๋Œ€์  ๋น„ํŒ ํŒจ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์šฐ๋“œ์˜ ํฌ๊ด„์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋ฅผ ๋ฆฌ๋ทฐํ•˜๋ ค๋ฉด ๊ทธ๋Œ€๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, ํŠน์ • PR์˜ ๊ฒฝ์šฐ <code>/ultrareview \<PR#></code>๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”</div>

119 <div><a href="/ko/docs/permission-modes#eliminate-prompts-with-auto-mode">์ž๋™ ๋ชจ๋“œ</a>๋Š” ์ด์ œ Opus 4.7์˜ Max ๊ตฌ๋…์ž์—๊ฒŒ ์ œ๊ณต๋˜๋ฉฐ, <code>--enable-auto-mode</code> ํ”Œ๋ž˜๊ทธ๋Š” ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค</div>118 <div><a href="/ko/docs/permission-modes#eliminate-prompts-with-auto-mode">์ž๋™ ๋ชจ๋“œ</a>๋Š” ์ด์ œ Opus 4.7์˜ Max ๊ตฌ๋…์ž์—๊ฒŒ ์ œ๊ณต๋˜๋ฉฐ, <code>--enable-auto-mode</code> ํ”Œ๋ž˜๊ทธ๋Š” ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค</div>

120 <div><a href="/ko/docs/interactive-mode#session-recap">์„ธ์…˜ ์š”์•ฝ</a>์€ ์ž๋ฆฌ๋ฅผ ๋น„์šด ๋™์•ˆ ๋ฐœ์ƒํ•œ ์ผ์˜ ํ•œ ์ค„ ์š”์•ฝ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. <code>/recap</code>์„ ์š”์ฒญ ์‹œ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ <code>/config</code>์—์„œ ๋•๋‹ˆ๋‹ค</div>119 <div><a href="/ko/docs/interactive-mode#session-recap">์„ธ์…˜ ์š”์•ฝ</a>์€ ์ž๋ฆฌ๋ฅผ ๋น„์šด ๋™์•ˆ ๋ฐœ์ƒํ•œ ์ผ์˜ ํ•œ ์ค„ ์š”์•ฝ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. <code>/recap</code>์„ ์š”์ฒญ ์‹œ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ <code>/config</code>์—์„œ ๋•๋‹ˆ๋‹ค</div>

121 <div>์ƒˆ๋กœ์šด <code>/tui</code> ๋ช…๋ น๊ณผ <code>tui</code> ์„ค์ •์€ ๋Œ€ํ™” ์ค‘์— ํด๋ž˜์‹๊ณผ ๊นœ๋ฐ•์ž„ ์—†๋Š” ๋ Œ๋”๋ง ์‚ฌ์ด๋ฅผ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํฌ์ปค์Šค ๋ณด๊ธฐ๋Š” <code>Ctrl+O</code>์—์„œ ์ž์‹ ์˜ <code>/focus</code> ๋ช…๋ น์œผ๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค</div>120 <div>์ƒˆ๋กœ์šด <code>/tui</code> ๋ช…๋ น๊ณผ <code>tui</code> ์„ค์ •์€ ๋Œ€ํ™” ์ค‘์— ํด๋ž˜์‹๊ณผ ๊นœ๋ฐ•์ž„ ์—†๋Š” ๋ Œ๋”๋ง ์‚ฌ์ด๋ฅผ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํฌ์ปค์Šค ๋ณด๊ธฐ๋Š” <code>Ctrl+O</code>์—์„œ ์ž์‹ ์˜ <code>/focus</code> ๋ช…๋ น์œผ๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค</div>

122 <div>ํ‘ธ์‹œ ์•Œ๋ฆผ ๋„๊ตฌ: <a href="/ko/docs/remote-control">์›๊ฒฉ ์ œ์–ด</a>๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ  "Claude๊ฐ€ ๊ฒฐ์ •ํ•  ๋•Œ ํ‘ธ์‹œ" ์˜ต์…˜์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉด, Claude๋Š” ํ•„์š”ํ•  ๋•Œ ํœด๋Œ€ํฐ์— ์•Œ๋ฆผ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค</div>

123 <div>ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์„ธ์…˜ ์‹œ์ž‘ ๋˜๋Š” ์Šคํ‚ฌ ํ˜ธ์ถœ ์‹œ ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋˜๋Š” ์ตœ์ƒ์œ„ <code>monitors</code> ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํ‚ค๋ฅผ ํ†ตํ•ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ฐ์‹œ์ž๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค</div>121 <div>ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์„ธ์…˜ ์‹œ์ž‘ ๋˜๋Š” ์Šคํ‚ฌ ํ˜ธ์ถœ ์‹œ ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋˜๋Š” ์ตœ์ƒ์œ„ <code>monitors</code> ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํ‚ค๋ฅผ ํ†ตํ•ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ฐ์‹œ์ž๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค</div>

124 <div><code>/theme</code>์˜ "์ž๋™ (ํ„ฐ๋ฏธ๋„๊ณผ ์ผ์น˜)" ์˜ต์…˜์€ ํ„ฐ๋ฏธ๋„์˜ ์–ด๋‘์šด/๋ฐ์€ ๋ชจ๋“œ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค</div>122 <div><code>/theme</code>์˜ "์ž๋™ (ํ„ฐ๋ฏธ๋„๊ณผ ์ผ์น˜)" ์˜ต์…˜์€ ํ„ฐ๋ฏธ๋„์˜ ์–ด๋‘์šด/๋ฐ์€ ๋ชจ๋“œ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค</div>

125 <div><code>/fewer-permission-prompts</code>๋Š” ํŠธ๋žœ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ผ๋ฐ˜์ ์ธ ์ฝ๊ธฐ ์ „์šฉ Bash ๋ฐ MCP ํ˜ธ์ถœ์„ ์Šค์บ”ํ•˜๊ณ  <code>.claude/settings.json</code>์— ๋Œ€ํ•œ ํ—ˆ์šฉ ๋ชฉ๋ก์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค</div>123 <div><code>/fewer-permission-prompts</code>๋Š” ํŠธ๋žœ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ผ๋ฐ˜์ ์ธ ์ฝ๊ธฐ ์ „์šฉ Bash ๋ฐ MCP ํ˜ธ์ถœ์„ ์Šค์บ”ํ•˜๊ณ  <code>.claude/settings.json</code>์— ๋Œ€ํ•œ ํ—ˆ์šฉ ๋ชฉ๋ก์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค</div>

whats-new/2026-w18.md +113 โˆ’0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 18์ฃผ์ฐจ ยท 4์›” 27์ผ โ€“ 5์›” 1์ผ, 2026๋…„

6 

7> Claude Code๊ฐ€ Windows์—์„œ Git Bash ์—†์ด ์‹คํ–‰๋˜๋ฉฐ, claude auth login์€ ๋ธŒ๋ผ์šฐ์ € ์ฝœ๋ฐฑ์ด localhost์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†์„ ๋•Œ ๋ถ™์—ฌ๋„ฃ์€ OAuth ์ฝ”๋“œ๋ฅผ ํ—ˆ์šฉํ•˜๊ณ , claude project purge๋Š” ํ”„๋กœ์ ํŠธ๋ณ„ ๋กœ์ปฌ ์ƒํƒœ๋ฅผ ์ •๋ฆฌํ•˜๋ฉฐ, PR URL์„ /resume์— ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ์ด๋ฅผ ์ƒ์„ฑํ•œ ์„ธ์…˜์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

8 

9<div className="digest-meta">

10 <span>๋ฆด๋ฆฌ์Šค <a href="/ko/docs/changelog#2-1-120">v2.1.120 โ†’ v2.1.126</a></span>

11 <span>4๊ฐ€์ง€ ๊ธฐ๋Šฅ ยท 4์›” 27์ผ โ€“ 5์›” 1์ผ</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">๋ธŒ๋ผ์šฐ์ € ์ฝœ๋ฐฑ ์—†์ด ๋กœ๊ทธ์ธ</span>

17 <span className="digest-feature-pill">v2.1.126</span>

18 </div>

19 

20 <p className="digest-feature-lede"><code>claude auth login</code>์€ ์ด์ œ ๋ธŒ๋ผ์šฐ์ € ์ฝœ๋ฐฑ์ด localhost์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†์„ ๋•Œ OAuth ์ฝ”๋“œ๋ฅผ ํ„ฐ๋ฏธ๋„์— ์ง์ ‘ ๋ถ™์—ฌ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋กœ์ปฌ ํฌํŠธ๋กœ์˜ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” WSL2, SSH ์„ธ์…˜ ๋ฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ฆด๋ฆฌ์Šค๋Š” ๋А๋ฆฐ ๋˜๋Š” ํ”„๋ก์‹œ๋œ ์—ฐ๊ฒฐ๊ณผ IPv6 ์ „์šฉ devcontainer์—์„œ์˜ ๋กœ๊ทธ์ธ ํƒ€์ž„์•„์›ƒ๋„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.</p>

21 

22 <p className="digest-feature-try">๋กœ๊ทธ์ธํ•œ ํ›„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฝ”๋“œ๋ฅผ ๋ถ™์—ฌ๋„ฃ์œผ์„ธ์š”:</p>

23 

24 ```bash theme={null}

25 claude auth login

26 ```

27 

28 <a className="digest-feature-link" href="/ko/docs/cli-reference#cli-commands">CLI ์ฐธ์กฐ</a>

29</div>

30 

31<div className="digest-feature">

32 <div className="digest-feature-header">

33 <span className="digest-feature-title">claude project purge</span>

34 <span className="digest-feature-pill">v2.1.126</span>

35 </div>

36 

37 <p className="digest-feature-lede">ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  Claude Code ์ƒํƒœ ์‚ญ์ œ: ํŠธ๋žœ์Šคํฌ๋ฆฝํŠธ, ์ž‘์—…, ํŒŒ์ผ ํžˆ์Šคํ† ๋ฆฌ ๋ฐ ํ”„๋กœ์ ํŠธ์˜ ์„ค์ • ํ•ญ๋ชฉ. `--dry-run`์œผ๋กœ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, `-y`/`--yes`๋กœ ํ™•์ธ ๊ฑด๋„ˆ๋›ฐ๊ธฐ, `-i`/`--interactive`๋กœ ์„ ํƒ, `--all`๋กœ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ์ •๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.</p>

38 

39 <p className="digest-feature-try">์ œ๊ฑฐ๋  ํ•ญ๋ชฉ์„ ๋ฏธ๋ฆฌ๋ณด์„ธ์š”:</p>

40 

41 ```bash theme={null}

42 claude project purge --dry-run

43 ```

44 

45 <p className="digest-feature-try">๊ทธ ๋‹ค์Œ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”:</p>

46 

47 ```bash theme={null}

48 claude project purge

49 ```

50 

51 <a className="digest-feature-link" href="/ko/docs/cli-reference">CLI ์ฐธ์กฐ</a>

52</div>

53 

54<div className="digest-feature">

55 <div className="digest-feature-header">

56 <span className="digest-feature-title">PR URL๋กœ ์žฌ๊ฐœ</span>

57 <span className="digest-feature-pill">v2.1.122</span>

58 </div>

59 

60 <p className="digest-feature-lede"><code>gh pr create</code>๋กœ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด Claude Code๋Š” ์ด๋ฅผ ์ƒ์„ฑํ•œ ์„ธ์…˜์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์„ธ์…˜ ์ด๋ฆ„์„ ๊ธฐ์–ตํ•˜์ง€ ์•Š๊ณ ๋„ PR URL๋งŒ์œผ๋กœ ํ•ด๋‹น ์„ธ์…˜์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</p>

61 

62 <p className="digest-feature-try">์„ธ์…˜ ์„ ํƒ๊ธฐ๋ฅผ ์—ด์œผ์„ธ์š”:</p>

63 

64 ```text Claude Code theme={null}

65 > /resume

66 ```

67 

68 <p className="digest-feature-try">์„ ํƒ๊ธฐ์— PR URL์„ ๋ถ™์—ฌ๋„ฃ์œผ์„ธ์š”. ๋ถ™์—ฌ๋„ฃ๊ธฐ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ๊ฒ€์ƒ‰ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•˜๊ณ , ๋ชฉ๋ก์ด ํ•ด๋‹น PR์„ ์ƒ์„ฑํ•œ ์„ธ์…˜์œผ๋กœ ํ•„ํ„ฐ๋ง๋ฉ๋‹ˆ๋‹ค. Enter๋ฅผ ๋ˆŒ๋Ÿฌ ์žฌ๊ฐœํ•˜์„ธ์š”. GitHub, GitHub Enterprise, GitLab ๋ฐ Bitbucket ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ๋ฐ ๋ณ‘ํ•ฉ ์š”์ฒญ URL์ด ๋ชจ๋‘ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.</p>

69 

70 ```text Claude Code theme={null}

71 https://github.com/your-org/your-repo/pull/1234

72 ```

73 

74 <p className="digest-feature-try">์„ ํƒ๊ธฐ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋ ค๋ฉด ๋Œ€์‹  ๋ช…๋ น์ค„์—์„œ PR ๋ฒˆํ˜ธ๋ฅผ ์ „๋‹ฌํ•˜์„ธ์š”:</p>

75 

76 ```bash theme={null}

77 claude --from-pr 1234

78 ```

79 

80 <a className="digest-feature-link" href="/ko/docs/sessions#use-the-session-picker">์„ธ์…˜: ์„ธ์…˜ ์„ ํƒ๊ธฐ ์‚ฌ์šฉ</a>

81</div>

82 

83<div className="digest-feature">

84 <div className="digest-feature-header">

85 <span className="digest-feature-title">Git Bash ์—†๋Š” Windows</span>

86 <span className="digest-feature-pill">Windows</span>

87 </div>

88 

89 <p className="digest-feature-lede">Git for Windows๋Š” ๋” ์ด์ƒ ํ•„์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Bash๊ฐ€ ์—†์„ ๋•Œ Claude Code๋Š” PowerShell์„ ์…ธ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, PowerShell ๋„๊ตฌ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ๊ธฐ๋ณธ ์…ธ๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค. Microsoft Store๋ฅผ ํ†ตํ•ด ์„ค์น˜๋œ PowerShell 7, PATH ์—†๋Š” MSI ๋˜๋Š” `.NET` ์ „์—ญ ๋„๊ตฌ๋Š” ์ด์ œ ์ž๋™์œผ๋กœ ๊ฐ์ง€๋ฉ๋‹ˆ๋‹ค.</p>

90 

91 <a className="digest-feature-link" href="/ko/docs/setup">์„ค์ • ๊ฐ€์ด๋“œ</a>

92</div>

93 

94<div className="digest-wins">

95 <p className="digest-wins-title">๊ธฐํƒ€ ๊ฐœ์„ ์‚ฌํ•ญ</p>

96 

97 <div className="digest-wins-grid">

98 <div>MCP ์„œ๋ฒ„๋Š” ์„ค์ •์—์„œ `alwaysLoad: true`๋กœ ๋„๊ตฌ ๊ฒ€์ƒ‰ ์—ฐ๊ธฐ๋ฅผ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•ด๋‹น ์„œ๋ฒ„์˜ ๋ชจ๋“  ๋„๊ตฌ๊ฐ€ ํ•ญ์ƒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค</div>

99 <div>์ƒˆ๋กœ์šด `claude plugin prune`์€ ๊ณ ์•„ ์ž๋™ ์„ค์น˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ , `plugin uninstall --prune`์€ ๊ณ„๋‹จ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค</div>

100 <div>`/skills`๋Š” ์ด์ œ ์œ ํ˜•๋ณ„ ํ•„ํ„ฐ ๊ฒ€์ƒ‰ ์ƒ์ž๊ฐ€ ์žˆ์–ด ๊ธด ๋ชฉ๋ก์—์„œ ์Šคํฌ๋กค ์—†์ด ๊ธฐ์ˆ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค</div>

101 <div>`PostToolUse` ํ›…์€ MCP ๋„๊ตฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ๋„๊ตฌ์— ๋Œ€ํ•ด `hookSpecificOutput.updatedToolOutput`์„ ํ†ตํ•ด ๋„๊ตฌ ์ถœ๋ ฅ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค</div>

102 <div>์ƒˆ๋กœ์šด <a href="/ko/docs/ultrareview"><code>claude ultrareview</code></a> ํ•˜์œ„ ๋ช…๋ น์€ CI ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ์—์„œ `/ultrareview`๋ฅผ ๋น„๋Œ€ํ™”ํ˜•์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค: ๊ฒฐ๊ณผ๋ฅผ stdout์— ์ถœ๋ ฅํ•˜๊ณ (`--json`์œผ๋กœ ์›๋ณธ ์ถœ๋ ฅ), ์™„๋ฃŒ ์‹œ 0์œผ๋กœ ๋˜๋Š” ์‹คํŒจ ์‹œ 1๋กœ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค</div>

103 <div>`--dangerously-skip-permissions`์€ ์ด์ œ `.claude/`, `.git/`, `.vscode/`, ์…ธ ์„ค์ • ํŒŒ์ผ ๋ฐ ๊ธฐํƒ€ ์ด์ „์— ๋ณดํ˜ธ๋œ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์šฐํšŒํ•˜๋ฉฐ, ์น˜๋ช…์ ์ธ ์ œ๊ฑฐ ๋ช…๋ น์€ ์•ˆ์ „๋ง์œผ๋กœ ๊ณ„์† ํ”„๋กฌํ”„ํŠธํ•ฉ๋‹ˆ๋‹ค</div>

104 <div>`/model` ์„ ํƒ๊ธฐ๋Š” `ANTHROPIC_BASE_URL`์ด Anthropic ํ˜ธํ™˜ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ ๊ฒŒ์ดํŠธ์›จ์ด์˜ `/v1/models` ์—”๋“œํฌ์ธํŠธ์—์„œ ๋ชจ๋ธ์„ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. v2.1.129 ์ดํ›„ `CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1`๋กœ ์˜ตํŠธ์ธํ•˜์„ธ์š”</div>

105 <div>์‹œ์ž‘ ์ค‘์— ์ผ์‹œ์  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ MCP ์„œ๋ฒ„๋Š” ์ด์ œ ์—ฐ๊ฒฐ ํ•ด์ œ ์ƒํƒœ๋กœ ์œ ์ง€๋˜์ง€ ์•Š๊ณ  ์ตœ๋Œ€ 3ํšŒ๊นŒ์ง€ ์ž๋™์œผ๋กœ ์žฌ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค</div>

106 <div>`ANTHROPIC_BEDROCK_SERVICE_TIER`๋Š” Bedrock ์„œ๋น„์Šค ๊ณ„์ธต์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค: `default`, `flex` ๋˜๋Š” `priority`</div>

107 <div>`/terminal-setup`์€ iTerm2์˜ ํด๋ฆฝ๋ณด๋“œ ์•ก์„ธ์Šค ์„ค์ •์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ `/copy`๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค(tmux ํฌํ•จ)</div>

108 <div>Vertex AI๋Š” ์ด์ œ X.509 ์ธ์ฆ์„œ ๊ธฐ๋ฐ˜ Workload Identity Federation(mTLS ADC)์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค</div>

109 <div>์ค‘์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์ˆ˜์ •: ์ด๋ฏธ์ง€๊ฐ€ ๋งŽ์€ ์„ธ์…˜, ํฐ ํŠธ๋žœ์Šคํฌ๋ฆฝํŠธ ํžˆ์Šคํ† ๋ฆฌ์—์„œ์˜ `/usage`, ์ง„ํ–‰ ์ด๋ฒคํŠธ ์—†๋Š” ์žฅ์‹œ๊ฐ„ ์‹คํ–‰ ๋„๊ตฌ</div>

110 </div>

111</div>

112 

113[v2.1.120โ€“v2.1.126์˜ ์ „์ฒด ๋ณ€๊ฒฝ ๋กœ๊ทธ โ†’](/ko/changelog#2-1-120)

whats-new/2026-w19.md +60 โˆ’0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# 19์ฃผ์ฐจ ยท 2026๋…„ 5์›” 4โ€“8์ผ

6 

7> .zip ์•„์นด์ด๋ธŒ ๋ฐ URL์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋กœ๋“œํ•˜๊ณ , Ctrl+R๋กœ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์˜ ๋ช…๋ น ๊ธฐ๋ก์„ ๊ฒ€์ƒ‰ํ•˜๊ณ , ๋กœ์ปฌ HEAD ๋˜๋Š” ์›๊ฒฉ ๊ธฐ๋ณธ๊ฐ’์—์„œ ์ƒˆ worktree๋ฅผ ๋ถ„๊ธฐํ•˜๊ณ , ์ž๋™ ๋ชจ๋“œ ํ•˜๋“œ ๊ฑฐ๋ถ€ ๊ทœ์น™์œผ๋กœ ์ž‘์—…์„ ๋ฌด์กฐ๊ฑด ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

8 

9<div className="digest-meta">

10 <span>๋ฆด๋ฆฌ์Šค <a href="/ko/changelog#2-1-128">v2.1.128 โ†’ v2.1.136</a></span>

11 <span>2๊ฐ€์ง€ ๊ธฐ๋Šฅ ยท 5์›” 4โ€“8์ผ</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">.zip ์•„์นด์ด๋ธŒ ๋ฐ URL์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ</span>

17 </div>

18 

19 <p className="digest-feature-lede">`--plugin-dir`์€ ์ด์ œ ๋””๋ ‰ํ† ๋ฆฌ ์™ธ์—๋„ <code>.zip</code> ํ”Œ๋Ÿฌ๊ทธ์ธ ์•„์นด์ด๋ธŒ๋ฅผ ํ—ˆ์šฉํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด `--plugin-url` ํ”Œ๋ž˜๊ทธ๋Š” ํ˜„์žฌ ์„ธ์…˜์„ ์œ„ํ•ด URL์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์•„์นด์ด๋ธŒ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ์‹œ๋„ํ•˜๊ฑฐ๋‚˜ ์•„ํ‹ฐํŒฉํŠธ ์ €์žฅ์†Œ์—์„œ ๋‚ด๋ถ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.</p>

20 

21 <p className="digest-feature-try">URL์—์„œ ์ง์ ‘ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค:</p>

22 

23 ```bash terminal theme={null}

24 claude --plugin-url https://example.com/my-plugin.zip

25 ```

26 

27 <a className="digest-feature-link" href="/ko/plugins">ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐ€์ด๋“œ</a>

28</div>

29 

30<div className="digest-feature">

31 <div className="digest-feature-header">

32 <span className="digest-feature-title">๋ชจ๋“  ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ก ๊ฒ€์ƒ‰</span>

33 <span className="digest-feature-pill">v2.1.129</span>

34 </div>

35 

36 <p className="digest-feature-lede"><code>Ctrl+R</code> ์—ญ๋ฐฉํ–ฅ ๊ฒ€์ƒ‰์€ ์ด์ œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ํ”„๋กฌํ”„ํŠธ๋กœ ๊ธฐ๋ณธ๊ฐ’์ด ์„ค์ •๋˜์–ด v2.1.124 ์ด์ „์˜ ๋™์ž‘์„ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ์ค‘์— <code>Ctrl+S</code>๋ฅผ ๋ˆŒ๋Ÿฌ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ๋˜๋Š” ์„ธ์…˜์œผ๋กœ ๋ฒ”์œ„๋ฅผ ์ขํž™๋‹ˆ๋‹ค. ์ง€๋‚œ์ฃผ ๋‹ค๋ฅธ ์ €์žฅ์†Œ์—์„œ ์‹คํ–‰ํ•œ ๋ช…๋ น์„ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ฐพ๊ธฐ ์œ„ํ•ด ํŒŒ๊ณ  ์‹ถ์ง€ ์•Š์„ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.</p>

37 

38 <a className="digest-feature-link" href="/ko/interactive-mode#command-history">๋Œ€ํ™”ํ˜• ๋ชจ๋“œ: ๋ช…๋ น ๊ธฐ๋ก</a>

39</div>

40 

41<div className="digest-wins">

42 <p className="digest-wins-title">๊ธฐํƒ€ ๊ฐœ์„  ์‚ฌํ•ญ</p>

43 

44 <div className="digest-wins-grid">

45 <div>์ƒˆ๋กœ์šด <code>worktree.baseRef</code> ์„ค์ •(<code>fresh</code> | <code>head</code>)์€ <code>--worktree</code>, <code>EnterWorktree</code> ๋„๊ตฌ ๋ฐ ์—์ด์ „ํŠธ ๊ฒฉ๋ฆฌ worktree๊ฐ€ ์›๊ฒฉ ๊ธฐ๋ณธ ๋ถ„๊ธฐ์—์„œ ๋ถ„๊ธฐํ• ์ง€ ๋˜๋Š” ๋กœ์ปฌ <code>HEAD</code>์—์„œ ๋ถ„๊ธฐํ• ์ง€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’ <code>fresh</code>๋Š” ์ƒˆ worktree์—์„œ ํ‘ธ์‹œ๋˜์ง€ ์•Š์€ ์ปค๋ฐ‹์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.</div>

46 <div>์ƒˆ๋กœ์šด <code>settings.autoMode.hard\_deny</code> ๊ทœ์น™์€ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ํ—ˆ์šฉ ๊ทœ์น™์ด ์ ์šฉ๋˜๋”๋ผ๋„ ์ž๋™ ๋ชจ๋“œ์—์„œ ์ผ์น˜ํ•˜๋Š” ์ž‘์—…์„ ๋ฌด์กฐ๊ฑด ์ฐจ๋‹จํ•˜๋ฉฐ, ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋ฉด ์•ˆ ๋˜๋Š” ์ž‘์—…์˜ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.</div>

47 <div>ํ›…์€ ์ด์ œ `effort.level` JSON ์ž…๋ ฅ ํ•„๋“œ ๋ฐ `$CLAUDE_EFFORT` ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ™œ์„ฑ ๋…ธ๋ ฅ ์ˆ˜์ค€์„ ์ˆ˜์‹ ํ•˜๋ฉฐ, Bash ๋„๊ตฌ ๋ช…๋ น์€ <code>\$CLAUDE\_EFFORT</code>๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</div>

48 <div><code>CLAUDE\_CODE\_DISABLE\_ALTERNATE\_SCREEN=1</code>์€ ์ „์ฒด ํ™”๋ฉด ๋Œ€์ฒด ํ™”๋ฉด ๋ Œ๋”๋Ÿฌ๋ฅผ ๊ฑฐ๋ถ€ํ•˜๊ณ  ๋Œ€ํ™”๋ฅผ ํ„ฐ๋ฏธ๋„์˜ ๊ธฐ๋ณธ ์Šคํฌ๋กค๋ฐฑ์— ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.</div>

49 <div><code>CLAUDE\_CODE\_PACKAGE\_MANAGER\_AUTO\_UPDATE</code>๋Š” Homebrew ๋˜๋Š” WinGet ์„ค์น˜๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.</div>

50 <div><code>CLAUDE\_CODE\_SESSION\_ID</code>๋Š” ์ด์ œ Bash ๋„๊ตฌ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค ํ™˜๊ฒฝ์— ์žˆ์œผ๋ฉฐ, ํ›…์— ์ „๋‹ฌ๋œ <code>session\_id</code>์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.</div>

51 <div><code>/mcp</code>๋Š” ์ด์ œ ์—ฐ๊ฒฐ๋œ ์„œ๋ฒ„์˜ ๋„๊ตฌ ์ˆ˜๋ฅผ ํ‘œ์‹œํ•˜๊ณ  0๊ฐœ์˜ ๋„๊ตฌ๋กœ ์—ฐ๊ฒฐ๋œ ์„œ๋ฒ„์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.</div>

52 <div><code>--channels</code>๋Š” ์ด์ œ ์ฝ˜์†”(API ํ‚ค) ์ธ์ฆ๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.</div>

53 <div>Bash, ํ›…, MCP ๋ฐ LSP์™€ ๊ฐ™์€ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋Š” ๋” ์ด์ƒ <code>OTEL\_\*</code> ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ Bash ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋˜๋Š” OTEL ๊ณ„์ธก ์•ฑ์€ ๋” ์ด์ƒ CLI์˜ ์ž์ฒด OTLP ์—”๋“œํฌ์ธํŠธ๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.</div>

54 <div>ํ•˜์œ„ ์—์ด์ „ํŠธ ์ง„ํ–‰ ์š”์•ฝ์€ ์ด์ œ ํ”„๋กฌํ”„ํŠธ ์บ์‹œ์— ๋„๋‹ฌํ•˜์—ฌ <code>cache\_creation</code> ํ† ํฐ ๋น„์šฉ์„ ๋Œ€๋žต 3๋ฐฐ ์ค„์ž…๋‹ˆ๋‹ค.</div>

55 <div>์—ฌ๋Ÿฌ OAuth ๋ฐ ์ž๊ฒฉ ์ฆ๋ช… ์•ˆ์ •์„ฑ ์ˆ˜์ •: ๋ณ‘๋ ฌ ์„ธ์…˜์€ ๋” ์ด์ƒ ์ƒˆ๋กœ ๊ณ ์นจ ํ† ํฐ ๊ฒฝ์Ÿ ํ›„ 401์—์„œ ๋ง‰ํžˆ์ง€ ์•Š์œผ๋ฉฐ, MCP OAuth ์ƒˆ๋กœ ๊ณ ์นจ ํ† ํฐ์€ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๊ฐ€ ๋™์‹œ์— ์ƒˆ๋กœ ๊ณ ์น  ๋•Œ ๋” ์ด์ƒ ์†์‹ค๋˜์ง€ ์•Š์œผ๋ฉฐ, ๋™์‹œ ์ž๊ฒฉ ์ฆ๋ช… ์“ฐ๊ธฐ๋กœ ์ธํ•œ ๋“œ๋ฌธ ๋กœ๊ทธ์ธ ๋ฃจํ”„๊ฐ€ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค.</div>

56 <div>์ƒˆ๋กœ์šด <code>parentSettingsBehavior</code> ๊ด€๋ฆฌ์ž ํ‚ค๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ์ž๋Š” SDK <code>managedSettings</code>๋ฅผ ์ •์ฑ… ๋ณ‘ํ•ฉ์— ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.</div>

57 </div>

58</div>

59 

60[v2.1.128โ€“v2.1.136์˜ ์ „์ฒด ๋ณ€๊ฒฝ ๋กœ๊ทธ โ†’](/ko/changelog#2-1-128)