Saltar al contenido
Matías VaglivielloBackend & sistemas a medida
Python
Backend Core
Django 5 & DRF
ERPs & Channels
FastAPI
Async APIs
TypeScript
Strict Typing
NestJS
DDD & Microservicios
Prisma ORM
Data Access
PostgreSQL
Modelado & ACID
Redis
Caché & WebSockets
Docker
Contenedores & Sandbox
Go (Golang)
BitGoTe & Seguridad
RabbitMQ
Saga & Eventos
Next.js
Web & SSR
React Native
Apps de Campo
Linux
nftables & Infra
HERRAMIENTAS OPEN SOURCE · IA APLICADA & MCP

Herramientas Open Source que hice para la comunidad

Desde sandboxes en Docker que auditan el comportamiento real de servidores MCP sin confiar en el código fuente, hasta pipelines RAG autoconfigurables para NestJS, memoria persistente para equipos que usan LLMs y generadores CLI en Python.

Ver perfil en GitHub (@matiasvagli)
PROYECTO INSIGNIA · SEGURIDAD IAGo (Golang) · AI Security · Proxy TLS · nftables · age Vault
Ver Repositorio

BitGoTe 🥸 — Firewall Local para Agentes de IA

Custodio de secretos en tránsito, firewall de salida y aislamiento en Linux para Claude Code, Cursor, Codex y agentes MCP.

Problema que ataca

Nació de un caso real con Sistema Zona: ante un incidente en Railway hubo que rotar todas las variables cruzadas entre Railway y Vercel. Si se lo delegás a un agente de IA, lee tus credenciales reales y quedan grabadas en el contexto y la nube del proveedor del LLM.

Cómo lo resuelve

El agente corre aislado en otro usuario de Linux (bitgote-agent) cuya única salida de red por nftables es el proxy de BitGoTe. El agente nunca ve un secreto: usa referencias {{bitgote:sistemazona/prod/API_URL}}. El proxy verifica la política sellada (bitgote.yaml con SHA-256), bloquea IPs privadas/SSRF, te pide aprobación humana por /dev/tty, inyecta el valor real en tránsito desde la bóveda cifrada con age y redacta cualquier aparición en la respuesta con [BITGOTE:REDACTED].

# El agente opera a ciegas con referencias; el valor real jamás entra al contexto del LLM:
curl https://api.vercel.com/v10/projects/sistemazona-web/env \
  -H "Authorization: Bearer {{bitgote:sistemazona/prod/VERCEL_TOKEN}}" \
  -d '{"key":"API_URL","value":"{{bitgote:sistemazona/prod/API_URL}}"}'

# bitgote proxy valida bitgote.yaml → pide confirmación en /dev/tty → inyecta → redacta:
# Agente recibe: 201 {"key":"API_URL","value":"[BITGOTE:REDACTED]"}
Go (Golang)filippo.io/ageProxy TLS (CA Efímera)Linux nftables/dev/tty ApprovalAnti-SSRFRailway & Vercel Importer
Auditoría Dinámica MCPAI Security · MCP Server · Docker Sandbox
Ver Repositorio

SkillAudit

Sandbox de seguridad en Docker para auditar MCP Servers y Skills de IA

Problema que ataca

Cualquiera puede publicar un MCP server que robe ~/.ssh o ~/.aws, exfiltre datos o esconda prompt injection en el código fuente para engañar a un revisor estático.

Cómo lo resuelve

En vez de confiar en leer el código, SkillAudit ejecuta el MCP server sospechoso dentro de un contenedor Docker aislado sin red, con honeypots y monitoreo de syscalls (strace), y devuelve la telemetría cruda para auditar su comportamiento real.

docker build -t skillaudit-sandbox:latest ./sandbox/
# El agente dispara run_package_tests() → corre en Docker con honeypots + strace
PythonMCP ProtocolDocker SandboxLinux straceHoneypots
Zero-Config RAGTypeScript · NestJS · RAG Architecture
Ver Repositorio

ragkit

Pipeline de ingesta RAG autoconfigurable para NestJS y Node.js

Problema que ataca

Cada proveedor de IA requiere chunk size, overlap, modelo de embeddings y dimensiones de vector distintas. Configurarlos a mano en cada proyecto genera pipelines frágiles y acoplados.

Cómo lo resuelve

Declarás el proveedor en una variable de entorno (openai, claude/voyage, gemini) y ragkit autoconfigura toda la cadena de adapters intercambiables: Loader → Chunker → Embedder → VectorStore (pgvector, Qdrant o Pinecone).

RAG_PROVIDER=gemini  # → chunk 800, gemini-embedding-001, 768 dims
RAG_VECTOR_STORE=pgvector
# Cambiar de proveedor de IA no requiere tocar una línea de código
TypeScriptNestJSpgvectorQdrantPineconeCLI
Zero Vendor Lock-inPython · MCP Server · Local Embeddings
Ver Repositorio

Team Context MCP Server

Memoria técnica persistente y compartida para equipos que desarrollan con LLMs

Problema que ataca

Cada sesión con un LLM arranca de cero, las soluciones a bugs complejos no cruzan del backend al frontend, y cuando un dev se va del equipo el conocimiento institucional se evapora.

Cómo lo resuelve

Mantiene una base local (SQLite + embeddings locales, sin enviar código a la nube ni requerir API keys de IA) e inyecta vía protocolo MCP las decisiones de arquitectura, ADRs y debug memory relevantes antes de cada respuesta.

Tu LLM (Claude / Cursor / Gemini) ──► Team Context MCP
  ├── ~/.team-mcp/proyecto.db      (ADRs y arquitectura)
  └── ~/.team-mcp/debug-memory.db  (bugs históricos cross-repo)
PythonMCP ProtocolSQLiteLocal EmbeddingsCLI
Consistencia DistribuidaMicroservicios · Saga · Outbox · RabbitMQ
Ver Repositorio

Wallet System — Saga Pattern

Billetera digital distribuida con Saga orquestada, compensaciones e idempotencia

Problema que ataca

Cuando el débito y el crédito ocurren en microservicios con bases de datos separadas, un fallo a mitad de camino puede hacer desaparecer el dinero sin una transacción ACID compartida.

Cómo lo resuelve

API Gateway + 4 microservicios independientes con una base PostgreSQL por servicio, orquestador de Saga que ejecuta transacciones compensatorias automáticas si falla un paso, Outbox transaccional, RabbitMQ y claves de idempotencia UNIQUE.

POST /transfer → PENDING + Outbox Event
  ├─ 1. debit(A, $100, key="debit-<txId>")   [OK]
  ├─ 2. credit(B, $100, key="credit-<txId>") [FAIL]
  └─ 3. compensate(A, +$100, "comp-<txId>")  [REVERTED SAFE]
Python / NestJSPostgreSQLRabbitMQRedisDocker ComposeSaga Pattern
Developer VelocityPython CLI · FastAPI · Clean Architecture
Ver Repositorio

CRUDFULL

Generador CLI de arquitecturas modulares y recursos CRUD para FastAPI

Problema que ataca

Arrancar microservicios o APIs en FastAPI suele llevar horas de código repetitivo (modelos, schemas, repositorios, servicios, routers, tests y Docker) o terminar en estructuras desordenadas.

Cómo lo resuelve

Con un solo comando CLI genera toda la estructura por capas lista para producción soportando 3 motores: ghost (in-memory para prototipos), sql (SQLAlchemy Async + Postgres) y mongo (Beanie ODM).

crudfull generate resource Product name:str price_cents:int active:bool --db sql
# Genera Modelos, Schemas Pydantic, Servicios, Routers, Tests y Docker
PythonFastAPISQLAlchemy AsyncBeanie / MongoDBTyper CLIPytest

También en desarrollo: BitGoTe (Custodio de secretos en Go) & ElecApp (Offline-first + MCP)

¿Querés ver también las landings y sitios comerciales que diseñé y publiqué en producción?

Ver Landings en Vivo