-
Claude Code Skills로 프론트엔드 AI 협업 체계 구축이코에코(Eco²)/Skills 2026. 1. 23. 01:22

작성일: 2026-01-23
프로젝트: 이코에코 (EcoEco) Frontend
기술 스택: React 19, TypeScript, Vite, IndexedDB, SSE왜 Skills가 필요했나?
문제 상황
이코에코 프로젝트에서 Agent 채팅 기능을 구현하던 중, 다음과 같은 문제들이 반복적으로 발생했습니다:
- 데이터 무결성 이슈
- IndexedDB 스키마가 백엔드 구조와 불일치
- 메시지 순서 보장 실패 (created_at vs server timestamp)
- 멀티 유저 환경에서 데이터 격리 미흡
- SSE 연결 불안정
- Vision/RAG 등 긴 작업 중 타임아웃 발생
- Session 전환 시 typing indicator 누수
- 중복 이벤트 수신
- 반복되는 빌드 에러
- TypeScript 컴파일 에러 패턴 동일
- ESLint 규칙 위반 (no-this-alias, no-unused-vars)
- Vercel 배포 실패
- AI 에이전트 컨텍스트 부족
- 매번 같은 설명 반복
- 과거 해결 방법 재발견 필요
- 일관성 없는 코드 패턴
🏗️ Skills 아키텍처 설계
핵심 원칙
1. 계층 구조 (Hierarchical Structure)
{skill-name}/ ├── SKILL.md # 빠른 참조: 의사결정 트리, 핵심 패턴 └── references/ ├── {reference-1}.md # 상세 가이드: 전체 리포트, 검증 결과 └── {reference-2}.md # 코드 예제, 트러블슈팅왜 이 구조인가?
SKILL.md: AI 에이전트가 먼저 읽는 최초 진입점references/: 필요할 때만 참조하는 상세 문서- 토큰 효율성 ↑ (불필요한 컨텍스트 로딩 ↓)
2. 의사결정 트리 (Decision Tree)
AI 에이전트가 문제 상황에서 즉시 올바른 해결책으로 이동할 수 있도록 설계:문제 발생 │ ├─ 증상 A? │ └─ references/solution-a.md §1 │ ├─ 증상 B? │ └─ references/solution-b.md §2 │ └─ 증상 C? └─ references/solution-c.md §33. 우선순위 기반 (Priority-Based)
Vercel React Best Practices를 참고하여 우선순위 구조 도입:CRITICAL → HIGH → MEDIUM-HIGH → MEDIUM → LOW-MEDIUM → LOW📚 6개 Skills 상세
1. Agent Feature Skill
목적: Agent 페이지 구현 가이드 (SSE 스트리밍, 사이드바, 마크다운 렌더링)
사용 시기:- Agent 채팅 UI 구현
- SSE 토큰 스트리밍
- 이미지/위치 정보 통합
핵심 References:
frontend-stack.md: 기술 스택, 컨벤션api-spec.md: API 엔드포인트, SSE 형식component-design.md: 컴포넌트 설계existing-code-reference.md: 재사용 가능한 코드
실전 예시:
// SSE 스트리밍 구현 (agent-feature/SKILL.md 참조) const es = new EventSource(`/api/v1/chat/${chatId}/messages/${messageId}/stream`); es.addEventListener('token', (e) => { const data = JSON.parse(e.data); setStreamingText(prev => prev + data.token); }); es.addEventListener('stage', (e) => { const data = JSON.parse(e.data); setCurrentStage(data.stage_name); }); es.addEventListener('done', () => { es.close(); markMessageAsCommitted(messageId); });2. Data Integrity Skill
목적: 데이터 무결성과 일관성 관리 (IndexedDB v3, Optimistic Updates)
사용 시기:- IndexedDB 스키마 설계
- Optimistic Update 구현
- Eventual Consistency 패턴
핵심 개념:
3계층 아키텍처:Layer 1: React State (메모리) ↓ Optimistic Update Layer 2: IndexedDB (브라우저) ↓ Background Sync Layer 3: Backend DB (PostgreSQL)IndexedDB v3 스키마 계층화:
// data-integrity/references/indexeddb-schema.md export interface MessageRecord extends AgentMessage { /** 사용자 ID (Backend: users_accounts.id) */ user_id: string; /** 세션 ID (Backend: chat_conversations.id) */ session_id: string; /** 동기화 상태 (0: pending, 1: committed) */ synced: 0 | 1; /** 로컬 타임스탬프 (클라이언트 생성 시각) */ local_timestamp: number; } // 계층적 인덱스 indexes: { 'by-user-session': [string, string], // user_id + session_id 'by-user-session-created': [string, string, string], // + created_at 'by-session': string, // session_id 'by-session-created': [string, string], // session_id + created_at 'by-status': string, // 상태별 조회 'by-synced': number, // 미동기화 메시지 'by-local-timestamp': number, // 시간 기반 정렬 }Optimistic Update 상태 전이:
pending (낙관적 업데이트) ↓ SSE done 이벤트 committed (서버 확인) ↓ 에러 발생 시 failed (재시도 필요)핵심 References:
indexeddb-schema.md: v3 스키마 전문, 계층 구조, ID 매핑message-ordering.md: created_at 기반 순서 보장, 1309줄 상세 가이드optimistic-updates.md: 상태 전이, Reconcile 로직
실전 효과:
Before (v2):// chat_id만으로 저장 → 멀티 유저 격리 불가 await db.add('messages', { chat_id: '...', content: '...', });After (v3):
// user_id + session_id로 명확한 계층화 await db.add('messages', { user_id: 'user-123', session_id: 'chat-456', // Backend: chat_conversations.id content: '...', synced: 0, // Optimistic update local_timestamp: Date.now(), });결과:
- ✅ 멀티 유저 환경에서 데이터 격리
- ✅ 백엔드 스키마와 명명 일치
- ✅ 30초 retention window로 Eventual Consistency 보장
3. Troubleshooting Skill
목적: 실전 문제 해결 가이드 (빌드 에러, 이미지 업로드, SSE 연결)
사용 시기:- TypeScript 컴파일 에러
- ESLint 규칙 위반
- Vercel 배포 실패
- 이미지 업로드 400 에러
- SSE 타임아웃/중복 수신
의사결정 트리:
증상 파악 │ ├─ TypeScript 빌드 실패? │ └─ references/build-errors.md │ ├─ §1.1 타입 불일치 │ ├─ §1.2 Property Does Not Exist │ └─ §1.3 레거시 인덱스 타입 에러 │ ├─ ESLint 에러? │ └─ references/build-errors.md │ ├─ §2.1 no-this-alias → 화살표 함수 │ └─ §2.2 no-unused-vars → _ prefix │ └─ 이미지 업로드 400? └─ references/image-upload-fix.md ├─ Pydantic HttpUrl 검증 실패 └─ 빈 문자열 → undefined 처리실전 해결 사례:
Case 1: 이미지 업로드 400 에러// ❌ 문제: 빈 문자열이 Pydantic HttpUrl 검증 실패 const requestData: SendMessageRequest = { message, image_url: '', // Backend: 422 Unprocessable Entity }; // ✅ 해결: undefined로 필드 자체를 제외 const requestData: SendMessageRequest = { message, image_url: finalImageUrl || undefined, // 빈 문자열 → undefined };Case 2: ESLint no-this-alias
// ❌ 문제 this.initPromise = (async () => { const self = this; // ESLint: no-this-alias this.db = await openDB({ blocking() { self.db?.close(); // function() 내부에서 this 불가 } }); })(); // ✅ 해결: 화살표 함수로 this 보존 this.initPromise = (async () => { this.db = await openDB({ blocking: () => { this.db?.close(); // ✅ 화살표 함수로 this 접근 가능 }, }); })();일반적인 패턴:
- Race condition 방지 (ref flag)
- Memory leak 방지 (cleanup 함수)
- 에러 로깅 (context 포함)
핵심 References:
build-errors.md: TypeScript/ESLint/Vercel 에러 패턴 (300줄)image-upload-fix.md: 이미지 업로드 진단 및 해결 (585줄)
4. Code Quality Skill
목적: 코드 품질 관리 (Prettier, ESLint, TypeScript, Agent Skills)
사용 시기:- 코드 컨벤션 확인
- 품질 메트릭 검증
- Agent Skills 활용 패턴
필수 검증 기준:
항목 기준 검증 방법 Prettier 100% 통과 npx prettier --checkESLint 0 에러, 0 경고 npx eslintTypeScript 빌드 성공 npm run buildGit 브랜치/커밋 규칙 Pre-commit hook Import 순서 컨벤션:
// 1. React & 외부 라이브러리 import { useState, useEffect } from 'react'; import { useQuery } from '@tanstack/react-query'; // 2. 내부 컴포넌트 import { AgentSidebar } from '@/components/agent'; // 3. 훅 import { useAgentSSE } from '@/hooks/agent/useAgentSSE'; // 4. 서비스 & 타입 import { AgentService } from '@/api/services/agent'; import type { ChatSummary } from '@/api/services/agent'; // 5. 상수 & 유틸 import { AGENT_CONFIG } from '@/constants/AgentConfig';파일 네이밍 규칙:
유형 컨벤션 예시 컴포넌트 PascalCase AgentContainer.tsx훅 camelCase + use useAgentSSE.ts타입 PascalCase AgentTypes.ts서비스 kebab-case + .service agent.service.ts유틸 camelCase messageUtils.ts코드 리뷰 체크리스트:
# 필수 확인 [ ] Prettier 포맷팅 통과 [ ] ESLint 0 에러, 0 경고 [ ] TypeScript 빌드 성공 [ ] 파일 네이밍 규칙 준수 [ ] Import 순서 준수 # 권장 확인 [ ] JSDoc 주석 작성 (public API) [ ] 복잡한 로직 인라인 주석 [ ] 에러 핸들링 구현 [ ] Memory leak 방지 (cleanup) [ ] Race condition 방지 # 선택 확인 [ ] 단위 테스트 작성 [ ] E2E 테스트 시나리오 [ ] 성능 최적화 (useMemo, useCallback) [ ] 접근성 (ARIA labels)핵심 References:
conventions.md: 전체 품질 검증 리포트 (12개 섹션, 531줄)agent-skills.md: Vercel AI SDK 활용 패턴 (955줄)
실전 효과:
검증 전:TypeScript: 5 errors ESLint: 3 errors, 2 warnings Vercel: ❌ Deployment failed검증 후:
TypeScript: ✅ 0 errors ESLint: ✅ 0 errors, 0 warnings Vercel: ✅ Deployment successful5. Vercel React Best Practices Skill
목적: Vercel 공식 React 성능 최적화 (AI 에이전트용, 40+ 규칙)
출처: vercel-labs/agent-skills
버전: 1.0.0 (2026년 1월)
사용 시기:- Waterfall 제거 필요
- 번들 크기 초과
- 서버/클라이언트 성능 최적화
우선순위 구조:
CRITICAL (즉각적 대응 필요) ├─ 1. Waterfalls 제거 (5 규칙) ← #1 성능 킬러 └─ 2. 번들 크기 최적화 (5 규칙) HIGH (높은 영향도) └─ 3. 서버 사이드 성능 (7 규칙) MEDIUM-HIGH └─ 4. 클라이언트 데이터 페칭 (4 규칙) MEDIUM ├─ 5. 리렌더 최적화 (7 규칙) └─ 6. 렌더링 성능 (7 규칙) LOW-MEDIUM └─ 7. JavaScript 성능 (12 규칙) LOW └─ 8. 고급 패턴 (2 규칙)Top 5 핵심 규칙:
#1: Waterfalls 제거 ⚡ CRITICAL// ❌ 문제: 순차적 await가 네트워크 레이턴시 누적 // 300ms + 300ms = 600ms const user = await fetchUser(); const posts = await fetchPosts(user.id); // ✅ 해결: better-all로 dependency-based 병렬화 // max(300ms, 300ms) = 300ms import { all } from 'better-all'; const { user, posts } = await all({ async user() { return fetchUser(); }, async posts() { return fetchPosts((await this.$.user).id); // 의존성 명시 }, });영향: 2-10배 개선
#2: Barrel File Import 회피 📦 CRITICAL// ❌ 문제: 전체 icons/ 폴더가 번들에 포함 import { CheckIcon } from '@/icons'; // ✅ 해결: 필요한 파일만 직접 import import { CheckIcon } from '@/icons/CheckIcon'; // 특히 주의: lucide-react, @mui/material, react-icons import Send from 'lucide-react/dist/esm/icons/send';#3: React.cache() 중복 제거 ⚡ HIGH
// ✅ 서버 컴포넌트에서 요청당 1회만 실행 import { cache } from 'react'; export const getUser = cache(async (id: string) => { return await db.user.findUnique({ where: { id } }); }); // 여러 컴포넌트에서 호출해도 1번만 DB 쿼리 <UserProfile userId="123" /> // DB 쿼리 <UserAvatar userId="123" /> // 캐시 사용#4: Dynamic Import (Heavy Components) 📦 CRITICAL
// ❌ 문제: 초기 번들에 포함 (500KB+ 차트 라이브러리) import HeavyChart from './HeavyChart'; // ✅ 해결: 사용 시점에 로드 const HeavyChart = dynamic(() => import('./HeavyChart'), { loading: () => <Skeleton />, ssr: false, // 클라이언트 전용 });#5: Passive Event Listeners 🎯 MEDIUM-HIGH
// ❌ 문제: 스크롤 성능 저하 element.addEventListener('scroll', handler); // ✅ 해결: 브라우저 최적화 허용 element.addEventListener('scroll', handler, { passive: true });이코에코 프로젝트 적용 로드맵:
Phase 1 (즉시 적용):- Bundle size 분석 (rollup-plugin-visualizer)
- lucide-react imports 수정
- better-all 도입 (useAgentChat waterfall 제거)
Phase 2 (다음 스프린트):
- Dynamic imports (Heavy components)
- React.cache() (서버 컴포넌트 전환 시)
- Passive listeners (스크롤 최적화)
Phase 3 (장기):
- ESLint plugin 도입 (출시 후)
- Performance budget CI/CD
- Lighthouse CI 통합
핵심 References:
react-performance.md: Vercel 공식 40+ 규칙 전문 (2,516줄!)
6. Webapp Testing Skill
목적: 웹앱 테스트 스킬 (기존)
사용 시기: 테스트 시나리오 작성
Note: 기존 스킬 유지, 향후 확장 예정🎯 Skills 사용 흐름
Scenario 1: 새 기능 구현 시
1. agent-feature/SKILL.md ├─ 컴포넌트 설계 확인 └─ API 스펙 확인 2. code-quality/SKILL.md ├─ 컨벤션 준수 └─ Import 순서 3. vercel-react-best-practices/SKILL.md ├─ Waterfall 제거 └─ 번들 크기 확인 4. data-integrity/SKILL.md (필요 시) ├─ IndexedDB 저장 └─ Optimistic UpdateScenario 2: 문제 해결 시
1. troubleshooting/SKILL.md ├─ 증상별 의사결정 트리 └─ 해결 방법 참조 2. troubleshooting/references/ ├─ build-errors.md (빌드 실패) └─ image-upload-fix.md (이미지 에러)Scenario 3: 코드 리뷰 시
1. code-quality/SKILL.md ├─ Prettier/ESLint 검증 └─ TypeScript 컴파일 2. code-quality/references/conventions.md ├─ 전체 체크리스트 └─ 품질 메트릭📊 정량적 효과
Before Skills (v1.0.0)
문제 발생 빈도:
- TypeScript 빌드 에러: 주 3-4회
- ESLint 위반: 주 5-6회
- 같은 문제 재발: 주 2-3회
- AI 에이전트 컨텍스트 설명 시간: 평균 10분
코드 품질:
- Prettier 통과율: ~85%
- ESLint 통과율: ~90%
- Vercel 배포 실패율: ~15%
After Skills (v2.0.0)
문제 발생 빈도:
- TypeScript 빌드 에러: 주 0-1회
- ESLint 위반: 주 0-1회
- 같은 문제 재발: 거의 없음
- AI 에이전트 컨텍스트 설명 시간: 평균 1분
코드 품질:
- Prettier 통과율: 100% ✅
- ESLint 통과율: 100% ✅
- Vercel 배포 실패율: 0% ✅
토큰 효율성:
- 평균 컨텍스트 토큰: 37,705 / 200,000 (18.85%)
- 불필요한 설명 감소: ~70%
💡 배운 점 (Lessons Learned)
1. AI 에이전트는 "기억"보다 "참조"를 선호한다
처음엔 긴 대화로 컨텍스트를 쌓으려 했지만, 토큰 제한과 컨텍스트 손실 문제가 있었습니다.
해결: Skills를 "외부 기억"으로 설계- SKILL.md = 목차 (빠른 스캔)
- references/ = 상세 내용 (필요 시 참조)
2. 의사결정 트리가 핵심이다
AI 에이전트가 "어떤 문서를 읽을지" 결정하는 것이 가장 중요합니다.
Before:"빌드 에러가 발생했습니다" → 전체 문서 스캔 (비효율적)After:
"빌드 에러가 발생했습니다" → troubleshooting/SKILL.md 의사결정 트리 확인 → TypeScript 빌드 실패? → references/build-errors.md §1 → 즉시 해결3. 우선순위가 명확해야 한다
Vercel React Best Practices의 CRITICAL/HIGH/MEDIUM 구조를 도입한 후, AI 에이전트가 중요한 문제를 먼저 해결하게 되었습니다.
4. 계층 구조는 유지보수성을 높인다
{skill-name}/ ├── SKILL.md # 변경 빈도: 낮음 └── references/ ├── {ref-1}.md # 변경 빈도: 중간 └── {ref-2}.md # 변경 빈도: 높음SKILL.md는 안정적으로 유지하고, references/만 업데이트하면 됩니다.
5. 외부 표준(Vercel)을 통합하면 신뢰성이 올라간다
자체 컨벤션만 있을 때보다, Vercel 공식 가이드를 통합한 후 AI 에이전트의 판단이 더 정확해졌습니다.
🔄 Skills 업데이트 전략
Trigger-based Update
각 Skill은 명확한 업데이트 트리거를 가집니다:
agent-feature Frontend 컨벤션 변경, API 스펙 변경 data-integrity IndexedDB 스키마 변경, Reconcile 정책 변경 troubleshooting 새로운 에러 패턴 발견, 해결 방법 추가 code-quality 컨벤션 변경, ESLint 규칙 추가 vercel-react-best-practices Vercel agent-skills 저장소 업데이트 webapp-testing 테스트 전략 변경 Versioning
v1.0.0 (2025-12-15) - docs/reports/ 기반 - agent-feature, webapp-testing 스킬 v2.0.0 (2026-01-23) ← 현재 - .claude/skills/ 마이그레이션 - Vercel React Best Practices 통합 - 계층 구조 도입 (SKILL.md + references/) - 6개 전문 스킬 체계화GitHub Watch
Vercel agent-skills 저장소를 모니터링:
# GitHub → Watch → Custom → Releases only # https://github.com/vercel-labs/agent-skills새 버전 릴리즈 시
references/react-performance.md업데이트🚀 실전 적용 사례
Case Study 1: 이미지 업로드 400 에러
증상:
POST /api/v1/chat/.../messages 400 (Bad Request)AI 에이전트 행동 (Before Skills):
- 전체 코드 읽기
- 추측으로 여러 가능성 제시
- 사용자에게 로그 요청
- 시행착오 반복
AI 에이전트 행동 (After Skills):
troubleshooting/SKILL.md의사결정 트리 확인- "이미지 업로드 400?" →
references/image-upload-fix.md참조 - Pydantic
HttpUrl검증 실패 패턴 매칭 - 즉시 해결:
image_url: finalImageUrl || undefined
근본 원인:
// Backend (FastAPI Pydantic) class SendMessageRequest(BaseModel): image_url: Optional[HttpUrl] = None # HttpUrl은 빈 문자열 거부 // Frontend (Before) image_url: '', // ❌ Pydantic 검증 실패 // Frontend (After) image_url: finalImageUrl || undefined, // ✅ undefined로 필드 제외Case Study 2: IndexedDB 스키마 계층화
증상:
- 멀티 유저 환경에서 메시지 충돌
- chat_id 네이밍이 백엔드와 불일치
AI 에이전트 행동 (Before Skills):
- IndexedDB 코드 전체 읽기
- 백엔드 스키마 추측
- 여러 번 수정 반복
소요 시간: ~2시간
AI 에이전트 행동 (After Skills):data-integrity/SKILL.md참조references/indexeddb-schema.mdv3 스키마 확인- 백엔드 매핑 (users → conversations → messages) 확인
- Migration 로직 작성 (v2 → v3)
소요 시간: ~20분
결과:// Before (v2) { chat_id: '...', // 불명확한 네이밍 content: '...', } // After (v3) { user_id: 'user-123', // users_accounts.id session_id: 'chat-456', // chat_conversations.id content: '...', synced: 0, local_timestamp: Date.now(), }Case Study 3: Vercel 배포 실패
증상:
Vercel – eco2 fail Deployment has failed Vercel – frontend fail Deployment has failedAI 에이전트 행동 (After Skills):
troubleshooting/SKILL.md→ "Vercel 배포 실패?"references/build-errors.md→ TypeScript 컴파일 에러 섹션- 로컬에서
npm run build실행 - 5개 에러 패턴 매칭 및 수정:
- deleteChat 인덱스 이름 (
by-chat→by-session) - Migration transaction 파라미터
- 레거시 인덱스 타입 (
as any캐스팅) - ESLint no-this-alias (화살표 함수)
- 미사용 파라미터 (
_prefix)
- deleteChat 인덱스 이름 (
- 재배포 → ✅ 성공
소요 시간: ~15분
결과:# Before npm run build ❌ 5 errors # After npm run build ✅ 0 errors📖 참고 자료
External Resources
Vercel:
Claude Code:
Internal Resources
Skills Structure:
.claude/skills/ ├── README.md # Skills 개요 및 사용 흐름 ├── agent-feature/ │ ├── SKILL.md │ └── references/ │ ├── frontend-stack.md │ ├── api-spec.md │ ├── component-design.md │ └── existing-code-reference.md ├── data-integrity/ │ ├── SKILL.md │ └── references/ │ ├── indexeddb-schema.md # 335줄 │ ├── message-ordering.md # 1,309줄 │ └── optimistic-updates.md ├── troubleshooting/ │ ├── SKILL.md │ └── references/ │ ├── build-errors.md # 300줄 │ └── image-upload-fix.md # 585줄 ├── code-quality/ │ ├── SKILL.md │ └── references/ │ ├── conventions.md # 531줄 │ └── agent-skills.md # 955줄 ├── vercel-react-best-practices/ │ ├── SKILL.md │ └── references/ │ └── react-performance.md # 2,516줄! └── webapp-testing/ └── SKILL.md총 문서량: ~7,000줄 (코드 예제 포함)
Skills 체계가 가져온 변화
1. 개발 속도 ↑
- 문제 해결 시간: 평균 70% 감소
- 같은 에러 재발: 거의 없음
- AI 에이전트 컨텍스트 설명: 1/10 수준
2. 코드 품질 ↑
- Prettier/ESLint 100% 통과
- Vercel 배포 실패율 0%
- 일관된 컨벤션 준수
3. 협업 효율성 ↑
- AI 에이전트와 자연스러운 협업
- 명확한 의사결정 트리
- 외부 표준(Vercel) 통합
4. 유지보수성 ↑
- 명확한 계층 구조
- Trigger-based 업데이트
- 문서화된 지식 체계
팀에게 전하고 싶은 것
"AI 에이전트는 팀원이다"
Claude Code와 함께 일하면서, AI 에이전트를 단순한 "도구"가 아닌 "지식 체계를 공유하는 팀원"으로 대하는 것이 핵심입니다.
Skills는 그 지식 체계의 구조화된 형태입니다.
"문서화는 미래의 나를 돕는다"
Skills는 단순히 AI 에이전트뿐만 아니라 미래의 내가 참조할 지식 베이스입니다. 이후 같은 문제가 다시 발생해도 Skills를 보면 수월하게 해결할 수 있습니다.
"표준을 따르되, 표준을 만들기도 하자"
Vercel의 공식 가이드를 통합하면서도, 이코에코만의 컨텍스트(IndexedDB, SSE, Optimistic Updates)를 추가했습니다.Skills 개선에 참여하기
1. 새 Skill 추가:
mkdir -p .claude/skills/{skill-name}/references touch .claude/skills/{skill-name}/SKILL.md2. Reference 추가:
touch .claude/skills/{skill-name}/references/{reference-name}.md3. Skill 업데이트:
- SKILL.md의 의사결정 트리 갱신
- References 링크 추가
- README.md 업데이트
4. 피드백:
- GitHub Issues: 버그 리포트, 개선 제안
- Pull Requests: 직접 기여
- Discussions: 사용 사례 공유
License & Attribution
External Attributions:
- Vercel React Best Practices: MIT License
- Source: vercel-labs/agent-skills
- Copyright © 2026 Vercel, Inc.
Internal Attribution:
- EcoEco Frontend Team
- Claude Opus 4.5 (AI Agent)
Appendix: Skills 빠른 참조표
빌드 에러 troubleshooting build-errors.md 이미지 업로드 실패 troubleshooting image-upload-fix.md IndexedDB 설계 data-integrity indexeddb-schema.md 메시지 순서 data-integrity message-ordering.md Waterfall 제거 vercel-react-best-practices §1 번들 크기 vercel-react-best-practices §2 컨벤션 검증 code-quality conventions.md Agent UI 구현 agent-feature component-design.md SSE 스트리밍 agent-feature api-spec.md Optimistic Update data-integrity optimistic-updates.md Vercel AI SDK code-quality agent-skills.md React 성능 vercel-react-best-practices react-performance.md '이코에코(Eco²) > Skills' 카테고리의 다른 글
Chat Eval Pipeline Integration Plan - Expert Review Loop Tracker (0) 2026.02.09 skillsmp: senior-data-scientist (0) 2026.01.30 이코에코(Eco²) Agent Skills: Function Calling Agent (0) 2026.01.20 이코에코(Eco²) Agent Skills: Message Consumer Reference (0) 2026.01.19 이코에코(Eco²) Agent Skills: Checkpointer Reference (0) 2026.01.19 - 데이터 무결성 이슈