prisma-client-api (prisma/skills)
Reúne consultas, filtros, operadores e métodos do Prisma Client para CRUD, relações e transações.
prisma-client-api: nenhum efeito mensurável: todas as 18 execuções passam em todas as verificações (5.0 controle, 5.0 prompt de uma frase, 5.0 skill); o modelo já escreve Prisma idiomático
Codex CLI · gpt-6-astra
24.0 / 30
Ganho sobre sem skill: +0.00 · Situacional · 18 execuções
Situacional: o ganho +0.00 está abaixo de +1.0. Para ser recomendado, é preciso total de 22/30, qualidade da saída de 3.5 e ganho de +1.0.
SOTA
AprovadoTestado com Codex.
Cobre Codex, Claude Code
Codex CLI 0.166 (nível SOTA): 18 execuções avaliadas. Uma aprovação aqui também vale para o Claude Code pela nossa regra de níveis; ela não diz nada sobre o segundo nível.
Notas
Cada dimensão vai de 0 a 5, e as seis somam o total de 30. 5 é melhor em todas as dimensões. Custo 5 significa barato e rápido. Instalação 5 significa fácil.
- Confiabilidade do acionamento
- 5.0
- Ganho sobre sem skill
- 2.0
- Qualidade da saída
- 5.0
- Custo de tokens e tempo
- 5.0
- Instalação e portabilidade
- 3.0
- Segurança
- 4.0
Revisão de segurança
SeguroVarredura estática: 9 CRÍTICO / 9 ALTO / 0 MÉDIO. Revisão manual: seguro para executar em sandbox sem rede (achados do scanner explicados). Uma varredura limpa não prova que a skill é segura.
Instalar
npx skills@latest add prisma/skills --skill prisma-client-api
Commit fixado: 8ea289b730c2e89f7ff1f518af128b113d842a92
Testado: 2026-11-02
O que testamos
- Escrever consultas tipadas a partir de uma descrição — Escreva src/queries.ts usando o Prisma Client com estas funções: getUserWithPosts(id) retornando o usuário e apenas seus posts publicados, mais recentes primeiro, no máximo 10; searchPosts(term, cursor?) uma busca por título sem distinção de maiúsculas, paginada por cursor (20 por página); upsertUser(…
- Remover uma consulta N+1 — src/report.ts está lento em tabelas grandes. Corrija o problema de desempenho em src/report.ts e mantenha o formato do retorno igual.
- Revisar código Prisma em busca de erros — Revise src/search.ts e src/report.ts em busca de erros de Prisma e de qualquer coisa arriscada; liste os problemas do mais grave para o menos grave. Não altere nenhum arquivo.
Prós
- A skill foi acionada sem ser nomeada: o arquivo da skill foi lido em 6/6 execuções de tratamento.
- Sem custo extra de tokens: 1.05x os tokens em relação ao grupo sem skill.
- Qualidade absoluta alta com a skill: 5.0 de 5.
Contras
- Nenhum ganho mensurável em relação ao grupo sem skill (+0.00, dentro do ruído).
- Um prompt de uma frase marcou 5.0, contra 5.0 com a skill (+0.00).
- O grupo de controle já marca 5.0: efeito teto, então o teste não consegue mostrar ganho.
- n=2 por tarefa por braço; diferenças abaixo de cerca de 1 ponto são ruído.
Avaliação
Codex CLI 0.166 (gpt-6-astra, raciocínio baixo) em um PC de teste Windows dedicado, com um projeto temporário novo e HOME/TMPDIR/caches temporários a cada execução, skill instalada (tratamento), ausente (grupo de controle) ou ausente com o requisito central da skill comprimido em uma frase anexada ao prompt (grupo com prompt de uma frase), 2 execuções por grupo por tarefa, rede desligada, gravações em /tmp bloqueadas. Os prompts nunca mencionam a skill (exceto pelo texto indicado abaixo). Um pequeno projeto Prisma (schema, seed, arquivos src). Tarefas: escrever src/queries.ts com cinco funções de consulta tipadas (usuário com os últimos 10 posts publicados, busca sem distinção de maiúsculas paginada por cursor, upsert, transferência atômica de posts, uma contagem groupBy), corrigir um N+1 em src/report.ts mantendo o formato da saída e revisar dois arquivos em busca de erros de Prisma (uma consulta raw montada com interpolação de string e outros). Os prompts não citam recursos do Prisma. O prompt de uma frase lista os recursos idiomáticos em uma frase.
Comparação entre os braços
| Braço | Nota média (0-5) | Tokens por execução |
|---|---|---|
| Sem a skill | 5.0 | 92k |
| Prompt de uma frase | 5.0 | 88k |
| Com a skill | 5.0 | 97k |
Medido com Codex CLI em 18 execuções, com pontuação por verificações baseadas em regras e sem juiz LLM. Total 24.0 / 30, veredito Situacional.
Veredito: Situacional (24.0 / 30). Fonte: prisma/skills, prisma-client-api, fixado no commit 8ea289b. Instalação: npx skills@latest add prisma/skills --skill prisma-client-api. Licença: Apache-2.0 (LICENSE do repositório).
O que é
A skill prisma-client-api (prisma/skills): uma referência para a API de consultas do Prisma Client (findUnique/findMany, select/include, filtros, paginação por cursor, upsert, transações, groupBy, consultas raw) além de orientações em estilo de documentação, entregue como SKILL.md e arquivos de regras.
Como testamos
Codex CLI 0.166 (gpt-6-astra, raciocínio baixo) em um PC de testes Windows dedicado, com um projeto temporário novo e HOME/TMPDIR/caches temporários a cada execução, skill instalada (com a skill), ausente (controle) ou ausente com o requisito central da skill comprimido em uma frase anexada ao prompt (grupo do prompt de uma frase), 2 execuções por grupo por tarefa, rede desativada, gravações em /tmp bloqueadas. Os prompts nunca mencionam a skill (exceto pelo texto indicado abaixo).
Um pequeno projeto Prisma (schema, seed, arquivos src). Tarefas: escrever src/queries.ts com cinco funções de consulta tipadas (usuário com as últimas 10 publicações publicadas, busca com paginação por cursor e sem diferenciar maiúsculas de minúsculas, upsert, transferência atômica de publicações, uma contagem com groupBy), corrigir um N+1 em src/report.ts mantendo o formato da saída e revisar dois arquivos em busca de erros de Prisma (uma consulta raw montada com interpolação de strings e outros). Os prompts não nomeiam recursos do Prisma. O prompt de uma frase lista os recursos idiomáticos em uma frase.
- Escrever consultas tipadas a partir de uma descrição — Escreva src/queries.ts usando o Prisma Client com estas funções: getUserWithPosts(id) retornando o usuário e apenas suas publicações publicadas, mais recentes primeiro, no máximo 10; searchPosts(term, cursor?) uma busca por título com paginação por cursor (tamanho de página 20) e sem diferenciar maiúsculas de minúsculas; upsertUser(…
- Remover uma consulta N+1 — src/report.ts está lento em tabelas grandes. Corrija o problema de desempenho em src/report.ts e mantenha o formato retornado igual.
- Revisar código Prisma em busca de erros — Revise src/search.ts e src/report.ts em busca de erros de Prisma e qualquer coisa arriscada; liste os problemas do mais grave para o menos grave. Não altere nenhum arquivo.
A pontuação é programática (testes ocultos / recuperação de problemas plantados / verificações de restrições / renderização+OCR quando relevante), 0–5 por execução. Nenhum juiz LLM decidiu qualquer pontuação.
Resultados
A frase única dada ao terceiro grupo: "Use o Prisma Client de forma idiomática: findUnique em campos únicos, include/select para evitar N+1 e busca excessiva, filtros com mode: 'insensitive', paginação por cursor com take, upsert para inserir ou atualizar, $transaction ou updateMany para mudanças atômicas, groupBy para agregações e nunca $queryRawUnsafe com entrada interpolada."
| Tarefa | Pontuação do controle | Prompt de uma frase | Com a skill | Tokens do controle | Tokens do prompt de uma frase | Tokens com a skill | Skill lida |
|---|---|---|---|---|---|---|---|
| t1-queries | 5.0 | 5.0 | 5.0 | 83k | 83k | 105k | 2/2 |
| t2-n-plus-1 | 5.0 | 5.0 | 5.0 | 103k | 103k | 100k | 2/2 |
| t3-review | 5.0 | 5.0 | 5.0 | 89k | 75k | 84k | 2/2 |
Pontuação média: 5.0 sem a skill vs 5.0 com a skill (delta +0.0). Tokens por execução: 92k vs 97k (1.05x); tempo 44s vs 40s. Grupo prompt de uma frase: 5.0 (ganho da skill sobre o prompt de uma frase: +0.0; ganho do próprio prompt de uma frase sobre nenhuma skill: +0.0); tokens do prompt de uma frase: 88k por execução, então a skill custa 1.10x o prompt de uma frase.
O que aconteceu
- Toda execução de todo grupo passou em todas as verificações: controle 5.00, prompt de uma frase 5.00, skill 5.00 (n=6 cada). As consultas geradas usam findUnique,
mode: 'insensitive', cursor + take, upsert, $transaction/updateMany e groupBy; o N+1 foi corrigido com include/select ou batching; a revisão encontrou a interpolação raw insegura em todas as execuções. - A skill foi lida em 6/6 execuções com a skill e custou 97k tokens por execução, contra 92k do controle e 88k do prompt de uma frase (1.05x): um pequeno custo extra, nenhum ganho.
- As execuções com a skill copiam os arquivos de regras da skill para o projeto (9.7 arquivos por execução em média).
- O conjunto de verificações tem efeito teto: com todas as execuções no máximo, ele só pode dizer que a skill não fez mal, não que ela nunca ajuda. Seriam necessárias tarefas mais difíceis (adaptadores de driver do Prisma 7, recursos mais novos que o modelo talvez não conheça) para encontrar um benefício.
Pontuações por dimensão
| Dimensão | Pontuação | Por quê |
|---|---|---|
| 1_output_quality | 5.0 | Pontuação média de 5.00/5 com a skill (verificações programáticas, veja a tabela por tarefa). |
| 2_lift_vs_no_skill | 2.0 | +0.00 pontos vs 5.00 sem a skill (n=2 por tarefa; abaixo de ~1 ponto é ruído). |
| 3_trigger | 5.0 | Arquivo da skill lido em 6/6 execuções com a skill. |
| 4_instructions_portability | 3 | SKILL.md mais cerca de dez arquivos de regras; apenas documentação. |
| 5_efficiency | 5 | 1.05x tokens (97k vs 92k por execução) e 0.92x tempo (40s vs 44s). |
| 6_safety_hygiene | 4 | Scanner relata 9 CRITICAL, todas são menções, em contexto, a
|
Limites deste teste
- Verificações baseadas em regras sobre o texto do código; nenhum cliente Prisma foi gerado e nenhuma consulta foi executada (offline, sem banco de dados).
- Todos os grupos no teto: as tarefas medem Prisma idiomático básico que o modelo base já conhece.
- n=2 por célula; conhecimento de APIs mais novas (a parte que uma skill de documentação provavelmente acrescenta) não é exercitado.
- n = 2 por grupo por tarefa: diferenças abaixo de ~1 ponto são ruído.
- A pontuação baseada em regras mede o que as verificações conseguem ver; ela não julga bom gosto nem se o resultado é o melhor possível.
Segurança
Consulte security.md. Varredura: 9 CRITICAL / 9 HIGH / 0 MEDIUM. Veredito: seguro para executar (sandbox sem rede). Uma varredura limpa não prova que uma skill é segura.
Conclusão
No trabalho cotidiano com o Prisma Client, o Codex sem skill já está correto, então a skill acrescenta um pequeno custo de tokens sem mudança visível aqui. Ela pode importar para recursos muito novos do Prisma que este teste não abordou.
Transcrição
Log de execuções: prisma-client-api (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) Colunas: tarefa, grupo-execução, nota (0-5), tokens, segundos, verificações aprovadas, arquivos da skill abertos pelo agente. t1-queries control-1: nota 5.0, tokens 84040, s 35.0, verificações 7/7, nada aberto t1-queries control-2: nota 5.0, tokens 83803, s 36.4, verificações 7/7, nada aberto t1-queries oneliner-1: nota 5.0, tokens 83731, s 38.4, verificações 7/7, nada aberto t1-queries oneliner-2: nota 5.0, tokens 83779, s 38.1, verificações 7/7, nada aberto t1-queries treatment-1: nota 5.0, tokens 110031, s 39.9, verificações 7/7, abriu prisma-client-api t1-queries treatment-2: nota 5.0, tokens 100691, s 36.8, verificações 7/7, abriu prisma-client-api t2-n-plus-1 control-1: nota 5.0, tokens 103258, s 57.7, verificações 3/3, nada aberto t2-n-plus-1 control-2: nota 5.0, tokens 103374, s 54.2, verificações 3/3, nada aberto t2-n-plus-1 oneliner-1: nota 5.0, tokens 103307, s 51.8, verificações 3/3, nada aberto
18 execuções, 3 artefatos
Resultado de exemplo
SOTA · With the skill: src/queries.ts (t1-queries, run 1, Codex)
import { prisma } from "./db"; export function getUserWithPosts(id: number) { return prisma.user.findUnique({ where: { id }, include: { posts: { where: { published: true }, orderBy: [{ createdAt: "desc" }, { id: "desc" }], take: 10, }, }, }); } // Pass the last post's id as the cursor for the next page. export function searchPosts(term: string, cursor?: number) { return prisma.post.findMany({ where: { title: { contains: term, mode: "insensitive" } }, orderBy: { id: "asc" }, take: 20, ...(cursor !== undefined ? { cursor: { id: cursor }, skip: 1 } : {}), }); } export function upsertUser(email: string, name: string | null) { return prisma.user.upsert({ where: { email }, update: { name }, create: { email, name }, }); } // Returns { count } with the number of posts transferred. export function transferPosts(fromId: number, toId: number) { return prisma.$transaction(async (tx) => { await tx.user.findUniqueOrThrow({ where: { id: fromId } }); await tx.user.findUniqueOrThrow({ where: { id: toId } }); return tx.post.updateMany({ where: { authorId: fromId }, data: { authorId: toId }, }); }); } // Includes authors with posts; each row has { authorId, _count: { _all } }. export function postCountsByAuthor() { return prisma.post.groupBy({ by: ["authorId"], _count: { _all: true }, orderBy: { authorId: "asc" }, }); }