Redis Insight Plugin
redis/RedisInsight
A skill your agent uses when creating, modifying, debugging, deploying, or testing Redis Insight Workbench visualization plugins, plugin manifests, package.json visualizations, activationMethod…
Add a new Redis command (or command variant) to node-redis end-to-end — the <NAME.ts Command file, its registration with JSDoc in the package commands/index.ts, and a co-located <NAME.spec.ts with…
$ npx skills add redis/node-redis --skill implement-command -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install redis/node-redis implement-command --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/redis/node-redis.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/implement-command .claude/skills/implement-command && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "implement-command" agent skill from https://github.com/redis/node-redis/tree/master/.agents/skills/implement-command into .claude/skills/implement-command/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "implement-command", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/redis/node-redis/tree/master/.agents/skills/implement-commandType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add redis/node-redis --skill implement-command -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install redis/node-redis implement-command --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/redis/node-redis.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/implement-command .agents/skills/implement-command && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "implement-command" agent skill from https://github.com/redis/node-redis/tree/master/.agents/skills/implement-command into .agents/skills/implement-command/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "implement-command", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add redis/node-redis --skill implement-command -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install redis/node-redis implement-command --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/redis/node-redis.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/implement-command .cursor/skills/implement-command && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "implement-command" agent skill from https://github.com/redis/node-redis/tree/master/.agents/skills/implement-command into .cursor/skills/implement-command/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "implement-command", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/redis/node-redis.git --path .agents/skills/implement-command--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add redis/node-redis --skill implement-command -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install redis/node-redis implement-command --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/redis/node-redis.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/implement-command .gemini/skills/implement-command && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "implement-command" agent skill from https://github.com/redis/node-redis/tree/master/.agents/skills/implement-command into .gemini/skills/implement-command/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "implement-command", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install redis/node-redis implement-commandInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add redis/node-redis --skill implement-command -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/redis/node-redis.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/implement-command .github/skills/implement-command && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "implement-command" agent skill from https://github.com/redis/node-redis/tree/master/.agents/skills/implement-command into .github/skills/implement-command/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "implement-command", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add redis/node-redis --skill implement-command -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install redis/node-redis implement-command --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/redis/node-redis.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/implement-command .opencode/skills/implement-command && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "implement-command" agent skill from https://github.com/redis/node-redis/tree/master/.agents/skills/implement-command into .opencode/skills/implement-command/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "implement-command", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
implement-commandAdd a new Redis command (or command variant) to node-redis end-to-end — the <NAME.ts Command file, its registration with JSDoc in the package commands/index.ts, and a co-located <NAME.spec.ts with…
Implement Command is an agent skill from redis/node-redis, published by the product's own GitHub organization. Add a new Redis command (or command variant) to node-redis end-to-end — the <NAME.ts Command file, its registration with JSDoc in the package commands/index.ts, and a co-located <NAME.spec.ts with arg + behavior tests. Use when asked to implement, add, or wire up a Redis command in the client or a module package (json/search/bloom/time-series).
Its SKILL.md is about 5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `agents/openai.yaml`).
It sits in Databases, covering Forecasting and time series and Technical documentation. It works with Redis and npm. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 98747a7. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmredis-cligitFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
redis.iogithub.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Implement Command loads about 5k tokens when it runs. Until then it costs about 93 tokens; SKILL.md has 2,072 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from redis/node-redis at commit 98747a7, republished under its MIT licence (© redis). 2,072 words, ~4,978 tokens.
.claude/skills/implement-command/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.A command in node-redis is a single Command object exported from
packages/<pkg>/lib/commands/<NAME>.ts. It declares how to serialize arguments
onto the wire (parseCommand) and how to map the RESP reply to a JS value
(transformReply). It becomes callable on clients only after it is registered
in the package's commands/index.ts. Both the raw name and a camelCase alias
are exposed (HSET and hSet).
This skill is for @redis/client core commands and for module packages
(@redis/json, @redis/search, @redis/bloom, @redis/time-series). It does
not cover RESP codec changes or new client transports.
Before writing, read 2-3 existing commands with a similar shape (simple
key read, key + options, variadic, RESP2/3-divergent reply) and mirror them.
Consult redis.io/commands for argument order and
reply type, but treat existing parseCommand/transformReply files as the
source of truth for repo conventions.
| Package | Command dir | Import paths | Wire name prefix |
|---|---|---|---|
client | packages/client/lib/commands/ | ../client/parser, ../RESP/types, ./generic-transformers | none (GET) |
json | packages/json/lib/commands/ | @redis/client/dist/lib/... | JSON. (JSON.ARRAPPEND) |
search | packages/search/lib/commands/ | @redis/client/dist/lib/... | FT. |
bloom | packages/bloom/lib/commands/<family>/ | @redis/client/dist/lib/... | e.g. BF., CF., TOPK. |
time-series | packages/time-series/lib/commands/ | @redis/client/dist/lib/... | TS. |
Naming: file name = raw wire name with subcommand _ separators
(ACL_CAT, CONFIG_GET, CLUSTER_FORGET). A distinct reply variant gets its
own file (HRANDFIELD_COUNT_WITHVALUES). Module commands drop the dotted
prefix from the file name (ARRAPPEND.ts → wire JSON.ARRAPPEND).
New commands are often implemented before they are publicly released, so
redis.io may not document them yet and a default redis:latest may not have
them. Before writing any code, ask the user for three things:
src/commands/<name>.json
(subcommands use -, e.g. client-info.json, acl-cat.json). If the
command is unreleased, ask the user to paste the spec from their branch.
As a fallback on a live server: redis-cli --json COMMAND DOCS <name> and
COMMAND INFO <name>.transformReply. A quick redis-cli session or a throwaway probe
script (packages/client is already wired for tsx) is enough; never commit
the probe.since field is the answer when
present; otherwise ask the user directly. You need this to (a) write @since
in the JSDoc (Step 2) and (b) gate the behavior tests with
minimumDockerVersion (Step 3) so they don't run — and fail — on older
servers in CI.If the user cannot provide a spec, derive arguments/reply from
redis.io/commands but flag that it is unverified.
If they cannot provide a live instance, implement from the spec but state that
runtime behavior was not confirmed. If the introducing version is unknown, say
so and leave @since/minimumDockerVersion out rather than guessing.
The redis/redis spec drives every part of the Command object. Example
(getex.json, trimmed):
{
"GETEX": {
"since": "6.2.0", "arity": -2,
"command_flags": ["WRITE", "FAST"],
"key_specs": [{ "begin_search": { "index": { "pos": 1 } }, "flags": ["RW", "UPDATE"] }],
"arguments": [
{ "name": "key", "type": "key", "key_spec_index": 0 },
{ "name": "expiration", "type": "oneof", "optional": true, "arguments": [
{ "name": "seconds", "type": "integer", "token": "EX" },
{ "name": "persist", "type": "pure-token", "token": "PERSIST" }
]}
],
"reply_schema": { "oneOf": [ { "type": "string" }, { "type": "null" } ] }
}
}| Spec field | Drives |
|---|---|
command_flags contains READONLY (and not WRITE) | IS_READ_ONLY: true. WRITE → omit it. Pure read with no side effects → also CACHEABLE: true. For keyed commands the generated metadata table already implies these defaults, so module packages omit the flags; keyless reads must set IS_READ_ONLY: true explicitly (Step 4). |
key_specs empty / no key-type args | NOT_KEYED_COMMAND: true. |
arguments[].type: "key" | parser.pushKey(...) (one per key, in spec order). |
type: "pure-token" + token | a literal flag pushed only when its option is set (parser.push('PERSIST')). |
token + value type (integer/string/...) | push the token then the stringified value (parser.push('EX', seconds.toString())). |
type: "oneof" | mutually exclusive branch → if/else if in parseCommand; model as a union/options field. |
optional: true | goes in the options object (exported interface); guard with if (options?.x). |
multiple: true | variadic → parser.pushVariadic*. |
arity | sanity-check arg count in parseArgs tests. |
reply_schema (JSON Schema) | the transformReply return type. oneOf [string, null] → BlobStringReply | NullReply; integer → NumberReply; array → ArrayReply<...>; a map differing by RESP version → keyed transformReply: { 2, 3 }. |
since | the introducing server version → @since in the registry JSDoc (Step 2) and minimumDockerVersion: [major, minor] on the behavior tests (Step 3). |
After implementing, run the command against the live instance and diff the real
reply against reply_schema and your transformReply output.
<NAME>.tsMinimal pass-through command (packages/client/lib/commands/GET.ts):
import { CommandParser } from '../client/parser';
import { RedisArgument, BlobStringReply, NullReply, Command } from '../RESP/types';
export default {
CACHEABLE: true,
IS_READ_ONLY: true,
parseCommand(parser: CommandParser, key: RedisArgument) {
parser.push('GET');
parser.pushKey(key);
},
transformReply: undefined as unknown as () => BlobStringReply | NullReply
} as const satisfies Command;as const satisfies Command is mandatory — it preserves the literal arg types
for the public API while type-checking the shape.
IS_READ_ONLY: true — read command; routable to replicas. Set for reads, omit/false for writes.CACHEABLE: true — eligible for client-side caching. Only for pure reads with no side effects.NOT_KEYED_COMMAND: true — command takes no key (server/connection level, e.g. PING, CONFIG_GET).IS_FORWARD_COMMAND — internal; do not set on new commands.parseCommand — serialize args via CommandParserFirst arg is always parser. Push the wire name first, then args in order.
Use the parser helpers — do not hand-build arrays:
push(...args) — raw args (the command token, flags, stringified numbers).pushKey(key) — a key. Registers it for cluster slot routing. Use for every key, never push a key.pushKeys(keys) / pushKeysLength(keys) — multiple keys; the Length variant prefixes the count.pushVariadic(vals) — a RedisVariadicArgument (one value or array) as flat args.pushVariadicWithLength(vals) — same, prefixed with the count (e.g. FIELDS <n> ...).pushVariadicNumber(vals) — number or array of numbers, stringified.Numbers are not auto-stringified by push — call .toString(). Optional
trailing args go in an options object; export its interface (see
SET.ts's SetOptions). Encode keyword flags conditionally:
parseCommand(parser: CommandParser, key: RedisArgument, value: RedisArgument, options?: SetOptions) {
parser.push('SET');
parser.pushKey(key);
parser.push(value);
if (options?.condition) parser.push(options.condition); // 'NX' | 'XX'
}transformReply — map RESP reply to JStransformReply: undefined as unknown as () => <ReplyType>.(reply: <RawType>) => <JsType>. Use UnwrapReply<...> to read the raw RESP container.{ 2: (reply) => ..., 3: (reply) => ... } when RESP2 and RESP3 shapes differ (e.g. flat array vs map/tuple). See HRANDFIELD_COUNT_WITHVALUES.ts.When the server returns different shapes per protocol, the library exposes one return type to callers: the RESP3 shape is the source of truth, and the RESP2 reply is transformed to look like it. So the keyed form is almost always:
3: — pass-through (undefined as unknown as () => <ReplyType>), because
RESP3 already has the target shape (map, tuple, big-number, double, ...).2: — a function that reshapes the flat/legacy RESP2 reply into that same
<ReplyType>. Type its input UnwrapReply<Resp2Reply<ReplyType>> so the raw
RESP2 container is visible while the output type still matches RESP3.Canonical example — HELLO.ts turns the RESP2 flat array ([k, v, k, v, ...])
into the RESP3 map, while RESP3 passes through:
transformReply: {
2: (reply: UnwrapReply<Resp2Reply<HelloReply>>) => ({
server: reply[1], version: reply[3], proto: reply[5], /* ... */
}),
3: undefined as unknown as () => HelloReply
}Reuse shared transformers where one exists (HGETALL.ts uses
transformTuplesReply for 2:, map pass-through for 3:). Only when RESP3
still needs reshaping does 3: get its own function too. Verify the actual
per-protocol shapes against the live instance (Step 0) — connect once with
RESP: 2 and once with RESP: 3 and diff.
Reply types live in RESP/types: BlobStringReply, SimpleStringReply<'OK'>,
NumberReply, DoubleReply, NullReply, BooleanReply, ArrayReply<T>,
TuplesReply<[...]>, MapReply, UnwrapReply.
RESP3 is the default. No separate RESP3 test is needed for a new command; the default test setup already exercises RESP3.
BLOB_STRING reply cannot be remapped to Number via type mapping; only RESP3 DOUBLE/BIG_NUMBER are precision-risky.NumberReply can exceed Number.MAX_SAFE_INTEGER (2^53-1), add a @remarks line to the JSDoc (Step 2) telling users to do client.withTypeMapping({ [RESP_TYPES.NUMBER]: String }). See the ARGREP entries in the client index for the exact wording.Import from the published client subpath, prefix the wire name, and reuse
shared transformers (packages/json/lib/commands/ARRAPPEND.ts):
import { CommandParser } from '@redis/client/dist/lib/client/parser';
import { RedisArgument, NumberReply, Command } from '@redis/client/dist/lib/RESP/types';
export default {
IS_READ_ONLY: false,
parseCommand(parser, key, path, value) {
parser.push('JSON.ARRAPPEND');
parser.pushKey(key);
parser.push(path, /* transform */ value);
},
transformReply: undefined as unknown as () => NumberReply
} as const satisfies Command;commands/index.tsimport the command, then add it to the default-export map twice: the raw
name (shorthand) and a camelCase alias. Every entry MUST have a JSDoc block
directly above it — npm run check:command-jsdoc fails on any registry entry
without an attached JSDoc comment (no blank-line gap allowed).
import GET from './GET';
// ...
export default {
/**
* Returns the value of a key, or null if the key does not exist
* @param key - Key to read
* @since 1.0.0
*/
GET,
/**
* Returns the value of a key, or null if the key does not exist
* @param key - Key to read
* @since 1.0.0
*/
get: GET,
} satisfies RedisCommands;Keep both JSDoc blocks (raw + alias) in sync. Document every parseCommand
param after parser with @param. Add @since <version> with the introducing
server version from Step 0 (the spec's since); omit it only if that version is
unknown. Add @remarks for the precision caveat above when relevant. For module
packages the registry files are
packages/<pkg>/lib/commands/index.ts (bloom: per-family .../<family>/index.ts).
<NAME>.spec.ts (co-located)Two layers: arg serialization (no server) + behavior (real server, server +
cluster topologies). Mirror GET.spec.ts:
import { strict as assert } from 'node:assert';
import testUtils, { GLOBAL } from '../test-utils';
import { parseArgs } from './generic-transformers';
import GET from './GET';
describe('GET', () => {
it('transformArguments', () => {
assert.deepEqual(parseArgs(GET, 'key'), ['GET', 'key']);
});
testUtils.testAll('get', async client => {
assert.equal(await client.get('key'), null);
}, {
client: { ...GLOBAL.SERVERS.OPEN, minimumDockerVersion: [8, 8] },
cluster: { ...GLOBAL.CLUSTERS.OPEN, minimumDockerVersion: [8, 8] }
});
});parseArgs(COMMAND, ...args) asserts the exact wire array — cover each option/flag branch and variadic shapes. Arg tests need no server, so never gate them by version.testUtils.testAll(name, fn, { client, cluster }) runs the same body against a standalone server and a cluster. Use it so cluster key routing (pushKey) is exercised. Drop cluster only when the command is genuinely cluster-incompatible.minimumDockerVersion: [major, minor] into both the client and cluster options (as above). CI runs multiple server versions; without the gate the test runs on older servers that lack the command and fails. [8, 8] = "8.8 and newer". Apply the same to testWithClient/testWithCluster by spreading it into their single options object. Omit only if the version is genuinely unknown.GLOBAL.SERVERS.* / GLOBAL.CLUSTERS.* setup (see test-utils.ts); OPEN is the default.Cluster/sentinel routing (replica-safety, keyedness, CSC eligibility) is
resolved from a generated table:
packages/client/lib/command-metadata/command-metadata-data.ts. The file is
auto-generated — never edit it manually. The table lives in
@redis/client, but the COMMAND dump includes module commands (ft,
json, bf, ts, ...), so a new command in any package needs a
regenerate:
npm run generate:metadata --workspace=packages/client -- redis://localhost:6379The script rebuilds the entire table from a single live server's COMMAND
reply and overwrites the file — entries the server doesn't report are silently
dropped. Run it only against a server with all bundled modules loaded and a
current core command set (e.g. the CI image redislabs/client-libs-test or a
full Redis 8.8+ build); reuse the Step 0 instance only if it meets that bar — a
server with just the new command's module would wipe every other module's
metadata. The script then applies the curation in
packages/client/scripts/command-metadata-overrides.ts: hand-curated excludes
(internal, deprecated and cluster-admin commands) plus per-command routing
overrides. After regenerating, verify the new command has an entry with the
expected flags, and check git diff on command-metadata-data.ts: it must
contain only the intended additions/changes. Deletions of other modules' or
core entries mean the source server was incomplete — revert and rerun against
a full build.
How the table and the command object interact (override-first — see
lib/command-metadata/predicates.ts):
write flag is already replica-safe, so a keyed read command with a correct
table entry needs no IS_READ_ONLY on the command object — bloom and json
omit it everywhere.IS_READ_ONLY/CACHEABLE on the command object win over the table. Set
them as deliberate corrections, not to restate the table. The main case is
keyless reads, which default to master routing: PING/INFO in the client,
and module reads whose args are not keys — search and time-series set
IS_READ_ONLY: true on exactly their keyless commands (FT.SEARCH takes an
index name, TS.MGET/TS.MRANGE take filters, ...).command-metadata-overrides.ts; value intent (IS_READ_ONLY,
CACHEABLE) belongs in the command definition, never in the overrides file.npm run build # tsc --build (project references)
npm run check:command-jsdoc # registry JSDoc gate
npm run test-single -- packages/<pkg>/lib/commands/<NAME>.spec.ts
npm run lint # changed filesIf the build fails on stale dist/ from project references:
find packages -type d -name "dist" -exec rm -rf {} + && npm run buildFor module packages, build the client first (or whole repo) — they import from
@redis/client/dist.
<NAME>.ts created with parseCommand + transformReply, as const satisfies Command.IS_READ_ONLY for reads, CACHEABLE only for side-effect-free reads, NOT_KEYED_COMMAND if no key; omit flags the metadata table already implies — Step 4).pushKey/pushKeys; numbers stringified; options behind an exported interface.transformReply: RESP3 is the target shape (usually 3: pass-through), RESP2 transformed to match it; both shapes verified against the live instance.commands/index.ts: import + raw entry + camelCase alias, each with JSDoc (@param per arg; @since for the introducing version; @remarks for >2^53 precision).npm run generate:metadata) against a server with all bundled modules; the new command's entry verified and the diff contains no dropped entries (Step 4).<NAME>.spec.ts: parseArgs covers all branches; testUtils.testAll covers server + cluster; behavior tests gated with minimumDockerVersion on both client and cluster.npm run build, npm run check:command-jsdoc, the spec, and npm run lint all pass.© redis, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in .agents/skills/implement-command of redis/node-redis.
Open the folder on GitHubat commit 98747a7
Implement Command next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Implement Command this skillredis/node-redis | 18k | — | ~5k | Automated safety check: Pass | MIT | |
| Redis Insight Pluginredis/RedisInsight | 8.9k | — | ~3.5k | Automated safety check: Pass | MIT | |
| Mail Timeveliovgroup/mail-time | 143 | — | ~1k | Automated safety check: Pass | BSD-3-Clause | |
| Dead Dependenciesredis/RedisInsight | 8.9k | — | ~1.5k | Automated safety check: Pass | Custom licence | |
| Type Check Baselinesredis/RedisInsight | 8.9k | — | ~1.5k | Automated safety check: Pass | Custom licence | |
| Rebuild After Changezhyese/grid-qa | 144 | — | ~463 | Automated safety check: Notes | Custom licence |
redis/RedisInsight
A skill your agent uses when creating, modifying, debugging, deploying, or testing Redis Insight Workbench visualization plugins, plugin manifests, package.json visualizations, activationMethod…
veliovgroup/mail-time
A skill your agent uses when building, wiring, reviewing, or debugging MailTime and ostrio:mailer email queues for horizontally scaled Node.js, Bun, or Meteor apps.
redis/RedisInsight
Find and safely remove unused ("dead") npm dependencies in RedisInsight using a grep + leaf-check + build-gate recipe.
redis/RedisInsight
Run, refresh, or recover from RedisInsight's per-project TypeScript error baselines (.tscheck.rec.json).
zhyese/grid-qa
改了项目代码/配置后,判断该 rebuild 哪个镜像、哪些走 HMR、.env 改动要不要重建容器。避免"改了没生效"的最常见坑。
ancoleman/ai-design-components
Time-series database implementation for metrics, IoT, financial data, and observability backends.
redis/node-redis
Plan and execute runtime-behavior investigations with temporary TypeScript probe scripts, validation matrices, state controls, and findings-first reports.
redis/node-redis
Batch-triage and act on a set of node-redis PRs (or issues) by filter — fan out the maintainer-review methodology across them, present a one-word verdict plus a tldr to the user one at a time for…
redis/node-redis
Analyze master branch implementation and configuration to find missing, incorrect, or outdated documentation in docs/, README.md, and per-package READMEs.
redis/node-redis
Bump the default Redis docker test image (redislabs/client-libs-test) in the shared DEFAULTDOCKERCONFIG and the CI matrix, then force-push the bump-test-image branch and open a PR against upstream.
redis/node-redis
Review a GitHub issue or pull request URL as a node-redis maintainer, with a staged assessment of whether the claim is real, practically important, already solvable with supported functionality…
redis/node-redis
Create the required PR-ready summary block, branch suggestion, title, and draft description for node-redis.
Categories
Add a new Redis command (or command variant) to node-redis end-to-end — the <NAME.ts Command file, its registration with JSDoc in the package commands/index.ts, and a co-located <NAME.spec.ts with…. Implement Command is an agent skill from redis/node-redis, published by the product's own GitHub organization.ts with arg + behavior tests.
Implement Command fits situations like: asked to implement; wire up a Redis command in the client; A module package (json/search/bloom/time-series).
Run `npx skills add redis/node-redis --skill implement-command -a claude-code`. Or copy the skill folder (.agents/skills/implement-command in redis/node-redis) into .claude/skills/implement-command in your project. Claude Code loads it when a task matches its description.
Run `npx skills add redis/node-redis --skill implement-command -a codex`. Or copy the skill folder (.agents/skills/implement-command in redis/node-redis) into .agents/skills/implement-command in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add redis/node-redis --skill implement-command -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/implement-command, .gemini/skills/implement-command, .github/skills/implement-command and .opencode/skills/implement-command in your project.
Going by SKILL.md and its folder, Implement Command needs the command-line tools its instructions call (npm, redis-cli and git).
SKILL.md names 2 domains. As links in the text: redis.io and github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Implement Command is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Implement Command: Redis Insight Plugin (redis/RedisInsight, 8.9k stars), Mail Time (veliovgroup/mail-time, 143 stars), Dead Dependencies (redis/RedisInsight, 8.9k stars) and Type Check Baselines (redis/RedisInsight, 8.9k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
redis (a GitHub organization, an official publisher) maintains it in redis/node-redis, which has 17,585 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 6, 2026.
Source: redis/node-redis on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.