- Landing: replace nonexistent `mempalace remember` CLI demo with real
`mempalace mine ./notes`
- Landing: soften unverifiable absolutes ("forever available",
"100% recall by design", "<50 ms", "90%+ compression",
"two-thousand-year-old", "tens of thousands of entries")
- MCP tool count: 19 → 29 across mcp-integration, claude-code, openclaw,
and modules; expand tool overview with Drawers, Tunnels, and System
categories to match mcp_server.py
- Wake-up token range: ~170–900 → ~600–900 in cli/api-reference/python-api
to match cli.py help text and concept docs
- Gemini CLI: move `--scope user` before target name and add `--`
separator so `-m mempalace.mcp_server` isn't parsed as Gemini flags
8.0 KiB
API Reference
Comprehensive parameter-level documentation for all public Python APIs.
mempalace.searcher
search(query, palace_path, wing=None, room=None, n_results=5)
CLI-oriented search that prints results to stdout.
| Parameter | Type | Default | Description |
|---|---|---|---|
query |
str |
— | Search query text |
palace_path |
str |
— | Path to ChromaDB palace directory |
wing |
str |
None |
Filter by wing name |
room |
str |
None |
Filter by room name |
n_results |
int |
5 |
Maximum number of results |
Raises: SearchError if palace not found or query fails.
search_memories(query, palace_path, wing=None, room=None, n_results=5) → dict
Programmatic search returning a dict. Used by the MCP server.
| Parameter | Type | Default | Description |
|---|---|---|---|
query |
str |
— | Search query text |
palace_path |
str |
— | Path to ChromaDB palace directory |
wing |
str |
None |
Filter by wing name |
room |
str |
None |
Filter by room name |
n_results |
int |
5 |
Maximum number of results |
Returns:
{
"query": str,
"filters": {"wing": str | None, "room": str | None},
"results": [
{
"text": str, # verbatim drawer content
"wing": str, # wing name
"room": str, # room name
"source_file": str, # original file basename
"similarity": float, # 0.0 to 1.0
}
]
}
On error: {"error": str, "hint": str}
mempalace.layers
class Layer0(identity_path=None)
Identity layer (~50 tokens). Reads from ~/.mempalace/identity.txt.
| Method | Returns | Description |
|---|---|---|
render() |
str |
Identity text or default message |
token_estimate() |
int |
Approximate token count (len(text) // 4) |
class Layer1(palace_path=None, wing=None)
Essential story layer (~500–800 tokens). Auto-generated from top drawers.
| Attribute | Type | Description |
|---|---|---|
MAX_DRAWERS |
int |
Max moments in wake-up (15) |
MAX_CHARS |
int |
Hard cap on L1 text (3200) |
| Method | Returns | Description |
|---|---|---|
generate() |
str |
Compact L1 text grouped by room |
class Layer2(palace_path=None)
On-demand retrieval layer (~200–500 tokens per call).
| Method | Parameters | Returns |
|---|---|---|
retrieve(wing, room, n_results=10) |
Wing/room filters | Formatted drawer text |
class Layer3(palace_path=None)
Deep semantic search layer (unlimited depth).
| Method | Parameters | Returns |
|---|---|---|
search(query, wing=None, room=None, n_results=5) |
Query + optional filters | Formatted result text |
search_raw(query, wing=None, room=None, n_results=5) |
Query + optional filters | List of result dicts |
class MemoryStack(palace_path=None, identity_path=None)
Unified 4-layer interface.
| Method | Parameters | Returns | Description |
|---|---|---|---|
wake_up(wing=None) |
Optional wing | str |
L0 + L1 context (~600–900 tokens) |
recall(wing, room, n_results=10) |
Filters | str |
L2 on-demand retrieval |
search(query, wing, room, n_results=5) |
Query + filters | str |
L3 deep search |
status() |
— | dict |
All layer status info |
mempalace.knowledge_graph
class KnowledgeGraph(db_path=None)
Default path: ~/.mempalace/knowledge_graph.sqlite3
Write Methods
| Method | Parameters | Returns | Description |
|---|---|---|---|
add_entity(name, entity_type='unknown', properties=None) |
Name, type, props dict | str (entity ID) |
Add or update entity node |
add_triple(subject, predicate, obj, valid_from, valid_to, confidence, source_closet, source_file) |
See below | str (triple ID) |
Add relationship triple |
invalidate(subject, predicate, obj, ended=None) |
Entity names, end date | — | Mark relationship as ended |
add_triple parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
subject |
str |
— | Source entity name |
predicate |
str |
— | Relationship type |
obj |
str |
— | Target entity name |
valid_from |
str |
None |
Start date (YYYY-MM-DD) |
valid_to |
str |
None |
End date |
confidence |
float |
1.0 |
Confidence score 0.0–1.0 |
source_closet |
str |
None |
Link to verbatim memory |
source_file |
str |
None |
Original source file |
Query Methods
| Method | Parameters | Returns |
|---|---|---|
query_entity(name, as_of=None, direction='outgoing') |
Entity name, date filter, direction | list[dict] |
query_relationship(predicate, as_of=None) |
Relationship type, date filter | list[dict] |
timeline(entity_name=None) |
Optional entity filter | list[dict] |
stats() |
— | dict with entities, triples, predicates |
seed_from_entity_facts(entity_facts) |
Dict of entity facts | — |
query_entity direction values: "outgoing" (entity→?), "incoming" (?→entity), "both"
mempalace.palace_graph
build_graph(col=None, config=None) → (nodes, edges)
Build the palace graph from ChromaDB metadata.
Returns:
nodes:dictof{room: {wings: list, halls: list, count: int, dates: list}}edges:listof{room, wing_a, wing_b, hall, count}
traverse(start_room, col=None, config=None, max_hops=2) → list
BFS graph traversal from a room across wings.
| Parameter | Type | Default | Description |
|---|---|---|---|
start_room |
str |
— | Room slug to start from |
max_hops |
int |
2 |
Max connection depth |
Returns: [{room, wings, halls, count, hop, connected_via}] (max 50)
find_tunnels(wing_a=None, wing_b=None, col=None, config=None) → list
Find rooms spanning multiple wings.
Returns: [{room, wings, halls, count, recent}] (max 50)
graph_stats(col=None, config=None) → dict
Returns: {total_rooms, tunnel_rooms, total_edges, rooms_per_wing, top_tunnels}
mempalace.dialect
class Dialect(entities=None, skip_names=None)
| Parameter | Type | Description |
|---|---|---|
entities |
dict[str, str] |
Full name → 3-letter code mapping |
skip_names |
list[str] |
Names to skip (fictional characters, etc.) |
Class Methods
| Method | Parameters | Returns |
|---|---|---|
from_config(config_path) |
JSON file path | Dialect instance |
Instance Methods
| Method | Parameters | Returns | Description |
|---|---|---|---|
compress(text, metadata=None) |
Plain text + optional metadata dict | str |
AAAK-formatted summary |
encode_entity(name) |
Entity name | str | None |
3-letter entity code |
encode_emotions(emotions) |
List of emotion strings | str |
Compact emotion codes |
compress_file(path, output=None) |
Zettel JSON path | str |
Compress zettel file |
compress_all(dir, output=None) |
Zettel directory | str |
Compress all zettels |
save_config(path) |
Output path | — | Save entity mappings |
compression_stats(original, compressed) |
Both texts | dict |
Compression ratio stats |
Static Methods
| Method | Parameters | Returns |
|---|---|---|
count_tokens(text) |
Any text | int |
mempalace.config
class MempalaceConfig()
Reads from ~/.mempalace/config.json and environment variables.
| Property | Type | Default | Description |
|---|---|---|---|
palace_path |
str |
~/.mempalace/palace |
ChromaDB storage path |
collection_name |
str |
mempalace_drawers |
ChromaDB collection name |
| Method | Description |
|---|---|
init() |
Create config directory and default files |