AI Agent-Readable GIFs — Machine Layer Documentation

How AI agents read terminal GIFs through cast files, transcripts, .md endpoints, and structured APIs.

Le problème

Les images GIF sont opaques pour les agents IA. Quand un README contient un GIF de démo terminal, un agent IA voit des données binaires de pixels — il ne peut pas extraire les commandes, comprendre la sortie ni référencer des étapes précises. C'est une limitation fondamentale de la documentation basée sur les images.

AgentGIF résout ce problème en associant des données structurées lisibles par machine à chaque GIF.

Architecture double couche

Chaque GIF sur AgentGIF possède deux couches qui coexistent à la même URL :

CoucheConsommateurFormatAccès
VisuelHumainsGIF / MP4media.agentgif.com/{id}.gif
MachineAgents IACast / Transcript / JSON / MarkdownPoints d'accès API + suffixe .md

Un humain voit un terminal animé. Un agent IA voit des données structurées : commandes, sortie, horodatages, métadonnées et codes d'intégration.

Fichiers Cast (Asciinema v2)

The cast file is the richest data source. It's an asciinema v2 recording with precise timestamps for every terminal event.

Accéder au Cast

curl -s https://agentgif.com/api/v1/gifs/{id}/cast/

Structure du fichier Cast

La ligne 1 est un en-tête JSON avec les métadonnées terminal :

{"version": 2, "width": 120, "height": 40, "timestamp": 1710000000, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}}

Les lignes suivantes sont des tuples d'événements :

[0.0, "o", "$ "]
[0.5, "o", "docker compose up -d\r\n"]
[1.2, "o", "\u001b[32mCreating network...\u001b[0m\r\n"]
[2.8, "o", "Container app-1  Started\r\n"]

Chaque tuple est [timestamp_seconds, event_type, data] :

Analyser un fichier Cast

import json

# Read cast file
lines = cast_data.strip().split("\n")
header = json.loads(lines[0])
events = [json.loads(line) for line in lines[1:]]

# Extract all output text
output = "".join(data for ts, typ, data in events if typ == "o")

# Find commands (lines starting with $ or % prompt)
commands = [line for line in output.split("\n") if line.startswith("$ ")]

Transcriptions

Pour les cas d'utilisation plus simples, le point d'accès de transcription renvoie du texte brut propre :

curl -s https://agentgif.com/api/v1/gifs/{id}/transcript/

Les transcriptions suppriment les codes d'échappement ANSI, condensent les espaces blancs et présentent la session terminal comme un texte lisible. Elles sont idéales pour :

Points d'accès .md

Chaque page d'AgentGIF possède une variante Markdown. Ajoutez .md à n'importe quelle URL :

# GIF detail → structured summary
curl https://agentgif.com/@agentgif/docker-compose/.md

# Tag listing → all GIFs with this tag
curl https://agentgif.com/explore/tags/docker/.md

# Tool page → all GIFs for this CLI tool
curl https://agentgif.com/tools/git/.md

# Collection → ordered GIF list
curl https://agentgif.com/@agentgif/collections/devops-essentials/.md

La réponse est text/markdown; charset=utf-8 — texte propre et structuré que les LLM peuvent analyser directement.

API JSON

L'API REST fournit des données structurées complètes. Aucune authentification nécessaire pour les lectures :

# Search for GIFs about a topic
curl -s "https://agentgif.com/api/v1/search/?q=kubernetes" | jq '.results[:3] | .[].title'

# Get full metadata for a specific GIF
curl -s "https://agentgif.com/api/v1/gifs/{id}/" | jq '{title, command, tags, gif_url}'

# Browse by tag
curl -s "https://agentgif.com/api/v1/tags/docker/gifs/" | jq '.count'

See the complete API Reference for all 30+ endpoints.

Découverte de contenu

Les agents IA peuvent découvrir le contenu AgentGIF via plusieurs canaux :

CanalURLIdéal pour
llms.txt/llms.txtComprendre la structure du site
Plan du site XML/sitemap.xmlExplorer toutes les pages
RSS/Atom/feed/, /feed/atom/Suivre les nouveaux GIF
API de recherche/api/v1/search/?q=...Trouver du contenu spécifique
Liste des étiquettes/api/v1/tags/Parcourir par catégorie
Index des outils/tools/Parcourir par outil CLI
Spécification OpenAPI/api/openapi.jsonComprendre le schéma API

Exemples concrets

Agent: "Find a Docker demo and explain the steps"

# 1. Search for Docker GIFs
curl -s "https://agentgif.com/api/v1/search/?q=docker+compose" | jq '.results[0].id'
# → "xK9mQ2pL"

# 2. Get the transcript
curl -s "https://agentgif.com/api/v1/gifs/xK9mQ2pL/transcript/"
# → $ docker compose up -d
#   Creating network...
#   Container app-1  Started

# 3. Agent can now explain: "The demo shows docker compose up -d,
#    which starts services in detached mode..."

Agent: "Add a demo GIF to a README"

# 1. Search for the right tool
curl -s "https://agentgif.com/api/v1/search/?q=ripgrep" | jq '.results[0] | {id, gif_url, title}'

# 2. Generate embed code
# → [![ripgrep demo](https://media.agentgif.com/ID.gif)](https://agentgif.com/ID)

Agent: "Compare two terminal tools"

# Get GIFs for both tools
curl -s "https://agentgif.com/api/v1/tags/grep/gifs/" | jq '.results[].command'
curl -s "https://agentgif.com/api/v1/tags/ripgrep/gifs/" | jq '.results[].command'

# Compare the transcripts to understand different syntax