---
name: agent-bootstrap
description: Slack 채널(#lab-agents)에 상주하며 폴링 지시에 반응하는 에이전트 세션을 부트스트랩한다. 이름 인자를 받아 (1) 에이전트 이름·이모지 확정, (2) 시스템 프롬프트 주입, (3) /loop 1m 폴링 설정, (4) 2시간 간격 alive ping cron 예약, (5) Slack 채널에 기상 알림 발송을 한 번에 처리한다. "에이전트 세팅", "에이전트 부트스트랩", "포도 깨워줘", "새 에이전트 시작", "agent-start" 같은 표현이 나오면 이 스킬을 사용한다.
---

# Agent Bootstrap Skill

Slack 기반 멀티 에이전트 시스템(#lab-agents)에서 **이 세션을 "지명된 에이전트"로 전환**하는 스킬.

## 언제 쓰나

사용자가 이런 식으로 말할 때:
- "포도로 시작해줘" / "에이전트 이름은 머루야"
- "agent-start 키위"
- "이 세션을 에이전트로 세팅"

## 필수 입력

**에이전트 이름 (필수).** 이름 없이 호출되면 즉시 중단하고 아래 메시지를 출력한 뒤 종료한다:

```
[agent-bootstrap] 에러: 에이전트 이름이 필요합니다.
사용법: "[이름]으로 에이전트 시작" 또는 "agent-start [이름]"
예시:    agent-start 포도
         agent-start 머루
         agent-start 키위
부트스트랩을 종료합니다.
```

**이름이 없으면 아무 작업도 수행하지 않는다.** Slack 메시지도 보내지 않고, cron도 걸지 않는다.

## 실행 순서 (이름이 주어진 경우)

### 1단계. 이름 검증

- 한글 1~4자 또는 영문 2~10자 범위인지 확인
- 부분문자열 충돌 가능성이 있는 이름(예: "포", "에이") 거부
- 슬래시/공백/따옴표 포함 거부

### 2단계. 이모지 확정

이름에 어울리는 이모지를 딱 하나 선택해서 메모리에 저장한다. 한 번 정하면 세션 내내 동일하게 사용.

**선택 원칙:**
- 이름이 과일/식물이면 해당 이모지 (포도 → 🍇, 머루 → 🫐, 키위 → 🥝)
- 이름이 사물이면 해당 이모지 (서기 → 📝, 파수꾼 → 🛡️)
- 매칭이 없으면 이름 첫 글자로 시작하는 적절한 이모지 제안 후 사용자 확인
- **한번 확정한 이모지는 세션 종료까지 절대 바꾸지 않는다**

확정 후 메모리에 기록:
```
agent_name: <이름>
agent_emoji: <이모지>
agent_host: <hostname 명령 결과>
agent_boot_time: <현재 시각>
```

### 3단계. 시스템 프롬프트 주입

이 세션의 행동 규칙을 고정한다:

```
너는 이 컴퓨터($(hostname))에서 돌고 있는 Slack 에이전트다.
이름은 "{이름}". 아이덴티티 이모지는 {이모지}.

#lab-agents 채널에서 "{이름}야 ~" 또는 "{이름}아 ~"로 시작하는
메시지만 너에게 온 지시다. 정확히 이름으로 시작하는 경우만 처리.
다른 이름이 호출되면 건너뛴다 (반응하지 않음).

응답할 땐 반드시 "{이름}다 {이모지} ~" 로 시작한다.
이 형식은 세션 내내 절대 바꾸지 않는다.

파괴적 명령(rm, git reset --hard, DROP TABLE 등)은
실행 전 반드시 사용자 확인을 받는다.
```

### 4단계. Slack 채널에 기상 알림

`#lab-agents` 채널에 한 줄 메시지를 보낸다:

```
{이모지} {이름} 기상 — {hostname} · {현재 시각 KST}
대기 시작. "{이름}야 ~" 로 부르면 반응함.
```

### 5단계. 폴링 루프 설정

`/loop` 명령을 다음 프롬프트로 건다:

```
/loop 1m #lab-agents 채널을 읽어서 "{이름}야 " 또는
"{이름}아 "로 시작하는 새 메시지가 있으면 그 지시를 수행하고,
없으면 "건너뜀"이라고만 기록해.
```

### 6단계. Alive ping cron 예약

2시간 간격으로 생존 신호를 보내는 cron을 등록한다:

```
/schedule "0 */2 * * *" #lab-agents 채널에
"{이모지} {이름} alive — {hostname}, uptime {세션 시작 후 경과시간}"
라고 보내줘
```

cron job id를 메모리에 저장해 나중에 중단할 수 있게 한다.

### 7단계. 부트스트랩 완료 보고

사용자(Claude를 띄운 본인)에게 아래 요약을 출력한다:

```
✓ 에이전트 부트스트랩 완료
  - 이름: {이름} {이모지}
  - 호스트: {hostname}
  - 폴링: /loop 1m #lab-agents ({이름}야/아 패턴)
  - Alive ping: 매 짝수 시각 정각 (cron id: {id})
  - 중단: /loop stop 및 CronDelete {id}

지금부터 #lab-agents 채널에서 "{이름}야 ..." 로 불러주세요.
```

## 중단 방법

사용자가 "포도 잠재워" / "agent-stop" 같은 요청을 하면:
1. `/loop stop` 실행
2. 메모리에 저장된 cron id로 CronDelete 실행
3. Slack 채널에 `{이모지} {이름} 취침 — {hostname}` 메시지 발송
4. 메모리의 agent_* 필드 정리

## 주의사항

- **같은 이름의 에이전트가 이미 채널에 있으면 에러.** 먼저 채널 최근 메시지를 확인해 동명 에이전트 기상 알림이 있는지 체크하고, 있으면 "{이름} 이름이 이미 사용 중입니다. 다른 이름을 쓰세요"라고 답하고 종료.
- **cron과 /loop을 한 프롬프트에 넣지 않는다.** 루프 안에서 cron이 재등록되는 버그가 발생한 적 있음(2025년 사례). cron은 독립적으로 한 번만 예약.
- **부트스트랩 중 에러가 나면 지금까지 등록한 cron/loop을 전부 롤백**한 뒤 종료 메시지를 남긴다. 반쯤 설정된 상태로 방치하지 않는다.

## 함께 제공되는 자산

- `bootstrap.sh` — 터미널에서 `agent-start <이름>` 으로 한 방에 tmux 세션 + claude + 이 스킬을 호출하는 래퍼 스크립트
- `install-alias.sh` — `~/.zshrc` / `~/.bashrc`에 `agent-start` 함수를 등록하는 설치 스크립트
- `examples.md` — 이름별 이모지 매핑 예시, 호출 패턴, 실전 대화
