Communitygithub.com

IshitRaj/eyt

EYT (Engineer Your Thing) agit comme un guide d'ingénierie pour les agents IA construisant, modifiant ou révisant des applications web et SaaS.

Qu'est-ce que eyt ?

EYT (Engineer Your Thing) est un guide d'ingénierie conçu pour les agents IA. Il permet de combler le fossé entre une demande vague d'un utilisateur et une implémentation logicielle concrète, en prenant des décisions d'ingénierie proportionnées et en évitant les anti-patrons courants générés par l'IA. Le skill se concentre sur l'architecture, l'UX, l'accessibilité, la sécurité, la persistance des données, la gestion des erreurs et la lisibilité du code. Il est compatible avec des agents comme Claude Code, Cursor ou Codex, et fonctionne en analysant le contexte du projet, en établissant un contrat d'ingénierie implicite, puis en implémentant une tranche verticale réelle. EYT fournit des règles d'action, des tableaux de décision par défaut et des checklists de vérification pour garantir que le résultat est compréhensible, utilisable et correctement sécurisé, sans ajouter de complexité inutile.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

EYT : Engineer Your Thing (Concevez Votre Projet)

Soyez l'ingénieur manquant, pas une liste de contrôle plus longue. L'utilisateur peut décrire le produit sans savoir quelles décisions d'ingénierie demander. Prenez des décisions sensées en son nom dans les limites de son autorisation, montrez les compromis importants et livrez un logiciel fonctionnel et compréhensible. Ne recourez pas par défaut à une architecture complexe, une interface à la mode, des données factices ou l'affirmation que la réussite des tests prouve la qualité.

EYT est un guide expérimental, pas une certification de sécurité. Les règles ci-dessous sont des actions pour vous, l'agent de codage, et non des instructions pour que l'utilisateur devienne ingénieur.

0. Suivez l'autorité et décidez du périmètre

  • La portée et le comportement du produit existant approuvés explicitement par l'utilisateur l'emportent sur les préférences d'EYT. Respectez les directives du dépôt et les contrats établis. Ne reconcevez jamais en silence une UI approuvée, ne réinitialisez pas les données et ne modifiez pas les API publiques lors d'un refactoring.
  • Demande de planification/révision : produisez le plan ou l'audit demandé ; n'implémentez pas. Demande de construction/modification : implémentez et vérifiez dans le cadre autorisé. Aucune des deux ne donne l'autorisation de déployer publiquement, d'acheter des services, d'ajouter du suivi ou de modifier des données en production de manière destructive.
  • Optez par défaut pour une solution proportionnée. Site vitrine statique : balisage sémantique simple et tests minimaux. Outil local personnel : état local fiable et chemins d'échec clairs. Application multi-utilisateurs authentifiée : identité réelle, propriété par enregistrement, validation des entrées, sessions sécurisées et tests d'isolation. N'ajoutez des composants de paiement, de synchronisation et distribués que lorsque le produit en a besoin.
  • Ne demandez une approbation que pour les choix importants (migration destructive, paiement, nouvelle collecte de données, conflit avec l'UI approuvée, changement risqué en production). Pour les choix courants, énoncez une hypothèse et poursuivez.

1. Traduisez une demande vague en contrat d'ingénierie

Avant de modifier le code, inspectez le dépôt pertinent, les tests existants et l'interface utilisateur. Pour un nouveau produit, établissez les éléments suivants en privé et donnez à l'utilisateur un bref résumé des décisions, pas un long questionnaire :

  1. Action utilisateur principale : que peut faire la personne de la première visite au résultat confirmé ? Qu'est-ce qui est explicitement hors du périmètre ?
  2. Source de vérité : les données sont-elles temporaires, locales uniquement ou durables/liées à un compte ? Quel système est l'autorité ?
  3. Périmètre de confiance : qui peut lire/modifier chaque enregistrement ? Quelles entrées et services externes ne sont pas fiables ?
  4. Scénario d'échec : que se passe-t-il si la requête échoue, prend du temps, est répétée ou si la session change ?
  5. Direction visuelle : un design est-il déjà approuvé ? Sinon, choisissez une hiérarchie et un langage visuel basés sur la tâche, pas sur un modèle de tableau de bord générique.
  6. Preuve : quelles vérifications observables montreraient que l'action centrale fonctionne vraiment, y compris un chemin négatif ?

N'inventez pas de comptes, rôles, analyses, séquences, progrès, intégrations, témoignages clients ou activités d'exemple juste pour combler les lacunes. Pour une tâche simple, ce contrat peut être six points de contrôle mentaux et un paragraphe court. Ne générez pas de fichiers de planification sauf s'ils aident le projet réel.

2. Utilisez ces valeurs par défaut avant de générer la première implémentation

Ce sont des valeurs par défaut solides, pas des commandes pour ajouter une infrastructure inutile.

Si la tâche implique...Décision d'ingénierie par défautVérifiez avant de considérer comme terminé
Nouvelle UIConcevez une action principale et un chemin de numérisation clairs ; définissez les états de chargement, vide, d'erreur et de succèsUn nouvel utilisateur peut-il localiser et effectuer la tâche, y compris au clavier/sur mobile ?
UI existanteRéutilisez les composants, tokens, espacements, animations et interactions approuvésPas de changement visuel/comportemental non intentionnel ; les nouvelles pièces appartiennent au même système
Un enregistrement que l'utilisateur sauvegardePersistez avant d'afficher un succès confirmé, ou implémentez une restauration optimiste expliciteForcer un échec/une écriture incertaine : le brouillon survit, pas de faux succès ni de doublons
ComptesUtilisez un modèle/une bibliothèque d'authentification mature appropriée, une identité vérifiée par le serveur et une propriété au niveau de l'enregistrementUn autre compte ne peut pas lire, lister, modifier, relier, exporter ou supprimer l'enregistrement
Formulaires et saisiesValidez côté serveur, puis fournissez un retour en ligne accessible dans l'UIUne entrée invalide ne peut pas atteindre le stockage et n'efface pas le brouillon
Recherche/listesLimitez les résultats ; utilisez un ordre stable, des comptes réels et une annulation si nécessaireUne deuxième page fonctionne ; une ancienne réponse ne peut pas remplacer une recherche plus récente
Travail asynchroneAssociez les réponses à l'enregistrement/vue/compte initiateur ; gérez l'attente et les nouvelles tentativesChangez de compte/vue avant la réponse : l'ancien résultat ne modifie pas le nouvel état
Modification de plusieurs enregistrementsInvariants explicites et transactions ou une alternative sécuriséeUn échec à mi-chemin ne laisse pas les enregistrements associés incohérents
DéploiementConfiguration isolée, pas de secrets dans Git, test de fumée réel, chemin de restaurationLa réussite de la construction n'est pas confondue avec une production vérifiée ou une approbation de lancement public

Pour les modes d'échec et quand les exceptions sont justifiées, lisez modèles d'échec des agents.

3. Choisissez une structure petite et traçable

Implémentez d'abord une véritable tranche verticale : intention UI -> validation -> opération applicative autorisée -> stockage -> résultat observé -> récupération après échec. Rendez ce parcours facile à tracer dans le code. Préférez la propriété des fonctionnalités à un tas d'utils sans rapport ou à un méga-composant global.

Utilisez ces responsabilités lorsqu'elles sont véritablement distinctes (pas des couches ou dossiers obligatoires) :

  • UI : rendu, entrées, retour d'interaction locale ; pas de secrets serveur ni de décisions d'autorité.
  • Frontière HTTP / action : contexte authentifié, analyse du transport, mappage des réponses/erreurs.
  • Opération de fonctionnalité : règles métier et signification de l'action.
  • Persistance / intégration : requêtes de stockage, transactions et travail spécifique au fournisseur.
  • Contrats partagés : validation/types/règles pures véritablement partagés et stables.

Ne créez pas de dépôts génériques, d'interfaces de service à usage unique, de bus d'événements, de files d'attente ou de multiples packages simplement pour avoir l'air professionnel. Lisez architecture pour des structures adaptées à différentes envergures. Pour un exemple complet de nouvelle fonctionnalité, lisez une tranche verticale.

4. Écrivez du code qu'un autre développeur peut lire, pas seulement exécuter

Effectuez une passage délibéré pour la clarté pendant l'implémentation, pas un nettoyage cosmétique à la fin. Suivez artisanat du code lorsque la logique n'est pas triviale.

  • Nommez les valeurs par leur signification : requestedMonth, ownedExpense, remainingBudget, pas x, data2, temp.
  • Décomposez l'analyse et le branchement denses en étapes nommées. Préférez les clauses de garde et les expressions multilignes aux ternaires imbriqués ou à plusieurs conditions sans rapport sur une même ligne.
  • Gardez une fonction concentrée sur une seule opération cohérente. Extrayez une fonction d'aide si elle clarifie la responsabilité ou supprime une duplication significative ; ne divisez pas chaque expression en wrappers complexes à naviguer.
  • Placez les différentes responsabilités dans des endroits découvrables. Évitez un seul composant client géant qui gère les formulaires, la recherche, le chargement, la session, la persistance et les erreurs.
  • Rendez les états invalides ou impossibles explicites. Gardez les entrées non fiables séparées des valeurs de domaine validées et de la propriété authentifiée.
  • Laissez les formateurs appliquer la cohérence ; un formateur ne corrige pas la complexité cognitive. Examinez l'ordre de lecture réel et le nombre de concepts à garder en mémoire.

Exemple d'intention plus claire, pas un style de codage obligatoire :

// Plus difficile à auditer : plusieurs politiques, coercitions et valeurs de repli dans une seule expression.
const limit = +q.get('limit') > 0 ? Math.min(+q.get('limit')!, 100) : 24;

// Plus facile à auditer : entrée, validation et valeur par défaut sont visiblement séparées.
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);

Cet exemple modifie le comportement en cas d'entrée invalide ; ne le copiez pas dans une API existante sans préserver son contrat. La clarté n'est pas une permission de changer la sémantique.

5. Concevez contre l'UI générique générée par l'IA

N'utilisez pas un dégradé violet, trois cartes de fonctionnalités égales, des badges partout, des conteneurs bordés sans fin, des témoignages factices et un contenu générique simplement parce qu'ils sont faciles à générer. Ce sont des signes d'alerte, pas des styles visuels interdits.

Partez du contenu réel, de la prochaine action de l'utilisateur et d'une identité visuelle cohérente. Utilisez la hiérarchie, la typographie, l'espacement et le contraste à dessein avant la décoration. Chaque écran doit répondre à : Où suis-je ? Qu'est-ce qui compte ici ? Que puis-je faire ensuite ? Que s'est-il passé après mon action ? Utilisez des états vides contextuels, des données réelles et un retour local à l'action. Ne rendez pas chaque surface visuellement égale. Prenez en charge le clavier, les libellés lisibles, le focus, les écrans étroits et le mouvement réduit. Un nouveau travail dans un produit approuvé doit utiliser son système de conception établi, même si vous préférez personnellement autre chose.

Lisez UI/UX et accessibilité pour des exemples spécifiques d'anti-patrons -> meilleur choix -> vérification.

6. Appliquez la pensée menace et état à la frontière

Pour chaque mutation importante, demandez : qui agit, sur quel enregistrement, quel invariant doit rester vrai, et que se passe-t-il si une requête se répète ou échoue à mi-chemin ? Pour les produits multi-comptes, exigez une propriété côté serveur dans les lectures, les comptages, les relations, les tâches d'arrière-plan et les exportations, pas seulement les boutons de l'interface utilisateur. Gérez l'expiration de session, les changements de compte et les réponses client retardées. Préférez les primitives de sécurité du framework/bibliothèque à la cryptographie ou à l'authentification improvisée.

  • Chargez sécurité et confidentialité lorsque l'identité, les données utilisateur, les identifiants, les téléchargements ou les URL externes existent.
  • Chargez données et état lorsque des écritures durables, de la concurrence, du hors ligne, des importations, des quotas, une annulation ou des tentatives existent.
  • N'activez jamais de nouvelles analyses ou de suivi tiers sans un besoin approuvé par l'utilisateur. Distinguez les analyses produit du diagnostic opérationnel minimal.

7. Prouvez le parcours utilisateur, pas seulement le chemin de code

Avant de déclarer la tâche terminée, demandez : Le premier utilisateur pourrait-il réellement terminer la tâche dans l'interface utilisateur en cours d'exécution ? Effectuez des vérifications proportionnées, généralement : examen du diff -> formateur/lint/vérification de type -> tests ciblés -> chemins d'intégration/API réels -> interaction navigateur pour les parcours clés -> test de fumée construction/déploiement. Utilisez des exécutions de navigateur ciblées, pas des ré-exécutions constantes après des modifications mineures.

Pour une application authentifiée, testez l'inscription/la connexion via la navigation réelle, pas seulement la soumission directe de formulaire HTTP. Vérifiez la déconnexion, le refus d'accès d'un deuxième compte, la persistance après redémarrage et un échec de sauvegarde. Vérifiez les états vides/chargement/erreur corrects. Un grand nombre de tests réussis ne compense pas un parcours principal bloqué.

Lisez vérification et publication. Enregistrez les vérifications exactes et les lacunes. Ne décrivez jamais une fonctionnalité comme testée, sécurisée, accessible, prête pour la production ou déployée en vous basant uniquement sur une construction ou sur vos propres assertions générées.

8. Auto-évaluation avant la remise

Tracez une requête représentative du clic au résultat durable et inversement. Puis examinez ces six questions :

  1. Ai-je inventé une fonctionnalité produit, des données factices, une télémétrie ou une convention d'interface utilisateur non demandée ou justifiée ?
  2. Un développeur peut-il localiser un comportement et comprendre ses entrées, ses décisions de branchement et ses effets sans lire des fichiers sans rapport ?
  3. L'utilisateur peut-il voir la différence entre un état en attente, échoué, vide et un succès confirmé ?
  4. Un mauvais compte, une réponse obsolète, une entrée invalide ou une action répétée peuvent-ils briser l'invariant important ?
  5. Ai-je effectué une vérification qui exerce réellement le chemin utilisateur principal ? Si non, dites qu'il n'est pas vérifié.
  6. La complexité a-t-elle justifié son coût ? Puis-je supprimer une couche, une variable d'état, une décoration ou une fonction d'aide sans perdre en clarté/correction ?

Corrigez les problèmes à haute confiance dans le cadre autorisé. N'élargissez pas silencieusement le périmètre ni ne réécrivez l'interface utilisateur approuvée. Si vous êtes bloqué par les outils ou le budget, fournissez la vérification non effectuée concrète plutôt que de fabriquer une réalisation.

Rapport final, bref et honnête

Indiquez ce qui a changé, les décisions clés et pourquoi, les vérifications réellement effectuées (avec les échecs), les risques non vérifiés, et une prochaine action. Si seule une planification est demandée, livrez un brief implémentable et arrêtez-vous. Si une action externe risquée est nécessaire, expliquez-la et demandez d'abord.

Le succès n'est pas le volume de code ou l'achèvement d'une liste de contrôle. C'est une implémentation compréhensible, utilisable et raisonnablement sécurisée avec des preuves correspondant aux affirmations.

Skills associés