권한
실행에 승인이 필요한 작업을 제어합니다.
Dropstone은 permission 설정을 사용하여 주어진 작업이 자동으로 실행되어야 하는지, 사용자에게 묻거나, 차단되어야 하는지 결정합니다.
레거시 tools 불리언 설정은 더 이상 사용되지 않으며 permission에 통합되었습니다. 이전 tools 설정은 이전 버전과의 호환성을 위해 여전히 지원됩니다.
작업
각 권한 규칙은 다음 중 하나로 결정됩니다:
"allow": 승인 없이 실행"ask": 승인 요청"deny": 작업 차단
설정
전역적으로(* 사용) 권한을 설정하고 특정 도구를 재정의할 수 있습니다.
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}
모든 권한을 한 번에 설정할 수도 있습니다:
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": "allow"
}
세부 규칙 (객체 구문)
대부분의 권한에 대해 객체를 사용하여 도구 입력에 따라 다른 작업을 적용할 수 있습니다.
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"npm *": "allow",
"rm *": "deny",
"grep *": "allow"
},
"edit": {
"*": "deny",
"packages/web/src/content/docs/*.mdx": "allow"
}
}
}
규칙은 패턴 일치로 평가되며 마지막으로 일치하는 규칙이 우선합니다. 일반적인 패턴은 catch-all "*" 규칙을 먼저 두고 더 구체적인 규칙을 그 뒤에 배치하는 것입니다.
와일드카드
권한 패턴은 간단한 와일드카드 일치를 사용합니다:
*는 임의의 문자 0개 이상과 일치?는 정확히 한 문자와 일치- 다른 모든 문자는 문자 그대로 일치
홈 디렉터리 확장
패턴 시작 부분에 ~ 또는 $HOME을 사용하여 홈 디렉터리를 참조할 수 있습니다. 이는 external_directory 규칙에 특히 유용합니다.
~/projects/*->/Users/username/projects/*$HOME/projects/*->/Users/username/projects/*~->/Users/username
외부 디렉터리
external_directory를 사용하여 Dropstone이 시작된 작업 디렉터리 외부의 경로를 건드리는 도구 호출을 허용합니다. 이는 경로를 입력으로 받는 모든 도구(예: read, edit, glob, grep 및 많은 bash 명령)에 적용됩니다.
홈 확장(~/... 등)은 패턴 작성 방식에만 영향을 줍니다. 외부 경로를 현재 작업 공간의 일부로 만들지는 않으므로 작업 디렉터리 외부의 경로는 여전히 external_directory를 통해 허용되어야 합니다.
예를 들어, 다음은 ~/projects/personal/ 아래의 모든 항목에 대한 접근을 허용합니다:
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}
여기서 허용된 모든 디렉터리는 현재 작업 공간과 동일한 기본값을 상속합니다. read가 기본적으로 allow이므로 재정의하지 않는 한 external_directory 아래의 항목에 대한 읽기도 허용됩니다. 이러한 경로에서 도구를 제한해야 할 때 명시적 규칙을 추가하세요. 예를 들어 읽기는 유지하면서 편집을 차단하는 경우:
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
},
"edit": {
"~/projects/personal/**": "deny"
}
}
}
목록을 신뢰할 수 있는 경로에 집중하고 다른 도구(예: bash)에 필요한 경우 추가 허용 또는 거부 규칙을 계층화하세요.
사용 가능한 권한
Dropstone 권한은 도구 이름과 몇 가지 안전 장치로 키가 지정됩니다:
read: 파일 읽기(파일 경로와 일치)edit: 모든 파일 수정(edit,write,patch포함)glob: 파일 글로빙(글로브 패턴과 일치)grep: 콘텐츠 검색(정규식 패턴과 일치)bash: 셸 명령 실행(git status --porcelain과 같은 구문 분석된 명령과 일치)task: 하위 에이전트 실행(하위 에이전트 유형과 일치)skill: 스킬 로드(스킬 이름과 일치)lsp: LSP 쿼리 실행(현재 비세부적)question: 실행 중 사용자에게 질문webfetch: URL 가져오기(URL과 일치)websearch: 웹 검색(쿼리와 일치)external_directory: 도구가 프로젝트 작업 디렉터리 외부의 경로를 건드릴 때 트리거doom_loop: 동일한 도구 호출이 동일한 입력으로 3회 반복될 때 트리거
기본값
아무것도 지정하지 않으면 기본 build 에이전트는 모든 작업 전에 묻습니다. 승인은 예외가 아니라 기본값입니다:
{
"permission": {
"*": "ask",
"read": {
"*": "ask",
"*.env": "ask",
"*.env.*": "ask",
"*.env.example": "ask"
},
"external_directory": { "*": "ask" },
"question": "deny",
"plan_enter": "deny",
"plan_exit": "deny",
"mode_switch": "deny"
}
}
이미 승인한 디렉터리는 세션의 나머지 기간 동안 external_directory에 "allow"로 추가됩니다.
사용자 설정은 이러한 기본값 위에 병합되며 사용자 규칙이 우선합니다. 기본값을 대체하지는 않습니다: edit를 "allow"로 설정하면 read는 "ask"로 유지되므로 변경하려는 모든 권한을 지정해야 합니다.
accept all 에이전트는 대신 "*": "allow"에서 시작하며 external_directory가 완전히 허용됩니다. .env 및 .env.* 읽기는 여전히 묻습니다. 자동 승인 실행이 비밀을 넘겨주는 것에 동의하는 것과 같지 않다는 논리입니다.
헤드리스 및 서버 모드
대화형에서는 "ask"가 무해합니다. 프롬프트가 표시되고 승인하면 됩니다. dropstone serve 아래, CI 또는 키보드 앞에 사람이 없는 다른 곳에서는 물어볼 사람이 없으므로 호출이 "status": "running"에 머물고 요청이 실패하는 대신 중단됩니다. 타임아웃도 잡을 오류도 없습니다.
build 에이전트가 모든 작업 전에 묻기 때문에 이는 가장자리 사례가 아니라 기본 결과입니다. 부분 설정도 도움이 되지 않습니다: edit를 허용하면 read가 "ask"로 남고 에이전트가 파일을 처음 열 때 실행이 중단됩니다.
두 가지 해결 방법이 있습니다. "*": "allow"에서 시작하는 accept all 에이전트를 실행하거나:
curl -X POST ".../session/$SID/message" -d '{ "agent": "accept all", ... }'
또는 build를 유지하고 전체 허용 목록을 명시하여 기본적으로 거부하도록 설정하면 이후 릴리스에서 추가된 도구가 조용히 실행을 중단시킬 수 없습니다:
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": {
"*": "deny",
"read": "allow",
"edit": "allow",
"glob": "allow",
"grep": "allow",
"bash": "allow"
}
}
작업에 실제로 필요한 범위로 좁히세요. 읽고 보고만 하는 에이전트는 edit나 bash를 보유할 이유가 없습니다.
accept all은 여전히 .env 및 .env.*를 읽기 전에 묻습니다. 무인 실행이 이를 읽어야 한다면 명시적으로 허용하고 신중하게 결정하세요.
Note
헤드리스 실행이 출력을 중단하고 반환되지 않으면 GET /session/:id/message로 세션의 마지막 메시지를 확인하세요. "status": "running"에 고정된 도구 부분이 이 문제입니다. 느린 모델이 아닙니다.
"Ask"가 하는 일
Dropstone이 승인을 요청하면 UI는 세 가지 결과를 제공합니다:
once: 이 요청만 승인always: 제안된 패턴과 일치하는 향후 요청 승인(현재 Dropstone 세션의 나머지 기간 동안)reject: 요청 거부
always가 승인할 패턴 집합은 도구에서 제공됩니다(예: bash 승인은 일반적으로 git status*와 같은 안전한 명령 접두사를 허용 목록에 추가합니다).
에이전트
에이전트별로 권한을 재정의할 수 있습니다. 에이전트 권한은 전역 설정과 병합되며 에이전트 규칙이 우선합니다. 에이전트 권한에 대한 자세히 알아보기.
Note
더 자세한 패턴 일치 예제는 위의 세부 규칙 (객체 구문) 섹션을 참조하세요.
{
"$schema": "https://dropstone.io/schema/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "deny",
"git push *": "deny",
"grep *": "allow"
}
},
"agent": {
"build": {
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "ask",
"git push *": "deny",
"grep *": "allow"
}
}
}
}
}
Markdown에서도 에이전트 권한을 구성할 수 있습니다:
---
description: 편집 없는 코드 리뷰
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
코드만 분석하고 변경 사항을 제안하세요.
Tip
인수가 있는 명령에는 패턴 일치를 사용하세요. "grep *"는 grep pattern file.txt를 허용하지만 "grep"만으로는 차단합니다. git status와 같은 명령은 기본 동작에 작동하지만 인수가 전달될 때는 명시적 권한("git status *" 등)이 필요합니다.