Priority: Medium
Level of Effort: Large (5-8 days)
Summary
Add a people/relationship memory system that lets the agent remember information about people mentioned by the user. This goes beyond generic memory — it should track personal details, relationship context, and conversation notes about specific individuals.
Scope
- New module:
src/blacki/people/
- Storage:
PostgresPeopleStorage (table: people, extends PostgresStorage base)
- Data model:
name (str, required)
relationship (str, optional — e.g., "coworker", "friend", "family")
context / notes (str, JSONB — flexible structured notes)
tags (list[str] — for categorization)
first_mentioned (datetime, auto-set)
last_updated (datetime, auto-updated)
- Tools:
remember_person — add or update a person record with details
search_people — semantic search or keyword search across stored people
get_person — retrieve full details for a specific person by name
list_people — list all known people, optionally filtered by relationship/tag
delete_person — remove a person record
- Vector integration (optional/phase 2): Use the existing Mem0/Qdrant vector store for semantic search across people notes
- Pattern: Follow existing storage + tools patterns from
calories/ and workouts/
Sources
- Existing memory tools:
src/blacki/memory/tools.py
- Storage base class:
src/blacki/storage/base.py
- Calorie storage pattern:
src/blacki/calories/storage.py
- Calorie tools pattern:
src/blacki/calories/tools.py
- Workout storage:
src/blacki/workouts/storage.py
- Tool registry:
src/blacki/registry.py
- DI container:
src/blacki/container.py
- Memory config (vector store setup):
src/blacki/memory/config.py
- AGENTS.md tool design principles
Passing Criteria
Priority: Medium
Level of Effort: Large (5-8 days)
Summary
Add a people/relationship memory system that lets the agent remember information about people mentioned by the user. This goes beyond generic memory — it should track personal details, relationship context, and conversation notes about specific individuals.
Scope
src/blacki/people/PostgresPeopleStorage(table:people, extendsPostgresStoragebase)name(str, required)relationship(str, optional — e.g., "coworker", "friend", "family")context/notes(str, JSONB — flexible structured notes)tags(list[str] — for categorization)first_mentioned(datetime, auto-set)last_updated(datetime, auto-updated)remember_person— add or update a person record with detailssearch_people— semantic search or keyword search across stored peopleget_person— retrieve full details for a specific person by namelist_people— list all known people, optionally filtered by relationship/tagdelete_person— remove a person recordcalories/andworkouts/Sources
src/blacki/memory/tools.pysrc/blacki/storage/base.pysrc/blacki/calories/storage.pysrc/blacki/calories/tools.pysrc/blacki/workouts/storage.pysrc/blacki/registry.pysrc/blacki/container.pysrc/blacki/memory/config.pyPassing Criteria
uv run ruff checkpasses with no errorsuv run ruff formatpasses with no changes neededuv run mypy .passes with no errorsuv run pytest tests/people/ --cov=src/blacki/peoplepasses with 100% coverage on people moduleuv run pytestfull suite passesremember_personcorrectly stores and updates people records scoped to user_idsearch_peoplereturns relevant results by name or keywordget_personreturns full record including all stored fieldslist_peoplesupports filtering by relationship type and tagsdelete_personremoves the record and returns confirmationAppContainerandregistry.py