Repository navigation
v0.134.0
Remote store, keep daemon, and markdown sync transport
Remote authoritative store
Keep can now target a remote store as the authoritative backend. Configure with:
[remote_store]
api_url = "https://keep.example.com"
api_key = "..."The local daemon owns the filesystem (markdown mirrors, watches, local state); the remote service owns the notes. One-shot markdown export, continuous --sync, and the change feed all work against the remote store transparently.
New daemon endpoints
GET /v1/export— full store export with NDJSON streaming (?stream=ndjson)GET /v1/export/bundles/{id}— single note bundle with inverse edges and edge-tag metadataGET /v1/export/changes?cursor=N— cursor-based non-destructive change feed with server-side dependency expansion (affected_note_ids)- Capability descriptors on
GET /v1/readyandGET /v1/health
keep daemon is the public command
keep daemon replaces keep pending as the primary daemon management command:
keep daemon # Start the daemon (foreground)
keep daemon --list # Show queue status + active mirrors
keep daemon --reindex # Enqueue all notes for re-embedding
keep daemon --stop # Stop the daemon
keepd --store ~/.keep # Direct foreground daemon runnerkeep pending remains as a hidden compatibility alias. keepd is a new minimal script entrypoint.
Remote daemon mode
The daemon can now bind to non-loopback addresses for remote access:
keepd --store ~/.keep --trusted-proxyBehind a reverse proxy, --trusted-proxy is the only additional flag needed — the daemon binds to loopback by default and the proxy forwards to it. Use --bind and --advertised-url only when the daemon must accept connections directly on a non-loopback interface.
Markdown sync transport
- Local mirrors now use a local YAML registry (
~/.keep/markdown-mirrors.yaml) instead of a store note — correct ownership for distributed sync. - Three-branch polling: local sync outbox (trigger-driven), remote change feed (cursor-based), and interval-based fallback.
- Remote incremental sync: change-feed events carry
affected_note_idsso the local mirror can incrementally rewrite only the affected note bundles without local graph access. RemoteKeepergains full export client:export_iter()(NDJSON streaming),export_bundle(),export_changes(),capabilities().
Other
- Tool integrations no longer auto-install on every command — explicit setup only.
KEEP-PENDING.md→KEEP-DAEMON.md(renamed).- Stale
keep pending --forcehints fixed tokeep daemon --reindex.
Upgrade notes
- The
[remote]TOML section is now[remote_store](old name still works as a fallback). - Mirror registrations auto-migrate from the legacy
.markdown-mirrorsstore note to the local YAML file on first save. - Schema version unchanged from v0.133.0.