Skip to content

Install & activate

Available today

Getting the Claude Code connector running is four moves: install the CLI, sign in, bind your repo to a workspace, and wire the MCP server into Claude Code. The CLI is a single binary named mla.

Install the CLI

mla ships through three channels. Pick one; all three install the same single binary. meetless.ai/install is the source of truth for these commands.

Terminal window
# curl installer (recommended, no Node required)
curl -fsSL https://meetless.ai/install.sh | sh
Terminal window
# Homebrew cask (macOS / Linux)
brew install --cask meetless/tap/mla
# if brew refuses with "Refusing to load cask ... from untrusted tap":
brew trust meetless/tap && brew install --cask meetless/tap/mla
Terminal window
# npm (works everywhere Node 22+ runs, including Alpine/musl)
npm install -g @meetless/mla

Verify the binary:

Terminal window
mla --version

Sign in and bind a repo

  1. Sign in. mla login opens the Console authorize page in your browser and captures a user session. Every action you take is then audited as you.

    Terminal window
    mla login

    On a headless or SSH box, mla login --no-browser --port <forwarded-port> prints a URL to open elsewhere.

  2. Activate the repository. From the repo root, mla activate binds this folder to a workspace. If the folder has no workspace yet, it provisions one named after the directory; if it already has a marker, it binds to it.

    Terminal window
    mla activate

    Several repos, one workspace. A team that wants its repositories to share one governed memory binds each of them to the same workspace. Find the id, then bind each repo:

    Terminal window
    mla workspace list
    cd ../other-repo && mla activate --workspace <id>

    Every bound folder reads the same decisions, rules and constraints, and each keeps its own scan root, so one repo’s CLAUDE.md is never served as another repo’s rules. --workspace provisions nothing; it refuses rather than repointing a folder that is already bound to a different workspace (move one deliberately with mla deactivate first). Do not put a single marker in a parent folder holding several repos to achieve this: the scan root is the marker’s directory, so that collapses every repo into one and does leak their instruction files into each other.

    Git worktrees need nothing. A linked worktree of an activated repository inherits its origin checkout’s workspace automatically, because the binding follows the repository rather than the directory. It keeps its own scan root and its own rules; mla status says so when a binding was inherited. Put a .meetless.json in the worktree only if you want it bound somewhere else.

  3. Wire the MCP server into Claude Code. mla mcp starts the Meetless MCP server over stdio, authenticated as you and scoped to the bound workspace. Add it as an MCP server in your Claude Code config with mla mcp as the command. This is what lets the agent query governed memory in a session.

  4. Verify the wiring. mla doctor runs a health check and reports both lifecycles: whether the workspace is bound, and whether session capture is active.

    Terminal window
    mla doctor

What activate sets up

Activating does more than write a marker file. Conceptually, it binds the workspace, installs the local capture hooks, scans the repo, and builds the provisional context that injection will draw from. You do not drive any of that by hand; activate is the one gesture that stands the connector up for this repo.

Turning it off

mla mute silences capture for the current session without unbinding anything. mla deactivate removes this folder’s workspace binding. mla uninstall removes the entire local footprint (state, hooks, and the skill) and tells you how to remove the binary. None of those touch server-side data.

Next: what happens in a session.