Aller au contenu
let n = $state(0); {#if ok}{#each items as item} {/each}const t = $derived(a + b);<button onclick={() => n++}>let { data } = $props(); {/if}
1/2

CONTACT

Parlons de votre projet

Logo senhal

Montrez à votre agent ce que vous voulez dire, au lieu de le décrire.

senhal transforme une page web en quelque chose sur quoi votre agent de code peut vraiment agir. Dessinez sur la page, désignez les éléments dont vous parlez, puis remettez le tout en un seul geste.

  • Extension Chrome
  • Manifest V3
  • gratuite à l'usage
Barre d'outils senhal ouverte sur une page : trois éléments sélectionnés, chacun marqué d'un badge numéroté
Trois éléments retenus, badges numérotés, infobulle sur un quatrième. La page derrière est une démonstration fictive livrée avec l'extension.

Quatre temps

Du clic au prompt

  1. 1

    Ouvrez la barre

    Sur n'importe quelle page, par le bouton de l'extension ou le raccourci Alt+Shift+A. Une barre compacte : les outils sous la main, le reste à un clic dans un menu, chaque commande avec son raccourci clavier.

  2. 2

    Dessinez et annotez

    Flèche, cadre, main levée, texte, légende numérotée. Surlignez une phrase avant de cliquer : elle est citée dans l'annotation, votre agent sait quel texte exact est visé.

  3. 3

    Cliquez les éléments

    Chaque élément retenu reçoit un numéro et un sélecteur CSS. Le même numéro à l'écran, sur l'image et dans le Markdown — dessins et sélections partagent une seule chronologie.

  4. 4

    Appuyez sur Agent

    La session est écrite dans votre dossier de téléchargements, et un seul collage part dans le presse-papier. Votre agent lit les images tout seul depuis le disque.

Ce que reçoit votre agent

Un seul collage, un dossier sur votre disque

  • Des sélecteurs CSS vérifiés uniques

    Pas un sélecteur deviné : senhal préfère un attribut identifiant stable (id, data-testid, name, href, aria-label) et ne remonte l'arbre que s'il le faut. Le manifeste indique, pour chacun, combien d'éléments il désigne encore au moment de l'export — 1 signifie utilisable tel quel dans document.querySelector.

  • La capture annotée

    La zone visible de la page, avec vos dessins et les repères numérotés incrustés dessus.

  • Une vue rapprochée par élément

    Un fichier image par élément sélectionné, en plus de la vue d'ensemble.

  • prompt.md

    Vos notes, le texte cité, la liste numérotée de tout ce que vous avez marqué, et les erreurs et avertissements de la console de la page s'il y en a eu.

  • Un chemin de dossier ouvrable directement

    Chaque chemin est relevé auprès de Chrome, un par un. Sous Windows, le collage porte aussi la forme WSL (/mnt/c/…) : un agent lancé dans WSL ne peut rien faire d'un C:\.

Formulaire de note senhal ouvert sur un élément, avec le texte surligné repris en tête
Le texte surligné avant le clic est repris dans le formulaire de note.
Légende numérotée posée sur un élément d'une page, la queue de la bulle pointant la cible
Une légende pointe l'élément visé et porte une note : dessin et sélection dans la même chronologie.

Le dossier écrit à chaque export :

Téléchargements/senhal/session/
├── page.png          la page annotée : capture + dessins + repères numérotés
├── 01-button.png     une vue rapprochée par élément sélectionné
├── 02-input.png
├── prompt.md         vos notes, la liste numérotée, le journal console
└── manifest.json     l'index structuré que l'agent lit

Le dossier est fixe et réécrit : les fichiers de la session précédente sont supprimés d'abord, le chemin ne change jamais.

Aussi dans la barre

À un clic, chacun avec son raccourci

  • Capture pleine page

    La page entière, défilée écran par écran et recollée en un seul PNG, vos annotations comprises. Les en-têtes fixes n'apparaissent qu'une fois, en haut, au lieu de se répéter sur chaque écran.

  • Copier en Markdown

    Le contenu principal de la page, ou seulement le passage surligné, en Markdown propre : titres, listes, tableaux, blocs de code avec leur langage. À coller dans un chat d'IA ou chez votre agent.

  • Le panneau Stack

    Les technologies de la page, par catégorie et avec leur version quand la page la donne : CMS, frameworks, CSS, animation, mesure d'audience, hébergement. Lu dans la page elle-même, rien n'est cherché en ligne.

Menu ouvert sous la flèche du bouton Agent de senhal : capture pleine page et copie en Markdown, avec leurs raccourcis
La flèche à côté d'Agent : capture pleine page et copie en Markdown.
Panneau Stack de senhal ouvert sur giroucode.fr : Astro, Tailwind CSS et Matomo, rangés par catégorie
Le panneau Stack sur ce site : Astro, Tailwind CSS, Matomo.

Rien ne sort de votre machine

Et c'est vérifiable

senhal n'a aucun code réseau : pas de serveur, pas de compte, pas de télémétrie, pas d'analytique, pas de ping de mise à jour. Elle ne lit une page qu'après que vous l'ayez ouverte sur cette page, et n'écrit que dans votre propre dossier de téléchargements.

Le code est livré lisible et non obscurci. Ce n'est pas une négligence : c'est ce qui vous permet de vérifier vous-même l'affirmation ci-dessus. Une recherche de fetch,XMLHttpRequest, WebSocketou sendBeacon dans le dossier de l'extension ne rend rien. Une extension minifiée vous demanderait de me croire sur parole.

Aucune permission d'hôte n'est demandée : tant que vous n'activez pas l'outil sur un onglet, il n'a accès à rien.

Lire la politique de confidentialité(English version)

Ce qu'il ne fait pas

Limites connues de la version 1

  • L'export Agent capture la zone visible. La capture pleine page, elle, ne suit que le défilement de la fenêtre (pas celui d'un bloc interne) et réduit une page de plus de 16 384 px de haut.
  • Frame principale seulement : le contenu d'une iframe apparaît en pixels, pas en sélecteurs.
  • Un élément collant ou fixe peut recouvrir la cible après un défilement automatique.
  • Le gel des animations ne couvre que ce que le CSS anime : un carrousel piloté en JavaScript continue de bouger.
  • Journal console capté pendant que la barre est ouverte, 50 dernières entrées.
  • L'interface vit dans le DOM de la page : un script de la page peut voir ce que vous tapez et ce que vous sélectionnez. Sans conséquence sur votre propre application, à garder en tête sur un site tiers.
  • Ce que dit la page finit dans le prompt : traitez un export comme une entrée non fiable, exactement comme une issue GitHub qu'on colle à un agent.

Bon à savoir

Prérequis
Chrome 111 ou plus récent. Manifest V3, aucune permission d'hôte.
Langues
Interface et Markdown exporté en français, anglais, espagnol ou allemand — vous et votre agent lisez la même chose.
Confort
Barre horizontale ou verticale, thème clair ou sombre, position mémorisée, tous les raccourcis in-page remappables.
Licence
Gratuit à l'usage, en perso comme en entreprise. Le code n'est ni à redistribuer ni à réutiliser ailleurs : ce n'est pas un logiciel open source.

Questions fréquentes

Avec quels agents de code senhal fonctionne-t-il ?

N'importe lequel, du moment qu'il sait lire un dossier sur votre disque : Claude Code, Codex, Cursor, Cline, Aider. senhal n'a pas d'intégration propre à un agent — il écrit des fichiers et vous donne un collage unique qui contient vos notes et les chemins.

Mon agent tourne sur un serveur (SSH, VPS, Codespaces) : ça marche ?

Oui pour l'essentiel : le collage porte les sélecteurs, vos notes et le journal console, et prévient l'agent que les images sont restées sur votre ordinateur. Pour lui donner les images, glissez les fichiers du dossier de session dans votre éditeur distant (VS Code Remote-SSH, Codespaces) ou dans une interface d'agent qui accepte les pièces jointes. senhal n'envoie rien sur le réseau, volontairement.

Est-ce que mes captures ou mon code partent sur un serveur ?

Non. L'extension n'a aucun code réseau : pas de serveur, pas de compte, pas de télémétrie. Elle écrit dans votre dossier de téléchargements et met du texte dans votre presse-papier, c'est tout. Le code est livré lisible pour que vous puissiez le vérifier vous-même.

Quelle version de Chrome faut-il ?

Chrome 111 au minimum, parce que l'interface est entièrement écrite en oklch(). L'extension est en Manifest V3 et ne demande aucune permission d'hôte : elle n'a accès à une page que lorsque vous l'activez dessus.