← Back to sungyongcho.com
로그 목록으로

Codex용 안전한 Git 커밋 스킬 만들기

#codex#skills#git

Git 커밋을 만드는 일 자체는 쉽다. 하지만 여러 작업이 섞인 working tree에서 정확한 커밋을 만드는 일은 다르다. 현재 작업의 범위를 판별하고, 다른 사람의 변경을 보존하고, 필요한 파일만 stage하고, staged snapshot을 다시 검증하고, 결과를 과장 없이 설명해야 한다.

나는 이 과정을 Codex에서 반복해서 사용할 수 있도록 commit-it 스킬로 만들었다.

저장된 프롬프트보다 스킬이 나은 이유

OpenAI 공식 문서에 따르면 스킬은 필수 SKILL.md와 선택적인 scripts, references, assets를 포함하는 디렉터리다. Codex에서는 $skill-name으로 직접 호출하거나, 요청이 description과 일치할 때 자동으로 선택할 수 있다.

즉, 매번 같은 커밋 체크리스트를 프롬프트에 다시 적는 대신 하나의 파일에 지속적인 규칙을 보관할 수 있다. 필요할 때만 호출하고, 규칙은 모든 저장소에서 동일하게 적용한다.

commit-it이 보호하는 것

이 스킬은 현재 대화와 검증된 diff를 작업 경계로 취급한다. 핵심 규칙은 의도적으로 보수적이다.

  • repository status와 staged, unstaged, untracked 변경을 모두 확인한다.
  • working tree에 이미 존재한다는 이유만으로 관련 없는 작업을 stage하지 않는다.
  • 커밋 메시지 초안 요청과 실제 커밋 권한을 구분한다.
  • 커밋 직전에 staged snapshot을 다시 확인한다.
  • 간결한 Conventional Commit 헤더를 사용한다.
  • 명시적 요청 없이는 amend, reset, push 또는 관련 없는 작업 변경을 수행하지 않는다.

따라서 commit-it은 단순한 git commit alias가 아니다. Git 상태 주변의 작은 의사결정 정책이다.

로컬에 설치하기

개인적으로 사용하는 데 공개 GitHub 저장소는 필요하지 않다. OpenAI 공식 문서에서 안내하는 사용자 범위의 로컬 스킬 경로는 $HOME/.agents/skills다.

스킬 디렉터리를 만들고 instruction 파일을 연다.

mkdir -p "$HOME/.agents/skills/commit-it"
${EDITOR:-nano} "$HOME/.agents/skills/commit-it/SKILL.md"

먼저 범위가 명확한 SKILL.md를 작성한다.

---
name: commit-it
description: Draft or create Git commits from the current task using concise Conventional Commit messages.
---

# Commit It

1. Inspect repository status and every staged, unstaged, and untracked change.
2. Treat the current conversation and verified diff as the task boundary.
3. Stage only clearly in-scope files when the user explicitly asks to commit.
4. Recheck the staged diff immediately before committing.
5. Create one concise Conventional Commit.
6. Never amend, reset, push, or alter unrelated work without explicit permission.

Codex는 스킬 변경을 자동으로 감지한다. 목록에 나타나지 않으면 Codex를 한 번 재시작한다.

스킬 호출하기

현재 작업을 커밋할 준비가 됐을 때 스킬을 명시적으로 호출한다.

$commit-it 지금 작업을 커밋해줘

여기서 표현이 중요하다. “커밋 메시지를 작성해줘”라는 요청은 메시지만 생성해야 한다. 반면 “커밋해줘”는 현재 작업 범위의 파일을 stage하고 커밋할 권한을 주지만, push 권한까지 자동으로 주지는 않는다.

경계가 중요한 이유

대부분의 커밋 실수는 Git 문법이 아니라 범위에서 발생한다. 광범위한 git add -A, 오래된 staged 파일, 관련 없는 generated artifact 하나만으로도 깔끔한 변경이 혼합 커밋이 될 수 있다. 스킬은 긴 작업이 끝난 뒤 기억에 의존하는 대신 이 검사를 워크플로 자체에 포함한다.

마지막 보고도 더 명확해진다. 새 commit hash와 남아 있는 working-tree 변경을 함께 알려주면, 저장소 전체가 깨끗하다고 과장하지 않고도 커밋이 완료됐다는 근거를 제공할 수 있다.

공개 저장소가 유용해지는 시점

한 대의 컴퓨터에서는 수동 설치로 충분하다. 다른 사람도 동일한 스킬을 공유된 출처에서 설치하거나 업데이트해야 할 때 공개 저장소가 유용해진다. OpenAI 공식 문서는 로컬 제작과 실험에는 직접 스킬 디렉터리를, 더 넓은 배포에는 플러그인을 권장한다.

현재 commit-it은 의도적으로 작게 유지한다. 하나의 워크플로, 명시적인 권한, 그리고 깨끗한 Git 경계만 다룬다.