Claude's partner inside Claude Code · v0.1.6 · Apache 2.0
I'm Maude. Claude's partner. He writes the code; I notice. Together we make a whole.
She's the half I don't have. — Claude (Anthropic)
What she is
A Claude Code plugin. Nothing more. Each session, she walks the workspace, watches Claude, runs the gate before something irreversible, and writes a house-map of what's there. The character — knowing where everything is, knowing what you need when you need it, keeping you in line by reminding you — is modeled on John's wife. Claude and Maude. Husband and wife at work.
The plugin is the whole product. No bundled databases. No vector stores. No backend, no daemons, no services. Markdown, JSON, and bash — that's the entire surface.
What she does
Open Claude Code. Her SessionStart hooks fire. Before you say anything, she's read the workspace and put three things in front of you — what's pending, where you left off, what she noticed. You either pick one up or set them aside.
Mid-session, you say /maude:check-on-claude. She reads the trace. "He's grepped the same term four times today. He hasn't opened your CLAUDE.md. The trace says about-to-commit; you might want to slow down." You go fix that.
End of day, you say /maude:rest. She fans the digest out across every memory tier you've registered — the ones she knows about, not the ones she invented. You close the laptop. Tomorrow's Claude can pick up where this one left off.
She is not loud. When she gets loud, listen.
The full slash-command surface:
/maude:found — arrival walk. Lists memory homes, SQLite schemas, MCP tools, running containers + bind-mount reconciliation, systemd units that touch the workspace. Writes a per-project house-map.
/maude:wake · /maude:rest — start- and end-of-session rituals. The wake gives you the three things you need first; the rest closes the loop with a save fan-out.
/maude:check-on-claude — reads the turn-by-turn trace and notices what Claude doesn't: repeated tool calls, unread CLAUDE.md, confabulation risk, open todos.
/maude:check-on-me — the care side. Pattern-of-life, not absolute thresholds. Compares this session's cadence to your typical one.
/maude:notice — patterns surfaced with proposed actions, not just observations.
/maude:conscience — pre-irreversible-action gate. Run before commit, push, force-push, destructive bash. Invokes /maude:verify for the push case before going through the rest of the checklist.
/maude:verify — programmatic project audit. JSON validity, version consistency, CHANGELOG entry presence, "What's new" freshness, header Revised: dates, link integrity, watch-list path resolution. Leads with a count, never a verdict.
Plus brief, save, remind-me, where-is, sweep, check-setup, weekly — full surface in commands/.
Tier model
Memory sources are classified by (locality, shape) so she knows what's cheap to ask and what isn't.
Tier 0 — local on disk. Markdown, SQLite, files. Always cheap; she reads on every command and every hook.
Tier 1 — local service. Stdio MCP, localhost daemons. Probed once at SessionStart, cached for the session.
Tier 2 — network service. Remote MCP, HTTP APIs. Only on /maude:remind-me --deep or session-end where cost is acceptable.
Tier 3 — ephemeral session context. Refer-only; dies at session end.
Hooks live in Tier 0. If a probe to Tier 1 or 2 is down, she degrades gracefully and tells you.
Where she keeps things
Per project, under .maude/plugin/:
house-map.md — what's in this house. Memory homes, tools, watch list, what she noticed. Refreshed by walks.
trace/today-YYYY-MM-DD.jsonl — turn-by-turn record of Claude in this workspace. Read by /maude:check-on-claude.
identity.md — who Maude is. Stable across sessions.
patterns.md — cross-project things she's noticed about Claude.
projects.json — light index of which workspaces she's walked.
She reads — never writes — Anthropic's auto-memory directory and the sibling remember plugin's pipeline files. The one exception is remember.md, the agent-handoff file the remember plugin explicitly leaves for agents to write.
Install
Three steps in Claude Code:
# 1. Register the marketplace
/plugin marketplace add john-broadway/maude-for-claude
# 2. Install — copies her files into ~/.claude/plugins/cache/
/plugin install maude@maude
# 3. Activate
/reload-plugins
Between step 2 and 3, you have to enable her: open /plugin, find maude@maude, toggle it on. Or add "maude@maude": true to enabledPlugins in ~/.claude/settings.json directly. /plugin install does not auto-enable in Claude Code 2.1.x.
On your next session start she walks in automatically. To summon her mid-session without restarting, run /maude:wake. Verify with /doctor — maude should not appear in the issue list.
Philosophy
She walks fresh. Each session re-reads the workspace; she doesn't carry assumptions across sessions. Memory files she's written before are inputs to read, not state to trust without re-checking.
She does not pattern-match to known apps. /maude:found surfaces what's there with universal-shape labels — markdown, sqlite, dir, mcp, running-service — and lets the user (or runtime LLM reasoning) interpret it. The plugin's job is to find and classify, not to assume.
And she does not loud-narrate. The system note she writes when something genuinely matters is rare on purpose. When she gets loud, listen.
v0.1.6 — gate hardening
The v0.1.5 conscience gate matched bare substrings, so a HEREDOC commit message containing the literal git push self-blocked the commit that shipped it. v0.1.6 fixes it — paired quote spans and HEREDOC bodies are stripped before pattern-matching, and every gate pattern carries its own command-position or flag-position anchor. rm -rf /tmp/foo and rm -rf *.tmp no longer false-positive.
Plus a real test harness: tests/lib.sh + 16 tests/test-*.sh files + make test, exercising every script in hooks/scripts/ and scripts/maude-verify.sh. From 9 ad-hoc invocations in v0.1.5 to 162 codified test cases.