파이프라인 템플릿 만들기
파이프라인 템플릿은 워크스페이스 설정에서 작성합니다. 워크스페이스 사이드바의 파이프라인 항목은 _실행 큐_이며 템플릿 목록이 아닙니다. 여기에는 “템플릿 만들기” 동작이 없습니다.
각 단계 종류, 본문 키, 구성 필드가 무엇을 뜻하는지는 파이프라인 단계 레퍼런스를 참고하십시오.
템플릿 만들기
섹션 제목: “템플릿 만들기”- 설정 → 워크스페이스 → 파이프라인 템플릿
(
/workspaces/<workspace-id>/settings/pipelines)으로 이동합니다. - 새 템플릿을 누릅니다.
ID 대화상자는 없습니다. 편집기는 새 파이프라인이라는 이름의 기본 제공
스켈레톤으로 즉시 열리고, ID는 자동으로 할당됩니다(pipeline_1, 그다음
pipeline_2, …). 헤더의 제목을 클릭하면 이름을 바꿀 수 있습니다.
캔버스는 비어 있지 않습니다. 트리거 진입 노드, Step이라는 레이블이 붙은 프롬프트 에이전트 노드 하나, 그리고 실행을 끝내는 터미널 센티널이 있습니다. 센티널은 그려지지 않습니다. 편집기는 이 숨겨진 터미널을 도달 가능한 모든 싱크에 다시 연결하므로, Step 뒤에 붙인 작업도 실행됩니다.
노드 추가
섹션 제목: “노드 추가”노드 라이브러리 사이드바는 편집기 왼쪽에 항상 표시됩니다. 노드 검색 상자로 걸러 내고 항목을 캔버스로 끌어다 놓습니다. 노드는 놓은 자리에 들어가며 들어오는 연결은 없습니다.
| 팔레트 노드 | 단계 종류 | 하는 일 |
|---|---|---|
| Bash script | listen | {{state}} 치환과 함께 셸 스크립트를 실행합니다. 에이전트는 디스패치되지 않습니다 |
| Open conversation | listen | 실행의 유일한 표시 스페이스와 그 체크아웃을 엽니다. 에이전트 노드가 이 방에 참여합니다 |
| Clone PR branch | listen | gh pr view로 PR 헤드 브랜치를 찾아 실행 디렉터리로 클론합니다 |
| Post PR comment | listen | 취합한 결과를 GitHub 리뷰 댓글로 PR에 게시합니다 |
| Reviewer (prompt) | listen | 전문 리뷰어 에이전트를 디스패치하고, 에이전트가 결과를 제출할 때까지 중단합니다 |
| Consolidate (join) | join | 여러 업스트림 분기를 기다린 뒤 에이전트에게 그 출력을 취합하도록 요청합니다 |
| Custom prompt | listen | promptAgent 본문을 거치는 범용 프롬프트 기반 노드 |
| Post to space | listen | 메시징 스페이스에 메시지를 보냅니다 |
| Condition / switch (router) | router | 상태 값에 따라 흐름을 분기합니다 |
| If file exists (router) | router | 클론 아래에 경로가 있으면 "true", 없으면 "false"로 라우팅합니다 |
| Any file exists (OR router) | router | 나열된 경로 중 하나라도 있으면 "true"로 라우팅합니다 |
| All conditions (AND router) | router | 나열된 경로가 모두 있을 때만 "true"로 라우팅합니다 |
| Team dispatch | listen | 팀 전체를 디스패치하고 끝날 때까지 중단합니다 |
| Approval gate | listen | 승인 결정을 기다리며 일시 중지합니다 |
| For each (map) | forEach | 항목마다 프롬프트를 렌더링한 뒤, 그 프롬프트를 이어 붙여 에이전트를 한 번 디스패치합니다 |
| Call sub-pipeline | listen | 다른 템플릿을 중첩 단계로 실행합니다 |
| Clean up worktrees | listen | 오래된 격리 워크트리를 제거합니다. 결정적이며 에이전트는 디스패치되지 않습니다 |
라이브러리는 이들을 흐름 및 로직, PR 리뷰, 에이전트, 메시징, 코드 아래에 묶습니다. Demo 그룹은 없습니다.
노드 연결하기
섹션 제목: “노드 연결하기”각 작업 노드의 오른쪽 가장자리에는 원형 출력 포트가 있습니다. 그 포트에서
다른 노드로 끌어 연결합니다. 시작 트리거도 같습니다. 각자 자기 포트를 가지므로
일정에서 나간 연결이 수동 실행에서도 나가지 않습니다. 노드 바로
뒤에서 단계 추가(+)를 눌러 그 뒤에 종류를 삽입합니다. 기존 엣지의 중간
지점에 커서를 올리고 ×를 누르면 연결이 끊어집니다.
연결은 그것을 받는 노드에서도 편집합니다.
- 다운스트림 노드를 선택합니다. 오른쪽에 구성 패널이 열립니다.
- Triggers from까지 스크롤해, 이 노드가 리슨해야 할 업스트림 노드마다 칩을 탭합니다. 선택된 칩을 탭하면 연결이 제거됩니다.
- 업스트림 노드가 라우터라면 칩 아래에 라우트 키 블록이 나타나며, 라우터
엣지마다 <node>의 라우트 키 필드가 하나씩 있습니다. 그 엣지가
발화할 키를 입력합니다. 파일 존재 라우터라면
true나false, 스위치라면 케이스 이름입니다.
각 트리거 노드는 진입 지점입니다. 노드는 여러 업스트림을 리슨하고(팬인) 여러 다운스트림을 먹일 수 있으며(팬아웃), 그래프는 비순환을 유지해야 합니다. 편집기에는 순환 연결을 막는 장치가 없으니 직접 확인하십시오.
터미널 센티널은 캔버스에서 걸러지므로 선택할 수 없습니다. 편집기는 그래프가 바뀔 때마다 그것을 도달 가능한 모든 싱크에 다시 연결하므로, 기본 제공 Step 뒤에 붙인 작업도 실행됩니다. 빈 그래프(작업 후속이 없는 트리거)는 트리거 자체를 나열하므로 실행이 즉시 완료됩니다.
노드 구성
섹션 제목: “노드 구성”노드를 선택하면 구성 패널이 열립니다. 어떤 필드가 나타나는지는 노드의 본문에 따라 다릅니다.
모든 노드에는 레이블, 입력 키(실행 시 읽는 쉼표로 구분된 상태 키)가 있고, 고급 아래에 리듀서, 시간 제한 (ms), 재시도 횟수, 이 단계가 실패해도 계속, 출력 스키마가 있습니다. listen과 join 노드는 종류를 둘 사이에서 전환할 수도 있습니다.
대화 열기
섹션 제목: “대화 열기”클론할 저장소 피커(어느 워크스페이스 저장소를 체크아웃할지, 비어 있으면 없음), 스페이스 이름, 여기서 대화 열기 체크박스를 추가합니다. 이 체크박스가 켜져 있으면 대화 이름 필드가 방이 열릴 때의 스트림 이름을 정합니다. 에이전트 노드는 이 방에 참여하며 자기 방을 따로 열지 않습니다.
프롬프트 에이전트
섹션 제목: “프롬프트 에이전트”에이전트(디스패치할 에이전트), 프롬프트 템플릿({{key}}로 입력이나
업스트림 출력을 참조합니다), 출력 키를 추가합니다.
**시간 제한 (ms)**은 초가 아니라 밀리초 단위입니다. 900000은 15분입니다.
900을 입력하면 단계에 0.9초가 주어집니다.
프롬프트 에이전트 노드가 실행되는 대화 모드는 에이전트 노드의 편집기 필드에
없습니다. 방을 만든 Open conversation 노드의 extras['mode'](chat,
plan, review)로 전달됩니다(기본값 review). 에이전트 단계에서 설정해도
무시됩니다. 키는 정확히 일치해야 하며, 다른 표기는 조용히 무시됩니다.
Bash 스크립트
섹션 제목: “Bash 스크립트”Bash 스크립트를 추가합니다. 작업 디렉터리나 환경 필드는 없습니다. 둘 다 구성할 수 없기 때문입니다.
- 한 실행의 모든 bash 단계는 작업 디렉터리
<cc_root>/pipelines/<runId>/를 공유합니다. GITHUB_TOKEN은 자격 증명 저장소에서 주입되므로gh와git clone https://x-access-token:$GITHUB_TOKEN@…가 별도 설정 없이 동작합니다.- 스크립트는 문자 그대로
bash실행 파일로 스폰되므로 서버 호스트의PATH에bash가 있어야 합니다. 이는 Windows에서 고려할 사항입니다.
라우터
섹션 제목: “라우터”라우터는 조건을 평가해 라우트 키를 반환합니다. 엔진은 라우트 키가 일치하는 다운스트림 엣지만 발화하고 다른 분기는 건너뜀으로 표시합니다.
라우터를 선택하면 출력 키 필드가 조건 편집기로 바뀝니다. 네 가지 모드 중 하나를 고릅니다.
- 파일 존재 — 하나라도 — 나열된 경로 중 하나라도 있으면
"true"로 라우팅합니다. - 파일 존재 — 모두 — 나열된 경로가 모두 있을 때만
"true"로 라우팅합니다. - 비교 — 상태 값을 리터럴과 비교합니다.
- 스위치 — 상태 키의 값으로 라우팅하며 기본 케이스가 있습니다.
그런 다음 나가는 엣지에 일치하는 라우트 키를 설정합니다 (노드 연결하기 참고).
불리언 and / or / not 그룹은 본문에서 지원하지만 이 양식에서는 작성할
수 없습니다. extras.predicate 아래에 손으로 작성한 술어 트리가 필요합니다.
전체 술어와 연산자 어휘는
파이프라인 단계 레퍼런스에 있습니다.
자체 구성은 없습니다. 모든 업스트림 단계를 기다립니다.
승인 게이트
섹션 제목: “승인 게이트”게이트는 승인자 에이전트를 게이트 프롬프트와 함께 숨겨진 대화로 디스패치하고
중단합니다. 승인자는 그 대화에서 결정을 구하고, submit_output으로
{ "decision": "approved" | "rejected", "reason": "..." } 형태로 제출합니다.
결정은 출력 키(기본값 approval_decision) 아래에 들어가므로, 다운스트림의
스위치 라우터가 그것으로 분기할 수 있습니다.
에이전트에 승인자를, 프롬프트 템플릿에 게이트 질문을 설정합니다.
게이트는 submit_output을 통해 { "decision": "approved" | "rejected", "reason": "..." } 형태로 해결됩니다. Reviewer (prompt) 노드도 같은 방식으로
제출합니다.
팀 디스패치
섹션 제목: “팀 디스패치”팀 ID와 디스패치 모드를 추가합니다. 피커가 제공하는 모드는 정확히 두 가지입니다.
allParallel— 멤버마다 작업 하나를 실행하고 모두 완료될 때까지 중단합니다.manager— 리더를 디스패치하고, 리더가 위임합니다.
다른 값이 저장돼 있으면 allParallel로 동작합니다. 리듀서를 append로
설정하면 각 멤버의 결과가 출력 키 아래 목록으로 모입니다.
For each 및 Call sub-pipeline
섹션 제목: “For each 및 Call sub-pipeline”For each는 기본적으로 items 상태 키를 매핑합니다(노드의
extras.iterableKey / extras.itemKey). 항목마다 프롬프트를 한 번
렌더링하고({{item}} 기본값), 그 프롬프트를 이어 붙여 에이전트를 한 번
디스패치합니다. 빈 컬렉션은 빈 목록으로 즉시 완료됩니다. 항목마다 병렬로
디스패치하는 것이 아닙니다.
Call sub-pipeline은 자식 실행이 종료 상태에 도달할 때까지 중단한 뒤, 자식의
최종 상태를 출력 키(기본값 subflow_result) 아래에 병합합니다.
extras.templateId로 자식을 지정합니다. 템플릿은 자기 자신을 호출할 수 없으며,
실패하거나 취소된 자식은 상위 단계를 실패시킵니다. 그러면 그 단계의 재시도와
실패 시 계속 정책이 적용됩니다.
입력 선언 및 수동 실행 허용
섹션 제목: “입력 선언 및 수동 실행 허용”둘 다 편집기 헤더의 수동 실행 뒤에 있습니다.
- 수동 실행을 누릅니다.
- 수동 실행 허용을 켭니다. 이 스위치는 즉시 저장됩니다. 템플릿이 실행
선택기에 나타나게 하는
manual트리거 행을 만들거나 삭제합니다. - 상한을 두려면 최대 병렬 실행 수를 설정합니다(무제한이면 비워 둡니다).
초과 실행은 슬롯이 날 때까지
queued상태로 기다립니다. - 수동 실행이 수집할 폼 필드마다 입력 추가를 누릅니다.
| 필드 | 설명 |
|---|---|
| 키 | 값이 저장되는 상태 키이며, {{key}}로 참조합니다 |
| 레이블 | 표시 레이블(기본값은 키) |
| 유형 | 텍스트, 여러 줄 텍스트, 숫자, 토글, 선택, 저장소 |
| 옵션 | 쉼표로 구분된 선택지, 선택 유형에서만 사용 |
| 기본값 | 미리 채워지는 값 |
| 플레이스홀더 | 빈 필드 안의 힌트 텍스트 |
| 도움말 | 필드 아래의 도움말 텍스트 |
| 필수 | 실행 폼이 빈 값에서 막히는지 여부 |
저장소 입력은 워크스페이스의 저장소를 고르는 피커를 렌더링하고, repo_id,
repo_local_path, repo_full_name, 그리고 저장소에 GitHub 원격이 있으면
repo_owner와 repo_name을 실행 페이로드에 채웁니다.
- 대화상자에서 저장을 누릅니다. 입력 편집은 초안에 반영되며, 템플릿을 저장할 때 영속화됩니다.
저장 및 활성화
섹션 제목: “저장 및 활성화”- 편집기 헤더에서 저장을 누릅니다. 저장하기 전까지 헤더에는 “저장되지 않은 변경 사항”이 표시됩니다.
- 설정 → 워크스페이스 → 파이프라인 템플릿으로 돌아가 템플릿 행의 스위치가 켜져 있는지 확인합니다. 엔진은 비활성 템플릿의 시작을 거부하며, 비활성 템플릿은 실행 선택기에 절대 나타나지 않습니다.
- 자동으로 시작하게 하려면 노드 라이브러리에서 트리거를 캔버스로 끌어다 놓습니다. 파이프라인 트리거 설정을 참고하십시오.