Inteligencia Artificial · 26 de marzo de 2026 · Rodrigo Gutiérrez
Cuando el software empieza a programarse solo
Durante años, la conversación sobre desarrollo seguro giró en torno a una idea bastante cómoda: los desarrolladores escribían código, los equipos de seguridad revisaban después, y el sistema completo avanzaba con esa tensión casi ritual entre velocidad y control. La llegada de los asistentes de programación pareció, en un comienzo, simplemente otra aceleración en esa misma lógica. Más sugerencias, menos tiempo perdido, más productividad visible. Pero el tablero cambió cuando esos asistentes dejaron de limitarse a proponer líneas de código y comenzaron a ejecutar acciones, elegir paquetes, abrir pull requests (solicitudes de cambio), correr pruebas, consultar documentación en tiempo real y, en algunos casos, interactuar con herramientas externas de forma semiautónoma. En ese punto, la discusión dejó de tratar sobre ayuda al desarrollador y empezó a tratar sobre delegación operativa.
Ese matiz parece menor, pero es decisivo. Un sistema que sugiere una función defectuosa puede causar deuda técnica (trabajo futuro inevitable para corregir malas decisiones presentes). Un sistema que instala una dependencia insegura, interpreta instrucciones ocultas en documentación externa o decide que un paquete inexistente “probablemente” es correcto, puede introducir un riesgo sistémico a la cadena de suministro de software (conjunto de componentes, librerías, procesos y herramientas que participan en la construcción de una aplicación). La diferencia entre ambas cosas es la misma que existe entre un pasante que redacta un borrador y un operador con credenciales que firma contratos. En la superficie ambos “ayudan”. En la práctica, uno opina y el otro actúa.
Eso explica por qué la conversación global se ha movido con tanta rapidez desde la IA para programar hacia el desarrollo autónomo. La promesa es seductora: ciclos más cortos, menos tareas repetitivas, mayor capacidad de experimentación, menor fricción para equipos pequeños y una aparente democratización de la productividad senior. Pero esa promesa trae una cláusula oculta. Cada punto de autonomía amplifica el impacto de los errores del modelo, de las malas configuraciones y de los datos de contexto que el sistema consume. Cuando un agente de desarrollo decide a qué repositorio acudir, qué versión instalar, qué test ignorar o qué instrucción priorizar, está tomando decisiones de arquitectura, de riesgo y de cumplimiento. Lo hace además a velocidad de máquina, sin cansancio y sin esa saludable dosis de desconfianza que, para bien o para mal, sí acompaña a los humanos experimentados.
Aquí aparece el verdadero giro cultural. Durante años muchas organizaciones intentaron convertir la seguridad en una “puerta” al final del proceso. Ahora esa puerta llegó demasiado tarde. Si el modelo participa desde el origen en la elección de componentes, en la interpretación de documentación y en la ejecución de tareas, la gobernanza debe existir en el mismo punto donde nace la decisión. La empresa que use agentes para construir software sin rediseñar su modelo de control no estará automatizando desarrollo: estará automatizando exposición.
Y esa exposición no se limita a errores accidentales. A medida que la IA gana agencia (capacidad de ejecutar acciones con cierto grado de autonomía), también se vuelve más predecible para los atacantes. El software moderno comienza a programarse solo, sí. La pregunta incómoda es quién está enseñándole qué confiar.
El nuevo cuello de botella no es el código, es la confianza
La narrativa dominante en torno a la IA aplicada al desarrollo ha sido demasiado estrecha. Se ha medido su valor sobre todo en términos de velocidad: cuántas líneas produce, cuánto tiempo ahorra, cuántas tareas rutinarias elimina. El problema es que esa métrica, aunque real, captura solo la parte más vistosa del fenómeno. Lo que la mayoría de las organizaciones está descubriendo ahora es que el nuevo cuello de botella ya no es escribir código, sino decidir qué código, qué dependencia, qué herramienta y qué acción merecen confianza.
En el desarrollo contemporáneo, una aplicación rara vez es una construcción puramente original. Es, más bien, una coreografía de componentes de terceros, librerías, SDKs (kits de desarrollo), contenedores, pipelines (flujos automatizados de construcción y despliegue) y servicios que interactúan entre sí. La IA no reduce esa complejidad; en muchos casos la multiplica. Al acelerar la producción, también acelera el consumo de paquetes externos y la modificación de dependencias transitivas (componentes que llegan indirectamente a través de otros paquetes). Esa es una de las intuiciones más importantes del momento actual: la IA no está reemplazando el ecosistema abierto; está profundizando la dependencia de ese ecosistema.
El resultado es una paradoja elegante y peligrosa. Mientras el negocio celebra que “ahora desarrollamos más rápido”, el perímetro real del riesgo se expande silenciosamente. Más componentes externos significan más superficies de ataque, más versiones desalineadas, más decisiones implícitas y más posibilidades de que un modelo recomiende algo plausible, pero equivocado. Lo plausible es justamente lo que vuelve a este problema tan difícil. Un paquete con un nombre convincente, una versión que parece razonable, una instrucción escondida en un README (archivo descriptivo del proyecto), una herramienta expuesta por un servidor de contexto: nada de eso necesita parecer obviamente malicioso para resultar efectivo. Solo necesita sonar suficientemente correcto como para no activar sospechas.
Ese es el punto donde muchas empresas siguen mirando el fenómeno con lentes antiguos. Ven a la IA como un acelerador individual, cuando en realidad ya opera como una capa de mediación entre el desarrollador y la realidad técnica. El ingeniero no consulta directamente toda la documentación, no valida manualmente cada paquete, no revisa con el mismo detalle cada llamada sugerida. Confía en una máquina que resume, prioriza y propone. En cuanto esa máquina pasa de resumir a ejecutar, la confianza deja de ser un asunto humano y se convierte en un problema arquitectónico.
Por eso la seguridad del desarrollo autónomo no puede plantearse como una discusión moral sobre “usar o no usar IA”. Esa discusión ya perdió vigencia. La cuestión es mucho más concreta: dónde reside la fuente de verdad, quién valida las decisiones, cómo se auditan las acciones y qué límites se imponen antes de que el agente toque sistemas reales. La organización madura no será la que prohíba agentes, sino la que entienda que la confianza en un agente no se declara: se diseña.
Ese diseño exige una disciplina distinta. Exige registros aprobados, repositorios internos, políticas de versiones, inteligencia de vulnerabilidades en tiempo real, permisos mínimos, trazabilidad completa y revisión humana en los puntos donde el costo de equivocarse es existencial. Dicho de otro modo, el futuro no pertenece a quienes entreguen más autonomía, sino a quienes sepan encapsularla. En seguridad, como en física, la energía sin contención no es progreso. Es explosión.
Cuando la dependencia alucina y el atacante publica primero
Uno de los síntomas más reveladores de esta nueva etapa es también uno de los más subestimados: la tendencia de los modelos a recomendar paquetes inexistentes o dependencias incorrectas. A primera vista, podría parecer un error banal, casi anecdótico. Un tropiezo menor en el flujo del desarrollo asistido. Pero en realidad ese comportamiento abrió un vector de riesgo extraordinariamente moderno, porque convierte una alucinación (respuesta convincente pero falsa generada por un modelo) en una oportunidad operativa para atacantes con paciencia y timing.
El mecanismo es simple y, por eso mismo, elegante. Un modelo sugiere un paquete con un nombre verosímil, coherente con la tarea y estilísticamente compatible con el ecosistema del lenguaje. El desarrollador, o peor aún el agente con permiso para instalar dependencias, intenta usarlo. Si el paquete no existe, el error puede detener el proceso. Pero si un atacante registró antes ese nombre en un repositorio público y le adjuntó funcionalidad maliciosa, el “error” deja de ser error y se convierte en carga útil (payload, contenido malicioso que ejecuta la acción dañina). El fenómeno ya recibió nombre propio: slopsquatting, una variación contemporánea del typosquatting (registro de nombres similares para engañar) donde el error no nace del dedo humano, sino de la imaginación estadística del modelo.
Lo perturbador de este escenario no es solo su factibilidad, sino su compatibilidad con el entusiasmo actual por el desarrollo semiautomático. Cuanto más se empuja a los equipos hacia flujos donde la IA propone, corrige, instala y prueba por sí misma, más se reduce el espacio para que alguien se pregunte si la pieza que acaba de entrar era legítima, mantenida, segura o siquiera real. Y aunque los agentes más avanzados ya incorporan mecanismos de validación contextual, búsquedas en tiempo real o chequeos de importaciones, el problema no desaparece. Solo se vuelve menos frecuente y más difícil de detectar. El mercado está descubriendo que reducir el riesgo no equivale a eliminarlo, y que la disminución estadística puede dar una falsa sensación de inmunidad.
Aquí conviene hacer una distinción importante. El problema no es solo que el modelo invente. El problema es que el ecosistema de desarrollo moderno recompensa las respuestas suficientemente útiles antes de exigirles veracidad completa. Si compila, si pasa tests básicos, si resuelve la historia de usuario, la presión del negocio empuja a seguir adelante. Pero seguridad nunca ha sido el arte de aceptar lo que funciona a primera vista. Seguridad es la disciplina de sospechar especialmente de aquello que funciona demasiado bien sin haber sido comprendido.
Un paquete malicioso instalado por error humano ya era grave. Un paquete malicioso instalado por un agente obediente y veloz es otra categoría de problema, porque escala mejor que nosotros. Esa es la diferencia central. La alucinación en un chat puede producir vergüenza. La alucinación dentro de un pipeline puede producir compromiso de credenciales, ejecución remota, exfiltración de secretos o contaminación persistente de builds futuros.
Por eso el desarrollo autónomo obliga a madurar el concepto de procedencia (provenance, evidencia verificable de origen y recorrido de un componente). Ya no basta saber que algo está disponible públicamente. Hay que saber quién lo publicó, cómo llegó a la organización, qué políticas autorizan su uso y qué evidencia existe de que su incorporación fue deliberada y no improvisada por una máquina apurada. En la era del agente, la dependencia deja de ser una librería. Se convierte en un voto de confianza emitido a gran velocidad.
El problema ya no vive solo en el repositorio
Durante mucho tiempo, la seguridad del desarrollo podía imaginarse como un conjunto relativamente acotado de controles sobre el código fuente, los binarios y la infraestructura de despliegue. Ese mapa ya no alcanza. En el desarrollo autónomo, el problema se expande hacia una nueva capa: la del contexto. El agente no decide solo a partir del código existente, sino también de documentación, comentarios, herramientas conectadas, servidores de contexto, instrucciones de sistema, historiales de tareas y artefactos externos que consume durante su ejecución. Dicho de manera brutalmente simple: hoy no basta con proteger lo que compilas; hay que proteger también lo que el agente lee, interpreta y cree.
Ahí es donde protocolos y patrones recientes, como MCP (Model Context Protocol, estándar para conectar modelos con herramientas y fuentes de datos), se vuelven estratégicos. Su valor es evidente. Permiten que agentes y asistentes trabajen con documentación actualizada, ejecuten herramientas, consulten sistemas y mantengan una separación más limpia entre razonamiento y acceso a recursos. Pero justo por eso amplían el perímetro de riesgo. Una descripción de herramienta envenenada, instrucciones ocultas en contenido externo, metadatos manipulados o cambios posteriores en un servidor previamente aprobado pueden empujar al modelo a realizar acciones no previstas. El ataque ya no consiste únicamente en comprometer código; consiste en comprometer la interpretación del mundo que usa el agente para actuar.
Esa diferencia es filosófica y operativa al mismo tiempo. En la seguridad clásica, el defensor intentaba proteger la ejecución. En la seguridad de agentes, también debe proteger la semántica (el significado que el sistema atribuye a lo que recibe). Una herramienta puede seguir siendo técnicamente la misma y, sin embargo, volverse peligrosa si la descripción que el modelo utiliza para decidir su uso ha sido alterada. Un documento puede parecer inocuo para un humano y contener instrucciones invisibles, pero persuasivas para un modelo. Una fuente de contexto puede estar “autorizada” y aun así degradar la seguridad si cambia sin control. Lo que emerge aquí es una categoría de amenaza profundamente incómoda para las organizaciones, porque erosiona una intuición vieja: que el peligro es aquello que luce abiertamente hostil.
No, en esta etapa el peligro luce útil, reciente y bien integrado.
Por eso la discusión sobre seguridad en desarrollo autónomo se acerca cada vez más a la identidad y autorización de agentes. No basta con saber que una persona tiene permisos. También importa qué permisos tiene el agente que actúa por esa persona, cómo se heredan, cómo se limitan, cómo se auditan y cómo se revocan. Un agente no debería navegar por el entorno con credenciales amplias “porque así funciona mejor”. Debería operar como un nuevo integrante del equipo en su primer día: con alcance acotado, tareas delimitadas, visibilidad máxima y capacidad de escalar privilegios solo mediante aprobación explícita.
La gran ironía del momento es que muchas empresas están conectando a sus agentes con más sistemas de los que jamás habrían confiado a un empleado junior. Lo hacen porque el agente parece brillante, rápido y siempre disponible. Pero velocidad sin contexto seguro es una receta muy costosa. El pipeline ya no termina en Git. También pasa por el contexto, y el contexto es ahora parte de la superficie de ataque.
La empresa que gane no será la más rápida, sino la que desacople velocidad de riesgo
Toda disrupción tecnológica produce un reflejo predecible en el management: la obsesión por no quedarse atrás. En el caso del desarrollo autónomo, ese reflejo ha sido especialmente intenso, porque los beneficios son visibles desde el primer día. Equipos que construyen prototipos en horas, tareas repetitivas que desaparecen, documentación que se genera sola, correcciones iniciales que llegan sin intervención humana. El problema es que la primera ola de adopción suele enamorarse de la productividad bruta y posponer el rediseño del control. Ese desfase es precisamente donde se incuban los incidentes que después parecen “sorpresivos”.
Lo que las organizaciones más maduras están entendiendo es que el objetivo no puede ser simplemente ir más rápido. El objetivo debe ser separar la velocidad de la fragilidad. Eso implica redibujar el SDLC (Software Development Life Cycle, ciclo de vida del desarrollo de software) bajo una premisa nueva: si un agente participa del trabajo, entonces el punto de selección y ejecución necesita guardrails (barreras de control), no solo inspección posterior. La revisión tardía ya no alcanza cuando la máquina cambió dependencias, tocó pruebas, consultó herramientas externas y generó un pull request que parece razonable. Para cuando la seguridad “revisa después”, parte del riesgo ya ocurrió.
De ahí surge una agenda muy concreta. Repositorios de artefactos controlados en lugar de consumo indiscriminado desde internet. Políticas de versiones y upgrade (actualización) preaprobadas en vez de recomendaciones improvisadas. Entornos de ejecución aislados para agentes. Firewalls de salida, bitácoras exhaustivas, sesiones trazables, evaluaciones automáticas de dependencias, reglas claras sobre qué acciones requieren aprobación humana y cuáles pueden ejecutarse de forma autónoma. No como una burocracia ornamental, sino como la única forma seria de permitir autonomía sin abrir la puerta a una entropía corporativa disfrazada de innovación.
También será necesario cambiar el lenguaje con el que se gobierna a estos sistemas. Hablar de “herramienta de productividad” ya resulta insuficiente. Un agente que modifica código, interactúa con APIs (interfaces de programación), consulta documentación externa y propone cambios en flujos productivos es más parecido a un operador digital que a un simple asistente. Y a los operadores se les aplica separación de funciones, mínimos privilegios, monitoreo continuo y trazabilidad forense (capacidad de reconstruir acciones con evidencia). No porque desconfiemos de ellos moralmente, sino porque la seguridad moderna se diseña asumiendo que incluso los elementos útiles pueden fallar o ser manipulados.
Aquí aparece la oportunidad más interesante. Las empresas que adopten bien el desarrollo autónomo no solo escribirán software más rápido. También construirán una disciplina operativa superior. Convertirán la seguridad de la cadena de suministro en una capacidad nativa del negocio, no en un accesorio del área técnica. Harán que la procedencia, la observabilidad y la validación en tiempo real sean parte del ADN de sus pipelines. Y eso tendrá un efecto secundario valioso: les permitirá innovar con menos miedo.
La velocidad real no es la que elimina controles. Es la que vuelve los controles tan tempranos y tan inteligentes que dejan de sentirse como freno. Ahí está la frontera estratégica. No en prohibir la autonomía, ni en celebrarla con ingenuidad, sino en domesticarla hasta que produzca ventaja sin regalar superficie de ataque.
La próxima crisis no será un bug brillante, sino una cadena de pequeñas confianzas mal otorgadas
Existe una tentación estética en la ciberseguridad contemporánea: imaginar que las grandes crisis nacerán de un exploit sofisticado, un 0-day (vulnerabilidad desconocida para el proveedor) cinematográfico o una operación de intrusión especialmente virtuosa. Ese imaginario persiste porque resulta narrativamente cómodo. Pero el desarrollo autónomo sugiere otro futuro, menos glamoroso y posiblemente más peligroso. La próxima crisis relevante puede no empezar con una genialidad ofensiva. Puede comenzar con una suma de decisiones automáticas suficientemente plausibles, tomadas por sistemas a los que se les confió demasiado, demasiado pronto y con demasiado poco contexto verificable.
Un agente leyó una documentación manipulada. Otro aceptó una herramienta cuya descripción cambió. Un tercero seleccionó una versión inexistente y encontró un paquete publicado por un atacante. El pipeline lo aceptó porque compiló. El equipo lo aprobó porque el pull request parecía limpio. La revisión se concentró en la lógica de negocio y no en la procedencia. Semanas después, un secreto expuesto, una librería contaminada o un comportamiento inesperado activa la alarma. Cuando eso ocurra, muchas organizaciones descubrirán que el incidente no nació en una decisión individual escandalosamente mala, sino en una secuencia de pequeñas confianzas mal distribuidas.
Esa es la razón por la cual el desarrollo autónomo no debe verse solo como un capítulo de ingeniería, sino como un problema de gobierno corporativo. Afecta la forma en que una empresa entiende autoridad, evidencia, responsabilidad y riesgo aceptable. Obliga a preguntar quién responde por una acción ejecutada por un agente, qué trazabilidad existe para reconstruirla, qué umbrales obligan a intervención humana y cómo se evita que la lógica estadística del modelo suplante la política explícita de la organización.
También obliga a abandonar una ilusión profundamente empresarial: la de creer que se puede capturar el beneficio inmediato de la autonomía sin pagar el costo de rediseñar controles. No se puede. La industria ya está entrando en una etapa donde los estándares, la identidad de agentes, la trazabilidad y la seguridad del contexto dejan de ser temas experimentales y empiezan a parecer requisitos inevitables. No porque los reguladores estén de mal humor, sino porque la tecnología cruzó una línea. Ahora los sistemas no solo redactan. Deciden.
Y cuando un sistema decide, la pregunta central deja de ser si produce más. La pregunta pasa a ser si su criterio está gobernado por evidencia actual, límites técnicos y políticas que resistan presión operativa.
El verdadero desafío del desarrollo autónomo no es enseñar a la máquina a programar. Es impedir que aprenda a equivocarse con nuestros privilegios. Esa frase resume la década que se abre. Quienes la entiendan temprano podrán construir más rápido y con mayor confianza. Quienes no, descubrirán demasiado tarde que la autonomía mal gobernada no reduce trabajo humano: lo desplaza hacia respuesta a incidentes, contención, auditoría y crisis reputacional.
El software empieza a programarse solo. La madurez, en cambio, seguirá siendo un trabajo profundamente humano.