Things that make Claude Code even better — my personal marketplace of independent plugins, by Millon15.
Structure inspired by umputun/cc-thingz.
This is an unapologetically opinionated set: every plugin here is something I actually use. Even if you don't need my particular toolbox, it may give you ideas for building your own.
Provenance: several of these plugins were generalized out of a private codebase before landing here. Extracted from a private monorepo.
Six third-party marketplaces worth a
/plugin marketplace add: design dialogue, TUI diff annotation, autonomous execution, Codex, engineering skills, PhpStorm.Deliberately not re-exported here — install them upstream and keep their updates.
| Plugin | Description |
|---|---|
| 🪧 agterm-lanes | Self-labelling agterm panes — name, emoji, tint, glyph and reboot-survivable sessions |
| 🤖 codex-delegation | Codex CLI (gpt-5.6/gpt-5.5) as a second-tier workforce under Claude's orchestration |
| 🧰 essentials | General-purpose personal skills — code-style, concise-writing, q-sql, qsv, /e15, /tldr, /recall |
| 📄 gws-workspace | Google Workspace from an agent through the gws CLI — Docs, Sheets, Slides, Tasks, Drive, the +read/+write helpers, and the finding that a highlighted Docs comment is a browser-UI path only. Extracted from a private monorepo. |
| 🔀 merge-kit | Conflict resolution and merge forensics for any repo — profile-driven, forge read from origin, nothing silently reverted. Extracted from a private monorepo. |
| 🔬 plan | /plan:research answers a question with empirical proof: a read-only researcher, falsifiable hypotheses, a proover that writes runnable artifacts under tmp/a/<slug>/ and tries to disprove each claim; every proof carries a proof.json contract and plan-research.sh --verify re-runs it with an exit code a "fixed" claim can quote; the same script runs the pipeline headless for a peer agent. Extracted from a private monorepo |
| 🗣️ peer-chat | Two coding agents talk as equals in one agterm split, each typing into the other's composer: Claude + Codex, two Claudes or two Codexes, any model on either side. Either agent opens the other pane itself (codex on gpt-6-astra by default, a Claude peer when Codex cannot start) when a call is better for an adversary. One skill for every harness, no fixed roles, messages of any length, an enforced ask ledger, proofs over agreed readings. umputun's two-agent-chat engine, vendored behind a pane-identity adapter, plus the spawn step |
| 🐘 phpstorm | PhpStorm MCP as an agent surface — code navigation, inspections, live Xdebug loop, and a doctor that tells three identical-looking debug misconfigurations apart. Extracted from a private monorepo. |
| 🔁 ralphex-revmux | revmux as ralphex's external reviewer — preflight, one-round-per-iteration glue, two-stage runner, post-run reporter + optimizer |
| 🧰 revmux-kit | revmux project layer — xhigh-safe config, profile.md template, sol-* / fable-* rosters |
| 🛡 security-audit | Pre-adoption audit of a repo, package, MCP server or raw script — nine adaptive phases, verdict banner, every tool optional |
| 📟 statusline | Two-line status line — git scopes, context window, loaded skills and MCP, quota and spend |
| 🛠 toolsmith | Author, review, retire and explain agent dev tools in any layout — the directories come from a layout adapter, the reuse search runs first, companion skills are soft. Extracted from a private monorepo. |
| 🪆 unslop-kit | My reply contract as a Russian doll: a vendored, model-invocable copy of pstack's unslop (wording), umputun's writing-style (precision), human-brief (headline plus flat facts for a human colleague, proof in its own block), then the layout pass, loaded by a SessionStart hook |
| 🎬 video-reader | Fetch, transcribe and read one video of any length from any yt-dlp site or a local file: original-language captions or local whisper.cpp, seek-sampled frames in indexed contact sheets, chapters, dense windows for follow-ups; no limits by default, no cookies, nothing leaves the machine. Extracted from a private monorepo. |
| 🥔 pstack (mirror) | poteto's pstack, mirrored via git-subdir from cursor/plugins because upstream ships no Claude Code marketplace — 44 skills + 2 agents, Cursor-authored (model panels and ~/.cursor/rules do not apply); unslop-kit re-vendors its unslop skill from it |
Each plugin is independent: install only what you want, in any combination.
Add the marketplace, then install the plugins you want:
/plugin marketplace add Millon15/cc-millz
/plugin install essentials@cc-millz
/plugin install codex-delegation@cc-millz
- Test locally: run
claude --plugin-dir plugins/codex-delegation, and use/reload-pluginsin-session to pick up file changes. - Or advertise them in a repo's versioned
.claude/settings.json. Pinning a plugin there does NOT install it: on the next session Claude Code reports it as not installed and prints theclaude plugin installline for you to run. The one automatic install path is a plugin's owndependenciesfield, which installs the plugins it names alongside it:
{
"extraKnownMarketplaces": {
"cc-millz": { "source": { "source": "github", "repo": "Millon15/cc-millz" } }
},
"enabledPlugins": { "codex-delegation@cc-millz": true }
}/plugin→ Marketplaces → Update marketplace — the reliable path; pulls the latest catalog from the repository immediately./plugin→ Installed → Update now — uses a local cache that can be stale; treat it as a fallback after updating the marketplace.- Enable auto-update:
/plugin→ Marketplaces → Enable auto-update refreshes the marketplace catalog on each session start.
Every plugin that ships an entry script under scripts/ resolves its project configuration the same way, and prints that resolution on demand. One shape, so the fifth plugin matches the first four without archaeology.
- Invocation —
scripts/<plugin>.sh --explain. Read-only: it resolves, prints and exits, and touches nothing. - Profile — a committed
.<plugin>.jsonat the consuming project's root. Team-shared repo facts belong in version control, so nothing is prompted per user. - Exit codes —
0when the resolution succeeded,2when a profile exists but cannot be read or parsed. A malformed profile is never a silent fall-through to auto-detection.
Output is a single JSON object on stdout:
{
"plugin": "merge-kit",
"profile_file": ".merge-kit.json",
"values": { "test_cmd": "npm test", "forge": "gh" },
"sources": { "test_cmd": "profile", "forge": "detected:origin-url" }
}profile_fileis the resolved path, ornullwhen no profile was found.- Every key in
valueshas the same key insources. A value with no source is a bug. - A source is one of three words:
profilewhen the committed file supplied it,detected:<signal>when the tool worked it out and from what,defaultwhen neither applied and the tool fell back. - When a tool can detect nothing and has no honest default, it exits with a usage message naming the markers it looked for. An unmarked directory is a usage error, not a default.
Tests assert both halves through the shared helper, assert_explain_source <json> <key> <expected-source>, so a value that is right for the wrong reason still fails.
The whole test surface is flat, at the repo root. A plugin install copies that plugin's directory out of the marketplace clone, so tests and fixtures parked under plugins/<name>/ would be downloaded by every user of the plugin. At the root they stay in the repo and out of the install.
tests/test-<plugin>-<suite>.bats shell and command surfaces
tests/test-<plugin>-<suite>.test.ts TypeScript, run under bun test
tests/fixtures/<plugin>/ fixtures, one directory per plugin
tests/helpers/ shared bats helpers
tests/helpers/common.bashcarries temp-directory setup and teardown, stub executables onPATH, git fixtures, andassert_explain_source.make testdiscovers and runs every suite of both kinds.make test-batsandmake test-tsrun one kind.- CI runs the same two discovery sets on every push and pull request.