---
name: autoresearch
description: "스킬 프롬프트 자동 최적화 실행. autoresearch, 스킬 최적화, 프롬프트 개선"
metadata:
  version: 1.0.0
triggers:
  - "autoresearch"
  - "스킬 최적화"
  - "프롬프트 자동 개선"
category: "system"
---

# /autoresearch — 스킬 프롬프트 자동 최적화

`runner.py`를 사용하여 지정한 스킬의 SKILL.md 본문을 자동으로 반복 최적화한다. Karpathy autoresearch 방법론 기반: 한 번에 하나씩 변경 → 테스트 → KEEP or REVERT → 목표 점수 달성 시 종료.

## 사용법

```
/autoresearch <스킬명>
```

예시:
- `/autoresearch ad-creative`
- `/autoresearch copywriting`
- `/autoresearch paid-ads`

---

## Step 1: 스킬명 추출

args에서 첫 번째 인자를 스킬명으로 사용한다.

- args가 비어 있으면 사용자에게 스킬명을 요청한다:
  ```
  오류: 스킬명을 입력해 주세요. 예) /autoresearch ad-creative
  ```
- 스킬명을 추출했으면 다음 단계로 진행한다.

---

## Step 2: 체크리스트 탐색

`/home/jay/workspace/skills/<스킬명>/evals/checklist.yaml` 경로를 확인한다.

- **파일이 존재하면**: 해당 경로를 `CHECKLIST_PATH`로 저장하고 Step 3으로 진행한다.
- **파일이 없으면**: 아래 메시지를 출력하고 중단한다.

  ```
  오류: 체크리스트 파일을 찾을 수 없습니다.
  경로: /home/jay/workspace/skills/<스킬명>/evals/checklist.yaml

  체크리스트 파일을 먼저 생성해 주세요.
  참고: skills/ad-creative/evals/checklist.yaml
  ```

---

## Step 3: test-inputs 탐색 및 입력 결정

`/home/jay/workspace/skills/<스킬명>/evals/test-inputs.yaml` 경로를 확인한다.

### 3a. test-inputs.yaml이 존재하는 경우

`--test-inputs-file` 플래그를 사용한다. `TEST_INPUTS_ARG`를 아래와 같이 설정한다:

```
--test-inputs-file /home/jay/workspace/skills/<스킬명>/evals/test-inputs.yaml
```

### 3b. test-inputs.yaml이 없는 경우

사용자에게 테스트 입력 텍스트를 직접 요청한다:

```
test-inputs.yaml 파일이 없습니다.
테스트에 사용할 입력 텍스트를 입력해 주세요.

예시: "보험 FA 모집 광고, 타겟: 30대 보험설계사"
```

입력을 받으면 `--test-input "<입력 텍스트>"` 형태로 `TEST_INPUTS_ARG`를 설정한다.

입력이 없으면 중단한다.

---

## Step 4: 실행 명령어 조립

아래 기본값을 적용한다:

| 파라미터 | 기본값 |
|----------|--------|
| `--rounds` | `50` |
| `--target-score` | `0.95` |
| `--consecutive` | `3` |

최종 명령어를 조립한다:

```bash
python3 /home/jay/workspace/scripts/autoresearch/runner.py \
  --skill <스킬명> \
  --checklist <CHECKLIST_PATH> \
  <TEST_INPUTS_ARG> \
  --rounds 50 \
  --target-score 0.95 \
  --consecutive 3
```

---

## Step 5: 실행

### 기본 실행 (포그라운드)

Bash 도구를 사용하여 Step 4에서 조립한 명령어를 실행한다.

실행 전 사용자에게 명령어를 보여준다:

```
다음 명령어로 autoresearch를 시작합니다:

  python3 /home/jay/workspace/scripts/autoresearch/runner.py \
    --skill <스킬명> \
    --checklist <CHECKLIST_PATH> \
    <TEST_INPUTS_ARG> \
    --rounds 50 --target-score 0.95 --consecutive 3
```

### --background 옵션 지원

사용자가 `/autoresearch <스킬명> --background`로 호출한 경우, 장시간 실행을 고려하여 백그라운드로 실행한다. Bash 도구의 `run_in_background: true` 파라미터를 사용한다.

백그라운드 실행 시 사용자에게 안내한다:

```
백그라운드로 실행합니다. 완료 시 알림을 받습니다.
로그 경로: /home/jay/workspace/skills/<스킬명>/evals/autoresearch.log
```

---

## Step 6: 결과 요약 출력

실행 완료 후 아래 형식으로 결과를 요약 출력한다:

```
## autoresearch 완료: <스킬명>

- 최종 점수:   <score> / 1.00
- 총 라운드:   <rounds>회 실행
- KEEP:        <keep_count>회 (개선 채택)
- REVERT:      <revert_count>회 (롤백)
- 결과:        <CONVERGED | MAX_ROUNDS_REACHED>

최적화된 SKILL.md: /home/jay/workspace/skills/<스킬명>/SKILL.md
백업 (원본):       /home/jay/workspace/skills/<스킬명>/evals/backup-original.md
변경 이력:         /home/jay/workspace/skills/<스킬명>/evals/changelog.json
```

runner.py 출력에서 점수, 라운드 수, KEEP/REVERT 카운트를 파싱하여 위 항목을 채운다. 파싱이 불가한 항목은 `(확인 불가)`로 표시한다.

---

## 에러 처리 요약

| 상황 | 동작 |
|------|------|
| args에 스킬명 없음 | 스킬명 입력 요청 후 중단 |
| checklist.yaml 없음 | 에러 메시지 출력 후 중단 |
| test-inputs.yaml 없음 + 사용자 입력 없음 | 입력 요청 후 중단 |
| runner.py 실행 실패 | stderr 출력 그대로 표시 |

---

## 관련 파일 경로 참고

```
skills/<스킬명>/
├── SKILL.md                      # 최적화 대상
└── evals/
    ├── checklist.yaml            # 채점 기준 (필수)
    ├── test-inputs.yaml          # 배치 테스트 입력 (선택)
    ├── backup-original.md        # 원본 백업 (runner.py 자동 생성)
    └── changelog.json            # 변경 이력 (runner.py 자동 생성)

scripts/autoresearch/
├── runner.py                     # 메인 실행 스크립트
├── judge.py                      # 채점 모듈
├── mutator.py                    # 변형 생성 모듈
├── skill_executor.py             # 스킬 실행 모듈
└── changelog.py                  # 변경 이력 관리 모듈
```
