Official agent skill

Implement Command

by redis in redis/node-redis

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…

OfficialMITAuto-check passedDatabases

Install Implement Command

skills CLI
$ npx skills add redis/node-redis --skill implement-command -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install redis/node-redis implement-command --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
implement-command
GitHub stars
18k
Token cost
~5k tokens
SKILL.md length
2,072 words
Files
2
Skills in repo
7
Repo updated
First seen
Licence
MIT

At a glance

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…

  • Works in 6 steps: Gather inputs (ask the user first) → Write .ts → Register in commands/index.ts → …
  • Asked to implement
  • SKILL.md covers Overview, File layout, Step 0 — Gather inputs (ask… and Step 1 — Write .ts, plus 5 more sections
  • Calls npm, redis-cli and git

What it does

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.

When your agent uses it

  • Asked to implement
  • Wire up a Redis command in the client
  • A module package (json/search/bloom/time-series)

Example prompts

  • “/implement-command”

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Gather inputs (ask the user first)
  2. Write .ts
  3. Register in commands/index.ts
  4. Write .spec.ts (co-located)
  5. Regenerate static command metadata
  6. Build, verify, lint

What it can do on your machine

Read from SKILL.md and the folder at commit 98747a7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • npm
    • redis-cli
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • redis.io
    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~93
When it runs · the whole SKILL.md, loaded when a task matches
~5k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from redis/node-redis at commit 98747a7, republished under its MIT licence (© redis). 2,072 words, ~4,978 tokens.

Download SKILL.mdSave it as .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.
name
implement-command
description
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).

Implement a node-redis Command

Overview

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.

File layout

PackageCommand dirImport pathsWire name prefix
clientpackages/client/lib/commands/../client/parser, ../RESP/types, ./generic-transformersnone (GET)
jsonpackages/json/lib/commands/@redis/client/dist/lib/...JSON. (JSON.ARRAPPEND)
searchpackages/search/lib/commands/@redis/client/dist/lib/...FT.
bloompackages/bloom/lib/commands/<family>/@redis/client/dist/lib/...e.g. BF., CF., TOPK.
time-seriespackages/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).

Step 0 — Gather inputs (ask the user first)

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:

  1. The command spec. Ask for the redis/redis JSON spec file — one per command under 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>.
  2. A running Redis instance that has the command. This is the single most useful input — ask for it explicitly and up front. Ask for connection details (host/port, TLS, auth, module loaded). Use it to explore real behavior and confirm the implementation matches the spec — do not rely on the spec alone. Probe every argument branch and diff the real reply against your transformReply. A quick redis-cli session or a throwaway probe script (packages/client is already wired for tsx) is enough; never commit the probe.
  3. The first server version that ships the command. Ask which Redis (or module) version introduced it — the spec's 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.

Reading the spec JSON → mapping to a Command

The redis/redis spec drives every part of the Command object. Example (getex.json, trimmed):

json
{
  "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 fieldDrives
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 argsNOT_KEYED_COMMAND: true.
arguments[].type: "key"parser.pushKey(...) (one per key, in spec order).
type: "pure-token" + tokena 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: truegoes in the options object (exported interface); guard with if (options?.x).
multiple: truevariadic → parser.pushVariadic*.
aritysanity-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 }.
sincethe 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.

Step 1 — Write <NAME>.ts

Minimal pass-through command (packages/client/lib/commands/GET.ts):

typescript
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.

Command flags (all optional)
  • 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 CommandParser

First 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:

typescript
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 JS
  • Pass-through (reply already the right shape): transformReply: undefined as unknown as () => <ReplyType>.
  • Function: (reply: <RawType>) => <JsType>. Use UnwrapReply<...> to read the raw RESP container.
  • RESP-version keyed: { 2: (reply) => ..., 3: (reply) => ... } when RESP2 and RESP3 shapes differ (e.g. flat array vs map/tuple). See HRANDFIELD_COUNT_WITHVALUES.ts.
Unify RESP2 onto the RESP3 shape

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:

typescript
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.

Type-mapping precision caveats
  • A BLOB_STRING reply cannot be remapped to Number via type mapping; only RESP3 DOUBLE/BIG_NUMBER are precision-risky.
  • If a 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.
Module package commands

Import from the published client subpath, prefix the wire name, and reuse shared transformers (packages/json/lib/commands/ARRAPPEND.ts):

typescript
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;
Show full SKILL.md (836 more words)Show less

Step 2 — Register in commands/index.ts

import 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).

typescript
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).

Step 3 — Write <NAME>.spec.ts (co-located)

Two layers: arg serialization (no server) + behavior (real server, server + cluster topologies). Mirror GET.spec.ts:

typescript
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.
  • Gate every behavior test by the introducing version (Step 0). Spread 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.
  • Pick the right GLOBAL.SERVERS.* / GLOBAL.CLUSTERS.* setup (see test-utils.ts); OPEN is the default.
  • Docker is required — test-utils starts real Redis containers.

Step 4 — Regenerate static command metadata

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:

bash
npm run generate:metadata --workspace=packages/client -- redis://localhost:6379

The 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):

  • The table sets defaults only, for both replica routing (cluster and sentinel) and client-side caching eligibility. A keyed entry without the 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, ...).
  • Table-shape fixes (wrong, missing or excluded entries, routing policies) belong in command-metadata-overrides.ts; value intent (IS_READ_ONLY, CACHEABLE) belongs in the command definition, never in the overrides file.

Step 5 — Build, verify, lint

bash
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 files

If the build fails on stale dist/ from project references:

bash
find packages -type d -name "dist" -exec rm -rf {} + && npm run build

For module packages, build the client first (or whole repo) — they import from @redis/client/dist.

Completion checklist

  • Asked the user for spec, a live instance with the command, and the introducing server version (Step 0); probed real behavior against the live instance.
  • <NAME>.ts created with parseCommand + transformReply, as const satisfies Command.
  • Flags set correctly (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).
  • Every key uses pushKey/pushKeys; numbers stringified; options behind an exported interface.
  • RESP2/3 divergence handled via keyed transformReply: RESP3 is the target shape (usually 3: pass-through), RESP2 transformed to match it; both shapes verified against the live instance.
  • Registered in commands/index.ts: import + raw entry + camelCase alias, each with JSDoc (@param per arg; @since for the introducing version; @remarks for >2^53 precision).
  • Static command metadata regenerated (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.
  • Commit message uses Conventional Commits; no company-internal refs.

© redis, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in .agents/skills/implement-command of redis/node-redis.

  • SKILL.md
  • agents/openai.yaml

Open the folder on GitHubat commit 98747a7

Compare with similar skills

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.

Implement Command compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Implement Command this skillredis/node-redis18k—~5kAutomated safety check: PassMIT
Redis Insight Pluginredis/RedisInsight8.9k—~3.5kAutomated safety check: PassMIT
Mail Timeveliovgroup/mail-time143—~1kAutomated safety check: PassBSD-3-Clause
Dead Dependenciesredis/RedisInsight8.9k—~1.5kAutomated safety check: PassCustom licence
Type Check Baselinesredis/RedisInsight8.9k—~1.5kAutomated safety check: PassCustom licence
Rebuild After Changezhyese/grid-qa144—~463Automated safety check: NotesCustom licence

Similar skills

  • Redis Insight Plugin

    redis/RedisInsight

    Official

    A skill your agent uses when creating, modifying, debugging, deploying, or testing Redis Insight Workbench visualization plugins, plugin manifests, package.json visualizations, activationMethod…

    8.9k GitHub stars~3.5k tokensUpdated 3 days ago
    DatabasesAuto-check passed
  • Mail Time

    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.

    143 GitHub stars~1k tokensUpdated 7 days ago
    DatabasesAuto-check passed
  • Dead Dependencies

    redis/RedisInsight

    Official

    Find and safely remove unused ("dead") npm dependencies in RedisInsight using a grep + leaf-check + build-gate recipe.

    8.9k GitHub stars~1.5k tokensUpdated 3 days ago
    DatabasesAuto-check passed
  • Type Check Baselines

    redis/RedisInsight

    Official

    Run, refresh, or recover from RedisInsight's per-project TypeScript error baselines (.tscheck.rec.json).

    8.9k GitHub stars~1.5k tokensUpdated 3 days ago
    DatabasesAuto-check passed
  • Rebuild After Change

    zhyese/grid-qa

    改了项目代码/配置后,判断该 rebuild 哪个镜像、哪些走 HMR、.env 改动要不要重建容器。避免"改了没生效"的最常见坑。

    144 GitHub stars~463 tokensUpdated 3 days ago
    DevOps & CloudAuto-check: notes
  • Using Timeseries Databases

    ancoleman/ai-design-components

    Time-series database implementation for metrics, IoT, financial data, and observability backends.

    526 GitHub stars~1.7k tokensUpdated 10 mo ago
    DatabasesAuto-check passed

More from redis/node-redis

  • Runtime Behavior Probe

    redis/node-redis

    Official

    Plan and execute runtime-behavior investigations with temporary TypeScript probe scripts, validation matrices, state controls, and findings-first reports.

    18k GitHub stars~4.4k tokensUpdated yesterday
    Auto-check passed
  • Maintainer Triage

    redis/node-redis

    Official

    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…

    18k GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • Docs Sync

    redis/node-redis

    Official

    Analyze master branch implementation and configuration to find missing, incorrect, or outdated documentation in docs/, README.md, and per-package READMEs.

    18k GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed
  • Bump Test Image

    redis/node-redis

    Official

    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.

    18k GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Maintainer Review

    redis/node-redis

    Official

    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…

    18k GitHub stars~5.5k tokensUpdated yesterday
    Auto-check passed
  • PR Draft Summary

    redis/node-redis

    Official

    Create the required PR-ready summary block, branch suggestion, title, and draft description for node-redis.

    18k GitHub stars~1.4k tokensUpdated yesterday
    Auto-check: warnings

Works with

Questions about Implement Command

What does Implement Command do?

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.

When should I use Implement Command?

Implement Command fits situations like: asked to implement; wire up a Redis command in the client; A module package (json/search/bloom/time-series).

How do I install Implement Command in Claude Code?

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.

How do I install Implement Command in Codex?

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.

Can I use Implement Command in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Implement Command need to run?

Going by SKILL.md and its folder, Implement Command needs the command-line tools its instructions call (npm, redis-cli and git).

Does Implement Command access the network?

SKILL.md names 2 domains. As links in the text: redis.io and github.com. This is read from the text; nothing was executed.

Is Implement Command safe to install?

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.

What licence does Implement Command use?

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.

How many tokens does Implement Command use?

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.

What are the alternatives to Implement Command?

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.

Who maintains Implement Command?

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.