Private plugin marketplace for Chartmetric's Claude Code skills. Access is controlled by this repo's visibility — anyone who can clone it can install from it.
The marketplace ships four plugins:
cm-skills— engineering skills (code, PRs, databases, reviews)cm-comms— team communication & reporting skills (Slack + Asana)cm-ai— AI-related skills (reading Casper agent sessions)cm-harness— thechartmetric-app-monorepophase harness, for Cowork (in Claude Code the repo serves these commands natively)
Install whichever you need.
claude plugin marketplace add chartmetric/claude-plugins
claude plugin install cm-skills@chartmetric-tools # engineering
claude plugin install cm-comms@chartmetric-tools # comms & reporting
claude plugin install cm-ai@chartmetric-tools # AI-related skills
claude plugin install cm-harness@chartmetric-tools # phase harness (Cowork)Or inside a Claude Code session: /plugin → browse chartmetric-tools → install cm-skills, cm-comms, and/or cm-ai.
# 1. Refresh the marketplace clone (pulls the newest main from chartmetric/claude-plugins)
claude plugin marketplace update chartmetric-tools
# 2. Update each plugin to whatever version main now declares
claude plugin update cm-skills@chartmetric-tools
claude plugin update cm-comms@chartmetric-tools
claude plugin update cm-ai@chartmetric-tools
claude plugin update cm-harness@chartmetric-tools
| Skill | What it does |
|---|---|
cm-task |
Run a single task (one branch, one PR) with harness discipline: interview → confirmed brief, red verifier before code, delegated TDD implementation, fresh-context review with a requirements matrix, gated auto-fix, iteration rounds for post-preview feedback, micro-retro lesson. Accepts an Asana URL, a Slack URL, or a PR URL (iteration) |
clickhouse-benchmark |
Benchmark/compare ClickHouse queries via system.query_log (P50/P90/P99, bytes read, memory) |
query-database |
READ-ONLY queries against RDS/ClickHouse/Elasticsearch/Snowflake via devin-secrets.env (local sessions only) |
ds-notebook |
Scaffold & harden standalone Chartmetric data-science Jupyter notebooks: ClickHouse-first (or Snowflake) queries with memory-safe patterns, freshness sentinels, schema verification, server-side eligibility scratch tables, parquet caching, sanity/validation diagnostics, and disabled write-back cells |
cm-pr-review |
Triage the PRs awaiting your review: discover direct review requests in chartmetric, draft a review per PR using each repo's own conventions, then post/approve/skip per PR on confirmation |
cm-takehome-review |
Score candidate take-home PRs against a rubric (runs each branch in a throwaway worktree to verify tests) and write local-only markdown scorecards + a comparison doc — never posts to GitHub |
multi-repo-pr |
One piece of work spanning several repos: one branch + one PR per repo, cross-linked |
ship-pr |
Finalize session PRs end-to-end: description, assignee = creator, Slack + Asana links (auto-created if missing), reviewer suggestion, PR Preview labels, poll until the preview deploys |
gh-stack |
Manage stacked branches & PRs with the gh stack CLI extension: build, navigate, rebase, sync, and merge a chain of dependent PRs, run non-interactively so it never hangs on a prompt |
rag-add-endpoint |
Add an API endpoint to the Flow AI / Melodi RAG "sitemap" knowledge base: gate on whether a live endpoint exists (else "build the API first"), then edit chartmetric-one's api-registry.ts (flow) or emit reviewable Postgres SQL (main) + a PR, with the activation timeline |
explain-code |
Explain code with an ASCII diagram, a step-by-step walkthrough, a gotcha, and a suggested improvement |
Invoked as /cm-skills:<skill>, e.g. /cm-skills:cm-pr-review.
| Skill | What it does |
|---|---|
slack-summary |
Summarize a Slack thread from its URL |
session-report |
Post a full-context work report (problem / fix / current state / links) to a Slack channel |
slack-to-asana |
File Asana task(s) on Unified CM Tasks from a Slack thread, link PRs, reply in-thread |
release-notes |
Generate (and optionally post) the "Chartmetric Production Release" #product-updates message from a deploy message / PR / release tag, resolving Asana tasks and combining FE+BE release waves |
de-monthly-update |
Compile the Data Engineering monthly all-hands update: sweep GitHub and Slack for what each engineer shipped, verify shipped-vs-in-flight, assemble themed sections with per-person attribution |
Invoked as /cm-comms:<skill>, e.g. /cm-comms:slack-summary.
| Skill | What it does |
|---|---|
reading-casper-sessions |
Read a Casper agent session — its transcript and trace — via the session read API (lean / full / nodes / export views) to inspect, analyze, or diagnose behavior |
replit-env |
Reach a repo's Replit workspace (cm-workspace or the kevin repl) over SSH to run commands there, sync its git checkout with GitHub, or unstick a Replit↔GitHub sync — with the ssh -n gotcha, host-rotation recovery, per-repl auth (bundle transport vs askpass shim), the kevin auto-commit watcher, and cm-workspace's prod side effects |
Invoked as /cm-ai:<skill>, e.g. /cm-ai:reading-casper-sessions.
| Skill | What it does |
|---|---|
feature-intake |
Turn a plain-language feature ask into an ADR-grounded entry in docs/PRD.md — written for PMs and designers, stops and asks when no architectural decision covers the surface rather than inventing one |
harness |
Advance the phase pipeline: precheck, status, phase proposals, triage of a stuck phase, and running a phase |
Unlike the other three plugins, these skills carry no instructions of their own. Each
is a thin loader that finds the target repo and reads .agents/commands/<name>.md from it
at runtime, so the repo stays the single source of truth and a command change needs no
release here. What lives in this plugin is only what the repo cannot know: how to locate
itself from each environment, and what that environment can actually do — see
plugins/cm-harness/skills/harness/references/environments.md.
This one is for Cowork. Claude Code already exposes both commands natively from the
monorepo's .claude/commands/; installing cm-harness there gives you two paths to the
same instructions, and the plugin's copy can fire on description match where the command
files set disable-model-invocation: true.
Plugins auto-update from this repo. To add or change a skill, edit plugins/<plugin>/skills/<name>/SKILL.md (pick cm-skills for engineering, cm-comms for comms/reporting, cm-ai for AI-related skills) and merge to main.
slack-summary,session-report,slack-to-asana,ship-pr,release-notesneed the claude.ai Slack (and Asana) connectors: claude.ai → Settings → Connectors (ship-prdegrades gracefully — GitHub-only steps still run without them)clickhouse-benchmarkneedsCLICKHOUSE_HOST/CLICKHOUSE_PORT/clickhouse_user/clickhouse_passwordin your shell envcm-pr-review,cm-takehome-review,release-notes,multi-repo-pr,ship-pr,rag-add-endpointneed theghCLI authenticated (gh auth status);cm-takehome-reviewalso needs the take-home repos cloned under~/code/chartmetric/rag-add-endpointneeds read-only DB access (local session +devin-secrets.env) for its feasibility checks, and chartmetric-one cloned for theflow-endpoint pathreading-casper-sessionsneeds a read-onlyCASPER_SESSION_READ_TOKENin your shell env (mint one at https://casper.chartmetric.com/settings) andcurl
main is protected — all changes go through a PR with one approval.
Add or change a skill:
- Branch off
main:git checkout -b feat/my-skill
- Pick the plugin your skill belongs in —
cm-skills(engineering) orcm-comms(team communication & reporting) — then createplugins/<plugin>/skills/<skill-name>/SKILL.md:That's it — skills are auto-discovered from each plugin's--- name: my-skill description: One or two sentences saying WHAT it does and WHEN to use it — this is what Claude reads to decide whether to invoke your skill. --- # My Skill Step-by-step instructions for Claude...
skills/directory, no registration needed. Supporting files (scripts etc.) go in the same folder; reference them as"${CLAUDE_PLUGIN_ROOT}/skills/<skill-name>/<file>". - Test it locally before opening the PR:
claude plugin marketplace add ~/code/chartmetric/claude-plugins # local path works claude plugin install <plugin>@chartmetric-tools # cm-skills or cm-comms # new claude session → /<plugin>:my-skill
- Bump
versionin that plugin's.claude-plugin/plugin.json. - Open a PR. After merge, everyone's plugin auto-updates from
main.
# 1. Refresh the marketplace clone (pulls the newest main from chartmetric/claude-plugins)
claude plugin marketplace update chartmetric-tools
# 2. Update each plugin to whatever version main now declares
claude plugin update cm-skills@chartmetric-tools
claude plugin update cm-comms@chartmetric-tools
claude plugin update cm-ai@chartmetric-tools
Ground rules for skills:
- Team-generic only: no hardcoded usernames or personal defaults — resolve the current user at runtime (e.g.
gh api user --jq .login) or ask. - Never embed secrets/tokens; read them from env vars and say which ones are needed.
- Write the
descriptionfrontmatter carefully — it's the trigger. Say what the skill does AND when to use it. - If the skill can post to Slack / create tasks / edit PRs, make it show a draft or confirm before the outward action.