GitLab Duo CLI 사용
GitLab v19.3Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
GitLab Duo CLI는 두 가지 모드로 사용할 수 있습니다: 인터랙티브 모드: GitLab UI 또는 편집기 확장 프로그램의 GitLab Duo Chat과 유사한 채팅 경험을 제공합니다. 헤드리스 모드: 러너, 스크립트 및 기타 자동화된 워크플로에서 비대화형으로 사용할 수 있습니다.
사전 조건:
- 기본 GitLab Duo 네임스페이스가 설정되어 있거나, GitLab Duo 액세스 권한이 있는 프로젝트가 열려 있어야 합니다.
GitLab Duo CLI는 두 가지 모드로 사용할 수 있습니다:
-
인터랙티브 모드: GitLab UI 또는 편집기 확장 프로그램의 GitLab Duo Chat과 유사한 채팅 경험을 제공합니다. 빌드 및 플랜 모드를 지원합니다.
-
헤드리스 모드: 러너, 스크립트 및 기타 자동화된 워크플로에서 비대화형으로 사용할 수 있습니다.
인터랙티브 모드#
인터랙티브 모드로 GitLab Duo CLI를 사용하려면:
-
설정에 맞게 인터랙티브 모드를 시작하는 명령어를 입력합니다:
glab duo cliduo-
터미널 창에
>프롬프트가 나타납니다. 프롬프트 뒤에 질문이나 요청을 입력하고 Enter 키를 누릅니다.예를 들어:
What is this repository about? Which issues need my attention? Help me implement issue 15. The pipelines in MR 23 are failing. Please help me fix them.
GitLab Duo CLI가 작업 중일 때 응답을 취소하려면 Escape 키를 누릅니다. GitLab Duo CLI가 현재 작업을 중지하고 프롬프트로 돌아갑니다.
↑ 키로 프롬프트 기록을 보거나, Control+R로 기록을 검색합니다.
빌드 모드와 플랜 모드 전환#
인터랙티브 모드에서는 작업하면서 GitLab Duo CLI를 두 가지 모드 사이에서 전환할 수 있습니다:
모드 권한 동작 방식 빌드 모드(기본값) 읽기-쓰기 GitLab Duo가 작업을 실행하고 프로젝트를 변경할 수 있습니다. 플랜 모드 읽기 전용 GitLab Duo가 변경 없이 프로젝트를 분석하고 계획을 만들 수 있습니다. 예를 들어, 먼저 플랜 모드에서 GitLab Duo와 문제를 논의하며 시작합니다. 준비가 되면 빌드 모드로 전환하고 GitLab Duo에 계획을 구현하도록 지시합니다.
GitLab Duo CLI는
>프롬프트 아래에 현재 모드를 표시합니다. 모드를 전환하려면 Tab 키를 누릅니다.슬래시 명령어#
히스토리
인터랙티브 모드에서는 슬래시 명령어를 사용하여 GitLab Duo CLI를 구성하고 작업을 수행합니다. 프롬프트에 슬래시 명령어를 입력하고 Enter 키를 누릅니다.
다음 슬래시 명령어를 사용할 수 있습니다:
명령어 설명 /copy GitLab Duo의 마지막 응답을 클립보드에 복사합니다. /doctor GitLab Duo CLI 환경의 진단 정보를 표시합니다. /exit GitLab Duo CLI를 종료합니다. /feedback 버그 리포트 또는 기능 요청을 제출합니다. /help 사용 가능한 슬래시 명령어 목록을 표시합니다. /mcp 구성된 MCP 서버와 그 상태를 봅니다. /model 현재 세션의 AI 모델을 전환합니다. /new 새 채팅 세션을 시작합니다. /sessions 세션을 탐색, 검색하고 전환합니다. /settings 설정 패널을 엽니다. /skills 현재 프로젝트에서 사용 가능한 에이전트 스킬을 나열합니다. 직접 슬래시 명령어를 만들 수도 있습니다. 자세한 내용은 사용자 정의 슬래시 명령어를 참조하세요.
설정#
히스토리
- GitLab 19.0 릴리스 중 GitLab Duo CLI 8.90.0에서 설정 패널이 도입됨.
설정을 변경하려면:
-
인터랙티브 모드에서
/settings를 입력하고 Enter 키를 누릅니다. -
화살표 키를 사용하여 설정 목록을 탐색합니다.
-
선택한 설정을 변경하려면 Enter 키 또는 Space 키를 누릅니다.
-
패널을 닫으려면 Escape 키를 누릅니다.
변경 사항은 세션 간에 유지됩니다.
다음 설정을 사용할 수 있습니다:
설정 설명 Telemetry GitLab Duo를 개선하기 위해 익명 사용 데이터를 전송합니다. Enable global skills (실험) ~/.agents/skills/ 및 ~/.gitlab/duo/skills/에서 사용자 수준 에이전트 스킬을 검색합니다. 변경 사항을 적용하려면 재시작해야 합니다. Notifications 시스템 알림을 제어합니다(auto 또는 disabled). 시스템 알림#
히스토리
- GitLab 19.1 릴리스 중 GitLab Duo CLI 8.105.0에서 시스템 알림이 도입됨.
GitLab Duo CLI는 터미널 창에 포커스가 없을 때 세션에 사용자의 주의가 필요하면 (예: 작업을 완료했거나 도구 승인이 필요할 때) 시스템 알림을 보낼 수 있습니다.
알림은 설정 패널의 Notifications 설정으로 제어합니다:
-
auto(기본값): 터미널에 포커스가 없을 때 시스템 알림을 보냅니다. -
disabled: 시스템 알림을 보내지 않습니다.
도구 승인#
히스토리
GitLab Duo가 도구를 사용해야 할 때는 시작 전에 승인을 요청합니다. 예를 들어, 파일을 읽거나 명령을 실행해야 할 때입니다.
선택할 수 있는 옵션은 다음과 같습니다:
-
Approve: GitLab Duo가 도구를 한 번 사용할 수 있습니다.
-
Approve for session: GitLab Duo가 남은 세션 동안 해당 인수로 도구를 사용할 수 있습니다. 인수가 다르면 추가 승인이 필요합니다.
-
Deny: GitLab Duo가 도구를 사용할 수 없습니다.
NoteApprove for session 옵션을 사용하려면 관리자가 그룹 또는 인스턴스에 대해 이 옵션을 켜야 합니다. 자세한 내용은 도구 승인을 참조하세요.
헤드리스 모드#
Warning헤드리스 모드는 주의해서, 통제된 샌드박스 환경에서 사용하세요.
비대화형 모드로 워크플로를 실행하려면 설정에 맞는 명령어를 사용합니다:
glab duo cli run을 사용합니다:glab duo cli run --goal "Your goal or prompt here"예를 들어, ESLint 명령을 실행하고 오류를 GitLab Duo CLI에 파이프로 전달하여 해결할 수 있습니다:
glab duo cli run --goal "Fix these errors: $eslint_output"duo run을 사용합니다:duo run --goal "Your goal or prompt here"예를 들어, ESLint 명령을 실행하고 오류를 GitLab Duo CLI에 파이프로 전달하여 해결할 수 있습니다:
duo run --goal "Fix these errors: $eslint_output"헤드리스 모드를 사용하면 GitLab Duo CLI는:
-
수동 도구 승인을 건너뛰고 모든 도구를 자동으로 승인합니다.
-
이전 대화의 컨텍스트를 유지하지 않습니다.
run명령을 실행할 때마다 새 워크플로가 시작됩니다.
모델 선택#
히스토리
인터랙티브 모드 또는 헤드리스 모드에 사용할 모델을 선택할 수 있습니다.
인터랙티브 모드의 경우#
선택한 모델은 세션 간에 유지되며, 컨텍스트를 잃지 않고 대화 도중에 모델을 전환할 수 있습니다.
사전 조건:
- GitLab Duo CLI 8.76.0 이상.
인터랙티브 모드에 사용할 모델을 선택하려면:
-
인터랙티브 모드에서
/model을 입력하고 Enter 키를 누릅니다. -
화살표 키를 사용하여 사용 가능한 모델 목록을 스크롤하거나, 모델 이름을 입력하여 목록을 필터링합니다.
-
모델을 선택하고 Enter 키를 눌러 해당 모델로 전환합니다.
헤드리스 모드의 경우#
선택한 모델은 세션 간에 유지되지 않습니다.
사전 조건:
- GitLab Duo CLI 8.68.0 이상.
헤드리스 모드에 사용할 모델을 선택하려면:
-
모델의
gitlab_identifier를 찾습니다. -
GitLab Duo CLI를 실행할 때
--model옵션 또는GITLAB_DUO_MODEL환경 변수를gitlab_identifier값으로 설정합니다.--model옵션을 사용합니다:glab duo cli --model <gitlab_identifier_for_the_model>GITLAB_DUO_MODEL환경 변수를 사용합니다:GITLAB_DUO_MODEL=<gitlab_identifier_for_the_model> glab duo cli예를 들어,
GPT-5-Codex - OpenAI를 사용하려면:glab duo cli --model gpt_5_codexGITLAB_DUO_MODEL=gpt_5_codex glab duo cli--model옵션을 사용합니다:duo --model <gitlab_identifier_for_the_model>GITLAB_DUO_MODEL환경 변수를 사용합니다:GITLAB_DUO_MODEL=<gitlab_identifier_for_the_model> duo예를 들어,
GPT-5-Codex - OpenAI를 사용하려면:duo --model gpt_5_codexGITLAB_DUO_MODEL=gpt_5_codex duo세션 전환#
GitLab Duo Chat 세션은 대화 기록과 워크플로 데이터를 저장하며, GitLab Duo CLI, GitLab UI, 편집기 확장 프로그램 간에 공유됩니다.
예를 들어, 브라우저에서 대화를 시작하고 터미널에서 이어갈 수 있습니다.
세션을 탐색하고 전환하려면:
-
인터랙티브 모드에서
/sessions를 입력하고 Enter 키를 누릅니다. -
화살표 키를 사용하여 사용 가능한 세션 목록을 스크롤하거나, 텍스트를 입력하여 목록을 필터링합니다.
-
세션을 선택하고 Enter 키를 누릅니다.
헤드리스 모드에서 세션으로 전환하려면
--existing-session-id옵션을 사용합니다.Model Context Protocol(MCP) 연결#
GitLab Duo CLI를 로컬 또는 원격 MCP 서버에 연결하려면 GitLab IDE 확장 프로그램과 동일한 MCP 구성을 사용합니다. 방법은 MCP 서버 구성을 참조하세요.
관련 주제#
트러블슈팅#
GitLab Duo CLI로 작업할 때 다음과 같은 문제가 발생할 수 있습니다.
인증서 오류#
다음과 같은 인증서 오류가 발생할 수 있습니다:
Error: unable to verify the first certificate Error: self-signed certificate in certificate chain이러한 오류는 조직에서 HTTPS를 가로채는 프록시 등에 사용자 정의 인증 기관(CA)을 사용하는 경우에 발생합니다.
인증서 오류를 해결하려면 다음 방법 중 하나를 사용합니다:
-
시스템 인증서 저장소를 사용합니다(권장):
CA 인증서가 운영 체제의 인증서 저장소에 설치되어 있다면, 이를 사용하도록 Node.js를 구성합니다. Node.js 22.15.0, 23.9.0 또는 24.0.0 이상이 필요합니다.
- GitLab Duo CLI를 컨테이너에서 실행하는 경우에는 호스트 시스템 저장소가 아니라 컨테이너의 시스템 저장소에 CA 인증서를 설치합니다.
export NODE_OPTIONS="--use-system-ca" -
CA 인증서 파일을 지정합니다:
이전 Node.js 버전을 사용하거나 CA 인증서가 시스템 저장소에 없는 경우에는 Node.js가 인증서 파일을 직접 가리키도록 합니다. 파일은 PEM 형식이어야 합니다.
- GitLab Duo CLI를 컨테이너에서 실행하는 경우에는 컨테이너 내부의 위치로 경로를 설정합니다. 볼륨 마운트를 사용하여 인증서 파일을 제공합니다.
export NODE_EXTRA_CA_CERTS=/path/to/custom-ca.pem
인증서 오류 무시#
인증서 오류가 계속 발생하면 인증서 검증을 비활성화할 수 있습니다.
Warning인증서 검증을 비활성화하는 것은 보안 위험입니다. 프로덕션 환경에서는 검증을 비활성화하지 않아야 합니다.
인증서 오류는 잠재적인 보안 침해를 알려주므로, 검증을 비활성화해도 안전하다고 확신하는 경우에만 인증서 검증을 비활성화해야 합니다.
사전 조건:
- 브라우저에서 인증서 체인을 확인했거나, 관리자가 이 오류를 무시해도 안전하다고 확인했어야 합니다.
인증서 검증을 비활성화하려면:
export NODE_TLS_REJECT_UNAUTHORIZED=0 -
-