Cursor 커스텀 서브에이전트 — 어디에 정의하나?

Cursor 커스텀 서브에이전트는 마크다운 + YAML 프론트매터로 “언제 무엇을 할지”를 고정한 전문 자식 Agent입니다. 부모 Agent가 위임하면 자체 컨텍스트 창에서 일하고, 최종 메시지만 부모에게 돌려줍니다. 중간 탐색·셸·검증이 메인 대화를 잠식하지 않게 하는 장치가 핵심입니다.

이 글의 축은 셋입니다. 파일 위치는? · 언제 위임하나? · 부모 프롬프트에 뭘 남기나? 요금·플랜·토큰 한도·제휴·창작 후기는 없습니다.

근거는 Cursor 공식 Subagents입니다. 동작·파일 위치·위임·프론트매터만 다룹니다.

파일 위치는?

한 줄 답: 프로젝트 전용은 .cursor/agents/, 모든 프로젝트 공용은 ~/.cursor/agents/ 에 .md 파일을 둡니다. 이름이 겹치면 프로젝트 정의가 이기고, 같은 프로젝트 안에서는 .cursor/가 .claude/·.codex/보다 우선합니다.

유형경로범위
프로젝트.cursor/agents/현재 레포만
프로젝트(호환).claude/agents/, .codex/agents/현재 레포만
사용자~/.cursor/agents/현재 사용자 전 프로젝트
사용자(호환)~/.claude/agents/, ~/.codex/agents/현재 사용자 전 프로젝트

각 파일은 YAML 프론트매터 + 본문 프롬프트입니다. 문서상 주요 필드는 다음과 같습니다.

필드기본역할
name파일명표시명·식별자(소문자·하이픈)
description—Task 힌트. Agent가 위임 여부를 읽을 신호
modelinherit부모와 동일, 또는 특정 모델 ID
readonlyfalsetrue면 쓰기·상태 변경 셸 제한
is_backgroundfalsetrue면 부모를 막지 않고 백그라운드 실행

최소 예(검증 전용):

---
name: verifier
description: Validates completed work. Use after tasks are marked done.
model: inherit
readonly: true
---

You are a skeptical validator. Verify claimed work actually works.
Run relevant checks. Report passed vs incomplete. Do not accept claims at face value.

실무 배치:

  1. 팀 공통 역할(verifier·debugger)은 .cursor/agents/에 커밋합니다.
  2. 개인 습관만 쓰는 에이전트는 ~/.cursor/agents/ 에 둡니다.
  3. 이름 충돌이 나면 프로젝트 쪽이 이깁니다. 의도치 않은 덮어쓰기를 피하려면 역할별 고유 name 을 씁니다.
  4. Claude/Codex 호환 폴더도 읽히지만, Cursor 중심이면 .cursor/agents/를 단일 소스로 두는 편이 안전합니다.
repo/
  .cursor/
    agents/
      verifier.md      ← project, shared via VCS
      debugger.md
~/.cursor/
  agents/
    my-notes-helper.md ← user-wide only

문서 권장: 초안은 Agent에게 “.cursor/agents/….md 만들어 줘”로 받고, description을 실사용 프롬프트로 다듬습니다. 모호한 “helps with coding”은 위임 신호가 되지 않습니다.

언제 위임하나?

한 줄 답: 긴 탐색·병렬 작업·다단계 전문 검증처럼 컨텍스트 격리가 필요할 때 위임하고, 한 방이면 끝나는 단순 작업은 스킬·명령·부모에 남깁니다.

문서의 “when to use subagents vs skills” 축을 정리하면 다음과 같습니다.

서브에이전트에 맡김부모·스킬에 남김
긴 리서치·코드베이스 탐색(중간 출력이 noisy)체인지로그 한 줄·import 정렬 같은 단발
여러 워크스트림을 병렬로빠른 반복 액션 한 번
다단계 전문 지식(보안 감사·디버그)별도 컨텍스트 창이 필요 없음
독립 검증(주장 vs 실제)부모가 이미 맥락을 다 가진 짧은 수정

빌트인 서브에이전트(explore·bash·browser)는 중간 출력이 커서 메인 컨텍스트를 잠식하기 쉬워 자동으로 쓰이도록 설계되어 있습니다. 커스텀은 그 위에 팀 기준·역할을 고정할 때 둡니다.

위임 트리거 실무:

  1. 자동: description에 “use proactively”, “always use for …”처럼 언제 쓸지를 분명히 적습니다.
  2. 명시: 채팅에서 /verifier …, /debugger … 또는 “verifier 서브에이전트로 …”라고 부릅니다.
  3. 병렬: 한 메시지에 “API 리뷰와 문서 업데이트를 병렬로”처럼 쓰면 Agent가 여러 Task를 동시에 낼 수 있습니다.
  4. 포그라운드 vs 백그라운드: 결과가 즉시 필요하면 기본(포그라운드), 긴 조사는 is_background: true 또는 긴 작업으로 백그라운드에 둡니다.
Delegate when:
- Intermediate output is noisy (search, logs, browser DOM)
- You need a second opinion (verifier) with a fresh context
- Two+ independent streams can run at once

Do NOT spin a custom subagent for:
- One-shot format / rename / changelog
- Vague “helper” roles without a triggering description
- Duplicating a skill that does not need isolation

안티패턴(문서): 수십 개의 모호한 헬퍼, 2,000단어 장문 프롬프트, 스킬로 충분한 단발을 서브에이전트로 복제. 2~3개의 초점 역할부터 시작합니다.

부모 프롬프트에 뭘 남기나?

한 줄 답: 서브에이전트는 이전 대화 이력을 보지 않으므로, 부모가 넘기는 프롬프트에 목표·범위·성공 기준·필요 경로를 넣고, 부모 쪽에는 오케스트레이션·최종 병합·사용자와의 다음 결정을 남깁니다.

문서 핵심: “Subagents start with a clean context. The parent agent includes relevant information in the prompt.”

자식(서브에이전트)에 넣을 것부모에 남길 것
Done when / Out of scope전체 티켓 목표·우선순위
관련 파일 경로·재현 절차·에러 로그 요약여러 자식 결과의 병합·충돌 해결
역할 프롬프트에 이미 있는 체크리스트는 짧게 참조사용자 확인이 필요한 선택지
산출 형식(통과/실패 목록, 심각도)다음 위임 여부·재개(agent ID)

부모 프롬프트(세션)에 고정해 두면 좋은 한 줄들:

Parent keeps:
- Overall goal and acceptance for the user-facing change
- Which specialist to call (/verifier, /debugger) and in what order
- Merge policy: parent integrates diffs; subagents report only
- Do not assume subagents see prior chat — pass paths and criteria each time

Parent hands off in the Task prompt:
- Goal (one sentence)
- Touch / Do-not-touch paths
- Success checks (commands or observable outcomes)
- Return format (passed / failed / open questions)

오케스트레이터 패턴(문서 예시): Planner → Implementer → Verifier. 각 핸드오프에 구조화된 산출을 넣어 다음 자식이 추측하지 않게 합니다. 검증은 readonly: true로 두면 쓰기 권한이 제한되어 “고치면서 검증”이 섞이기 어렵습니다.

부모가 남기지 말아야 할 것:

  • 자식이 이미 .md 본문에 가진 장황한 역할 설명 전체 복붙
  • “알아서 레포 전체를 살펴봐”처럼 범위 없는 위임
  • 시크릿·배포 승인·머지 버튼처럼 사람/부모가 쥐어야 하는 권한
# Bad handoff
"Fix auth somehow."

# Better handoff (parent → verifier)
"Claimed done: OAuth callback in apps/web/src/auth/callback.ts.
Verify end-to-end: login → callback → session cookie.
Out of scope: redesign UI, touch apps/admin.
Return: passed checks, failed checks, incomplete items."

자주 묻는 질문

프로젝트와 사용자 정의가 같은 이름이면?
프로젝트 서브에이전트가 우선합니다. 같은 프로젝트에서 경로가 여러 개면 .cursor/가 .claude/·.codex/보다 앞선다고 문서에 명시되어 있습니다.

description만 잘 쓰면 자동 위임되나?
Agent는 작업 복잡도·description·현재 컨텍스트를 보고 위임합니다. “use proactively / always use for” 문구가 자동 위임을 돕습니다. 그래도 중요한 검증은 /name으로 명시하는 편이 안전합니다.

서브에이전트가 또 서브에이전트를 띄울 수 있나?
가능하지만 중첩 한도가 있습니다. 문서상 메인과 직계 자식은 띄울 수 있고, 그 아래는 더 깊이 띄우지 못합니다. 훅·도구 정책·모드가 Task를 막을 수 있습니다. 복잡한 파이프는 부모가 전문가를 직렬/병렬로 조정하는 편이 단순합니다.

간단한 작업에도 커스텀을 만들어야 하나?
아니요. 단발·격리 불필요면 스킬·명령을 쓰고, 커스텀은 반복되는 전문 역할에만 둡니다.

무엇을 기억하면 되나?

정의는 .cursor/agents/(또는 ~/.cursor/agents/)의 md, 위임은 격리·병렬·전문 검증이 필요할 때, 부모는 목표·순서·병합을 쥐고 자식 프롬프트에 컨텍스트를 매번 실어 보냅니다. 근거: Cursor Subagents. 요금·제휴 없음.

공식 문서는 어디인가?

  • Cursor — Subagents — 위치, 프론트매터, 자동/명시 위임, 포그라운드·백그라운드, 베스트 프랙티스
  • 인접: subagent-brief (위임 브리프 한 장), cursor-skills-vs-rules (스킬 vs 규칙), agent-context-budget (같은 세션 요약)