개요
AIFlare는 Claude Code의 Hook(자동 트리거)과 Skill(에이전트 실행)을 조합하여, AI 에이전트의 작업 컨텍스트를 자동으로 캡처합니다. 세션 시작부터 코드 push까지 전 과정에서 대화, 태스크, 커밋 의도를 기록하며, 모든 캡처 동작은 실패해도 현재 작업을 중단하지 않습니다.
워크세션 생성
Claude Code 세션이 시작되면 SessionStart Hook이 자동으로 실행되어 워크세션을 등록합니다.
claudeSessionId와 agentType을 AIFlare 서버에 전달합니다. 이 세션 ID가 이후 모든 캡처를 하나의 워크세션으로 묶는 핵심 키가 됩니다.
POST /api/v1/work-sessions
세션 종료 시(SessionEnd Hook) 로컬 임시 파일을 정리하고, 빈 세션은 삭제합니다.
대화 캡처
사용자가 입력한 프롬프트와 AI의 응답을 모두 자동으로 기록합니다.
UserPromptSubmit Hook이 사용자 입력을, Stop Hook이 AI 응답을 JSONL 형식으로 로컬 파일에 누적 저장합니다.
AI 에이전트가 응답을 완료할 때마다 Stop Hook이 실행되어, 응답 텍스트를 같은 파일에 추가합니다.
{"role":"user","content":"Update the config"} {"role":"assistant","content":"Config updated. Changed the timeout value in config.yml..."} {"role":"user","content":"Add tests too"} {"role":"assistant","content":"Tests added. Added to ConfigServiceTest..."}
파일명에 세션 ID가 포함되어 세션별로 대화가 분리됩니다. 이 대화 기록은 커밋 시 delta 추출되어, 해당 커밋의 '관련 프롬프트'로 대시보드에 표시됩니다.
태스크 추적
에이전트가 생성하고 완료하는 태스크를 AIFlare에 자동으로 기록합니다.
TaskCreated Hook은 태스크 생성 시, TaskCompleted Hook은 태스크 완료 시 AIFlare API를 호출합니다. claudeSessionId로 워크세션과 연결되어, 대시보드에서 세션별 태스크 진행 상황이 표시됩니다.
POST /api/v1/captures/tasks { "externalTaskId": "task-001", "claudeSessionId": "sess-abc123", "title": "Add i18n translation keys", "description": "Add docs keys to ko.json" }
커밋 후 처리
git commit 완료 직후 자동 실행되는 PostToolUse Hook이 3가지 역할을 수행합니다.
- 1.세션 대화 전송 — 누적된 전체 JSONL을 서버에 전송합니다.
- 2.Delta 추출 — 줄 수(메시지 인덱스) 기반으로 이전 캡처 이후의 새 대화만 추출합니다.
- 3.Skill 호출 강제 — context-capture Skill 실행을 보장하는 메시지를 출력합니다.
# Conversation file (6 lines accumulated) Line 1-2: First task conversation (user + assistant) Line 3-4: Second task conversation (user + assistant) # ── First commit → delta: Line 1-4 (full) ── Line 5-6: Third task conversation (user + assistant) # ── Second commit → delta: Line 5-6 (new conversation only) ──
각 커밋 시점에 이전 캡처 이후에 새로 발생한 대화만 정확히 추출되어, 해당 커밋의 관련 프롬프트로 저장됩니다.
컨텍스트 캡처
git commit 시 에이전트의 작업 의도, 검토한 대안, 변경 사항을 자동으로 요약하여 전송합니다.
context-capture Skill이 커밋 직후 자동 활성화됩니다. 에이전트가 자신의 대화 컨텍스트를 분석하여 요약 데이터를 생성하고, capture.sh 스크립트가 delta 파일을 자동으로 읽어 conversationSnippet과 함께 Capture API를 호출합니다.
bash .claude/skills/context-capture/scripts/capture.sh \ --title "Add Korean translation keys for Getting Started guide" \ --intent "Add docs.gettingStarted keys to ko.json for i18n support" \ --commit-hash "e395786" \ --agent-type "CLAUDE_CODE" \ --changed-files "ko.json" \ --tag "FEATURE"
캡처 데이터 필드
- •title — 작업 제목 (50자 이내)
- •intent — 왜 이 변경이 필요했는가 (Problem → Solution → Effect)
- •alternatives — 검토했지만 선택하지 않은 대안
- •diffSummary — 핵심 변경 사항 요약
- •tag — 작업 성격 (FEATURE, BUGFIX, REFACTORING, TEST, DOCS)
- •changedFiles — 변경된 파일 목록
- •conversationSnippet — 이 커밋과 관련된 대화 조각 (자동 추출)
Push 상태 전환
git push 실행 시 pre-push hook이 자동으로 실행되어, 로컬 엔트리를 PUSHED 상태로 전환합니다.
push되는 커밋 해시 목록을 추출하여 Publish API를 호출합니다. 서버에서 해당 커밋의 엔트리를 LOCAL → PUSHED로 상태 전환합니다.
git push → pre-push hook triggered → POST /api/v1/captures/publish { commitHashes, branch } → Transition LOCAL entries to PUSHED
rebase/amend로 해시가 변경된 경우에도, 같은 브랜치의 LOCAL 엔트리를 일괄 전환하는 fallback이 있습니다.
hook이 실패해도 push 자체는 차단하지 않습니다. 대시보드에서 수동으로 PUSHED 상태 변경도 가능합니다.
대시보드에서의 결과
위 단계들이 합쳐져 AIFlare 대시보드에서 의미 있는 타임라인이 만들어집니다.
같은 워크세션(claudeSessionId)으로 연결된 태스크와 캡처가 하나의 세션 그룹으로 표시됩니다. 하나의 작업 세션에서 발생한 여러 커밋과 태스크를 한눈에 파악할 수 있습니다.
각 엔트리에서 '관련 프롬프트' 패널을 통해 해당 커밋 시점의 사용자·AI 대화를 확인할 수 있습니다.
엔트리에는 LOCAL(로컬에만 존재) 또는 PUSHED(원격에 push됨) 뱃지가 표시됩니다.
타임라인 표시 예시