규칙
Codex가 샌드박스 외부에서 실행할 수 있는 명령 제어
규칙을 사용하여 Codex가 샌드박스 외부에서 실행할 수 있는 명령을 제어할 수 있습니다.
규칙 파일 만들기
- 활성 구성 레이어 옆의
rules/폴더 아래에.rules파일을 만듭니다(예:~/.codex/rules/default.rules). - 규칙을 추가합니다. 다음 예시에서는
gh pr view을 샌드박스 외부에서 실행하도록 허용하기 전에 사용자에게 확인합니다.
# Prompt before running commands with the prefix `gh pr view` outside the sandbox.
prefix_rule(
# The prefix to match.
pattern = ["gh", "pr", "view"],
# The action to take when Codex requests to run a matching command.
decision = "prompt",
# Optional rationale for why this rule exists.
justification = "Viewing PRs is allowed with approval",
# `match` and `not_match` are optional "inline unit tests" where you can
# provide examples of commands that should (or should not) match this rule.
match = [
"gh pr view 7888",
"gh pr view --repo openai/codex",
"gh pr view 7888 --json title,body,comments",
],
not_match = [
# Does not match because the `pattern` must be an exact prefix.
"gh pr --repo openai/codex view 7888",
],
)- Codex를 다시 시작합니다.
Codex는 시작할 때 팀 구성 위치와 ~/.codex/rules/의 사용자 레이어를 비롯하여 모든 활성 구성 레이어 아래의 rules/을 검색합니다. <repo>/.codex/rules/ 아래의 프로젝트 로컬 규칙은 프로젝트 .codex/ 레이어를 신뢰하는 경우에만 로드됩니다.
TUI의 허용 목록에 명령을 추가하면 Codex는 이후 실행 시 확인 메시지를 건너뛸 수 있도록 ~/.codex/rules/default.rules의 사용자 레이어에 기록합니다.
Smart approvals가 활성화된 경우(기본값), Codex는 권한 승격 요청 중에
사용자를 위해 prefix_rule을 제안할 수 있습니다. 제안된 접두사를 수락하기
전에 주의 깊게 검토하세요.
관리자는 requirements.toml에서 제한적인
prefix_rule 항목을 강제 적용할 수도 있습니다.
규칙 필드 이해하기
prefix_rule()은 다음 필드를 지원합니다.
pattern(필수): 일치시킬 명령 접두사를 정의하는 비어 있지 않은 목록입니다. 각 요소는 다음 중 하나입니다.- 리터럴 문자열(예:
"pr"). - 해당 인수 위치에서 대안을 일치시키기 위한 리터럴의 합집합(예:
["view", "list"]).
- 리터럴 문자열(예:
decision(기본값:"allow"): 규칙이 일치할 때 수행할 작업입니다. 둘 이상의 규칙이 일치하면 Codex는 가장 제한적인 결정을 적용합니다(forbidden>prompt>allow).allow: 확인하지 않고 샌드박스 외부에서 명령을 실행합니다.prompt: 일치하는 각 호출 전에 확인합니다.forbidden: 확인하지 않고 요청을 차단합니다.
justification(선택 사항): 사람이 읽을 수 있는 비어 있지 않은 규칙 사유입니다. Codex는 승인 확인 메시지나 거부 메시지에 이 사유를 표시할 수 있습니다.forbidden을 사용할 때는 적절한 경우 근거에 권장 대안을 포함하세요(예:"Use \rg` instead of `grep`."`).match및not_match(기본값:[]): Codex가 규칙을 로드할 때 검증하는 예시입니다. 규칙이 적용되기 전에 실수를 발견하려면 이를 사용하세요.
Codex는 실행할 명령을 검토할 때 명령의 인수 목록을 pattern과 비교합니다. 내부적으로 Codex는 명령을 인수 목록으로 취급합니다(execvp(3)이 받는 형식과 유사함).
셸 래퍼 및 복합 명령
일부 도구는 여러 셸 명령을 하나의 호출로 래핑합니다. 예를 들면 다음과 같습니다.
["bash", "-lc", "git add . && rm -rf /"]이런 종류의 명령은 하나의 문자열 안에 여러 작업을 숨길 수 있으므로 Codex는 bash -lc, bash -c 및 이에 해당하는 zsh / sh을 특별하게 처리합니다.
Codex가 스크립트를 안전하게 분할할 수 있는 경우
셸 스크립트가 다음 요소만으로 이루어진 선형 명령 체인이라면
- 일반 단어(변수 확장,
VAR=...,$FOO,*등이 없음) - 안전한 연산자(
&&,||,;또는|)로 연결됨
Codex는 이를 tree-sitter로 구문 분석하고 규칙을 적용하기 전에 개별 명령으로 분할합니다.
위 스크립트는 다음 두 개의 개별 명령으로 취급됩니다.
["git", "add", "."]["rm", "-rf", "/"]
그러면 Codex는 각 명령을 규칙에 따라 평가하며 가장 제한적인 결과가 적용됩니다.
pattern=["git", "add"]을 허용하더라도 git add . && rm -rf /은 Codex에서 자동 허용되지 않습니다. rm -rf / 부분이 별도로 평가되어 전체 호출이 자동 허용되지 않도록 하기 때문입니다.
이를 통해 안전한 명령에 위험한 명령을 끼워 넣는 행위를 방지합니다.
Codex가 스크립트를 분할하지 않는 경우
스크립트가 다음과 같은 고급 셸 기능을 사용하면
- 리디렉션(
>,>>,<) - 치환(
$(...),...) - 환경 변수(
FOO=bar) - 와일드카드 패턴(
*,?) - 제어 흐름(
if,for, 할당을 포함하는&&등)
Codex는 이를 해석하거나 분할하려고 시도하지 않습니다.
이 경우 전체 호출은 다음과 같이 취급됩니다.
["bash", "-lc", "<full script>"]그리고 규칙이 이 단일 호출에 적용됩니다.
이러한 처리 방식을 통해 안전한 경우에는 명령별 평가의 보안을 확보하고, 그렇지 않은 경우에는 보수적으로 동작할 수 있습니다.
규칙 파일 테스트하기
codex execpolicy check을 사용하여 규칙이 명령에 어떻게 적용되는지 테스트하세요.
codex execpolicy check --pretty \
--rules ~/.codex/rules/default.rules \
-- gh pr view 7888 --json title,body,comments이 명령은 가장 엄격한 결정과 일치하는 모든 규칙을 보여주는 JSON을 출력하며, 일치한 규칙의 모든 justification 값도 포함합니다. 둘 이상의 파일을 결합하려면 --rules 플래그를 여러 번 사용하고, 출력 형식을 지정하려면 --pretty을 추가하세요.
규칙 언어 이해하기
.rules 파일 형식은 Starlark을 사용합니다(언어 사양 참조). 구문은 Python과 유사하지만 안전하게 실행할 수 있도록 설계되었습니다. 규칙 엔진은 부작용 없이 이를 실행할 수 있습니다(예: 파일 시스템을 건드리지 않음).