AI 에이전트를 위한 테스크 큐

  • 2025-08-10 (modified: 2025-08-26)

AI 에이전트에게 일을 시키기 위한 테스크 큐

동기

무료로 쓸 수 있는 LLM이 점점 많아지고 있는데 내가 게을러서 활용을 못하는 게 계속 아쉬웠다. 2025년 8월 9일에는 급기야 Qwen Code가 하루 2000회 요청을 토큰 제한 없이 보낼 수 있는 무료 플랜을 공개했다. 하루 종일 1분에 1개 요청을 보내도 560회가 남는 양이다.

이런 기회를 잘 활용하기 위한 시스템이 있으면 좋겠다는 생각을 했다.

  • 언제나 쉽게 일을 시킬 수 있을 것
  • 일의 진행 과정이나 결과를 쉽게 확인할 수 있을 것
  • 내가 일의 우선 순위를 지정할 수 있을 것
  • 내가 시킨 일이 다 떨어지면 나에게 유용한 무언가를 알아서 할 것
  • 일 많이 시키기(토큰 많이 쓰기)가 아니라 원하는 결과 만들기를 목표로 할 것

설계

깃헙 이슈를 이용하면 좋을 것 같다.

  • 언제나 쉽게 일을 시킬 수 있을 것 → 모바일 앱도 있고 gh CLI도 있으니 언제든 이슈를 등록할 수 있다.
  • 일의 진행 과정이나 결과를 쉽게 확인할 수 있을 것 → 에이전트가 이슈에 코멘트를 다는 형식으로 진행 상황을 중간 공유하도록 하면 되겠다.
  • 내가 일의 우선 순위를 지정할 수 있을 것 → 우선순위에 따라 이슈에 적당한 레이블을 붙여주고 이걸 인식해서 다음 작업을 고르도록 하면 되겠다.
  • 내가 시킨 일이 다 떨어지면 나에게 유용한 무언가를 알아서 할 것 → 영원히 끝나지 않고, 시간을 쓰면 쓸수록 좋아질 가능성이 있는 성격의 일들을 몇 개 등록해놓고, 다른 할 일이 없을 때 적당히 번갈아가며(일단은 단순하게 round-robin 방식) 하도록 만들면 되겠다.

다음 절차를 무한히 반복하는 쉘 스크립트를 만들면 될 것 같다.

  1. 우선순위가 가장 높은 깃헙 이슈를 하나 가져온다. 이슈가 없으면 1분 쉬었다가 다시 쿼리.
  2. 이슈 번호에 맞춰 작업 디렉토리를 만들고 작업 디렉토리로 설정
  3. Qwen Code에게 해당 이슈의 본문에 적힌 내용을 전달하고 그걸 처리하라고 지시
  4. Qwen Code가 종료되면 사전에 설정된 종료조건이 만족되었는지 검사하고 조건이 만족되지 않았으면 GOTO 3, 만족되었으면 GOTO 1

종료조건은 이슈 본문 마지막 줄에 아래 형식으로 적는다:

Do something. Blahblah.

check: npm run test

check에 적힌 명령을 실행하고 exit code가 0이면 성공 아니면 실패로 간주한다. 마지막 줄에 check가 없으면 colon을 실행하여 항상 성공한 것으로 간주.

종료 조건에 s4를 사용하면 상태없는 AI-인간 인터랙션이 구현되기 때문에 복잡한 프로젝트를 여러 에이전트 세션에 걸쳐서 수행할 수 있다.

구현

Qwen Code를 시켜서 대충 만들었다. 일단 잘 돌아간다. Qwen Code에게 일 시키는 프롬프트는 일단 이렇게 썼다:

Your job is to complete the issue nnn.

  • Using “gh” CLI, read the issue and their comments to understand the context.
  • The current working directory is your workspace and you may use it freely. Note that the directory is not connected to the repository.
  • There could be files created by your co-workers. Read the files carefully.
  • Before you start, leave a comment in the issue that you’re going to start working on it and describe your plan briefly.
  • If you’ve spent more than 5 minutes on the issue, regularly check if there are any new comments from your co-workers. If there are, read them and update your plan accordingly. Write your updated plan as a comment.
  • If you’ve finished the issue, write the summary of your work as a comment in the issue, and attach “ready” label. NEVER close the issue.
  • If the main artifact of the issue is a text, or can be described in text, write it as a comment.
  • All your comments MUST start with ”🤖“

남은 할 일

  • “영원히 끝나지 않고, 시간을 쓰면 쓸수록 좋아질 가능성이 있는 성격의 일들”을 찾아서 낮은 우선순위로 등록해놓기
  • 우선순위가 높은 요청은 비싼 에이전트에게 시키고 나머지는 Qwen Code에게 시키기? 또는 이슈를 생성할 때 에이전트를 지정할 수 있게? 또는 자동으로 라우팅하게?
  • Qwen Code 샌드박싱
  • 봇은 다른 계정(?)으로 글을 쓰도록. 지금은 내 깃헙 계정으로 쓰는 중. 내 계정으로 쓰니까 코멘트 알림이 안온다.