AI 에이전트(Kiro / Claude Code)를 사용하면서 이런 경험을 해본 적 없으신가요?
AI: grep -r "auth" src/ 를 실행해도 될까요?
나: OK
AI: ls -la src/auth/ 를 실행해도 될까요?
...
조사 계열 명령은 읽기 전용(Read-only)이며 파괴적이지 않은데도, 매번 승인을 요구합니다.
한 번의 조사 태스크에서 20회 이상의 승인. 이래서는 효율화는커녕 오히려 번거롭기만 합니다.
이 기사에서는 조사 계열 명령의 승인을 완전히 제로(0)로 만드는 설정을 복사 붙여넣기 할 수 있는 형태로 제공합니다.
Kiro / Claude Code에는 "이 명령은 신뢰할 수 있다"라고 사전에 등록하는 기능이 있습니다.
등록된 명령은 승인 없이 자동으로 실행됩니다.
| 스코프 | 파일 경로 | 용도 |
|---|
| 글로벌 (Global) | ~/.claude/settings.json | 모든 프로젝트 공통 적용 |
| 프로젝트 (Project) | .claude/settings.json | 특정 프로젝트에만 적용 |
| 로컬 (Local) | .claude/settings.local.json | 개인 설정 (gitignore 권장) |
~/.claude/settings.json에 아래 내용을 붙여넣으세요.
{
"permissions": {
"allow": [
...
"Bash(grep:*)",
"Bash(rg:*)",
"Bash(ag:*)",
...
이것들은 읽기 전용 명령이므로 허용해도 안전합니다.
"Bash(sort:*)",
"Bash(uniq:*)",
"Bash(cut:*)",
...
sed는 -n 옵션이 붙은 경우만 허용합니다. sed -i (파일 쓰기/수정)는 허용하지 않습니다.
"Bash(aws * describe-*)",
"Bash(aws * get-*)",
"Bash(aws * list-*)",
...
AWS CLI의 읽기 계열 API만 허용합니다. aws s3 rm, aws ec2 terminate-instances 등은 허용하지 않습니다.
"Bash(git status:*)",
"Bash(git log:*)",
"Bash(git diff:*)",
...
Git 조작은 로컬 참조만 허용합니다. git push, git reset, git checkout은 허용하지 않습니다.
"Bash(gh pr list:*)",
"Bash(gh pr view:*)",
"Bash(gh pr diff:*)",
...
이것들은 GitHub API의 읽기이므로 안전합니다.
"Bash(npm list:*)",
"Bash(npm outdated:*)",
"Bash(npm audit:*)",
...
의존성 확인만 허용합니다. npm install, pip install은 허용하지 않습니다.
"Bash(docker ps:*)",
"Bash(docker logs:*)",
"Bash(docker inspect:*)",
...
컨테이너·클러스터의 상태 확인만 허용합니다. docker rm, kubectl delete는 허용하지 않습니다.
"deny": [
"Bash(rm -rf *)",
"Bash(git push -f *)",
...
이것들은 파괴적인 조작이므로 명시적으로 거부(Deny) 리스트에 넣어둡니다. AI가 실수로 실행하려고 해도 확실하게 차단됩니다.
Settings → Kiro Agent: Trusted Commands
설정 레벨:
User: 모든 워크스페이스에서 유효
Workspace: 특정 프로젝트에서만 유효
다음 내용을 한 줄씩 추가하세요.
Kiro는 문자열의 접두사 일치 (Prefix Match) 방식으로 매칭됩니다.
| 설정 | 매칭 예시 |
|---|
grep | grep -r "auth" src/, grep -n "TODO" *.ts |
aws | aws s3 ls, aws ec2 describe-instances |
git status | git status, git status -s |
aws만 설정하면 모든 AWS 명령어가 허용됩니다. 읽기 전용으로 제한하고 싶다면 aws ec2 describe, aws s3 ls 등을 개별적으로 설정하세요.
Claude Code에서는 :*가 와일드카드(Wildcard)입니다.
| 패턴 | 매칭 예시 |
|---|
Bash(grep:*) | grep -r "auth" src/ |
Bash(aws * describe-*) | aws ec2 describe-instances, aws rds describe-db-instances |
Bash(git log:*) | git log --oneline -10 |
// ❌ 위험: git push -f 도 허용됨
"Bash(git *)"
// ✅ 안전: 읽기 계열만 허용
...
git *와 같이 너무 넓은 패턴은 절대 피해야 합니다. git push -f나 git reset --hard도 허용되어 버립니다.
나: 인증 관련 코드를 조사해줘
AI: grep -r "auth" src/ 를 실행해도 될까요?
나: OK
...
나: 인증 관련 코드를 조사해줘
AI: (자동으로 grep, ls, cat, git log, aws logs 실행)
AI: 조사를 완료했습니다.
...
승인 횟수: 20회 → 0회
소요 시간: 30분 → 5분
.claude/settings.json (프로젝트 루트)
{
"permissions": {
"allow": [
...
{
"permissions": {
"allow": [
...
{
"permissions": {
"allow": [
...
원인 1: 패턴이 일치하지 않음
// ❌ 공백 위치가 다름
"Bash(aws logs get-log-events:*)"
// ✅ 올바른 패턴
...
원인 2: 설정 파일의 위치가 다름
설정 우선순위: 프로젝트 > 글로벌
원인 3: JSON 구문 오류 (Syntax Error)
# 구문 체크
cat ~/.claude/settings.json | jq .
최소한의 설정부터 시작하여 필요에 따라 추가해 나가는 접근 방식을 추천합니다.
// 최소 구성 (우선 이것만)
{
"permissions": {
...
사용하다가 "이것도 허용하고 싶다"고 생각되면 추가해 나가면 됩니다.
Claude Code의 경우:
# 현재 설정 확인
claude /permissions
| 설정 | 효과 |
|---|
| 조사 계열 명령어 허용 | 승인 없이 조사가 진행됨 |
| ... | |
한 번 설정하면 모든 조사 작업에서 효과를 발휘합니다.
이 기사의 설정을 복사하여 쾌적한 AI 에이전트 생활을 시작해 보세요.