Backend
redis/RedisInsight
NestJS backend development patterns for the RedisInsight API: module structure, services, controllers, DTOs, dependency injection, and error handling.
Design, audit, document, refactor, and implement NestJS CRUD Automator resources using @elsikora/nestjs-crud-automator.
$ npx skills add ElsiKora/NestJS-Crud-Automator --skill crud-automator -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ElsiKora/NestJS-Crud-Automator crud-automator --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/ElsiKora/NestJS-Crud-Automator.git skills-src && mkdir -p .claude/skills && cp -r skills-src/ai/crud-automator .claude/skills/crud-automator && 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 "crud-automator" agent skill from https://github.com/ElsiKora/NestJS-Crud-Automator/tree/main/ai/crud-automator into .claude/skills/crud-automator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "crud-automator", 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/ElsiKora/NestJS-Crud-Automator/tree/main/ai/crud-automatorType 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 ElsiKora/NestJS-Crud-Automator --skill crud-automator -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ElsiKora/NestJS-Crud-Automator crud-automator --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ElsiKora/NestJS-Crud-Automator.git skills-src && mkdir -p .agents/skills && cp -r skills-src/ai/crud-automator .agents/skills/crud-automator && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "crud-automator" agent skill from https://github.com/ElsiKora/NestJS-Crud-Automator/tree/main/ai/crud-automator into .agents/skills/crud-automator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "crud-automator", 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 ElsiKora/NestJS-Crud-Automator --skill crud-automator -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ElsiKora/NestJS-Crud-Automator crud-automator --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ElsiKora/NestJS-Crud-Automator.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/ai/crud-automator .cursor/skills/crud-automator && 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 "crud-automator" agent skill from https://github.com/ElsiKora/NestJS-Crud-Automator/tree/main/ai/crud-automator into .cursor/skills/crud-automator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "crud-automator", 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/ElsiKora/NestJS-Crud-Automator.git --path ai/crud-automator--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 ElsiKora/NestJS-Crud-Automator --skill crud-automator -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ElsiKora/NestJS-Crud-Automator crud-automator --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ElsiKora/NestJS-Crud-Automator.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/ai/crud-automator .gemini/skills/crud-automator && 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 "crud-automator" agent skill from https://github.com/ElsiKora/NestJS-Crud-Automator/tree/main/ai/crud-automator into .gemini/skills/crud-automator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "crud-automator", 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 ElsiKora/NestJS-Crud-Automator crud-automatorInstalls 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 ElsiKora/NestJS-Crud-Automator --skill crud-automator -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ElsiKora/NestJS-Crud-Automator.git skills-src && mkdir -p .github/skills && cp -r skills-src/ai/crud-automator .github/skills/crud-automator && 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 "crud-automator" agent skill from https://github.com/ElsiKora/NestJS-Crud-Automator/tree/main/ai/crud-automator into .github/skills/crud-automator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "crud-automator", 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 ElsiKora/NestJS-Crud-Automator --skill crud-automator -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ElsiKora/NestJS-Crud-Automator crud-automator --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ElsiKora/NestJS-Crud-Automator.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/ai/crud-automator .opencode/skills/crud-automator && 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 "crud-automator" agent skill from https://github.com/ElsiKora/NestJS-Crud-Automator/tree/main/ai/crud-automator into .opencode/skills/crud-automator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "crud-automator", 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.
crud-automatorDesign, audit, document, refactor, and implement NestJS CRUD Automator resources using @elsikora/nestjs-crud-automator.
Crud Automator is an agent skill from ElsiKora/NestJS-Crud-Automator. Design, audit, document, refactor, and implement NestJS CRUD Automator resources using @elsikora/nestjs-crud-automator. Use when working with ApiController, ApiService, ApiFunction, ApiFunctionCustom, ApiRouteCustom, ApiMethod, ApiPropertyDescribe, ApiPropertyCopy, manual DTOs, autoDto, GETLIST response item DTOs, transformers, validators, relation loading, subscribers, authorization policies, HOOKS/IAM, transaction scopes, Swagger contracts, or replacing hand-written NestJS CRUD patterns with native Crud…
Its SKILL.md is about 6.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `examples.md`, `pitfalls.md` and `reference.md`).
It sits in Backend & APIs, covering OpenAPI specifications, Design review and critique and Authorization and RBAC. It works with NestJS and OpenAPI. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit ce6082d. 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.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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.
Crud Automator loads about 6.7k tokens when it runs. Until then it costs about 137 tokens; SKILL.md has 3,100 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 ElsiKora/NestJS-Crud-Automator at commit ce6082d, republished under its MIT licence (© ElsiKora). 3,100 words, ~6,716 tokens.
.claude/skills/crud-automator/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Use local source as the contract:
src/interface/**, src/type/**, and exported barrels define public API shape.test/unit/** and test/e2e/** show supported behavior.docs/** and README.md explain behavior, but may drift and must be checked against source.@ApiController() applies Nest @Controller() internally; use path.routes: {} is valid and still generates default CRUD routes; omitted route entries do not disable routes.CREATE, GET, GET_LIST, UPDATE (PUT /:id), PARTIAL_UPDATE (PATCH /:id), and DELETE.GET_MANY is service/function/subscriber-only, not a generated HTTP route.generation: generation.isEnabled, generation.shouldWriteToController, and generation.decorators.security.authentication and security.authorization.authentication.type is the principal category (USER, ADMIN, ACCOUNT, MERCHANT, or project string), not the bearer/security scheme.authentication.securityRequirements; one object is an AND group and multiple objects are OR alternatives.EApiControllerRequestTarget.BODY, PARAMETERS, and QUERY.EApiControllerResponseTarget.RESPONSE.response.headers, not under EApiControllerResponseTarget.RESPONSE.autoDto is validators-only. Entity ApiPropertyDescribe({ properties }) remains the capability baseline; generated GET_LIST request[QUERY].filter, order, and pagination own its generated query contract.ApiPropertyDescribe({ isAutoDtoEnabled: false }) keeps entity metadata, TypeORM behavior, and manual DTO use but removes the property from every generated BODY, PARAMETERS, QUERY, and RESPONSE DTO, generated Swagger relation components, and metadata-driven or typed client filter/order input. Omitted or true preserves normal generation.isEnabled: true, generated GET identity, read.scope.parameters, and query plans cannot re-enable a globally hidden property. Explicit ApiPropertyCopy may deliberately copy it to a manual DTO, but all other route/DTO, guard, and validation rules still apply. PAGE server-only defaults/tie-breakers may use the described scalar; CURSOR ordering cannot because it requires generated response exposure.dto and autoDto route branches are mutually exclusive.identity: { parameter: "gameId" } to rename only its primary-key wire parameter. The service predicate and HOOKS/IAM canonical identity still use the actual primary field, while the response shape is unchanged. Identity-only GET is valid only when the controller path has no inherited dynamic parameters; otherwise the same route needs a complete read.scope.parameters mapping.read.scope.parameters is a non-empty array of { parameter, field } mappings. It must exactly cover every required scalar inherited controller-path parameter once, maps only to distinct described direct scalar fields, and is mutually exclusive with a manual PARAMETERS DTO. Wildcard and optional/grouped dynamic path parameters fail at bootstrap.defaultOrder and tieBreakers entries. These validate against all described direct scalar fields, including UUID columns that are not client-sortable. A client order pair replaces defaults, tie-breakers are appended, and duplicate fields keep the earlier entry.PAGE. Explicit PAGE keeps required limit/page and the count envelope. CURSOR keeps required limit, accepts at most one of after/before, omits page, and returns only { items, nextCursor, previousCursor }.CURSOR is a generated-route mode over the existing service: the first window uses one getMany query with take = limit + 1; a cursor window adds exactly one opposite-direction take = 1 probe. It does not add a provider, read model, service, cursor table, or signing-key configuration.CURSOR order must be explicit. Every possible order field must be a selected, persisted, described, non-null direct scalar with no TypeORM value transformer or accessor and must be unconditionally raw-exposed in the generated response; the entity must have one primary column, and that column must occur only as the final explicit tie-breaker and remain absent from the client order allowlist.boolean; signed smallint and integer, including increment-generated columns physically emitted through SMALLSERIAL/SERIAL DDL; numeric enums backed by smallint or integer; signed bigint, including increment-generated BIGSERIAL DDL, exposed as canonical decimal BIGINT_STRING; and native uuid. Do not use smallserial, serial, or bigserial as TypeORM column type literals. Binary mode, custom extra.types, every other PostgreSQL storage type, and every other driver fail before CURSOR query I/O; PAGE is unchanged. ApiPropertyDescribe establishes the primitive wire category and raw exposure, but request-only bounds, lengths, patterns, and multipleOf do not constrain the opaque seek boundary. BIGINT_STRING never converts through Number. Entity @AfterLoad listeners are rejected at bootstrap; applicable active TypeORM afterLoad subscribers fail before query I/O. Active subscriber listenTo() targets and PostgreSQL parser configuration are trusted TypeORM extension code and must be deterministic.ApiPropertyDescribe object metadata uses dataType; manual ApiPropertyObject uses type.ApiPropertyDescribe relation metadata does not currently accept array options.GetDefaultStringFormatProperties(format) provides canonical defaults for supported string formats.EApiGetDefaultStringFormatPropertiesBigIntStringSign; the old type alias and paired-suffix validator configuration internals were removed. Import supported symbols from the package root.CREATED_AT, RECEIVED_AT, or UPDATED_AT; responses retain them. Exclusion follows the semantic identifier rather than property names, and DATE remains writable.create and update receive DeepPartial<E> directly, not { body }.get, getList, and getMany receive TypeORM options.delete is Promise<void>; direct decorator internals have a known return-shape inconsistency, so document and test the intended surface before changing it.@ApiFunctionCustom({ action, entity, transaction }) is for custom service commands that need function lifecycle, subscribers, and transaction context.@ApiFunctionStep({ entity, transaction }) is for internal service helper methods that need transaction context but are not standalone actions; direct calls are valid when the selected transaction mode permits.@ApiService({ entity, functions }) can configure transaction modes for generated CRUD functions keyed by EApiFunctionType.CREATE, UPDATE, DELETE, GET, GET_LIST, and GET_MANY; omitted entries default to SUPPORTS, and CUSTOM belongs to @ApiFunctionCustom.@ApiService or the matching built-in @ApiFunction*; undecorated overrides, accessors, and instance shadows fail closed at that boundary. Direct service calls are outside this route check. Generated CREATE preflights its protected post-create GET, and UPDATE preflights a protected response-reload GET when required. This is the intentional 4.0 breaking boundary.EApiFunctionTransactionMode with transaction.mode; subscriber requirements use EApiFunctionSubscriberTransactionExpectation with transaction.expectation.this.getApiFunctionContext() for operations, repository, eventManager, and getRepository.@ApiFunctionStep, use this.getApiFunctionStepContext() for repository, eventManager, and getRepository; it intentionally omits operations.ApiFunctionTransactionScope.runWithDataSource(dataSource, { name }, callback) owns a named external transaction and passes its EntityManager to the callback; runWithEntityManager() is join-only and fails without an active Automator owner registry.observation: { selectors, onSettled }. Select by exact entity constructor, native function/STEP type and method; configuration is copied before I/O, with at most 32 selectors and 256 reserved selected invocations per owner. Immutable output contains only selector index, native execution status and fractional callback duration, plus existing transaction outcome and dropped count. Durations include nested/context/subscriber work and are not isolated SQL or lock-wait time. Settlement runs once after the best-effort release attempt, context exit and terminal lifecycle, preserves native results/errors and does not await or propagate observer failures. Require bounded synchronous capture; STEP remains trace-only. Disabled/unmatched execution reads no clock, and preflight/startup failure creates no artificial measurement.onAfterCommit and onAfterRollback run once after the outer transaction ends. Their readonly context exposes the FUNCTION, ROUTE, or SCOPE owner/id, all ordered events, and subscriber-matched events; events contain operation metadata only, never arguments, bodies, entities, or results, and STEP is trace-only.onBeforeErrorCommit, onAfterErrorCommit, onBeforeErrorRollback, and onAfterErrorRollback. Post-commit failures must remain distinguishable from database rollback.FormatErrorEvidenceForLog(error) utility when an application deliberately logs a caught error. It emits only a bounded ASCII error type and an optional validated five-character SQLSTATE discovered through own data descriptors. Never log the error object, message, stack, cause, driver error, query, parameters, request URL, headers, IP, profile, or subscriber context. FormatUnknownForLog remains unchanged and is not an error-sanitization boundary.ApiFunctionUpdate performs one ordinary decorated GET before onBeforeUpdate. Read the patch from context.result, the active manager repository when a transaction exists (otherwise the service base repository) from context.DATA.repository, and the top-level detached and frozen shallow snapshot from context.DATA.currentEntity.currentEntity. Default SAVE keeps nested aliases, full entity/relation/cascade persistence and no explicit reread after before-subscribers. A missing decorated GET skips update-before hooks and flows through GET then UPDATE error lifecycle.persistenceMode: EApiFunctionUpdatePersistenceMode.PATCH is supported by ApiFunctionUpdate, generic ApiFunction, and ApiService.functions[UPDATE]. It requires explicit REQUIRED/MANDATORY, the same complete equality primary key in every original/effective criteria branch, and flat selected writable direct columns. It writes only supplied fields (including explicit old values), preserves effective scope/soft-delete visibility at UPDATE and fresh-reads by criteria key/projection before AFTER without another Automator GET callback. Empty PATCH performs no UPDATE/version bump and rereads with effective scope. No initial row lock precedes UPDATE-before subscribers. Default SAVE is unchanged.transaction: { mode: EApiFunctionTransactionMode }. Omitted config and SUPPORTS open no route transaction; REQUIRED opens or joins, MANDATORY requires an active owner, and NONE rejects an active transaction.REQUIRED, request transformation/validation run first; request relation hydration, the generated service operation, and response relation reload share the route manager; commit lifecycle completes before response transformation, route-after, authorization result handling, and serialization. If REQUIRED joins an outer owner, that owner commits later.@ApiRouteCustom for custom controller routes that need runtime behavior: transformers, validators, relation handling, subscribers, authorization result transforms, or serialization.5xx. Its automatic logs omit request URLs, correlation header values, error messages, stacks, causes, queries, parameters, and driver objects while preserving the existing HTTP response and throw contract.transaction config does not apply to @ApiRouteCustom; custom functions, steps, or named scopes continue to own transactions.@ApiFunctionCustom<Entity>(...) and @ApiRouteCustom<Entity>(...); response types belong on method return types and response metadata, not decorator generic parameters.@ApiMethod as the low-level metadata/Nest/Swagger/security/throttling composer.@ApiMethod metadata lives under metadata.resource, metadata.route, metadata.response, metadata.security, and metadata.throttling.controller.service to extend ApiServiceBase and response items to have an id.@ApiRouteCustom, request relation loading hydrates only the method @Body() argument; custom route before-hook auth, headers, IP, metadata, and runtime properties live in context.DATA, not context.result.request[EApiControllerRequestTarget.QUERY] accepts optional sibling filter, order, and pagination sections. Omitted pagination means PAGE; omitted filter/order sections preserve legacy metadata-driven behavior in PAGE mode. Configured sections compile into one immutable plan used by dynamic DTO generation, OpenAPI, strict runtime parsing, and TypeORM compilation. order.defaultOrder and order.tieBreakers provide deterministic server compound ordering while client input remains one orderBy/orderDirection pair.INHERIT overlays or REJECT allowlists, exact disabled fields, narrowed operations, and OMIT/REJECT/USE_DEFAULT missing behavior.USE_DEFAULT when a field group is absent, and rejects malformed or disallowed input independently of host ValidationPipe. The optional route transaction then compiles predicates, AND-merges query filters with path scope and then authorization scope, applies the effective order, and runs the service query. CURSOR tokens bind the route, path values, query-plan signature, normalized filter AST, and effective order; limit and recalculated HOOKS/IAM scope are intentionally not token context.onBeforeGetList) but uses the GET_MANY function lifecycle. Its BEFORE chain runs exactly once per HTTP request against detached base options; only the candidate where and withDeleted are captured and reused for the main window and opposite probe, while AFTER runs for each actual query. Generated calls re-AND mandatory scope/window where, restore route-owned order/take, force an own cache: false, shadow select/skip, reject subscriber join/lock, and reject later changes to protected row cardinality, sequence, raw order/primary tuples, cursors, or flat envelope. Direct GET_MANY calls keep their ordinary per-call subscriber contract.cache: false, including against inherited and global TypeORM query caching. Requested relations plus effective relationLoadStrategy: "query" plus data-source cache alwaysEnabled: true fail closed before repository I/O because relation-loader subqueries cannot inherit the root cache bypass; use join loading or disable the global always-on cache.{ itemType } DTOs must use compatible Automator ApiProperty* response metadata for every potential order/primary field under the same name; full wrappers must prove exactly items, nextCursor, and previousCursor. The final plain projection is asserted, so @Expose aliases, toPlainOnly transforms, accessors, and route/authorization transforms cannot mask or rewrite protected values.relations.request.reference and relations.request.load.relations.request.load.include, optional relations.request.load.relationLoadStrategy, optional relations.request.load.services overrides, and optional direct-relation relations.request.load.locks.relations.request.load.include is the single source of truth for direct request relations to hydrate. Omitted service keys use ${relationName}Service.pessimistic_read or pessimistic_write, require an active Automator transaction, follow direct include declaration order, and disable implicit eager-relation loading. A locked direct relation with explicit nested includes requires relationLoadStrategy: "query"; nested loads share the manager without automatic locks.create/update contracts remain entity-based; direct callers load entities through their active manager.relations.response.reference and relations.response.load.include with optional relationLoadStrategy.OBJECT and SCALAR are the supported destructive response reference projections. Do not assume FULL or PRESERVE modes exist.author.id[...] and author.username[...]; top-level author[...] is not generated or transformed. A typed plan can narrow these paths but cannot enable deeper or to-many paths.load.include.relations; nested request references are not recursively hydrated.ApiSubscriberModule, register subscriber classes as Nest providers, and mark observed controllers/services with @ApiControllerObservable() / @ApiServiceObservable().{ body, parameters, query, headers, ip, authenticationRequest } in before hooks.{ body?, parameters?, query? } in context.result; read auth/header/IP data from context.DATA.@ApiRouteSubscriber({ authorization: { expectation } }); they are type-only. Use matching class/context generics with EApiRouteSubscriberAuthorizationExpectation.REQUIRED only when the route contract guarantees authenticationRequest.authorizationDecision.context.result.body in function subscribers.@ApiFunctionSubscriber({ transaction: { expectation } }); they are not inferred from service/function config. Use matching class/context generics for REQUIRED or MANDATORY so context.DATA.eventManager narrows to EntityManager.onBeforeCustom, onAfterCustom, onBeforeErrorCustom, and onAfterErrorCustom.priority runs earlier; returned non-undefined hook results flow to later subscribers.EApiAuthorizationMode.HOOKS plus ApiAuthorizationPolicy for code-first app rules.@ApiAuthorizationPolicy() classes as Nest providers.Resource values match literally or with wildcards; {id} placeholders belong in resourceDefinition.resourcePath.EApiAuthorizationCacheMode.SOURCE_FIRST: every evaluation reads hooks permission, IAM attachment, and IAM document sources without cross-request map reads, writes, or stale fallback.MEMORY is explicit process-local opt-in and requires positive safe-integer ttlMs and maxEntries; each resolver cache receives its own bound.ApiAuthorizationCacheInvalidationService when resolver backing data must be visible before TTL expiry.clearAll() clears both cache families.{ itemType, name? }.limit, optional paired client order, filters, and optional exclusive after/before, never page; its response is the flat three-field envelope. Tokens reject cross-route/path/filter/order reuse before database I/O, while current path and HOOKS/IAM predicates plus the one-shot GET_MANY candidate remain mandatory on both window and probe queries.© ElsiKora, 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 3 other files in ai/crud-automator of ElsiKora/NestJS-Crud-Automator.
Open the folder on GitHubat commit ce6082d
Crud Automator 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 |
|---|---|---|---|---|---|---|
| Crud Automator this skillElsiKora/NestJS-Crud-Automator | 261 | — | ~6.7k | Automated safety check: Pass | MIT | |
| Backendredis/RedisInsight | 8.9k | — | ~1.6k | Automated safety check: Pass | Custom licence | |
| Projectsamchon/nestia | 2.2k | — | ~3k | Automated safety check: Pass | MIT | |
| VibexRaja0sama/vibex | 388 | — | ~7.8k | Automated safety check: Pass | MIT | |
| Arandu Shared Modules Guidearandu-io/arandu | 281 | — | ~1.8k | Automated safety check: Pass | MIT | |
| defineRoute Route Builderbighadj22/codflow | 354 | — | ~924 | Automated safety check: Pass | Apache-2.0 |
redis/RedisInsight
NestJS backend development patterns for the RedisInsight API: module structure, services, controllers, DTOs, dependency injection, and error handling.
samchon/nestia
Defines the nestia product contract, workspace layout, package boundaries, the Go plugin composition model, and canonical commands.
Raja0sama/vibex
Diagrams and checkable docs from a codebase. An agent skill from Raja0sama/vibex.
arandu-io/arandu
Decides whether a feature belongs in the application or in one of five shared Arandu modules before adding permissions, wallets, tags, Markdown rendering or API docs.
bighadj22/codflow
Creates new API endpoints, and converts older ones, with the defineRoute() pattern used in cod-server, including auth strategies, scopes and OpenAPI output.
wso2/agent-manager
Add or change a REST API resource in agent-manager-service (the Go control plane).
Categories
Design, audit, document, refactor, and implement NestJS CRUD Automator resources using @elsikora/nestjs-crud-automator. Crud Automator is an agent skill from ElsiKora/NestJS-Crud-Automator. Design, audit, document, refactor, and implement NestJS CRUD Automator resources using @elsikora/nestjs-crud-automator.
Crud Automator fits situations like: working with ApiController; apiFunctionCustom; apiPropertyDescribe; apiPropertyCopy.
Run `npx skills add ElsiKora/NestJS-Crud-Automator --skill crud-automator -a claude-code`. Or copy the skill folder (ai/crud-automator in ElsiKora/NestJS-Crud-Automator) into .claude/skills/crud-automator in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ElsiKora/NestJS-Crud-Automator --skill crud-automator -a codex`. Or copy the skill folder (ai/crud-automator in ElsiKora/NestJS-Crud-Automator) into .agents/skills/crud-automator 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 ElsiKora/NestJS-Crud-Automator --skill crud-automator -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/crud-automator, .gemini/skills/crud-automator, .github/skills/crud-automator and .opencode/skills/crud-automator in your project.
SKILL.md names no scripts, command-line tools or credentials: Crud Automator is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Crud Automator is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.7k tokens (SKILL.md is roughly 27k 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 Crud Automator: Backend (redis/RedisInsight, 8.9k stars), Project (samchon/nestia, 2.2k stars), Vibex (Raja0sama/vibex, 388 stars) and Arandu Shared Modules Guide (arandu-io/arandu, 281 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ElsiKora (a GitHub organization) maintains it in ElsiKora/NestJS-Crud-Automator, which has 261 GitHub stars. The repository was last updated on September 23, 2026.
Source: ElsiKora/NestJS-Crud-Automator on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.