자기 개선 스킬
지속적인 개선을 위해 학습 내용과 오류를 마크다운 파일로 기록합니다. 코딩 에이전트는 이를 나중에 처리하여 수정 사항으로 만들고, 중요한 학습 내용은 프로젝트 메모리로 승격됩니다.
빠른 참조
| 상황 | 조치 |
|---|---|
| 명령어/작업 실패 | .learnings/ERRORS.md에 기록 |
| 사용자가 수정 | .learnings/LEARNINGS.md에 correction 카테고리로 기록 |
| 사용자가 누락된 기능 요청 | .learnings/FEATURE_REQUESTS.md에 기록 |
| API/외부 도구 실패 | .learnings/ERRORS.md에 통합 세부 정보와 함께 기록 |
| 지식이 오래됨 | .learnings/LEARNINGS.md에 knowledge_gap 카테고리로 기록 |
| 더 나은 접근 방식 발견 | .learnings/LEARNINGS.md에 best_practice 카테고리로 기록 |
| 기존 항목과 유사 | **참고**로 링크, 우선순위 상향 고려 |
| 광범위하게 적용 가능한 학습 | CLAUDE.md, AGENTS.md 및/또는 .github/copilot-instructions.md로 승격 |
| 워크플로우 개선 | AGENTS.md (OpenClaw 워크스페이스)로 승격 |
| 도구 주의사항 | TOOLS.md (OpenClaw 워크스페이스)로 승격 |
| 행동 패턴 | SOUL.md (OpenClaw 워크스페이스)로 승격 |
OpenClaw 설정 (권장)
OpenClaw는 이 스킬의 기본 플랫폼입니다. 워크스페이스 기반 프롬프트 주입과 자동 스킬 로딩을 사용합니다.
설치
ClawdHub 통한 설치 (권장):
clawdhub install self-improving-agent
수동 설치:
git clone https://github.com/peterskoett/self-improving-agent.git ~/.openclaw/skills/self-improving-agent
워크스페이스 구조
OpenClaw는 모든 세션에 다음 파일들을 주입합니다:
~/.openclaw/workspace/
├── AGENTS.md # 다중 에이전트 워크플로우, 위임 패턴
├── SOUL.md # 행동 지침, 성격, 원칙
├── TOOLS.md # 도구 기능, 통합 주의사항
├── MEMORY.md # 장기 기억 (메인 세션 전용)
├── memory/ # 일일 기억 파일
│ └── YYYY-MM-DD.md
└── .learnings/ # 이 스킬의 로그 파일
├── LEARNINGS.md
├── ERRORS.md
└── FEATURE_REQUESTS.md
학습 파일 생성
mkdir -p ~/.openclaw/workspace/.learnings
그런 다음 로그 파일을 생성합니다 (assets/에서 복사 가능):
LEARNINGS.md— 수정 사항, 지식 격차, 모범 사례ERRORS.md— 명령어 실패, 예외 상황FEATURE_REQUESTS.md— 사용자가 요청한 기능
승격 대상
학습 내용이 광범위하게 적용 가능하다고 판단되면 워크스페이스 파일로 승격하세요:
| 학습 유형 | 승격 대상 | 예시 |
|---|---|---|
| 행동 패턴 | SOUL.md | "간결하게, 면책 조항 피하기" |
| 워크플로우 개선 | AGENTS.md | "긴 작업을 위해 하위 에이전트 생성" |
| 도구 주의사항 | TOOLS.md | "Git push는 먼저 인증이 필요함" |
세션 간 통신
OpenClaw는 세션 간 학습 내용을 공유하는 도구를 제공합니다:
- sessions_list — 활성/최근 세션 보기
- sessions_history — 다른 세션의 대화 내용 읽기
- sessions_send — 다른 세션으로 학습 내용 보내기
- sessions_spawn — 백그라운드 작업을 위한 하위 에이전트 생성
선택 사항: 후크 활성화
세션 시작 시 자동 알림을 위해:
# OpenClaw 후크 디렉토리로 후크 복사
cp -r hooks/openclaw ~/.openclaw/hooks/self-improvement
# 활성화
openclaw hooks enable self-improvement
전체 세부 사항은 references/openclaw-integration.md를 참조하세요.
일반 설정 (다른 에이전트)
Claude Code, Codex, Copilot 또는 다른 에이전트의 경우 프로젝트에 .learnings/를 생성하세요:
mkdir -p .learnings
assets/에서 템플릿을 복사하거나 헤더가 있는 파일을 생성하세요.
로깅 형식
학습 항목
.learnings/LEARNINGS.md에 추가:
## [LRN-YYYYMMDD-XXX] category
**기록 시간**: ISO-8601 타임스탬프
**우선순위**: low | medium | high | critical
**상태**: pending
**영역**: frontend | backend | infra | tests | docs | config
### 요약
배운 내용에 대한 한 줄 설명
### 세부 사항
전체 맥락: 무슨 일이 있었는지, 무엇이 잘못되었는지, 무엇이 올바른지
### 제안된 조치
수행해야 할 특정 수정 또는 개선 사항
### 메타데이터
- 출처: conversation | error | user_feedback
- 관련 파일: path/to/file.ext
- 태그: tag1, tag2
- 참고: LRN-20250110-001 (기존 항목과 관련된 경우)
---
오류 항목
.learnings/ERRORS.md에 추가:
## [ERR-YYYYMMDD-XXX] skill_or_command_name
**기록 시간**: ISO-8601 타임스탬프
**우선순위**: high
**상태**: pending
**영역**: frontend | backend | infra | tests | docs | config
### 요약
실패한 내용에 대한 간략한 설명
### 오류
실제 오류 메시지 또는 출력
### 맥락
- 시도한 명령어/작업
- 사용된 입력 또는 매개변수
- 관련 환경 세부 정보
### 제안된 수정
식별 가능하다면, 문제를 해결할 수 있는 방법
### 메데이터
- 재현 가능: yes | no | unknown
- 관련 파일: path/to/file.ext
- 참고: ERR-20250110-001 (반복되는 경우)
---
기능 요청 항목
.learnings/FEATURE_REQUESTS.md에 추가:
## [FEAT-YYYYMMDD-XXX] capability_name
**기록 시간**: ISO-8601 타임스탬프
**우선순위**: medium
**상태**: pending
**영역**: frontend | backend | infra | tests | docs | config
### 요청된 기능
사용자가 원했던 작업
### 사용자 맥락
그것이 필요한 이유, 해결하려는 문제
### 복잡도 예상
simple | medium | complex
### 제안된 구현
이것이 어떻게 구축될 수 있는지, 무엇을 확장할지
### 메타데이터
- 빈도: first_time | recurring
- 관련 기능: existing_feature_name
---
ID 생성
형식: TYPE-YYYYMMDD-XXX
- TYPE:
LRN(학습),ERR(오류),FEAT(기능) - YYYYMMDD: 현재 날짜
- XXX: 순차 번호 또는 임의 3자 (예:
001,A7B)
예시: LRN-20250115-001, ERR-20250115-A3F, FEAT-20250115-002
항목 해결
문제가 해결되면 항목을 업데이트하세요:
**상태**: pending→**상태**: resolved로 변경- 메타데이터 뒤에 해결 블록 추가:
### 해결
- **해결됨**: 2025-01-16T09:00:00Z
- **커밋/PR**: abc123 또는 #42
- **참고**: 수행된 작업에 대한 간략한 설명
기타 상태 값:
in_progress- 적극적으로 작업 중wont_fix- 해결하지 않기로 결정 (해결 참고에 이유 추가)promoted- CLAUDE.md, AGENTS.md 또는 .github/copilot-instructions.md로 승격됨
프로젝트 메모리로 승격
학습 내용이 광범위하게 적용 가능할 때 (일회성 수정이 아닌 경우), 영구 프로젝트 메모리로 승격하세요.
승격 시기
- 학습 내용이 여러 파일/기능에 적용되는 경우
- 모든 기여자(인간 또는 AI)가 알아야 할 지식인 경우
- 반복적인 실수를 방지하는 경우
- 프로젝트별 규칙을 문서화하는 경우
승격 대상
| 대상 | 해당 내용 |
|---|---|
CLAUDE.md | 모든 Claude 상호작용을 위한 프로젝트 사실, 규칙, 주의사항 |
AGENTS.md | 에이전트별 워크플로우, 도구 사용 패턴, 자동화 규칙 |
.github/copilot-instructions.md | GitHub Copilot을 위한 프로젝트 맥락 및 규칙 |
SOUL.md | 행동 지침, 의사소통 스타일, 원칙 (OpenClaw 워크스페이스) |
TOOLS.md | 도구 기능, 사용 패턴, 통합 주의사항 (OpenClaw 워크스페이스) |
승격 방법
- 요약: 학습 내용을 간결한 규칙 또는 사실로 요약
- 추가: 대상 파일의 적절한 섹션에 추가 (필요 시 파일 생성)
- 업데이트: 원본 항목 업데이트:
**상태**: pending→**상태**: promoted로 변경**승격됨**: CLAUDE.md,AGENTS.md, 또는.github/copilot-instructions.md추가
승격 예시
학습 (자세함):
프로젝트가 pnpm 워크스페이스를 사용합니다.
npm install을 시도했지만 실패했습니다. 락 파일은pnpm-lock.yaml입니다.pnpm install을 사용해야 합니다.
CLAUDE.md에서 (간결함):
## 빌드 및 의존성
- 패키지 관리자: pnpm (npm 아님) - `pnpm install` 사용
학습 (자세함):
API 엔드포인트를 수정할 때 TypeScript 클라이언트를 다시 생성해야 합니다. 이것을 잊으면 런타임에 타입 불일치가 발생합니다.
AGENTS.md에서 (실행 가능):
## API 변경 후
1. 클라이언트 다시 생성: `pnpm run generate:api`
2. 타입 오류 확인: `pnpm tsc --noEmit`
반복 패턴 감지
기존 항목과 유사한 내용을 기록하는 경우:
- 먼저 검색:
grep -r "keyword" .learnings/ - 항목 연결: 메타데이터에
**참고**: ERR-20250110-001추가 - 우선순위 상향: 문제가 계속 반복되면
- 시스템적 수정 고려: 반복되는 문제는 종종 다음을 나타냄:
- 문서 부족 (→ CLAUDE.md 또는 .github/copilot-instructions.md로 승격)
- 자동화 부족 (→ AGENTS.md에 추가)
- 아키텍처 문제 (→ 기술 부채 티켓 생성)
정기 검토
자연스러운 중단점에서 .learnings/를 검토하세요:
검토 시기
- 새로운 주요 작업을 시작하기 전
- 기능을 완료한 후
- 과거 학습 내용이 있는 영역에서 작업할 때
- 활성 개발 중 매주
빠른 상태 확인
# 보류 중인 항목 수 계산
grep -h "상태**: pending" .learnings/*.md | wc -l
# 보류 중인 높은 우선순위 항목 나열
grep -B5 "우선순위**: high" .learnings/*.md | grep "^## \["
# 특정 영역의 학습 내용 찾기
grep -l "영역**: backend" .learnings/*.md
검토 조치
- 수정된 항목 해결
- 적용 가능한 학습 내용 승격
- 관련 항목 연결
- 반복되는 문제 에스컬레이션
감지 트리거
다음을 발견하면 자동으로 기록하세요:
수정 사항 (→ correction 카테고리의 학습):
- "아니요, 그건 맞지 않습니다..."
- "사실은, 이렇게 되어야 합니다..."
- "당신이 틀렸습니다..."
- "그건 구식입니다..."
기능 요청 (→ 기능 요청):
- "당신도 할 수 있나요..."
- "당신이 할 수 있었으면 좋겠어요..."
- "방법이 있나요..."
- "왜 당신은 못하나요..."
지식 격차 (→ knowledge_gap 카테고리의 학습):
- 사용자가 당신이 몰랐던 정보를 제공
- 참조한 문서가 오래됨
- API 동작이 당신의 이해와 다름
오류 (→ 오류 항목):
- 명령어가 0이 아닌 종료 코드 반환
- 예외 또는 스택 추적
- 예기치 않은 출력 또는 동작
- 시간 초과 또는 연결 실패
우선순위 지침
| 우선순위 | 사용 시기 |
|---|---|
critical | 핵심 기능 차단, 데이터 손실 위험, 보안 문제 |
high | 상당한 영향, 일반적인 워크플로우에 영향, 반복되는 문제 |
medium | 중간 정도의 영향, 해결 방법 존재 |
low | 사소한 불편, 극단적인 경우, 있으면 좋은 기능 |
영역 태그
코드베이스 영역별로 학습 내용을 필터링하는 데 사용:
| 영역 | 범위 |
|---|---|
frontend | UI, 컴포넌트, 클라이언트 측 코드 |
backend | API, 서비스, 서버 측 코드 |
infra | CI/CD, 배포, Docker, 클라우드 |
tests | 테스트 파일, 테스트 유틸리티, 커버리지 |
docs | 문서, 주석, README |
config | 구성 파일, 환경, 설정 |
모범 사례
- 즉시 기록 - 문제 발생 직후 컨텍스트가 가장 신선함
- 구체적으로 - 미래의 에이전트가 빨리 이해해야 함
- 재현 단계 포함 - 특히 오류의 경우
- 관련 파일 연결 - 수정을 쉽게 만듦
- 구체적인 수정 제안 - 단순히 "조사"가 아님
- 일관된 카테고리 사용 - 필터링 가능
- 적극적으로 승격 - 의심스러우면 CLAUDE.md 또는 .github/copilot-instructions.md에 추가
- 정기적으로 검토 - 오래된 학습은 가치를 잃음
Gitignore 옵션
학습 내용을 로컬로 유지 (개발자별):
.learnings/
저장소에서 학습 내용 추적 (팀 전체): .gitignore에 추가하지 마세요. 학습 내용이 공유 지식이 됩니다.
혼합 (템플릿 추적, 항목 무시):
.learnings/*.md
!.learnings/.gitkeep
후크 통합
에이전트 후크를 통해 자동 알림을 활성화하세요. 이것은 선택 사항입니다. 명시적으로 후크를 구성해야 합니다.
빠른 설정 (Claude Code / Codex)
프로젝트에 .claude/settings.json을 생성하세요:
{
"hooks": {
"UserPromptSubmit": [{
"matcher": "",
"hooks": [{
"type": "command",
"command": "./skills/self-improvement/scripts/activator.sh"
}]
}]
}
}
이것은 각 프롬프트 후에 학습 평가 알림을 주입합니다 (~50-100 토큰 오버헤드).
전체 설정 (오류 감지 포함)
{
"hooks": {
"UserPromptSubmit": [{
"matcher": "",
"hooks": [{
"type": "command",
"command": "./skills/self-improvement/scripts/activator.sh"
}]
}],
"PostToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "./skills/self-improvement/scripts/error-detector.sh"
}]
}]
}
}
사용 가능한 후크 스크립트
| 스크립트 | 후크 유형 | 목적 |
|---|---|---|
scripts/activator.sh | UserPromptSubmit | 작업 후 학습 내용 평가를 알림 |
scripts/error-detector.sh | PostToolUse (Bash) | 명령어 오류 시 트리거 |
자세한 구성 및 문제 해결은 references/hooks-setup.md를 참조하세요.
자동 스킬 추출
학습 내용이 재사용 가능한 스킬이 될 만큼 가치 있을 때 제공된 헬퍼를 사용하여 추출하세요.
스킬 추출 기준
다음 중 하나라도 해당되면 학습 내용이 스킬 추출 대상이 됩니다:
| 기준 | 설명 |
|---|---|
| 반복됨 | 참고 링크가 2개 이상의 유사한 문제와 연결됨 |
| 검증됨 | 상태가 resolved이고 작동하는 수정 사항이 있음 |
| 자명하지 않음 | 실제 디버깅/조사가 필요했음 |
| 광범위하게 적용 가능 | 프로젝트별 한정이 아닌, 여러 코드베이스에서 유용함 |
| 사용자 표시 | 사용자가 "이것을 스킬로 저장" 또는 유사한 표현을 함 |
추출 워크플로우
- 후보 식별: 학습 내용이 추출 기준을 충족
- 헬퍼 실행 (또는 수동 생성):
./skills/self-improvement/scripts/extract-skill.sh skill-name --dry-run ./skills/self-improvement/scripts/extract-skill.sh skill-name - SKILL.md 사용자 정의: 템플릿을 학습 내용으로 채움
- 학습 업데이트: 상태를
promoted_to_skill로 설정하고Skill-Path추가 - 확인: 새 세션에서 스킬을 읽어 자체 포함되어 있는지 확인
수동 추출
수동 추출을 선호한다면 skills/self-improvement/samples/에 있는 SKILL.md 템플릿을 복사하여 수동으로 채우세요.