Agent skill
initializing-memory
Comprehensive guide for initializing or reorganizing agent memory into a deeply hierarchical file structure. Use when running /init, when user asks to set up memory, or when memory needs a major reorganization. Trigger phrases: "initialize memory", "set up memory", "populate memory", "build my memory", "memory init".
Install this agent skill to your Project
npx add-skill https://github.com/edmundmiller/dotfiles/tree/main/pi-packages/pi-context-repo/skills/initializing-memory
SKILL.md
Memory Initialization
Initialize persistent memory into a deeply hierarchical structure of 15-25
small, focused files in .pi/memory/.
Run /init again after major project changes or when you want to re-analyze.
Target Output
| Metric | Target |
|---|---|
| Total files | 15-25 (aim for ~20) |
| Max lines per file | ~40 (split if larger) |
| Hierarchy depth | 2-3 levels using / naming |
| Nesting requirement | Every file MUST be nested under a parent |
Anti-patterns:
- ❌ Only 3-5 large files
- ❌ Flat naming (all files at top level)
- ❌ Mega-files with 10+ sections
Example Target Structure
system/
├── human/
│ ├── identity.md
│ ├── context.md
│ └── prefs/
│ ├── communication.md
│ ├── coding_style.md
│ └── workflow.md
├── project/
│ ├── overview.md
│ ├── architecture.md
│ ├── conventions.md
│ ├── gotchas.md
│ └── tooling/
│ ├── testing.md
│ └── linting.md
└── persona/
├── role.md
└── behavior.md
reference/
├── README.md
└── history/
└── decisions.md
What to Remember
1. Procedures (Rules & Workflows)
- Commit conventions, branching strategy
- Build/test/lint commands and order
- Review process, CI requirements
2. Preferences (Style & Conventions)
- Coding style rules (formatting, patterns, anti-patterns)
- Communication preferences (terse vs detailed)
- Tool preferences (which tools, how to use them)
3. History & Context
- Key refactors, past bugs, architectural decisions
- Project evolution, deprecated patterns
- Ongoing work and current priorities
Workflow
Step 1: Backup existing memory
Use memory_backup tool first if memory already has content.
Step 2: Ask upfront questions (bundle in one message)
- Research depth: Standard (~5-20 tool calls) or deep (~100+)?
- Identity: Which contributor are you? (check git context from /init)
- Related repos: Other repositories you should know about?
- Historical sessions: If prior agent sessions were detected, ask: "I found prior Claude Code / Pi / Codex sessions. Should I analyze them to learn your preferences and project context?"
- Communication: Terse or detailed responses?
- Rules: Any rules I should always follow?
Don't ask things you can find by reading files. Be autonomous during execution.
Step 3: Research the project
Standard research:
- README, AGENTS.md, CLAUDE.md, CONTRIBUTING.md
- Package manifests (package.json, Cargo.toml, pyproject.toml, go.mod)
- Config files (tsconfig, eslint, prettier, etc.)
git log --oneline -20— recent historygit log --format="%s" -50 | head -20— commit conventions- Explore key directories and understand structure
Deep research (if chosen):
- Everything above, plus:
git shortlog -sn --all | head -10— contributorsgit branch -a— branching strategygit log --format="%an <%ae>" | sort -u— deduplicate contributors by email- Deep dive into architecture, patterns, CI config
- Analyze multiple source directories
- Read key source files to understand patterns
- Cross-reference findings, resolve ambiguities
Think like a new team member: What would you want to know on your first day?
Step 4: Analyze prior sessions (if approved)
If the user approved session history analysis:
Claude Code sessions (~/.claude/projects/):
- Each project dir contains session JSONL files
- Look for the project matching the current working directory
- Extract: user preferences, communication style, project knowledge, conventions
Pi sessions (~/.pi/agent/sessions/):
- Session directories named by project path
- Read recent session files for patterns and preferences
Codex sessions (~/.codex/):
history.jsonlcontains session history- Extract coding preferences, project context
Focus on extracting:
- User identity and preferences →
system/human/ - Behavioral rules discovered →
system/persona/ - Project knowledge →
system/project/ - Working patterns →
system/human/prefs/
Step 5: Create hierarchical file structure
Use memory_write for each file. Every file needs:
- Proper frontmatter (description, limit)
- Hierarchical
/naming (e.g.system/project/tooling/testing.md) - Focused, single-purpose content (~40 lines max)
Write findings as you go — don't wait until the end.
Memory scope guide:
- system/ (always in context): Active preferences, project conventions, agent behavior
- reference/ (on-demand): Historical info, archived decisions, detailed reference
Step 6: Checkpoint
find .pi/memory/system -name '*.md' | wc -l
If count < 15, split more aggressively.
Step 7: Reflect and review
Before finishing, verify:
- 15-25 files total
- All files use
/naming (2-3 levels deep) - No file exceeds ~40 lines
- Each file has one concept
- Every file has real content (no placeholders)
- human/ updated with user identity + preferences
- persona/ updated with behavioral rules
- No redundancy across files
Ask the user: "I've completed initialization with N files. Want me to refine anything?"
Step 8: Commit and sync
memory_commit({ message: "init: populate memory with N files from project research" })
If a remote is configured, push: git -C .pi/memory push
Writing Good Memory Files
Descriptions are critical — write as if explaining to a future self with zero context:
- ✅ "User's coding style preferences applied to all code I write or review"
- ❌ "Preferences"
Content should be:
- Well-organized with headers and bullets
- Scannable at a glance
- Pruned of outdated info
- Concrete and actionable
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
zbench
Benchmark interactive zsh performance with zsh-bench and track regressions. Use when benchmarking shell startup, comparing zsh latency after config changes, investigating slow shell, or running git bisect on performance. Trigger phrases: "benchmark zsh", "shell is slow", "zbench", "zsh-bench", "shell startup time", "profile zsh", "zsh performance".
nix-rebuild
Rebuild nix-darwin/NixOS system after dotfiles changes. Use when config files managed by Nix (lazygit, ghostty, etc.) need to be regenerated, or after editing any .nix file in the dotfiles repo.
hass-config-flow
Interact with Home Assistant via the REST API on a NixOS host. Use when adding integrations, querying entities, managing config flows, creating API tokens, or automating HA setup programmatically. Also covers identifying device protocols (Matter, Zigbee, Thread, HomeKit) from the device registry. Trigger phrases: "add HA integration", "configure home assistant", "query HA entities", "create HA token", "HA REST API", "pair homekit", "set up matter in HA", "add spotify to HA", "is this device zigbee or thread", "what protocol is this device", "move devices to ZHA", "identify matter devices".
hass-declarative
Manage Home Assistant automations, scenes, and scripts declaratively via NixOS modules. Covers adding/editing/removing entities in the domain-based Nix structure, the ensureEnabled wrapper (initial_state enforcement), the sweep service that cleans orphaned entities, entity identity (IDs, slugs, unique_ids), the eval test assertions, and the build-time manifest. Trigger phrases: "add HA automation", "new scene", "new script", "remove automation", "declarative HA", "sweep unmanaged", "entity drift", "ghost entity", "orphaned automation", "HA domain file", "eval-automations test", "hass assertion", "ensureEnabled", "initial_state".
agenix-secrets
Create, edit, and wire up agenix-encrypted secrets in this dotfiles repo. Use when adding API keys, tokens, credentials, passwords, or any sensitive values to NixOS host configs. Trigger phrases: "add a secret", "encrypt with agenix", "new age secret", "hide this value", "agenix secret".
linear
Read-only Linear issue access via the Linear GraphQL API.
Didn't find tool you were looking for?