A plugin marketplace by Jon Haddad.
/plugin marketplace add rustyrazorblade/skills
Then install whichever plugins you want:
/plugin install cassandra-expert@rustyrazorblade-plugins
/plugin install easy-db-lab@rustyrazorblade-plugins
/plugin install spec-flow@rustyrazorblade-plugins
/plugin install dev-skills@rustyrazorblade-plugins
codex plugin marketplace add rustyrazorblade/skills
Codex exposes skills through $ mentions instead of slash commands. cassandra-expert and
easy-db-lab ship Codex manifests; spec-flow is Claude Code only (it depends on Claude Code
agents and the Workflow runtime). dev-skills is Claude Code only too for now.
Expert guidance for Apache Cassandra development and operations.
Claude Code:
/plugin install cassandra-expert@rustyrazorblade-plugins
Codex CLI:
Install cassandra-expert from the plugins section:
/plugins
| Skill | Purpose |
|---|---|
/cassandra-expert:diagnose |
Systematic troubleshooting using USE method, outlier analysis, double loop learning |
/cassandra-expert:optimize |
Performance tuning, configuration analysis, JVM settings, compaction strategies |
/cassandra-expert:data-model |
Schema design, partition keys, time-series modeling, query patterns |
/cassandra-expert:token-skew |
Token ownership skew analysis using correct per-rack metric |
/cassandra-expert:training |
Interactive, session-based Cassandra training from fundamentals to advanced topics |
The plugin also ships a cassandra-expert agent for open-ended questions that don't fit a specific
skill — CQL review, replication, repair, cluster operations, troubleshooting. It reads the bundled
references rather than its training data, and it will establish your exact Cassandra version
before giving any guidance, because the right answer differs across 4.0, 5.0, and 6.0 (incremental
repair on 3.x and UCS on 4.x are the kind of version-blind advice it exists to prevent).
Diagnose - Troubleshooting Issues
/cassandra-expert:diagnose Read latencies spiking on some nodes but not others
/cassandra-expert:diagnose Compaction can't keep up with writes
Optimize - Performance Tuning
/cassandra-expert:optimize Review my cassandra.yaml settings
/cassandra-expert:optimize What compaction strategy should I use?
Data Model - Schema Design
/cassandra-expert:data-model Design schema for user activity tracking
/cassandra-expert:data-model How should I model time-series data with 90-day retention?
Token Skew - Ownership Analysis
/cassandra-expert:token-skew Analyze this nodetool ring output for data imbalance
/cassandra-expert:token-skew nodetool status shows uneven Owns percentages — is this real?
Training - Interactive Learning
/cassandra-expert:training
/cassandra-expert:training Session 2: Query & Application Anti-Patterns
/cassandra-expert:training LWT # general topic — matches across sessions
/cassandra-expert:training compaction # multiple matches: the trainer offers options
For a general topic like LWT or compaction, the trainer lists every session/topic that matches and lets you pick one or say all to go through every match.
- Double Loop Learning - Goes beyond immediate fixes to identify root causes and prevent recurrence
- USE Method - Systematically analyzes Utilization, Saturation, and Errors for CPU, memory, disk, network, storage, and thread pools
- Outlier Analysis - Compares nodes to identify anomalies in latency, resource usage, and behavior
- Configuration Analysis - Reviews system settings, cassandra.yaml, JVM settings, and per-table configurations
Interactive, instructor-led Cassandra training with pulse checks after each topic:
| Session | Topics |
|---|---|
| Session 1: Fundamentals | Data distribution, keyspaces, types, primary keys, partition storage, collections, UDTs, DML, read/write paths, tombstones, TTL, table options, table patterns (single-key, ordered-map, time-series), batches, LWT, compaction overview, denormalization, prepared statements, consistency levels |
| Session 2: Query & Application Anti-Patterns | IN() queries, ALLOW FILTERING, token range queries, BATCH misuse, lightweight transactions, counters, in-memory joins, synchronous queries, excessive async, in-memory sorting, aggregations, triggers |
| Session 3: Schema Anti-Patterns | Huge partitions, hot partitions, too many tables, too many columns, materialized views, unbounded collections, lists, secondary indexes, compaction strategy, large blobs |
| Session 4: SAI | What SAI is and the partition key rule, creating and managing indexes, querying patterns, SAI vs. denormalization, SASI migration |
Claims the training makes about what Cassandra actually accepts or rejects are backed by executable
verification scripts in plugins/cassandra-expert/skills/training/scripts/, which run against a live
cluster and exit non-zero if any claim no longer holds.
Opinionated guidance based on real-world experience:
- num_tokens: Use 1 or max 4. Higher is always worse.
- Compaction: UCS on Cassandra 5.0+ — there is no case where STCS is the right choice once UCS exists.
- Read-ahead: Disable it. One of the worst settings you can have enabled.
- Partitions: Keep under 10MB. No downside to smaller partitions.
- Row cache: Keep disabled. Rarely beneficial.
Provision and operate AWS lab environments with Cassandra, ClickHouse, Spark, OpenSearch, and installable kits.
Claude Code:
/plugin install easy-db-lab@rustyrazorblade-plugins
Codex CLI:
Install easy-db-lab from the plugins section:
/plugins
| Skill | Purpose |
|---|---|
/easy-db-lab:explore |
Start here — interactive guided session that provisions an environment if needed, then helps you run tests and explore the cluster |
/easy-db-lab:plan |
Interactively design a lab workflow and write it to a plan.md |
/easy-db-lab:run |
Execute a plan step by step in a cluster workspace, confirming each step and journaling as it goes |
/easy-db-lab:create-kit |
Author a new kit (kit.yaml, K8s manifests, metrics, dashboards, docs) for any database or workload |
An easy-db-lab operator agent handles live-cluster work that isn't a scripted plan — provisioning,
configuring, benchmarking, and tearing down clusters via the easy-db-lab binary. Note that Grafana
and the rest of the observability stack are only reachable over Tailscale, so the operator always
hands you private IPs; public IPs will not work.
/easy-db-lab:plan benchmark Cassandra 5.0 vs 4.1
/easy-db-lab:plan tune UCS --previous tests/clusters/20240530-143022
/easy-db-lab:run tests/clusters/20240530-143022
/easy-db-lab:run plan.md tests/clusters/20240530-143022 --binary ./bin/easy-db-lab
/easy-db-lab:create-kit valkey
explore takes a free-form topic, or nothing at all:
/easy-db-lab:explore
/easy-db-lab:explore cassandra 5.0
/easy-db-lab:explore clickhouse analytics
- Skills run from a lab workspace directory;
explorewill walk you througheasy-db-lab init --upif none exists - Each DC in a multi-DC setup gets its own subdirectory and binary wrapper (
<cluster-dir>/dc1/easy-db-lab) with independent state planwrites toplan.mdin the current directory unless--outputsays otherwise;runreads the plan from<cluster-dir>/docs/plan.md- Every command and observation is journaled to
<cluster-dir>/docs/journal.mdas it happens, and friction is logged todocs/issues.md— this is what letsrunresume a plan andplan --previouslearn from a past run
A session-driven, multi-agent delivery pipeline over OpenSpec + GitHub. You own the two seams a human should own — defining/prioritizing the work, and final review + merge — and the middle (spec → implement → review → fix → build → docs → PR) runs as agents you invoke turn-by-turn.
Claude Code only:
/plugin install spec-flow@rustyrazorblade-plugins
groom ─▶ activate ─▶ [SEAM 1: you approve the spec] ─▶ implement ─▶ [SEAM 2: you review + squash-merge] ─▶ finalize
│ │ │
refine design 5-lens review panel
(product) (architect)
Seam 1 — activate stops after committing the OpenSpec change. Nothing is implemented until
you approve, and this is where every significant design decision gets made: the architect agent
lays out options and trade-offs, and you decide.
Seam 2 — the pipeline only ever pushes the issue branch and opens a PR. It never merges and
never pushes to main. You review in GitHub, optionally loop through address, and squash-merge
yourself.
| Skill | Purpose |
|---|---|
/spec-flow:groom |
Rough idea → scoped, labeled GitHub issue (scope, testable acceptance criteria, one P0–P3), refined over as many product-manager rounds as it takes |
/spec-flow:activate <N> |
Worktree + branch → OpenSpec explore+propose → commit spec → stop for your approval (Seam 1) |
/spec-flow:implement <N> |
After approval: open a draft PR early (keeps CI warm), run the background team (tdd-developer → 5-lens review panel → fix loop → build-engineer → docs) pushing at checkpoints, then mark the PR ready |
/spec-flow:address <N> |
Pull your PR review comments → fix in the worktree → push → reply per thread |
/spec-flow:sync-ci <N> |
When CI goes red: pull the failing tests into the branch's local flagged set so the fast local loop guards them until merge |
/spec-flow:board |
One view of every in-flight issue: stage, priority, PR/CI state, what's next, what's blocked on you |
/spec-flow:finalize <N> |
After you squash-merge: sync + archive the OpenSpec change, remove the worktree, close the issue |
/spec-flow:adopt-tiering |
One-time per repo, only where the repo's own policy chooses that split: separate an existing suite into a fast unit tier and a slow integration tier, then open a PR |
If the standalone dev-skills plugin is also installed, set
SPEC_FLOW_SEAM_VIEW=explain (via /spec-flow:setup) to have activate/implement render both
owner seams as an interactive HTML view instead of plain text — see Seam visualization in
docs/workflow.md.
The project-manager is the agent you talk to directly — it runs the board, tracks work in flight,
decides what's next, and delegates each stage to the skills and specialists. It coordinates; it
never implements and never crosses your two seams.
| Agent | Role |
|---|---|
project-manager |
Orchestrator. Runs the board, decides what's next, delegates every unit of work |
product-manager |
Refines a rough idea into scope + testable acceptance criteria (consulted once per refinement round during groom) |
architect |
Turns the refined idea into a design, with trade-offs framed as owner decisions (consulted during activate) |
tdd-developer |
The implementer. Test-first (red→green→refactor), SOLID |
build-engineer |
Gets the build clean (format/lint/build), adapting to the project's tooling |
Three more agents — reviewer, test-rigor-reviewer, and observability-reviewer — make up three
of the five review lenses below.
tdd-developer picks up the bundled style guide matching the project's language (Rust and Kotlin
ship today, in plugins/spec-flow/references/) and holds itself to it. tdd-developer and
build-engineer are deliberately general-purpose bases: grow them in place with per-language and
per-framework practice, and every repo using the plugin inherits the improvement.
During implement, review is not one reviewer. Five lenses run in parallel each round, their
findings merge into one set, a fix round addresses every blocker/major from any lens, and approval
requires every lens to approve with no must-fix findings.
| Lens | Asks |
|---|---|
reviewer |
Does the implementation match the spec and the repo's own documented rules? Every #### Scenario: must have a backing test |
/code-review |
Correctness bugs: logic, boundaries, error paths, concurrency, resource leaks |
/security-review |
Input validation, auth, injection, secret exposure (self-gates when the diff touches no security surface) |
test-rigor-reviewer |
Are there antagonistic, regression-exposing tests over the public surface and its observable side effects? |
observability-reviewer |
Are the new code paths and failure modes diagnosable in prod? No silent failures, no secrets in telemetry |
To add or remove a lens, edit the reviewLenses array in skills/implement/implement.workflow.js —
the merge/approval loop generalizes over N lenses.
The consuming repo must provide the two backbones, and state its own test/CI policy:
- OpenSpec — the
openspecCLI installed and initialized in the repo - GitHub —
ghauthenticated, repo hosted on GitHub jq— onPATH.groombuilds its create-issue payload with it, and three of the plugin's scripts parseghoutput with it. There is no fallback if it's missing.spec-flow/TESTING.md— this repo's own test and CI policy. The plugin ships no default and no fallback, so nothing runs until the file exists./spec-flow:setupproposes one, confirms it with you, and opens a PR. Add.spec-flow/to.gitignore(per-branch runtime state) and neverspec-flow/— one character apart, opposite meanings, and a trailing-slash pattern with no interior slash matches at any depth, so the undotted form would swallow nested directories of that name too.- Labels — bootstrap the
P0–P3andstatus:*vocabulary once per repo (idempotent, safe to re-run). Run it with your cwd inside the target repo, pointing at the script in the plugin:bash /path/to/spec-flow/bin/bootstrap-labels.sh
The /code-review and /security-review lenses use Claude Code's built-in skills of the same name;
if they aren't available, those lenses degrade to an inline pass.
To land in the PM by default, set it in the consuming repo's .claude/settings.json:
{ "agent": "project-manager" }The plugin deliberately ships no root settings.json with an agent field — that would hijack the
main thread of every project that installs it. Opting a repo in is your choice, per repo.
Every stage can recover the others from the issue number alone:
GitHub issue #N (slug derived from the title)
git branch issue-N-slug
git worktree .claude/worktrees/issue-N-slug
OpenSpec change slug
pull request body contains "Closes #N"
Worktrees are long-lived — one per issue, across many stages and sessions — so several issues can
be in flight at once. /spec-flow:board reports across all of them.
An issue's stage is carried entirely by its label, so any session can pick up where the last one left off:
status: ready ──▶ spec-review ──▶ in-progress ──▶ in-review ──▶ addressing ──▶ (merged)
groom activate implement (PR open) address finalize
+ YOU approve + YOU review ⟲ loop + YOU merged
"What's next" is simply the highest-priority issue carrying status:ready.
- Session-driven, not cron.
implementruns as a backgroundWorkflowthat notifies on completion, but it's in-session — closing the session pauses the work.addressis invoked by you when you return; nothing polls. - Test policy — the repo's, never the plugin's. spec-flow ships no default and falls back to
nothing. The consuming repo states what runs locally, what runs in CI, whether CI is a test gate
at all, and what gates merge, in its own
spec-flow/TESTING.md;implementhands every agent a pointer at that file and reports the exact commands that ran. A repo with no test suite and no test-running CI is a valid policy, not a degraded one./spec-flow:setupseeds the file, and every entry point stops with a message naming the fix until it exists. - Issue and PR numbers always carry a description —
#85 (field identity), never a bare#85.
Agents resolve bare-first with a namespaced fallback: the workflow tries reviewer before
spec-flow:reviewer. If your repo defines an agent with the same name in .claude/agents/, yours
wins — a deliberate way to specialize a reviewer or the developer for a repo's stack.
See plugins/spec-flow/docs/workflow.md for the full design.
Language developer agents plus generic development skills. Standalone; useful in any repo, with or
without spec-flow.
| Agent | Purpose |
|---|---|
rust-dev |
Rust developer. Reads the bundled Rust style guide, works test-first with a stated escape hatch, and runs nextest with a token-frugal recipe |
cargo |
Cargo expert. Owns Cargo.toml, workspaces, features, profiles, dependencies, MSRV, and .config/nextest.toml. Never writes application or test code |
java-dev, kotlin-dev, and gradle join them later.
| Skill | Purpose |
|---|---|
/refactor [target] |
Behavior-preserving change, in any language. Produces a plan you approve, then holds the calling agent to a standing contract: triage a failing test from the spec, never edit it to go green, revert instead of grinding |
/tech-debt [path] |
Repo-wide structural audit: review agents find SOLID, duplication, and layering problems, rank the 10 most impactful, drop anything already an open issue, and walk you through the rest one at a time. You decide per finding whether to file it |
/ide-explain <issue-N | base-ref> [docs...] |
Render an IDE-style HTML view — an issue with its comments and linked issues, a diff, docs, or any combination |
/walkthrough [what to walk through] |
Render a diagram-first, ordered-step presentation — how something works, a tech-debt review, recommendations, a performance analysis |
/prose-review [target] [--fix] |
Grade comments, commit messages, PR descriptions, and release notes against prose-style.md. Reports by default; edits only with --fix |
ide-explain and walkthrough render one self-contained HTML page each: no server, no CDN, opens over
file://.
Claude Code:
/plugin install dev-skills@rustyrazorblade-plugins
The two plugins pair, one-directionally. dev-skills has no dependency on spec-flow.
- Set
SPEC_FLOW_DEVELOPER_AGENT=rust-devand/spec-flow:implementspawnsrust-devinstead of its own bundledtdd-developer. Leave it unset and spec-flow behaves exactly as it did before. - Set
SPEC_FLOW_SEAM_VIEW=explain(via/spec-flow:setup) andactivate/implementcallide-explainat both owner seams. See Seam visualization inplugins/spec-flow/docs/workflow.md.
See plugins/dev-skills/skills/ide-explain/SKILL.md
and plugins/dev-skills/skills/walkthrough/SKILL.md
for the full CLI and manifest schemas.
Apache 2.0