Skip to content

Hainrixz/enpoint-agentkit

Repository files navigation

Endpoint Agent Kit — Abre tus endpoints. Conecta la información.

instalación en un comando Node 20 o superior sin dependencias agentes licencia MIT

Endpoint Agent Kit

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.


¿Por qué existe?

Cada app abre su endpoint. Compartimos la información.

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.


Tabla de contenidos


Instalación

Requisito único: Node.js ≥ 20 (descárgalo aquí). Para comprobar tu versión: node -v.

Un solo comando

macOS

curl -fsSL https://raw.githubusercontent.com/Hainrixz/enpoint-agentkit/main/install-mac.command | bash

Linux

curl -fsSL https://raw.githubusercontent.com/Hainrixz/enpoint-agentkit/main/install-linux.sh | bash

Windows (PowerShell)

irm https://raw.githubusercontent.com/Hainrixz/enpoint-agentkit/main/install-windows.ps1 | iex

El instalador deja, por igual:

  • el skill para Claude en ~/.claude/skills/ y para Codex en ~/.agents/skills/,
  • el comando endpoint en tu PATH.

💡 Sin instalar nada global: también puedes correrlo con npx @hainrixz/enpoint-agentkit <comando>, o dentro de un proyecto correr endpoint init para dejar el kit vendorizado en .endpoint-agentkit/ (funciona 100% offline).

Verificar la instalación

endpoint help        # muestra todos los comandos
endpoint version     # imprime la versión

Inicio rápido (para principiantes)

No necesitas saber de APIs. Tienes dos caminos:

Opción A — con un agente (lo más fácil)

  1. Instala el kit (arriba).
  2. Abre tu proyecto en Claude Code, Codex o Cursor.
  3. Escribe, en lenguaje natural:

    "Quiero exponer mi endpoint de personas desaparecidas y registrar mi fuente."

  4. 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.

Opción B — desde la terminal (tú mismo)

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-desaparecida

Cuando 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.


Cómo funciona

Cómo funciona: Detectar → Exponer → Mapear → Registrar

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.

Guía completa — la causa (personas desaparecidas)

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())
}

1. Detectar

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

2. Exponer el endpoint

endpoint scaffold --profile=persona-desaparecida --print

Genera 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

3. Mapear tus campos

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.

4. Escribir propuesta.json

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.

5. Validar y registrar

endpoint validate propuesta.json --profile=persona-desaparecida

Verá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.


Modo general — cualquier app

¿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=general

Obtienes 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.


Referencia de comandos

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.


El esquema común (IndexedRecord)

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.


Seguridad y privacidad

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 --minimize los excluye del endpoint y endpoint validate --strict convierte la advertencia en bloqueo.
  • 🧒 Menores y casos delicados. El kit escala una advertencia con age < 18 o cuando se combinan cédula + coordenadas + nombre. Lee SAFETY.md.
  • 🛡️ SSRF. El endpoint_url se 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 encontrado o de menores). Nada de PII inmutable en una cadena.

Stacks soportados

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.


Paridad de agentes (Claude · Codex · Cursor)

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 / CIAGENTS.md + el CLI directo (npx o vendorizado).

endpoint init deja todos estos archivos en tu proyecto + un cerebro vendorizado en .endpoint-agentkit/ para correr todo offline.


Auditoría de conformidad

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.


Para expertos

  • Fuente de verdad: profiles/<perfil>/contract.json. Los esquemas JSON, la tabla de campos y el conocimiento del skill se generan desde ahí con npm run build (codegen.mjs), y la auditoría verifica que no haya drift.
  • Perfiles enchufables: crea profiles/<id>/contract.json (+ synonyms.json, SAFETY.md opcionales) para soportar otra red o kind (p. ej. refugio, ayuda_humanitaria).
  • Cero dependencias: todo el cerebro es Node .mjs puro (validador, JSON-Schema mínimo, scanners de secretos/SSRF/PII, mapeo, scaffolding). Corre offline y sin npm install.
  • Arquitectura: core/ (cerebro) → adapters/ (stacks) → profiles/ (contratos) → agents/ (un PLAYBOOK.md canó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)

Preguntas frecuentes

¿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.


Contribuir

¡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.


Licencia y créditos

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. 🌐

About

Abre los endpoints de tu app sin ser experto: detecta tu stack, genera un endpoint REST de solo lectura y arma la propuesta para registrar tu fuente en la red civica de personas desaparecidas. CLI sin dependencias; funciona igual con Claude, Codex y Cursor.

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors