Codex Rules 설정 방법: git push는 막고 조회 명령은 승인받는 법
TL;DR
Codex Rules는 Codex가 sandbox 밖에서 실행하려는 명령을 접두사별로 통제하는 실험적 기능입니다. 사용자 규칙 파일
~/.codex/rules/default.rules
에서
git push
는
forbidden
,
git status
는
prompt
로 지정할 수 있습니다.
규칙을 저장했다고 바로 믿으면 안 됩니다.
codex execpolicy check
로 두 명령의 판정이 각각
forbidden
과
prompt
인지 확인한 뒤 Codex를 재시작합니다. Rules는 sandbox 설정이나 diff·테스트 검수를 대신하지 않으므로 최종 반영은 사람이 맡습니다.
핵심 3줄 요약
~/.codex/rules/default.rules
에
prefix_rule
을 작성해 명령 접두사를 분류합니다.forbidden
, 확인이 필요한 조회 명령은
prompt
로 나눕니다.codex execpolicy check
로 실제 명령을 실행하지 않고 판정을 검증한 뒤 사람이 최종 작업을 승인합니다.이 글에서 다룰 내용
Codex Rules의 한 문장 정의, 적용 범위와 실험 기능 경계, 안전한 규칙 파일 만들기,
git push
차단과
git status
승인 규칙,
match
·
not_match
점검,
execpolicy check
검증, 겹치는 규칙과 복합 셸 명령의 주의점, 복사해 쓸 프롬프트와 FAQ를 다룹니다.
Codex Rules는 무엇이고 언제 쓰면 좋은가
Codex CLI는 코드를 고치는 동안 저장소 상태를 읽거나 외부 명령 실행을 요청할 수 있습니다. 조회와 원격 반영을 같은 승인 수준으로 두면 반복 작업 중 중요한 변경까지 너무 쉽게 허용할 수 있습니다.
Codex Rules는 Codex가 sandbox 밖에서 실행할 수 있는 명령을
prefix_rule
로 제어하는 기능입니다.
pattern
은 명령의 인자 접두사를 정하고,
decision
은
allow
,
prompt
,
forbidden
가운데 하나를 선택합니다.
allow
는 별도 질문 없이 sandbox 밖 실행을 허용합니다.
prompt
는 일치하는 실행마다 승인을 요청하고,
forbidden
은 승인 질문 없이 요청을 막습니다. 여러 규칙이 동시에 맞으면 가장 제한적인 결정이 적용되며 우선순위는
forbidden > prompt > allow
입니다.
여기서는 개인 사용자 레이어에서 원격 반영과 저장소 조회를 나누는 작은 정책부터 시작합니다. 팀 전체 관리 정책이나 모든 셸 명령을 포괄하는 규칙 설계는 다루지 않습니다.
시작 전에 확인할 조건과 기능 경계
공식 문서는 Rules를 experimental로 표시합니다. 문법과 동작이 바뀔 수 있으므로 현재 공식 문서를 확인하고, 기존 규칙 파일은 변경 전 복사본을 남겨야 합니다.
Rules는 sandbox 밖 명령 실행을 통제합니다. sandbox 자체의 읽기·쓰기 범위, Codex의 approval policy, 운영체제 권한을 대신 설정하지 않습니다. 규칙 하나를 추가했다고 파일 접근·네트워크·코드 품질까지 모두 안전해지는 것은 아닙니다.
사용자 레이어 예시는
~/.codex/rules/default.rules
입니다. Codex는 시작할 때 활성 config layer 옆의
rules/
폴더를 읽습니다. 프로젝트의
<repo>/.codex/rules/
는 해당 프로젝트
.codex/
레이어가 신뢰된 경우에만 불러옵니다. 이 글에서는 프로젝트마다 달라지는 신뢰 설정 대신 사용자 레이어만 사용합니다.
기존
default.rules
가 있다면 덮어쓰지 말고 내용을 먼저 확인합니다. 겹치는 규칙이 있을 수 있으므로 현재 파일과 검증 결과를 기록한 뒤 필요한 두 규칙만 추가합니다.
첫 검증에는 실제 원격 저장소나 민감한 명령을 쓰지 않습니다.
execpolicy check
는 전달한 명령을 실행하지 않고 어떤 규칙이 맞는지와 최종 결정을 JSON으로 보여 줍니다.
Rules 파일을 만들고 두 명령을 검증하는 순서
1. 현재 규칙 파일과 승인 경계를 확인합니다
Codex를 종료하기 전에 사용 중인 config layer와 기존 규칙 파일 위치를 확인합니다. 이 글의 대상 파일은 사용자 레이어의
~/.codex/rules/default.rules
입니다.
파일이 이미 있으면 복사본을 만들고 기존
prefix_rule
의
pattern
,
decision
,
justification
을 읽습니다. 특히
git
처럼 넓은 접두사 규칙이 있는지 확인합니다. 기존 규칙의 의미를 모른 채 새 파일로 덮어쓰는 작업은 완료 기준에서 제외합니다.
먼저 정책 목표를 한 줄로 적습니다. 이번 예시는 “Codex가 sandbox 밖에서
git push
를 요청하면 차단하고,
git status
는 매번 사람이 승인한다”입니다.
2. 테스트 가능한
prefix_rule
두 개를 작성합니다
~/.codex/rules/default.rules
에 다음처럼 작성합니다. 기존 파일이 있다면 내용을 보존한 채 검토된 위치에 추가합니다.
prefix_rule(
pattern = ["git", "status"],
decision = "prompt",
justification = "저장소 상태 조회도 실행 전에 확인합니다",
match = ["git status", "git status --short"],
not_match = ["git diff"],
)
prefix_rule(
pattern = ["git", "push"],
decision = "forbidden",
justification = "원격 반영은 사람이 직접 수행합니다",
match = ["git push", "git push --force"],
not_match = ["git status"],
)
pattern
은 명령 인자 목록의 정확한 접두사를 뜻합니다.
match
와
not_match
는 규칙을 불러올 때 함께 검증하는 인라인 예시입니다. 규칙 의도와 다른 명령이 맞거나 빠지는 실수를 일찍 찾는 데 씁니다.
3.
git status
가
prompt
인지 검사합니다
Codex 작업을 시작하기 전에 터미널에서 정책만 검사합니다.
codex execpolicy check --pretty \
--rules ~/.codex/rules/default.rules \
-- git status
출력 JSON에서
decision
이
prompt
인지 확인합니다.
matchedRules
에는
git status
접두사와 작성한
justification
이 보여야 합니다. 이 검사는
git status
자체를 실행하지 않습니다.
결정이 없거나 예상과 다르면 파일 경로와
pattern
토큰부터 다시 봅니다. 결과가 맞지 않는데 실제 저장소를 열어 시험하지 않습니다.
4.
git push
가
forbidden
인지 검사합니다
이제 같은 규칙 파일로 원격 반영 명령의 판정만 확인합니다.
codex execpolicy check --pretty \
--rules ~/.codex/rules/default.rules \
-- git push --force
출력 JSON의 최종
decision
은
forbidden
이어야 합니다.
prompt
가 나오면 승인으로 통과할 수 있으므로 이번 정책 목표를 충족하지 못합니다.
여기서
git push --force
는 정책 검사에 전달하는 문자열일 뿐 실제로 실행되지 않습니다. 운영 저장소와 분리한 비민감 테스트 환경에서 검증하고 검사 명령과 결과 JSON을 변경 기록에 남깁니다.
5. 겹치는 규칙과 대표 변형을 추가로 확인합니다
여러 규칙이 같은 명령에 맞으면
forbidden
,
prompt
,
allow
순으로 더 제한적인 결과가 선택됩니다. “더 긴 pattern이 항상 이긴다”고 추정하지 말고
execpolicy check
결과를 기준으로 판단합니다.
git push
,
git push origin main
,
git push --tags
처럼 같은 접두사의 대표 변형을 검사합니다. 조회 쪽은
git status
와
git status --short
를 확인합니다.
git diff
처럼 이번 규칙에 넣지 않은 명령은
matchedRules
가 비어 있는지도 봅니다.
셸 래퍼와 복합 명령은 따로 봐야 합니다. 공식 문서에 따르면 단순한 명령 체인은 안전하게 나눌 수 있을 때 개별 명령으로 평가합니다. 변수·리디렉션·와일드카드·제어 흐름 같은 고급 셸 기능이 있으면 전체 셸 호출을 하나의 invocation으로 다룹니다. 복잡한 셸 문자열을 허용 규칙으로 넓게 풀지 않습니다.
6. Codex를 재시작하고 실제 승인 흐름을 작은 작업으로 확인합니다
규칙 파일을 추가하거나 바꾼 뒤 Codex를 재시작합니다. 공식 문서는 시작 시 활성 config layer의
rules/
를 스캔한다고 안내합니다.
비민감 저장소에서
git status
가 필요한 작은 읽기 작업을 요청합니다. sandbox 밖 실행 요청이 발생한다면 승인 화면의 명령, 접두사,
justification
을 확인하고 승인 여부를 결정합니다.
git push
는 Codex에 실행시키지 않고 앞 단계의 정책 검사 결과만 유지합니다.
검증 기록에는 규칙 파일 경로, 변경자, 검토자,
prompt
와
forbidden
결과, rollback 조건을 남깁니다. 예상과 다른 승인 흐름이 보이면 Codex를 종료하고 이전 규칙 파일로 되돌린 뒤 다시 검사합니다.
그대로 복사해 쓸 프롬프트
아래 프롬프트는 현재 업무에서 쓰는 명령 목록을 Rules 초안으로 분류할 때 사용합니다. Codex가 파일을 직접 수정하거나 명령을 실행하지 못하도록 결과 범위를 텍스트 초안으로 제한합니다.
목표: 내가 제공한 명령 목록을 Codex Rules 초안으로 분류해 sandbox 밖 실행 정책 검토표를 만든다.
허용 입력: 내가 붙여 넣은 명령과 하위 명령, 각 명령의 업무 목적, 영향 범위, 기존 규칙의 pattern·decision·justification.
제외 입력: 실제 저장소 내용, 비밀값, 자격증명, 제공하지 않은 명령, 셸 별칭 추정, 파일 수정, 명령 실행, 원격 전송.
출력 형식: 1) 명령 접두사 2) 제안 decision 3) 근거 4) match 예시 5) not_match 예시 6) 사람 확인 필요 항목 7) rollback 조건 순서의 표와 .rules 텍스트 초안.
완료 기준: 모든 제공 명령이 한 번씩 분류돼 있다. 원격 반영·삭제처럼 되돌리기 어려운 명령은 forbidden 후보로 분리돼 있다. 겹치는 pattern과 검증 명령이 표시돼 있다.
추정 금지: 제공하지 않은 명령, 옵션, 경로, 조직 정책을 만들지 않는다. 위험도를 판단할 정보가 없으면 확인 필요로 표시하고 allow로 두지 않는다.
승인 지점: 먼저 표와 .rules 초안만 보여 준다. 사용자가 pattern·decision·justification을 승인한 뒤에도 파일 저장이나 명령 실행은 하지 않는다. 최종 반영과 execpolicy check 실행은 사람이 한다.
실전 활용 팁
규칙은 “안전한 명령 목록”보다 sandbox 밖 실행의 예외 정책으로 관리하는 편이 범위가 선명합니다. 자동 허용을 늘리기 전에 왜 sandbox 밖 실행이 필요한지부터 확인합니다.
justification
에는 명령 이름을 반복하기보다 승인자가 판단할 기준을 씁니다. “git status 규칙”보다는 “저장소 상태 조회도 실행 전에 확인합니다”처럼 승인 이유를 바로 이해할 수 있어야 합니다.
Smart approvals가 제안한
prefix_rule
도 그대로 수락하지 않습니다. 공식 문서는 Smart approvals가 기본으로 켜져 있을 때 escalation request 과정에서 규칙을 제안할 수 있으므로 접두사를 자세히 검토하라고 안내합니다. 한 번 허용한 넓은 접두사가 이후 실행에도 영향을 줄 수 있습니다.
검증 결과는 세 칸이면 충분합니다. 명령 표본, 기대 결정, 실제 결정을 나란히 적고 차이가 난 행만 규칙 수정 대상으로 돌립니다. 규칙 파일이 길어져도 이 표가 있으면 변경 전후를 빠르게 비교할 수 있습니다.
주의할 점
- Rules는 실험 기능이므로 현재 공식 문서와 Codex 버전에서 다시 확인합니다.
- Rules는 sandbox 밖 명령 제어 기능이며 sandbox·approval policy·운영체제 권한을 대신하지 않습니다.
-
allow는 sandbox 밖 실행을 질문 없이 허용하므로 편의를 이유로 넓게 설정하지 않습니다. - 여러 규칙이 맞으면 가장 제한적인 결정이 적용되지만 실제 표본은
execpolicy check로 확인합니다. -
match·not_match와 정책 검사는 실행 결과의 정확성이나 코드 안전성을 보장하지 않습니다. - 규칙 파일 수정 전 백업, 수정자·검토자 기록, rollback 조건을 남깁니다.
- 원격 반영, 배포, 삭제, 자격증명 변경은 Codex의 초기 완료 기준에서 제외하고 사람이 수행합니다.
자주 묻는 질문
Rules를 만들면 `git push`가 운영체제 전체에서 막히나요?
아닙니다. 이 규칙은 Codex가 sandbox 밖에서 명령 실행을 요청할 때 적용됩니다. 사용자가 터미널에서 직접 실행하는 Git 명령이나 다른 프로그램의 동작까지 운영체제 수준에서 차단하는 정책은 아닙니다.
`prompt`와 `forbidden`은 어떻게 다른가요?
prompt
는 일치하는 sandbox 밖 실행마다 사용자 승인을 요청합니다.
forbidden
은 승인 질문 없이 요청을 막습니다. 원격 반영을 Codex가 수행하면 안 되는 정책이라면
prompt
가 아니라
forbidden
을 선택합니다.
규칙 파일을 저장하면 바로 적용되나요?
공식 문서는 규칙 파일을 만든 뒤 Codex를 재시작하라고 안내합니다. 재시작 전후에도
codex execpolicy check
로 파일 경로와 판정을 먼저 확인합니다.
`execpolicy check`가 통과하면 실제 작업도 안전한가요?
아닙니다. 정책 검사는 어떤 규칙과 결정이 적용되는지를 보여 줄 뿐, 명령 결과나 코드 변경의 정확성을 보장하지 않습니다. 실제 작업에서는 diff, 테스트, 원격 상태를 사람이 별도로 검수해야 합니다.
출처
마무리
Codex Rules를 처음 설정한다면 자동 허용 목록을 크게 만들기보다 서로 다른 두 결정을 검증하는 편이 안전합니다.
git status
는
prompt
,
git push
는
forbidden
으로 나누면 조회와 원격 반영의 승인 경계가 분명해집니다.
작업을 끝내기 전에
codex execpolicy check
결과를 기록하고 Codex를 재시작합니다. Rules가 sandbox와 검수를 대신한다고 가정하지 말고, 원격 반영은 사람이 수행하는 기준을 유지해야 합니다.
