Skip to main content
arcane: Persistent memory for AI coding agents, shared across every project and harness.

CI PyPI Python OpenSSF Scorecard Licence: MIT

Quick start · Connect an agent · CLI · Configuration · Docs

Arcane is an MCP server that gives coding agents such as Claude Code and Codex a memory that outlives the session. Agents save the decisions, bugs and patterns they work through. The next session, in any harness, finds them again with keyword and semantic search.

Everything stays on your machine: one SQLite database plus a Markdown copy you can read and grep. Secrets are redacted before anything is written or sent to the embedding model.

arcane search "why were customers charged twice"
 Results (4 found)

 [1] Webhook retries double-charged customers (score: 1.00)
     bug | 2026-10-24 | payments-api
     What: Stripe retried webhooks after our 10s timeout and each retry created a new charge.
     Why: Handler was not idempotent; it keyed on our own request ID, not Stripe's event ID.
     Impact: Dedupe on event.id in a unique index; refunds issued to 14 customers.

 [2] Use Postgres advisory locks for payout batches (score: 0.83)
     decision | 2026-10-24 | payments-api
     What: Payout batches take a pg_advisory_xact_lock keyed on merchant ID.

Pre-1.0. The MCP tool surface and the storage format can still change between minor versions. Run arcane backup before upgrading, and read the release notes.

Quick start

Arcane needs Python 3.11 or later. For semantic search, install Ollama and pull the default embedding model. Without it, search falls back to keyword matching.

uv tool install arcane-mcp        # or: pip install arcane-mcp
ollama pull nomic-embed-text
arcane init                       # creates ~/.arcane

The package is arcane-mcp. PyPI's arcane is an unrelated project.

Arcane starts a local Ollama by itself when it is installed but not running. Set ARCANE_OLLAMA_AUTOSTART=0 to stop that.

Connect an agent

Arcane speaks MCP over stdio, so any MCP client can run it with arcane mcp.

Client Command or config
Claude Code claude mcp add --scope user arcane -- arcane mcp
Codex codex mcp add arcane -- arcane mcp
Claude Desktop the JSON below, in ~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "arcane": { "command": "arcane", "args": ["mcp"] }
  }
}

If a client cannot find arcane, use the full path that command -v arcane prints.

Run it in a container

Each release also ships a container image, plus wheel and source assets with build provenance on its GitHub release. The image runs arcane mcp and keeps its data in /data/.arcane:

docker run -i --rm -v "$HOME/.arcane:/data/.arcane" ghcr.io/edition-x/arcane

The container cannot see your working directory's git remote, so memories land in the default org unless the agent passes org and project explicitly.

What agents get

By default the server advertises 13 tools, the ones an agent uses in every session. Set ARCANE_TOOL_PROFILE=full for all 26, including deletion, ingestion, analysis and content drafting. Every tool and its parameters are in the tool reference.

Area Default tools
Memories memory_save, memory_search, memory_context, memory_details, memory_update
Journeys journey_start, journey_update, journey_complete, journey_abandon, journey_list, journey_show
Lookups artifact_search, insights
  • Memories are one decision, bug, pattern, learning, piece of context, spike result or milestone each. Saving a title that already exists in the same scope updates that memory, and memory_save warns when a new memory is close to an existing one, so the store does not fill with duplicates. A memory can also supersedes an older one, which search then ranks lower.
  • Journeys follow a multi-step investigation from problem to outcome, with memories attached as it goes.
  • Artifacts are git commits, GitHub Actions runs and Linear tickets you ingest, so a memory can point at the evidence.

Use it from the terminal

The CLI reads and writes the same store as the MCP server. arcane <command> --help shows every option.

Task Command
Save a memory arcane save --title "..." --what "..." --category decision
Search arcane search "query"
Print context for an agent prompt arcane context
Read or delete one memory arcane details <id>, arcane delete <id>
Track an investigation arcane journey start --title "...", then update, complete, list, show
Ingest evidence arcane ingest git, arcane ingest gha --owner <owner> --repo <repo>, arcane ingest linear --team <key>
Analyse the store arcane analyze velocity, arcane analyze health, arcane analyze usage
Report on a period arcane report --days 7, or --since/--until, --org, --format json
Draft content arcane draft blog, arcane draft adr <memory-id>
Link and trace arcane link <source> <target> --relation led_to, arcane trace <id>
Export one org arcane export --org <org>
Back up arcane backup
Find and merge split projects arcane projects, arcane merge-projects <src> <dest>

arcane ingest gha reads GITHUB_TOKEN and arcane ingest linear reads LINEAR_API_KEY.

How it works

Every memory belongs to one of three layers:

  • Project: the repository the agent is working in.
  • Org: shared by every repository with the same owner.
  • Global: applies everywhere.

Arcane works out the org and project from the git remote of the agent's working directory, so a session in acme/payments-api sees that project's memories, acme's org memories and your global ones. Repositories without a remote fall back to the org personal. Agents choose the layer with memory_save's scope argument; arcane save always writes to the current project. Journeys, artifacts and insights carry their org too, and arcane export --org includes only that org's records.

Search combines SQLite FTS5 keyword matching with sqlite-vec vector search. Each save is written to SQLite and mirrored to a daily Markdown file:

~/.arcane/
├── index.db                                 # SQLite: memories, journeys, artifacts, links
├── backups/                                 # archives from `arcane backup`
└── vault/
    ├── @<org>/<project>/YYYY-MM-DD-session.md   # project memories
    ├── @<org>/YYYY-MM-DD-session.md             # org memories
    └── @global/YYYY-MM-DD-session.md            # global memories

Before anything is stored or embedded, text passes through four redaction layers:

  • explicit <redacted>…</redacted> spans
  • well-known token formats (GitHub, AWS, Stripe, Slack, JWT and others)
  • password=, secret= and api_key= style values
  • your own regular expressions in ~/.arcane/.memoryignore

Architecture goes deeper.

Configuration

Arcane reads ~/.arcane/config.yaml, or $ARCANE_HOME/config.yaml. Every setting is optional.

Setting Default What it changes
embedding.provider ollama ollama, openai (needs embedding.api_key in the file) or none for keyword search only
embedding.model nomic-embed-text Embedding model. Run arcane reindex after changing it
embedding.base_url http://localhost:11434 Ollama address
context.semantic auto Whether memory_context uses semantic search: auto, always or never
orgs.remotes none Map a git remote owner to an org name, such as Sunrise-Robotics: sunrise-robotics
orgs.default personal Org for repositories without a git remote
projects.aliases none Treat two project names as one
dedup.threshold 0.92 Similarity at which a save warns near_duplicate
usage.retention_days 180 How long lookup history is kept for arcane analyze usage

The configuration guide covers every setting and environment variable.

Plugins

Ingestion, analysis and content plugins are Python entry points. Install a plugin package into Arcane's environment and its commands appear under arcane ingest, arcane analyze or arcane draft. With ARCANE_TOOL_PROFILE=full, agents can also run them through the plugins MCP tool. arcane ingest --list shows what is installed.

[project.entry-points."arcane.plugins.ingestion"]
jira = "my_package:JiraIngestionPlugin"

The plugin guide lists the three protocols and the parameters Arcane passes in.

Backups and restores

arcane backup copies the database with SQLite's online backup API, so it is safe while agents are writing. It checks the copy's integrity, archives it with vault/, and keeps the newest 14 archives. --dest writes them to another disk.

To restore, stop your agents and unpack an archive into ~/.arcane or another ARCANE_HOME. File paths are stored relative to the home, so a restored copy never edits the original.

Limits

  • One machine. The store is local. There is no sync between machines. Move data with arcane backup or arcane export.
  • Semantic search needs embeddings. Without Ollama or an OpenAI key, memories save without vectors and search uses keywords only. Some Python builds, such as the python.org installer for macOS, cannot load SQLite extensions and also fall back to keywords. Arcane says so when it starts; on Linux x86_64, pip install "arcane-mcp[pysqlite3]" fixes it.
  • Lookups are logged. By default each MCP lookup is recorded, with its redacted search text, so arcane analyze usage can show what agents recall. Set usage.log_queries: false to drop the text, or usage.enabled: false to record nothing.
  • Redaction matches patterns. It catches known token formats and the patterns you add, not every secret. Wrap anything sensitive in <redacted> tags, or keep it out of memories.
  • Pre-1.0. Storage and tools can change between minor versions.

Contributing

Bug reports and pull requests are welcome. CONTRIBUTING.md covers the development setup and tests, and AGENTS.md covers the architecture.

Licence

MIT

Metadata

Release files for arcane-mcp 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for arcane-mcp 0.2.0
File Size Uploaded Provenance
arcane_mcp-0.2.0.tar.gz 298.8 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for arcane-mcp 0.2.0
File Interpreter ABI Platform
arcane_mcp-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 435.7 kB

Release files / arcane_mcp-0.2.0.tar.gz

Download URL arcane_mcp-0.2.0.tar.gz
Size 298.8 kB
Tags Source
SHA-256 checksum
How to use checksums
3d08620ec9c1cc4d15a8738e003561be0f2c210af6134a3829a74ef8fbb044b5
BLAKE2b-256 checksum
How to use checksums
e77f973a632030d6bd6077a53a715f763692f4bece520e17767f621f947f1c2f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / arcane_mcp-0.2.0-py3-none-any.whl

Download URL arcane_mcp-0.2.0-py3-none-any.whl
Size 136.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d184517986534f08573141204c203be6e868e9c9cab25aab444cc0c772f2fe17
BLAKE2b-256 checksum
How to use checksums
2143c7081b7867531d850408ee078acf763054496bee0052e632535c976ae2e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Security for arcane-mcp 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for arcane_mcp-0.2.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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