Agent Toolkit

MCP servers, plugins, skills, and patterns I actually use with Claude Code

Tools

Title Description Categories
AgentMail Real email inboxes for agents, over an API and MCP server. I pair it with a PreToolUse hook that blocks any send to an address outside an allowlist. MCP Server
Anthropic Skills The official skills repo. skill-creator (write, eval, and tune your own skills) earns its keep; the docx/pdf/pptx/xlsx skills handle real office files properly. Skill
Claude in Chrome Drives your real Chrome — with your existing sign-ins — from Claude Code. The right tool for authenticated dashboards and anything without an API; the wrong tool for apps you control (expose those over MCP instead). MCP Server
Compound Engineering Every’s Claude Code plugin built around a plan → work → review → compound loop. The persona-based code review (correctness, security, maintainability, and more, each confidence-gated) is the part I use most. Plugin
GBrain Persistent memory for agents. A markdown repo is the source of truth, indexed into embedded Postgres + pgvector and exposed as MCP tools for hybrid search and page reads/writes. My agents read a handful of canonical pages at session start instead of guessing. MCP Server
Notion MCP Notion’s hosted MCP server. Useful as a durable, shareable place for agent output that people will come back to. MCP Server
Paper Writing Skill SNL-UCSB’s academic writing pipeline (brainstorm, draft, audit, compress), distilled from thousands of real manuscript edits and reviews. I run it with my own layer for venues and a citation-integrity check. Skill
map-mcp Mine. Lets an agent drive and perceive a live MapLibre GL map — pan, zoom, query features, read what’s on screen — with a matching CLI for humans. MCP Server, Built by me
pm-dogfood Part of pm-system. Acceptance-tests a shipped library the way a stranger would — clean-room install from the published package, follow only the docs, then file the gaps between docs and reality. Skill, Built by me
pm-system Mine. An autonomous product-manager funnel — discover OSS opportunities, kill-test each one on four independent axes, RICE-rerank the survivors, draft specs, and dogfood what ships. Stops at a human gate before anything is built. Plugin, Built by me
streamlit-mcp Mine. Serves any Streamlit app as an MCP server, so an agent operates the app’s widgets directly instead of clicking through a browser. MCP Server, Built by me
No matching items

Patterns

Most of what makes agents useful isn’t a tool. It’s habits around the tools. These came from things breaking.

Name every session, and keep a manifest

Launch each session with an explicit name and session ID (claude --name <name> --session-id <uuid>), and append a row to a plain TSV: timestamp, ID, name, working directory. A small wrapper script can then list what’s running, kill a session by name, or resume one that ended days ago, without digging through ~/.claude/projects for the right transcript.

Make sessions reachable from your phone

Start long-running sessions with --remote-control so you can check in and steer from anywhere. Two things silently break this:

  • The folder-trust dialog. A session waiting at “Do you trust this folder?” never registers for remote control. Pre-trust the directory before launching. If several launches can run at once, serialize writes to ~/.claude.json: two racing writes once wiped the trust settings for every project.
  • The large-session resume prompt. Resuming a big or old session asks whether to resume from a summary or in full, and that prompt blocks remote control. Run /compact headlessly first, then resume. The session is small enough that the prompt never appears.

Back up transcripts additively

Session transcripts can disappear. I lost three multi-day sessions in one afternoon. A scheduled job copies ~/.claude/projects and ~/.claude/file-history every 30 minutes, without mirroring or purging, so a file deleted from the live folder survives in the backup. Only an age-based retention rule ever deletes anything. To restore, copy the .jsonl back and run claude --resume <id>.

Enforce with hooks, not prompts

A sentence in a system prompt is advice; a PreToolUse hook is a guarantee. Anything that leaves the machine, like email, posts, or deploys, gets a hook that checks the tool call and exits with code 2 to block it. My email hook allows sends only to an allowlist and logs every reply. This is what makes running in bypassPermissions mode reasonable.

Give agents a memory, and let it consolidate overnight

A fresh session knows nothing about you. Keep canonical facts (who you are, current priorities, how you like to work) in a markdown knowledge base with git history. Have every session read a few core pages first, and write back what it learned at the end. A nightly job turns recent transcripts into plain-text digests and runs a consolidation pass, so lessons from today’s sessions are in the brain tomorrow. See GBrain.

Turn what agents make into apps on a private shelf

When a session produces something I’ll come back to, I ask for it as a small interactive app, not a chat reply that scrolls away. That covers a technical course for work, a brief from a discussion, a playbook, or a draft I’m writing. Each one gets its own auth-gated private URL and a card on a private hub page, grouped by topic. There are about forty so far.

The routine stays cheap because every app has the same shape:

  • No build step. Each app is static files: React through htm and ES modules from a CDN, a shared sign-in gate, and one file per chapter. An agent can write it, and I can read the diff.
  • Verify before shipping. Syntax-check every module as ESM (a CommonJS check passes things that break in the browser), then render every chapter in a headless browser. Behind a sign-in gate, one broken chapter just shows a blank page, and nobody files a bug about it.
  • Commit to deploy. The session registers the new app on the hub and commits; CI deploys it. Nothing gets copied around by hand.
  • Treat the gate as a door, not a vault. A client-side sign-in keeps casual visitors out, but the private URL is what actually keeps the apps hidden. Anything truly sensitive belongs somewhere with server-side auth.

Split scheduled routines so each fits its time limit

I dogfood each library I maintain nightly with cloud-scheduled Claude Code routines: a clean-room install from PyPI, using only the docs, filing a GitHub issue for each gap. One routine covering all six libraries kept timing out, because a scheduled run has a wall-clock limit. Six small routines, staggered across an hour, fit easily. Plan around the time limit, not the token budget.

Don’t let the author grade its own work

An agent reviewing its own draft is anchored to it. Use separate agents with separate prompts: one drafts, an independent one critiques; one proposes an idea, others each try to kill it on a single axis (already solved, too rare, infeasible, won’t be adopted). The ideas that survive are worth a human’s time. pm-system is built on this.

Launch interactive sessions in their own terminal

On Windows, starting claude through an inline powershell -Command re-parses the quoting. Long prompts get cut to their first word. Open a new terminal instead (wt.exe -d <folder> ...) and run the launcher script there.


Using something I should know about?

Tell me