--- name: memory-management description: Core memory operations for pi-memory-md - create, read, update, and delete memory files --- # Memory Management Use this skill when working with pi-memory-md memory files. Memory is stored as markdown files with YAML frontmatter in a git repository. ## Design Philosophy Inspired by Letta memory filesystem: - **File-based memory**: Each memory is a `.md` file with YAML frontmatter - **Git-backed**: Full version control and cross-device sync - **Auto-injection**: Files in `core/` are automatically injected to context - **Organized by purpose**: Fixed structure for core info, flexible for everything else ## Directory Structure **Base path**: Configured via `settings["pi-memory-md"].localPath` (default: `~/.pi/memory-md`) ``` {localPath}/ └── {project-name}/ # Project memory root ├── core/ # Auto-injected to context every session │ ├── user/ # 【FIXED】User information │ │ ├── identity.md # Who the user is │ │ └── prefer.md # User habits and code style preferences │ │ │ └── project/ # 【FIXED】Project information (pre-created) │ ├── overview.md # Project overview │ ├── architecture.md # Architecture and design │ ├── conventions.md # Code conventions │ └── commands.md # Common commands │ ├── docs/ # 【AGENT-CREATED】Reference documentation ├── archive/ # 【AGENT-CREATED】Historical information ├── research/ # 【AGENT-CREATED】Research findings └── notes/ # 【AGENT-CREATED】Standalone notes ``` **Important:** `core/project/` is a pre-defined folder under `core/`. Do NOT create another `project/` folder at the project root level. ## Core Design: Fixed vs Flexible ### 【FIXED】core/user/ and core/project/ These are **pre-defined** and **auto-injected** into every session: **core/user/** - User information (2 fixed files) - `identity.md` - Who the user is (name, role, background) - `prefer.md` - User habits and code style preferences **core/project/** - Project information - `overview.md` - Project overview - `architecture.md` - Architecture and design - `conventions.md` - Code conventions - `commands.md` - Common commands - `changelog.md` - Development history **Why fixed?** - Always in context, no need to remember to load - Core identity that defines every interaction - Project context needed for all decisions **Rule:** ONLY `user/` and `project/` exist under `core/`. No other folders. ## Decision Tree ### Does this need to be in EVERY conversation? **Yes** → Place under `core/` - User-related → `core/user/` - Project-related → `core/project/` **No** → Place at project root level (same level as `core/`) - Reference docs → `docs/` - Historical → `archive/` - Research → `research/` - Notes → `notes/` - Other? → Create appropriate folder **Important:** `core/project/` is a FIXED subdirectory under `core/`. Always use `core/project/` for project-specific memory files, NEVER create a `project/` folder at the root level. ## YAML Frontmatter Schema Every memory file MUST have YAML frontmatter: ```yaml --- description: "Human-readable description of this memory file" tags: ["user", "identity"] created: "2026-02-14" updated: "2026-02-14" --- ``` **Required fields:** - `description` (string) - Human-readable description **Optional fields:** - `tags` (array of strings) - For searching and categorization - `created` (date) - File creation date (auto-added on create) - `updated` (date) - Last modification date (auto-updated on update) ## Examples ### Example 1: User Identity (core/user/identity.md) ```bash memory_write( path="core/user/identity.md", description="User identity and background", tags=["user", "identity"], content="# User Identity\n\nName: Vandee\nRole: Developer..." ) ``` ### Example 2: User Preferences (core/user/prefer.md) ```bash memory_write( path="core/user/prefer.md", description="User habits and code style preferences", tags=["user", "preferences"], content="# User Preferences\n\n## Communication Style\n- Be concise\n- Show code examples\n\n## Code Style\n- 2 space indentation\n- Prefer const over var\n- Functional programming" ) ``` ### Example 3: Project Architecture (core/project/) ```bash memory_write( path="core/project/architecture.md", description="Project architecture and design", tags=["project", "architecture"], content="# Architecture\n\n..." ) ``` ### Example 3: Reference Docs (root level) ```bash memory_write( path="docs/api/rest-endpoints.md", description="REST API reference documentation", tags=["docs", "api"], content="# REST Endpoints\n\n..." ) ``` ### Example 4: Archived Decision (root level) ```bash memory_write( path="archive/decisions/2024-01-15-auth-redesign.md", description="Auth redesign decision from January 2024", tags=["archive", "decision"], content="# Auth Redesign\n\n..." ) ``` ## Reading Memory Files Use the `memory_read` tool: ```bash memory_read(path="core/user/identity.md") ``` ## Listing Memory Files Use the `memory_list` tool: ```bash # List all files memory_list() # List files in specific directory memory_list(directory="core/project") # List only core/ files memory_list(directory="system") ``` ## Updating Memory Files To update a file, use `memory_write` with the same path: ```bash memory_write( path="core/user/identity.md", description="Updated user identity", content="New content..." ) ``` The extension preserves existing `created` date and updates `updated` automatically. ## Folder Creation Guidelines ### core/ directory - FIXED structure **Only two folders exist under `core/`:** - `user/` - User identity and preferences - `project/` - Project-specific information **Do NOT create any other folders under `core/`.** ### Root level (same level as core/) - COMPLETE freedom **Agent can create any folder structure at project root level (same level as `core/`):** - `docs/` - Reference documentation - `archive/` - Historical information - `research/` - Research findings - `notes/` - Standalone notes - `examples/` - Code examples - `guides/` - How-to guides **Rule:** Organize root level in a way that makes sense for the project. **WARNING:** Do NOT create a `project/` folder at root level. Use `core/project/` instead. ## Best Practices ### DO: - Use `core/user/identity.md` for user identity - Use `core/user/prefer.md` for user habits and code style - Use `core/project/` for project-specific information - Use root level for reference, historical, and research content - Keep files focused on a single topic - Organize root level folders by content type ### DON'T: - Create folders under `core/` other than `user/` and `project/` - Create other files under `core/user/` (only `identity.md` and `prefer.md`) - Create a `project/` folder at root level (use `core/project/` instead) - Put reference docs in `core/` (use root `docs/`) - Create giant files (split into focused topics) - Mix unrelated content in same file ## Maintenance ### Session Wrap-up After completing work, archive to root level: ```bash memory_write( path="archive/sessions/2025-02-14-bug-fix.md", description="Session summary: fixed database connection bug", tags=["archive", "session"], content="..." ) ``` ### Regular Cleanup - Consolidate duplicate information - Update descriptions to stay accurate - Remove information that's no longer relevant - Archive old content to appropriate root level folders ## When to Use This Skill Use `memory-management` when: - User asks to remember something for future sessions - Creating or updating project documentation - Setting preferences or guidelines - Storing reference material - Building knowledge base about the project - Organizing information by type or domain - Creating reusable patterns and solutions - Documenting troubleshooting steps ## Related Skills - `memory-sync` - Git synchronization operations - `memory-init` - Initial repository setup - `memory-search` - Finding specific information - `memory-check` - Validate folder structure before syncing ## Before Syncing **IMPORTANT**: Before running `memory_sync(action="push")`, ALWAYS run `memory_check()` first to verify the folder structure is correct: ```bash # Check structure first memory_check() # Then push if structure is correct memory_sync(action="push") ``` This prevents accidentally pushing files in wrong locations (e.g., root `project/` instead of `core/project/`).