영구 메모리
Triggerfish 에이전트는 영구 세션 간 메모리를 가집니다. 에이전트는 대화, 재시작, 트리거 기상을 넘어 유지되는 사실, 선호도, 컨텍스트를 저장할 수 있습니다. 메모리는 분류 게이팅됩니다 -- 에이전트는 세션 taint 이상으로 읽거나 이하로 쓸 수 없습니다.
도구
memory_save
사실 또는 정보를 영구 메모리에 저장합니다.
| 매개변수 | 유형 | 필수 | 설명 |
|---|---|---|---|
key | string | 예 | 고유 식별자 (예: user-name, project-deadline) |
content | string | 예 | 기억할 내용 |
tags | array | 아니오 | 분류를 위한 태그 (예: ["personal", "preference"]) |
분류는 현재 세션의 taint 수준으로 자동 설정됩니다. 에이전트는 메모리가 어떤 수준으로 저장되는지 선택할 수 없습니다.
memory_get
키로 특정 메모리를 검색합니다.
| 매개변수 | 유형 | 필수 | 설명 |
|---|---|---|---|
key | string | 예 | 검색할 메모리의 키 |
메모리가 존재하고 현재 보안 수준에서 접근 가능하면 메모리 내용을 반환합니다. 더 높은 분류 버전이 더 낮은 것을 가립니다.
memory_search
자연어를 사용하여 접근 가능한 모든 메모리를 검색합니다.
| 매개변수 | 유형 | 필수 | 설명 |
|---|---|---|---|
query | string | 예 | 자연어 검색 쿼리 |
max_results | number | 아니오 | 최대 결과 수 (기본값: 10) |
스테밍이 있는 SQLite FTS5 전문 검색을 사용합니다. 결과는 현재 세션의 보안 수준으로 필터링됩니다.
memory_list
접근 가능한 모든 메모리를 나열하며 선택적으로 태그로 필터링합니다.
| 매개변수 | 유형 | 필수 | 설명 |
|---|---|---|---|
tag | string | 아니오 | 필터링할 태그 |
memory_delete
키로 메모리를 삭제합니다. 레코드는 소프트 삭제됩니다 (숨겨지지만 감사를 위해 유지).
| 매개변수 | 유형 | 필수 | 설명 |
|---|---|---|---|
key | string | 예 | 삭제할 메모리의 키 |
현재 세션의 보안 수준에서만 메모리를 삭제할 수 있습니다.
메모리 작동 방식
자동 추출
에이전트는 사용자가 공유하는 중요한 사실 -- 개인 세부 정보, 프로젝트 컨텍스트, 선호도 -- 을 설명적 키를 사용하여 능동적으로 저장합니다. 이것은 SPINE.md에 의해 안내되는 프롬프트 수준 동작입니다. LLM은 무엇을 저장할지 선택합니다; 정책 계층은 어떤 수준으로 저장할지 강제합니다.
분류 게이팅
모든 메모리 레코드는 저장 시 세션 taint에 동일한 분류 수준을 가집니다:
CONFIDENTIAL세션 중 저장된 메모리는CONFIDENTIAL로 분류됩니다PUBLIC세션은CONFIDENTIAL메모리를 읽을 수 없습니다CONFIDENTIAL세션은CONFIDENTIAL과PUBLIC메모리 모두 읽을 수 있습니다
이것은 모든 읽기 작업에서 canFlowTo 검사로 시행됩니다. LLM은 이를 우회할 수 없습니다.
메모리 섀도잉
같은 키가 여러 분류 수준에 존재하면 현재 세션에 보이는 가장 높은 분류 버전만 반환됩니다. 이는 분류 경계를 넘는 정보 유출을 방지합니다.
예시: user-name이 PUBLIC(공개 채팅 중 설정)과 INTERNAL(비공개 세션 중 업데이트) 모두에 존재하면 INTERNAL 세션은 INTERNAL 버전을 보고 PUBLIC 세션은 PUBLIC 버전만 봅니다.
저장소
메모리는 StorageProvider 인터페이스(세션, cron 작업, 할 일에 사용되는 것과 동일한 추상화)를 통해 저장됩니다. 전문 검색은 스테밍이 있는 빠른 자연어 쿼리를 위해 SQLite FTS5를 사용합니다.
보안
- 분류는 항상
PRE_TOOL_CALLhook에서session.taint로 강제됩니다 -- LLM은 더 낮은 분류를 선택할 수 없습니다 - 모든 읽기는
canFlowTo로 필터링됩니다 -- 세션 taint 이상의 메모리는 절대 반환되지 않습니다 - 삭제는 소프트 삭제입니다 -- 레코드는 숨겨지지만 감사를 위해 유지됩니다
- 에이전트는 높은 분류 데이터를 읽고 더 낮은 수준으로 다시 저장하여 메모리 분류를 상승시킬 수 없습니다 (write-down 방지 적용)
보안 LLM은 메모리 분류를 절대 선택하지 않습니다. 정책 계층에 의해 항상 현재 세션의 taint 수준으로 강제됩니다. 이것은 구성으로 해제할 수 없는 하드 경계입니다. :::
