ChristopherKahler/base
요약
이 글은 'basemode'라는 엔진을 소개하며, 이는 워크스페이스를 지식 그래프로 매핑하고 이를 Claude Code의 훅 파이프라인에 연결하는 Rust 바이너리입니다. basemode는 에이전트가 세션마다 모든 것을 기억하는 것이 아니라, 필요한 순간에 관련 정보를 '브리핑'하여 제공함으로써 추측 기반의 답변을 넘어선 정확한 지능형 지원을 가능하게 합니다.
핵심 포인트
- basemode는 워크스페이스를 지식 그래프로 매핑합니다.
- Claude Code의 훅 파이프라인에 연결되어 작동합니다.
- 필요할 때 관련 정보를 선제적으로 제공하여 에이전트 성능을 향상시킵니다.
- macOS/Linux 및 Windows용 설치 스크립트를 제공합니다.
macOS 및 Linux용입니다. Windows는 아래의 원라인을 사용하세요. Rust 툴체인이나 컴파일러가 필요 없습니다.
사용자의 에이전트는 기억상실증에 걸린 천재와 같습니다. 세션마다 코드를 처음 접하는 것처럼 행동합니다. basemode는 실제로 무엇인지 아는 단 하나의 메모리, 즉 코드 구조, 프로젝트, 결정 사항, 규칙, 모든 것이 의미하는 바와 어떻게 연결되는지를 모델 앞에 필요할 때 적절한 조각을 제시해 줍니다. 프롬프트를 붙여넣거나 문서를 유지할 필요가 없습니다. 동일한 에이전트, 브리핑만 받으면 됩니다.
이 레포지토리는 basemode 엔진입니다: 워크스페이스를 지식 그래프로 매핑하고 이를 Claude Code의 훅 파이프라인에 연결하는 하나의 Rust 바이너리인 base입니다.
브리핑되지 않은 에이전트에게 함수가 어디서 사용되는지 물어보면, 그것은 grep을 실행합니다. 열두 개의 파일을 뒤진 후에야 완벽한 문장과 훌륭한 문법으로 추측된 답을 내놓습니다. 하지만 basemode에서 작동하는 에이전트에게 질문하면, 찾기 시작하기도 전에 이미 그 앞에 답이 놓여 있습니다. 그래프는 모든 함수, 호출자(caller), 그리고 임포트를 미리 매핑했고, 훅은 관련 조각을 해당 턴에 배치합니다.
차이점은 모델 자체가 아닙니다. 무언가가 추측을 시작하기 전에 답을 그 앞에 놓아주는지 여부입니다.
basemode는 Claude Code가 노출하는 모든 훅에 연결됩니다. 각 주입(injection)은 순간에 대한 쿼리입니다 — 인증 파일을 열면, 관련 인증 규칙과 그것들을 지배하는 결정 사항만 반환될 뿐, 다른 것은 아무것도 없습니다. 목표 지향적이며, 절대 전체를 덤프하지 않습니다.
| Moment | 무엇이 로드되는가 |
|---|---|
| Session start | 에이전트가 작업할 위치를 결정하는 모든 것 — 활성 프로젝트, 열린 핸드오프(handoff), 오래된 파일, 신호 |
| At the prompt | 요청받은 내용과 관련된 모든 것 — 일치하는 도메인 규칙, 이전 결정 사항, 메모 |
| Before a tool runs | 건드려질 파일의 형태 — 엔티티(entities), 임포트(imports), 의존성(dependents) — 읽히기 전에 배치됨 |
| After it returns | 결과가 여기서 무엇을 의미하는지 — 방금 읽은 정확한 라인에 대한 호출 체인(call chain), 그리고 그것이 여전히 중요할 때 |
모든 에이전트는 이를 상속받습니다. 메인 세션, 서브 에이전트(subagents), 탐색 에이전트(explore agents) — 동일한 훅(hooks), 동일한 그래프, 동일한 브리핑을 사용합니다.
macOS 및 Linux
curl -fsSL https://raw.githubusercontent.com/ChristopherKahler/base/main/install.sh | sh
Windows
irm https://raw.githubusercontent.com/ChristopherKahler/base/main/install.ps1 | iex
그런 다음 작업 공간을 지정합니다:
cd ~/my-workspace
base scaffold
설치 프로그램은 플랫폼용 릴리스 바이너리를 다운로드하고 base install에 전달하며,
이는 바이너리를 ~/.local/bin/base에 배치하고,
전역 설정을 ~/.base-gbl/에 작성하며,
AST 추출 스크립트를 설치하고,
훅을 ~/.claude/settings.json에 연결합니다.
또한 첫날부터 입력할 수 있는 시작 별표 명령어(starter star commands) — *handoff,
*fork,
*base,
*end
—를 제공하여, 초기 설치 후에도 사용할 수 있게 합니다(--starter-commands / --no-starter-commands로 프롬프트 없이 답변할 수 있습니다). base scaffold는 작업 공간에 .base/를 생성합니다.
먼저 Claude Code를 설치하세요. 훅(hooks)이 base가 어떤 작업을 수행하게 만드는 핵심이며, 이는 기존의 ~/.claude에만 작성되기 때문에, 이전에 base를 설치하면 비활성 바이너리를 얻게 됩니다. 따라서 설치 프로그램은 그렇게 알려주고 나중에 다시 base install을 실행해야 합니다.
BASE_VERSION=v0.14.1로 버전을 고정하고 인수를 직접 전달할 수 있습니다: ... | sh -s -- --no-starter-commands.
소스에서 빌드하기
Rust 툴체인(toolchain)이 필요합니다. 위의 릴리스 바이너리는 아무것도 필요 없습니다.
cargo build --release
./target/release/base install
Windows에서는 일반 PowerShell 창에서 헬퍼를 실행하세요:
powershell -ExecutionPolicy Bypass -File scripts\build-base-windows.ps1
이것은 MSVC 개발 환경을 가져오고, LLVM/libclang (bindgen이 패키징된 RocksDB에 필요함)을 해결하며, cargo install을 실행합니다.
AST 추출은 설치 시 Python 인터프리터를 자동으로 해결합니다.
base는 자체적으로 최신 상태를 유지합니다. 세션 시작 시 새로운 릴리스가 있는지 확인하고, 있다면 분리된 백그라운드 프로세스에서 이를 설치합니다. 다운로드 과정이 사용자에게 노출되지 않고, 출력도 없으며, 실행할 것도 없습니다. 스왑은 원자적 이름 변경(atomic rename)이므로, 현재 세션은 시작했던 바이너리를 유지하고 다음 버전이 새로 올라옵니다.
base config set update.auto false # 이 머신에 고정하려면
base update # 또는 수동으로 언제든지 실행
# 1. 프로젝트 등록
base p a -n "My App" -p "src"
# 2. 코드베이스 매핑 — 35개 이상의 언어에 걸친 tree-sitter
...
코드 맵은 자동입니다. 앱에서 처음 열리는 세션은 백그라운드에서 맵을 빌드합니다. 이는 레포지토리이거나, 아직 아무도 git init 하지 않은 소스 파일의 빈 폴더일 수 있습니다. 앱 내의 파일을 처음 읽으면 해당 앱의 맵을 빌드하고, 편집할 때마다 그 변경 사항을 새로 고칩니다. .gitignore는 존중되며, 비감독(unattended) 빌드는 파일 개수를 물어보느라 멈추지 않고, 실패한 빌드는 다음 세션 시작 시 이유를 알려줍니다 (.base-ast/.last-error).
절대 매핑되지 않는 경우: 홈 디렉터리, 바탕 화면/문서/다운로드, 클라우드 드라이브 루트, 또는 다른 앱만 담고 있는 작업 공간 폴더입니다.
그런 다음 Claude Code를 열고 매핑된 파일을 건드립니다. 파일의 형태가 내용보다 한 번 먼저 도착합니다. 도메인에 맞는 프롬프트를 입력하면 규칙이 함께 도착합니다. 이 루프 — 그래프를 가르치고, 스스로 돌아오는 것을 지켜보는 것 — 이 전체 제품입니다.
사용자의 코드. tree-sitter로 추출하고 SPARQL을 통해 질의할 수 있는 모든 함수, 구조체(struct), 클래스, 임포트 및 호출 관계. '이것을 누가 호출하는가?'는 grep 검색이 아닌 그래프 쿼리입니다.
사용자의 비즈니스. 마일스톤과 태스크를 가진 프로젝트. 결정 사항과 그 배경 논리. 컨텍스트가 일치할 때 작동하는 도메인 규칙들. 그렇지 않으면 머릿속이나 3월에 마지막으로 정확했던 위키에 존재하는 것들.
사용자의 문서. 프런트매터(frontmatter)가 적용된 Markdown이 연결된 그래프 노드가 됩니다 — 제목, 링크, [[wikilinks]], 태그, 모든 간선(edges). 에이전트가 마크다운을 작성할 때, 훅(hook)은 작성 순간에 추출 계약(extraction contract)을 가르치므로 문서 자체가 그래프 인식적(graph-aware)으로 탄생합니다.
사용자의 운영 과정. 어떤 도메인이 활성화되었는지, 지난 세션 이후 무엇이 변경되었는지, 무엇이 오래되었는지(stale), 무엇이 열려 있는지. 사용자가 단어를 입력하기 전에 에이전트에게 방향을 제시하는 신호들.
이 모든 것이 관계적(relational)이며, 모두 사용자의 레포지토리 안에 존재하고 git에서 diff되는 일반 텍스트 NQuads 파일에 저장됩니다.
그래프는 세션 간 — 그리고 에이전트 간에도 기억합니다.
*handoff # 다음 세션을 이어서 작업할 수 있도록 현재 세션을 종료합니다
*fork # 진행 중인 작업을 방해하지 않으면서 발생한 부가 작업을 보류합니다
*base # 이번 세션의 결정, 태스크 및 학습 내용을 그래프로 통합합니다
...
이들은 스타 명령어(star commands)이며 — 채팅창에 직접 입력하고 commands.toml에서 정의됩니다.
완전히 사용자 정의 가능하며 (base commands list는 로드된 목록을 보여줍니다). 열린 핸드오프(Open handoffs)는 다음 세션 시작 시 자동으로 다시 나타납니다.
여러 활성 세션들은 릴레이(relay)를 통해 조정됩니다: base relay는 제목이 지정된 세션을 제공하고, 즉각적인 알림(pings), 수신 세션의 훅 내부에서 작동하는 간략화된 태스크 핸드오프, 그리고 누가 활동 중이고 무엇이 보류 중인지 보여주는 운영자 보드를 제공합니다.
base는 이 레포지토리의 GitHub 릴리스로부터 세션 시작 시 자체 업데이트를 수행합니다 ( base config set update.auto false로 기계를 고정할 수 있습니다). 모든 교체(swap) 또는 실패는 ~/.base-gbl/update.log에 추가됩니다.
실시간으로 최신 상태를 유지하는 no-op(아무 작업도 하지 않음)은 아닙니다. 0.13.4보다 오래된 Windows 설치본은 자체 실행 바이너리를 대체할 수 없으므로, 릴리스 zip이나 npx chrisai로 한 번 부트스트랩한 다음, 그 이후에는 제자리에서 업데이트됩니다.
리레이(relay)는 기본적으로 활성화되어 있으며 완전히 로컬입니다. 각 세션은 코드네임을 부여받고, 후크(hooks)는 ~/.base-gbl/.base/relay-inbox/<title>/ 아래 자체 받은 편지함 폴더와 함께 한 줄짜리 .status 파일을 모니터링하도록 요청합니다. 이 보드에서는 아무것도 외부로 나가지 않습니다. base config set relay.enabled false를 사용하면 기능을 끌 수 있고, base config set relay.wake_nudge false는 타이틀과 핑은 유지하지만 무장 블록(arming block)을 제거합니다.
base recall --keyword "auth" # 기억하는 모든 것을 검색
base decision search --keyword "database" # 근거와 함께 이전 결정을 찾기
base context "billing 모듈을 다루는 중" # 정확히 무엇이 주입될지 미리 보기
...
그리고 base dashboard는 커맨드 센터(Command Center)를 열어줍니다. 이는 동일한 그래프 위에 임베디드된 웹 UI입니다.
전체 명령어 표면 (Full command surface)
# 프로젝트 / 마일스톤 / 작업
base project add -n "..." -p "src/x" base p l
base milestone add -p <project> -n "..." base task add -p <project> -n "..."
...
모든 명령어는 짧은 별칭(alias)을 가집니다 (base p a, base a q, base d log 등). 나머지 명령어는 base help <sub>를 사용합니다.
CLAUDE.md는 한 번 작성한 정적 문서입니다. 지금 무엇을 다루고 있는지 알지 못하고, 적응하지 않으며, 관련성이 없을 때 스스로 억제되지 않습니다. basemode는 그 순간을 질의(queries the moment)합니다.
LSP는 한 번에 하나의 언어에 대해
지속성은 기본 전제 조건일 뿐, 전달(Delivery)이 제품이다. 아무도 열어보지 않는 기억은 추가 단계가 붙은 파일 캐비닛과 같다. 에이전트는 존재하지 않는 것을 찾으려고 노력할 수 없다. basemode는 먼저 말한다.
당신의 저장소(repo)를 가리키고 출력 폴더에 지식 그래프(knowledge graph)를 건네주는 도구의 한 범주가 있다. 그 그래프는 실제이며, 이미지는 인상적이고, 데모도 설득력이 넘친다. 하지만 계속 작업하게 되면 상황이 달라진다. 그것은 배치 아티팩트(batch artifact)이다. 다음 커밋에 의해 오래되고, 수동으로 재구축해야 하며, 당신의 프로젝트, 결정, 규칙 또는 현재 진행 중인 세션에 대해서는 아무것도 알지 못한 채 당신의 파일들만을 알고 있다.
더 나쁜 것은, 질문을 받을 때만 답변한다는 것이다. 작업 중간에 있는 에이전트는 측면 데이터베이스를 심문하기 위해 멈추지 않는다. 그 안의 내용물을 모르기 때문에 찾아보지도 않는다. 대신, 완전한 문장으로 추측한다. 질의(query)가 올 때까지 기다리는 기억은 추가 단계가 붙은 파일 캐비닛이며, 게다가 그 캐비닛은 다른 방에 있다.
basemode는 정반대의 전제 위에 구축되었다.
| 폴더 속 그래프 (Graph-in-a-folder) | basemode | |
|---|---|---|
| 신선도(Freshness) | 배치 내보내기, 수동 재실행, 다음 커밋에 의해 오래됨 | 스스로 유지 관리 — 작업하는 동안 훅(hooks)이 그래프를 동기화함 |
| 알고 있는 것 (What it knows) | 파일 및 추출된 개념 | 코드 구조와 프로젝트, 근거가 있는 결정, 규칙, 세션 |
| 전달 (Delivery) | 기억해내서 질문할 때 답변함 | 먼저 말한다 — 에이전트 자신의 턴 안에 네 개의 주입 지점(injection points)을 가짐 |
| 정밀도 (Precision) | 요청한 하위 그래프(subgraph) | 호출이 필요한 순간의 슬라이스 — 이 파일의 형태, 이 도메인의 규칙 외에는 아무것도 아님 |
| 범위 (Scope) | 한 번에 하나의 저장소 | 기계상의 모든 작업 공간(workspace), 단일 그래프가 모든 에이전트에 상속됨 |
| 세션 (Sessions) | 하나라는 개념 없음 | 인수인계, 포크(forks), 그리고 실시간 세션 간의 중계 |
그래프는 결코 제품이 아니었다. 그래프는 설비(plumbing)이다. 제품은 모델이 추측하기 시작하는 턴 직전에, 자동으로, 누구도 요청하지 않아도 도착하는 올바른 사실 그 자체이다.
| Layer | Tech |
|---|---|
| Language | Rust (단일 바이너리, 약 20MB — 임베디드 대시보드 SPA 포함) |
| ... | |
| 더 깊이 파고들기: 훅 구성(hook configuration) · 워크스페이스 스코핑(workspace scoping) · 확장 기능(extensions) · 명령어 플러그인(command plugins) · 그래프 내구성(graph durability) · 마크다운 온톨로지(markdown ontology) |
base는 Functional Source License 1.1 하에, Apache 2.0 미래 라이선스를 가지고 소스 코드를 공개합니다. 상업적 사용이 허용됩니다. 어떤 크기의 회사 내부에서도 이를 실행하고, 수정하며, 이를 사용하는 제품을 구축하고 판매할 수 있습니다. 이 라이선스가 제한하는 유일한 것은 base 자체를 판매하거나, base 또는 basemode를 대신하는 서비스를 판매하는 것입니다.
모든 버전은 출시 후 2년이 지나면 Apache 2.0이 됩니다. 이 부여는 취소할 수 없으며 라이선스 텍스트에 명시되어 있습니다.
base의 문서화된 인터페이스를 기반으로 작성한 확장 기능과 어댑터는 명시적 예외 조항에 따라 귀하의 작업물이며, 상업적으로 포함하여 원하는 방식으로 라이선스를 부여할 수 있습니다. v0.14.1까지 출시된 버전을 포함하여 발생하는 모든 세부 사항은 LICENSING.md에 나와 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Coding Assistants의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기