personal memory agent
Coding Standards#
Language & Tools#
- Ruff (
make format) - Formatting, linting, and import sorting - mypy (
make check) - Type checking - Configuration in
pyproject.toml
Naming Conventions#
- Modules/Functions/Variables:
snake_case - Classes:
PascalCase - Constants:
UPPER_SNAKE_CASE - Private Members:
_leading_underscore
Code Organization#
- Imports: Prefer absolute imports, grouped (stdlib, third-party, local), one per line
- Docstrings: Google or NumPy style with parameter/return descriptions
- Type Hints: Should be included on function signatures (legacy helpers may still need updates)
- File Structure: Constants → helpers → classes → main/CLI
File Headers#
All source code files (but not text or markdown files or prompts) must begin with a license and copyright header:
# SPDX-License-Identifier: AGPL-3.0-only
# Copyright (c) 2026 sol pbc
Use // comments for JavaScript files.
Development Principles#
- DRY, KISS, YAGNI: Extract common logic, prefer simple solutions, don't over-engineer
- Single Responsibility: Functions/classes do one thing well
- Conciseness & Maintainability: Clear code over clever code
- Robustness: Minimize assumptions that must be kept in sync across the codebase, avoid fragility and increasing maintenance burden.
- Self-Contained Codebase: All code that depends on this project lives within this repository—never add backwards-compatibility shims, fallback aliases, re-exports for moved symbols, deprecated parameter handling, or legacy support code. When renaming or removing something, update all usages directly. For journal data format changes, write a migration script (see docs/APPS.md for
maintcommands) instead of adding compatibility layers. - Trust system path resolution: Never set
_SOLSTONE_JOURNAL_OVERRIDEor bypassget_journal()from application code, agent prompts, subprocess environments, or service files. The env var exists only for tests and Makefile sandboxes. Seereference/environment.md. - Security: Never expose secrets, validate/sanitize all inputs
- Performance: Profile before optimizing
- Git: Small focused commits, descriptive branch names. Run git commands directly (not
git -C) since you're already in the repo.
Dependencies#
- Minimize Dependencies: Use standard library when possible
- All Dependencies: Add to
dependenciesinpyproject.toml - Package Manager: uv — lock file (
uv.lock) is committed,make installsyncs from it - Installation:
make install(creates isolated.venv/, syncs deps from lock file, symlinkssolto~/.local/bin) - Updating:
make updateupgrades all deps to latest and regenerates the lock file