Que fait portfolio-kup ?
Créez le profil de l'utilisateur à partir de preuves réelles, puis générez une page web one-page bilingue (th/fr). Répondez à l'utilisateur en thaï ; les termes techniques restent en anglais.
Procédure
Suivez l'ordre · Pour toute question nécessitant une décision de l'utilisateur, utilisez AskUserQuestion · Pour les sujets riches en données, résumez d'abord dans le chat avant de les ajouter à la page.
1. Collecte de données
- Demandez s'il existe d'autres machines utilisant Claude Code (ssh
user@host) · Si l'utilisateur les a déjà fournies dans la demande, ne demandez pas. - Exécutez le script sur chaque machine (ne renvoyez que les chiffres, sans texte d'invite ni clé) :
S=~/.claude/skills/portfolio-kup/scripts; D=<scratchpad>/pk; mkdir -p $D python3 $S/collect.py > $D/local.json ssh -o BatchMode=yes user@host python3 - < $S/collect.py > $D/host1.json python3 $S/merge.py $D/*.json > $D/metrics.json # tableau récapitulatif sur stderr - Lisez le contenu des prompts vous-même pour une évaluation qualitative (
~/.claude/history.jsonlchampsdisplay,project) · Échantillonnez aléatoirement sur tous les projets/mois · Ne copiez aucune clé/token/mot de passe trouvé dans la réponse ou la page ; comptez-les uniquement.
Limites à communiquer à l'utilisateur :
history.jsonlne compte que les saisies de l'utilisateur · Les périodes où l'agent travaille longtemps ne sont pas comptabilisées.- Les transcriptions (
~/.claude/projects/**/*.jsonl) sont supprimées au-delà decleanupPeriodDays(valeur par défaut 30 jours) · Les tokens et le temps de travail de l'IA ne couvrent donc que la période récente. - Pour les mois avec moins de 100 prompts (
enough_data: false), les chiffres fluctuent fortement ; ne les utilisez pas pour des comparaisons. - Le comptage des comportements est basé sur des mots-clés ; il indique des tendances, pas une mesure précise.
2. Évaluation (réponse dans le chat)
- Métier probable · Niveau (Junior / Mid / Senior) · Forces, faiblesses avec preuves
- Soyez direct, ne flattez pas exagérément · Distinguez "livrable grâce à une bonne maîtrise de l'IA" de "compréhension personnelle du fond"
- Si vous trouvez une clé/secret dans l'historique → prévenez immédiatement de la faire pivoter (indiquez le type, pas la valeur)
3. Test (si l'utilisateur veut vérifier s'il est vraiment faible)
- 2 séries de 4 questions via
AskUserQuestion· Les questions sont des situations issues du travail réel de l'utilisateur (sa stack) - Mélangez deux formats : symptôme → cause et explication du mécanisme sous-jacent · Les options sont de longueur équivalente, sans suggérer la réponse
- Énoncez les règles : pas d'aide de l'IA · Si l'utilisateur ne sait pas, il répond "Je ne sais pas"
- Corrigez chaque question avec une brève justification, puis résumez le profil (ex. symptôme 4/4, mécanisme 0/4)
4. Salaire et parcours
- Effectuez une
WebSearchde typeextendedavec plusieurs requêtes simultanées (TH + EN, année en cours) · Citez les sources à chaque fois - Distinguez AI/ML Engineer (qui crée des modèles) de AI Application Engineer (qui utilise l'IA dans des apps) · Les fourchettes sont très différentes
- Pensez large : listez 8 à 10 métiers correspondant aux compétences + personnalité + progression (pas seulement techniques : consultant, pre-sales, formateur, produit EdTech, freelance) · Réduisez ensuite à 3 parcours les plus adaptés + maximum 5 métiers secondaires comme étiquettes · Mentionnez les métiers "pas encore adaptés" dans le chat, sans les mettre dans la page
- Fournissez une seule recommandation claire sur la direction à prendre (en fonction des objectifs issus de l'entretien) avec un plan en 3 phases
- Sur la page web, le salaire est affiché sous forme de
*par défaut ; ne mettez les chiffres que si l'utilisateur le demande
5. Entretien
Appelez le skill grilling (ou grill-me) en posant des questions par rounds via AskUserQuestion :
Raison de vouloir ce parcours · Expérience avec des personnes/clients en dehors du chat · Calendrier · Projets existants (personnels ou entreprise) ·
Temps libre par semaine · Définition de la réussite · Critères pour continuer/arrêter
- Si les réponses se contredisent ou ne répondent pas à la question → reposez la question
- Signalez directement les schémas observés (ex. répond "tout prendre" quand on ne force pas un choix) · Indiquez les points de désaccord, mais laissez l'utilisateur décider
- Terminez par un résumé de la compréhension commune, puis attendez la confirmation avant d'éditer la page
6. Création de la page web
- Copiez
templates/onepage.htmldans le scratchpad puis modifiez uniquement le JSON dans<script id="profile">· Chaque texte est un objet{"th":…,"fr":…} Artifact→quickstart(intentother) la première fois, puis publiez · icôneprofile- Modifiez selon les retours avec Edit + publiez le même fichier (même URL)
Règles de conception (issues des retours utilisateurs réels · ne pas enfreindre)
| Sujet | À faire | À ne pas faire |
|---|---|---|
| Structure de page | Colonne unique, lecture de haut en bas · Identité → 01 Compétences → 02 Mode de travail → 03 Progression → 04 Perspectives · Largeur jusqu'à 1600px selon l'écran | Sidebar latérale · Panneau foncé différent des autres · Largeur fixe étroite |
| Perspectives (04) | Boîte "Recommandation" : 1 conseil + 1 phrase de raison + plan 3 phases · Cartes 3 parcours : seulement Préparation / Pourquoi ça convient / À combler · Badge ★ Recommandé en haut à droite de la carte choisie · "Peut aussi faire" en badge une ligne · "Que faire en premier" ≤4 éléments | Tableau de métiers long · Badges d'étape / premier pas / salaire dans les cartes · Infos redondantes avec le plan 3 phases (l'utilisateur dit "brouillon") |
| Couleurs | Tous les panneaux utilisent une seule palette (fond blanc, bordure fine) · Bleu = soft/amélioration · Or = dur/objectif · Rouge = attention/maintenant | Mélange de plusieurs tons |
| Avertissements sur les sources | Boîte tout en haut listant toutes les sources + ce qui n'est pas compté + "Évaluation par IA, pas une certification" | Sources cachées en bas de page |
| Langue | Thaï par défaut + bouton Th/Fr · Utilisez they/them ou évitez les pronoms en français | Deviner le genre à partir du prénom |
| Compréhensible par un non-initié | Langage simple · Comparaisons comme "moitié", "double", "un tiers" | Noms de projets internes · Numéros de questions d'entretien (Q20) · Chiffres bruts sans unité ("43 fois", nombre de prompts) · Jargon comme "502 Traefik" |
| Compétences | Radar + badges 3 niveaux (Fort / Moyen / À renforcer) dans la section Compétences · Soft et Hard côte à côte, liste numérotée 01– avec badge de preuve · Hard inclut le nom de l'outil | Barres de progression à côté des traits de personnalité (l'utilisateur ne comprend pas ce que "plein" signifie) · Cartes de hauteur inégale |
| Personnalité | Nommez les soft skills comme les RH · Persona : un nom + une phrase · Style en barres bipolaires · "Traits à surveiller" dans une boîte séparée | Intégrer les résultats du test comme un panneau dans la page (l'utilisateur les a demandés retirés) |
| Heures de travail | Graphique des heures commençant à 06:00 · Jours de la semaine en % du total, avec une ligne expliquant ce qu'est le % | Axe des ordonnées avec des comptes |
| Progression | Échelle cliquable, une étape à la fois · Hauteur = niveau de compétence (nom du niveau sur la barre) · Badge "▼ Vous êtes ici" · Chaque étape : Réalisé / Encore des lacunes / Point de bascule · "Comparé à l'étape précédente" seulement pour les mois avec suffisamment de données · Token uniquement pour les étapes avec transcription · Dernière étape = objectif (ligne pointillée dorée) | Graphique du nombre de prompts par mois (l'utilisateur ne comprend pas) · Tous les détails de chaque étape affichés en même temps |
| Salaire | * + explication dans la boîte d'avertissement et en bas de page | Chiffres de salaire sans demande |
| Confidentialité | Pas de clé, IP, hostname, email · Chiffres négatifs rédigés sans humiliation ("a déjà collé une clé là où il ne fallait pas") | Publier/pusher la page de profil réelle publiquement sans demander |
Fichiers dans le skill
scripts/collect.py· Collecte les chiffres d'une seule machine (prompts mensuels, comportements, heures/jours, tokens, timestamps) · N'envoie pas de textescripts/merge.py· Fusionne plusieurs machines →metrics.json(mensuel,enough_data, % heures à partir de 06:00, % jours, heures de travail manuel vs IA, tokens)templates/onepage.html· Page web rendue à partir d'un seul JSON · Les données du fichier sont un exemple fictif
Correspondance metrics → contenu de la page
metrics.json | Utilisé où |
|---|---|
hours_pct_from_6am[].pct | hoursPctFrom6am (24 valeurs, de 06:00) |
weekday_pct | weekdayPct |
late_night_pct | hoursNote ex. "près d'un tiers du travail après 21h" |
monthly[*] avec enough_data | stages[i].compare.items (comparaison avec étape précédente) · stages[i].peak/hot mois le plus chargé |
tokens[*] | stages[i].tokens (uniquement les mois concernés) · Proportion de cache read |
hands_on_hours / ai_working_hours | Résumé dans le chat "~X h/semaine de travail manuel · ~Y h/semaine de travail IA" |
secrets_pasted > 0 | Alerte dans le chat + "Traits à surveiller" + premier élément de acts |
Partie JSON 04 dans le template
rec·title,reason,phases[](when,t,d) recommandation en 3 phasespaths[]· 3 parcours :tag,title,ready(0–100),fits,gap,pick: truepour le parcours recommandé,gold: truepour le parcours indépendant/founderalso[]· Noms des métiers secondaires ≤5 (texte simple)acts[]· ≤4 éléments (t,d)