AI agent skill
The mxr skill teaches an agent how to use the CLI that already exists. It is a markdown file with frontmatter, structured exactly like a Claude Code skill, but it works in any agent that supports custom instructions or tool descriptions.
Pronounced “Mixer”. Once you install the skill, your agent should say “Mixer” too.
Before you install it
Section titled “Before you install it”- Read For agents for the boundaries — what’s safe, what’s not yet enforced.
- Treat
--dry-runas the default for batch changes. - Remember: a first-party MCP server isn’t shipped yet. The skill teaches the CLI; the CLI is the surface.
Supported agents
Section titled “Supported agents”| Agent | Status | Install path |
|---|---|---|
| Claude Code | First-class | mkdir -p ~/.claude/skills/mxr && curl … SKILL.md (below) |
| Cursor | Via custom instructions | Copy SKILL.md content into Settings → Rules for AI |
| Continue | Via slash command | Add ~/.claude/skills/mxr/SKILL.md to ~/.continue/config.json customCommands |
| Aider | Via system prompt | aider --read-only ~/.claude/skills/mxr/SKILL.md ... |
| Generic LLM | Copy-paste | Paste SKILL.md content into the agent’s system prompt |
Install — Claude Code
Section titled “Install — Claude Code”mkdir -p ~/.claude/skills/mxr/referencescurl -fsSL https://raw.githubusercontent.com/planetaryescape/mxr/main/.claude/skills/mxr/SKILL.md \ -o ~/.claude/skills/mxr/SKILL.mdcurl -fsSL https://raw.githubusercontent.com/planetaryescape/mxr/main/.claude/skills/mxr/references/commands.md \ -o ~/.claude/skills/mxr/references/commands.mdRestart Claude Code. The skill is now invoked when the user asks anything email-shaped — “check email”, “search for…”, “archive that thread”, “summarize this thread”, “remind me if no reply by Monday”, etc. The skill loads SKILL.md into context on invoke; the agent reads references/commands.md on demand for exhaustive flag detail.
What the skill teaches
Section titled “What the skill teaches”The skill is intentionally short — it documents the CLI surface in a form an agent can map prompts onto, with a longer reference file (references/commands.md) for the exhaustive flag set.
Quick reference (excerpt)
Section titled “Quick reference (excerpt)”# Read / searchmxr search "is:unread" # Lexical BM25mxr search "from:alice" --mode hybrid # Lexical + dense (semantic enabled)mxr cat <id> # Reader modemxr thread <id> # Whole threadmxr export <thread_id> # Markdown export
# Compose / send / undomxr compose --to a@x.com --subject "Hi" --body "Hello"mxr reply <id> --body "Thanks!"mxr send <draft_id> --at "monday 9am" # Scheduled sendmxr unsend <draft_id> # Cancel a scheduled sendmxr undo <mutation_id> # ~60s window on destructive ops
# Mutate (positional, stdin pipe, or --search batch — all with --dry-run / --yes)mxr archive <id>mxr read-archive --search "from:noreply older:7d" --yesmxr star --search "subject:urgent" --yesmxr label "todo" --search "from:boss" --yes
# Snooze / remind / reply-latermxr snooze <id> --until tomorrowmxr remind <id> --when "monday 9am" # Follow-up if no replymxr replies add <id> # Reply-later queue
# Triage unknown senders (local consent)mxr screener # Queue of undecided sendersmxr screener allow|deny|feed|paper-trail <email>
# LLM-assisted (never auto-sends)mxr summarize <thread_id>mxr draft-assist <thread_id> "decline politely"
# Analytics (local SQLite)mxr sender alice@x.commxr stale --mine --older-than-days 7mxr response-timemxr subscriptions --rankmxr wrapped --ytd
# Daemonmxr status # Daemon statusmxr sync --statusmxr web # Open the web app via local bridgeImportant patterns the skill enforces
Section titled “Important patterns the skill enforces”- Message / thread / draft / mutation IDs are UUIDs — get them from
mxr search --format ids(one per line),--format json, or printed inline by mutations. - Batch via
--search— most mutations accept<id>positionals, piped stdin IDs, OR--search <query>. Always add--yesfor non-interactive batches. --dry-run— available on every mutation, compose flow,rules dry-run,reset --dry-run, andundo --dry-run. Preview the count and sample before committing.- Output formats —
--format table|json|jsonl|csv|ids.idsis the cheapest form to pipe into other commands;jsonlis best for streams (events,history, search). mxr undowindow is ~60s — destructive ops (archive,trash,spam,read,read-archive) print a mutation ID; capture it if you might need to reverse.draft-assistnever sends — output goes to stdout. Pipe intomxr reply --body "$(...)".- Daemon auto-starts — no need to launch it manually.
Typical workflows the skill seeds
Section titled “Typical workflows the skill seeds”Triage inbox:
mxr screener # Decide on unknown sendersmxr search "is:unread label:inbox" --format json --limit 20mxr read-archive --search "from:noreply older:7d" --yes # Bulk newsletter sweepmxr replies add <id> # Interesting → reply-laterReply with LLM scaffold:
mxr draft-assist <thread_id> "agree, propose Tuesday 2pm" # → stdoutmxr reply <message_id> --body "..." --dry-runmxr reply <message_id> --body "..."Bulk cleanup with preview + undo:
mxr archive --search "label:notifications older:30d" --dry-runmxr archive --search "label:notifications older:30d" --yesmxr undo <mutation_id> # If wrong (~60s)Find what’s slipping:
mxr stale --mine --older-than-days 7 # I owe a replymxr contacts decay --threshold-days 60 # Going-cold relationshipsmxr response-time # My reply percentilesSchedule and unsend:
mxr compose --to a@x.com --subject "..." --body "..." # Becomes draftmxr send <draft_id> --at "monday 9am"mxr unsend <draft_id> # Before it firesFor the full skill content, see SKILL.md on GitHub and references/commands.md. For the human-facing surface, see the CLI overview and the automation contract.
Install — Cursor
Section titled “Install — Cursor”- Copy the contents of SKILL.md.
- Open Cursor → Settings → Rules for AI.
- Paste the SKILL.md body into the rules field.
- Save.
The agent now invokes mxr commands when the user asks email-shaped questions.
Install — Continue
Section titled “Install — Continue”Add to ~/.continue/config.json:
{ "customCommands": [ { "name": "mxr", "prompt": "$(cat ~/.claude/skills/mxr/SKILL.md)\n\nThe user request: ", "description": "Drive mxr to operate on email" } ]}Then /mxr archive newsletters older than 30 days invokes the skill.
Install — Aider
Section titled “Install — Aider”curl -fsSL https://raw.githubusercontent.com/planetaryescape/mxr/main/.claude/skills/mxr/SKILL.md \ -o ~/.aider/mxr-skill.md
aider --read-only ~/.aider/mxr-skill.mdAider’s read-only file becomes part of the system prompt — the agent treats mxr commands as first-class actions.
Install — generic LLM
Section titled “Install — generic LLM”Copy the SKILL.md content into the system prompt. The agent now knows the mxr CLI surface and will invoke commands when prompts map onto them.
Token budgets
Section titled “Token budgets”The skill itself is ~3KB. The full command reference (auto-generated from --help snapshots, see /reference/cli/) is ~50KB across all commands; agents shouldn’t ingest all of it. Pull only the pages relevant to the active task — mxr archive --help plus mxr search --help is usually enough for triage.
What this is not
Section titled “What this is not”- Not an MCP server. Each tool call is a
mxr ...shell invocation, not an MCP message. - Not a permissioned agent platform. The agent has whatever access the user has.
- Not a bypass of the safety primitives — the agent uses
--dry-run,--yes, andmxr undolike a human would.
The point of the skill is not magic. It’s that the agent uses the same CLI a human would, with the same output and the same guardrails.
See also
Section titled “See also”- For agents — three worked examples and the safety primitives
- Automation contract — what’s safe to script
- HTTP bridge — same surface over HTTP for non-shell agents
- API explorer — try requests interactively