Protéger une écriture GitHub faite par un agent
Admettez l’écriture d’un agent dans un dépôt via Intralock et publiez le verdict sur le commit sous forme de check run ou de statut.
github.enforce
Admettez l’écriture d’un agent dans un dépôt via Intralock et publiez le verdict sur le commit sous forme de check run ou de statut.
github.enforceFaites passer actions d’agents, hash de contenu, contrôles d’API, requêtes DNS, webhooks, appels LLM et commits git par Intramedial. Obtenez un reçu signé vérifiable par tous – sans nous croire.
Un agent écrit dans un dépôt et vous voulez que l’écriture soit décidée, avec le verdict sur le commit. Une écriture qui exige une confirmation est refusée tant qu’un approbateur n’a pas émis de jeton.
Le code lit la clé depuis INTRAMEDIAL_KEY. Gardez-la dans votre shell ou votre coffre à secrets, jamais dans un fichier que vous commitez. Les appels qui exigent une personne connectée ne peuvent pas utiliser de clé : c’est la console qui les fait.
Envoyez le dépôt, l’agent, le sha du commit et le verbe. L’admission est par dépôt ; action vaut write par défaut.
github.enforcegithub-enforce
curl -sS -X POST https://api.intramedial.com/api/v1/acp/github/enforce \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"repo": "acme/payments",
"actorDid": "did:web:acme.example:agent:billing",
"sha": "9fceb02d0ae598e95dc970b74767f19372d61af8",
"action": "write"
}'const res = await fetch("https://api.intramedial.com/api/v1/acp/github/enforce", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
repo: "acme/payments",
actorDid: "did:web:acme.example:agent:billing",
sha: "9fceb02d0ae598e95dc970b74767f19372d61af8",
action: "write",
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/github/enforce",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"repo": "acme/payments",
"actorDid": "did:web:acme.example:agent:billing",
"sha": "9fceb02d0ae598e95dc970b74767f19372d61af8",
"action": "write",
},
timeout=30,
)
print(res.status_code, res.json())allow vaut false avec confirmation_required tant qu’un approbateur n’a pas émis de jeton. Une GitHub App le publie sous forme de check intramedial/acp.
{
"allow": false,
"llm": false,
"reason": "confirmation_required",
"sha": "9fceb02d0ae598e95dc970b74767f19372d61af8",
"repo": "acme/payments",
"commitStatus": null,
"checkRun": { "id": "4417203551", "url": "https://github.com/acme/payments/runs/4417203551" }
}Dans la protection de branche, exigez le check intramedial/acp. Sans cela, le check s’affiche mais ne bloque aucune fusion. Les événements de pull request et de merge group appliquent ; un push ne fait qu’enregistrer.
Copié de: /docs/github-enforce
Le registre est en ajout seul et scellé sous des racines de Merkle. L’heure d’une entrée est l’horloge propre d’Intramedial, et un bundle signé peut être vérifié hors ligne avec la clé publiée.
Laissez une écriture refusée attendre dans la file d’approbation jusqu’à ce qu’une personne connectée l’approuve, puis réessayez avec le jeton.
coordination.approveDemandez à la passerelle MCP le verdict d’Intralock sur l’appel d’outil d’un agent, lisez la raison et listez les appelants qu’elle a vus.
mcp.enforceDemandez au plan si un agent peut agir sur une source SaaS connectée, et lisez le verdict avant que quoi que ce soit soit envoyé.
saas.admitUn court e-mail quand nous ajoutons des recettes. Rien d’autre, et désabonnement possible depuis chaque message.
Sans compte : 35 appels sur 7 jours sur les routes attest, avec des reçus marqués test. Inscrivez-vous quand vous voulez continuer.