본문으로 건너뛰기

영구 기억

Hermes Agent는 세션 전반에 걸쳐 지속되는 메모리를 결합했습니다. 이것은 당신의 선호도, 당신의 프로젝트, 당신의 환경을 기억하고, 그것을 배웠습니다.

어떻게 작동하나요?

2개의 파일은 대리인의 기억을 위로 만듭니다:

파일 형식제품정보숯 한계
** MEMORY.md **에이전트의 개인 노트 — 환경 사실, 컨벤션, 것들 배운2,200개 (~800개)
** 사용자.md **사용자 프로필 - 선호도, 통신 스타일, 기대1,375 숯 (~500 토큰)

둘 다 ~/.hermes/memories/에 저장되며 세션 시작에서 언 스냅 샷으로 시스템 프롬프트로 주입됩니다. 이 에이전트는 memory 도구를 통해 자체 메모리를 관리합니다. 추가, 교체 또는 항목을 제거 할 수 있습니다.

정보

문자 제한은 메모리를 집중합니다. 기억이 가득 차있을 때, 대리인은 새로운 정보를 위한 방을 만들기 위하여 입장을 통합하거나 대체합니다.

시스템 Prompt에서 메모리 앱

모든 세션의 시작에서 메모리 항목은 디스크에서로드하고 언 블록으로 시스템 프롬프트로 렌더링됩니다.

══════════════════════════════════════════════
MEMORY (your personal notes) [67% — 1,474/2,200 chars]
══════════════════════════════════════════════
User's project is a Rust web service at ~/code/myapi using Axum + SQLx
§
This machine runs Ubuntu 22.04, has Docker and Podman installed
§
User prefers concise responses, dislikes verbose explanations

형식은 다음과 같습니다:

  • (MEMORY 또는 USER PROFILE)를 저장하는 헤더
  • 사용법 비율과 특성은 이렇게 대리인 수용량을 알고 있습니다
  • § (구글 표시) delimiters
  • 항목은 멀티 라인이 될 수 있습니다

**Frozen 스냅 샷 패턴: ** 시스템 프롬프트 주입은 세션 시작에서 한 번 캡처하고 중간 세션을 변경하지 않습니다. 이것은 의도적입니다. 성능에 LLM의 접두사 캐시를 보존합니다. 에이전트가 세션 중 메모리 항목을 추가 / 제거하면 변경은 즉시 디스크에 지속되지만 다음 세션이 시작될 때까지 시스템 프롬프트에 표시되지 않습니다. 도구 응답은 항상 라이브 상태를 보여줍니다.

메모리 도구 동작

이 작업을 가진 memory 도구를 사용합니다

  • add - 새로운 메모리 입력 추가
  • replace — 업데이트된 내용으로 기존 항목을 대체합니다. old_text)
  • remove — 더 이상 관련된 항목 제거 (old_text를 통해 일치하는 하위 문자열을 사용)

아무 read 동작이 없습니다. 메모리 콘텐츠는 세션 시작에서 시스템 프롬프트에 자동으로 주사됩니다. 에이전트는 대화의 일부로 기억을 볼 수 있습니다.

substring 일치

replaceremove 작업은 짧은 고유의 하위 문자열 매칭을 사용합니다. 전체 항목 텍스트가 필요하지 않습니다. old_text 매개 변수는 정확히 하나의 입력을 식별하는 고유의 하위 문자열이어야합니다

# If memory contains "User prefers dark mode in all editors"
memory(action="replace", target="memory",
old_text="dark mode",
content="User prefers light mode in VS Code, dark mode in terminal")

하위 문자열이 여러 항목을 일치하면 오류가 더 구체적인 일치를 요청합니다.

2개의 표적 설명

memory - 에이전트의 개인 노트

에이전트는 환경에 대해 기억해야 할 사항, 워크플로우 및 교훈을 배운:

  • 환경 사실 (OS, 도구, 프로젝트 구조)
  • 프로젝트 컨벤션 및 구성
  • 도구 quirks 및 운동 발견
  • 완료된 작업 일기 항목
  • 일하는 기술과 기술

user - 사용자 프로필

사용자의 정체성, 선호도 및 통신 스타일에 대한 정보:

  • 이름, 역할, 시간대
  • 통신 선호도 (대략, 형식 선호도)
  • 애완 동물 오줌과 피하는 것들
  • 작업 흐름 습관
  • 기술 능력 수준

대 건너뛰기

이 저장 (Proactively)

에이전트는 자동으로 저장 — 당신은 요청할 필요가 없습니다. 그것은 배울 때 저장:

  • 사용자 선호도: "나는 JavaScript에 TypeScript를 선호한다" → user에 저장
  • 환경 사실: "이 서버는 PostgreSQL 16와 함께 Debian 12을 실행합니다" → memory에 저장
  • ** 기능:** "Don't use sudo for Docker commands, user is in docker group" → memory로 저장
  • 조건: "프로젝트는 탭, 120-char 라인 폭, Google-style docstrings"를 사용하고 memory에 저장합니다
  • 완료 작업: "Migrated database from MySQL to PostgreSQL on 2026-01-15" → memory에 저장
  • Explicit 요청: "내 API 키 교체가 매달 발생합니다" → memory에 저장

팟캐스트 이 름

  • Trivial/obvious info: "User asked about Python" — 너무 vague to be useful
  • ** 쉽게 재 발견 된 사실: ** "Python 3.12는 f-string 배열을 지원합니다" — 이 웹 검색할 수 있습니다
  • **Raw 데이터 덤프: ** 큰 코드 블록, 로그 파일, 데이터 테이블 - 메모리에 너무 큰
  • **Session-specific ephemera: ** 임시 파일 경로, 1-off debugging context
  • 콘텐츠 파일에서 이미 정보: SOUL.md 및 AGENTS.md 내용

용량 관리

메모리에는 시스템 프롬프트를 지키려면 엄격한 문자 제한이 있습니다

제품정보지원하다일반 항목
이름 *2,200 숯8-15 항목
제품정보1,375 숯5-10 항목

Happens 언제 기억이 가득

제한을 초과하는 항목을 추가하려고 할 때, 도구는 오류를 반환:

{
"success": false,
"error": "Memory at 2,100/2,200 chars. Adding this entry (250 chars) would exceed the limit. Replace or remove existing entries first.",
"current_entries": ["..."],
"usage": "2,100/2,200"
}

대리인은 그 후에 있어야 합니다:

  1. 현재 항목 읽기 (오류 응답에 표시)
  2. 제거되거나 통합될 수 있는 항목 식별
  3. replace를 사용하여 짧은 버전으로 관련 항목을 병합합니다
  4. 그런 다음 add 새로운 항목

** 모범 사례:** 기억이 80% 수용량 이상 때 (시스템 프롬프트 헤더에 보이지 않는)는, 새로운 것을 추가하기 전에 입장을 통합합니다. 예를 들어, 세 개의 별도의 "프로젝트는 X" 항목을 하나의 포괄적 인 프로젝트 설명 항목으로 병합합니다.

Good Memory Entries의 실제 예제

컴팩트, 정보 디센스 항목 작업:

# Good: Packs multiple related facts
User runs macOS 14 Sonoma, uses Homebrew, has Docker Desktop and Podman. Shell: zsh with oh-my-zsh. Editor: VS Code with Vim keybindings.

# Good: Specific, actionable convention
Project ~/code/api uses Go 1.22, sqlc for DB queries, chi router. Run tests with 'make test'. CI via GitHub Actions.

# Good: Lesson learned with context
The staging server (10.0.1.50) needs SSH port 2222, not 22. Key is at ~/.ssh/staging_ed25519.

# Bad: Too vague
User has a project.

# Bad: Too verbose
On January 5th, 2026, the user asked me to look at their project which is
located at ~/code/api. I discovered it uses Go version 1.22 and...

중복 예방

메모리 시스템은 자동으로 정확한 중복 항목을 거부합니다. 이미 존재하는 콘텐츠를 추가하려고 하는 경우, "no duplicate add" 메시지로 성공합니다.

보안 검사

메모리 항목은 시스템 프롬프트에 주입 된 이후로 허용되기 전에 주입 및 여과 패턴을 검사합니다. 콘텐츠 매칭 위협 패턴 (prompt Injection, credential exfiltration, SSH backdoors) 또는 보이지 않는 Unicode 문자가 차단됩니다.

MEMORY.md와 USER.md를 넘어, 에이전트는 session_search 도구를 사용하여 과거의 대화를 검색 할 수 있습니다

  • 모든 CLI 및 메시징 세션은 SQLite (~/.hermes/state.db)에서 FTS5 전체 텍스트 검색으로 저장됩니다
  • Gemini Flash summarization과 관련된 과거 대화 검색
  • 에이전트는 몇 주 전에 논의 된 것들을 찾을 수 있습니다, 그들은 활성 메모리에 있지 않는 경우에도
hermes sessions list    # Browse past sessions

session_search 대 메모리

제품 정보영구 기억세션 검색
** 용량 * * 이름~1,300 토큰 총무제한 (모든 세션)
** 속도**즉시 (시스템 프롬프트에서)검색 필요 + LLM 요약
사용 사례중요한 사실은 항상 유효합니다특정 과거 대화 찾기
*관리 * 이름자주 묻는 질문자동 — 저장된 모든 세션
토큰 비용세션당 고정(~1,300 토큰)On-demand (필요한 경우 연구)

Memory는 항상 상황에 있어야합니다 중요한 사실입니다. Session search는 "우리는 지난 주 X에 대해 토론합니까?" 에이전트가 과거 대화에서 특정 통화를 리콜해야하는 쿼리입니다.

제품 설명

# In ~/.hermes/config.yaml
memory:
memory_enabled: true
user_profile_enabled: true
memory_char_limit: 2200 # ~800 tokens
user_char_limit: 1375 # ~500 tokens

외부 메모리 공급자

MEMORY.md와 USER.md를 넘어가는 영구적인 기억, Hermes는 Honcho, OpenViking, Mem0, Hindsight, Holographic, RetainDB, ByteRover 및 Supermemory를 포함한 8 개의 외부 메모리 공급자 플러그인을 배송합니다.

외부 공급자는 ** alongside** 붙박이 기억 (그것을 대체하십시오)를 실행하고 지식 도표, semantic 수색, 자동적인 사실 적출 및 교차소 사용자 모델링과 같은 기능을 추가하십시오.

hermes memory setup      # pick a provider and configure it
hermes memory status # check what's active

Memory Providers 각 공급자, 설정 지침 및 비교에 대한 전체 세부 정보 가이드를 참조하십시오.