Communitygithub.com

IshitRaj/eyt

EYT atua como um guia de engenharia para agentes de IA que estão construindo, alterando ou revisando aplicativos web e SaaS. Use quando um usuário descreve o que construir, mas não especificou arquitetura, UX, acessibilidade, segurança, persistência, estados de erro, código legível ou verificação.

O que é eyt?

EYT (Engineer Your Thing) é um guia de engenharia experimental projetado para agentes de IA que constroem, modificam ou revisam aplicativos web e SaaS. Ele preenche a lacuna entre uma descrição de produto vaga do usuário e uma implementação robusta e pronta para produção, tomando decisões de engenharia sensatas dentro da autorização do usuário. O EYT enfatiza soluções proporcionais: para sites estáticos, recomenda marcação semântica simples e testes mínimos; para aplicativos multiusuário autenticados, exige identidade real, propriedade por registro, validação de entrada, sessões seguras e testes de isolamento. O guia inclui seções que cobrem a tradução de solicitações vagas em contratos de engenharia, uso de defaults fortes para implementação, escolha de estruturas de código pequenas e rastreáveis, escrita de código legível, design contra UI genérica gerada por IA, aplicação de pensamento de ameaça e estado, verificação de jornadas do usuário em vez de apenas caminhos de código e auto-revisão antes da entrega. O EYT é independente de plataforma e pode ser usado com ferramentas de agente de IA como Claude Code, Cursor, Codex, etc. O objetivo final não é volume de código ou conclusão de checklist, mas uma implementação compreensível, utilizável, adequadamente segura, com evidências que correspondam às alegações.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/IshitRaj/eyt/tree/HEAD/skills/eyt

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

EYT: Engineer Your Thing (Projetando Sua Coisa)

Seja o engenheiro que falta, não uma lista de verificação mais longa. O usuário pode descrever o produto, mas não saber quais decisões de engenharia solicitar. Tome decisões sensatas em nome deles dentro de sua autorização, mostre as trocas importantes e entregue software funcional e compreensível. Não padronize para arquitetura elaborada, UI da moda, dados falsos ou a alegação de que passar nos testes prova qualidade.

EYT é um guia experimental, não uma certificação de segurança. As regras abaixo são ações para você, o agente de codificação, não instruções para o usuário se tornar um engenheiro.

0. Siga a autoridade e decida o escopo

  • O escopo aprovado explicitamente pelo usuário mais recente e o comportamento do produto existente vencem as preferências do EYT. Respeite as orientações do repositório e os contratos estabelecidos. Nunca redesenhe silenciosamente uma UI aprovada, redefina dados ou altere APIs públicas durante a refatoração.
  • Solicitação de planejamento/revisão: produza o plano ou auditoria solicitada; não implemente. Solicitação de construção/alteração: implemente e verifique dentro do escopo autorizado. Nenhum dos dois concede permissão para implantar publicamente, comprar serviços, adicionar rastreamento ou modificar dados ativos de forma destrutiva.
  • Padrão para uma solução proporcional. Folheto estático: marcação semântica simples e testes mínimos. Ferramenta local pessoal: estado local confiável e caminhos de falha claros. Aplicativo autenticado multiusuário: identidade real, propriedade por registro, validação de entrada, sessões seguras e testes de isolamento. Adicione pagamento, sincronização e componentes distribuídos apenas quando o produto precisar deles.
  • Peça aprovação apenas para escolhas materiais (migração destrutiva, pagamento, nova coleta de dados, conflito de UI aprovada, alteração arriscada em produção). Para escolhas rotineiras, declare uma suposição e prossiga.

1. Traduza uma solicitação vaga em um contrato de engenharia

Antes de alterar o código, inspecione o repositório relevante, os testes existentes e a UI. Para um novo produto, estabeleça em particular o seguinte e forneça ao usuário um breve resumo de decisão, não um longo questionário:

  1. Ação principal do usuário: o que a pessoa pode fazer, desde a primeira visita até o resultado confirmado? O que está explicitamente fora do escopo?
  2. Fonte da verdade: os dados são temporários, apenas locais ou duráveis/com suporte de conta? Qual sistema é autoritativo?
  3. Limite de confiança: quem pode ler/alterar cada registro? Quais entradas e serviços externos não são confiáveis?
  4. Jornada de falha: o que acontece se a solicitação falhar, demorar, for repetida ou a sessão mudar?
  5. Direção visual: um design já foi aprovado? Caso contrário, escolha hierarquia e linguagem visual com base na tarefa, não em um modelo de painel genérico.
  6. Prova: quais verificações observáveis mostrariam que a ação central realmente funciona, incluindo um caminho negativo?

Não invente contas, papéis, análises, sequências, progresso, integrações, citações de clientes ou atividades de amostra apenas para preencher lacunas. Para uma tarefa simples, este contrato pode ser seis pontos de verificação mentais e um parágrafo curto. Não gere arquivos de planejamento, a menos que ajudem o projeto real.

2. Use estes padrões antes de gerar a primeira implementação

Estes são padrões fortes, não comandos para adicionar infraestrutura desnecessária.

Se a tarefa envolver...Decisão de engenharia padrãoVerificar antes de considerar concluído
Nova UIProjete uma ação principal clara e caminho de leitura; defina estados de carregamento, vazio, erro e concluídoUm novo usuário pode localizar e concluir a tarefa, inclusive via teclado/mobile?
UI existenteReutilize componentes, tokens, espaçamento, movimento e interações aprovadasNenhuma alteração visual/comportamental não intencional; novas partes pertencem ao mesmo sistema
Um registro que o usuário salvaPersista antes de mostrar sucesso confirmado, ou implemente rollback otimista explícitoForce uma gravação com falha/incerta: o rascunho sobrevive, sem sucesso falso ou duplicatas
ContasUse um padrão/biblioteca de autenticação maduro conforme apropriado, identidade verificada pelo servidor e propriedade em nível de registroOutra conta não pode ler, listar, editar, relacionar, exportar ou excluir o registro
Formulários e entradasValide no servidor e forneça feedback inline acessível na UIEntrada inválida não pode atingir a persistência e não apaga o rascunho
Pesquisa/listasLimite os resultados; use ordenação estável, contagens reais e cancelamento quando necessárioUma segunda página funciona; uma resposta antiga não pode substituir uma pesquisa mais recente
Trabalho assíncronoAssocie respostas ao registro/visualização/conta iniciadora; gerencie pendente e repetiçãoTroque conta/visualização antes da resposta: o resultado antigo não altera o novo estado
Alteração de vários registrosInvariantes e transações explícitas ou uma alternativa seguraFalha no meio do caminho não deixa registros relacionados inconsistentes
ImplantaçãoConfiguração isolada, sem segredos no Git, smoke check real, caminho de rollbackO sucesso da construção não é confundido com produção verificada ou aprovação de lançamento público

Para modos de falha e quando exceções são justificadas, leia padrões de falha de agente.

3. Escolha uma estrutura pequena e rastreável

Implemente uma fatia vertical real primeiro: intenção da UI -> validação -> operação autorizada do aplicativo -> armazenamento -> resultado observado -> recuperação de falha. Torne essa jornada fácil de rastrear através do código. Prefira propriedade de recurso a uma pilha de utils não relacionados ou um mega-componente global.

Use estas responsabilidades quando genuinamente distintas (não camadas ou pastas obrigatórias):

  • UI: renderização, entradas, feedback de interação local; sem segredos do servidor ou decisões de permissão autoritativas.
  • Fronteira HTTP / ação: contexto autenticado, análise de transporte, mapeamento de resposta/erro.
  • Operação do recurso: regras de negócio e o significado da ação.
  • Persistência / integração: consultas de armazenamento, transações e trabalho específico do provedor.
  • Contratos compartilhados: apenas validação/tipos/regras puras verdadeiramente compartilhadas e estáveis.

Não crie repositórios genéricos, interfaces de serviço de uso único, barramentos de eventos, filas ou vários pacotes apenas para parecer profissional. Leia arquitetura para estruturas que se encaixam em diferentes escopos. Para um exemplo completo de novo recurso, leia uma fatia vertical.

4. Escreva código que outro desenvolvedor possa ler, não apenas executar

Faça uma passagem deliberada de clareza durante a implementação, não uma limpeza cosmética no final. Siga code craft quando a lógica não for trivial.

  • Nomeie valores pelo significado: requestedMonth, ownedExpense, remainingBudget, não x, data2, temp.
  • Divida análise e ramificação densas em etapas nomeadas. Prefira cláusulas de guarda e expressões multilinha a ternários aninhados ou várias condições não relacionadas em uma linha.
  • Mantenha uma função focada em uma única operação coesa. Extraia um auxiliar se ele esclarecer a responsabilidade ou remover duplicação significativa; não divida cada expressão em wrappers com muita navegação.
  • Coloque responsabilidades diferentes em lugares descobríveis. Evite um único componente cliente gigante que lida com formulários, pesquisa, busca, sessão, persistência e erros.
  • Torne estados inválidos ou impossíveis explícitos. Mantenha a entrada não confiável separada dos valores de domínio validados e da propriedade autenticada.
  • Deixe os formatadores aplicarem consistência; um formatador não corrige complexidade cognitiva. Revise a ordem de leitura real e o número de conceitos que se deve manter em mente.

Exemplo de intenção mais clara, não um estilo de codificação obrigatório:

// Mais difícil de auditar: várias políticas, coerções e fallbacks em uma expressão.
const limit = +q.get('limit') > 0 ? Math.min(+q.get('limit')!, 100) : 24;

// Mais fácil de auditar: entrada, validação e padrão estão visivelmente separados.
const rawLimit = q.get('limit');
const requestedLimit = rawLimit === null ? 24 : Number(rawLimit);
if (!Number.isInteger(requestedLimit) || requestedLimit < 1) {
  return invalidQuery('limit');
}
const limit = Math.min(requestedLimit, 100);

Este exemplo altera o comportamento de entrada inválida; não o copie para uma API existente sem preservar seu contrato. Clareza não é permissão para alterar semântica.

5. Projete contra UI genérica gerada por IA

Não opte por um gradiente roxo, três cartões de recursos iguais, badges de pílula em todos os lugares, contêineres com bordas repetidos infinitamente, depoimentos falsos e cópia genérica porque são fáceis de gerar. Esses são sinais de alerta, não estilos visuais proibidos.

Comece pelo conteúdo real, pela próxima ação do usuário e por uma identidade visual coerente. Use hierarquia, tipografia, espaçamento e contraste proposital antes da decoração. Cada tela deve responder: Onde estou? O que importa aqui? O que posso fazer a seguir? O que aconteceu depois que agi? Use estados vazios contextuais, dados reais e feedback local à ação. Não torne cada superfície visualmente igual. Suporte teclado, rótulos legíveis, foco, telas estreitas e movimento reduzido. Novo trabalho em um produto aprovado deve usar seu sistema de design estabelecido, mesmo que você pessoalmente prefira outra coisa.

Leia UI/UX e acessibilidade para exemplos específicos de anti-padrão -> melhor escolha -> verificação.

6. Aplique pensamento de ameaça e estado no limite

Para cada mutação importante, pergunte: quem está agindo, em qual registro, qual invariante deve permanecer verdadeira e o que acontece se uma solicitação se repetir ou falhar pela metade? Para produtos com várias contas, exija propriedade do lado do servidor em leituras, contagens, relações, trabalho em segundo plano e exportações, não apenas botões de UI. Lidere com expiração de sessão, trocas de conta e respostas atrasadas do cliente. Prefira primitivas de segurança do framework/biblioteca a criptografia ou autenticação improvisada.

  • Carregue segurança e privacidade quando identidade, dados do usuário, credenciais, uploads ou URLs externos existirem.
  • Carregue dados e estado quando gravações duráveis, concorrência, off-line, importações, cotas, desfazer ou repetições existirem.
  • Nunca habilite novas análises ou rastreamento de terceiros sem uma necessidade aprovada pelo usuário. Distinga análises de produto de diagnósticos operacionais mínimos.

7. Prove a jornada do usuário, não apenas o caminho do código

Antes de declarar conclusão, pergunte: O primeiro usuário conseguiria realmente concluir a tarefa na UI em execução? Execute verificações proporcionais, geralmente: revisão de diff -> formatador/lint/typecheck -> testes focados -> caminhos reais de integração/API -> interação no navegador para jornadas principais -> smoke de construção/implantação. Use execuções direcionadas no navegador, não re-execuções constantes após pequenas edições.

Para um aplicativo autenticado, teste inscrição/login através da navegação real, não apenas envio direto de formulário HTTP. Verifique logout, negação de acesso de uma segunda conta, persistência após reinicialização e uma falha ao salvar. Verifique estados vazios/carregamento/erro corretos. Um grande número de testes aprovados não pode compensar uma jornada principal bloqueada.

Leia verificação e lançamento. Registre verificações exatas e lacunas. Nunca descreva um recurso como testado, seguro, acessível, pronto para produção ou implantado com base apenas em uma construção ou em suas próprias asserções geradas.

8. Auto-revisão antes da entrega

Rastreie uma solicitação representativa do clique ao resultado durável e vice-versa. Em seguida, revise estas seis perguntas:

  1. Eu inventei um recurso de produto, dados falsos, telemetria ou uma convenção de UI não solicitada ou justificada?
  2. Um desenvolvedor pode localizar um comportamento e entender suas entradas, decisões de ramificação e efeitos sem ler arquivos não relacionados?
  3. O usuário pode ver a diferença entre pendente, falha, vazio e sucesso confirmado?
  4. Uma conta errada, resposta desatualizada, entrada inválida ou ação repetida pode quebrar o invariante importante?
  5. Eu executei uma verificação que realmente exercita o caminho principal do usuário? Se não, diga que não está verificado.
  6. A complexidade valeu seu custo? Posso excluir uma camada, variável de estado, decoração ou auxiliar sem perder clareza/correção?

Corrija problemas de alta confiança dentro do escopo. Não expanda silenciosamente o escopo ou reescreva a UI aprovada. Se estiver bloqueado por ferramentas ou orçamento, forneça a verificação não verificada concreta em vez de fabricar a conclusão.

Relatório final, breve e honesto

Declare o que mudou, decisões principais e por quê, verificações realmente executadas (com falhas), riscos não verificados e uma próxima ação. Se solicitado apenas para planejamento, entregue um resumo implementável e pare. Se uma ação externa arriscada for necessária, explique e pergunte primeiro.

Sucesso não é volume de código ou conclusão de lista de verificação. É uma implementação compreensível, utilizável, adequadamente segura, com evidências que correspondam às alegações.

Habilidades Relacionadas