dsh-auto-memory: 대화 기록을 영구적으로 저장하는 플러그인
요약
dsh-auto-memory는 DeepSeek Harness (dsh) 에이전트가 세션 간 대화 기록을 영구적으로 저장하고 기억할 수 있도록 돕는 플러그인입니다. 이 도구는 네이티브, 서버 제로, 임베딩 제로 방식으로 메모리 기능을 제공하여, 기존 시스템의 설계적 한계(기억 상실증)를 해결합니다. 특히 'update-replace 의미론'을 도입하여 근접 중복 대신 핵심 사실을 업데이트하는 방식으로 메모리를 관리하며, 사용자가 자신의 데이터에 쉽게 접근하고 활용할 수 있게 합니다.
핵심 포인트
- dsh 에이전트의 세션 간 대화 기록 영구 저장 기능 제공
- 서버 연결이나 임베딩 없이 네이티브하게 작동하는 플러그인
- 근접 중복 대신 핵심 사실을 업데이트하는 'update-replace 의미론' 적용
dsh-auto-memory
당신의 dsh 에이전트는 당신이 말하는 모든 것을 잊어버립니다. 매번. 세션마다.
단 하나의 명령어로 해결하세요. DeepSeek Harness용 Claude Code 스타일 영구 메모리 — 네이티브, 서버 제로, 임베딩 제로, 설정 제로.
dsh plugin --profile demo add dsh-auto-memory
오늘 "기억해: 나는 인터뷰를 준비하는 Python 백엔드 엔지니어야"라고 말하고 — 내일 완전히 새로운 세션을 열고 "나에 대해 무엇을 알고 있니?"라고 물어보면, 그것이 기억합니다.

하이라이트 (Highlights)
0.7 — update-replace 의미론: 근접 중복(near-duplicates)을 쌓는 대신, 제품 및 평가 Harness 간에 공유되는 일치하는 핵심(matching core)으로 사실(facts)을 제자리에서 업데이트합니다. 공식 데스크톱 클라이언트(0.2.0-rc.2)를 통해 검증되었습니다. 전체 기록: CHANGELOG.md · Releases
Claude Code는 이것을 가지고 있습니다. dsh는 그렇지 않았습니다. 이제는 가집니다.
DeepSeek Harness는 현재 GitHub에서 가장 인기 있는 오픈 에이전트 Harness입니다 — 모델, 도구, 샌드박스 등 모든 것이 플러그인입니다. 하지만 이 시스템은 메모리 서브시스템 자체가 전혀 없습니다. 공식적인 해결책은 세 가지 기본 비활성화(default-off) MCP 설정을 외부 서버에 연결하는 것인데, 공식 문서조차도 이를 다음과 같이 설명합니다: 자동 주입되지 않음, 망각 정책 없음, 부분 문자열만 검색. 당신의 에이전트는 설계상 기억 상실증을 앓고 있습니다.
dsh-auto-memory는 이 격차를 네이티브하게 메웁니다:
| MCP 브릿지 접근 방식 | dsh-auto-memory | |
|---|---|---|
| 모든 시스템 프롬프트에 자동으로 주입되는 메모리 | ✗ | ✓ (비어 있을 때 토큰 제로) |
| ... | ||
메모리는 $DSH_HOME/memory/ 아래의 일반 파일입니다 — 수동 편집, grep 검색 가능, git 친화적이며, 당신의 것입니다. |
한 분 만에 경험해 보세요
node scripts/demo.mjs # API 키나 브라우저 없이: 감시(watch) 쓰기 → 인덱스 → 주입(inject) → 회상(recall) → 망각(forget)
실제 대화에서라면, 기억할 가치가 있는 내용을 에이전트에게 알려주세요. 모델은 Claude Code의 쓰기 원칙을 따라 memory_write / memory_read / memory_list / memory_delete를 호출합니다: 쌓아 올리기보다는 중복 제거 및 업데이트 방식, 절대 날짜만 사용, [[이름]] 크로스링크, 그리고 '왜(Why):' / '적용 방법(How to apply):' 라인으로 구성된 피드백 기억.
모델이 실제로 보는 것
모든 요청은 하나의 시스템 프롬프트 섹션(순서 4000)에 인덱스를 포함하며, 이는 단계별로 재평가되고, 바이트 예산이 할당되며, 저장소가 비어있으면 완전히 사라집니다:
# 영구 메모리 인덱스
## 프로젝트 기억
- [PostgreSQL 부하 테스트 경험](id-generator-benchmark.md) — psycopg2 연결 풀에 함정(pitfall)을 겪은 경험 (2026-09)
...
중국어 제목, YAML 프론트매터, 기억당 하나의 파일—이는 dsh의 프롬프트 어셈블리 파이프라인 위에서 네이티브하게 재구축된 Claude Code의 MEMORY.md 모델과 정확히 일치합니다.
첫 출시 전 강화된 부분
이 플러그인은 v0.1.0 이전에 12개 에이전트의 적대적 코드 검토 (소스 레벨 심사 680k 토큰)를 거쳤습니다. 회귀 테스트와 함께 두 가지가 필드 사고였을 수 있는 것을 포함하여, 다섯 가지 프로덕션 등급의 함정(trap)이 포착되어 수정되었습니다:
- NTFS 무음 파괴자:
memory라는 이름의 기억이 대소문자를 구분하지 않는 파일 시스템에서MEMORY.md와 충돌합니다—기록을 파괴하면서 쓰기는 성공합니다. 예약된 이름 가드(reserved-name guard)에 의해 차단되었습니다. - 오염된 프롬프트 폭탄: 모든 기억에 포함된 세 개의 리터럴
{{{ }}}중괄호는 작업 공간의 모든 모델 요청을 충돌시킬 수 있습니다—모델이 스스로 복구할 방법이 없습니다. 수렴하는(converging) 정화기(sanitizer)에 의해 무력화되었습니다.
추가적으로: 고아가 된 잠금(orphaned-lock) 자체 치유 기능 (Ctrl+C로 메모리 저장소를 망가뜨릴 수 없음), 심볼릭 링크 읽기 보호, 잘못된 파일 허용, KV-접두사 캐시를 보호하기 위한 안정적인 인덱스 순서 지정, 그리고 엄격한 사용자 정의 세션 이벤트 미사용 정책(이벤트는 dsh 세션이 재개되는 것을 거부하게 만듭니다).
주장만 하는 것이 아니라 측정된 것
결정론적 평가 레이어(deterministic evaluation layer) (evals/)는 CI에서 실행되며, LLM 없이 완전히 재현 가능합니다:
- 주입 예산은 모든 규모에서 유지: 20/50/100/200개의 메모리 → 주입된 섹션은 ≤ 4 KB(측정 기준 4065/4048/4018/3940 바이트)를 유지하며, 잘림 마커가 포함됩니다. 빈 스토어는 0바이트를 주입합니다.
- 제거(Eviction) 오류 없음: 네 가지 클래스 혼합 시나리오에서 스테일 제로 리드 메모리만 숨겨지며, 파일 손실은 없습니다. 한 번의 읽기가 복구시킵니다.
- 알려진 제한 사항, 기준선으로 고정: 예산 잘림은 현재 관련성 순위가 아닌 위치(인덱스 순서) 기반입니다. 탐색기 보존율은 절반 예산 압력 하에서 N이 증가함에 따라 ~38%→10%로 떨어집니다. 핀닝(Pinning)이 중요한 것을 고정합니다: 핀 처리된 프로브는 동일한 예산에서 **≥80%**를 유지합니다 (0.3.0); 전체 관련성 순위 지정은 로드맵에 남아 있습니다.
이 평가 레이어는 이미 실제 버그를 포착했습니다: 정책 텍스트를 제외하는 데 사용되던 바이트 예산이 약 800바이트 초과(수정 및 회귀 테스트 완료).
106개 테스트 + 세 가지 평가 레이어(L0 결정론적 / L1 재현율 / L3 통합). yaml 외에는 런타임 의존성이 없으며, 약 32 kB가 설치됩니다.
설치 (Install)
dsh plugin --profile demo add dsh-auto-memory # npm에서 가져옴 (사전 빌드)
dsh --profile demo # 프로필 재시작
소스에서: npm install && npm run build && dsh plugin --profile demo add /abs/path.
@deepseek-ai/dsh >= 0.1.5-rc.2 (Node ^22.19 || >=24)가 필요합니다. 공식 데스크톱 클라이언트와 작동하며, 0.2.0-rc.2에서 검증되었습니다.
설정 (Configuration)
프로필의 cordis.patch.yml에서 재정의합니다 (설정이 전체를 대체함):
- id: auto-memory
config:
maxBytes: 4096 # 주입 예산 (인덱스 + 가이던스 + 래퍼)
...
작동 방식 (How it works) (60초)
- Write:
tool execute를 호출할 때, 이름이[a-z0-9-]로 정규화되고 (예약된 이름은 거부됨), 프로세스 간 파일 잠금(공식dsh-atomic-write)을 사용하며, 원자적 쓰기(atomic write)가 이루어지고, 잠금 내부에서 전체 인덱스가 재구축됩니다. - Inject: 매 단계 어셈블리마다 하나의 동적 섹션이 재평가됩니다. 이 과정은 인덱스를 동기적으로 읽고, 바이트 예산을 강제하며,
{{를 무효화합니다. 도구 쓰기는 다음 요청에서 효력이 발생합니다. 다시 시작할 필요가 없습니다. - Audit: 사용자 정의 세션 이벤트는 없습니다 (타사 유형은 dsh가 재개하는 것을 거부하게 만듭니다). 모든 것은 표준
tool/call/tool/result을 통해 흐릅니다.
심층 분석: design decisions · postmortem: shipping a PR to awesome-dsh-plugin
로드맵
- P0 — 타입 지정 저장소(typed store), 네 가지 도구, 프롬프트 주입(prompt injection), 범위별 계층(scoped layers), 충돌 안전성(crash safety)
- P1 — 세션 종료 시 자동 통합(auto-consolidation), 망각 및 제거(forgetting & eviction), 회상 확장(recall expansion), 인간 승인 대량 삭제(human-gated bulk delete)
- P2 — 웹 UI 메모리 패널, 토큰 비용/회상 품질 벤치마크
- P3 — 업데이트-교체 의미론(update-replace semantics), 평가 하니스와 공유되는 매칭 코어
- 주입 감사 로그 (#11), L2 종단 간 평가(end-to-end eval)
변경 로그
버전별 노트: CHANGELOG.md · GitHub 릴리스
라이선스
MIT
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Coding Assistants의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기