Copilot CLI의 `/fleet`는 하나의 작업을 여러 독립적인 하위 작업으로 나누고, 여러 에이전트를 병렬 실행하는 기능이다. 오케스트레이터가 작업의 의존성을 분석해 실행 순서를 정하고, 결과를 검증·통합하므로 여러 파일이나 모듈을 동시에 처리할 수 있다. 다만 에이전트들이 동일한 파일을 수정하면 잠금이나 자동 병합 없이 마지막 변경이 덮어쓰므로, 작업 범위와 파일 경계를 명확히 지정해야 한다.
## `/fleet`의 작동 방식
- 사용자가 `/fleet <작업 목표>` 형식으로 목표를 전달한다.
- 오케스트레이터가 목표를 독립적인 작업 단위로 분해한다.
- 작업 간 의존성을 분석해 병렬 실행 가능한 항목과 순차 실행해야 하는 항목을 구분한다.
- 독립적인 작업은 백그라운드 하위 에이전트에 동시에 배정한다.
- 작업 완료를 확인한 뒤 다음 의존 작업을 실행한다.
- 각 결과를 검증하고 최종 산출물로 통합한다.
- 하위 에이전트는 각자의 컨텍스트 창을 사용하지만 동일한 파일 시스템을 공유하며, 서로 직접 대화하지 않고 오케스트레이터를 통해 조정된다.
## 시작 방법
- 대화형 CLI에서는 다음과 같이 실행한다.
```text
/fleet Refactor the auth module, update tests, and fix the related docs in the folder docs/auth/
```
- 터미널에서 비대화형으로 실행할 수도 있다.
```bash
copilot -p "/fleet <YOUR TASK>" --no-ask-user
```
- `--no-ask-user`는 사용자가 추가 질문에 응답할 수 없는 비대화형 환경에서 필요하다.
## 병렬화에 적합한 프롬프트 작성
- 작업마다 구체적인 산출물을 지정해야 한다.
- 파일
- 테스트 스위트
- 문서 페이지
- 특정 모듈
- “문서를 작성하라”처럼 모호한 요청은 독립 작업을 식별하기 어려워 순차 실행될 가능성이 높다.
- 예를 들어 인증, 엔드포인트, 오류 문서를 각각 별도 파일로 지정하면 세 작업은 병렬 처리할 수 있다.
- 여러 문서를 연결하는 `docs/index.md`처럼 다른 결과물에 의존하는 작업은 후속 단계로 명시해야 한다.
## 파일 범위와 제약 조건 지정
프롬프트에는 각 에이전트가 담당할 범위를 명확히 적어야 한다.
- 담당 디렉터리나 파일을 지정한다.
- 수정해서는 안 되는 영역을 명시한다.
- 테스트 변경 금지
- 의존성 업그레이드 금지
- 지정 디렉터리 외 수정 금지
- 완료 조건을 제시한다.
- 린트 통과
- 타입 검사 통과
- 특정 테스트 통과
- API, UI, 설정처럼 서로 다른 영역을 별도 트랙으로 나누면 병렬 실행 효과가 커진다.
## 작업 의존성 선언
- 한 작업이 다른 작업의 결과를 필요로 하면 프롬프트에 `depends on` 관계를 명시한다.
- 예를 들어 다음과 같이 데이터베이스 마이그레이션, ORM 모델, API 핸들러, 통합 테스트의 순서를 지정할 수 있다.
- ORM 모델이 완성된 뒤 API 핸들러와 통합 테스트를 동시에 실행하도록 구성할 수 있다.
- 의존성을 명시하지 않으면 에이전트가 충돌하거나 불완전한 결과를 바탕으로 작업할 수 있다.
## 사용자 지정 에이전트 활용
- `.github/agents/`에 전문 에이전트 설정 파일을 만들 수 있다.
- 에이전트마다 다음을 지정할 수 있다.
- 모델
- 사용 가능한 도구
- 역할과 작업 지침
- 문서 작성에는 `technical-writer` 같은 전문 에이전트를 사용하고, 코드 변경에는 기본 에이전트를 사용하는 식으로 역할을 나눌 수 있다.
- 모델을 별도로 지정하지 않으면 현재 기본 모델이 사용된다.
## 병렬 실행 여부 확인
- 오케스트레이터가 작업을 여러 트랙으로 분해했는지 계획을 먼저 확인한다.
- `/tasks` 명령으로 백그라운드 작업 목록과 진행 상태를 볼 수 있다.
- 여러 트랙에서 동시에 진행 상황이 보고되는지 확인한다.
- 병렬화되지 않는다면 다음처럼 먼저 분해하도록 요청할 수 있다.
```text
Decompose this into independent tracks first, then execute tracks in parallel. Report each track separately with status and blockers.
```
## 주요 주의점
- 하위 에이전트는 파일 잠금 기능 없이 동일한 파일 시스템을 공유한다.
- 두 에이전트가 같은 파일을 수정하면 오류나 자동 병합 없이 마지막 완료 결과가 앞선 변경을 덮어쓸 수 있다.
- 따라서 각 에이전트에 서로 다른 파일을 배정해야 한다.
- 하나의 파일에 여러 에이전트가 기여해야 한다면:
- 각자 임시 파일에 작성한 뒤 오케스트레이터가 병합하게 하거나
- 에이전트 실행 순서를 명시해야 한다.
- 하위 에이전트는 오케스트레이터와의 이전 대화 기록을 볼 수 없으므로, 전달되는 프롬프트만으로 작업할 수 있도록 지침과 제약 조건을 self-contained하게 작성해야 한다.
실제로 `/fleet`를 사용할 때는 먼저 작업을 파일·모듈 단위로 분리하고, 의존성과 검증 조건을 프롬프트에 명시하는 것이 좋다. 특히 공유 파일을 여러 에이전트가 수정하지 않도록 범위를 엄격히 나누면 병렬 처리의 속도 이점과 결과 안정성을 함께 얻을 수 있다.