OpenCode, Cursor, 기타 코딩 에이전트를 위한 후견 기억(Hindsight Memory)
세션 간에도 유지되는 프로젝트 메모리
모든 코딩 에이전트 세션은 처음부터 시작됩니다. 지난 화요일에 정한 네이밍 규칙과 버그 해결 과정은 채팅에 남아 있었고, 그 채팅은 이미 사라졌습니다. 다음 세션은 빈 화면에서 시작되며, 같은 내용을 다시 설명해야 합니다.
아래 명령어는 2026년 10월 30일에 게시된 @vectorize-io/hindsight-coding-agents 0.8.4 버전과 일치합니다. 이 패키지는 @vectorize-io/hindsight-all ^0.10.2에 종속됩니다. 이 페이지에서 설명하는 패키지 동작, Cloud 요금, 그리고 Memory Defense는 2026년 11월 3일에 확인되었습니다. 세션 간에 사실을 유지하는 다른 방법은 AI 시스템 메모리 페이지에서 볼 수 있습니다.

코딩 에이전트는 저장소를 읽을 수 있고, 테스트를 실행할 수 있으며, 코드를 수정할 수 있습니다. 하지만 파일에서 결정되지 않은 사항은 여전히 볼 수 없습니다. 예를 들어, 지난 해 조사된 내보내기 버그가 있다고 가정해 보겠습니다. 일반적인 CSV 인용 방식은 시도되었으나, 수신 측 ERP가 앞자리 0을 제거하기 때문에 롤백되었습니다. 작동하는 유일한 포맷은 Excel 텍스트 수식 형식입니다.
Hindsight 코딩 에이전트 문서는 커밋 메시지나 이전 채팅에 남아 있는 이러한 종류의 결정을 대상으로 합니다. 플러그인은 최근 커밋 메시지를 메모리 뱅크로 복사하고, 작업 중에 세션을 다시 기록하며, 다음 세션이 그 내용을 바탕으로 시작할 수 있도록 5개의 페이지를 유지합니다. OpenCode, Cursor CLI, Claude Code, 그리고 이 패키지에 목록된 다른 도구들은 하나의 저장소에 대해 동일한 뱅크를 공유합니다.
코딩 에이전트 플러그란란 무엇인가
구버전 설치 환경은 이미 선택한 서버와 계속 통신해야 합니다. hindsight-claude-code, hindsight-cursor-cli, hindsight-codex는 이 패키지로 대체되는 패키지들입니다. ~/.hindsight/claude-code.json이나 ~/.hindsight/codex.json 파일이 디스크에 여전히 존재하는 경우, install은 해당 파일의 API URL과 토큰을 복사하며, 빈 URL은 여전히 로컬 데몬을 의미합니다. 설치하려는 도구가 먼저 읽기 때문에, 구버전 Claude 파일이 옆에 놓여 있더라도 Codex 설치는 Codex의 서버를 유지합니다. Cursor CLI, Copilot CLI, OpenCode, Cline은 엔드포인트 파일을 작성한 적이 없으므로, 이러한 설치에는 복사할 서버가 없습니다.
구버전의 recall 및 retain 설정, bankMission, retainMission, dynamicBankGranularity는 비활성화됩니다. 코딩 에이전트 문서는 이 패키지가 대체한 파이프라인을 설명한다고하며, 이를 다시 해석하는 것은 추측이 될 것이라고 명시합니다. 대신 얻게 되는 것은 저장소별 하나의 뱅크인 coding-agent::{gitProject}이며, 해당 체크아웃을 여는 모든 도구가 공유합니다. 각 도구에 대한 개별 뱅크를 다시 지정하려면, 문서에서 구버전 이름과 일치한다고 명시한 템플릿을 설정합니다:
{ "bankIdTemplate": "{harness}::{gitProject}" }
도구 이름을 지정하지 않고 npx @vectorize-io/hindsight-coding-agents install을 실행하면 목록을 인쇄하고 아무것도 작성하지 않습니다. 모든 감지된 도구를 연결하는 명령어는 install all입니다. update는 ~/.hindsight/coding-agents 아래의 사본을 교체하고 각 도구의 개별 구성 파일은 그대로 둡니다. autoUpdate는 하루에 한 번 백그라운드에서 이러한 교체를 수행합니다. 새로운 후크를 추가하는 릴리스의 경우 여전히 install이 필요하며, 이는 백그라운드 업데이트가 이러한 구성 파일을 편집하지 않기 때문입니다. Hindsight가 여러 백엔드 옵션 중 하나라면, 에이전트 메모리 프로바이더 비교에서 Honcho, Mem0, Mnemosyne와 비교할 수 있습니다.
메모리가 저장될 위치 선택하기
세션이 결정을 저장하려면 먼저 뱅크가 어딘가에 있어야 합니다. 터미널에서 install을 실행하면 한 번만 질문합니다: Hindsight Cloud, 이미 실행 중인 서버, 또는 코딩 에이전트와 동일한 컴퓨터의 데몬. 스크립트는 --server를 전달합니다. 나중에 install을 다시 실행해도 다시 질문하지 않으며, 이미 지정된 서버를 그대로 둡니다. --server를 전달해 변경하는 경우를 제외하면요.
| 모드 | 실행되는 것 | 사용자의 공급 사항 | 기계 밖으로 나가는 것 |
|---|---|---|---|
cloud |
Hindsight Cloud. 기본 API base는 https://api.hindsight.vectorize.io |
API 토큰 | 프롬프트, 플러그인이 유지하는 git 텍스트, 추출된 메모리가 해당 API로 전송됨 |
self-hosted |
이미 실행 중인 Hindsight 서버 | 해당 URL, 관례적으로 http://localhost:8888 |
해당 URL로 전송됨. localhost URL은 기계에 유지됨 |
daemon |
플러그인이 127.0.0.1:9077에서 시작하는 로컬 hindsight-embed |
PATH에 uv, 사실 추출용 LLM |
뱅크 데이터는 기계에 유지됨. 추출은 데몬에 지정된 LLM을 여전히 호출함 |
npx @vectorize-io/hindsight-coding-agents install opencode --server daemon
npx @vectorize-io/hindsight-coding-agents install opencode --server self-hosted --api-url http://localhost:8888
npx @vectorize-io/hindsight-coding-agents install opencode --server cloud --api-token YOUR_TOKEN
데몬은 127.0.0.1:9077을 바인딩하고, 직접 실행하는 Hindsight 서버를 위해 포트 8888을 비워둡니다. 이미 9077에서 리스닝 중인 프로세스가 있는 경우, 플러그인은 모든 코딩 도구와 모든 저장소에 대해 해당 프로세스를 사용하며, 세션을 닫아도 프로세스는 계속 실행됩니다. 최초 시작 시에는 hindsight-embed를 다운로드하고 백그라운드에서 모델을 로드합니다. 이는 후크가 그렇게 긴 시간을 기다릴 수 없기 때문입니다. 포트가 응답할 때까지, 해당 세션은 1~2턴 동안 메모리가 없으며, 도달 불가능한 Cloud나 자체 호스팅 서버로 인해 세션에 메모리가 없는 경우와 동일합니다.
Linux와 Windows는 API가 끌어들이는 litellm을 휠(wheel)에서 설치합니다. macOS는 macOS 휠이 없기 때문에 이를 컴파일해야 하며, 컴파일에는 rustup의 최신 Rust 툴체인이 필요합니다. 트랜스크립트를 메모리로 변환하는 것은 여전히 채팅 모델이 필요합니다: 설정한 경우 HINDSIGHT_API_LLM_PROVIDER, 그렇지 않으면 OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, GROQ_API_KEY 중 첫 번째 키, 그것도 없으면 Claude Code CLI. 모든 HINDSIGHT_API_* 변수는 데몬으로 전달됩니다. 임베딩 모델, 리랭커, 로컬 OpenAI 호환 서버, 뱅크 백업은 Hermes Agent를 위한 Hindsight에 있습니다. serverMode가 self-hosted로 설정된 경우, --api-url은 해당 서버의 base URL입니다.
Vectorize의 요금 페이지는 자체 호스팅 에디션을 MIT 라이선스로, 시트 요금이나 토큰 요금 없이 제공한다고 설명합니다. Cloud는 각 연산에 대해 청구합니다. 요금은 마지막 섹션에 있습니다.
OpenCode 연결하기
플러그인이 연결할 수 있으려면 먼저 OpenCode가 설치되어 있어야 합니다. OpenCode 퀵스타트에서 해당 설치를 다룹니다. 그런 다음 플러그인을 데몬을 가리키도록 설정합니다:
npx @vectorize-io/hindsight-coding-agents install opencode --server daemon
인스톨러는 사용자 파일 ~/.config/opencode/opencode.json에 하나인 플러그인 경로를 ~/.hindsight/coding-agents를 대상으로 작성합니다. 이는 프로젝트 opencode.jsonc와 구분됩니다. OpenCode는 해당 경로에서 hindsight_* 도구들을 로드하며, MCP 서버가 필요하지 않습니다. OpenCode 2(npm @opencode/cli, 설치 대상 opencode2)도 동일한 파일을 읽습니다. 어느 CLI를 설치하든 둘 다 연결되며, 어느 것을 삭제하든 해당 항목이 제거됩니다. OpenCode v1은 파일에 v2의 plugins 키가 포함된 경우 파일을 거부하므로, 인스톨러는 단일 경로를 작성하고 각 CLI가 패키지에서 자신의 엔트리포인트를 로드하도록 합니다.
OpenCode 2에서는 저장소의 읽기 전용 서베이가 다른 설치된 도구에 의해 수행됩니다. v2 플러그인이 서베이에 필요한 읽기 전용 에이전트를 정의할 수 없기 때문이며, “시드됨” 알림은 v2 플러그인이 토스트를 띄울 수 없기 때문에 플러그인 로그로 전송됩니다. Recall, hindsight_* 도구, 세션 백위팅은 v1과 동일하게 작동합니다.
OpenCode는 워크스페이스 로드 시 ~/.hindsight/coding-agent.json을 읽으므로, 해당 파일에 대한 변경은 OpenCode를 재시작한 후 적용됩니다. 모든 도구에서 예외인 것은 새 apiToken입니다: 클라이언트는 서버가 요청을 거부할 때 다시 읽기 때문에, 키를 회전해도 그 재시작이 필요하지 않습니다.
뱅크가 실제로 결정을 유지했는지 확인하려면, 저장할 수 있는 저장소에서 두 세션을 사용하세요:
- 거기서 OpenCode를 시작하고 하나만 사용하고 버릴 결정을 명시하세요. 예를 들어 변경하고 싶지 않은 공개 에러 코드.
- 세션을 종료합니다. OpenCode는 세션 중에 트랜스크립트를 작성하고 유휴 상태가 될 때 마지막 응답을 플러시합니다.
- 같은 디렉터리에서 새 세션을 시작하고 해당 코드 및 결정이 어디에서 이루어졌는지 묻습니다.
- 에이전트에게
hindsight_sync_status호출을 요청합니다."synced": true는 시드된 메모리가 쿼리 가능함을 의미합니다. 같은 결과는 git 사본이 얼마나 최신인지, 그리고 몇 개의 서베이 문서가 저장되었는지(surveyDocs, 0부터 4까지)도 보고합니다.
두 번째 세션에 해당 코드의 메모리가 없다면, ~/.hindsight/coding-agents-logs/를 확인하세요. plugin.log는 가독 가능한 추적 기록이며, diag.jsonl은 각 리플렉트와 페이지 페치를 기록하고, usage.jsonl은 턴이 어떤 hindsight_* 도구를 호출했는지 기록합니다. npx @vectorize-io/hindsight-coding-agents stats는 에이전트별 해당 사용량 파일 요약을 표시합니다. 리플렉트가 타임아웃되거나 5xx를 반환할 때, diag.jsonl은 지식 페이지에 대한 검색을 기록하며, 페이지가 일치하지 않으면 관찰에 대한 일반 recall을 기록합니다. 에이전트는 여전히 응답합니다. 이러한 폴백도 실패하면, 해당 턴은 뱅크에서 가져온 아무것도 앞에 두지 못합니다.
Cursor 및 다른 에이전트 연결하기
Cursor는 CLI를 통해 동일한 뱅크에 참여합니다. 인스톨러는 ~/.cursor 아래에 후크와 MCP를 작성합니다:
npx @vectorize-io/hindsight-coding-agents install cursor-cli --server daemon
이는 ~/.cursor/hooks.json에 후크를, ~/.cursor/mcp.json에 MCP 서버를, 그리고 동반 스킬을 작성합니다. 각 후크는 단수 수명의 프로세스이므로, coding-agent.json에 대한 편집은 다음 프롬프트에서 적용됩니다. MCP 프로세스는 시작 시 파일을 읽으므로, hindsight_* 도구는 다음 세션에서 편집을 인식합니다.
Claude Code는 Claude의 파일에서 동일한 후크 및 MCP 배선을 받습니다. install claude-code는 ~/.claude/settings.json에 세 개의 후크를 추가하고, claude mcp add를 통해 사용자 범위 MCP를 등록하며, ~/.claude/skills/hindsight-coding-agent를 설치합니다. 이 스킬은 Hindsight에 무언가를 저장하라고 지시할 때 Claude가 읽는 것입니다. Codex CLI(install codex)는 ~/.codex/hooks.json에 세 개의 후크와 config.toml에 [mcp_servers] 블록을 작성하며, 이러한 후크는 codex_hooks가 true일 때만 실행됩니다.
| 도구 | 설치 대상 | 배선 | 에이전트가 메모리에 접근하는 방법 |
|---|---|---|---|
| OpenCode | opencode |
~/.config/opencode/opencode.json |
네이티브 도구, MCP 없음 |
| OpenCode 2 | opencode2 |
OpenCode와 동일한 파일 | 네이티브 도구, MCP 없음 |
| Cursor CLI | cursor-cli |
~/.cursor/hooks.json, ~/.cursor/mcp.json, 동반 스킬 |
후크 및 MCP |
| Claude Code | claude-code |
~/.claude/settings.json의 세 후크, 사용자 범위 MCP, ~/.claude/skills/의 스킬 |
후크 및 MCP |
| Codex CLI | codex |
~/.codex/hooks.json, config.toml의 [mcp_servers] |
후크 및 MCP |
| pi | pi |
~/.pi/agent/settings.json의 확장, ~/.pi/agent/skills의 스킬 |
네이티브 도구, MCP 없음 |
Kilo, Copilot CLI, Cline, Devin CLI, 코딩 에이전트 페이지에 나열된 다른 이름들은 동일한 install <name> 명령어를 사용하며, 여는 저장소에 있는 뱅크를 공유합니다. Devin CLI는 Node 22.5보다 오래된 버전에서는 설치할 수 없으며, 이는 세션 데이터베이스를 node:sqlite을 통해 읽기 때문입니다. pi와 Prime Agent는 해당 install 명령어를 사용해야 합니다. pi install npm:@vectorize-io/hindsight-coding-agents는 연결되지 않은 상태로 남습니다: 두 도구 모두 package.json의 단일 pi 키를 읽으며, 해당 키는 엔트리 하나만 가리킬 수 있습니다.
OpenCode가 여전히 메모리를 저장하는 동안 Claude Code가 뱅크에 쓰지 않도록 하려면, 해당 도구에 대해 disabled를 설정하세요:
{
"serverMode": "daemon",
"harnesses": {
"claude-code": { "disabled": true }
}
}
Claude Code는 더 이상 아무것도 저장하지 않으며, 아무것도 recall하지 않고, Hindsight 도구를 받지 않습니다. 모든 도구나 일부 도구에 대해 retainSessions를 false로 설정하면 트랜스크립트 저장과 오래된 트랜스크립트 가져오기가 중단됩니다. Recall, git 히스토리, 메모리 도구는 계속 작동하므로 이미 저장된 것에 대해 여전히 질문할 수 있습니다.
저장소별 뱅크와 지식 페이지
하나의 체크아웃에서 OpenCode와 Cursor CLI는 동일한 프로젝트를 기억해야 합니다. 이를 하는 뱅크 이름은 coding-agent::{gitProject}입니다. {gitProject}는 git rev-parse --git-common-dir에서 가져온 주요 git 체크아웃의 디렉터리 이름이므로, 링크된 워크트리도 해당 체크아웃과 동일한 뱅크를 사용합니다. git 저장소가 아닌 폴더는 세션이 시작된 디렉터리의 이름을 사용합니다.
다른 뱅크를 사용해야 하는 폴더는 mapPathToBank에 넣습니다. 절대 경로를 지정하며, 가장 긴 일치 경로가 우선하며, 저장소 루트를 나열하면 그 아래의 모든 하위 디렉터리를 포함합니다. 이 맵은 고정된 bankId를 포함하여 다른 모든 것을 오버라이드합니다. 여는 모든 디렉터리가 지정한 하나의 뱅크에 쓰기를 원할 경우 bankId를 설정합니다. dynamicBankId를 false로 설정하면 bankIdTemplate 대신 해당 정적 뱅크를 유지합니다.
에이전트가 다른 뱅크에 속한 디렉터리로 cd하면, 그 이후의 턴은 새 뱅크에 저장됩니다. 이미 저장된 턴은 작성된 위치에 그대로 남습니다. 각 이동은 plugin.log에 경고로 기록됩니다.
저장소를 처음 열 때, 해당 뱅크에는 프로젝트의 과거 결정이 하나도 없습니다. 세션은 최근 커밋 메시지를 복사해 넣으며, git에만 존재하는 선택을 다음 세션이 recall할 수 있는 것으로 만듭니다. 이 복사는 기본적으로 켜져 있습니다(autoSeed). 해당 문서의 전체 쓰기에서는 최신 커밋, seedLimit(300)의 절반과 seedLimit 사이의 커밋을 유지합니다. 이 윈도우는 절반 단위로 이동하며, 로그는 더 오래된 커밋을 얼마나 많이 제거했는지를 명시합니다.
gitIngest는 해당 git 히스토리의 어느 정도가 저장될지를 결정하며, 첫 번째 복사나 나중에 만드는 커밋 모두에 해당합니다. "message"는 커밋 메시지를 저장하고, HEAD가 문서에 없는 커밋을 포함하면 문서를 업데이트합니다. "full"은 각 커밋의 diff를 최신순으로 저장합니다. "none"은 git을 제외합니다. 이후 커밋은 자신의 메시지를 추가합니다. 저장된 커밋이 HEAD의 조상이 더 이상 아니거나, seedLimit보다 많은 수의 커밋이 새로거나, 서버가 안전하게 추가할 수 없을 때, 전체 문서가 여전히 해당 seedLimit 윈도우 내에서 다시 작성됩니다.
커밋 메시지는 코드가 현재 어떻게 구조화되어 있는지를 보여주지 않으므로, 동일한 첫 번째 세션이 트리도 걸을 수 있습니다. 이 걷기는 codebaseSurvey이며, 기본적으로 켜져 있습니다. 사용하는 코딩 도구는 CLI가 읽기 전용 에이전트를 호스트할 수 있을 때 이를 실행하며, 그렇지 않으면 다른 설치된 도구가 실행합니다.
Claude Code에서 걷기는 claude -p이며, surveyBudgetUsd(기본값 2)가 지출을 멈춥니다. 다른 도구는 이미 가리켜진 모델을 사용하여, 자신의 읽기 전용 샌드박스 내에서 실행합니다. 20개의 새 커밋(surveyRefreshCommits) 이후에 걷기가 다시 실행됩니다. 이 값을 0으로 설정하면 서베이된 적이 없는 뱅크에서만 실행됩니다.
참고: 걷기는 headless OpenCode와 같은 별개의 코딩 에이전트를 시작합니다. 이러한 호출은 해당 에이전트의 모델로 전송되므로,
"1"로 설정된HINDSIGHT_API_LLM_MAX_CONCURRENT는 이를 늦추지 않습니다. 모델이 이미 세션에 응답하는 자체 호스팅 서버인 경우, 서베이는 동일한 서버에 대한 두 번째 전체 패스가 됩니다. 서버가 이를 감당할 수 없는 경우codebaseSurvey를false로 설정하세요.
다음 세션은 저장된 모든 사실을 다시 읽는 대신 5개의 페이지에서 시작합니다. 각 페이지는 하나의 지식 티어에서 합성되므로, 추출기가 해당 티어로 라우팅한 사실만 읽습니다.
| 페이지 | 답변하는 내용 | 태그 |
|---|---|---|
| 구성 요소 맵 | 주요 구성 요소, 그들의 책임, 그리고 상호 의존 관계 | knowledge:component |
| 핵심 개념 | 도메인 추상화와 개발자가 알아야 하는 어휘 | knowledge:concept |
| 컨벤션 및 패턴 | 이 프로젝트가 테스트, 에러 처리, 명명, 코드 구조화, 변경을 만드는 방법 | knowledge:convention |
| 주요 결정 및 근거 | 상당한 기술적 결정과 프로젝트가 그렇게 하는 이유 | knowledge:decision |
| 이니셔티브 및 강화 | 시간의 주요 이니셔티브, 캡처된 이니셔티브 페이지 링크 포함 | knowledge:feature-work |
공유된 분은 동일한 워커 풀에서 새 메모리를 저장하는 것과 동시에 5개 페이지를 모두 한 번에 트리거할 것이며, 세션 인제스트는 그 뒤에 대기하게 됩니다. 기본 스케줄은 이를 분산시킵니다. pageTriggerCron은 H * * * *입니다: 각 페이지는 뱅크 id와 페이지 이름에서 해시된 자신의 분을 가지며, 새 내용이 없는 틱은 건너뜁니다. pageTriggerType을 auto-refresh로 설정하면新材料를 생성한 모든 통합 후에 페이지가 다시 작성됩니다. 문서는 이를 가장 최신의 스케줄이자 가장 비싼 것, 통합당 페이지당 하나의 모델 합성이라고 부릅니다. manual은 사용자가 새로고침할 때까지 페이지를 그대로 둡니다.
원하지 않는 내장 페이지 업데이트를 위해 pages 아래에서 false를 사용합니다. 이미 저장된 사본은 제어 평면에서 삭제할 때까지 유지됩니다. source_query는 해당 페이지가 묻는 질문을 대체하며, 플러그인은 여전히 종속성의 결정을 페이지에서 제외하는 절을 추가합니다. 자체 페이지는 customPages 아래에 위치하며 자체 source_query가 필요합니다. pages 아래에 알려진 이름이 아닌 것은 경고와 함께 무시되므로, 오타가 두 번째 빈 페이지를 생성하지 않습니다. 에이전트에게 이니셔티브 캡처를 요청하면 hindsight_capture_initiative를 통해 이니셔티브별 개별 페이지가 작성됩니다.
서버에서 뱅크를 삭제하면 해당 저장소의 메모리가 지워집니다. 다음 세션은 git 히스토리를 복사하고 트리를 다시 걸을 것입니다. 플러그인을 삭제해도 뱅크는 그대로 남습니다.
범위 및 프라이버시 제어
저장소를 여는 것은 이를 위한 뱅크를 생성하며, 이것이 고객의 트리를 요청 없이 저장할 수 있는 방법입니다. optInOnly는 메모리를 지정된 디렉터리로 제한합니다. 모든 다른 곳에서는 플러그인이 뱅크를 생성하지 않고, 아무것도 저장하지 않으며, git 히스토리를 복사하지 않고, 코딩 도구는 플러그인이 설치되지 않은 것처럼 작동합니다.
{
"optInOnly": true,
"optInPaths": ["~/prj", "~/oss"]
}
각 항목은 디렉터리 접두사이며, ~는 확장되고, 그 아래의 각 저장소는 여전히 자신의 coding-agent::{gitProject} 뱅크를 얻습니다. mapPathToBank의 경로는 이미 해당 폴더를 지정한 것이므로 허용됩니다. bankId 하나만으로는 아무것도 허용하지 않습니다: 이는 뱅크의 이름을 붙일 뿐이며, 폴더의 이름이 아니기 때문에 optInOnly가 켜져 있을 때, 이름이 없는 디렉터리는 제외됩니다. 플러그인은 저장소에서 구성을 읽지 않습니다. 문서의 이유는 클론된 저장소가 메모리를 켤 수 없어야 하기 때문입니다. 어떤 폴더가 어떤 뱅크를 사용하는지는 mapPathToBank에, 어떤 도구가 켜지거나 꺼지는지는 harnesses에 유지됩니다. 뱅크 id가 알려진 후, 해당 단일 저장소에 대한 추가 규칙은 banks에 들어갑니다:
{
"banks": {
"coding-agent::secret-client": { "disabled": true }
}
}
npx @vectorize-io/hindsight-coding-agents uninstall cursor-cli는 인스톨러가 추가한 Cursor 후크, MCP 항목, 스킬을 제거합니다. uninstall all은 연결한 모든 도구에 대해 이를 수행합니다. 이미 존재하던 파일은 인스톨러가 편집하기 전에 옆에 .hindsight-backup으로 복사됩니다. 뱅크, 데몬 데이터베이스, ~/.hindsight/coding-agent.json은 그대로 남습니다.
채팅에 붙여넣은 토큰은 메모리가 되어서는 안 됩니다. Memory Defense는 저장 전에 텍스트에 대한 45개 패턴 스캔이며, 해당 뱅크에 정책이 있을 때까지 꺼져 있습니다. redact는 일치하는 항목을 [REDACTED:github_token]과 같은 마커로 대체하고 나머지를 저장합니다. block은 일치하는 항목을 제거하고 요청의 모든 항목이 일치했을 때 422를 반환합니다. 정책은 해당 뱅크의 이후 저장에 적용됩니다. 이미 저장된 메모리는 그대로 둡니다. 이 두 동작은 오픈소스 sensitive_data 규칙입니다.
스캔을 켤 수 있는 권한은 두 곳에서 다르게 기재되어 있습니다. 2026년 9월 3일 기업용 게시글은 기본 스캐너가 모든 플랜에 켜져 있다고 하며, 추가 디텍터 — 220개 이상의 패턴 카탈로그, base64 재스캔, 프롬프트 주입 체크, LLM 스크린 — 은 Enterprise라고 합니다. 요금 비교는 Memory Defense를 Enterprise 전용으로 표시하며, 자체 호스팅 및 Cloud 셀은 비어 있습니다. Cloud 뱅크가 비밀을 제거할 것이라 기대하기 전에 현재 요금 페이지의 해당행을 확인하세요.
manageBankConfig는 기본적으로 true이며, 플러그인이 인제스트에 필요한 뱅크 설정과 defaultBankConfig에 넣은 모든 필드를 작성할 수 있게 합니다. 뱅크에 이미 정의된 필드가 없는 곳에만 필드를 작성하므로, 제어 평면에서 설정한 값은 유지됩니다. 플러그인의 자체 전략에 대한 추출 모드는 예외입니다: 모든 세션에서 retainExtractionMode를 따릅니다. 모든 세션 백위팅과 함께 전송되는 retainContext는 추출기에 누가 그 문장을 말했는지 알립니다. 기본값은 두 명의 화자를 모두 명명하며, 에이전트 자신의 “고정됨"이나 “통과함"이 사실로서가 아닌 에이전트의 주장으로서 저장되도록 요청합니다. 결론이 누군가 관찰한 것처럼 저장될 때, 다음 세션을 공급하는 방식은 자기 강화 메모리 루프에 있습니다.
일상적 개발을 위한 설정
모든 코딩 도구는 동일한 파일 ~/.hindsight/coding-agent.json을 읽으므로, 한 번만 설정한 제한이 OpenCode와 Cursor 모두에 적용됩니다. HINDSIGHT_CONFIG는 그 파일을 이동시킵니다. 두 번째 파일을 생성하지는 않습니다. 각 설정에 대해, 내장 기본값은 환경 변수(HINDSIGHT_API_URL, HINDSIGHT_API_TOKEN, 또는 다른 단일 값에 대한 HINDSIGHT_<FIELD>)에 패배하며, 이는 파일 상단에 패배하고, 이어 harnesses.<name>, paths.<prefix>, banks.<id> 순서가 됩니다. 파일에 작성된 값은 나중에 동일한 환경 변수를 설정해도 유지됩니다. retainTags와 optInPaths는 쉼표 구분 변수일 수 있습니다. mapPathToBank, harnesses, paths, banks, retainMetadata, recallOptions는 파일에서만 읽습니다.
세션이 느리거나, 비싸거나, 또는 잘못된 저장소를 기억할 때, 변경 사항은 이 필드 중 하나입니다. 기본값은 코딩 에이전트 참조에서 가져왔습니다.
| 필드 | 기본값 | 변경 시점 |
|---|---|---|
serverMode |
cloud |
로컬 뱅크는 daemon, 실행하는 서버는 self-hosted |
autoInject |
"reflect" |
"pages" 또는 "recall"은 세션 시작 합성을 건너뜀. "none"은 아무것도 주입하지 않으며, 에이전트는 너무 얕으면 페이지를 검색하고 리플렉트함 |
reflectTimeoutMs |
20000 |
자동 세션 리플렉트. 후크를 사용하는 도구에서, 인스톨러는 30초 프롬프트 후크 타임아웃을 설정하므로 약 20초 이상의 값은 해당 후크의 timeout도 올리는 것이 필요함 |
reflectBudget |
"high" |
에이전트가 호출하는 hindsight_reflect 도구의 버짓. 자동 세션 리플렉트는 항상 "low"를 사용하고 이를 무시함 |
recallOptions |
관찰, 낮은 버짓, max_tokens 2000 |
키별로 병합. 통합 비활성화 뱅크는 관측을 생성하지 않으며, 기본 recall은 비어 있음 — 거기서 "types": ["world", "experience"] 설정 |
retainExtractionMode |
"concise" |
"verbose"는 더 많은 세부 정보 추출. 참조에 따르면 모든 Stop이 세션을 백위팅하므로 토큰 비용이 수 배. "chunks"는 추출 없이 텍스트 저장 |
retainTags / retainMetadata |
미설정 | 공유 뱅크에서 project:{gitProject} 도장을 찍어 recall 필터링 가능. 각 저장소가 개별 뱅크를 가지면 뱅크 id가 이미 “어떤 저장소"인지 답변 |
bankIdTemplate |
coding-agent::{gitProject} |
{harness}::{gitProject}는 에이전트 분리. mapPathToBank는 디렉터리 트리를 하나의 이름 지정 뱅크로 전송 |
codebaseSurvey |
true |
서베이와 세션이 하나의 자체 호스팅 모델을 공유할 때 false. surveyBudgetUsd(기본값 2)는 Claude 레시피만 캡 |
pageTriggerType |
"cron" |
"auto-refresh"는 모든 통합을 따름. "manual"은 페이지를 그대로 둠 |
maxParallelRetains |
10 |
API가 429를 반환하면 낮춤. 참조에 따르면 API는 버스트를 레이트-리미트 함 |
~/prj 아래 저장소만 기억하고, 커밋 메시지를 저장하며, 저장소 서베이를 끄고, 새 뱅크에 비밀을 redact하도록 요구하는 로컬 데몬은 다음과 같습니다:
{
"serverMode": "daemon",
"optInOnly": true,
"optInPaths": ["~/prj"],
"gitIngest": "message",
// codebaseSurvey는 다른 코딩 에이전트를 시작. HINDSIGHT_API_LLM_MAX_CONCURRENT는 이를 제한하지 않음.
"codebaseSurvey": false,
"retainExtractionMode": "concise",
"autoInject": "reflect",
"defaultBankConfig": {
"memory_defense": {
"enabled": true,
"rules": [{ "on": "sensitive_data", "action": "redact" }]
}
}
}
defaultBankConfig는 이미 memory_defense가 없는 뱅크에만 이를 채우며, manageBankConfig가 false일 때 아무것도 하지 않습니다. hindsight_diagnose는 현재 파일 상태와 실행 중인 클라이언트가 실제로 로드한 값을 보여줍니다.
비용 및 파일이면 충분한 시점
세션은 시작 시 세 가지를 지출할 수 있습니다: 첫 번째 프롬프트에 대한 낮은 버짓 리플렉트, seedLimit으로 상한이 설정된 최근 커밋 메시지 복사, 그리고 트리 걷기. retainSessions를 켜둔 채로 두면, 세션이 진행됨에 따라 트랜스크립트가 저장됩니다. 5개의 페이지는 무언가가 변경되면 자신의 분(일 분 중)에 새로고침됩니다. gitIngest를 "full"로 설정하면 메시지와 함께 diff를 저장합니다.
Vectorize의 요금 FAQ는 고정 월 요금이나 시트 가격 없이 Cloud 요금을 나열합니다. FAQ는 새 계정에게 무료 크레딧이 제공된다고 하며, 크레딧 금액은 게시하지 않습니다.
| 연산 | 가격 |
|---|---|
| Retain | 100만 토큰당 $10.00 |
| Recall | 100만 토큰당 $0.75 |
| Reflect | 호출당 $0.05 |
| Iris Extract | 100만 토큰당 $7.50 |
| Mental Model Retrieve | 100만 토큰당 $0.25 |
| Mental Model Refresh | 호출당 $0.05 |
| 30일 후 저장 | 월 100만 토큰당 $0.25 |
메모리는 처음 30일 동안 무료로 저장됩니다. Cloud 개요는 지식 페이지 생성 또는 새로고침이 호출당 청구된다고 하며, FAQ는 별도의 지식 페이지 항목을 게시하지 않습니다. 데몬이나 자체 호스팅 서버는 이러한 Cloud 요금을 부과하지 않습니다. 추출은 여전히 데몬의 LLM 비용만큼 지출하며, install이 찾은 키가 클라우드 API 키인 경우 해당 키의 비용을 포함합니다.
같은 문서 페이지는 AMB sdebench 실행을 보고합니다: 61개의 저장소 작업, 각 3회 실행, 메모리 유무. 모든 실행은 61개 중 60~61개를 해결했습니다. 변화한 것은 작업별 수정 횟수와 작업별 비용입니다. 페이지는 수정 수치가 AMB 자체 차트에 출력하는 라벨을 재현한다고 하며, 비용은 동일한 실행별 테이블에서 유도된다고 합니다.
| 에이전트 | 작업별 수정 횟수 | 작업별 비용 |
|---|---|---|
| Claude Code | 0.85 → 0.36 | $0.445 → $0.338 |
| Codex CLI | 1.34 → 0.47 | $0.577 → $0.276 |
| opencode | 1.20 → 0.80 | $0.634 → $0.553 |
메모리 없음은 왼쪽 숫자입니다. 이 세 에이전트는 페이지가 출력하는 전체 테이블입니다.
코드 옆에 검토를 원하는 규칙은 AGENTS.md나 CLAUDE.md에 속합니다. 데몬이 다운되어 있을 때에도 해당 파일은 저장소에 있으며, 저장해도 채팅을 저장하지 않습니다. 뱅크는 거기서 한 번도 기록되지 않았고 다음 세션이 계속 틀리는 결정을 운반합니다. Hermes에서, 자체 유지 전환을 가진 로컬 SQLite 스토어는 Mnemosyne입니다.
소스
- 코딩 에이전트 — 설치 대상,
coding-agent.json필드, 뱅크 명명, 지식 페이지, 데몬 모드, sdebench 테이블. npm 패키지@vectorize-io/hindsight-coding-agents0.8.4, 2026년 10월 30일 게시. - 요금 — Cloud 연산 요금, 자체 호스팅 무료 주장, Memory Defense 플랜 매트릭스 행.
- Memory Defense — 뱅크별
sensitive_data정책, redact 및 block, 45개 패턴, 뱅크 정책이 설정될 때까지 끔. 기존 메모리는 스캔되지 않음. - 기업용 기능, 2026년 9월 3일 — 기본 스캐너는 모든 플랜으로 설명; 추가 디텍터는 Enterprise로 설명.