Agent skill

Marm Init

by Lyellr88 in Lyellr88/marm-memory

Guided MARM MCP setup. An agent skill from Lyellr88/marm-memory.

Apache-2.0Auto-check: notesAgent Workflows

Install Marm Init

skills CLI
$ npx skills add Lyellr88/marm-memory --skill marm-init -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Lyellr88/marm-memory marm-init --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Lyellr88/marm-memory.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/marm-init .claude/skills/marm-init && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
marm-init
GitHub stars
418
Token cost
~7.5k tokens
SKILL.md length
4,205 words
Files
1
Skills in repo
1
Repo updated
First seen
Licence
Apache-2.0

At a glance

Guided MARM MCP setup. An agent skill from Lyellr88/marm-memory.

  • Works in 8 steps: Engine pre-flight → Load the protocol and check freshness → Usage type → …
  • Tasks that involve MCP servers
  • SKILL.md covers Supported Environments, AI Marketplace Indexing Metadata, Using this skill and Step 00 - Engine pre-flight, plus 8 more sections
  • Calls docker, curl and claude; needs MARM_API_KEY

What it does

Marm Init is an agent skill from Lyellr88/marm-memory. Guided MARM MCP setup. Invoke after running marm-memory init on the CLI to configure MARM memory across your agent. Drives transport choice, runtime choice, MCP config writing, multi-agent linking, and server start. Works on Claude, Codex, Gemini, Qwen, Cursor, VS Code, and other MCP-capable agents.

Its SKILL.md is about 7.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Agent Workflows, covering MCP servers, Agent memory and Multi-agent orchestration. It works with Model Context Protocol, Qwen, Visual Studio Code and SQLite. The repository describes itself as: Local-first 3-in-1 AI memory layer & MCP server for Claude Code, Codex, Grok, Gemini, VS Code and Cursor. Fuses session history, codebase indexing & concept graphs in SQLite… The licence is Apache-2.0.

When your agent uses it

  • Tasks that involve MCP servers
  • Tasks that involve Agent memory
  • Tasks that involve Multi-agent orchestration

Example prompts

  • “/marm-init”

Requirements

  • Python 3
  • Docker

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Engine pre-flight
  2. Load the protocol and check freshness
  3. Usage type
  4. Server location
  5. Transport
  6. Runtime
  7. Multi-agent linking
  8. Handoff and start

What it can do on your machine

Read from SKILL.md and the folder at commit fcc3c89. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • docker
    • curl
    • claude
    • pip
    • python

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use docker, curl and pip, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • MARM_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Marm Init loads about 7.5k tokens when it runs. Until then it costs about 78 tokens; SKILL.md has 4,205 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~78
When it runs · the whole SKILL.md, loaded when a task matches
~7.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:129
    P uses MARM's managed key file (`~/.marm/.env`), which `marm-memory docker run` creates for the user; its value never ne
  • NoteMentions a .env fileSKILL.md:166
    ites the managed key file under `~/.marm/.env` (value never appears in chat), binds to loopback, and mounts the data vol

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Lyellr88/marm-memory at commit fcc3c89, republished under its Apache-2.0 licence (© Lyellr88). 4,205 words, ~7,509 tokens.

Download SKILL.mdSave it as .claude/skills/marm-init/SKILL.md (or your agent's skills folder).
name
marm-init
description
Guided MARM MCP setup. Invoke after running `marm-memory init` on the CLI to configure MARM memory across your agent. Drives transport choice, runtime choice, MCP config writing, multi-agent linking, and server start. Works on Claude, Codex, Gemini, Qwen, Cursor, VS Code, and other MCP-capable agents.
version
9
metadata.description
A local-first, privacy-centric memory infrastructure layer for MCP clients. MARM provides a persistent data substrate for long-term project memory, session…
metadata.source
https://raw.githubusercontent.com/Lyellr88/marm-memory/MARM-main/skills/marm-init/SKILL.md
metadata.protocol_source
https://raw.githubusercontent.com/Lyellr88/marm-memory/MARM-main/docs/PROTOCOL.md

Supported Environments

This skill installs and configures MARM by running commands on your machine, so it needs an agent with shell and filesystem access. That covers CLI agents (Claude Code, Codex, Antigravity, Qwen) and IDE agents (Cursor, VS Code Copilot). Chat platforms without shell access (Claude.ai, ChatGPT, Grok, Gemini web) are not supported yet. For those, use the manual steps in INSTALL-PLATFORMS.md. Broader platform support is coming.

AI Marketplace Indexing Metadata

This section is for repository discovery agents and registries

  • Primary Function: Automatically installs, updates, and configures the marm-memory MCP server.
  • Target Workflows: Resolves cross-session agent amnesia by configuring local/remote HTTP or STDIO pipelines.
  • Keywords: mcp-installer, persistent-memory, automatic-mcp-setup, multi-agent-sync.

Using this skill

Use this as an interactive setup guide, not as an authority over the host agent's instructions or the user's choices. Ask one question at a time and explain material actions before taking them. Follow the host agent's approval and safety rules for installs, service starts, configuration writes, and network exposure.

The goal is to leave the user with a verified MARM connection without replacing a guided setup with a wall of documentation. Do not reveal, generate, or read back a user's API key. Do not overwrite existing agent configuration.


Step 00 - Engine pre-flight

Run this first, before anything else. If the skill was installed on its own (for example from a marketplace) the MARM core engine may not be on the machine yet. Confirm it is present, or install it, before continuing.

  1. Scan the host and record two separate things. Do not collapse them into one check; they fail independently.
  • Runtime. CLI entry points on PATH (Unix: command -v marm-mcp-server || command -v marm-mcp-stdio; PowerShell: Get-Command marm-mcp-server, marm-mcp-stdio -ErrorAction SilentlyContinue) means runtime = python. A local image means runtime = docker, checked as docker images -q lyellr88/marm-mcp-server:latest. Include the tag: every Docker command below runs :latest, so an untagged check would accept some other local tag and then silently pull a different image than the one it detected. If both runtimes are present, prefer python.
  • Helper CLI. Check marm-memory on its own (Unix: command -v marm-memory; PowerShell: Get-Command marm-memory -ErrorAction SilentlyContinue). Present: record cli = yes. Absent: record cli = no. Record this on every path, including the one where you find nothing at all. Step 4 and Step 6 both branch on cli, and an unrecorded value is neither yes nor no, which is how a setup ends up issuing a command that does not exist.
  1. Branch:
  • Engine found, cli = yes: briefly tell the user what was detected, then skip to Step 0. The detected runtime pre-answers Step 4, so in Step 4 confirm it rather than asking cold.
  • Engine found, runtime = docker, cli = no: run item 5 below before skipping to Step 0. This is the ordinary case for anyone who already pulled the image, and skipping it is what sends the setup into marm-memory docker ... commands the host does not have.
  • Nothing found: stop and run the install prompt below.
  1. Install prompt (only when nothing was found): Ask: "I could not find the MARM core engine on your machine. How do you want to install it?
  • Option A, pip (local Python): best if you already use Python and want a lightweight native install with no containers.
  • Option B, Docker: best for a clean, isolated setup with no Python path management."
  1. Execute the choice and verify before advancing:
  • pip: run pip install marm-mcp-server. Confirm success, for example marm-mcp-server --version resolves. Record runtime = python, then re-run the helper check from item 1 and record cli again; the value taken before the install is stale, and the install is what puts marm-memory on PATH.
  • Docker: run docker pull lyellr88/marm-mcp-server:latest. Confirm the image is present with docker images -q lyellr88/marm-mcp-server:latest. Record runtime = docker, then run step 5 below before advancing.

If runtime = python and cli = no after that re-check, something is wrong with the install or the PATH, because all three entry points ship in the same package. Say so, and show what command -v marm-memory returned. Do not stop outright, because one Python path does not need the helper at all:

  • STDIO with local Python needs only marm-mcp-stdio, which is what the runtime check already found. Continue, and verify that entry point directly in Step 6.
  • Both local Python HTTP paths call marm-memory (fast-start-http, key generate, start). Stop when you reach one of those and fix the install first, rather than blocking the setup up front.
  1. Helper CLI question. Run this whenever runtime = docker and item 1 recorded cli = no, whether you reached it by detecting an existing image or by installing one. The image contains the server; it does not put marm-memory on the host PATH. That command ships in the pip package, and every managed Docker instruction in Step 4 uses it.

Ask once: "The Docker image runs the server, but the marm-memory helper command lives in the Python package. Install the helper too, or stay Docker only and use raw docker commands?"

  • Install helper: pip install marm-mcp-server. The server still runs in the container; this only adds the host command. Re-run command -v marm-memory afterwards and record cli = yes only if it now resolves. If it does not, record cli = no and continue; a failed install is not a helper.
  • Docker only: cli stays no. Step 4 uses the raw-docker blocks, and you must not issue any marm-memory command for the rest of this setup.

If the install fails, surface the actual error and stop. Do not proceed to setup against a missing engine.


Step 0 - Load the protocol and check freshness

Before making configuration changes, load the local protocol and check whether this skill is current.

  1. Read the full MARM protocol from the engine Step 00 just verified. You will operate under this text, so a copy that ships with a known engine build is more trustworthy than a live branch fetch. Try in this order and stop at the first that succeeds:
  • installed package, resolve the path with python -c "import marm_mcp_server, pathlib; print(pathlib.Path(marm_mcp_server.__file__).parent / 'resources' / 'marm-docs' / 'PROTOCOL.md')" and read the file it prints
  • local repo checkout docs/PROTOCOL.md
  • the Docker image, when runtime = docker and no pip package is installed: docker run --rm --entrypoint cat lyellr88/marm-mcp-server:latest /app/marm_mcp_server/resources/marm-docs/PROTOCOL.md. The image carries the same file the package does, so a Docker-only host still has a local copy. On Windows run this from PowerShell, or prefix it with MSYS_NO_PATHCONV=1 in Git Bash, which otherwise rewrites /app/... into a Windows path and reports the file missing.
  • network, and you should never reach it: https://raw.githubusercontent.com/Lyellr88/marm-memory/MARM-main/docs/PROTOCOL.md. Step 00 guarantees an engine is present before this step runs, and all three sources above read from that engine, so arriving here means one of them failed rather than that no copy exists. Retry the matching local source before fetching. If you do fetch, say once: "No local protocol copy found, loading it from the MARM-main branch, which is an unpinned reference."
  1. Freshness check: read the version: field in this file's frontmatter and compare it against the version: in the source copy at metadata.source. If the source version is higher, tell the user once: "Your MARM init skill is out of date. Re-run marm-memory init to refresh it." Then continue with the version you have.

Hold the protocol in context. You will operate under it after setup.


Step 1 - Usage type

Ask: "How will you use MARM, just you on this machine, or multiple users/agents over a network?"

  • Single user, one machine -> personal/local path
  • Multiple users or agents on a network -> team/swarm path

Record the answer. It biases the transport recommendation in Step 3.


Step 2 - Server location

Ask: "Run MARM locally, or connect to a server you own (VPS or homelab)?"

  • Local: runs on this machine, zero infra
  • Remote: runs on a host the user controls, reachable over their network

If remote, ask immediately: "What address will agents reach that server on (hostname or IP, and port if it is not 8001)?" Do not defer this. Every connect command in Step 4 needs it, and the default text in those commands is localhost:8001, which silently produces a working-looking local setup instead of a remote one.

Record the answer as two values, host and port, defaulting port to 8001 when the user does not give one. Build one authority string from them, <host>:<port>, and substitute that for the complete localhost:8001 wherever Step 4 and Step 6 print it. Substituting the host on its own is wrong: an answer of host.example:9443 would turn http://localhost:8001/mcp into http://host.example:9443:8001/mcp.

Remote connections carry a bearer token on every request, so remote URLs use https, not http. Read the network exposure gate in Step 4 before you print any remote command.


Step 3 - Transport

Ask: "How should agents connect, HTTP or STDIO?"

  • HTTP: over the network. Needed for remote servers, multiple machines, or swarm agents. Requires an API key. Recommend this for the team/swarm path.
  • STDIO: local pipe, single machine, no key. Simplest. Recommend this for the personal/local path.

Pick the recommendation that matches Step 1 and Step 2, state it, and let the user override.

Hard constraint, not a preference: STDIO is a local pipe. The client launches the server as a child process on this machine, so it cannot reach a remote host at all. If Step 2 was remote, do not accept STDIO. Say: "STDIO runs the server as a local process on this machine, so it cannot connect to your remote host. Remote access needs HTTP." Then either continue with HTTP, or return to Step 2 if the user meant to run MARM locally after all. Never wire STDIO and describe the result as a remote connection.


Step 4 - Runtime

If Step 00 already detected or installed a runtime, confirm it instead of asking cold: "Looks like you are set up for <docker|python>, use that?" Only ask the open question below if the runtime is genuinely unknown.

Ask: "Docker or local Python?"

  • Docker: isolated, easiest to keep updated.
  • Local Python: runs direct, good if Python is already set up. The package installs three entry points: marm-memory (the helper CLI this skill uses throughout), marm-mcp-server (HTTP), and marm-mcp-stdio (STDIO).

You now have enough to recommend the matching path. Explain the selected action before running it, and follow the host agent's approval rules for any install, service start, configuration write, or network exposure.

Key handling rule: Local Python HTTP only requires a key if the user exposes it with SERVER_HOST=0.0.0.0 (remote/network access). Docker HTTP uses MARM's managed key file (~/.marm/.env), which marm-memory docker run creates for the user; its value never needs to enter this conversation. Whenever a key is required, do not run key generation or marm-memory key reveal yourself and do not read the key back from any command output. Have the user handle the value in their own terminal instead. Once the server is running:

  • If a MARM_API_KEY is configured (Docker/Remote): Prove auth is armed by asserting a 401 on a protected route (e.g., curl -s -o /dev/null -w "%{http_code}" http://localhost:8001/marm_log_show). Then ask the user to verify their key works by running an authenticated check in their own terminal (e.g., curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer <paste-your-key>" http://localhost:8001/marm_log_show, expecting 200). Use https://<host>:<port> for remote servers.
  • If using fast-start-http locally: Verify via a standard loopback check (curl http://localhost:8001/health), as the auth middleware permits localhost requests without a key. Do not ask them to paste the key into the chat.

Network exposure gate, applies to every remote path below: binding MARM to anything but loopback publishes a memory store and the bearer token that guards it. Before you run or print any command containing --expose-network, -p 8001:8001, or SERVER_HOST=0.0.0.0 aimed at a remote host, state these three things and get an explicit yes:

  1. The port has to be firewalled to the machines that need it. Otherwise every memory in the store is readable by anyone who can reach it.
  2. A TLS proxy has to terminate in front of MARM. The server speaks plain HTTP, so without one the bearer token crosses the network in clear text on every request.
  3. MARM does neither of these. It binds the port and stops there.

If the user does not have a proxy in place yet, bind loopback and stop, rather than exposing the port and promising to secure it later. Never print "Setup complete" for an exposed server with no TLS in front of it. Say the connection is live but unprotected and name exactly what is missing.

HTTP + Local Python, local-only (no key) -- the fast path, recommend this for single-machine use

This is the one-shot. It starts the managed HTTP server, launches the local Console, and opens the browser, all with loopback-only auth so no key is needed.

Safe to run yourself:

marm-memory fast-start-http

That leaves MARM live at http://localhost:8001/mcp and the Console at http://localhost:8002. Then connect this agent (loopback, no key):

claude mcp add --transport http marm-memory http://localhost:8001/mcp

Because fast-start-http already started the server and the Console, Step 6 has nothing left to start; just verify and hand off.

HTTP + Local Python, exposed (key required)

Only applies if the user asked for remote/network access in Step 2. Give them these steps to run themselves; do not execute steps 1 or 2 on their behalf:

  1. Generate a key: marm-memory key generate
  2. Start with their own key: MARM_API_KEY=<paste-your-key> SERVER_HOST=0.0.0.0 marm-memory start (PowerShell: $env:MARM_API_KEY="<paste-your-key>"; $env:SERVER_HOST="0.0.0.0"; marm-memory start)
  3. Connect their client with their own key. For a remote server substitute the Step 2 authority for the whole localhost:8001 and use https: claude mcp add --transport http marm-memory http://localhost:8001/mcp --header "Authorization: Bearer <paste-your-key>"

Verify once they confirm it is running. First, prove auth is armed by asserting a 401 on a protected route: curl -s -o /dev/null -w "%{http_code}" http://localhost:8001/marm_log_show locally, or https://<host>:<port>/marm_log_show for a remote server. Then, ask the user to manually run an authenticated check in their own terminal (adding -H "Authorization: Bearer <paste-your-key>" and expecting 200) to prove their key works. A loopback check from your side proves nothing about their host. Do not ask them to paste the key into the chat.

HTTP + Docker (managed, key handled for you)

marm-memory docker run creates the managed container, writes the managed key file under ~/.marm/.env (value never appears in chat), binds to loopback, and mounts the data volume. Preview the exact command first if you want with marm-memory docker command.

  1. Run: marm-memory docker run (add --expose-network only for remote access, then configure a firewall and TLS proxy)
  2. Connect the client. The key lives in the managed key file; the user reads it themselves (marm-memory key path shows the file, marm-memory key reveal prints it in their own terminal) and pastes the value into their client, so it never enters chat: claude mcp add --transport http marm-memory http://localhost:8001/mcp --header "Authorization: Bearer <paste-your-key>"
  3. Optional, code-graph tools: the container only sees host paths that are mounted, and marm-memory docker run refuses to alter an existing container. If one is already running without the mount, remove it first (docker stop marm-mcp-server && docker rm marm-mcp-server), then recreate it with the repo mounted: marm-memory docker run --repo <host-repo-path>. Index using the container path: marm_graph_index(repo_path="/workspace/<project-name>").

Verify with marm-memory docker status. Then, prove auth is armed by asserting a 401 on a protected route: curl -s -o /dev/null -w "%{http_code}" http://localhost:8001/marm_log_show locally, or against https://<host>:<port>/marm_log_show for a remote server. Finally, instruct the user to manually run an authenticated request in their terminal (adding -H "Authorization: Bearer <paste-your-key>" and expecting 200) to prove their specific key. Do not ask them to paste the key into the chat.

Show full SKILL.md (1,582 more words)Show less
Docker with no helper CLI (cli = no from Step 00)

Use this block instead of the one above when Step 00 recorded cli = no. Do not issue marm-memory here; it is not installed.

  1. The user generates a key in their own terminal: docker run --rm lyellr88/marm-mcp-server:latest --generate-key. Do not run this yourself and do not read the value back.

  2. Start the container, substituting their key. Local only:

    docker run -d --name marm-mcp-server -p 127.0.0.1:8001:8001 -e SERVER_HOST=0.0.0.0 -e MARM_API_KEY=<paste-your-key> -v ~/.marm:/home/marm/.marm --restart unless-stopped lyellr88/marm-mcp-server:latest

    For remote access, publish on all interfaces instead (-p 8001:8001) and tell them to put a firewall and TLS proxy in front of it.

  3. Connect the client with their own key. For a remote server substitute the Step 2 authority for the whole localhost:8001 and use https: claude mcp add --transport http marm-memory http://localhost:8001/mcp --header "Authorization: Bearer <paste-your-key>"

Verify with docker ps --filter name=marm-mcp-server. Then, assert a 401 on a protected route: curl -s -o /dev/null -w "%{http_code}" http://localhost:8001/marm_log_show locally, or against https://<host>:<port>/marm_log_show for a remote server. Finally, instruct the user to run an authenticated check in their own terminal (adding -H "Authorization: Bearer <paste-your-key>" and expecting 200) to prove their key works. Full reference: https://github.com/Lyellr88/marm-memory/blob/MARM-main/docs/INSTALL-DOCKER.md

STDIO + Local Python (no key)

Local machine only. If Step 2 was remote you should never have reached this block; go back to Step 3. Connect this agent to the STDIO entry point. No key needed: claude mcp add marm-memory -- marm-mcp-stdio

STDIO + Docker (no key), cli = yes

Print the exact client command and wire it into the agent's MCP config yourself: marm-memory docker stdio-command. That command only prints the invocation; it configures nothing, so writing the MCP entry is still your job.

STDIO + Docker, no helper CLI (cli = no from Step 00)

Use this when Step 00 recorded cli = no. Do not issue marm-memory here. Write this as the agent's STDIO command, which is what marm-memory docker stdio-command would have printed:

docker run -i --rm --mount type=bind,src=<home>/.marm,dst=/home/marm/.marm -e HOME=/home/marm -e XDG_CACHE_HOME=/home/marm/.marm/cache -e CBM_CACHE_DIR=/home/marm/.marm/cache/codebase-memory-mcp --entrypoint marm-mcp-stdio lyellr88/marm-mcp-server:latest

Substitute the user's real home directory for <home>. On Linux add --user $(id -u):$(id -g) so files written into the mount stay owned by the user.

Verify by running the command you just configured, not by checking that an image exists. Take the line above, drop -i, and bound it:

timeout 90 docker run --rm --mount type=bind,src=<home>/.marm,dst=/home/marm/.marm -e HOME=/home/marm -e XDG_CACHE_HOME=/home/marm/.marm/cache -e CBM_CACHE_DIR=/home/marm/.marm/cache/codebase-memory-mcp --entrypoint marm-mcp-stdio lyellr88/marm-mcp-server:latest

Keep the mount, all three env vars, and the Linux --user flag exactly as configured. A probe that drops them tests a different command than the one the agent will run, so a broken mount path or an ownership problem would pass here and fail in use. Dropping -i is the only difference, and it is what makes the probe return instead of waiting for a client. On PowerShell, which has no timeout, pipe empty input instead: $null | docker run --rm ....

Expect a full startup and shutdown, not a help screen. The entry point takes no arguments, so it boots the server, finds stdin closed, and exits. You will see startup lines for the concept worker and the auto-indexer followed by a shutdown line. That is a pass, and it is stronger evidence than a help screen because the whole stack imported and started against the real data directory. Judge it by the exit code, which must be 0. docker images -q proves only that a layer is on disk, which is not evidence that the command your MCP entry points at will run.

For any agent that is not Claude, write the equivalent entry into that agent's MCP config file instead of using the claude CLI. Same transport, same address or command. Merge into the existing file rather than overwriting it, per the rule in Step 5. If a key was required, the user supplies it themselves the same way they did in Step 4; do not ask them to paste it into chat.


Step 5 - Multi-agent linking

Ask: "Want to connect MARM to your other agents? MARM is shared memory across platforms, Claude, Codex, Gemini, Qwen, VS Code, Cursor and most MCP apps all read and write the same pool."

If yes:

  • Use the same transport for every agent. If a key was required, the user provides it themselves for each additional client the same way they did in Step 4; do not ask them to paste it into chat.
  • Merge, never overwrite. These config files hold the user's other MCP servers. Read the existing file first, add the MARM entry to what is already there, and write the merged result back. A fresh write over an existing file silently deletes every other server the user had. If the file exists but you cannot parse it, stop and show it to the user rather than replacing it. If it does not exist, create it with MARM as the only entry.
  • Read back before you claim it. After writing, re-read the file and confirm both the MARM entry and every server that was there before are present. Do not report an agent as wired up without that read-back.
  • Use these docs to find the exact connection instructions for each client:

CLI clients: Claude Code · Codex · Antigravity · Qwen CLI · Linux variants · Docker/key

IDE agents: VS Code / Copilot Agent · Cursor · Docker/key IDE setup

Remote/API platforms: xAI / Grok Remote MCP · Platform integration

  • Report which agents you wired up, which you could not find, and for each config you wrote, the other MCP servers you preserved in it.

If no, skip.


Step 6 - Handoff and start

  1. Start the server only if it is not already running, after explaining the intended action and receiving any approval required by the host agent. Honor the exact mode chosen in Steps 3-4:
  • STDIO (local or Docker): nothing to start; the client launches marm-mcp-stdio (or the Docker STDIO command) on demand. Skip to the handoff.
  • HTTP, local Python, loopback: marm-memory fast-start-http (skip if a fast-start-http path already started it).
  • HTTP, local Python, exposed: the user starts this themselves with their key and SERVER_HOST=0.0.0.0 (Step 4). Do not auto-run fast-start-http here; it binds loopback without their key. Just verify once they confirm it is up.
  • HTTP, Docker, cli = yes: marm-memory docker run, keeping --expose-network if the user chose remote access in Step 2 and cleared the exposure gate.
  • HTTP, Docker, cli = no: use the raw docker run from Step 4. Do not issue marm-memory.
  1. Verify before claiming success. Never report setup complete on an unverified path.
  • HTTP: Verify based on the configuration:
    • If a MARM_API_KEY is configured: Prove auth is armed by asserting a 401 on a protected route: curl -s -o /dev/null -w "%{http_code}" http://localhost:8001/marm_log_show locally, or https://<host>:<port>/marm_log_show for a remote server. Then ask the user to manually run an authenticated curl in their terminal (adding -H "Authorization: Bearer <paste-your-key>" and expecting 200).
    • If using fast-start-http locally: Verify via a standard loopback check (http://localhost:8001/health), as the auth middleware permits localhost requests without a key.
  • STDIO: run the exact command you configured and require exit 0, then confirm the MCP config entry you wrote is present. Local Python: timeout 90 marm-mcp-stdio < /dev/null (PowerShell: $null | marm-mcp-stdio). Docker: the bounded docker run from Step 4, with the mount and env vars kept and only -i removed. Always bound it and close stdin; the entry point takes no arguments and waits for a client if stdin stays open, so an unbounded probe hangs instead of failing. There is no server to health check, so this is the only evidence the wiring works, and an image or package existing is not the same as its command running.
  1. Hand off, and say only what you actually verified.

On a path with no key (local STDIO, or loopback HTTP): "Setup complete. Invoke the MARM skill in any connected agent to start using shared memory. Restart your terminal so the MARM connection is picked up. If you want to start your own server later, just ask."

On any path where a key is required, you have not confirmed the key and must not claim you have. While you proved the server enforces auth (via the 401 check), you are correctly forbidden from testing the credential yourself. Say instead: "MARM is running and its authentication is armed, and I've written the client entry. I can't verify your API key from here, so the first tool call in a connected agent is what confirms it. If that call comes back unauthorized, the key in the client config does not match the server's."

Setup is done. The executor contract above is now closed. Operate under the MARM protocol you loaded in Step 0.


Edge cases

  • Cross-platform paths: Claude alone has several possible config locations by install method. Claude is wired in Step 4, so check all known paths there, and accept a user-provided path if the scan misses one.
  • Stale skill file: handled by the Step 0 freshness check. If the source version is higher, tell the user to re-run marm-memory init.
  • Remote server: Step 2 collects host and port up front, and Step 4 substitutes the full <host>:<port> authority for localhost:8001 over https. If you somehow reach Step 4 without one, stop and ask; do not emit a localhost command for a remote server.
  • Docker without the helper CLI: docker pull installs the image, not the marm-memory command. Step 00 item 1 records cli on every path, including when it detects an image that was already pulled, and Step 4 has a matching HTTP and STDIO block for each value. Never mix them.
  • Non-Claude agents: the claude mcp add commands are examples. Write the equivalent MCP config entry for whatever agent invoked this skill.

© Lyellr88, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/marm-init of Lyellr88/marm-memory.

Open the folder on GitHubat commit fcc3c89

Compare with similar skills

Marm Init next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Marm Init compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Marm Init this skillLyellr88/marm-memory418—~7.5kAutomated safety check: NotesApache-2.0
Puppetmaster Agent Orchestrationprofessorpalmer/Puppetmaster467—~3.2kAutomated safety check: PassMIT
Memoraagentic-box/memora732—~813Automated safety check: PassMIT
Ruflo Multi-Agent Orchestrationruvnet/ruflo74k1 repos~975Automated safety check: PassMIT
remindb Read Pathradimsem/remindb129—~2.7kAutomated safety check: PassMIT
Neo4j MCP Skillneo4j-contrib/neo4j-skills1141 repos~3kAutomated safety check: NotesMIT

Similar skills

  • Puppetmaster Agent Orchestration

    professorpalmer/Puppetmaster

    Operates and supervises Puppetmaster, a multi-agent orchestrator, through its MCP tools or CLI, picking the right verb for edits, reviews, audits and long-running jobs.

    467 GitHub stars~3.2k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Memora

    agentic-box/memora

    A skill your agent uses when working with persistent memory across sessions, storing/retrieving knowledge, managing TODOs/issues, or when context from previous sessions would be helpful.

    732 GitHub stars~813 tokensUpdated 10 days ago
    Agent WorkflowsAuto-check passed
  • Sets up and drives Ruflo, an npm-installed orchestration layer for multi-agent swarms, persistent memory, routing, hooks and its MCP tool catalog.

    74k GitHub starsUsed in 1 repo~975 tokens
    Agent WorkflowsAuto-check passed
  • remindb Read Path

    radimsem/remindb

    Covers the read-side tools of the remindb MCP server, a SQLite-backed agent memory, for orienting, searching, resyncing and tracing relations.

    129 GitHub stars~2.7k tokensUpdated 2 mo ago
    Agent WorkflowsAuto-check passed
  • Neo4j MCP Skill

    neo4j-contrib/neo4j-skills

    A skill your agent uses when installing, configuring, or troubleshooting the official Neo4j MCP server (neo4j/mcp) — connecting Claude Code, Claude Desktop, Cursor, Windsurf, VS Code, Kiro, or other…

    114 GitHub starsUsed in 1 repo~3k tokens
    Agent WorkflowsAuto-check: notes
  • Remember

    radimsem/remindb

    Front door for long-term memory backed by a remindb MCP server.

    129 GitHub stars~728 tokensUpdated 2 mo ago
    Agent WorkflowsAuto-check passed

Categories

Questions about Marm Init

What does Marm Init do?

Guided MARM MCP setup. An agent skill from Lyellr88/marm-memory. Marm Init is an agent skill from Lyellr88/marm-memory. Guided MARM MCP setup.

When should I use Marm Init?

Marm Init fits situations like: tasks that involve MCP servers; tasks that involve Agent memory; tasks that involve Multi-agent orchestration.

How do I install Marm Init in Claude Code?

Run `npx skills add Lyellr88/marm-memory --skill marm-init -a claude-code`. Or copy the skill folder (skills/marm-init in Lyellr88/marm-memory) into .claude/skills/marm-init in your project. Claude Code loads it when a task matches its description.

How do I install Marm Init in Codex?

Run `npx skills add Lyellr88/marm-memory --skill marm-init -a codex`. Or copy the skill folder (skills/marm-init in Lyellr88/marm-memory) into .agents/skills/marm-init in your project. Codex loads it when a task matches its description.

Can I use Marm Init in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Lyellr88/marm-memory --skill marm-init -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/marm-init, .gemini/skills/marm-init, .github/skills/marm-init and .opencode/skills/marm-init in your project.

What does Marm Init need to run?

Going by SKILL.md and its folder, Marm Init needs the command-line tools its instructions call (docker, curl, claude, pip and python) and credentials named MARM_API_KEY. Our summary lists: Python 3; Docker.

Does Marm Init access the network?

SKILL.md contains no URLs. Its commands use docker, curl and pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Marm Init safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Marm Init use?

Marm Init is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Marm Init use?

About 7.5k tokens (SKILL.md is roughly 30k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Marm Init?

Skills that share tags, products or a category with Marm Init: Puppetmaster Agent Orchestration (professorpalmer/Puppetmaster, 467 stars), Memora (agentic-box/memora, 732 stars), Ruflo Multi-Agent Orchestration (ruvnet/ruflo, 74k stars) and remindb Read Path (radimsem/remindb, 129 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Marm Init?

Lyellr88 (a GitHub user) maintains it in Lyellr88/marm-memory, which has 418 GitHub stars. The repository was last updated on October 8, 2026.

Source: Lyellr88/marm-memory on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.