Agent skill

validating-cards

USE THIS SKILL for card content validation — fact-checking, freshness, similarity, context consistency, or anything about duplicate detection and card quality. Triggers: "팩트 체크 결과가", "유사한 카드 찾아줘", "문맥 검증", "검증 캐시", "최신성 검사", "중복 카드", "검증 상태 아이콘", "validate/all", "Jaccard", "임베딩 유사도", "중복 판정", "useValidateCard", "useBatchValidate", "검증 4종", "일괄 검증", "context-checker", "fact-checker", "freshness-checker", "similarity-checker", "findSimilarGroups", "analyzeCardGroup", "검증 폴백". Covers the 4 validation types: fact-check, freshness, similarity, context.

Stars 0
Forks 0

Install this agent skill to your Project

npx add-skill https://github.com/greenheadHQ/awesome-anki/tree/main/.claude/skills/validating-cards

SKILL.md

카드 검증

검증 4종 개요

검증 파일 API 방식
팩트 체크 fact-checker.ts POST /api/validate/fact-check LLM 기반 (Gemini/OpenAI)
최신성 freshness-checker.ts POST /api/validate/freshness LLM 기반 (Gemini/OpenAI)
유사성 similarity-checker.ts POST /api/validate/similarity Jaccard 또는 임베딩
문맥 일관성 context-checker.ts POST /api/validate/context LLM 기반 (Gemini/OpenAI, nid 링크 그룹)

전체 검증: POST /api/validate/all — 4종 병렬 실행

모델 선택 (LLM 기반 검증만 해당): 팩트 체크, 최신성, 문맥 일관성 API에 provider/model 파라미터 지정 가능 (미지정 시 서버 기본값, resolveModelId() 참조). 유사성 검사는 LLM을 사용하지 않으므로 provider/model 파라미터가 없다.

유사성 검사: Jaccard vs 임베딩

비교 Jaccard 임베딩
방식 단어 집합 + 2-gram OpenAI 의미 벡터 (text-embedding-3-large, 3072차원)
속도 빠름 (로컬) 느림 (API 호출)
정확도 표면적 유사도 의미적 유사도
기본 threshold 70% 85%
중복 판정 임계값 90% 이상 95% 이상
  • useEmbedding: true 옵션으로 임베딩 모드 활성화 — managing-embeddings 스킬 참조
  • 임베딩 실패 시 자동으로 Jaccard 폴백 (에러 로그 출력 후 Jaccard로 재시도)
  • validate/all은 항상 Jaccard만 사용 (기본값 useEmbedding: false로 호출)
  • 임베딩 모드는 /api/validate/similarity에서 명시적으로 useEmbedding: true 요청할 때만 활성화

덱 전체 유사 카드 그룹 탐지

typescript
// Jaccard 기반 그룹 탐지 (임베딩 미사용)
const groups = await findSimilarGroups(cards, { threshold: 70 });
// Map<number, number[]> — noteId → 유사한 noteId 배열

문맥 일관성 검사

  • nid 링크로 연결된 카드 그룹 분석
  • 역방향 링크 검색 (다른 카드가 이 카드를 참조하는 경우)
  • LLM 기반 논리적 연결 확인 (Gemini/OpenAI)
  • analyzeCardGroup(cards, options) — 카드 그룹 전체의 일관성 분석 (각 카드별 checkContext 순차 실행, 전체 일관성 점수 합산)

프론트엔드 훅 (packages/web/src/hooks/useValidationCache.ts)

typescript
// 단일 카드 검증 (TanStack Query mutation)
const { mutate } = useValidateCard(deckName);
mutate(noteId);  // → api.validate.all(noteId, deckName) 호출

// 여러 카드 일괄 검증 (순차 실행, API 부하 방지)
const { mutate: batchMutate } = useBatchValidate(deckName);
batchMutate(noteIds);

// 검증 캐시 직접 접근
const { getValidation, setValidation, clearValidation, clearAllValidations,
        getValidationStatuses, uncachedCount, cacheSize } = useValidationCache();

검증 캐싱

  • 저장소: localStorage + useSyncExternalStore
  • TTL: 24시간
  • 전역 상태 공유: 각 컴포넌트에서 별도 React 상태 생성하면 동기화 안 됨 → useSyncExternalStore 필수
typescript
// 전역 캐시 상태 (React 외부)
let globalCache: ValidationCache = loadCacheFromStorage();
const listeners = new Set<() => void>();

export function useValidationCache() {
  const cache = useSyncExternalStore(subscribe, getSnapshot);
  // ...
}

CardBrowser 검증 상태

  • 검증 결과 아이콘: (통과) / (경고) / (실패) / (미검증)
  • 필터 옵션: 전체, 분할 가능, 미검증, 검토 필요

자주 발생하는 문제

  • 캐시 미동기화: useValidationCacheuseSyncExternalStore로 구현해야 컴포넌트 간 공유 가능
  • 검증 결과 미반영: 검증 성공 후 CardBrowser 상태가 안 바뀌면 전역 캐시 확인
  • 임베딩 폴백: OPENAI_API_KEY 미설정이나 API 장애 시 임베딩 모드가 Jaccard로 자동 폴백
  • validate/all은 Jaccard 전용: validate/all에서 유사성 검사 시 useEmbedding 옵션을 전달하지 않으므로 항상 Jaccard 사용

상세 참조

  • references/validators.md — 4종 검증기 상세 (요청/응답 형식)
  • references/caching.md — localStorage + useSyncExternalStore 패턴
  • references/troubleshooting.md — 검증 관련 이슈

Expand your agent's capabilities with these related and highly-rated skills.

greenheadHQ/awesome-anki

developing-web-ui

React 프론트엔드의 컴포넌트, 훅, 렌더링, 스타일 관련 작업이면 반드시 이 스킬을 먼저 확인할 것. Triggers: "React 컴포넌트 추가", "ContentRenderer 수정", "TanStack Query", "CSS 충돌", "웹 UI 버그", "페이지 추가", "Tailwind 스타일", "렌더링 문제", "shadcn", "shadcn 컴포넌트", "shadcn 마이그레이션", "variant API", "UI 마이그레이션", "마이그레이션", "toast", "sonner", "Toaster", "DiffViewer", "ContentPreview", "BottomSheet", "CompactSelector", "markdown 렌더링", "모바일 반응형", "useMediaQuery", "useIsMobile", "훅 추가", "query hook", "캐시 무효화", "staleTime", "분할 미리보기 UI", "분할 반려 UI", "카드 브라우저", "어려운 카드". Covers the React frontend, components, hooks, query patterns, rendering pipeline, and UI troubleshooting.

0 0
Explore
greenheadHQ/awesome-anki

managing-embeddings

USE THIS SKILL for anything related to embeddings, vector similarity, or semantic search. Triggers: "임베딩 생성", "코사인 유사도", "캐시 어디에", "임베딩 상태", "의미 유사도", "text-embedding-3-large", "openai embedding", "벡터 차원", "3072", "임베딩 캐시", "embedding 마이그레이션", "레거시 캐시", "embedding fallback", "유사도 검사 임베딩 모드", "임베딩 배치", "rate limit 429". Covers OpenAI embedding API, file-based cache with migration, and text preprocessing.

0 0
Explore
greenheadHQ/awesome-anki

understanding-project

프로젝트 구조, 아키텍처, 기술 스택, 패키지 역할 등 전반적인 이해가 필요할 때 사용. 코드가 어디에 있는지, 패키지 간 의존성이 어떤지, 왜 이 구조인지 궁금하면 이 스킬. Triggers: "모노레포 구조가 어떻게 돼", "기술 스택", "export 충돌", "패키지 간 의존성", "프로젝트 구조", "어떤 패키지에 있어", "파일 어디에 있어", "아키텍처", "디렉터리 구조", "코드 위치", "모듈 역할", "어떤 기술 쓰고 있어", "스택", "의존성". Covers the monorepo architecture, package roles, tech stack, and coding conventions.

0 0
Explore
greenheadHQ/awesome-anki

managing-llm

LLM 추상화 계층, 프로바이더 어댑터, 가격표, 예산 가드 등 LLM 관련 작업이면 무조건 이 스킬. 모델 변경, 프로바이더 추가, 비용 계산, 토큰 카운트 등 모든 LLM 인프라를 다룬다. Triggers: "LLM 모델 변경", "프로바이더 추가", "비용 추정", "예산 가드", "pricing table", "모델 비교", "LLM 비용", "토큰 사용량", "모델 추가", "LLM 설정", "Gemini", "OpenAI", "API key", "model pricing", "budget cap", "token count", "adapter", "factory".

0 0
Explore
greenheadHQ/awesome-anki

working-with-anki

AnkiConnect 연결, 카드/덱/모델 조회, 학습 데이터 복제, 백업/롤백, 어려운 카드 탐지, 커스텀 config 액션 등 Anki와의 모든 상호작용을 다룬다. Triggers: "AnkiConnect 연결", "test 프로필", "ease factor 복제", "카드 정보 조회", "학습 데이터", "AnkiConnect API", "Anki 프로필", "카드 모델", "어려운 카드", "난이도 탐지", "difficulty", "백업", "롤백", "분할 적용", "scheduling", "스케줄링", "getConfig", "setConfig", "커스텀 액션". Covers AnkiConnect API wrapper, scheduling clone, backup/rollback, difficulty detection, and custom config actions.

0 0
Explore
greenheadHQ/awesome-anki

splitting-cards

카드 분할 로직, LLM 기반 Split, nid 승계 전략, 텍스트 파서, 비용 추정, 배치 분할 등 카드 분할의 모든 측면을 다룬다. Triggers: "Split 결과가 이상해", "파서 버그", "분할 미리보기", "nid 승계", "Cloze 번호 리셋", "컨테이너 파서", "카드 분할", "atomic card", "분할 비용", "split cost", "배치 분할", "batch split", "분할 적용", "split apply", "분할 검증", "스타일 보존". Covers Split logic, nid inheritance strategy, text parsers, cost estimation, batch split, and split validation.

0 0
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results