이 내용은 Hacktoberfest Open-Source AI Challenge: Ghost in the Machine에 제출하는 글입니다.
제가 만든 것 (What I Built)
git-ghost는 어떤 git 저장소의 가장 오래된 커밋에서 '과거의 나'라는 유령을 소환하는 작은 명령줄 도구(command-line tool)입니다.
이 도구는 사용자의 첫 번째 커밋들(기억들)과 최신 커밋들(살아있는 개발자)을 읽은 다음, Ollama를 통해 로컬에서 구동되는 오픈 웨이트 모델인 Gemma가 과거의 나였던 개발자의 유령처럼 말하게 합니다. 이 유령은 세 부분으로 이야기합니다:
- "내가 기억하는 것은..." (I remember...): 프로젝트가 아주 처음 어떤 상태였는지
- "지금 당신을 보니..." (I see you now...): 로그에서 실제 상세 내용을 바탕으로 어떻게 변화했는지
- "사라지기 전에..." (Before I fade...): 친절하고 구체적인 조언 하나
이것은 코드베이스를 위한 작은 '죽은 자들의 날(Día de los Muertos)'의 오프렌다(ofrenda)와 같습니다. 최신 diff만 보는 것이 아니라, 프로젝트의 과거 버전과 자신 자체를 기리는 방식입니다.
테마 해석 (Theme interpretation)
모든 저장소는 유령에 씐 듯합니다. 가장 새로운 커밋 아래에는 첫 init, 잊힌 WIP (작업 중), 새벽 2시의 오탈자 수정(fix typo) 등이 있습니다. 이러한 메시지들은 더 이상 존재하지 않는 누군가의 목소리입니다: 몇 달 또는 몇 년 전의 당신 자신 말입니다. git-ghost는 그 과거의 자아에게, 약간은 오싹하지만 대체로 따뜻한 목소리를 부여합니다.
데모 (Demo)
$ python git_ghost.py ~/projects/my-blog
.-
...
저장소: https://github.com/NFRION/git-ghost
코드 (Code)
이 전체 도구는 의존성(dependencies)이 전혀 없는 단일 Python 파일로 구성되어 있습니다. subprocess를 통해 git log를 실행하고, urllib을 사용하여 로컬 Ollama의 /api/chat 엔드포인트에 스트리밍 호출을 합니다. 시스템 프롬프트(system prompt)는 모델에게 커밋 로그에 존재하는 사실만을 사용하도록 요청하므로, 유령이 존재하지 않았던 파일을 지어내지 않습니다.
단위 테스트(unit test)는 가짜 Ollama 서버와 임시 git 저장소를 구동하여, 모델을 다운로드할 필요 없이 로직을 테스트할 수 있도록 합니다.
제작 과정 (How I built it)
- 모델: Gemma (
gemma3:4b가 기본값이며, 어떤 Ollama 모델이든 --model과 함께 작동함`)
- 런타임: Ollama, 완전 로컬 환경
- 언어: Python 3 표준 라이브러리만 사용
- AI 도움: 코드와 이 게시물을 작성하고 테스트하는 데 AI 비서의 도움을 받았습니다.
오픈 혁신이 여기서 중요한 이유
커밋 기록은 개인적이고 사적인 정보입니다. 단순히 향수를 불러일으키는 단락을 얻기 위해 이를 폐쇄형 클라우드 API로 전송하는 것은 잘못된 선택일 것입니다. 저의 기기에서 실행되는 오픈-웨이트(open-weight) 모델을 사용하면, 유령은 집 안에 머무릅니다: API 키가 필요 없고, 데이터가 노트북 밖으로 나가지 않으며, 호출당 비용이 들지 않고, 누구나 그 유령이 생각하는 방식을 읽고, 포크(fork)하고, 변경할 수 있습니다. 오픈 모델들은 이러한 종류의 작고 개인적이며 약간은 황당한 도구를 가능하게 만들며, 바로 그곳에서 많은 창의성이 발생합니다.