Abre los endpoints de tu aplicación en minutos — sin ser experto. Una herramienta que cualquier agente de código (Claude, Codex, Cursor) o tú mismo desde la terminal usa para detectar tu stack, generar un endpoint REST de solo lectura y armar la propuesta para registrar tu fuente en una red civica de información compartida.
Mucha gente construye aplicaciones increíbles, pero no sabe "abrir sus endpoints" para que esos datos puedan ser consumidos por otros. En contextos como el de Venezuela, donde existen apps de reportes de personas desaparecidas, esa barrera técnica frena algo urgente: poder juntar toda la información en una sola red.
Endpoint Agent Kit baja esa barrera. Tiene doble propósito:
- 🌐 Para la causa — te ayuda a exponer tu app de personas desaparecidas y a generar la propuesta que la registra en la red. Así cada fuente abre su endpoint y todos compartimos la misma información (una red de datos civicos, federada y abierta).
- 🛠️ Para cualquier dev — sirve para sacar los endpoints de CUALQUIER aplicación, rápido y bien hecho, aunque no tengas nada que ver con la causa.
La inteligencia vive en un CLI sin dependencias (endpoint). Los agentes solo lo
ejecutan, así que el resultado es el mismo sin importar quién lo maneje — y funciona offline.
- Instalación
- Inicio rápido (para principiantes)
- Cómo funciona
- Guía completa — la causa (personas desaparecidas)
- Modo general — cualquier app
- Referencia de comandos
- El esquema común (IndexedRecord)
- Seguridad y privacidad
- Stacks soportados
- Paridad de agentes
- Auditoría de conformidad
- Para expertos
- Preguntas frecuentes
- Contribuir
- Licencia y créditos
Requisito único: Node.js ≥ 20 (descárgalo aquí). Para comprobar
tu versión: node -v.
macOS
curl -fsSL https://raw.githubusercontent.com/Hainrixz/enpoint-agentkit/main/install-mac.command | bashLinux
curl -fsSL https://raw.githubusercontent.com/Hainrixz/enpoint-agentkit/main/install-linux.sh | bashWindows (PowerShell)
irm https://raw.githubusercontent.com/Hainrixz/enpoint-agentkit/main/install-windows.ps1 | iexEl instalador deja, por igual:
- el skill para Claude en
~/.claude/skills/y para Codex en~/.agents/skills/, - el comando
endpointen tu PATH.
💡 Sin instalar nada global: también puedes correrlo con
npx @hainrixz/enpoint-agentkit <comando>, o dentro de un proyecto correrendpoint initpara dejar el kit vendorizado en.endpoint-agentkit/(funciona 100% offline).
endpoint help # muestra todos los comandos
endpoint version # imprime la versiónNo necesitas saber de APIs. Tienes dos caminos:
- Instala el kit (arriba).
- Abre tu proyecto en Claude Code, Codex o Cursor.
- Escribe, en lenguaje natural:
"Quiero exponer mi endpoint de personas desaparecidas y registrar mi fuente."
- El agente se activa solo, detecta tu stack y te va guiando paso a paso: genera el endpoint, mapea tus campos, escribe la propuesta y la valida. Tú solo confirmas.
cd mi-proyecto
# 1) Detecta tu stack y tus columnas
endpoint detect
# 2) Genera un endpoint REST de solo lectura (perfil de la causa)
endpoint scaffold --profile=persona-desaparecida --print
# 3) Mapea tus campos al esquema común
endpoint map --profile=persona-desaparecida
# 4) Escribe propuesta.json (con la ayuda del paso anterior) y valídala
endpoint validate propuesta.json --profile=persona-desaparecidaCuando la validación esté en verde ✓, el comando te imprime un "resumen para el formulario" con cada valor listo para copiar y pegar en la página "Registrar una fuente". Eso es todo.
| Paso | Comando | Qué hace |
|---|---|---|
| 1. Detectar | endpoint detect |
Lee tu proyecto: framework, base de datos, columnas y clave primaria. |
| 2. Exponer | endpoint scaffold |
Genera un endpoint GET paginado de solo lectura que devuelve { "data": [...] }, exponiendo solo las columnas que mapeaste (nunca SELECT *). |
| 3. Mapear | endpoint map |
Empareja tus columnas con el esquema común (nombre → person_name, documento → cedula, ...). |
| 4. Registrar | endpoint validate |
Valida la propuesta y te da el resumen para pegar en el formulario. |
Supongamos una app con este modelo (Prisma, pero da igual el stack):
model Reporte {
id Int @id @default(autoincrement())
nombreCompleto String
documento String
ciudad String
estatus String @default("desaparecido")
creadoEn DateTime @default(now())
}endpoint detect✓ Runtime HTTP: express (90%) — Express en dependencies
✓ Capa de datos: prisma / modelo Reporte
✓ Columnas (6): id, nombreCompleto, documento, ciudad, estatus, creadoEn
✓ Clave primaria: id
endpoint scaffold --profile=persona-desaparecida --printGenera un endpoint listo para montar, con allowlist de columnas, rate-limit y tope de
paginación. Quita --print para que lo escriba en un archivo. ¿Tu app maneja datos sensibles?
Usa --minimize para excluir cédula, coordenadas y contacto del endpoint generado.
¿Tu endpoint ya existe? No hace falta generarlo: pega una respuesta JSON de tu API y el kit deduce todo:
endpoint sample respuesta.json --profile=persona-desaparecida
endpoint map --profile=persona-desaparecida✓ person_name ← nombreCompleto (100%)
✓ cedula ← documento (100%)
✓ city ← ciudad (100%)
✓ status ← estatus (100%)
✓ observed_at ← creadoEn (85%)
✓ source_record_id ← id (100%)
✓ title ← nombreCompleto (100%)
⚠ La columna "estado" puede ser 'state' o 'status'. Confirma cuál.
El agente la escribe por ti; si lo haces a mano, así se ve:
{
"source_name": "Reportes Ciudadanos VE",
"kind": "persona_desaparecida",
"description": "Reportes ciudadanos de personas desaparecidas.",
"endpoint_url": "https://mi-app.org/api/registros",
"http_method": "GET",
"auth_type": "api_key",
"auth_header": "x-api-key",
"pagination": { "style": "offset", "limit_param": "limit", "offset_param": "offset", "page_size": 100 },
"data_path": "data",
"field_mapping": {
"title": "nombreCompleto", "person_name": "nombreCompleto",
"cedula": "documento", "city": "ciudad", "status": "estatus",
"observed_at": "creadoEn", "source_record_id": "id"
},
"contact_email": "equipo@mi-app.org"
}
⚠️ NUNCA pongas la clave secreta aquí. Declara solo el tipo de autenticación (auth_type) y el nombre del header (auth_header). El kit bloquea cualquier credencial antes de escribir el archivo.
endpoint validate propuesta.json --profile=persona-desaparecidaVerás un checklist ✓/✗, la tabla de cobertura de los 19 campos, y al final el resumen:
✓ PROPUESTA VALIDA — lista para el formulario "Registrar una fuente".
Resumen para el formulario "Registrar una fuente":
Contacto
contact_email equipo@mi-app.org
Fuente
source_name Reportes Ciudadanos VE
kind persona_desaparecida
Endpoint y autenticacion
endpoint_url https://mi-app.org/api/registros
http_method GET
auth_type api_key
auth_header x-api-key
Paginacion
pagination.style offset
pagination.page_size 100
Mapeo de campos
field_mapping 7 campo(s): person_name←nombreCompleto, ...
Copia esos valores en la página "Registrar una fuente". La propuesta queda pendiente de
revisión de un administrador antes de activarse. endpoint submit te explica el paso.
¿Solo quieres exponer un endpoint REST limpio, sin la red civica? Usa el perfil general:
endpoint detect
endpoint scaffold --profile=general # escribe el endpoint + un endpoint.config.json
# edita endpoint_url en endpoint.config.json
endpoint validate endpoint.config.json --profile=generalObtienes un GET paginado, de solo lectura, con forma { "data": [...] }, con allowlist de
columnas, rate-limit y tope de offset. Sirve para sacar los endpoints de cualquier proyecto.
endpoint <comando> [opciones]
| Comando | Descripción |
|---|---|
detect [dir] [--json] |
Detecta runtime, capa de datos, columnas y clave primaria. |
scaffold [dir] [--print] [--minimize] |
Genera el endpoint GET read-only (allowlist de columnas). |
map [dir] [--kind=...] |
Mapea tus columnas al esquema común (perfil civico). |
sample <archivo.json> |
Deduce data_path + field_mapping de una respuesta de tu API. |
validate <archivo> [--strict] |
Valida la propuesta/config: estructura, qué falta y próximos pasos. |
audit |
Corre la auditoría de conformidad (úsala en bucle con /loop). |
init [dir] [--agent=...] |
Escribe los assets de agentes + vendoriza el cerebro offline. |
submit [archivo] |
Explica cómo registrar la propuesta (formulario web). |
Opciones comunes: --profile=general|persona-desaparecida · --strict (validate: bloquea
PII sensible) · --minimize (scaffold: excluye campos sensibles) · --print · --json.
Tus datos se normalizan a estos 19 campos. Mapea los que apliquen; solo title es obligatorio.
title (obligatorio) |
summary |
person_name |
cedula |
age |
organization |
location_name |
city |
state |
country |
latitude |
longitude |
contact |
status |
verified |
observed_at |
updated_at |
source_record_id |
tags |
La propuesta requiere: source_name, kind, endpoint_url, field_mapping, contact_email,
e incluir al menos uno de title/person_name/organization en el mapeo.
Esta herramienta ayuda a publicar datos sensibles. Por eso:
- 🔒 Credenciales: bloqueo duro. Ninguna clave secreta puede escribirse en la propuesta — solo se declara el tipo de auth. El CLI lo verifica en cada escritura.
⚠️ PII: advertencia. Cédula, coordenadas exactas y contacto se marcan como sensibles. Por defecto los valores van completos (tú decides);endpoint scaffold --minimizelos excluye del endpoint yendpoint validate --strictconvierte la advertencia en bloqueo.- 🧒 Menores y casos delicados. El kit escala una advertencia con
age < 18o cuando se combinancédula + coordenadas + nombre. LeeSAFETY.md. - 🛡️ SSRF. El
endpoint_urlse valida contra loopback, IPs privadas y metadata de la nube. - 🔗 Federación, no blockchain. La red enlaza al endpoint de cada fuente; cada quien
mantiene y puede borrar sus datos (clave para casos
encontradoo de menores). Nada de PII inmutable en una cadena.
Detección y/o plantilla de endpoint para: Express + Prisma, Next.js (App Router) + Prisma,
FastAPI + SQLAlchemy, Django, Laravel (Eloquent), Rails, Supabase/PostgREST, y
un camino JSON estático para apps sin backend (SPA/móvil). ¿Tu stack no está? Pega una
respuesta JSON con endpoint sample y el kit deduce el resto.
El CLI es el cerebro; cada agente solo lo orquesta, así que el resultado es idéntico:
- Claude — skill en
~/.claude/skills/. - Codex — skill en
~/.agents/skills/+AGENTS.md. - Cursor — regla en
.cursor/rules/. - Cualquier agente / humano / CI —
AGENTS.md+ el CLI directo (npxo vendorizado).
endpoint init deja todos estos archivos en tu proyecto + un cerebro vendorizado en
.endpoint-agentkit/ para correr todo offline.
El kit trae su propio sistema de auditoría que verifica, en cada corrida, que sigue conforme al contrato de la plataforma:
endpoint audit # 48 verificaciones; exit 0 = todo conforme
/loop endpoint audit # en bucle (Claude Code)Codifica el esquema de 19 campos, los enums y fixtures dorados que deben rechazarse por su razón
exacta. Si algo se desvía, falla. Ver AUDIT.md.
- Fuente de verdad:
profiles/<perfil>/contract.json. Los esquemas JSON, la tabla de campos y el conocimiento del skill se generan desde ahí connpm run build(codegen.mjs), y la auditoría verifica que no haya drift. - Perfiles enchufables: crea
profiles/<id>/contract.json(+synonyms.json,SAFETY.mdopcionales) para soportar otra red okind(p. ej.refugio,ayuda_humanitaria). - Cero dependencias: todo el cerebro es Node
.mjspuro (validador, JSON-Schema mínimo, scanners de secretos/SSRF/PII, mapeo, scaffolding). Corre offline y sinnpm install. - Arquitectura:
core/(cerebro) →adapters/(stacks) →profiles/(contratos) →agents/(unPLAYBOOK.mdcanónico del que derivan SKILL.md/Cursor/AGENTS.md).
git clone https://github.com/Hainrixz/enpoint-agentkit.git
cd enpoint-agentkit
npm run build # regenera artefactos desde los contratos
npm test # corre la auditoría (= endpoint audit)¿Necesito saber programar? No para el flujo con agente. Instalas, abres tu repo en Claude/ Codex/Cursor y describes lo que quieres.
¿Funciona si mi endpoint ya existe? Sí: endpoint sample respuesta.json deduce todo desde
una respuesta de tu API, sin tocar tu código.
¿Y si mi app no tiene backend? Hay un camino de JSON estático (un feed que generas en tu build). Para datos sensibles usa un endpoint dinámico (el estático es permanente, no retractable).
¿Mi clave secreta viaja a algún lado? No. El kit corre local/offline y bloquea credenciales en la propuesta. Solo declaras el tipo de auth; la clave se coordina al aprobar.
¿Tengo que usar Claude? No. Codex, Cursor, npx o el CLI directo dan el mismo resultado.
¡Bienvenido! Ideas de alto impacto: adaptadores de stack nuevos, perfiles para otras redes,
traducciones, y mejoras al mapeo de campos. Antes de un PR, corre npm test (la auditoría debe
quedar en verde). Para datos sensibles, lee primero SAFETY.md.
MIT — ver LICENSE.
Imágenes de marca generadas con Higgsfield (modelo Recraft 4.1). Estética inspirada en el sistema de marca tododeia (tipografía Geist + gradiente espectral).
Abre tus endpoints. Conecta la información. 🌐


