# 슬래시 명령 — /every

> **이 장에서 배우는 것**
> 입력창에서 `/` 로 쓰는 명령이 무엇을 하는지, 왜 전송되지 않는지, 그리고
> "될 때까지 다시 시도"가 왜 명령이 아니라 기본 동작이 되었는지.

## 하나뿐입니다

입력창에 `/` 를 치면 목록이 뜹니다. 지금 거기 있는 것은 하나입니다.

| 명령 | 하는 일 |
|---|---|
| `/every <주기> <요청>` | 지금 적고 있는 요청을 **반복 업무로** 만듭니다 |

> **한때 `/goal` 이 함께 있었습니다.** "조건이 충족될 때까지 스스로 다시
> 시도하라"를 거는 명령이었는데, 그 동작이 **모든 대화의 기본**이 되면서
> 지웠습니다. 아래 「재시도는 기본입니다」에서 지금 무엇이 대신 도는지 봅니다.

## /every — 반복으로 만들기

```
/every 매일 어제 매출을 정리해서 표로 만들어줘
```

주기로 알아듣는 낱말은 [예약 화면](/guide/cn-queue)의 목록과 **같은 표**입니다.

```
매시 · 매시간 · 매일 · 아침 · 저녁 · 퇴근 · 매주 · 월요일 · 금요일 · 매월 · 매달
```

영어도 됩니다(`hourly`, `daily`, `evening`, `weekly`, `friday`, `monthly`).
그 밖의 주기는 예약 화면에서 cron 식으로 직접 정하세요.

### 왜 전송되지 않는가

`/every` 는 **등록만 하고 보내지 않습니다.**

> "매일 아침 해라"를 지금 한 번 더 할 이유가 없습니다. 보내 버리면 만든 사람만
> 첫 회를 두 번 받습니다.

만들어지면 어디에 생겼는지 토스트로 알려 줍니다.

### 왜 입력창에서 만드나

반복을 걸 값어치가 있는 요청은 대개 **방금 잘 된 그 요청**입니다. 그리고 그
요청의 조건은 지금 입력창에 이미 골라져 있습니다.

```
지금 입력창에 이미 정해져 있는 것:
  에이전트 · 모델 · 그룹 · 제외한 도구 · 드라이브 범위
→ /every 가 그대로 가져갑니다. 사람이 고르는 것은 주기 하나뿐입니다
```

예약 화면의 빈 폼으로 보내면 이 다섯 개를 처음부터 다시 고르게 되고, 그러면
아무도 안 합니다.

## 재시도는 기본입니다 — 켤 것이 없습니다

여기가 예전 매뉴얼과 달라진 부분입니다.

> **모든 대화가 "결과를 보고할 때까지 이어서" 돌아갑니다.** 켜는 명령도,
> 켜는 화면도 없습니다.

### 어떻게 도나

에이전트는 일을 마치면 `report_result` 로 **스스로 판정을 보고**합니다. 그 보고가
회전 여부를 정합니다.

| 보고 | 그다음 |
|---|---|
| `completed` (다 됐음) | **즉시 끝납니다.** 한마디로 끝나는 대화는 회전을 타지 않습니다 |
| `failed` + 다음에 할 행동 한 줄 | 시스템이 그 한 줄을 붙여 **한 번 더** 돌립니다 |
| `blocked` (사람이 필요함) | 멈추고 사람을 부릅니다 |

```
기본 시도 횟수  3회
최대 상한      5회
```

### 왜 모델에게 다음 프롬프트를 통째로 맡기지 않나

모델이 자기 다음 지시를 다 쓰면 **판정자와 피실험자가 같아집니다.** 실제로 세
가지로 무너집니다.

| 무너지는 방식 | 어떻게 보이나 |
|---|---|
| 자기 확신 | `failed` 라고 적어놓고 "거의 다 됐으니 마무리하라"고 써서 같은 자리를 맴돔 |
| 의도 드리프트 | 원본 요청이 이력에서 밀려나 몇 회전 뒤에는 다른 일을 하고 있음 |
| 제약 유실 | 요약하는 과정에서 "만료 쿠폰은 이 문구로" 같은 조건이 조용히 빠짐 |

그래서 모델이 소유하는 것은 **"다음에 할 행동" 한 줄뿐**이고, 원본 요청과 완료
조건은 매 회전 시스템이 **원문 그대로 다시 붙입니다.** 아래 두 줄이 여기서
막힙니다.

이건 [컨텍스트가 밀려날 때](/guide/ai-context-overflow)에서 본
"중요한 제약은 다시 적는다"를 제품이 대신 해주는 것입니다.

### 그래서 무엇을 하면 되나

명령이 없어졌으니 **완료 조건은 요청 안에 적습니다.**

```
✗ (예전) /goal 테스트가 전부 통과할 때까지
✓ (지금) 로그인 화면의 테스트를 고쳐주세요.
         완료 조건: 비밀번호 틀림 / 없는 계정 / 잠긴 계정 세 경우의
         테스트가 전부 통과할 것.
```

> **완료 조건은 기계가 판정할 수 있어야 합니다.** "보기 좋을 때까지"는 조건이
> 아닙니다. [좋은 지시의 네 요소](/guide/ai-intent-context)에서 본 완료 조건과
> 같은 기준이고, 이제 그것을 별도 명령이 아니라 **본문에** 적습니다.

## 오타는 그냥 메시지가 됩니다

`/evrey 매일 …` 처럼 잘못 치면 슬래시 명령으로 인식되지 않고 **그대로 모델에게
갑니다.** 모델은 그것을 업무 지시로 읽습니다. 목록에서 골라 넣는 것이 안전합니다.

**없어진 `/goal` 도 마찬가지입니다.** 손에 익어서 `/goal ...` 을 쳐도 오류가 나지
않고 그 문장이 그대로 모델에게 갑니다 — 아무 일도 안 일어난 것처럼 보이지
않으므로 더 헷갈립니다. 완료 조건은 위처럼 본문에 적으세요.

## 자주 하는 오해

### "/every 로 만든 것은 어디서 고치나요?"

**[예약 화면](/guide/cn-queue)**입니다. 만들어진 뒤로는 화면에서 만든 것과 완전히
같습니다 — 수정·삭제·일시 정지가 전부 됩니다.

### "재시도가 무한히 돌지 않나요?"

**아닙니다.** 기본 3회, 상한 5회입니다. 그리고 모델이 `completed` 로 보고하면 그
자리에서 멈추므로, 짧게 끝나는 대화는 애초에 회전을 타지 않습니다.

### "재시도를 끄고 싶으면요?"

**화면에는 끄는 자리가 없습니다.** 기본으로 켜 둔 이유가 그것입니다 — 예전에는
꺼짐이 기본이라, 켜지 않은 대화(즉 거의 모든 대화)는 모델이 절반쯤 하다 멈춰도
그 자리에서 끝났습니다. 사람이 그걸 알아채는 통로가 알림뿐인데, 알림은 무엇이
끝났는지 말해줄 뿐 다시 시키지는 못합니다.

프로그램에서 부를 때는 [API](/guide/cn-api)의 `repeatMaxAttempts` 에 `0` 을
**명시하면** 꺼집니다.

---

## 확인

**1. `/every` 가 전송되지 않는 이유는?**

<details>
<summary>답</summary>

**나중에 할 일이기 때문**입니다. 지금 한 번 더 보내면 만든 사람만 첫 회를 두 번
받습니다. `/every` 는 등록만 하고 토스트로 어디에 생겼는지 알려줍니다.
</details>

**2. `/every` 를 예약 화면이 아니라 입력창에서 쓰는 이유는?**

<details>
<summary>답</summary>

**에이전트·모델·그룹·도구·드라이브 범위가 이미 입력창에 골라져 있기
때문**입니다. 빈 폼에서 다시 고르게 하면 아무도 안 합니다.
</details>

**3. "될 때까지 다시 시도"를 걸려면 무엇을 해야 합니까?**

<details>
<summary>답</summary>

**아무것도 안 해도 됩니다.** 재시도는 모든 대화의 기본(3회, 상한 5회)입니다.
할 일은 **완료 조건을 요청 본문에 적는 것**뿐이고, 그 조건은 기계가 판정할 수
있어야 합니다.
</details>

**4. 명령을 잘못 치면 어떻게 됩니까?**

<details>
<summary>답</summary>

**그대로 메시지로 나갑니다.** 모델이 그것을 업무 지시로 읽으므로, 목록에서 골라
넣는 편이 안전합니다. 없어진 `/goal` 도 오류 없이 그냥 메시지가 됩니다.
</details>

---

다음은 에이전트를 만드는 법입니다 → [에이전트란](/guide/cn-agents-intro)
