Skip to main content

totem

totem

Totem stands watch over what a tribe has learned. It does the same for your codebase.

npm PyPI Python License MCP


A totem stands watch over what a tribe has learned. Totem does the same for a codebase. It's a Git-aware memory server for coding agents: decisions, invariants, and gotchas persist across sessions, backed by evidence, and flagged the moment the code underneath them changes.

Why

AI coding agents lose engineering context between sessions. They re-discover the same gotchas, re-debate the same decisions, and forget invariants that were already established. totem persists this knowledge locally and serves it back to agents as structured context, ordered by relevance.

Install

Requires Python 3.13+.

npm install @emiliano-go/totem
npx @emiliano-go/totem

The npx command auto-installs the Python MCP server and configures enforcement plugins for OpenCode, Claude Code, and Kimi Code.

Supported agents

Agent Hook type Auto-configured?
OpenCode tool.execute.before JS plugin Yes
Claude Code PreToolUse hooks (.claude/settings.json) Yes
Kimi Code PreToolUse hooks (~/.kimi-code/config.toml) Yes

Features

  • 14 memory types with type-specific metadata validation
  • 31 MCP tools (16 core + 15 typed wrappers)
  • Staleness detection via SHA256 content hashing on evidence
  • Conflict detection on overlapping evidence and contradictory claims
  • Full-text search via Turso FTS5
  • Hybrid memory (project + user databases)
  • Context assembly with scored pipeline and token budget
  • Agent enforcement blocks reads/grep/bash when memory exists, forces search-first workflow
  • Commit gates block all tools until agent registers file reads and writes
  • History audit on every create, update, and delete

How it works

Agent reads file for the first time
  → commit-gate blocks → agent registers read → memory stored → done

Agent reads file again (memory exists)
  → blocked → redirected to memory tools
  → searches memory → finds context → done

Agent writes a file
  → commit-gate blocks → agent registers write with reason → change documented → done

Agent reads file but finds nothing in memory
  → allowed to read → commit-gate requires registration → done

Setup

OpenCode

Add to ~/.config/opencode/opencode.json:

{
  "plugin": ["@emiliano-go/totem"],
  "mcp": {
    "totem": {
      "type": "local",
      "command": ["uvx", "totem-mcp"],
      "enabled": true
    }
  }
}

Claude Code

claude mcp add totem -- uvx totem-mcp

Kimi Code

Hooks are auto-configured by npx @emiliano-go/totem.

Manual setup

If you prefer manual configuration:

# Initialize totem in your project
totem init

# For a different project
totem init --project /path/to/other

Quick start

MCP tools (from your agent)

# Store a decision
memory_create_tool(type="decision", title="Use FTS5 for search",
  statement="SQLite FTS5 is sufficient for our search needs",
  tags=["search", "sqlite"],
  metadata={"rationale": "No external dependency needed"})

# Get full context for a task
engineering_context_tool(tags=["api", "database"],
  current_task="Adding JWT refresh endpoint")

# Search memory
memory_search_tool(query="authentication", tags=["auth"])

# Store a command outcome
memory_create_tool(type="gotcha", title="uv pip install -e . works",
  statement="Editable install works with uv pip on PEP 668 systems",
  tags=["cmd:uv-pip-install", "python"])

CLI

# Create a memory item
totem create --type decision --title "Use FTS5 for search" \
  --statement "SQLite FTS5 is sufficient for our search needs" \
  --tags "search,sqlite" --metadata '{"rationale": "No external dependency needed"}'

# Search
totem search --query "FTS5" --tags "sqlite"

# Assemble context
totem context --tags "search,sqlite" --current-task "Implementing search" --budget 4096

# Export/import
totem export -o backup.json
totem import backup.json

Memory types

Type Purpose Required metadata
decision A choice that was made rationale (recommended)
invariant A rule that must hold verificationMethod, condition
gotcha A non-obvious pitfall (none)
rejected_idea A proposal declined proposal, reasonRejected
assumption A claim with epistemic status claimCategory, basis
open_question An unresolved question question, impact, blocking
ambiguity An ambiguous requirement question, interpretations, impact
contract Observable behavior subject
constraint Implementation restriction constraint
hypothesis Plausible explanation hypothesis
observation Something seen in code observation
bug A defect with state machine symptom, severity, state
architecture Component mapping component, responsibility
implementation Codebase facts subject, kind, path

MCP tools (31)

Tool Description
totem_init_tool Initialize totem for a project
memory_create_tool Create a memory item (warns on duplicate title)
memory_get_tool Retrieve by ID with staleness check
memory_update_tool Update any field (provides audit trail)
memory_delete_tool Soft-delete (requires reason)
memory_list_tool Filtered listing with sort and type/tag filters
memory_recent_tool List recently created memories
memory_tasks_tool List in-progress task memories (task:*)
memory_commands_tool List command outcomes (cmd:*)
memory_search_tool FTS5 full-text search with type/tag filters
resolve_conflict_tool Mark conflict as resolved
engineering_context_tool Scored context assembly with task relevance
memory_export_tool Export all memories as JSON
memory_import_tool Import memories from JSON (skips duplicates)
register_file_read_tool Store facts learned from reading a file (auto-hashes)
register_file_write_tool Register file changes with reason (auto-hashes)
*_create (14) Typed wrappers for each memory type
flag_ambiguity Convenience wrapper for ambiguity creation

CLI commands (14)

Command Description
totem init Initialize totem and install agent instructions
totem create Create a new memory item
totem get <ID> Retrieve by ID
totem update <ID> Update an item
totem delete <ID> Soft-delete (requires --reason)
totem list List with filters
totem recent List recently created memories
totem tasks List in-progress task memories
totem commands List command outcomes
totem resolve <ID> Mark conflict as resolved
totem search Full-text search
totem export Export memories as JSON
totem import <FILE> Import memories from JSON
totem context Assemble scored context

Context assembly

Scoring formula:

score = 0.30*tag_match + 0.20*task_similarity + 0.25*importance
      + 0.15*confidence + 0.10*recency

Invariants, constraints, and ambiguities get a 1.25x multiplier. Potentially stale items get a 0.5x penalty.

Output sections (BLOCKING AMBIGUITIES, CONFLICTS, and STALE WARNINGS are never budget-truncated):

  1. TASK (if provided)
  2. BLOCKING AMBIGUITIES
  3. CONTEXT CONFLICTS
  4. CRITICAL CONSTRAINTS
  5. CRITICAL INVARIANTS
  6. RELEVANT CONTRACTS
  7. ARCHITECTURE
  8. DECISIONS
  9. KNOWN AMBIGUITIES (non-blocking)
  10. OBSERVATIONS
  11. GOTCHAS
  12. KNOWN BUGS
  13. HYPOTHESES
  14. CODEBASE FACTS
  15. OPEN QUESTIONS
  16. REJECTED IDEAS
  17. STALE KNOWLEDGE WARNINGS

Workspace scoping

totem auto-detects your project root via git rev-parse --show-toplevel. Override with --project <path> on any CLI command or project parameter on any MCP tool.

Hybrid memory

  • Project memories: .totem/totem.db
  • User memories: ~/.local/share/totem/totem.db

engineering_context searches both, with project memories taking precedence.

Tag conventions

  • task:<name>: In-progress work. Query with memory_tasks_tool.
  • cmd:<command>: Command outcomes. Query with memory_commands_tool.
  • architecture:<module>: Structural facts about a module.
  • outcome:<what>: Measurable results (performance wins, bug fix impact, etc.).

Companion skill

The skills/precision-first/ directory contains a precision-first software engineering methodology designed to pair with totem.

Development

# Run JS tests
cd plugins/totem-enforce && node test-tokenize.js

# Run Python tests
cd plugins/totem-enforce && python3 test-enforce.py

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

totem_mcp-0.4.0.tar.gz (32.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

totem_mcp-0.4.0-py3-none-any.whl (39.9 kB view details)

Uploaded Python 3

File details

Details for the file totem_mcp-0.4.0.tar.gz.

File metadata

  • Download URL: totem_mcp-0.4.0.tar.gz
  • Upload date:
  • Size: 32.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for totem_mcp-0.4.0.tar.gz
Algorithm Hash digest
SHA256 acd1dea96c91d9c282b3affc17a9c905e63defbbae8ea81dc3f92a042f9ace1b
MD5 d59013bd857584d0fc5c6e3fb811681f
BLAKE2b-256 2e46203341ed5b2def9f0b7b34dfdaa1a4b04e5c005e9b374314c2f647e8c880

See more details on using hashes here.

Provenance

The following attestation bundles were made for totem_mcp-0.4.0.tar.gz:

Publisher: publishing.yml on emiliano-go/totem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file totem_mcp-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: totem_mcp-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 39.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for totem_mcp-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 42ea0a64275d0ccf8b03aea6212cc206d08bf9ce2f12ac0f03de18e57f4a1cfa
MD5 62f868bfd7f73107fd4f1afe6e93e3cd
BLAKE2b-256 6d1359842ba65d0b7ebbbe976afac4c33acbccf12724921e007e34f1ebbf2861

See more details on using hashes here.

Provenance

The following attestation bundles were made for totem_mcp-0.4.0-py3-none-any.whl:

Publisher: publishing.yml on emiliano-go/totem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.5.1

2 files

0.5.0

2 files

0.4.5

2 files

0.4.4

2 files

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

This release

0.4.0 This release

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page