Conçu pour les agents · MCP · CLI · OpenAPI

Le plan de contrôle de vos agents webhook

Voyez et pilotez chaque machine skillhook en un seul endroit : webhooks, tâches d’agent, questions sur lesquelles les agents attendent, santé et statistiques, avec rejeu, exécutions à distance et URL de webhook hébergées qui conservent les livraisons pendant qu’une machine dort.

Une seule commande sur une machine où skillhook est installé ; le tableau de bord affiche le code.

Les machines tirent

Le cloud n’appelle jamais une machine.

72 h

Une livraison hébergée attend une machine endormie.

56 outils

Les mêmes opérations via MCP, REST et la CLI.

RFC 9457

Chaque erreur a un code et un identifiant de requête.

Fonctionnement

Un paquet sur la machine, une seule connexion sortante

skillhook fait d’une machine un point de terminaison webhook qui exécute des Agent Skills. Skillhook Cloud est l’endroit où chacune de ces machines rend compte.

01
Installer skillhook et associer la machine
npm install -g @meterapp/skillhook, puis la commande d’association qu’affiche le tableau de bord. La machine maintient un long-poll sortant vers le cloud et n’ouvre aucun port. Le mode observation rend compte ; le mode contrôle permet au cloud de mettre des commandes en file d’attente, et les listes d’autorisation et de refus de la machine ont le dernier mot.
02
Un webhook entre, un agent agit
Un expéditeur envoie une requête à l’URL propre de la machine ou à une URL hébergée. La machine vérifie la signature, exécute le SKILL.md de la skill avec Claude Code, Codex ou une commande shell, et rend compte de la tâche : statut, résultat, coût, sortie et, le cas échéant, la question sur laquelle elle s’est arrêtée.
03
Voir et agir : tableau de bord, API, MCP, CLI
Toutes les machines de l’organisation au même endroit. Répondez à l’agent, rejouez une livraison, exécutez ou testez un skill, consultez un contrôle de santé en échec et son correctif. Chaque action est une commande que la machine récupère lors de sa prochaine synchronisation ; pour une machine hors ligne, elle attend jusqu’à 10 minutes.

Ce que vous voyez

La vue d’ensemble, telle que l’affiche le tableau de bord

Les dernières 24 heures sur toutes les machines, puis ce qui nécessite une personne en premier.

Données d’exemple
Machines en ligne
3/3
Toutes les machines interrogent le service
Nécessite une personne
1
Des agents attendent une personne
Tâches
42
39 réussies · 2 en échec · 4,12 $
Livraisons
118
116 acceptées · 2 refusées
Tâches
Les plus récentes d’abord, toutes machines confondues.
triagemac-mini

Webhook de GitHub · en attente depuis 4 min · « Fermer aussi les deux tickets en double ? »

Nécessite une personne
deploybuild-box

Webhook de la CI · 2 min 14 s · 0,31 $

RéussieTerminé
nightly-reportbuild-box

Planification · en cours depuis 38 s

En cours

URL de webhook hébergées

Une URL pour une machine qui n’est pas toujours éveillée

Une machine sur un portable, derrière un NAT ou endormie la nuit n’a aucune adresse qu’un expéditeur puisse joindre. Une URL de webhook hébergée sur ce service accepte le webhook à sa place.

La livraison est scellée avec AES-256-GCM dès son arrivée et attend jusqu’à 72 heures la prochaine synchronisation de la machine. La machine vérifie la signature de l’expéditeur avec son propre secret : le cloud ne détient jamais de secrets de webhook, et une livraison est supprimée dès que la machine en a accusé réception.

La vérification d’URL de Slack reçoit une réponse immédiate, si bien qu’une application Slack peut pointer vers une machine qui n’est pas encore éveillée.

Trois étapes
Du tableau de bord à la première livraison.
L’activer

URL hébergées, la skill, activer. Le tableau de bord affiche l’URL ; la réactiver en crée une nouvelle, et l’ancienne cesse de fonctionner.

Coller l’URL dans l’expéditeur

GitHub, Sentry, Slack, Zapier, tout ce qui envoie du JSON. Le secret de l’expéditeur reste sur la machine, comme pour une URL directe.

Les livraisons attendent pendant que la machine dort

Chacune est scellée à son arrivée et conservée jusqu’à 72 heures. À sa prochaine synchronisation, la machine la récupère, vérifie la signature et exécute la skill.

Historique et rejeu des webhooks

Chaque webhook, conservé et rejouable

Chaque requête reçue par une machine est enregistrée : acceptée, rejetée avec le motif et le statut HTTP, ignorée par un filtre, dédupliquée. L’enregistrement est conservé aussi longtemps que l’organisation existe ; le corps, la partie nécessaire à un rejeu, est conservé pendant la durée prévue par le forfait : 7 jours avec Free, jusqu’à 365 jours avec Enterprise.

Recherchez par l’identifiant de livraison de l’expéditeur, la raison, le chemin, l’adresse ou une plage horaire. Rejouez depuis le tableau de bord, l’API, le serveur MCP ou la CLI : via la skill telle qu’elle est aujourd’hui, en passant outre les vérifications qui ont échoué, en passant outre ses filtres.

Ou ailleurs : le même corps sur une autre machine ou via une autre skill, comme une nouvelle exécution. Et depuis la CLI, envoyez un webhook enregistré à n’importe quelle URL : un serveur de préproduction, une skill réécrite, un test.

Quatre étapes
D’un webhook en échec à une skill corrigée.
Le trouver

Livraisons, puis l’identifiant qu’affiche l’expéditeur ou la raison donnée par la machine ; une plage horaire affine la recherche. list_deliveries {q, since, until} fait de même pour un agent.

Lire pourquoi

Le résultat, le statut HTTP, la raison, les en-têtes masqués et le corps, affichés en texte et jamais interprétés.

Le rejouer

Via la skill telle qu’elle est aujourd’hui ; force pour passer outre une vérification qui a échoué, skip_filters pour passer outre les filtres when. Un bouton dans le tableau de bord, un appel à l’API ou au MCP, une commande dans le terminal.

Ou l’exécuter ailleurs

Sur une autre machine ou via une autre skill, depuis la page de la livraison ou replay_delivery {machine, skill} ; ou envoyez le corps enregistré vers n’importe quelle URL depuis le terminal avec skillhook send.

Ce que les gens y exécutent

Un webhook entre, une tâche sort, une personne seulement là où il en faut une

Notre propre boucle d’auto-réparation et six playbooks détaillés, chacun avec le prompt qui le met en place avec votre agent et le SKILL.md qu’il exécute. Présentés honnêtement : aucun témoignage, aucun chiffre inventé.

Our own use
A Sentry alert posts to a hosted URL. The machine collects it, the skill finds the cause, lands a small tested fix through a pull request, checks it in production, and asks a person only for what is theirs.
Trigger: A Sentry alert, and a sweep every three hoursLands alone: A small fix with a test that failed before itAsks a person for: Migrations, environment, billing, the loop itself
A worked playbook
Notes become actionable tasks. Your agent starts authorized work, reports what it completed and what is still running, and pauses for your input or approval. See an illustrative ten-task recap and the Granola notes and follow-ups playbook.
Trigger: Granola's note.generated webhookBefore sending: Approve the draft and exact recipientsAsks a person when: An owner or a due date is unclear
A worked playbook
Every new issue gets a run. A small, well-specified one gets a fix on a branch and a pull request; the rest get a triage comment with findings and questions. Design questions go to a person, and nothing merges without one.
Trigger: GitHub's issues webhook, action openedMerges: Nothing without a personAsks a person for: Design questions, with the options as buttons
A worked playbook
A customer writes in. The skill looks at the logs, Sentry and the database before it drafts an answer; it replies through Intercom when the answer is certain, and otherwise leaves an internal note and asks a person in the inbox: send the draft, edit it, or escalate.
Trigger: Intercom's conversation webhooksReplies alone when: The answer is certain from what it foundOtherwise: An internal note, and the draft as a choice in the inbox
A worked playbook
A dispute arrives with a deadline. The skill collects the customer, the invoices, the access and usage logs, the correspondence and the delivery records, writes the evidence up, submits it through the API when it is complete, and asks a person first when it is thin or the amount is large.
Trigger: Stripe's charge.dispute.created eventSubmits alone when: The evidence is complete and the amount smallAsks a person when: The evidence is thin or the amount is large
A worked playbook
A new lead gets a first reply with real context about what they asked. Every later message in the thread gets an answer, deduplicated by message id, the CRM is updated, and a person is asked before any pricing exception, promise or legal question. It stops when a person says so.
Trigger: A form, CRM or inbound-email webhookDeduplicated by: The message id, in skillhook and in the CRMAsks a person before: Pricing exceptions, promises and legal questions
A worked playbook
Every webhook a machine received is on record in the cloud, with the reason when it did not run. Filter them, replay one through the skill as it is now, run its body on another machine or skill, send it to any other location from the CLI, and test a SKILL.md before it is saved.
On record: Every delivery, with its outcome and reasonBody kept: 7 to 365 days, by planReplay: As the skill is now; force and skip_filters when needed

Les agents sont des clients à part entière

Tout ce que fait le tableau de bord, sous forme d’opérations qu’un agent peut appeler

Un seul catalogue alimente le serveur MCP hébergé, l’API REST et la CLI : un agent voit ce que voit une personne et agit de la même façon, par des commandes que la machine vérifie toujours.

Le serveur hébergé à l’adresse /api/mcp : Streamable HTTP, sans état, une seule clé bearer. Une clé se voit proposer les outils que sa portée autorise, et describe_cloud indique à un agent par où commencer.
POST https://skillhook.dev/api/mcp
skillhook 0.7.0 exécute tout le catalogue depuis un terminal : machines, tâches, réponses, rejeux, statistiques. Connectez-vous une fois ; la clé reste dans ~/.skillhook/.env et n’est jamais affichée.
skillhook cloud answer_job <job> "yes" --option yes
Chaque route REST et chaque opération du catalogue, avec leurs schémas, dans un seul document. Générez un client, ou importez-le dans Postman ou un framework d’agents.
GET https://skillhook.dev/openapi.json
Ce qu’est le service et comment l’utiliser, rédigé pour les modèles ; llms-full.txt en est la version longue. agents.md est le guide d’utilisation pour un agent qui détient une clé.
curl https://skillhook.dev/llms.txt
Le dépôt skillhook est le plugin. Il enregistre deux serveurs MCP, cette machine et l’organisation, ainsi qu’une skill qui apprend à l’agent à trier et à exploiter la flotte.
/plugin install skillhook@meterapp-skillhook
Un GPT personnalisé importe openapi.json avec une authentification Bearer et obtient chaque opération sous forme d’action. Des connecteurs de chat avec connexion, pour claude.ai et ChatGPT, arrivent bientôt.
Import https://skillhook.dev/openapi.json

Ce qui nécessite une personne

Les agents demandent ; le cloud s’assure que quelqu’un entend

Les agents s’arrêtent et demandent. Une skill qui a besoin d’une décision termine son exécution par une question ; la boîte de réception du tableau de bord la liste avec ses choix sous forme de boutons, une alerte est envoyée, et la réponse est transmise à l’exécution en attente ou reprend la session de l’agent avec elle.

Répondez depuis le tableau de bord, l’API, le serveur MCP ou la CLI. Chaque alerte ne s’ouvre qu’une fois par cause ; fermez-la à la main depuis le tableau de bord ou avec dismiss_alert.

Quatre alertes
Chacune nomme la machine, la tâche ou la vérification qu’elle concerne.
Un agent nécessite une personneneeds_human

Une skill a terminé son exécution par une question. La tâche attend dans la boîte de réception jusqu’à ce qu’une personne, ou un agent muni d’une clé, y réponde.

Une machine est passée hors lignemachine_offline

Une machine a cessé d’interroger le cloud. Les commandes en file d’attente pour elle attendent 10 minutes ; les livraisons hébergées attendent 72 heures.

Une tâche a échouéjob_failed

Une tâche a échoué. Son type d’échec, sa sortie et ses artefacts figurent sur la tâche ; rejouez-la une fois la cause corrigée.

Une vérification de santé échouehealth_failing

Une vérification de santé échoue sur une machine. La vérification indique la correction.

CanauxSlackWebhooks signés (Standard Webhooks)E-mail

Tarifs

Gratuit pour quelques machines, un forfait quand la flotte grandit

Chaque forfait inclut tout le produit : tableau de bord, API, serveur MCP et CLI. Ils diffèrent par le nombre de machines, de personnes, d’URL hébergées et de livraisons qu’ils permettent.

Free
Une personne, quelques machines

0 $US

  • 2 machines, 3 personnes
  • 3 URL de webhook hébergées, 1 000 livraisons hébergées par mois
  • Rejeu, exécutions à distance et réponses aux agents
Pro
Une équipe et sa flotte

29 $US / mois

  • 10 machines, 10 personnes
  • 25 URL de webhook hébergées, 50 000 livraisons hébergées par mois
  • Tout ce que contient Free
Business
De nombreuses machines, de nombreux expéditeurs

99 $US / mois

  • 50 machines, 50 personnes
  • 250 URL de webhook hébergées, 500 000 livraisons hébergées par mois
  • Tout ce que contient Pro

FAQ

Les premières questions qu’on nous pose

Associez une machine, voyez son premier webhook

Gratuit pour 2 machines ; un forfait quand la flotte grandit. Rien à installer côté cloud.