Agent skills for your codebase
A skill is a folder with a SKILL.md in it: instructions your coding agent loads when a task matches, instead of you re-explaining the process every session. Claude Code, Cursor, and most current harnesses support the pattern. The interesting question is which skills earn a place in your repo, because every installed skill is context the agent may load, and context is a budget.
We build Modem and maintain the skills and tools below, so this is an index of our own stuff, stated plainly so you can judge what's useful.
The skill: write-discoverable-code
modem-dev/skills currently publishes one skill, write-discoverable-code. It's a set of rules for writing code that agents (and humans) can find through plain-text search, distilled from our measurements of how coding agents actually read your code: they navigate by grep, not by language server, so every exported name is a search query. The rules cover naming (no bare utils.ts), types as documentation the agent can't skip, keeping string literals whole so error messages stay greppable, and a pre-commit checklist.
When your agent should load it: whenever it writes or renames code. It's a standards skill, not a task skill, so it applies broadly and it's small.
Install it with the skills CLI, which symlinks a canonical copy into each agent's skills directory:
npx skills add modem-dev/skillsOr copy it in directly, per the repo README:
# Claude Code (project)
cp -R write-discoverable-code .claude/skills/
# Cursor (project)
cp -R write-discoverable-code .cursor/skills/One naming collision to flag: Modem the product also has skills, reusable instructions for the Modem agent your team shares in Slack. Same idea, different agent; those are covered in Introducing Agent Skills.
The tooling tier
Not skills, but installable tools we build that slot into the same agent workflow. Each one exists because we hit the gap running our own agents.
Hunk is a review-first terminal diff viewer for agent-authored changesets. When an agent hands you a 40-file diff, this is the reading surface. Extensions install from inside it: hunk-lens pins the selected row (hunk extension install modem-dev/hunk-lens) and hunk-hg adds Mercurial support.
curl -fsSL https://hunk.dev/install.sh | sh # or: brew install hunkslop-scan is a deterministic CLI that finds AI-associated slop patterns in JavaScript and TypeScript repos. Point it at a repo an agent has been working in and it reports the tells. Useful as a CI step behind agent-heavy branches.
npm install -g slop-scan && slop-scan scan .Sideshow gives a terminal agent a live visual surface: it publishes diagrams, UI sketches, and rendered diffs to your browser while it works, so the agent shows instead of describes.
npx sideshow serve --openglance-agent-plugins wires glance.sh, temporary image sharing, into coding agents. In Claude Code: /plugin marketplace add modem-dev/glance-agent-plugins, then /plugin install glance-claude@glance-agent-plugins.
Modem MCP and the Modem CLI are how an agent reaches your customer context: the merged topics, the people and accounts behind them, and the original quotes.
claude mcp add --transport http modem https://mcp.modem.dev/mcp # any MCP client works
npm install --global @modem-dev/cli # scripts and CI; binary is `modem`When to install which
The split is what the agent is missing. If it writes code nobody can find later, the skill. If its diffs outgrew your pager, Hunk. If its output smells generated, slop-scan. If you can't see what it means, Sideshow or glance. And if it answers customer questions from its training data instead of from what customers said, that's not a tooling gap, it's a context gap, and the MCP connection is the fix.
A repo note pulls its weight here too. One line in your CLAUDE.md ("customer feedback lives in Modem, query it over MCP before guessing") turns an installed capability into a habit the agent actually has.
