Imported from ischung/openai-todo (
AGENTS.md). Install upstream withnpx skills add ischung/openai-todo. Copyright stays with the author.
AGENTS.md — AI 에이전트 운영 지침
이 파일은 에이전트가 이 저장소에서 작업할 때 따라야 할 모든 규칙을 담는다. 약 100줄 이하로 유지한다. 깊은 내용은 각 링크를 따라가라.
에이전트 역할 정의
[ROLE-1] 하네스 에이전트: 구조적 제약 강제 및 엔트로피 관리
[ROLE-2] 도메인 에이전트: core/ 함수 구현 및 불변 규칙 검증
[ROLE-3] 검증 에이전트: validation/ 레이어 유지 및 입력 경계 강화
[ROLE-4] 문서 에이전트: docs/ 일관성 유지 및 stale 문서 감지
[ROLE-5] 스토리지 에이전트: storage/ 레이어 유지 및 localStorage 스키마 관리
작업 시작 전 필수 체크리스트
-
ARCHITECTURE.md읽기 (레이어 의존성 방향 확인) -
docs/invariants.md읽기 (절대 위반 불가 규칙 확인) -
PLANS.md읽기 (진행 중인 작업 충돌 방지) -
types/todo.ts읽기 (TodoItem 구조 파악) -
node --version이.nvmrc(Node 22) 이상인지 확인- 불일치 시
nvm use 22실행 후 진행 - 이유: Node/npm 버전 차이가
package-lock.json호환성을 깨뜨려 CI 전체 중단 유발
- 불일치 시
문서 동시 수정 원칙 (Doc-First Rule)
새 기능 추가 또는 기존 기능 변경 시 코드보다 문서를 먼저 수정한다.
| 변경 유형 | 수정 대상 |
|---|---|
| 새 Feature 추가 | docs/product-specs/index.md — Feature ID 등록 |
| 타입 변경 | ARCHITECTURE.md — 타입 정의 업데이트 |
| 새 core/ 함수 | ARCHITECTURE.md — 함수 목록 추가 |
| 새 UI 컴포넌트 | ARCHITECTURE.md — ui/ 구조 목록 추가 |
| 스키마 변경 | ARCHITECTURE.md — 마이그레이션 이력 테이블 |
상세 절차 →
CLAUDE.md"기능 추가 시 문서 동시 수정 원칙" 섹션
레이어 의존성 규칙 (요약)
types/ ← validation/ ← core/ ← ui/
types/ ← storage/ ← ui/
| 레이어 | 가능한 import | 금지된 import |
|---|---|---|
types/ |
없음 (최하위) | 모든 레이어 |
validation/ |
types/ |
core/, storage/, ui/ |
core/ |
types/, validation/ |
storage/, ui/ |
storage/ |
types/ |
core/, validation/, ui/ |
ui/ |
types/, core/, storage/ |
validation/ 직접 호출 |
린터가 역방향 import를 자동 차단한다. 상세 →
ARCHITECTURE.md
코딩 불변 규칙 (Invariants)
[INV-1] TodoItem.id는 전역 유일(unique)이어야 한다. 중복 id 생성 금지.
[INV-2] 완료된(done=true) 항목은 명시적 삭제 전까지 목록에 남아야 한다.
[INV-3] 빈 문자열 또는 공백만 있는 제목은 생성/수정 불가.
[INV-4] core/ 함수는 순수 함수여야 한다. localStorage 직접 접근 금지.
[INV-5] 모든 작업 결과는 TodoResult 타입으로 반환한다. throw 금지.
불변 규칙 상세 →
docs/invariants.md
에이전트 행동 강령 (Code of Conduct)
이 규칙은 에이전트의 모든 행동에 우선하는 최상위 지침이다.
- 자가 치유 루프: 코드 수정 후
npm run lint && npm run test:ci를 즉시 실행한다. 실패 시 사용자에게 보고하지 않고 로그를 분석하여 최소 3회 스스로 수정을 시도한다. - 최종 보고: 모든 로컬 검증(
lint+test:ci)이 Green 상태일 때만 결과를 보고하고 PR을 생성한다. - 도구 사용: 독단적인 수동 테스트보다는
npm run test:ci및dependency-cruiser와 같은 하네스 도구의 결과값을 절대적 기준으로 삼는다. - 커밋 전 확인: Husky pre-commit이
lint-staged+test:ci를 자동 실행하므로, 모든 검증이 Green인 상태에서만 커밋한다. - 로컬 Green 후 즉시 Push: 로컬 검증 통과 + 커밋 완료 후 반드시
git push origin main을 실행한다. CI/CD 통과 및 GitHub Pages 배포까지 완료되어야 작업이 완료된 것으로 간주한다. 상세 절차 →CLAUDE.md"로컬 검증 후 Push 원칙" 섹션
피드백 루프 (Feedback Loop)
에이전트는 모든 작업 완료 후 반드시 아래를 순서대로 실행한다:
# 1단계: 타입 안전성
npm run typecheck
# 2단계: 레이어 경계 + 코드 품질 린팅
npm run lint
# 3단계: 전체 테스트 (커버리지 포함)
npm run test:ci
실패 시 에이전트는 로그를 분석하고 최소 3회 자체 수정을 시도한 후 에스컬레이션한다. 사용자에게 보고하는 시점은 모든 단계가 Green일 때뿐이다.
엔트로피 관리 규칙
[ROLE-1] 하네스 에이전트는 주기적으로 다음을 스캔한다:
docs/와 코드의 불일치 (stale 문서)types/외부의 인라인 타입 정의core/에서storage/를 직접 참조하는 패턴- 미사용
TodoFilter값 및 export
발견 시: docs/exec-plans/active/에 리팩토링 계획 자동 등록
CI 자동 치유 (Auto-Heal)
CI/CD 실패 시 .github/workflows/auto-heal.yml이 자동 트리거된다.
에이전트는 Auto-Heal이 커버하지 못하는 영역만 수동 개입한다.
| Auto-Heal이 처리 | 에이전트가 처리 |
|---|---|
| Prettier 포맷 오류 | TypeScript 타입 오류 |
| ESLint 자동 수정 가능 오류 | 레이어 경계 위반 (구조 변경) |
| package-lock.json 불일치 | 테스트 로직 버그 |
Auto-Heal 커밋은 메시지에 [auto-heal]이 포함된다.
이 커밋이 원인인 CI 실패는 Auto-Heal을 재실행하지 않는다 → 에이전트가 개입해야 한다.
에스컬레이션 기준
인간 엔지니어에게 보고해야 하는 경우:
[INV-1]id 유일성 위반이 자체 수정 불가능할 때[INV-3]빈 제목 방어 테스트가 3회 이상 실패할 때storage/스키마 변경이 기존 저장 데이터와 호환 불가할 때- Auto-Heal 커밋 이후에도 CI가 반복 실패할 때 → TypeScript 오류 또는 레이어 위반 의심: 코드 구조 점검 필요
- 로컬 검증은 모두 Green이나 CI에서 반복적으로 실패할 때 → 환경 패리티 문제 의심: Node 버전, OS 차이, lock file 불일치 점검
신뢰성 기준 →
RELIABILITY.md평가 시나리오 →docs/evals.md아키텍처 →ARCHITECTURE.md