Quick Reference
Rules는 sandbox 밖으로 나가려는 명령의 처리 방식을 정합니다. allow는 자동 허용, prompt는 매번 승인 요청, forbidden은 요청 없이 차단이며, 겹치는 rule에서는 forbidden이 prompt보다, prompt가 allow보다 우선합니다.
# ~/.codex/rules/default.rules
prefix_rule(
pattern = ["gh", "pr", "view"],
decision = "prompt",
justification = "PR 조회는 범위를 확인한 뒤 실행합니다.",
match = [
"gh pr view 7888",
"gh pr view 7888 --json title,body,comments",
],
not_match = [
"gh pr --repo openai/codex view 7888",
],
)# 검사할 rule 파일과 명령의 일치 결과를 확인한다.
codex execpolicy check --rules ~/.codex/rules/default.rules gh pr view 7888prefix가 실제로 맞추는 범위
pattern은 shell 문자열이 아니라 실행할 프로그램의 argument list 앞부분을 맞춥니다. pattern = ["gh", "pr", "view"]는 gh pr view 7888과 gh pr view --repo openai/codex에 맞지만, gh pr --repo openai/codex view 7888에는 맞지 않습니다. option의 위치까지 고려해 match와 not_match를 rule 안에 함께 적어야 합니다.
match와 not_match는 설명용 예시가 아니라 Codex가 rule을 load할 때 확인하는 inline test입니다. 의도하지 않은 command variant가 새 rule을 통과하지 않는지 확인할 수 있습니다. .rules 파일은 active config layer 옆의 rules/ 폴더에 두며, project-local .codex/rules/는 project를 trust했을 때만 로드됩니다. rule을 고친 뒤에는 Codex를 다시 시작합니다.
| decision | 적합한 명령 | 피해야 할 사용 |
|---|---|---|
allow | 구체적인 read-only 조회처럼 영향이 좁은 명령 | git, npm, python처럼 임의 하위 동작이 넓은 prefix |
prompt | 외부 API 조회, repository 상태 변경처럼 맥락이 필요한 명령 | 위험 명령의 승인 피로를 없애려는 용도 |
forbidden | credential 탐색, 파괴적 삭제처럼 현재 환경에서 허용하지 않을 명령 | 대체 방법을 적지 않은 채 필요한 업무 흐름을 막는 경우 |
shell wrapper와 복합 명령
bash -lc, bash -c, zsh -c, sh -c의 script 문자열은 여러 실행을 숨길 수 있으므로 Codex가 특별히 다룹니다. 변수 확장·glob·assignment 없이 plain word와 &&, ||, ;, |만 있는 선형 command chain은 개별 명령으로 나눠 각각 rule을 적용합니다.
# allow된 git add가 있어도 두 번째 명령이 별도로 평가된다.
bash -lc 'git add . && rm -rf /'위 예시는 git add .와 rm -rf /로 분리됩니다. rm에 더 엄격한 rule이 적용되므로 전체 invocation이 자동 허용되지 않습니다. 반면 변수 확장, redirection, command substitution, wildcard가 섞이면 단순 분해로 안전성을 증명할 수 없습니다. 그런 wrapper 전체를 넓은 allow rule로 열지 말고 prompt로 남기거나 명령을 분리합니다.
rule을 추가하기 전 검사
먼저 명령이 정말 sandbox 밖 권한을 필요로 하는지 확인합니다. sandbox 안에서 가능한 local read를 rule로 열 필요는 없습니다. 다음으로 prefix를 가장 좁은 stable subcommand까지 적고, 성공해야 할 argument 순서와 실패해야 할 변형을 match·not_match에 넣습니다.
Rules는 experimental 기능이며 버전에 따라 바뀔 수 있습니다. 팀 공통 policy는 한 번의 성공 실행으로 확정하지 말고, 새 Codex 버전에서 codex execpolicy check와 차단되어야 할 변형까지 다시 검증하십시오.
참고 링크
2 sources