A local-first fleet of specialized AI agents
Agents that run as long-lived local processes on the Mac you already own โ each with its own model, skills and permissions. What they learn is stored as plain YAML, matures over time, and reaches 16+ AI tools. Not static rules. Not someone else's datacenter.
brew tap mur-run/tap && brew install murAlso available via cargo install ยท macOS, Linux, Windows

The Problem MUR Solves
Without MUR
Day 1:
"Use Swift Testing instead of XCTest"
Day 3:
"Use Swift Testing instead of XCTest"
Day 7:
"Use Swift Testing instead of XCTest"
๐ Endless repetition. AI never learns.
With MUR
Day 1:
"Use Swift Testing instead of XCTest"
โ Skill saved automatically
Day 3:
"Write tests for this function"
โ AI already uses Swift Testing
Day 7:
"Add more test coverage"
โ AI knows all your conventions
โจ Zero repetition. Continuous learning.
Works with 16+ AI tools
One knowledge base, every AI assistant
How it works
Install & Setup
One command to install. mur init sets up your config. mur sync connects to your AI tools.
Use AI Normally
Work with Claude, Cursor, or any supported tool. MUR watches and learns in the background.
AI Gets Smarter
Your skills are injected automatically. Your AI remembers your preferences forever.
What makes MUR different
Rules sync tools write static config files. Memory frameworks store generic data. MUR is the only closed-loop system that learns, evolves, and syncs.
๐๏ธ Work That Outlives The Turn
A CI run, a fleet run, a subprocess โ MUR keeps checking until the source gives a real answer, across daemon restarts, and says something once when it matters. Being unable to read a source is reported as unknown, never as a failure: when MUR says your build failed, it failed. It can act on what it finds, and anything reaching outside MUR stops and asks first โ approvals wait as long as you need rather than timing out into acting alone. When the rules run out it can ask a model what to do, off by default and narrow when on: the model picks from three verbs or its answer is discarded, and it never decides what counts as risky.
๐งญ Code Navigation, One Repo Per Entry
mur code-nav setup gives an agent structural search with ast-grep and, on request, serena's definition, reference and hover lookup. Every binary lives under MUR's own tools directory and the sandbox is granted exec only there. Each repository gets its own serena entry with its own home, so two repos never race on one registry. MUR refuses an entry name that would share a tool prefix with another server, before it writes anything, so a call can't silently land on the wrong repository.
๐ง A Second Agent That Reviews The First
mur fleet review --main coder --reviewer critic "task" runs them round after round until the reviewer approves, blocks, or a limit trips. A finding rejected twice waits for your ruling: /rule drop closes it, /rule fix makes it binding on both agents. Finding IDs come from MUR, not the model, and you see every message before it is sent. A crash leaves the session paused; mur fleet review-resume picks it up after the last finished round, and the channel stays as the audit record.
๐ Research You Do Not Have To Sit Through
mur deep-research "question" puts a squad of workers on it under a budget you set, and saves a report. Reaching the web needs consent you gave once, in the setup wizard โ asking a question never grants it. From a chat it is /deep-research, rendered on your screen without spending the agent a turn; from an agent it returns a handle in under a second, so a twenty-minute run never sits inside a call waiting to time out.
โณ A Slow Model Is Not A Hung One
Nothing cuts a reply off by elapsed time. A local model that spends a minute loading weights before its first token finishes its answer. What is bounded is silence, not work โ and a stream that stops sending keeps whatever arrived and marks it [output truncated] instead of failing the turn, because a truncated reply that looks complete is worse than an error.
๐๏ธ One Reasoning Dial, Every Vendor
Every provider spells โthink harderโ differently. One takes a level name, one a token budget, one only an on/off switch, and one rejects the parameter outright. MUR keeps a single scale and a table of what each model really accepts, so low through max means the same thing everywhere. Ask for a level a model has no step for and it degrades to the nearest one it has โ and says so, rather than letting you believe a setting that never applied. Thinking hard needs room, so each registry entry can set its own output ceiling with max_tokensโ a truncated answer says so instead of stopping silently.
๐ฏ A Router That Knows Its Limits
MUR can run background work on a cheaper model. It will never hand that work to a model that can't do it. Price orders the candidates; it doesn't decide who is eligible โ a request carrying an image only goes to something that declares it can see. The two silences are read differently, because the failures are: a blind model answers confidently and wrongly, while a tool-incapable one is refused out loud and the chain just moves on. Your own picks are never second-guessed, cost-saving routing is off until you ask for it (mur model smart on), and per agent it is genuinely three-state โ follow, on, off. And you can audit every call it made: mur agent routing lists each decision and marks the ones MUR chose for you.
โธ๏ธ Approvals Wait For You
An unattended run that hits a step needing your say-so doesn't spend five minutes finding out you're asleep and then fail. The request parks, the step is blocked rather than broken, and everything that doesn't depend on it still finishes. Approve in the morning โ the next run continues from there, because approvals match the action's content hash, not a throwaway id. Change the action and the old approval stops covering it. Your explicit โnoโ outranks any standing policy, and every auto-approval is written to the signed channel. When you are watching, the same pinning stops the nagging: the tool calls in one model response arrive as a single card instead of a prompt each, and an answer you already gave is not asked twice. There is no approve-all โ the batch groups the question, never the answers. And if the kernel sandbox failed to seal, nothing is asked at all: an unsealed agent could forge its own approval, so tools that need one are refused on that boot โ even ones you approved before. Session auto-approve has a ceiling too: it answers reads and writes, never spend, destructive, privileged or network-egress calls โ and a browser tool that clicks, types or navigates in your logged-in session counts as egress, so it still asks. The Hub'sDon't ask again this session uses that same ceiling and remembers the answer only for the conversation you're in.
๐ Delegation Checks The Grant First
Hand work to a fleet and each member is told exactly which directory to work in โ the repo root of the target โ and checked for write access there before anything is sent. A missing grant is one approval that adds it, reseals the sandbox, and restarts the member, not an agent that finds out halfway through by building in the wrong tree. Ten jobs to one member ask once. A guessed directory is always confirmed, and nothing is dispatched until every member passes. Same check for mur fleet run, parallel_jobs, and a workflow's delegate_to steps.
๐ An Expired Token Doesn't End Your Session
OAuth tokens age out every few hours. Your turn used to die on a bare 401 that named neither the credential nor where it lived./loginfixes it in place, and stops at the cheapest step that works โ usually just asking the CLI that owns the credential to refresh it, with no browser and no interruption. MUR never holds your token: it reads the owner CLI's own status and the credential store's timestamp, never its contents.
๐คซ A Credential the Model Never Sees
Your agent needs a deploy token, so you paste it into the chat โ and it lands in the model's context, in the agent's signed append-only log, and at your provider. Secret redaction catches the shapes it knows and misses a bare hex token entirely. /secret reads it through a hidden prompt instead: the value goes to your OS keychain and into the agent's shell as $KEY, while the model is told the name and nothing more โ and every tool result comes back with the value stripped out.
๐ A Run Status That Can't Lie
Most tools answer โis it running?โ from whatever the run last wrote down โ so a crashed job reports healthy until a timeout expires. MUR asks both questions: what the run last recorded, and whether the process behind it is still there. A dead orchestrator says DEAD the moment you ask, a long run is never falsely failed, and a record rebuilt after a crash admits what it cannot know instead of printing a stale pid as fact. Failed steps carry their reason, so a red run tells you what broke instead of sending you to the logs โ and a step that failed with nothing to say says that too.
๐๏ธ Your Agent Can Actually See
Point an agent at a screenshot, a photo, a rendered chart โ read_file returns it as real vision input, and MCP servers that return images reach the model the same way. Ask any other agent runtime to read a JPEG and it decodes the bytes as text; the model, unable to say it never saw a picture, describes one anyway.
โฐ An Agent Asks For Time, It Doesnโt Take It
An agent can want a schedule and cannot create one. It writes a proposal โ your words next to the cron, so you review the request rather than the expression โ and nothing fires until you grant it with mur agent schedule accept. One-off reminders stop when they are done: cron has no year field, so โtomorrow at 10โ would otherwise repeat every year forever.
๐ท๏ธ Provider Churn Is One Line
Anthropic, OpenAI and Google rename and retire model ids constantly. Your agents never name a model โ they name a registry key, so a rename is one edit and every agent pointing at that key follows. No per-agent migration.mur model doctoraudits it offline and reports what drifted โ and never rewrites an id for you, because which model you run is a cost decision, not a detail to silently upgrade.
๐ One Key, Many Models
mur model connect anthropictakes your API key once, puts it in the Keychain, and lists that provider's models for you to pick โ pricing and context windows filled in. Local runtimes (Ollama, MLX, LM Studio) are found by probing, no key at all. Setting up a second machine is copying one file and runningmur model import: it carries secret references, never keys, and tells you exactly which ones still need re-keying there.
๐ Agents That Remember & Say So
State a preference once โ the agent saves it, announces it in one line, and applies it next turn. Proven knowledge federates to the whole fleet over Ed25519-signed snapshots, gated on maturity. Undo is one/forget away.
โฑ๏ธ Bounded, Not Budgeted
Three knobs bound every run โ deadline, stuck, cost_usd โ one schema at every scope, inner replacing outer, nothing multiplied. A turn you are watching never stops on its own; unattended work stops on its deadline or after ten minutes with no real progress, and a delegated member inherits the fleet's remaining clock. Local models cost nothing, so nothing pretends to cap their spend. mur limits <name> shows every bound in force and which scope set it; every stop reaches the settlement with its remedy. Long work returns a handle โ dispatch a fleet, keep working, poll mur_job_status โ and a member missing a tool the fleet declared it needs fails at dispatch, not after its budget. A run whose process died without a result reads abandoned on every surface once its grace window passes, instead of claiming to be running forever.
๐ Loops That Know When To Stop
A squad you feed with jobs ends when the queue drains โ checked before any model call, so a scheduled fleet that wakes to nothing costs nothing. Every other loop setting is checked too: a calendar date is not a deadline, zero iterations is not zero, and a cron expression that can never fire is not a schedule. mur fleet set-loopโ and you watch every run live: a per-member rail plus milestone lines streamed from the fleet's signed channel, right in the chat TUI. Know the plan already? A procedure: in fleet.yaml runs your exact step graph with no router in the loop โ and a typo in it fails the run instead of quietly broadcasting to everyone.
๐จ Agents That Can Check Their Own Work
An agent allowed to run cargo still couldn't compile: building means running binaries that don't exist yet, at paths no allowlist could name. Grant the build directory instead โmur agent perm allow-spawn-dir โ and it compiles, tests, and reports what actually passed. Narrow by construction: a home directory or a bare mount point is refused, and filesystem and network limits still bound whatever runs.
๐ Reads The AGENTS.md You Already Wrote
An agent picks up the project's ownAGENTS.md,AGENT.md orCLAUDE.md โ root first, so the deeper file is the more specific rule. It arrives as project context, not as operator rules, and it can't widen permissions: a file the agent couldn't read itself is left out. At most 32 KiB, and anything cut is named.
๐งญ Capability Routing
Your front-door agent holds no build keys โ and doesn't hand the job back to you. A sandbox-blocked command names the agents that can actually run it, ranked least-privileged first, derived from what the kernel enforces rather than a list anyone maintains. mur agent who
๐งพ Settlement
An agent that edits nine files and runs nothing will still tell you it's done. So the runtime closes each turn with its own accounting โ what was verified, what merely changed, what was blocked โ drawn from the tool record, not the model's summary. The verified row prints even when it's empty: nothing ran โ no evidence this works
โฉ๏ธ Turn Undo
Each writing turn runs in a throwaway git worktree, and the original bytes are saved before its changes land. Put the project back with one command. It lists any file changed since and asks before overwriting it. And a turn that ran no tools but reports a commit, a PR, or a test tally gets an unverified row on its settlement card. mur agent turn undo <agent> <turn>
๐ง Agent Memory
Agents remember your preferences mid-chat โ as local, decaying notes with /forget as the undo. Private per agent until you approve sharing; every proposal Ed25519-signed and verified. Rules that must never lose a ranking go in as permanent instructions (/instruct, /pin): sent every turn, never truncated, inside a fixed 3,500-token budget that refuses an overflow instead of dropping something silently.
๐ Closed-Loop Learning
Session recording โ skill extraction โ injection โ feedback โ evolution. The full loop, automated.
๐งฌ Knowledge With A Lifecycle
Skills mature Draft โ Emerging โ Stable โ Canonical on real usage, and decay when they stop earning their place. A skill can even self-evolve from its own telemetry. What works gets stronger; stale knowledge fades instead of piling up.
๐ Hybrid Semantic Search
Vector similarity (70%) + BM25 keywords (30%) + multi-factor scoring. More precise than pure vector search. In a chat, /search queries the project index without leaving the conversation โ a short preview per hit, then --lines N or --expand for a hit's full chunk.
๐ YAML + Git Friendly
Human-readable skills you can version control. No opaque database lock-in. Rebuild the index anytime with mur reindex.
๐ 100% Local First
All data stays on your machine. Zero telemetry. Injection scanning + content hashing for security. Cloud sync is optional.
โ๏ธ Workflow Engine
Multi-step workflows with variables and permissions โ extracted from sessions or defined manually.
๐ฅ Team sharing
Share knowledge across your team, and hand a whole agent to someone as a signed file.
๐ Model Gateway
One local endpoint for Anthropic, OpenAI & Gemini โ agents reuse the subscriptions you already pay for, credentials stay in your OS keychain.
๐ณ ChatGPT Subscription, No API Key
Sign in through Codex, pick the models on your plan, and agents run on your ChatGPT subscription โ never a metered key. Entries are provider: codex with no secret; the runtime only talks to the loopback gateway, and MUR never adds a usage-billed fallback behind a subscription model on its own.
๐ณ Claude Subscription, No API Key
Sign in through Claude Code and agents run on your Claude Pro/Max plan. Entries are provider: claude with no secret; the runtime only talks to the loopback gateway, and pointing one at api.anthropic.com is refused at startup rather than quietly billed.
โก One Command Setup
mur init configures everything. Works invisibly in the background after that.
๐ฅ๏ธ MUR Hub 2.0
One masterโdetail shell for every page โ agents, fleets, chats, the four library pages, settings โ with a โK palette, โโฉ to open any agent or fleet in its own window, a side-peek from Home, multi-select bulk Start / Stop, and a Permissions section that shows every sandbox entitlement and edits it in place. The Hub app stays fully local: your fleet, your Mac.
๐งฉ Model Library
Connect any provider โ cloud (Anthropic, OpenAI, OpenRouterโฆ) or local (Ollama, MLX, LM Studio). Models are auto-discovered, pricing auto-fills from models.dev, and keys stay in your Keychain.
๐๏ธ Per-Stage Model Routing
Pin any conversation stage to its own model โ a cheap one for extraction, a strong one for answers, a local runtime for anything that should never leave the machine. Unpinned stages follow your default. mur chat doctor shows the exact endpoint each stage will dial and probes it, so you can verify routing before any data exists.
๐งฐ Agents & Capabilities
Real local agent processes โ and mur capability install wires a whole bundle (MCP server + skills + program requirements) onto one in a single command. The media capability adds VLC control and local-model video analysis.
๐ Governed & Never-Shadow
Capabilities and imported plugins install with pinned provenance โ an add-on skill can never silently override a built-in. mur skill doctor flags drift and de-pins stale copies; a per-OS kernel sandbox and a protected launch chain โ the runtime binary, other agents' directories, the autostart entries โ keep every action governed, with an append-only audit ledger and mur agent runtime-doctor reporting what the chain blocks.
๐ Dev-Discipline Skills
Seventeen built-in engineering-discipline skills โ design-before-code, test-first, root-cause debugging, evidence-before-done โ internalized from superpowers & mattpocock. One hub routes; sixteen leaves load on demand via mur skill show, so they cost nothing until used and never shadow a skill you wrote.
Simple Pricing
Free forever for individuals. Paid plans for teams.
Free
๐ Includes 90-day Pro trial
Full Pro features free for 90 days
- โ Unlimited skills
- โ All 10+ tool integrations
- โ LLM-powered extraction
- โ Semantic search
- โ Local dashboard
Invite friends, get rewarded
Share your referral link and both of you benefit.
Get your referral link via mur referral or app.mur.run
Share the link with a friend
Friend signs up via GitHub, GitLab, Bitbucket, or Gitee
After 7+ days active, both of you get rewarded
Free & Trial users
Get +30 days of Pro trial per qualified referral. Up to 3 referrals (= +90 days).
Pro & Team users
Get +1 device slot per qualified referral. Up to 3 bonus slots.
โ ๏ธ A referral is "qualified" when your friend has been active for 7+ days.