터미널 AI를 위한 자가 업데이트 지식 베이스

저는 하루의 대부분을 AI 코딩 어시스턴트와 함께 터미널에서 보냅니다.

세션 중에 어려운 문제를 해결할 때가 많습니다. 까다로운 해결책이나 특정 설정값을 찾아내기도 하죠. 하지만 탭을 닫으면 그 지식은 사라져 버립니다. 한 달 뒤, 똑같은 문제를 다시 해결하게 됩니다.

저는 Claude Code hooks를 사용하여 어시스턴트가 스스로 노트를 관리할 수 있는 시스템을 구축했습니다.

이 시스템은 세 부분으로 구성됩니다:

  • 매 프롬프트마다 작은 Markdown 지식 베이스를 검색하여 컨텍스트를 제공합니다.
  • 세션이 종료될 때 유용한 노트를 캡처합니다.
  • 세션이 시작될 때 인덱스를 로드합니다.

워크플로우를 저해하지 않으면서 이를 구축하는 방법은 다음과 같습니다.

1. 검색을 위해 UserPromptSubmit 사용하기

이 훅은 프롬프트를 보낼 때마다 실행됩니다. 텍스트를 전달받아 모델이 응답하기 전에 컨텍스트를 주입할 수 있습니다.

모델이 언제 노트를 볼지 결정하게 두지 마세요. grep과 같은 빠른 검색 도구를 사용하여 관련 파일을 찾으세요. 상위 5개의 결과만 주입합니다. 이렇게 하면 프로세스를 100ms 이내로 유지할 수 있습니다.

검색 훅을 위한 두 가지 규칙:

  • 비용을 낮게 유지하세요. 초기 검색에는 LLM 대신 grep을 사용하세요.
  • 가볍게 유지하세요. 제목과 파일 경로만 주입합니다. 모델은 더 자세한 정보가 필요할 때 파일을 열 수 있습니다.

2. 무거운 작업에 Stop 훅 사용 피하기

Stop 훅은 어시스턴트가 답변을 마칠 때마다 실행됩니다. 여기서 긴 작업을 실행하면 어시스턴트가 느려집니다. 30번의 대화가 오가는 세션이라면 30번의 무거운 작업이 트리거됩니다.

대신, SessionEnd를 사용하여 전체 세션을 한 번에 캡처하세요.

3. SessionEnd의 한계 해결하기

SessionEnd는 논블로킹(non-blocking) 방식입니다. 여기서 긴 백그라운드 작업을 시작하면 세션이 종료될 때 시스템이 해당 작업을 종료할 수도 있습니다.

해결책은 두 개의 훅을 사용하는 것입니다:

  • SessionEnd: 트랜스크립트 경로를 큐(queue) 파일에 빠르게 추가합니다.
  • SessionStart: 해당 큐를 비우고 무거운 캡처 작업을 백그라운드에서 실행합니다.

다음 세션이 활성화되어 있으므로 백그라운드 프로세스가 중단되지 않고 유지됩니다.

4. 무한 루프 방지하기

노트를 작성하기 위해 헤드리스(headless) AI를 실행하면 사용자의 환경을 상속받습니다. 즉, 새로운 AI가 자체 훅을 트리거하게 됩니다. 이는 끝없는 AI 호출의 루프를 만듭니다.

스크립트 상단에 항상 재귀 방지 코드를 추가하세요:

[ -n "$KB_CAPTURE" ] && exit 0

백그라운드 캡처 작업을 실행할 때 KB_CAPTURE=1로 설정하세요.

설정 요약:

  • 즉각적인 컨텍스트 주입을 위해 UserPromptSubmit을 사용합니다.
  • 작업을 큐에 넣기 위해 SessionEnd를 사용합니다.
  • 실제 작업을 실행하기 위해 SessionStart를 사용합니다.
  • 비용 절감을 위해 노트를 요약할 때는 저렴한 모델을 사용합니다.

문제를 한 번 다시 풀지 않는 것만으로도 수많은 캡처 비용을 충당할 수 있습니다.

Source: https://dev.to/just_an_electron/a-self-updating-knowledge-base-for-my-terminal-ai-assistant-claude-code-hooks-28jb

Optional learning community: https://t.me/GyaanSetuAi