본문 바로가기
C.W.K.
Stream
Lesson 04 of 08 · published

Agent SDK의 기본 도구도 권한으로 골라 줘

~14 min · tools, default-tools, filesystem, bash

Level 0Observer
0 XP0/64 lessons0/13 achievements
0/150 XP to next level150 XP to go0% complete

Claude Code의 작업 도구가 함께 와

Agent SDK는 Read, Write, Edit, Bash, Glob, Grep, WebFetch, Task, NotebookEdit 같은 파일·셸 도구를 기본 제공해. 모델은 다른 도구처럼 필요할 때 골라 쓰고, 부수 효과가 있는 작업은 기본 권한 확인을 거쳐. 직접 도구 실행기를 다시 만들지 않아도 되는 큰 장점이야.

도구마다 다른 계약이 있어

Read는 크기와 위치를 조절하며 파일을 읽고, Write는 새 파일을 만들며, Edit는 읽은 문자열을 바꿔. Bash는 작업 디렉터리에서 명령을 실행하고, Glob과 Grep은 경로와 내용을 찾아. 이름이 비슷한 편의 기능이 아니라 각기 다른 비용과 안전 조건을 가진 권한이야.

필요한 것만 허용 목록에 넣어

읽기와 검색만 필요한 에이전트에는 그 도구만 줘. 기본 묶음은 넓으므로 운영 에이전트에서는 적극적으로 줄이고 이유를 남겨야 해. 선언은 tools=로 해. 그게 무엇이 존재할지 정하고, allowed_tools=는 무엇이 묻지 않고 돌지만 정해. cwkPippa가 Claude 브레인에 파일과 셸 도구를 주는 건 아빠와 함께 코딩하는 동반자이기 때문이고, 웹은 기본 WebSearch·WebFetch 대신 자기 checkpoint MCP 서버로만 열어. 고객 상담 에이전트가 Bash를 가져야 할 이유는 없어.

원칙: 도구 능력은 기능 표지가 아니라 권한이야. 허용 목록을 보안 정책처럼 감사해.

Code

흔한 tools= 조합·python
# 이 중 하나를 tools=로 넘겨. 실행에 어떤 기본 도구가 존재할지 정해.
# (allowed_tools=로 넘기면 미리 승인만 하고, 다른 도구는 전부 그대로 남아.)

# 읽기 전용 감사자
READ_ONLY = ["Read", "Grep", "Glob", "WebFetch"]

# 문서 편집자 (읽기와 편집만, 셸도 새 파일 생성도 없음)
DOC_EDITOR = ["Read", "Grep", "Glob", "Edit"]

# 페어 프로그래머 (전부 주되 Task 위임은 빼)
PAIR_PROGRAMMER = [
    "Read", "Write", "Edit",
    "Glob", "Grep", "WebFetch",
    "Bash", "NotebookEdit",
]

# 시스템 관리 도우미에겐 bash만
SYSADMIN = ["Bash", "Read"]

options = ClaudeAgentOptions(tools=READ_ONLY, allowed_tools=READ_ONLY)
Edit이 같은 세션에 사전 Read 요구·python
# Agent SDK의 Edit 도구는 이 세션에서 Read 안 한 파일이면 거부해.
# 일부러 그래. 바꾸기 전에 모델이 지금 내용을 보게 하려고.
# 네 코드가 따로 강제할 필요는 없어. SDK가 해.
#
# 그러니 세션을 새로 시작하면(새 ClaudeSDKClient) 모델이 다시 읽어야 해.
# 세션 단위 상태가 주는 안전 보장이 바로 이거야.

External links

Exercise

현재 에이전트가 쓸 수 있는 모든 Agent SDK 도구를 적고 각 도구가 필요한 이유를 한 문장씩 써. 설명할 수 없는 도구는 제거해.
Hint
“언젠가 필요할 수 있어서”는 권한을 열어 둘 근거가 아니야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.