"Arma soluciones complejas conectando piezas simples.
Sin código extra, sin configuración, sin dolor de cabeza."
USEE en producción
El protocolo no es una propuesta teórica: tres proyectos independientes
ya lo usan. Esto es lo que aprendieron.
42piezas en producción
3proyectos independientes
0librerías compartidas entre ellas
ERP modular
30 piezas
Toda la lógica de negocio —prorratear indirectos, resumir ventas por
período, normalizar movimientos— vive fuera del framework, en piezas
que el front invoca por HTTP.
Lo que aprendieron: las piezas se ejecutan desde
funciones serverless, y el empaquetador no las detecta porque las
rutas se resuelven en tiempo de ejecución. Hay que declararlas
explícitamente en el despliegue y resolver las rutas relativas al
módulo, nunca al directorio de trabajo.
Organizador de evento
12 piezas
Cálculos de invitados, mesas, presupuesto y proveedores. Cada pieza
se escribió por separado, sin coordinar implementaciones: solo el
formato de entrada y salida.
Lo que aprendieron: un corredor de pruebas común
para todas las piezas, con verde obligatorio antes de subir, es lo
que hace que el trabajo en paralelo no se pise. Ese corredor está
publicado más abajo.
Marketplace de piezas
verificador
Un catálogo donde se publican piezas de terceros. Aceptar una pieza
sin revisarla a mano exigió convertir la especificación en checks
ejecutables.
Lo que aprendieron: la parte del protocolo que no
se puede verificar automáticamente termina siendo ignorada. De ahí
salió el verificador de Nivel 1 que hoy documenta la
.
El contrato que hizo posible integrarlas
Las tres integraciones convergieron en la misma convención de códigos
de salida. Si tu pieza la respeta, exponerla por HTTP es traducción
directa, sin lógica de negocio en el medio.
Código de salida
Significa
Dónde va la respuesta
HTTP equivalente
0
Todo bien
stdout, empieza con estado: ok
200
2
Entrada inválida
stderr, empieza con estado: error
400 / 422
1
Error interno de la pieza
stderr, empieza con estado: error
500
Además: --ayuda y --version siempre salen con
0 y escriben en stdout. Una entrada vacía es
entrada inválida, así que sale con 2.
Aprende a ejecutar y conectar piezas USEE en minutos
📚
Guía Rápida: Ejecutar y Unir Piezas USEE
Todo lo que necesitas saber para usar piezas USEE: formato FTU, ejecución básica,
conexión con pipes, adaptadores JSON/HTTP, y ejemplos prácticos completos.
Pipeline que conecta analytics-temporal → generar-qr
🔄
transformar-ftu.sh
Utilidad para transformar campos FTU entre piezas
Recursos para tu equipo
Herramientas que ya estaban en uso en esos proyectos, publicadas acá
para que no las escribas de nuevo. Ninguna es obligatoria: el protocolo
son los documentos.
✅
probar
corredor de conformidad · Node, sin dependencias
Poné este archivo junto a tus piezas y ejecutalo. Verifica la
estructura obligatoria, las 10 secciones del manifiesto, que el
LEEME documente lo que la pieza no hace, el contrato de
CLI, que ENTRADA.ejemplo produzca literalmente
SALIDA.ejemplo, y cada caso de pruebas/.
Sale con código 1 si algo falla, así que sirve tal cual en CI.
node probar # todas las piezas de la carpeta
node probar calcular-saldo # una sola
Una pieza completa y en verde. Tal como está, numera y cuenta los
ítems que recibe: sirve para comprobar que el ciclo entero funciona
antes de escribir nada propio. Clonala, renombrala con un
verbo + sustantivo y reemplazá los campos del manifiesto.
🤖
skill-usee-pieza.md
skill para agentes de código
El protocolo condensado en un archivo que una IA puede seguir.
Colocalo en .claude/skills/usee-pieza/SKILL.md de tu
repositorio y no vuelvas a explicar el protocolo en cada pedido.
Fuera de ese entorno funciona igual como prompt.
Alinea los PIEZA.usee que ya tengas con las reglas
vigentes de categoria y modelo_cobro.
Simulacro por defecto: no escribe nada hasta que se lo pidas con
--aplicar.
Explora piezas USEE reales para entender la estructura del protocolo
imagenesv1.0.0
generar-qr
Genera códigos QR personalizables a partir de texto
qrimagenpng
reportesv1.0.0
analytics-temporal
Procesa datos de visitas en períodos temporales con agregaciones
analyticsestadisticasmetricas
Crea piezas USEE con ayuda de una IA
Copia el siguiente contexto y pégalo en cualquier IA (Claude, ChatGPT, Gemini…).
Le da todo lo necesario para diseñar y escribir una pieza USEE correcta desde cero.
Prompt para la IA
Eres un asistente experto en el protocolo USEE. Tu tarea es ayudarme a crear una pieza USEE correcta según el estándar del protocolo.
## Qué es una pieza USEE
Una pieza USEE es un programa atómico (un CLI) que hace UNA sola cosa: lee de stdin y escribe a stdout usando FTU (Formato de Texto USEE, texto plano). Los errores van a stderr. El nombre de una pieza es siempre "verbo + sustantivo" (ej: generar-numero-orden, calcular-stock, convertir-unidad-insumo).
## Los 4 principios (deben cumplirse siempre)
- Útil: resuelve un problema concreto que alguien tiene hoy.
- Simple: pocas piezas, poca complejidad, fácil de entender.
- Esencial: hace una sola cosa completa, sin extras ni "features de conveniencia".
- Estable: entradas y salidas retrocompatibles. Un cambio incompatible = una pieza NUEVA con otro nombre, nunca romper la existente.
## Estructura de carpeta obligatoria (piezas/<nombre>/)
PIEZA.usee ← manifiesto en FTU
ejecutar ← punto de entrada ejecutable (lee stdin, escribe stdout)
ENTRADA.ejemplo ← ejemplo de entrada en FTU
SALIDA.ejemplo ← ejemplo de salida en FTU (debe producirse literalmente al correr ./ejecutar < ENTRADA.ejemplo)
LEEME.md ← documentación humana; debe decir explícitamente lo que la pieza NO hace
pruebas/ ← casos: <nombre>.entrada + <nombre>.salida (o .codigo para errores esperados)
Dentro de un .salida, la línea "clave: *" acepta cualquier valor para esa clave.
Así se prueban campos no deterministas (marcas de tiempo, identificadores) sin
renunciar a tener una prueba.
## Formato FTU
- Sintaxis "clave: valor", un par por línea.
- Comentarios con #.
- Bloques multilínea con | e indentación de 2 espacios.
- Claves repetidas (p.ej. linea:, orden:) representan listas/arrays.
- Codificación UTF-8.
## Manifiesto PIEZA.usee (secciones, en este orden)
1. # Identidad — nombre, version, creador, fecha_creacion
2. # Descripción — descripcion_corta, descripcion_larga (bloque |)
3. # Clasificación — categoria, etiquetas
categoria: una de autenticacion, almacenamiento, comunicacion, datos, documentos, imagenes, integracion, pagos, reportes, seguridad, utilidades, otro. Si ninguna encaja, usa el prefijo libre "dominio:<slug>" (minúsculas, números y guiones; ej: dominio:inventario). No inventes una categoría suelta sin prefijo.
4. # Capacidad — accion, entrada_descripcion, salida_descripcion
5. # Requisitos — lenguaje, version_lenguaje_minima, dependencias_externas, dependencias_usee
6. # Comercial — costo_por_uso, moneda, modelo_cobro
modelo_cobro: por_llamada | por_minuto | por_registro | gratuito. Si la pieza no cobra, usa gratuito con costo_por_uso: 0.
7. # Configuración — opciones_configuracion, configuracion_requerida
8. # Rendimiento — tiempo_respuesta_promedio_ms, memoria_maxima_mb
9. # Compatibilidad — sistemas_operativos, requiere_red, requiere_almacenamiento
10. # Metadatos adicionales — protocolo_usee, licencia
## Contrato del ejecutable "ejecutar"
- Soporta --ayuda/-h y --version/-v.
- Si no recibe entrada por stdin (TTY) → error con exit code 2.
- Parsea FTU de stdin, valida cada campo, y ante error emite a stderr: estado: error / codigo / mensaje / sugerencia.
- Salida OK a stdout: estado: ok / <campos de resultado>.
- Exit codes: 0 = ok, 2 = error de entrada/validación, 1 = error general/fatal. Al exponerla por HTTP, la convención observada en producción es 0 → 200, 2 → 400/422, 1 → 500.
- Configuración opcional vía variables de entorno con prefijo USEE_<NOMBRE>_<OPCION>. Nunca configuración obligatoria para el caso de uso común.
- Sin dependencias externas si es posible. Para dinero, decimales fijos (2), nunca float crudo.
- La pieza NO accede a base de datos ni a la red salvo que su acción lo requiera explícitamente: recibe todo por la entrada para que el consumidor decida la fuente.
- Determinista y componible: debe encadenarse con otras piezas (piezaA | piezaB | piezaC).
- Autocontenida: el parser y el serializador FTU van inline dentro de "ejecutar". Nada de librería compartida entre piezas, aunque se repita código: la carpeta tiene que poder clonarse y moverse sola. Esta es la regla que más se rompe y la que más caro sale romper.
- Si tu pieza consume la salida de otra, esa relación se declara en dependencias_usee del manifiesto, no como dependencia de código.
- Cualquier ruta a un archivo propio se resuelve relativa al módulo, nunca al directorio de trabajo: si depende del cwd, se rompe al empaquetarla en un entorno serverless.
## Checklist antes de darla por terminada
- El propósito cabe en "verbo + sustantivo".
- PIEZA.usee tiene todos los campos requeridos y es FTU válido.
- "ejecutar" lee de stdin y escribe FTU a stdout; los errores van a stderr.
- ENTRADA.ejemplo produce literalmente SALIDA.ejemplo.
- LEEME.md documenta lo que la pieza NO hace.
- Sin dependencias externas injustificadas; sin configuración obligatoria.
- categoria y modelo_cobro usan valores válidos (ver arriba); el verificador los rechaza si no.
- La pieza pasa el verificador "probar" completo, en verde.
## Qué necesito de ti
1. Pregúntame qué debe hacer la pieza si no lo he dicho.
2. Propón un nombre "verbo + sustantivo" y valida que sea atómica (una sola cosa).
3. Genera los archivos completos: PIEZA.usee, ejecutar, ENTRADA.ejemplo, SALIDA.ejemplo, LEEME.md y al menos un caso en pruebas/.
4. Muestra el comando para probarla localmente y verifica que ENTRADA.ejemplo produce SALIDA.ejemplo.
5. Valídala con el verificador oficial antes de darla por terminada: descarga https://www.usee.family/recursos/probar y corre "node probar <nombre-de-la-pieza>". No está lista hasta que pase todo en verde.
Si prefieres partir de un andamiaje ya válido en lugar de escribir los archivos desde cero, clona https://www.usee.family/recursos/plantilla-pieza/ y reemplaza los campos marcados con TODO: trae la estructura completa y sus pruebas ya pasando.