Skip to Content
사용자 가이드기능Pull Request 자동 수정

Pull Request 자동 수정

/autofix-pr는 로컬 Qwen Code 세션에서 Pull Request 하나를 감시하며 발생하는 문제를 수정합니다: 실패한 CI 체크, 신뢰하는 사람의 리뷰 피드백, 머지 충돌. 각 수정은 자체 worktree에서 이루어지고 검증되며, PR 브랜치에 푸시되고 PR에 답변됩니다. 사용자의 git 및 gh 신원을 사용합니다. PR이 머지되거나 닫히면 자동으로 중지됩니다.

/autofix-pr [<pr-number>|<pr-url>] [--once] [--every <minutes>] [--no-reply] [--yes] [instructions...] /autofix-pr status [<pr-number>] /autofix-pr resume [<pr-number>] /autofix-pr stop [<pr-number>]
  • PR 인자 없음: 현재 브랜치가 헤드인 PR.
  • --once: 한 번 확인하고 수정한 후 아무것도 예약하지 않고 감시를 종료합니다(이후 --once는 PR 히스토리에서 처음부터 다시 시작). 이미 이 세션이 감시 중인 PR에서는 실행 중인 감시가 그대로 유지됩니다.
  • --every <minutes>: 확인 주기, 1, 2, 5, 10, 15, 30 또는 60 중 하나. 기본값 2.
  • --no-reply: 수정 사항을 푸시하지만 PR에 아무것도 게시하지 않습니다.
  • --yes: 시작 확인을 건너뜁니다. 대화 상자를 표시할 수 없는 곳에서 필요합니다.
  • 자유 텍스트는 모든 수정에 전달됩니다. 예: /autofix-pr 123 do not change the public API.

시작하기 전에

  • gh에 로그인되어 있고 PR 브랜치에 대한 푸시 권한이 있어야 합니다: 동일 저장소 PR에 대한 쓰기 권한, 또는 자신의 포크, 또는 메인테이너의 편집을 허용하는 포크.
  • PR 저장소의 클론에서 실행하며 해당 클론에 대한 git remote가 하나 있어야 합니다. 데몬 세션(qwen serve, Web Shell)에서는 해당 클론이 세션의 작업 디렉토리 안에 있어야 합니다. 데몬은 fix 에이전트의 명령을 해당 위치에서만 실행하므로, 클론이 그 밖에 있으면 prepare가 PR을 거부합니다. 그곳에서의 감시는 세션에 바인딩된 내구성 있는 예약 작업입니다. 데몬은 유휴 상태가 되어도 해당 세션을 회수하지 않고 상주시키며, 작업이 Scheduled tasks 페이지에 표시되므로 브라우저 탭을 닫아도 감시가 종료되지 않습니다 — 종료하려면 /autofix-pr stop을 사용합니다. 데몬 재시작 후 작업이 다시 복원됩니다. 재시작 시 게이트의 인메모리 승인이 유실되므로, 게이트는 이후 무인 실행을 허용하는 승인 모드 또는 저장된 규칙이 필요하며, 처음으로 차단된 실행에서 추가할 규칙 이름을 알려줍니다. 하나의 데몬 대화는 하나의 예약 작업을 처리하므로, 추가 감시는 별도의 대화에서 설정해야 합니다. 또한 재시작은 세션이 감시에 대해 확인한 내용을 잃어버립니다. /autofix-pr resume <n>으로 다시 확인할 때까지, helper 및 수정 사항은 승인 모드를 따라 셸 명령처럼 동작합니다.
  • 이 skill은 autofix_pr 도구를 통해 helper를 실행합니다. 이 세션에서 시작하거나 재개한 감시에서는, 한 라운드의 helper(푸시 및 답변 포함)가 확인 없이 실행됩니다. 감시를 시작하거나 재개하고, 예약하고, 다른 세션에서 인계받는 것 — /autofix-pr stop <n>이 PR을 지정하는 경우 포함 — 은 매번 확인이 필요하며(Auto Mode에서는 분류기가 결정하지만, 시작은 항상 사용자가 확인), gh pr view 및 예약 작업 생성도 마찬가지입니다. 셸 명령을 거부하는 규칙(예: Bash 또는 Bash(qwen autofix-pr *))은 해당 도구 호출도 거부하며, 해당 요청 규칙은 계속 확인을 요구합니다. AutofixPr(command:push)를 거부 규칙에 추가하면 모든 푸시가 차단됩니다. 셸 도구에 설정한 PreToolUse hook은 이 호출을 감지하지 못합니다. autofix_pr에 설정해야 합니다. 푸시나 sync 시 실행되는 git hook(pre-push, post-checkout, post-merge, reference-transaction)이 있는 클론 — worktree 내의 hook 경로(husky 등) 또는 PR의 파일이 실행하는 pre-commit, lefthook 같은 hook 관리자 — 에서는 수정이 확인 없이 실행되지 않는 한 sync와 push도 확인이 필요합니다. worktree의 하위 모듈 중 git 디렉토리가 클론 내부가 아닌 worktree 안에 있는 경우도 마찬가지이며, 셸 명령에 대한 요청 규칙도 여기서 적용됩니다. 이 skill은 또한 .qwen/tmp/ 아래 자체 파일 읽기, 수정 요약·답변 계획·사용자 지침 쓰기, 예약 작업 나열을 허용합니다. 이 파일들은 클론의 메인 worktree에 저장되며, 연결된 worktree에서 시작된 세션에서는 이 파일들을 읽고 쓸 때 확인이 필요합니다.
  • 시작 질문에는 Start, fixes run without asking 옵션도 있습니다. fix 에이전트의 명령 — PR worktree에서의 빌드, 테스트, 커밋 — 이 이 감시에 대해 확인 없이 실행됩니다. 이를 확인하는 추가 대화 상자가 한 번 더 표시됩니다(이 대화 상자에서 거부하면 시작이 취소됩니다. /autofix-pr <n>을 다시 실행). 에이전트는 YOLO 세션처럼 실행됩니다: 사용자의 git 및 gh 자격 증명을 사용하며, worktree 외부 파일에 접근할 수 있고, 요청 규칙을 우회합니다. 거부 규칙은 여전히 적용됩니다. 이는 감시가 중지되거나, 일반 Start(또는 --yes)로 다시 시작되거나, 세션이 종료 또는 초기화될 때까지 지속됩니다. /autofix-pr resume는 다시 확인을 요청합니다. 일반 Start를 선택하면 기본 승인 모드에서 각 명령이 먼저 확인을 요청하며, 이는 모니터링하는 감시에 적합합니다. 감시 인계 및 /autofix-pr resume도 동일한 선택지를 제공합니다. 해당 대화 상자는 사용자만 응답합니다. 저장된 규칙, Auto Mode의 분류기, --yes도 응답하지 않으며, 신뢰할 수 없는 폴더와 stream-json을 통해 Qwen Code를 구동하는 프로그램에서는 선택이 거부됩니다. autofix_pr 도구를 사용할 수 없는 경우(설정의 도구 허용 목록에서 제외될 수 있음), helper는 셸을 통해 실행되며 각각 확인이 필요합니다.
  • 작성자가 저장소에 푸시할 수 없는 PR은 수정 검증 시 다른 사람의 코드를 실행하게 되며, 사용자의 gh 및 git 자격 증명에 접근할 수 있습니다. 이러한 PR은 감시하지 않습니다. --once만 제공되며, 이를 알리는 확인이 필요하고 --yes로도 건너뛸 수 없습니다.

시작 시, 푸시 위치와 PR에 답변할 것인지, 그리고 수정 사항이 확인 없이 명령을 실행할 수 있는지 한 번 확인합니다.

확인 동작

감시는 예약 작업이며, 게이트는 매 실행마다 모델 외부에서 qwen autofix-pr snapshot <n> --gate를 실행합니다. 프로브는 마지막 실행 이후 변경된 내용만 출력하므로, 변경 사항이 없는 PR은 모델 턴을 소모하지 않습니다. 변경 사항이 있으면 라운드가 실행됩니다.

  1. 머지되거나 닫힌 PR은 감시를 종료합니다. 다른 사람의 푸시는 먼저 반영됩니다.
  2. 실패한 체크, 신뢰할 수 있는 작성자의 새 댓글, 머지 충돌이 하나의 fix 에이전트에 전달되며, PR worktree에서 작업합니다. 실패한 체크의 경우 작업 로그를 읽습니다. PR 외부의 실패(네트워크, 러너)는 수정 대신 한 번 재실행합니다.
  3. 에이전트는 저장소의 자체 체크로 변경 사항을 검증하고, 통과한 경우에만 커밋합니다.
  4. 커밋은 PR 헤드의 fast-forward로 푸시되며, force 푸시는 하지 않습니다. 그 사이에 다른 사람이 푸시했으면 해당 작업을 먼저 머지합니다.
  5. 처리한 각 리뷰 스레드에는 답변이 달립니다 — Fixed in <sha>: …, Not changed: … 또는 Needs a human decision: … — 각 푸시에는 하나의 요약 댓글이 달립니다.

라운드는 사용자에게 아무것도 묻지 않습니다. 사람이 필요한 사항은 PR에 “Needs a human decision”으로 답변되고, 세션에 보고되며 /autofix-pr status로 목록을 확인할 수 있습니다.

상태 및 재개

/autofix-pr status는 어느 세션이 실행 중인지에 관계없이 클론의 모든 감시 목록을 표시합니다: PR과 브랜치, 헤드, 사용된 푸시, 게이트의 마지막 확인 시점과 마지막 라운드 실행 시점, 이 세션이 실행 중인지, 그리고 사람을 기다리는 사항. 감시 파일만 읽으며 GitHub에는 요청하지 않습니다.

감시는 실행하던 세션이 종료되면 끝납니다 — 데몬 세션에서는 작업이 내구성 있고 해당 세션에 바인딩되어 있으므로 데몬이 세션을 상주시키고 감시는 데몬 재시작 후에도 유지됩니다 — 그리고 예약 작업은 기본적으로 7일 후에 만료됩니다(experimental.cronRecurringMaxAgeDays 설정 또는 QWEN_CODE_CRON_MAX_AGE_DAYS). 상태 파일은 남아 있습니다. /autofix-pr resume는 이 세션이 실행하지 않는 모든 감시(또는 지정한 하나)를 시작할 때 사용했던 간격, --no-reply, 지침으로 다시 시작하며, 푸시, 히스토리, 예산이 유지됩니다. 모든 감시에 대해 한 번 확인한 후 각각 한 라운드를 실행하고 다시 예약합니다. 데몬 세션에서는 하나의 대화에서 하나의 예약 작업을 처리하므로, 나머지는 대화별로 하나씩 재개합니다. 다른 세션이 아직 실행 중인 감시가 있으면, 해당 세션의 작업은 다음 실행 시점에서 중지됩니다. PR을 지정하지 않으면 resume은 최근 다른 세션이 확인한 감시를 제외하며, 이를 알립니다. 세션이 실행 중이지 않을 때 PR이 머지되거나 닫힌 감시는 라운드에서 제거됩니다. --once로 시작한 감시 또는 worktree를 유지한 채 stop으로 종료한 감시는 /autofix-pr <n>으로 다시 시작합니다.

어떤 피드백이 반영되는가

댓글은 작성자가 저장소의 owner, member, collaborator이거나, PR 작성자이거나, 봇인 경우 반영됩니다(리뷰 및 리뷰 스레드만). 그 외 사용자의 댓글은 목록에만 표시되며 반영되거나 답변되지 않습니다. 봇은 스레드를 여는 댓글이나 리뷰에서만 반영되며, 답변인 하위 댓글에서는 반영되지 않습니다. GitHub에서 시작할 수 없었던 워크플로(예: 유효하지 않은 워크플로 파일)는 수정할 로그가 없으며 사람이 필요하다고 답변됩니다. 모든 댓글, 리뷰, CI 로그는 데이터로 취급됩니다. 신뢰할 수 있는 작성자가 어떤 피드백을 다룰지 결정하며, 도구가 수행할 수 있는 작업을 결정하지는 않습니다. 비밀 정보를 노출하거나, 테스트나 CI 체크를 약화하거나, force-push하거나, 관련 없는 코드를 변경하라는 요청은 “Needs a human decision”으로 답변됩니다.

절대 하지 않는 것

  • 작업 트리의 현재 브랜치를 건드리지 않습니다. 모든 작업은 .qwen/tmp/autofix-pr-<n>/에서 이루어집니다.
  • Force-push, PR 히스토리 재작성, 기본 브랜치에 푸시하지 않습니다.
  • 자신의 답변(<!-- qwen-autofix-pr:v1 -->로 끝남)이나 신뢰할 수 없는 작성자에게 답변하지 않습니다.
  • 리뷰 스레드를 해결하거나 PR 제목 또는 설명을 편집하지 않습니다.

제한

제한값이후 동작
감시당 푸시 수10감시 중지
동일 헤드의 실패한 체크 재실행1다음 실패는 실제 실패
리뷰 댓글당 시도 수1다시 제공되지 않음
라운드 내 다른 사람의 푸시2감시 중지

중지 및 파일

/autofix-pr stop <n>은 예약 작업을 삭제하고 worktree, 브랜치, 상태 파일을 제거합니다. 게이트 커서와 PR 히스토리는 유지되므로 이후 감시가 같은 댓글에 다시 답변하지 않습니다. 푸시되지 않은 작업이 아직 있는 worktree는 유지되며, 보고서에 이유가 표시됩니다. 감시는 종료된 상태이며, qwen autofix-pr cleanup <n> --force로 작업을 폐기합니다. /autofix-pr stop <n>은 다른 세션이 남긴 감시도 중지합니다. bare /autofix-pr stop은 다른 세션이 아직 실행 중인 감시는 그대로 두고, 해당 PR을 지정하면 종료합니다. 작업이 만료되었거나 터미널 세션이 종료된 감시는 보고서 없이 종료되며, /autofix-pr resume으로 다시 시작합니다(위 참조). 새 세션에서 /autofix-pr <n>을 시작하거나 /clear 또는 /resume 이후에 시작하면 감시를 인계할지 여부도 묻습니다. 푸시와 예산이 유지됩니다.

파일은 클론의 메인 worktree의 .qwen/tmp/ 아래에 있습니다.

파일내용
autofix-pr-<n>/PR worktree
autofix-pr-<n>-state.json감시: 알려진 헤드, 푸시, 처리된 ID, 예약 작업
autofix-pr-<n>-gate.json게이트 프로브의 커서
autofix-pr-<n>-gate.checked감시 게이트가 마지막으로 PR을 확인한 시각
autofix-pr-<n>-snapshot.json라운드가 읽는 최신 라운드의 PR 스냅샷
autofix-pr-<n>-replies.jsonGitHub 기준 어떤 봇 댓글이 다른 댓글에 대한 답변인지
autofix-pr-<n>-history-*.json이전 감시가 게시하고 처리한 내용, stop으로 유지됨
autofix-pr-<n>-instructions.txt모든 라운드의 사용자 지침
autofix-pr-<n>-*.log, *.md, *.jsonCI 로그, 수정 요약 및 답변 계획

설계 문서는 docs/design/2026-10-21-autofix-pr-command.md에 있습니다.

Last updated on