Mora
Experimental local-first memory and cited meeting context for AI agents.
[!WARNING] Mora is early alpha software. Its connectors, local corpus, retrieval, citations, and identity-review machinery are real. Its meeting output has not yet passed a real-data product-quality evaluation. Treat surfaced items as historical evidence to inspect, not as verified current obligations. Follow the quality-gated alpha plan.
Mora syncs read-only copies of Gmail, Google Calendar, iMessage, Apple Calendar, and selected files into human-readable Markdown plus a rebuildable SQLite index on your machine. It exposes that corpus to MCP clients and the shell, so several agents can retrieve the same history with citations.
Mora does not upload your corpus by default or centrally host it. Explicit backup and sharing commands can send selected data to destinations you control. A connected cloud agent may also send retrieved snippets to its model provider; that behavior is governed by the agent and its organization policy.
Current product hypothesis
Before a client meeting, Mora should show what you owe, what they may owe, and what changed across Gmail, iMessage, and Calendar—with exact evidence and a visible warning when a required source is stale.
That is the product hypothesis, not a validated claim. Today Mora retrieves and cites historical candidate lines. Typed direction and closure, fail-closed product health, the narrow Before / Teach / Health experience, and real-user validation are still being built through seven ordered evidence gates.
What works today
- Read-only ingestion. Gmail, Google Calendar, iMessage, Apple Calendar, and selected folders become local Markdown memories. iMessage and Apple Calendar require macOS.
- A corpus you own. Markdown is the source of truth; embedded SQLite, FTS, vectors, and the person graph are disposable indexes that can be rebuilt.
- Cited recall.
search,think,brief, and meeting-prep surfaces return stable IDs and dated evidence. Optional Ollama embeddings are loopback-only. - Cited meeting context (experimental). Meeting output surfaces historical extracts likely to matter. It does not yet establish obligation owner, direction, or closure; inspect each citation before acting.
- Reviewable identity proposals. Mora can propose email↔phone joins from Address Book evidence, but never applies those joins automatically. Confirm, reject, and undo are local and auditable.
- Agent-agnostic access. Twelve MCP tools and equivalent CLI commands work with any client that can launch a local stdio MCP server.
Install — experimental
Release artifacts are convenient evaluation builds. macOS artifacts are ad-hoc
signed, not Developer ID signed or notarized. Windows artifacts are unsigned.
The remote installers verify the selected archive against the release
checksums.txt and refuse to continue if verification is unavailable.
macOS / Linux release build
curl -fsSL https://raw.githubusercontent.com/pyranthus-hq/mora/main/install.sh | sh
The installer downloads the current release, verifies its SHA-256 before
extracting, installs mora, and initializes ~/vault/mora. On macOS it prints
and performs the quarantine removal and ad-hoc signing required by the current
unnotarized build.
Build from source
go install github.com/pyranthus-hq/mora/cmd/mora@latest
This requires Go 1.25+. Source builds report dev and do not self-update. They
ship only the committed non-secret OAuth placeholder, so Google access requires
your own client via MORA_GOOGLE_CREDENTIALS. See
Connect Google.
Windows
iwr https://raw.githubusercontent.com/pyranthus-hq/mora/main/install.ps1 -OutFile $env:TEMP\install-mora.ps1; powershell -ExecutionPolicy Bypass -File $env:TEMP\install-mora.ps1
The PowerShell installer verifies the release checksum, installs to
%LOCALAPPDATA%\Mora\bin, and adds that directory to the user PATH. SmartScreen
may still warn because the binary is unsigned. Platform details and Task
Scheduler commands are in the Windows guide.
Connect one source
The fastest low-trust path is a folder you choose:
mora doctor
mora connect filesystem ~/notes
mora search "a project or person"
Then add the sources you actually want:
mora connect google # Gmail + Google Calendar, read-only
mora connect google --account work # optional second Google account
mora connect imessage # macOS; requires Full Disk Access
mora schedule install ingest-hourly
Mora's shared Google OAuth app is currently unverified and subject to Google's
testing-user limit. The trust-first path is your own OAuth client through
MORA_GOOGLE_CREDENTIALS; the guide
covers both paths.
Wire it into an agent
claude mcp add mora -s user -- mora mcp serve
codex mcp add mora -- mora mcp serve
Any other MCP client can launch the same local stdio server:
{
"mcpServers": {
"mora": { "command": "mora", "args": ["mcp", "serve"] }
}
}
Every MCP tool also has a CLI sibling, so an agent with shell access can use
mora search, mora think, mora brief, and mora write without MCP. See the
wiring guide.
Review identity proposals
Mora never automatically joins an email identity to a phone number. On macOS it can propose matches from Address Book evidence for review:
mora merge list
mora merge confirm --handle <phone> --email <address>
mora merge reject --handle <phone> --email <address>
mora merge undo <ledger-id>
Every decision is local, auditable, and reversible.
Data layout
Mora keeps data in four places. Only the vault is irreplaceable:
| Path | Holds | Recovery |
|---|---|---|
vault_dir (~/vault/mora) |
Human-readable memories | Back up explicitly |
data_dir (~/.local/share/mora) |
SQLite search index | mora index rebuild |
state_dir (~/.local/state/mora) |
Sync watermarks and local usage log | Recreated on sync |
config_dir (~/.config/mora) |
Settings and OAuth tokens | Reconfigure/re-authenticate |
Run mora config to see the resolved paths. The vault is plaintext Markdown;
use full-disk encryption such as FileVault or BitLocker. Advanced opt-in backup
and encrypted sharing exist, but they are not part of the current product
hypothesis; read the guide before enabling either.
Privacy boundary
- Read-only at the source. Google scopes are
gmail.readonlyandcalendar.readonly; iMessage and Apple Calendar databases are opened read-only. Mora never sends mail or changes source records. - Local corpus. The vault, index, tokens, sync state, and usage log remain on
your machine. The usage log records local operational metadata, not query text
by default, and honors
mora usage off/DO_NOT_TRACK=1. - Explicit network paths. The Mora process uses the network for enabled source sync, release updates, and explicitly enabled backup or sharing. Optional Ollama inference is restricted to loopback.
- Downstream agents are a separate boundary. After an MCP client retrieves context, that client's model and data policy govern it. A cloud-hosted agent may transmit retrieved snippets to its provider.
- Plaintext at rest. Portability and greppability mean anything that can read your home directory may read the vault. Protect the device and avoid putting the vault in an unencrypted remote.
Project status and contributing
The active product plan is the Mora Home alpha epic, with no ship or payment deadline. Current work is closing the rendered-output audit and operational replay evidence before commitment-quality implementation.
- Guide — commands, connectors, and operational details.
- Architecture — as-built subsystem spec.
- Contributing — build, test, and review contract.
- Security policy — report vulnerabilities privately; never paste vault contents or credentials into a public issue.
No comments yet
Be the first to share your take.