К основному содержанию
скилл Claude Code CX Codex Cursor GitHub Copilot

deep-agents-memory — скилл для Claude Code: память и бэкенды

Скилл разбирает бэкенды памяти в Deep Agents: что живёт внутри одного потока, что переживает перезапуск и как включать файловые инструменты вроде ls и grep.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add langchain-ai/langchain-skills --skill deep-agents-memory -a claude-code
Открыть на GitHub

Что делает deep-agents-memory

Скилл нужен, когда агент на deepagents упирается в вопрос «куда он пишет». По умолчанию работает StateBackend: файлы лежат в состоянии треда и пропадают вместе с ним. Для памяти между сессиями есть StoreBackend.

FilesystemMiddleware даёт модели готовый набор инструментов: ls, read_file, write_file, edit_file, glob, grep. Имена этих инструментов поменять нельзя, а FilesystemBackend открывает реальный диск через root_dir и ограничение virtual_mode. В веб-сервер такой бэкенд ставить не стоит: скилл прямо велит брать StateBackend или песочницу.

CompositeBackend раскидывает пути по разным хранилищам. Скажем, /draft.txt остаётся эфемерным, а /memories/ уходит в стор и доступен из другого треда. Тут и типичная ошибка: StoreBackend без переданного store не заработает, ему нужен экземпляр вроде InMemoryStore(). Примеры даны на Python и TypeScript, плюс отдельный рецепт доступа к store из своего @tool.

Какие задачи решает

  • сохранить настройки пользователя между тредами
  • развести пути по разным хранилищам в одном агенте
  • дать агенту править реальные файлы с подтверждением записи
  • вытащить store в собственный инструмент
  • перестать терять черновики при завершении треда

Примеры запросов агенту

  • Настрой Deep Agents так, чтобы `/memories/user-prefs.txt` переживал перезапуск треда
  • Подключи `FilesystemBackend` с `root_dir="."` в `virtual_mode` и спрашивай подтверждение перед `write_file`
  • Почему второй тред не видит файл, который первый сохранил в `/memories/style.txt`?

Как установить deep-agents-memory

1Через Skills CLI (Vercel)

npx skills add langchain-ai/langchain-skills --skill deep-agents-memory -a claude-code

2Вручную: положить файлы

~/.claude/skills/deep-agents-memory/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/deep-agents-memory/

Из того же набора14

Весь набор →
langgraph-persistence langchain-ai Скилл по персистентности LangGraph: как подключить checkpointer, развести диалоги по thread_id и откатиться к прошлому состоянию графа. Claude Code CX Codex Cursor +1 18 000установок langgraph-fundamentals langchain-ai Скилл для написания кода LangGraph на любой платформе. Охватывает StateGraph, схемы состояния, ноды, рёбра, Command, Send, invoke, потоковую передачу и обработку ошибок. Claude Code CX Codex Cursor +1 18 000установок langchain-rag langchain-ai Даёт ИИ-агенту готовые шаблоны и код для сборки RAG-пайплайнов на LangChain в Python и TypeScript: от загрузки документов до векторного поиска. Claude Code CX Codex Cursor +1 17 500установок langchain-fundamentals langchain-ai Помогает писать агентов LangChain через create_agent(), описывать инструменты и добавлять middleware. Пригодится для состояния диалога, подтверждений действий и обработки ошибок. Claude Code CX Codex Cursor +1 17 400установок langgraph-human-in-the-loop langchain-ai Скилл для создания графов с перерывами, ждущих человека. Пригодится, когда нужно показать результат агента, попросить одобрение или валидировать ввод перед продолжением. Claude Code CX Codex Cursor +1 17 200установок langchain-middleware langchain-ai Скилл добавляет промежуточные хуки для LangChain-агентов: останавливает выполнение перед опасными вызовами инструментов, даёт человеку одобрить, отредактировать или отклонить действие, перехватывает вызовы для логирования и retry-логики. Claude Code CX Codex Cursor +1 16 200установок deep-agents-orchestration langchain-ai Скилл помогает настроить оркестрацию в Deep Agents: делегирование субагентам, планирование через список задач и подтверждение действий человеком. Claude Code CX Codex Cursor +1 16 100установок langchain-dependencies langchain-ai Подбирает точный набор пакетов и версий для LangChain, LangGraph и LangSmith. Помогает избежать несовместимых библиотек при старте проекта на Python или TypeScript. Claude Code CX Codex Cursor +1 16 000установок

Похожие

github-project-management ruvnet Скилл превращает рутину вокруг issue и доски проекта в вызовы gh и ruv-swarm: метки, подзадачи, поиск дублей. Пригодится, когда задач много, а порядка в трекере нет. Claude Code CX Codex Cursor +1 1 400установок ads-plan AgriciDaniel Скилл ведёт агента по шагам медиаплана: цели, площадки, архитектура кампаний, бюджет, измерения и условия отката. Пригодится до первого запуска в рекламном кабинете. Claude Code CX Codex Cursor +1 4 000установок unfreeze garrytan Отменяет заморозку директорий, установленную командой /freeze, и разрешает редактировать все папки проекта. Нужен, если вы случайно заморозили нужную область или хотите вернуться к свободному редактированию. Claude Code CX Codex Cursor +1 327установок cli-developer https://github.com/Jeffallan Скилл для разработки командной строки: помогает строить CLI-инструменты с парсингом флагов, интерактивными подсказками, прогресс-барами и автодополнением в bash/zsh/fish. Работает с commander, click, typer и cobra. Claude Code CX Codex Cursor +1 4 800установок opensrc vercel-labs Даёт агенту исходный код зависимостей, когда типов и документации мало для разбора внутренней логики или отладки поведения библиотеки. Claude Code CX Codex Cursor +1 2 600установок golang-gopls samber Семантическая навигация и рефакторинг Go-кода через gopls, официальный языковой сервер. Пригодится, когда grep находит текст, а нужно понять типы, связи и структуру сборки. Claude Code CX Codex Cursor +1 10 900установок setup-matt-pocock-skills Matt Pocock Скилл настраивает репозиторий для инженерных скиллов Matt Pocock: задаёт трекер задач, метки триажа и расположение доменной документации. Запустите его перед первым использованием остальных скиллов. Claude Code 1 052 851установок to-tickets Matt Pocock Разбивает план, спецификацию или переписку на небольшие сквозные задачи и отмечает, какие из них блокируют остальные. Пригодится, когда нужно согласовать порядок работы до публикации задач в трекере. Claude Code 711 230установок

Вопросы о deep-agents-memory

Как установить deep-agents-memory в Claude Code?

Выполните npx skills add langchain-ai/langchain-skills --skill deep-agents-memory -a claude-code. Файл скилла появится в ~/.claude/skills/deep-agents-memory/SKILL.md.

Что делает deep-agents-memory?

Объясняет, как в Deep Agents устроены бэкенды файлов и памяти и какой из них выбрать под задачу. Внутри готовые примеры настройки StateBackend, StoreBackend, CompositeBackend и FilesystemBackend на Python и TypeScript.

Что нужно для работы StoreBackend?

Экземпляр store, переданный в create_deep_agent, например InMemoryStore() из langgraph.store.memory. Без него персистентный бэкенд не подключится.

Исходный текст

SKILL.md · MIT
---
name: deep-agents-memory
description: "INVOKE THIS SKILL when your Deep Agent needs memory, persistence, or filesystem access. Covers StateBackend (ephemeral), StoreBackend (persistent), FilesystemMiddleware, and CompositeBackend for routing."
---

<overview>
Deep Agents use pluggable backends for file operations and memory:

**Short-term (StateBackend)**: Persists within a single thread, lost when thread ends
**Long-term (StoreBackend)**: Persists across threads and sessions
**Hybrid (CompositeBackend)**: Route different paths to different backends

FilesystemMiddleware provides tools: `ls`, `read_file`, `write_file`, `edit_file`, `glob`, `grep`
</overview>

<backend-selection>

| Use Case | Backend | Why |
|----------|---------|-----|
| Temporary working files | StateBackend | Default, no setup |
| Local development CLI | FilesystemBackend | Direct disk access |
| Cross-session memory | StoreBackend | Persists across threads |
| Hybrid storage | CompositeBackend | Mix ephemeral + persistent |

</backend-selection>

<ex-default-state-backend>
<python>
Default StateBackend stores files ephemerally within a thread.

```python
from deepagents import create_deep_agent

agent = create_deep_agent()  # Default: StateBackend
result = agent.invoke({
    "messages": [{"role": "user", "content": "Write notes to /draft.txt"}]
}, config={"configurable": {"thread_id": "thread-1"}})
# /draft.txt is lost when thread ends
```
</python>
<typescript>
Default StateBackend stores files ephemerally within a thread.

```typescript
import { createDeepAgent } from "deepagents";

const agent = await createDeepAgent();  // Default: StateBackend
const result = await agent.invoke({
  messages: [{ role: "user", content: "Write notes to /draft.txt" }]
}, { configurable: { thread_id: "thread-1" } });
// /draft.txt is lost when thread ends
```
</typescript>
</ex-default-state-backend>

<ex-composite-backend-for-hybrid>
<python>
Configure CompositeBackend to route paths to different storage backends.

```python
from deepagents import create_deep_agent
from deepagents.backends import CompositeBackend, StateBackend, StoreBackend
from langgraph.store.memory import InMemoryStore

store = InMemoryStore()

composite_backend = lambda rt: CompositeBackend(
    default=StateBackend(rt),
    routes={"/memories/": StoreBackend(rt)}
)

agent = create_deep_agent(backend=composite_backend, store=store)

# /draft.txt -> ephemeral (StateBackend)
# /memories/user-prefs.txt -> persistent (StoreBackend)
```
</python>
<typescript>
Configure CompositeBackend to route paths to different storage backends.

```typescript
import { createDeepAgent, CompositeBackend, StateBackend, StoreBackend } from "deepagents";
import { InMemoryStore } from "@langchain/langgraph";

const store = new InMemoryStore();

const agent = await createDeepAgent({
  backend: (config) => new CompositeBackend(
    new StateBackend(config),
    { "/memories/": new StoreBackend(config) }
  ),
  store
});

// /draft.txt -> ephemeral (StateBackend)
// /memories/user-prefs.txt -> persistent (StoreBackend)
```
</typescript>
</ex-composite-backend-for-hybrid>

<ex-cross-session-memory>
<python>
Files in /memories/ persist across threads via StoreBackend routing.

```python
# Using CompositeBackend from previous example
config1 = {"configurable": {"thread_id": "thread-1"}}
agent.invoke({"messages": [{"role": "user", "content": "Save to /memories/style.txt"}]}, config=config1)

config2 = {"configurable": {"thread_id": "thread-2"}}
agent.invoke({"messages": [{"role": "user", "content": "Read /memories/style.txt"}]}, config=config2)
# Thread 2 can read file saved by Thread 1
```
</python>
<typescript>
Files in /memories/ persist across threads via StoreBackend routing.

```typescript
// Using CompositeBackend from previous example
const config1 = { configurable: { thread_id: "thread-1" } };
await agent.invoke({ messages: [{ role: "user", content: "Save to /memories/style.txt" }] }, config1);

const config2 = { configurable: { thread_id: "thread-2" } };
await agent.invoke({ messages: [{ role: "user", content: "Read /memories/style.txt" }] }, config2);
// Thread 2 can read file saved by Thread 1
```
</typescript>
</ex-cross-session-memory>

<ex-filesystem-backend-local-dev>
<python>
Use FilesystemBackend for local development with real disk access and human-in-the-loop.

```python
from deepagents import create_deep_agent
from deepagents.backends import FilesystemBackend
from langgraph.checkpoint.memory import MemorySaver

agent = create_deep_agent(
    backend=FilesystemBackend(root_dir=".", virtual_mode=True),  # Restrict access
    interrupt_on={"write_file": True, "edit_file": True},
    checkpointer=MemorySaver()
)

# Agent can read/write actual files on disk
```
</python>
<typescript>
Use FilesystemBackend for local development with real disk access and human-in-the-loop.

```typescript
import { createDeepAgent, FilesystemBackend } from "deepagents";
import { MemorySaver } from "@langchain/langgraph";

const agent = await createDeepAgent({
  backend: new FilesystemBackend({ rootDir: ".", virtualMode: true }),
  interruptOn: { write_file: true, edit_file: true },
  checkpointer: new MemorySaver()
});
```
</typescript>

**Security: Never use FilesystemBackend in web servers - use StateBackend or sandbox instead.**
</ex-filesystem-backend-local-dev>

<ex-store-in-custom-tools>
<python>
Access the store directly in custom tools for long-term memory operations.

```python
from langchain.tools import tool, ToolRuntime
from langchain.agents import create_agent
from langgraph.store.memory import InMemoryStore

@tool
def get_user_preference(key: str, runtime: ToolRuntime) -> str:
    """Get a user preference from long-term storage."""
    store = runtime.store
    result = store.get(("user_prefs",), key)
    return str(result.value) if result else "Not found"

@tool
def save_user_preference(key: str, value: str, runtime: ToolRuntime) -> str:
    """Save a user preference to long-term storage."""
    store = runtime.store
    store.put(("user_prefs",), key, {"value": value})
    return f"Saved {key}={value}"

store = InMemoryStore()

agent = create_agent(
    model="gpt-4.1",
    tools=[get_user_preference, save_user_preference],
    store=store
)
```
</python>
</ex-store-in-custom-tools>

<boundaries>
### What Agents CAN Configure

- Backend type and configuration
- Routing rules for CompositeBackend
- Root directory for FilesystemBackend
- Human-in-the-loop for file operations

### What Agents CANNOT Configure

- Tool names (ls, read_file, write_file, edit_file, glob, grep)
- Access files outside virtual_mode restrictions
- Cross-thread file access without proper backend setup
</boundaries>

<fix-storebackend-requires-store>
<python>
StoreBackend requires a store instance.

```python
# WRONG
agent = create_deep_agent(backend=lambda rt: StoreBackend(rt))

# CORRECT
agent = create_deep_agent(backend=lambda rt: StoreBackend(rt), store=InMemoryStore())
```
</python>
<typescript>
StoreBackend requires a store instance.

```typescript
// WRONG
const agent = await createDeepAgent({ backend: (c) => new StoreBackend(c) });

// CORRECT
const agent = await createDeepAgent({ backend: (c) => new StoreBackend(c), store: new InMemoryStore() });
```
</typescript>
</fix-storebackend-requires-store>

<fix-statebackend-files-dont-persist>
<python>
StateBackend files are thread-scoped - use same thread_id or StoreBackend for cross-thread access.

```python
# WRONG: thread-2 can't read file from thread-1
agent.invoke({"messages": [...]}, config={"configurable": {"thread_id": "thread-1"}})  # Write
agent.invoke({"messages": [...]}, config={"configurable": {"thread_id": "thread-2"}})  # File not found!
```
</python>
<typescript>
StateBackend files are thread-scoped - use same thread_id or StoreBackend for cross-thread access.

```typescript
// WRONG: thread-2 can't read file from thread-1
await agent.invoke({ messages: [...] }, { configurable: { thread_id: "thread-1" } });  // Write
await agent.invoke({ messages: [...] }, { configurable: { thread_id: "thread-2" } });  // File not found!
```
</typescript>
</fix-statebackend-files-dont-persist>

<fix-path-prefix-for-persistence>
<python>
Path must match CompositeBackend route prefix for persistence.

```python
# With routes={"/memories/": StoreBackend(rt)}:
agent.invoke(...)  # /prefs.txt -> ephemeral (no match)
agent.invoke(...)  # /memories/prefs.txt -> persistent (matches route)
```
</python>
<typescript>
Path must match CompositeBackend route prefix for persistence.

```typescript
// With routes: { "/memories/": StoreBackend }:
await agent.invoke(...);  // /prefs.txt -> ephemeral (no match)
await agent.invoke(...);  // /memories/prefs.txt -> persistent (matches route)
```
</typescript>
</fix-path-prefix-for-persistence>

<fix-production-store>
<python>
Use PostgresStore for production (InMemoryStore lost on restart).

```python
# WRONG                              # CORRECT
store = InMemoryStore()              store = PostgresStore(connection_string="postgresql://...")
```
</python>
<typescript>
Use PostgresStore for production (InMemoryStore lost on restart).

```typescript
// WRONG                                    // CORRECT
const store = new InMemoryStore();          const store = new PostgresStore({ connectionString: "..." });
```
</typescript>
</fix-production-store>

<fix-filesystem-backend-needs-virtual-mode>
<python>
Enable virtual_mode=True to restrict path access (prevents ../ and ~/ escapes).

```python
backend = FilesystemBackend(root_dir="/project", virtual_mode=True)  # Secure
```
</python>
</fix-filesystem-backend-needs-virtual-mode>

<fix-longest-prefix-match>
<python>
CompositeBackend matches longest prefix first.

```python
routes = {"/mem/": StoreBackend(rt), "/mem/temp/": StateBackend(rt)}
# /mem/file.txt -> StoreBackend, /mem/temp/file.txt -> StateBackend (longer match)
```
</python>
</fix-longest-prefix-match>

© langchain-ai · MIT · langchain-ai/langchain-skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой