AGENT SKILL

incidents-to-agent

반복 실패 패턴을 분석해 새 에이전트 후보를 생성한다

License 许可
MIT
所属仓库
JayJihyunKim/rein
最近更新
2026-10-15
Stars
★ 1
Forks
0

01 前言 Front Matter

name
incidents-to-agent
triggers
[ "/incidents-to-rule 스킬이 Step 6 에서 체인 호출 (자동)", { "수동": "최근 incidents 에서 새 agent 필요성 판단해줘" } ]
description
반복 실패 패턴을 분석해 새 에이전트 후보를 생성한다

03 SKILL.md 正文

Skill: incidents-to-agent

목적

rule 로 해결 불가한 반복 실패 패턴을 분석해 전문 에이전트 후보를 생성한다.

새 에이전트 감지 기준 (3가지 모두 충족 시만)

  1. 동일 작업 유형 기존 에이전트 self-review 실패 3회 이상
  2. 작업 유형이 한 문장으로 설명 가능하고 기존 에이전트와 명확히 구분
  3. 기존 에이전트 + 하위 AGENTS.md 조합으로 해결 불가능

입력

  • trail/incidents/auto-*.md (status in {pending, processed}, count >= 3, agent_eligible != false)
  • 기존 trail/agent-candidates/<hash>.md (decision 확인용)

실행 절차

Step 1: 후보 식별

각 auto-*.md 를 순회:

  • count >= 3 체크
  • frontmatter agent_eligible 확인:
    • false → 에이전트 후보에서 제외 (bug/artifact — hook 소스 수정 등 다른 경로로 해결)
    • true 또는 unknown 또는 필드 없음 → 통과 (기존 동작 유지)
  • 기존 candidate <pattern_hash>.md 존재? → decision != pending 이면 skip
  • 남은 건을 후보 리스트에 추가

왜 이 필터인가: count >= 3 만 보면 hook 소스의 regex false-positive 같은 버그성 패턴도 agent 후보로 올라와 사용자가 매번 decline 해야 한다. agent_eligible: false 는 /incidents-to-rule 분석 단계에서 기록되며, 여기서 필터링한다. 기존 incident 파일 (필드 없음) 은 unknown 으로 해석되어 기존 동작을 깨지 않는다 (backfill 불요).

candidate stub 생성:

# plugin root 해소 (Claude Bash 도구 환경에서는 ${CLAUDE_PLUGIN_ROOT} 가 unset)
REIN_PLUGIN_ROOT="$(claude plugin path rein-core 2>/dev/null || echo "$HOME/.claude/plugins/marketplaces/rein/plugins/rein-core")"

python3 "$REIN_PLUGIN_ROOT/scripts/rein-mark-agent-candidate.py" create \
  --hash <pattern_hash> \
  --source-incident <auto-*.md 파일명> \
  --role-one-liner "<추정 역할 한 문장>"

Helper path 는 plugin install 환경에서 plugin root 의 scripts/ (위 resolver block 의 $REIN_PLUGIN_ROOT 결과 기준), 메인테이너 dogfood (plugin root env unset) 에서는 scripts/rein-mark-agent-candidate.py 로 fallback (RES-1 resolver 가 동일 파일 가리킴).

Step 2: Batch 사용자 결정

후보가 1건 이상이면 한 번의 AskUserQuestion (multiSelect) 호출:

  • 질문: "agent 후보로 승격할 건을 선택하세요 (미선택은 declined 처리)"
  • 옵션: 후보별로 <hash> — <role_one_liner> (count=N)
  • 후보 0건이면 이 단계 skip.

Step 3: 결정 반영

각 후보에 대해:

  • 선택됨 → decide 서브커맨드로 approved
  • 선택 안 됨 → decide 서브커맨드로 declined
# plugin root 해소 (Claude Bash 도구 환경에서는 ${CLAUDE_PLUGIN_ROOT} 가 unset)
REIN_PLUGIN_ROOT="$(claude plugin path rein-core 2>/dev/null || echo "$HOME/.claude/plugins/marketplaces/rein/plugins/rein-core")"

python3 "$REIN_PLUGIN_ROOT/scripts/rein-mark-agent-candidate.py" decide \
  --hash <hash> --decision <approved|declined> \
  --reason "<사람이 제시한 이유>"

Step 4: 검증

approved 후보가 있으면:

  • trail/index.md 에 "agent-candidates 승격 대기" 한 줄 추가
  • 사용자에게 "다음 단계: /promote-agent <hash> 로 정식 에이전트 초안 작성" 안내

Step 5: approved / declined 파일 삭제 (정책)

결정이 approved (agent 승격 대기) 또는 declined 로 종결된 auto-*.md 는 삭제한다:

rm trail/incidents/auto-<hook>-<hash>[-N].md

이유:

  • approved 건은 trail/agent-candidates/<hash>.md 가 스텁이자 source of truth. 원본 incident 파일은 중복
  • declined 건은 blocks.jsonl 에 해당 엔트리가 남아 있으면 aggregate 가 다음 세션에서 재생성하는 stale-surfacing 문제 발생. 파일 삭제가 가장 단순한 해소 수단

approved 후보에 대해서는 trail/agent-candidates/<hash>.md 를 확인해 decision: approved + source_incident 가 기록돼 있는지 검증한 뒤 원본 삭제.

재평가 (opt-in)

기존 declined 후보를 다시 검토하려면 수동으로 해당 파일의 decision 을 pending 으로 편집한 뒤 본 스킬 재실행.

완료 기준

[ ] 식별된 후보 모두 candidate 파일 생성 (또는 skip)
[ ] 후보 있으면 batch AskUserQuestion 호출 완료
[ ] 각 후보의 decision 갱신 (approved/declined)
[ ] approved 건은 index.md 에 반영
[ ] approved/declined 로 종결된 auto-*.md 원본 삭제 (Step 5)

주의

  • 에이전트 수 증가 = 조정 비용 + 토큰 비용 + 충돌 위험
  • 불확실하면 에이전트 생성보다 규칙 추가 (/incidents-to-rule) 를 선택
  • 본 스킬은 사람의 최종 승인 없이 에이전트를 활성화하지 않는다 (/promote-agent 전용)

04 同仓库更多 Skills