// editor
Windsurf
Donde tú y Cascade realmente trabajan.
Para usuarios de Windsurf
Windsurf es el editor y Cascade es el agente. En un monorepo, el agente igual necesita un mapa de qué archivo importa. Maguyva indexa tu codebase y lo sirve de vuelta vía MCP (semántico, AST, grafo y texto), así que “dónde pasa la autenticación” devuelve el flujo de auth real, no siete stubs de prueba.
Nivel Free: 3 repositorios, Hasta 50 mil líneas de repo indexadas, sin tarjeta.
Windsurf edita lo que le señalas. Maguyva le dice a Cascade qué archivo señalar.Cuatro piezas. Cada una tiene su trabajo.
// editor
Donde tú y Cascade realmente trabajan.
// contexto manual
El contexto manual funciona, hasta que el repo se hace grande.
// codebase
Hechos automáticos del codebase vía MCP.
// quién paga
Los agentes no pagan asientos. Ver precios
El IDE no es el problema. Cascade, el autocompletado de tabulador, las ediciones multiarchivo y .windsurfrules son excelentes, y ya los usas para:
.windsurfrules para convenciones del repo y reglas de estilo.@ para traer un archivo específico al contexto.Sigue haciendo eso. Nada de eso desaparece.
Pero en un monorepo real (TypeScript con dependencias de workspace, servicios en Python, paquetes mixtos) el contexto del agente se rompe en el momento en que el archivo relevante todavía no está en el radar de Cascade.
Cuatro arreglos manuales junto con su modo de falla. Izquierda = lo que haces hoy. Derecha = dónde se rompe.
// the fix
Mencionas con @ los tres archivos que crees que importan. Cascade edita limpiamente dentro de ellos.
// where it breaks
Funciona cuando ya sabes cuáles archivos están involucrados. El objetivo de las herramientas de contexto es justamente mostrar los archivos que no sabías que había que mencionar.
// the fix
Pegas 200 líneas de otro paquete en Cascade para darle suficiente contexto.
// where it breaks
El snippet que pegaste a las 9 a. m. no refleja el rebase que tu compañero hizo a las 11 a. m. Cascade está editando contra una versión fantasma del paquete.
// the fix
Escribes un archivo .windsurfrules o un markdown de arquitectura. Hoy está correcto.
// where it breaks
Todo lo que escribes a mano se desactualiza. El código es la fuente de verdad. Un doc que explica la capa de colas es correcto durante una semana, y después está mal para siempre.
// the fix
Agregas .windsurfrules para nomenclatura, lint y comandos de build. Genial para el comportamiento.
// where it breaks
.windsurfrules es el lugar correcto para “siempre ejecuta pnpm tsc -b antes de los commits”. No es un índice consultable de cada símbolo, archivo y punto de llamada en tu monorepo.
No es un reemplazo de Windsurf. Es la capa de contexto de repo que se conecta al soporte MCP de Cascade.
.windsurfrules sigue haciendo su trabajo. Las menciones con @ siguen haciendo el suyo. Maguyva llena el hueco que ellos no cubren.Cascade edita el archivo que le señalas.
Maguyva le dice al agente qué archivo señalar.
Entre paquetes, entre lenguajes. Fundamentado en el grafo de llamadas real, no en el grep de Cascade.
// workflow 01
cascade> ¿dónde pasa la autenticación en este monorepo? graph::query("authentication flow") packages/web/src/auth/session.ts:42 middleware packages/api/src/auth/jwt.ts:88 token verify packages/shared/src/auth/types.ts:12 AuthContext packages/admin/src/auth/admin-only.ts:31 rbac gate → 4 puntos de entrada en 4 paquetes, ordenados por densidad de puntos de llamada. [exit 0]
No mencionaste ningún archivo. No pegaste ningún snippet. Cascade tiene los cuatro archivos que importan, en el orden correcto, y puede hacer una edición fundamentada.
// workflow 02
cascade> ¿cómo maneja normalizePhoneNumber el formato E.164? semantic::query("normalize phone E.164") packages/shared/util/phone.ts:88 normalizePhoneNumber() ← impl real packages/api/test/phone.spec.ts:14 jest.mock(...) ← stub [exit 0]
Los nombres mienten. Los mocks tapan el código real. Maguyva ubica la implementación real por encima del mock de prueba, en todos los paquetes.
// workflow 03
cascade> ¿qué llama a QueueDispatcher.publish en todo el monorepo? graph::callers(QueueDispatcher.publish) 3 en packages/billing/* 1 en packages/audit/* 1 en packages/notifications/* 1 en services/python-worker/* ← entre lenguajes vía stub de gRPC [exit 0]
Entre paquetes, y entre lenguajes cuando tienes un repo políglota, los puntos de llamada aparecen inline. El diff está fundamentado en importadores reales, no en el grep de Cascade.
Tres pasos. Nivel Free: 3 repositorios, Hasta 50 mil líneas de repo indexadas, sin tarjeta.
// step 01
Elige el monorepo donde más has sentido el dolor de contexto.
// step 02
// ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"maguyva": {
"serverUrl": "https://maguyva.tools/mcp",
"headers": {
"Authorization": "Bearer <your-key>"
}
}
}
}// step 03
No empieces con toda tu empresa. Empieza con un repo y una pregunta verificable, como “¿qué llama a formatInvoice entre paquetes?”