코딩 에이전트가 같은 파일을 40번씩 다시 읽는 게 지겨워서 SoulForge를 만들었습니다
I got tired of coding agents re-reading the same files 40 times, so I built SoulForge
핵심 요약
코드베이스의 구조를 SQLite에 인덱싱하여 에이전트의 효율과 정확도를 높이는 개발 도구 SoulForge 소개.
- Soul Map 인덱싱 — Tree-sitter와 PageRank를 활용해 코드 구조와 의존성을 실시간으로 파악함
- AST 기반 편집 — 정규식 대신 AST와 LSP를 사용하여 코드 수정의 정확성을 보장함
- 지능형 메모리 관리 — 파일 ID 기반 메모리와 자동 감쇠 기능을 통해 stale memory 문제를 해결함
- 다양한 기능 지원 — 모델 라우팅, 병렬 서브 에이전트, Git 체크포인트 등 개발 생산성 도구 제공
soulforge.proxysoul.com
원문 사이트로 이동
제가 써본 모든 코딩 에이전트는 똑같은 패턴을 보였습니다. Grep으로 찾고, 읽고, 다시 Grep하고, 다른 관점에서 같은 파일을 읽고, 두 폴더 건너편에 이미 존재하는 코드를 작성한 뒤, 측정조차 안 된 영향 범위를 가진 무언가를 '리팩토링'하죠. 메모리는 그저 낡은 노트들로 가득 찬 늪으로 변해가는 마크다운 파일일 뿐이었습니다.
저는 구조가 프롬프트 찌꺼기가 아니라 코드 자체에서 강제되길 원했습니다.
그래서 SoulForge는 시작할 때 리포지토리의 실제 인덱스를 구축합니다. Tree-sitter가 모든 파일을 파싱하고, 심볼은 SQLite에 저장되며, PageRank가 파일의 중요도를 순위 매기고, git log가 함께 변경되는 쌍을 제공하며, 의존성 엣지가 영향 범위를 알려줍니다. 에이전트는 Grep으로 하나씩 발견할 필요 없이 실시간 'Soul Map'을 제공받습니다. "X가 어디 있지?", "Y에 무엇이 의존하지?", "Z를 건드리면 뭐가 깨지지?" 같은 질문들이 LLM의 추측이 아니라 조회가 됩니다.
편집은 AST(JS/TS 등)와 LSP를 거칩니다. rename_symbol, move_symbol, 메서드 본문 교체, import 추가 등 모든 작업이 원자적으로 이루어지며, 정규식으로 찾고 바꾸기를 하면서 제대로 된 곳에 적용되길 기도할 필요가 없습니다.
제가 큰 가치를 둔 또 다른 부분은 코드 메모리입니다. 이건 그냥 노트 파일이 아닙니다. 항목들은 리포지토리 그래프의 파일 ID와 연결되어 이름이 바뀌어도 유지되고, 함께 변경되는 것을 인식하며, 에이전트가 사용하는 것과 동일한 영향 범위에 따라 순위가 매겨집니다. auth/middleware.ts를 수정할 때, git 기록상 두 파일이 함께 변경된다는 사실 때문에 auth/routes.ts에 대한 메모리가 떠오릅니다. 시맨틱 임베딩과 FTS, RRF가 결합된 SQLite에 저장됩니다. 오래된 메모리는 자동으로 감쇠되고, 모순되는 정보는 감사 추적과 함께 대체됩니다.
작업 루프의 느낌을 실제로 바꾸는 다른 요소들:
- 작업별 모델 라우터: 탐색용 저렴한 모델, 코드 작성용 스마트 모델, 압축용 별도 모델
- 압축은 보통 LLM 토큰 비용이 0입니다. Soul Map이 이미 구조를 가지고 있기 때문이죠
- 병렬 서브 에이전트
- 5개의 탭, 각각 고유한 세션, 모델, 체크포인트, 파일 점유권 보유
- 모든 프롬프트는 git 태그가 지정된 체크포인트이며, Ctrl+B로 채팅과 디스크 상태를 모두 되돌릴 수 있음
- 21개의 제공자, OpenAI 호환되는 것이라면 무엇이든 사용 가능
- CI를 위한 Headless JSONL
- Hearth: Discord/Telegram을 사용하여 대부분의 기능(탭, 라우팅, 모델 등)을 제어 가능
스택: Bun, TypeScript, 터미널용 OpenTUI, 원한다면 내장 Neovim, 어디에나 SQLite.
부디 사용해 보시고 의견을 알려주세요 :)
BSL 1.1, 개인 사용은 무료입니다.

