Technical specifications
Native where it matters.
Composable where it counts.
PlatformmacOS 26+
LanguageObjective-C
AI tools22
TelemetryNone
Signal path
Two transports.
One native engine.
AI clientClaude · Codex · LM Studio
→MCP transportstdio · HTTP · SSE
→Objective-C engineTools · vectors · graph
→Local persistenceCore Data · Core ML
→Your iCloudOptional private sync
Platform & implementation
Native Mac software, all the way down.- Operating system
- macOS 26 or laterBuilt for Tahoe-era platform APIs rather than a cross-platform compatibility layer.
- Language
- Objective-C throughoutNo Swift dependencies and no bridging headers. Dynamic dispatch fits the heterogeneous MCP tool surface.
- Application frameworks
- Foundation · AppKit · Core Data · CloudKitNative application lifecycle, interface, persistence, and optional private sync.
- Graphics
- Core Graphics · QuartzCoreNative drawing and animation for Archive Scope and its live graph.
- Concurrency & IPC
- Grand Central Dispatch · POSIX sockets · atomicsQueues, local Unix-domain sockets, kernel-arbitrated host election, and clean process coordination.
- Distribution
- Two sandboxed Mac application targetsES Archive MCP and ES Archive Server share the same engine while exposing different transports.
Persistence & knowledge model
One durable graph, not a pile of chat logs.- Local store
- Core Data backed by SQLiteEntries and their structure remain in the application’s local sandbox container.
- Optional sync
- NSPersistentCloudKitContainerSynchronizes through the user’s private CloudKit database. ES Archive remains fully functional without iCloud.
- Stored entities
- Entries · revisions · vectors · tags · linksThe model also preserves marginal notes, external references, authorship, and embedder inventory.
- Evolution
- Automatic revision snapshotsChanges can retain their reason and be reconstructed as complete versions or compact deltas.
- Relationships
- Directional, typed graph edgesRelationships can carry verbs such as supports, contradicts, corrects, revises, elaborates, and answers.
- Portability
- Backup · restore · legacy importNative archive backup and restoration, including compatibility with legacy .esmemory backups.
On-device semantic engine
Meaning is computed locally.- Model
- EmbeddingGemma 300MGoogle’s embeddinggemma-300m model, bundled with the application.
- Execution
- Core ML · fully on-deviceArchive content is never sent to a remote embedding service.
- Quantization
- Int4A compact model representation suited to local Mac inference.
- Vector dimensions
- 768The active vector index is maintained locally and can be backfilled or rebuilt.
- Languages
- 100+Multilingual vectors allow a query in one supported language to reach entries written in another.
- Indexed representation
- Title + retrieval summaryConcise authored summaries sharpen semantic retrieval without embedding every full entry body.
Retrieval architecture
Different questions deserve different axes.- Semantic
- Vector similarity · optional recency focusConceptual retrieval can be scoped by curated tags and weighted toward a day, week, or month.
- Lexical
- Literal text · ICU regular expressionsExact passage retrieval includes line numbers and configurable surrounding context.
- Temporal
- Created · modified · accessedOldest or newest traversal across explicit windows and project scopes.
- Relational
- Typed links · semantic neighborsThe AI can follow authored relationships, filter by edge verb, or inspect nearby concepts.
- Structural discovery
- Popular · forgotten · lost · hubs · revised · discussed · hotDiscovery can question the Archive’s attention instead of reinforcing only recent recall.
- Composition
- Pipeline-based investigative lensesSemantic, lexical, temporal, graph, sorting, and slicing stages can be combined without changing the storage ontology.
MCP & session architecture
One engine, two ways to connect.- Protocol
- Model Context Protocol · JSON-RPCTwenty-two AI-facing tools cover storage, retrieval, evolution, graph structure, identity, and upkeep.
- ES Archive MCP
- Newline-delimited JSON-RPC over stdioDesigned for Claude Desktop and Claude Code. It opens no HTTP listener.
- Concurrent stdio sessions
- One host engine · lightweight relaysThe first process wins a Unix-socket bind and hosts the engine; later sessions relay to it instead of loading duplicate stores and models.
- ES Archive Server
- Streamable HTTP · SSEA localhost transport for Codex, LM Studio, and other MCP-over-HTTP clients.
- Persona identity
- Per connection or per listening portAuthorship comes from the connection boundary rather than an untrusted name asserted inside a tool call.
- Persona scope
- Distinct views within a shared archiveEach persona reads and writes its own authored slice; the human can inspect an all-persona witness view in Archive Scope.
Local HTTP & security
Remote access is never accidental.- Server
- Vendored GCDWebServerMaintained in-tree with six documented security hardening fixes.
- Default bind
- 127.0.0.1 onlyThe Server app accepts local connections and does not expose itself to the network.
- Remote access
- Explicit cloudflared tunnelOptional exposure is delegated to a tunnel configured and controlled by the user.
- Authentication
- Per-persona Cloudflare Access JWTEach port can independently require edge authentication while other personas remain local-only.
- Sandboxing
- Mac App SandboxLocal data, entitlements, and application capabilities remain within the platform security model.
- Telemetry
- NoneNo analytics, developer service, or third-party embedding endpoint receives archive content.
Archive Scope
A native witness surface for a living archive.- Rendering
- AppKit · Core GraphicsA native interactive visualization rather than an embedded web view.
- Graph
- Force-directed simulation at 60 HzRepulsion, spring attraction, centering, damping, and settlement are implemented in the application.
- Edges
- Explicit links + nearest semantic neighborSmall disconnected clusters are bridged to make the overall body of knowledge legible.
- Live updates
- Core Data fetched-results deltasInserts, edits, links, deletions, and tool access can update or animate the view as they happen.
- Color
- Attention heat or persona identitySingle-persona views show access frequency; the witness view gives each persona a stable palette.
- Tag cloud
- Archimedean spiral layoutTags are sized by frequency and update as the Archive’s vocabulary changes.
Operations & licensing
Published as a working instrument.- Index maintenance
- Backfill · reindex · cleanThe engine reports vector health and can rebuild or remove stale index material deliberately.
- Sync reconciliation
- Entry · tag · embedder deduplicationMaintenance operations reconcile duplicate records that can arise through historical writes or multi-device sync.
- Application modes
- Dock app · optional minimal menu barThe host can expose Archive Scope and settings normally or run with a quieter interface.
- Primary license
- MITThe ES Archive source is published for inspection and understanding.
- GCDWebServer license
- BSD-styleThe vendored server retains its original license.
- Source
- github.com/apocryphx/ES-ArchiveImplementation and design-decision notes are available alongside the code.
Read the machinery
The implementation is part of the argument.
ES Archive is open source—not as a growth strategy, but so technically curious people can inspect the choices behind the instrument.