module-4
$
npx mdskill add langchain-ai/lca-deployment/module-4Teaches LangGraph storage mechanisms and deepagents backend abstraction
- Explains checkpointer, Store, and filesystem memory types in LangGraph
- Uses SDK methods like put_item, get_item, and search_items for Store interaction
- Demonstrates how deepagents abstracts storage with BackendProtocol interface
- Shows how tutor system uses Store for profiles and filesystem for static content
SKILL.md
.github/skills/module-4View on GitHub ↗
--- name: module-4 description: Teaching instructions for Module 4 (Storage) — use when module_id is module-4 --- # Module 4 — Storage ## Lesson Title Memory and Storage in LangGraph Deployments ## Goal Help the student understand the three memory mechanisms in a LangGraph deployment (checkpointer, Store, filesystem), how to read and write the Store from a client, and how deepagents wraps these primitives behind a backend abstraction. ## How to run this lesson - Start with the three memory types: each has a different scope and persistence story. Make sure the student can name them and say what each holds before diving into APIs. - The **checkpointer** is automatic — no API to call directly. Mention it but don't dwell. - The **Store** is the focus: cross-thread, persistent, namespaced. The SDK's `client.store.put_item / get_item / search_items` is how the UI reads/writes student profiles. - The **filesystem** is read-only for runtime data (it's baked into the Docker image), useful for static content like skills and AGENTS.md. - After the SDK surface is solid, introduce deepagents' BackendProtocol. The same `ls`/`read`/`download_files` interface is implemented by FilesystemBackend, StoreBackend, and StateBackend — swapping backends changes where data lives without changing middleware code. - Reinforce the tutor as a worked example: register/login writes profile + sessions to the Store; the dynamic prompt reads the profile on every model call; skills are loaded from the filesystem by SkillsMiddleware. ## Key concepts to cover 1. Three memory types: checkpointer (per-thread, automatic), Store (cross-thread, namespaced, persistent), filesystem (read-only at runtime, image-baked) 2. Store namespace — a tuple keying into a per-deployment KV space; in deep_tutor it's `(email_with_dot_to_underscore,)` 3. SDK Store API — `put_item`, `get_item`, `search_items`, `delete_item`, `list_namespaces` 4. The `langgraph_auth_user` and the `runtime.store` injection inside graph nodes — direct access, no HTTP 5. deepagents `BackendProtocol` — uniform interface (`ls`, `read`, `write`, `download_files`) 6. FilesystemBackend with `virtual_mode=True` and `root_dir` — `/skills/` maps to `<root>/skills/` 7. StoreBackend — same interface, data lives in the Store instead of disk 8. StateBackend — same interface, data lives in agent state (per-thread) 9. SkillsMiddleware and MemoryMiddleware — what `create_deep_agent` wires up internally 10. Why skills are read on demand (`read_file` tool) instead of all loaded upfront — progressive disclosure for token economy 11. Why the filesystem is fine for read-only data but problematic for writes — a thread may execute across multiple containers 12. Permissions — `FilesystemPermission(operations=["write"], paths=["/skills/**"], mode="deny")` keeps the agent from clobbering skill files at runtime ## Tone guidance Concrete and example-driven. The student has already used the SDK in module 2; now we're extending those calls with Store operations. When explaining backends, lead with what changes (where data lives) and what stays the same (the middleware code). ## Reference material Full reference material is in `information.md` in this directory. Read it before answering factual questions.