A shared memory layer for personal agents, across devices: an MCP server over local SQLite with opt-in libSQL/Turso sync.
Project description
tether
A shared memory layer for personal agents, across devices. tether is an
MCP server backed by a local SQLite file. Any
MCP-compatible agent can remember, recall, link, and forget durable notes
— facts about you, your projects, your preferences — so context follows you
instead of dying with each session.
It runs local-only with zero configuration. Point it at a hosted libSQL/Turso primary and the same file becomes an embedded replica that syncs your memory across every device in near-real-time.
Why
The near future is personal agents living across many devices — laptop, desktop, phone. For that to feel like one assistant rather than several amnesiac ones, memory has to be a substrate that follows you: readable and writable from every device and from any agent, not siloed inside a single tool.
tether is that substrate. It is deliberately a convenience layer — it makes an
agent more useful when present, and never breaks the agent's work when degraded.
Status
v0.1 is implemented. Design and rationale: docs/superpowers/specs/2026-07-03-tether-design.md. Implementation plan: docs/superpowers/plans/2026-07-03-tether-v0.1-implementation.md.
Design at a glance
- Four verbs, nothing more:
remember·recall·link·forget. - Upsert on write so the store doesn't rot into near-duplicates.
- Rich recall (id, type, title, body, tags,
updated_at) so an agent can judge staleness and cite what it updates. - An auto-loaded boot index — a compact one-line-per-memory list surfaced to the agent each session, so memory helps even when the agent doesn't think to search.
- Local-first, sync optional — the local path is untouched when no backend is configured; degradation never throws.
- Keyword search now, embeddings later — the SQLite schema is built so semantic search and a full entity/edge graph slot in without migrating data.
Install
Requires Python ≥3.10 on a POSIX system (Linux/macOS).
Register it with Claude Code — with uv:
claude mcp add tether -- uvx --from tether-memory tether
…or install it first:
pip install tether-memory
claude mcp add tether -- tether
(The PyPI package is named tether-memory — tether was already reserved on
PyPI as a common brand name — but the installed command is still tether.)
By default memory lives in a local SQLite file at
~/.local/share/tether/memory.db (override with TETHER_DB). No accounts, no
network — this is the whole tool for a single machine.
Sync across devices (optional)
Point tether at a Turso / libSQL database and the local file becomes an embedded replica — local-speed reads, writes that propagate to your other devices. Install the extra and set two env vars:
pip install 'tether-memory[sync]'
export TETHER_SYNC_URL='libsql://<your-db>.turso.io'
export TETHER_SYNC_TOKEN='<your-auth-token>'
If the backend is unreachable, tether logs sync offline and keeps working
against the local file; writes converge when it comes back.
Tools
| Tool | What it does |
|---|---|
remember(type, title, body, tags?, links?) |
Save a memory; upserts on type+title so facts refine rather than duplicate |
recall(query, type?, limit?) |
Keyword search; returns id/type/title/body/tags/updated_at |
link(id_a, id_b) |
Bidirectional link between two memories |
forget(id) |
Delete a memory |
Plus an auto-loaded resource tether://memory-index — a compact one-line-per-memory index surfaced each session.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tether_memory-0.1.0.tar.gz.
File metadata
- Download URL: tether_memory-0.1.0.tar.gz
- Upload date:
- Size: 32.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d78494ecb7a0b3179881b7aa7e4b0bade38a206fc71719412c907145b01dc573
|
|
| MD5 |
9e92d46602bd81350224399b7194c715
|
|
| BLAKE2b-256 |
96a49d2764966522b18397835c29e54beacb4762e33c0eb674270d4c04d1052f
|
Provenance
The following attestation bundles were made for tether_memory-0.1.0.tar.gz:
Publisher:
release.yml on sidyellur/tether
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tether_memory-0.1.0.tar.gz -
Subject digest:
d78494ecb7a0b3179881b7aa7e4b0bade38a206fc71719412c907145b01dc573 - Sigstore transparency entry: 2065384512
- Sigstore integration time:
-
Permalink:
sidyellur/tether@79cd5b1194d558e4cb82514031a2af6b39ae065d -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/sidyellur
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@79cd5b1194d558e4cb82514031a2af6b39ae065d -
Trigger Event:
push
-
Statement type:
File details
Details for the file tether_memory-0.1.0-py3-none-any.whl.
File metadata
- Download URL: tether_memory-0.1.0-py3-none-any.whl
- Upload date:
- Size: 11.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb923f50f3734e4c3033c66fa56e094631adf35686a8d578c01b4c56b55ad191
|
|
| MD5 |
151ddee9d3b4b2b26d9a31b9ead412ef
|
|
| BLAKE2b-256 |
e6f402d2aac9825b2a49644c6f762da7cf882f2cbbb916e719450cea56e5ec04
|
Provenance
The following attestation bundles were made for tether_memory-0.1.0-py3-none-any.whl:
Publisher:
release.yml on sidyellur/tether
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tether_memory-0.1.0-py3-none-any.whl -
Subject digest:
bb923f50f3734e4c3033c66fa56e094631adf35686a8d578c01b4c56b55ad191 - Sigstore transparency entry: 2065384565
- Sigstore integration time:
-
Permalink:
sidyellur/tether@79cd5b1194d558e4cb82514031a2af6b39ae065d -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/sidyellur
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@79cd5b1194d558e4cb82514031a2af6b39ae065d -
Trigger Event:
push
-
Statement type: