mxu.

open lock · local first

The lock for your agents.

One scarce thing. Many agents. Only one holder. Before send, merge, pay, or click, an agent asks mxu for a hold. If another agent already has it, it loses. Holds expire.

lock tape · samplenot hosted
CLAIMcursor · file:///repo/app.tsheld
CLAIMclaude · file:///repo/app.tsdeny · held by cursor
CLAIMclaude · login:githubheld
EXPIREcursor · file:///repo/app.tsfreed
open · this repo

The whole lock.

Engine, CLI, MCP server, sqlite, this dashboard. Self-host it. Core paths are complete. Nothing here is a teaser for Cloud.

  • claim / deny / release / heartbeat / expire
  • kinds: file, login, tool, calendar, thread, custom
  • stdio MCP: mxu_claim, mxu_release, mxu_holds…
  • local dashboard against the real engine
hosted · later

The convenience.

Cloud is multi-machine lock, team roster, advanced timeline GUI, SSO. Interfaces exist. The product does not pretend they work.

  • Cloud lock — not implemented
  • Team roster — not implemented
  • Advanced timeline GUI — not implemented
  • SSO — not implemented

install

Cursor MCP, one snippet.

Point Cursor or Claude Desktop at the local stdio server. Same engine as the CLI and this dashboard. Drop it in your MCP config.

{
  "mcpServers": {
    "mxu": {
      "command": "node",
      "args": [
        "packages/mcp/launch.mjs"
      ]
    }
  }
}

Not an inbox

Email is one optional resource kind later. mxu is not AgentMail, not Gmail, not another inbox AI.

Not a framework

No orchestrator, no planner, no agents-as-a-service. Just a lock an agent calls before it touches something scarce.

Not a crippled demo

The local lock is the product. Cloud is convenience. Sample holds are labeled sample. Nothing is connected.