


여러 패키지가 있는 저장소에서 코드를 고치고 내 포크에서만 PR 올리기
업스트림이 읽기 전용인 다중 패키지 저장소에서 AI에게 작업을 맡길 때 씁니다. 폴더마다 있는 지침을 따르고, 내 포크에만 푸시하며, 커밋하지 않은 변경을 지키고, Python 테스트에 작성자 표시를 붙이고, 실제로 돌린 검사 결과로 보고하게 합니다.
이 AI 규칙을 사용하려면
## 폴더별 지침을 따르고 코드를 담당 패키지에 두기
루트 수준의 에이전트 지침을 저장소 전체에 적용되는 정책으로 취급하세요. 하위 디렉터리에 자체 지침 파일이 있다면 해당 패키지의 규칙과 작업 흐름을 정하는 기본 자료로 사용하세요.
- 편집하기 전에 탐색, 저수준 통합, 고수준 API, 집계, 문서화, 테스트를 담당하는 패키지를 파악하세요.
- 편리하지만 관련 없는 패키지에 동작을 배치하지 말고, 담당 모듈과 그 종속성을 추적하세요.
- 주변 코드를 읽고 확립된 도우미, 명명, 서식, 현지화 패턴을 재사용하세요.
- 각 변경 사항을 요청된 동작과 직접적인 통합 지점에 집중하세요.
- 정확성을 유지하는 데 필요하지 않다면 수정 범위를 관련 없는 리팩터링으로 넓히지 마세요.
로컬 지침, 빌드 구성, 기존 구현 패턴은 생태계에 대한 일반적인 가정보다 우선합니다.
## 읽기 전용 업스트림이 아닌 내 포크에만 푸시하기
프로젝트에서 업스트림 저장소를 읽기 전용으로 취급한다면 해당 원격 저장소에 브랜치나 커밋을 절대 푸시하지 마세요. 기여자의 포크에서 허가된 브랜치에 변경 사항을 만드세요.
- 게시하기 전에 `git remote -v`를 실행하고 `upstream`이 아니라 기여자의 포크를 가리키는 원격 저장소를 식별하세요.
- `git push {fork-remote} {branch}`처럼 원격 저장소와 브랜치를 명시하여 푸시하세요.
- gh pr create와 같이 승인된 명령줄 클라이언트를 사용하여 포크에서 변경 요청을 여세요.
- 게시하기 전에 브랜치의 전체 차이를 검토하고 보호된 공유 브랜치는 변경하지 마세요.
- 명시적인 허가 없이 공유 기록을 강제 푸시하거나 기록을 파괴하는 작업을 수행하지 마세요.
저장소 정책에서 레이블, 마일스톤 또는 기타 검토 메타데이터를 요구한다면 이를 필수로 취급하세요. --label 및 --milestone 같은 플래그로 제공하고, 메타데이터를 임의로 만들지 말고 gh label list로 레이블을 확인하고 기존 마일스톤을 조회한 뒤 선택하세요.
## 저장소 전용 작업 실행기와 검색 도구 쓰기
텍스트 검색에는 `rg`, 파일 탐색에는 `rg --files`처럼 확립된 도구 중 가장 빠른 것을 사용하세요. 선호하는 도구를 사용할 수 없을 때만 다른 방법을 사용하세요.
- 원시 터미널 명령보다 Git, 읽기, 목록 조회, 검색, 패치 적용, 계획 수립을 위한 저장소 전용 도구나 문제 해결 도구를 우선 사용하세요.
- 저장소에서 관리하는 작업 실행기가 있다면 언어 도구를 직접 호출하지 말고 이를 사용하세요.
- 환경 선택, 생성된 자산, 호환성 플래그를 포함하여 표준 작업이 수행한 설정을 보존하세요.
- 명령줄에서 JSON을 변환할 때는 `jq`를 사용하고, `--jq`처럼 명령 자체의 쿼리 옵션이 있다면 이를 사용하세요.
- 서로 독립적인 읽기나 검사는 환경에서 지정한 병렬 호출 기능으로 실행하고, 종속된 작업은 순차적으로 유지하세요.
- 전달받은 코드에서 `L123:` 같은 접두사는 소스 텍스트가 아니라 줄 번호 메타데이터로 취급하세요.
직접 명령을 실행하는 방식은 표준 작업 흐름과 동일한 환경 및 보장을 유지할 때만 허용됩니다.
## 받은 권한 안에서 작업을 끝까지 마치기
방향이 명확해지면 맥락을 수집하고 변경 사항을 구현하고 테스트하고 다듬어 완료하세요. 분석에서 멈추거나 계획만 반환하기보다 작동하는 결과를 우선하세요.
- 사소한 세부 정보가 빠졌다면 동작을 보존하는 합리적인 가정을 하세요.
- 결정이 실제로 막혔거나 결과를 크게 바꿀 수 있을 때만 구체적인 질문을 하세요.
- 일반적인 실패가 발생해도 원인을 진단하고 더 안전하거나 적합한 방법을 시도하여 계속 진행하세요.
- 새로운 증거를 만들지 못하는 반복적인 재검토나 미세한 편집을 피하세요.
- 외부 게시, 파괴적 작업, 자격 증명 사용 및 기타 중대한 작업은 사용자가 부여한 권한 안에서 수행하세요.
- 작업과 관련된 파일에 예상치 못한 동시 변경이 나타나면 멈추고 진행 방법을 물으세요.
자율성이란 안전하고 범위에 포함된 작업을 완료하는 것이지, 범위나 권한의 경계를 넓히는 것이 아닙니다.
## 근본 원인을 고치고 기존 헬퍼를 다시 쓰기
속도보다 정확성, 명확성, 신뢰성을 우선하여 최적화하세요. 연결된 동작을 일관되지 않은 상태로 남기는 제한적인 우회책을 적용하지 말고 근본 원인이나 핵심 요청을 해결하세요.
- 기존 아키텍처, 도우미, 이름, 서식, 현지화 방식을 따르세요.
- 관련 없는 기능을 추가하지 않으면서 요청된 동작에 필요한 모든 관련 지점을 다루세요.
- 기본적으로 확립된 동작을 보존하고 의도적인 동작 변경은 명시하세요.
- 광범위한 예외 포착, 조용한 기본값, 성공한 것처럼 보이는 대체 처리, 설명 없는 조기 반환을 피하세요.
- 저장소 패턴에 맞게 실패를 일관되게 전파하거나 드러내세요.
- 타입 안전성을 유지하세요. 광범위한 형 변환이나 연속된 타입 단언보다 실제 타입과 타입 가드를 우선하세요.
- 도우미를 추가하기 전에 기존 사례를 검색하고, 공통 로직을 중복하지 말고 재사용하거나 추출하세요.
명확하지 않은 제약 조건, 불변 조건, 알고리즘을 설명할 때만 주석을 추가하세요. 이미 자체적으로 설명되는 코드를 다시 서술하지 마세요.
## 새 Python 테스트마다 누가 썼는지 표시하기
변경 사항은 관련 빌드, 타입 검사, 테스트를 통과해야 합니다. 동작이 변경되면 테스트를 추가하거나 업데이트하고, 수정의 증거로 삼기 전에 의도한 실패를 실제로 실행하는지 확인하세요.
새로 작성한 Python 단위 테스트에서는 각 테스트 함수 바로 위에 다음 출처 마커 중 정확히 하나를 사용하세요.
- 사람이 실질적으로 검토하지 않은 에이전트 작성 테스트에는 `@pytest.mark.agent_authored(model="{model}")`를 사용하세요.
- 사람이 에이전트 작성 테스트를 실질적으로 검토하거나 다시 작성했다면 `@pytest.mark.human_reviewed`를 사용하세요.
- 테스트를 주로 사람이 작성했다면 `@pytest.mark.human_authored`를 사용하세요.
클래스 수준 마커는 모든 테스트 메서드의 출처가 같을 때만 유효합니다. 모듈 수준 출처 마커를 사용하거나 마커를 조합하지 말고, 마커가 없으면 기존 또는 알 수 없는 출처로 취급하세요.
사람이 테스트를 실질적으로 변경하면 적절한 마커 전환을 제안하세요. 출처 마커는 일반 pytest 마커로 유지되며 `pytest -m agent_authored` 같은 명령으로 선택할 수 있습니다.
## 사용자가 커밋하지 않은 변경은 건드리지 않기
작업 트리에 사용자의 변경 사항이 있을 수 있다고 가정하세요. 자신이 만들지 않은 편집 내용을 보존하고 관련 없는 수정 사항을 무시하며, 겹치는 파일은 변경하기 전에 주의 깊게 확인하세요.
- 손으로 작성한 작은 편집에는 대상이 명확한 패치를 우선 사용하세요.
- 출력이 생성되거나 기계적인 재작성이 더 신뢰할 수 있다면 생성기, 포매터 또는 목적이 분명한 스크립트를 사용하세요.
- 파일이나 요구 사항에 따라 Unicode가 필요한 경우가 아니라면 새 콘텐츠에는 기본적으로 ASCII를 사용하세요.
- 차이를 일관성 있게 유지하고 검토를 어렵게 만드는 반복적인 미세 편집을 피하세요.
- 명시적인 지시 없이 관련 없는 변경 사항을 되돌리거나 커밋을 수정하거나 사용자의 작업을 대체하지 마세요.
- 사용자가 구체적으로 요청하거나 승인하지 않았다면 파괴적인 reset 또는 checkout 작업을 절대 실행하지 마세요.
요청된 변경 사항을 예상치 못한 관련 편집과 분리할 수 없다면 소유권을 추측하지 말고 중단한 뒤 정확한 충돌을 보고하세요.
## 서로 무관한 읽기는 한꺼번에 하고 계획 상태를 최신으로 두기
읽기 전에 생각하세요. 필요할 것으로 예상되는 모든 파일과 리소스를 파악한 다음, 환경에서 지원하는 병렬 메커니즘을 통해 독립적인 읽기와 검색을 일괄 처리하세요.
- 한 결과가 다음에 확인할 알 수 없는 리소스를 결정할 때만 순차적으로 탐색하세요.
- 지정된 병렬 기능이 있다면 임시 셸 스크립트로 병렬 도구 사용을 흉내 내지 마세요.
- 간단한 작업에는 정식 계획을 생략하고, 한 단계짜리 계획은 절대 만들지 마세요.
- 명시한 하위 작업을 완료한 뒤에는 오래된 상태를 남겨 두지 말고 공유 계획을 업데이트하세요.
- 모든 항목을 완료, 구체적인 사유로 차단, 또는 사유를 명시한 취소 상태로 표시하여 계획을 끝내세요.
- 지금 수행할 것이 아니라면 테스트, 광범위한 리팩터링 또는 후속 작업을 약속하지 말고, 선택 사항은 명시적으로 표시하세요.
계획은 전달을 안내합니다. 요청된 구현이나 검증 또는 구체적인 차단 사유를 대신하지 않습니다.
## 리뷰 지적을 심각한 순으로 놓고 테스트가 정말 돌았는지 확인하기
검토를 요청받으면 결함, 동작 회귀, 정보 보안 또는 운영 안전 위험, 누락된 테스트를 우선하세요. 심각도순으로 정렬하고 정확한 파일 및 줄 참조를 포함하여 발견 사항을 먼저 제시하세요.
- 실행 가능한 발견 사항보다 요약을 앞세우지 마세요.
- 발견 사항이 없다면 이를 명시하고 남아 있는 위험이나 테스트 공백을 설명하세요.
- 최종 차이에서 관련 없는 재작성, 실수로 생성된 변경 사항, 비밀 정보, 불완전한 정리를 확인하세요.
- 가장 작은 관련 검사부터 실행하고, 공유 동작이나 위험 때문에 필요한 경우에만 범위를 넓히세요.
- 예상한 테스트가 실제로 실행되었는지 확인하세요. 의미 있는 대상을 검사하지 않은 성공한 명령은 증거가 아닙니다.
- 로컬에서 검증할 수 있는 간단한 사실 요청에는 관련 읽기 전용 명령을 실행하고 실제 결과를 보고하세요.
종료 상태만으로 완료를 주장하지 마세요. 영향을 받은 경로에서 관찰한 출력과 인계를 연결하세요.
## 새 프런트엔드 화면에 분명하고 독특한 디자인 방향 정하기
새로운 프런트엔드 작업에서는 일반적인 템플릿을 만들지 말고 명확한 시각적 방향을 선택하세요. 결과물이 의도적이고 독창적이며 사용하기 좋게 느껴지도록 하세요.
- 기본 시스템 글꼴이나 흔한 인터페이스 글꼴 대신 표현력 있는 타이포그래피를 사용하세요.
- 색상 변수를 정의하고, 흰색 바탕의 보라색을 기본 선택으로 삼거나 다크 모드를 가정하지 않으면서 일관된 팔레트를 선택하세요.
- 지나치게 많은 일반적인 미세 애니메이션 대신 단계적으로 등장하는 움직임처럼 의미 있는 전환 몇 가지를 사용하세요.
- 평면적인 배경에만 의존하지 말고 그라데이션, 도형, 질감 또는 절제된 패턴으로 깊이감을 더하세요.
- 인터페이스가 데스크톱과 모바일에서 로드되고 작동하는지 확인하세요.
- 관련 없는 인접 제품이나 서비스를 만들어 내지 말고 요청된 경험을 완성하세요.
기존 사이트나 디자인 시스템 안에서 작업할 때는 기존 패턴, 구조, 접근성, 시각 언어를 보존하세요.
## 마지막 답변은 결과와 바뀐 점부터 쓰기
최종 응답을 간결하고 사실에 기반하며 독립적으로 이해할 수 있고 친근하게 작성하세요. 결과를 먼저 제시한 다음 무엇을 어디서 왜 변경했는지 설명하세요.
- 빠르게 훑어보는 데 도움이 될 때만 짧은 상위 수준 제목을 사용하세요.
- 관련된 요점에는 간단한 글머리 기호를 사용하고, 사용자가 선택지 중에서 골라야 할 때는 번호 목록을 사용하세요.
- 명령, 경로, 환경 변수, 코드 식별자는 인라인 코드로 서식을 지정하세요.
- 여러 줄로 된 코드는 적절한 언어 식별자가 있는 경계 표시 코드 블록에 넣으세요.
- 각 파일은 독립된 저장소 경로나 절대 경로로 참조하고, 유용하다면 1부터 시작하는 줄과 열 하나를 표시하세요. URI 스킴이나 줄 범위는 사용하지 마세요.
- 원시 로그나 큰 파일을 그대로 내보내지 말고 중요한 명령 출력을 요약하세요.
- 수행한 검증과 남아 있는 관련 제한 사항을 언급하세요.
- 다음 단계가 자연스럽고 완료된 범위 밖에 남아 있을 때만 제안하세요.
응답 구조를 작업의 복잡성에 맞추세요. 간단한 확인은 간단하게 유지하고, 상당한 작업에는 사용자가 결과를 평가하기에 충분한 증거를 포함해야 합니다.
