<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Cli | The .NET Blog</title><link>https://thedotnetblog.com/es/tags/cli/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>es</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Wed, 27 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/es/tags/cli/index.xml" rel="self" type="application/rss+xml"/><item><title>dotnet new WinUI: Crea apps de Windows sin tocar Visual Studio</title><link>https://thedotnetblog.com/es/news/emiliano-montesdeoca/dotnet-new-winui-templates-cli-vscode/</link><pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/es/news/emiliano-montesdeoca/dotnet-new-winui-templates-cli-vscode/</guid><description>Las plantillas de proyectos WinUI ahora funcionan con dotnet new — apps en blanco, patrones NavigationView y más. Soporte para VS Code, sin necesidad de Visual Studio, con diseño Fluent incluido por defecto.</description><content:encoded>&lt;p&gt;El desarrollo con WinUI solía requerir Visual Studio. Eso está cambiando: Microsoft ha publicado plantillas de proyectos y elementos de código abierto para WinUI que funcionan con &lt;code&gt;dotnet new&lt;/code&gt;, incorporando el desarrollo de aplicaciones Windows al flujo de trabajo estándar de la CLI.&lt;/p&gt;
&lt;h2 id="empezar-en-tres-comandos"&gt;Empezar en tres comandos&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Instalar las plantillas&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet new install Microsoft.WindowsAppSDK.WinUI.CSharp.Templates
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Crear una app NavigationView&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet new winui-navview -n MyApp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Ejecutarla&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; MyApp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sin Visual Studio, sin configuración manual del proyecto. La aplicación se ejecuta con &lt;code&gt;dotnet run&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="qué-incluye"&gt;Qué incluye&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Plantilla en blanco&lt;/strong&gt; (&lt;code&gt;dotnet new winui&lt;/code&gt;) — un punto de partida moderno con una barra de título Fluent ya configurada, icono de app actualizado con recurso &lt;code&gt;.ico&lt;/code&gt;, y valores predeterminados correctos para modo claro/oscuro. Mejor que la antigua plantilla en blanco que te dejaba configurar lo básico tú mismo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Plantilla NavigationView&lt;/strong&gt; (&lt;code&gt;dotnet new winui-navview&lt;/code&gt;) — el patrón de navegación maestro-detalle, completamente configurado con un NavigationView, barra de título moderna y estructura de navegación multipágina. Sigue la silueta estándar de apps Windows para aplicaciones basadas en navegación. Si estás construyendo algo con navegación lateral, empieza aquí.&lt;/p&gt;
&lt;p&gt;Ambas plantillas siguen las &lt;a href="https://learn.microsoft.com/windows/apps/design/basics/app-silhouette"&gt;siluetas de apps Windows&lt;/a&gt; — patrones modernos de Fluent Design para diseño, navegación y estructura visual — desde el primer momento.&lt;/p&gt;
&lt;h2 id="por-qué-importa-para-desarrolladores-que-no-usan-visual-studio"&gt;Por qué importa para desarrolladores que no usan Visual Studio&lt;/h2&gt;
&lt;p&gt;Los desarrolladores de WinUI que usan VS Code, Rider o herramientas de línea de comandos han estado desatendidos. Las plantillas existentes de Visual Studio no se podían usar fuera de VS — había que recrear manualmente la estructura del proyecto y configurar lo básico.&lt;/p&gt;
&lt;p&gt;Estas plantillas son de código abierto (ver &lt;a href="https://github.com/microsoft/WindowsAppSDK/pull/6407"&gt;WindowsAppSDK PR #6407&lt;/a&gt;), desarrolladas a partir de &lt;a href="https://github.com/microsoft/microsoft-ui-xaml/issues/10388"&gt;comentarios de la comunidad&lt;/a&gt;, y disponibles ahora. El soporte para Visual Studio está en curso — estas mismas plantillas eventualmente funcionarán allí también.&lt;/p&gt;
&lt;p&gt;Para equipos que quieran automatizar la configuración de sus proyectos WinUI, integrarla en CI, o simplemente usar un editor diferente a Visual Studio, esta es una mejora significativa.&lt;/p&gt;
&lt;p&gt;Post original: &lt;a href="https://devblogs.microsoft.com/ifdef-windows/introducing-dotnet-new-templates-for-winui/"&gt;Introducing dotnet new WinUI templates&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Cosmos DB Shell Está en Vista Previa Pública — Y Tiene un Servidor MCP Integrado</title><link>https://thedotnetblog.com/es/news/emiliano-montesdeoca/cosmosdb-shell-public-preview-mcp-server-cli/</link><pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/es/news/emiliano-montesdeoca/cosmosdb-shell-public-preview-mcp-server-cli/</guid><description>Azure Cosmos DB Shell es una nueva CLI de código abierto que expone los comandos de la base de datos como herramientas MCP. Tus agentes de IA pueden navegar por contenedores, ejecutar consultas y gestionar datos usando la misma interfaz que usas tú.</description><content:encoded>&lt;p&gt;Si alguna vez has tenido que ir y venir entre una pestaña del portal, una muestra de SDK y un script a medio terminar solo para responder una pregunta de Cosmos DB, ya conoces la fricción que este proyecto está diseñado para eliminar.&lt;/p&gt;
&lt;p&gt;Azure Cosmos DB Shell acaba de entrar en vista previa pública. Es una CLI de código abierto con sintaxis tipo bash y — la parte que lo hace interesante — un servidor MCP integrado.&lt;/p&gt;
&lt;h2 id="qué-lo-hace-diferente-de-otras-clis-de-base-de-datos"&gt;Qué lo Hace Diferente de Otras CLIs de Base de Datos&lt;/h2&gt;
&lt;p&gt;La CLI en sí es útil: comandos familiares, soporte para scripts, integración CI/CD. Esa parte es lo mínimo esperado para una herramienta de base de datos orientada a desarrolladores.&lt;/p&gt;
&lt;p&gt;La parte interesante es la integración del servidor MCP. Cada comando que expone la CLI se convierte en una herramienta MCP que tus agentes de IA pueden llamar. No hay ninguna capa de API personalizada, ni código de integración que escribir. Tu agente puede:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Navegar por las jerarquías de bases de datos con &lt;code&gt;cd&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ejecutar consultas SQL con &lt;code&gt;query&lt;/code&gt; y obtener resultados estructurados&lt;/li&gt;
&lt;li&gt;Crear y modificar elementos con &lt;code&gt;create item&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;rm&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Gestionar bases de datos y contenedores con &lt;code&gt;mkdb&lt;/code&gt;, &lt;code&gt;mkcon&lt;/code&gt;, &lt;code&gt;rmdb&lt;/code&gt;, &lt;code&gt;rmcon&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Inspeccionar el contexto actual con &lt;code&gt;endpoint&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El cambio clave: tu agente no está hablando con una API de Cosmos DB — está hablando con la misma interfaz de shell que usas tú. Los comandos son deterministas, auditables y de código abierto para que puedas inspeccionar exactamente qué está pasando.&lt;/p&gt;
&lt;h2 id="la-base-de-código-abierto-importa"&gt;La Base de Código Abierto Importa&lt;/h2&gt;
&lt;p&gt;Esto no es un servicio gestionado de caja negra. El shell es de código abierto, lo que significa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los equipos de seguridad pueden auditar la implementación&lt;/li&gt;
&lt;li&gt;Los equipos de plataforma pueden hacer fork y ampliarlo para sus estándares específicos&lt;/li&gt;
&lt;li&gt;Los desarrolladores pueden contribuir con mejoras que beneficien a todos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para los equipos empresariales que adoptan herramientas de IA, &amp;ldquo;¿podemos ver exactamente cómo funciona?&amp;rdquo; es cada vez menos un requisito opcional. El código abierto aquí es un diferenciador significativo.&lt;/p&gt;
&lt;h2 id="tres-escenarios-que-se-vuelven-más-fáciles"&gt;Tres Escenarios que Se Vuelven Más Fáciles&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Análisis inteligente de datos&lt;/strong&gt; — conecta un agente al shell, haz preguntas en lenguaje natural, obtén resultados de consultas estructurados. El agente se encarga de la construcción de la consulta; el shell se encarga de la ejecución.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gestión autónoma de datos&lt;/strong&gt; — los flujos de trabajo que necesitan crear, actualizar o eliminar datos en Cosmos DB pueden hacerlo a través de las herramientas MCP sin necesitar una integración personalizada.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Supervisión y alertas en tiempo real&lt;/strong&gt; — un agente puede consultar contenedores periódicamente, comparar resultados y mostrar anomalías a través del canal de notificación que tenga sentido.&lt;/p&gt;
&lt;p&gt;La interfaz MCP hace que estos escenarios sean composables con cualquier plataforma de IA que hable MCP — no solo las herramientas de Microsoft.&lt;/p&gt;
&lt;h2 id="para-empezar"&gt;Para Empezar&lt;/h2&gt;
&lt;p&gt;El shell está en vista previa pública. Instálalo, configura tu conexión de Cosmos DB y habilita el servidor MCP. Desde allí, cualquier host de agente compatible con MCP puede descubrir y usar las herramientas.&lt;/p&gt;
&lt;p&gt;Post original: &lt;a href="https://devblogs.microsoft.com/cosmosdb/azure-cosmos-db-shell-public-preview-ai-mcp-cli/"&gt;Announcing the Public Preview of Azure Cosmos DB Shell: Open-Source Power Meets AI-Driven Database Automation&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Windows App Dev CLI v0.3: F5 desde la terminal y automatización de UI para agentes</title><link>https://thedotnetblog.com/es/news/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/es/news/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/</guid><description>Windows App Development CLI v0.3 llega con winapp run para lanzar y depurar desde la terminal, winapp ui para automatización de UI, y un paquete NuGet que hace que dotnet run funcione con apps empaquetadas.</description><content:encoded>&lt;p&gt;&lt;em&gt;Esta publicación fue traducida automáticamente. Para la versión original, &lt;a href="https://thedotnetblog.com/es/news/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/"&gt;haz clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;La experiencia F5 de Visual Studio es fantástica. Pero tener que abrir VS solo para lanzar y depurar una app Windows empaquetada es excesivo cuando estás en un pipeline de CI, ejecutando un workflow automatizado, o — cada vez más — cuando un agente de IA está haciendo las pruebas.&lt;/p&gt;
&lt;p&gt;Windows App Development CLI v0.3 acaba de &lt;a href="https://devblogs.microsoft.com/ifdef-windows/windows-app-development-cli-v0-3-new-run-and-ui-commands-plus-dotnet-run-support-for-packaged-apps/"&gt;salir&lt;/a&gt; y lo aborda directamente con dos funciones destacadas: &lt;code&gt;winapp run&lt;/code&gt; y &lt;code&gt;winapp ui&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="winapp-run-f5-desde-cualquier-sitio"&gt;winapp run: F5 desde cualquier sitio&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;winapp run&lt;/code&gt; toma una carpeta de app sin empaquetar y un manifiesto, y hace todo lo que VS hace en un debug launch: registra un paquete loose, lanza la app y preserva el &lt;code&gt;LocalState&lt;/code&gt; entre re-deploys.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Construye tu app, luego ejecútala como app empaquetada&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;winapp run ./bin/Debug
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Funciona para WinUI, WPF, WinForms, Console, Avalonia y más. Los modos están pensados tanto para desarrolladores como para workflows automatizados:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--detach&lt;/code&gt;&lt;/strong&gt;: Lanza y devuelve el control a la terminal inmediatamente. Perfecto para CI/automation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--unregister-on-exit&lt;/code&gt;&lt;/strong&gt;: Limpia el paquete registrado al cerrar la app. Ejecuciones de test limpias.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--debug-output&lt;/code&gt;&lt;/strong&gt;: Captura mensajes &lt;code&gt;OutputDebugString&lt;/code&gt; y excepciones en tiempo real. Añade &lt;code&gt;--symbols&lt;/code&gt; para PDBs del Microsoft Symbol Server.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="nuevo-paquete-nuget-dotnet-run-para-apps-empaquetadas"&gt;Nuevo paquete NuGet: dotnet run para apps empaquetadas&lt;/h2&gt;
&lt;p&gt;Para desarrolladores .NET hay un nuevo paquete NuGet: &lt;code&gt;Microsoft.Windows.SDK.BuildTools.WinApp&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Añádelo al proyecto (o deja que &lt;code&gt;winapp init&lt;/code&gt; lo haga), y &lt;code&gt;dotnet run&lt;/code&gt; maneja todo el inner loop: build, preparar un paquete loose-layout, registrar en Windows y lanzar — todo en un paso.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Deja que winapp init lo configure&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;winapp init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# O instala directamente&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet add package Microsoft.Windows.SDK.BuildTools.WinApp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Funciona con WinUI, WPF, WinForms, Console, Avalonia. Sin comandos adicionales, sin registro manual. Solo &lt;code&gt;dotnet run&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="winapp-ui-ui-automation-desde-la-línea-de-comandos"&gt;winapp ui: UI Automation desde la línea de comandos&lt;/h2&gt;
&lt;p&gt;Este es el que abre los escenarios agénticos. &lt;code&gt;winapp ui&lt;/code&gt; te da acceso completo de UI Automation a cualquier app Windows en ejecución — WPF, WinForms, Win32, Electron, WinUI3 — todo desde la terminal.&lt;/p&gt;
&lt;p&gt;Lo que puedes hacer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Listar todas las ventanas de nivel superior&lt;/li&gt;
&lt;li&gt;Navegar el árbol completo de UI Automation de cualquier ventana&lt;/li&gt;
&lt;li&gt;Buscar elementos por nombre, tipo o ID de automatización&lt;/li&gt;
&lt;li&gt;Hacer clic, invocar y establecer valores&lt;/li&gt;
&lt;li&gt;Tomar capturas de pantalla&lt;/li&gt;
&lt;li&gt;Esperar a que aparezcan elementos — ideal para sincronización de tests&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Combina &lt;code&gt;winapp ui&lt;/code&gt; con &lt;code&gt;winapp run&lt;/code&gt; y tienes un workflow completo build → lanzar → verificar desde la terminal. Un agente puede ejecutar tu app, inspeccionar el estado de UI, interactuar con ella programáticamente y validar el resultado.&lt;/p&gt;
&lt;h2 id="otras-novedades"&gt;Otras novedades&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp unregister&lt;/code&gt;&lt;/strong&gt;: Elimina un paquete sideloaded cuando terminas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp manifest add-alias&lt;/code&gt;&lt;/strong&gt;: Añade un &lt;code&gt;uap5:AppExecutionAlias&lt;/code&gt; para lanzar la app por nombre desde la terminal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tab completion&lt;/strong&gt;: Configura completado con un solo comando para PowerShell.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Package.appxmanifest&lt;/code&gt; por defecto&lt;/strong&gt;: Ahora &lt;code&gt;winapp init&lt;/code&gt; crea &lt;code&gt;Package.appxmanifest&lt;/code&gt; (convención VS) en lugar de &lt;code&gt;appxmanifest.xml&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="cómo-obtenerlo"&gt;Cómo obtenerlo&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;winget install Microsoft.WinAppCli
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# o&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g @microsoft/winappcli
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La CLI está en preview pública. Consulta el &lt;a href="https://github.com/microsoft/WinAppCli"&gt;repositorio en GitHub&lt;/a&gt; para documentación completa y el &lt;a href="https://devblogs.microsoft.com/ifdef-windows/windows-app-development-cli-v0-3-new-run-and-ui-commands-plus-dotnet-run-support-for-packaged-apps/"&gt;anuncio original&lt;/a&gt; para todos los detalles.&lt;/p&gt;</content:encoded></item><item><title>Deja de vigilar tu terminal: el modo desacoplado de Aspire cambia el flujo de trabajo</title><link>https://thedotnetblog.com/es/news/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/es/news/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/</guid><description>Aspire 13.2 te permite ejecutar tu AppHost en segundo plano y recuperar tu terminal. Combinado con los nuevos comandos CLI y el soporte para agentes, esto es más importante de lo que parece.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post fue traducido automáticamente. Para la versión original, &lt;a href="https://thedotnetblog.com/es/news/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/"&gt;haz clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cada vez que ejecutas un AppHost de Aspire, tu terminal desaparece. Bloqueada. Ocupada hasta que presionas Ctrl+C. ¿Necesitas ejecutar un comando rápido? Abre otra pestaña. ¿Quieres revisar los logs? Otra pestaña. Es una pequeña fricción que se acumula rápido.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 soluciona esto. James Newton-King &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;escribió todos los detalles&lt;/a&gt;, y honestamente, esta es una de esas funcionalidades que cambia inmediatamente tu forma de trabajar.&lt;/p&gt;
&lt;h2 id="modo-desacoplado-un-comando-terminal-de-vuelta"&gt;Modo desacoplado: un comando, terminal de vuelta&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ese es el atajo para &lt;code&gt;aspire run --detach&lt;/code&gt;. Tu AppHost arranca en segundo plano y recuperas tu terminal de inmediato. Sin pestañas extra. Sin multiplexor de terminal. Solo tu prompt, listo para usar.&lt;/p&gt;
&lt;h2 id="gestionando-lo-que-está-en-ejecución"&gt;Gestionando lo que está en ejecución&lt;/h2&gt;
&lt;p&gt;La cuestión es que ejecutar en segundo plano solo es útil si puedes gestionar lo que hay ahí fuera. Aspire 13.2 incluye un conjunto completo de comandos CLI para exactamente eso:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# List all running AppHosts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire ps
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Inspect the state of a specific AppHost&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire describe
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Stream logs from a running AppHost&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire logs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Stop a specific AppHost&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire stop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Esto convierte el CLI de Aspire en un gestor de procesos completo. Puedes iniciar múltiples AppHosts, verificar su estado, seguir sus logs y apagarlos — todo desde una sola sesión de terminal.&lt;/p&gt;
&lt;h2 id="combínalo-con-el-modo-aislado"&gt;Combínalo con el modo aislado&lt;/h2&gt;
&lt;p&gt;El modo desacoplado se combina naturalmente con el modo aislado. ¿Quieres ejecutar dos instancias del mismo proyecto en segundo plano sin conflictos de puertos?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire start --isolated
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire start --isolated
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Cada uno obtiene puertos aleatorios, secretos separados y su propio ciclo de vida. Usa &lt;code&gt;aspire ps&lt;/code&gt; para ver ambos, &lt;code&gt;aspire stop&lt;/code&gt; para detener el que ya no necesites.&lt;/p&gt;
&lt;h2 id="por-qué-esto-es-enorme-para-los-agentes-de-código"&gt;Por qué esto es enorme para los agentes de código&lt;/h2&gt;
&lt;p&gt;Aquí es donde se pone realmente interesante. Un agente de código trabajando en tu terminal ahora puede:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Iniciar la app con &lt;code&gt;aspire start&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Consultar su estado con &lt;code&gt;aspire describe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Revisar logs con &lt;code&gt;aspire logs&lt;/code&gt; para diagnosticar problemas&lt;/li&gt;
&lt;li&gt;Detenerla con &lt;code&gt;aspire stop&lt;/code&gt; cuando termine&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Todo sin perder la sesión de terminal. Antes del modo desacoplado, un agente que ejecutara tu AppHost se bloqueaba a sí mismo en su propia terminal. Ahora puede iniciar, observar, iterar y limpiar — exactamente como querrías que funcione un agente autónomo.&lt;/p&gt;
&lt;p&gt;El equipo de Aspire se volcó en esto. Ejecutar &lt;code&gt;aspire agent init&lt;/code&gt; configura un archivo de habilidades de Aspire que enseña estos comandos a los agentes. Así, herramientas como el agente de código de Copilot pueden gestionar tus cargas de trabajo de Aspire directamente.&lt;/p&gt;
&lt;h2 id="para-cerrar"&gt;Para cerrar&lt;/h2&gt;
&lt;p&gt;El modo desacoplado es una mejora de flujo de trabajo disfrazada de un simple flag. Dejas de cambiar contexto entre terminales, los agentes dejan de bloquearse a sí mismos, y los nuevos comandos CLI te dan visibilidad real de lo que está en ejecución. Es práctico, es limpio, y hace que el ciclo de desarrollo diario sea notablemente más fluido.&lt;/p&gt;
&lt;p&gt;Lee el &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;post completo&lt;/a&gt; para todos los detalles y obtén Aspire 13.2 con &lt;code&gt;aspire update --self&lt;/code&gt;.&lt;/p&gt;</content:encoded></item><item><title>azd update — Un solo comando para gobernar todos tus gestores de paquetes</title><link>https://thedotnetblog.com/es/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/es/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/</guid><description>Azure Developer CLI ahora tiene un comando de actualización universal que funciona sin importar cómo lo instalaste — winget, Homebrew, Chocolatey o script de instalación.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post fue traducido automáticamente. Para la versión original, &lt;a href="https://thedotnetblog.com/es/news/emiliano-montesdeoca/azd-update-universal-upgrade-command/"&gt;haz clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;¿Conoces ese mensaje de &amp;ldquo;Hay una nueva versión de azd disponible&amp;rdquo; que aparece cada pocas semanas? ¿Ese que ignoras porque no recuerdas si instalaste &lt;code&gt;azd&lt;/code&gt; con winget, Homebrew o ese script de curl que ejecutaste hace seis meses? Bueno, eso por fin tiene solución.&lt;/p&gt;
&lt;p&gt;Microsoft acaba de lanzar &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;&lt;code&gt;azd update&lt;/code&gt;&lt;/a&gt; — un único comando que actualiza Azure Developer CLI a la última versión sin importar cómo lo instalaste originalmente. Windows, macOS, Linux — da igual. Un solo comando.&lt;/p&gt;
&lt;h2 id="cómo-funciona"&gt;Cómo funciona&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Eso es todo. Si quieres acceso anticipado a nuevas funcionalidades, puedes cambiar a la build diaria de insiders:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel daily
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel stable
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;El comando detecta tu método de instalación actual y usa el mecanismo de actualización apropiado internamente. Se acabó el &amp;ldquo;espera, ¿usé winget o choco en esta máquina?&amp;rdquo;&lt;/p&gt;
&lt;h2 id="el-pequeño-detalle"&gt;El pequeño detalle&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd update&lt;/code&gt; viene a partir de la versión 1.23.x. Si estás en una versión anterior, necesitarás hacer una última actualización manual usando tu método de instalación original. Después de eso, &lt;code&gt;azd update&lt;/code&gt; se encarga de todo en adelante.&lt;/p&gt;
&lt;p&gt;Comprueba tu versión actual con &lt;code&gt;azd version&lt;/code&gt;. Si necesitas una instalación desde cero, la &lt;a href="https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd"&gt;documentación de instalación&lt;/a&gt; te cubre.&lt;/p&gt;
&lt;h2 id="por-qué-importa"&gt;Por qué importa&lt;/h2&gt;
&lt;p&gt;Es una pequeña mejora de calidad de vida, pero para los que usamos &lt;code&gt;azd&lt;/code&gt; a diario para desplegar agentes de IA y apps de Aspire en Azure, estar actualizado significa menos momentos de &amp;ldquo;ese bug ya estaba corregido en la última versión&amp;rdquo;. Una cosa menos en la que pensar.&lt;/p&gt;
&lt;p&gt;Lee el &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;anuncio completo&lt;/a&gt; y el &lt;a href="https://blog.jongallant.com/2026/04/azd-update"&gt;análisis más detallado&lt;/a&gt; de Jon Gallant para más contexto.&lt;/p&gt;</content:encoded></item><item><title>.NET Aspire 13.2 Quiere Ser el Mejor Amigo de Tu Agente de IA</title><link>https://thedotnetblog.com/es/news/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/es/news/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/</guid><description>Aspire 13.2 apuesta todo por el desarrollo agéntico — salida CLI estructurada, ejecuciones aisladas, entornos auto-reparables y datos OpenTelemetry completos para que tus agentes de IA puedan realmente construir, ejecutar y observar tus apps.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post fue traducido automáticamente. Para la versión original, &lt;a href="https://thedotnetblog.com/es/news/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/"&gt;haz clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;¿Conoces ese momento cuando tu agente de IA escribe código sólido, te emocionas, y luego todo se desmorona cuando intenta &lt;em&gt;ejecutar&lt;/em&gt; la cosa? Conflictos de puertos, procesos fantasma, variables de entorno incorrectas — de repente tu agente está quemando tokens depurando problemas de arranque en vez de construir funcionalidades.&lt;/p&gt;
&lt;p&gt;El equipo de Aspire acaba de publicar un &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;post muy bien pensado&lt;/a&gt; sobre exactamente este problema, y su respuesta es convincente: Aspire 13.2 está diseñado no solo para humanos, sino para agentes de IA.&lt;/p&gt;
&lt;h2 id="el-problema-es-real"&gt;El problema es real&lt;/h2&gt;
&lt;p&gt;Los agentes de IA son increíbles escribiendo código. Pero enviar una app full-stack funcional involucra mucho más que generar archivos. Necesitas iniciar servicios en el orden correcto, gestionar puertos, configurar variables de entorno, conectar bases de datos y obtener retroalimentación cuando algo se rompe. Ahora mismo, la mayoría de agentes manejan todo esto por prueba y error — ejecutando comandos, leyendo errores, intentando de nuevo.&lt;/p&gt;
&lt;p&gt;Le metemos instrucciones en Markdown, skills personalizados y prompts para guiarlos, pero son impredecibles, no se pueden compilar y cuestan tokens solo para parsear. El equipo de Aspire dio en el clavo con la idea central: los agentes necesitan &lt;strong&gt;compiladores y APIs estructuradas&lt;/strong&gt;, no más Markdown.&lt;/p&gt;
&lt;h2 id="aspire-como-infraestructura-para-agentes"&gt;Aspire como infraestructura para agentes&lt;/h2&gt;
&lt;p&gt;Esto es lo que Aspire 13.2 trae a la mesa del desarrollo agéntico:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Todo tu stack en código tipado.&lt;/strong&gt; El AppHost define tu topología completa — API, frontend, base de datos, caché — en TypeScript o C# compilable:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createBuilder&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;./.modules/aspire.js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;createBuilder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;postgres&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addPostgres&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;addDatabase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;catalog&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addRedis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;cache&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addNodeApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;src/index.ts&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withHttpEndpoint&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;PORT&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;postgres&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addViteApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waitFor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Un agente puede leer esto para entender la topología de la app, agregar recursos, conectar componentes y &lt;em&gt;compilar para verificar&lt;/em&gt;. El compilador le dice inmediatamente si algo está mal. Sin adivinanzas, sin prueba y error con archivos de configuración.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un solo comando para gobernarlos a todos.&lt;/strong&gt; En vez de que los agentes malabareen &lt;code&gt;docker compose up&lt;/code&gt;, &lt;code&gt;npm run dev&lt;/code&gt; y scripts de arranque de bases de datos, todo es simplemente &lt;code&gt;aspire start&lt;/code&gt;. Todos los recursos se lanzan en el orden correcto, en los puertos correctos, con la configuración correcta. Los procesos de larga duración tampoco cuelgan al agente — Aspire los gestiona.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modo aislado para agentes en paralelo.&lt;/strong&gt; Con &lt;code&gt;--isolated&lt;/code&gt;, cada ejecución de Aspire obtiene sus propios puertos aleatorios y secretos de usuario separados. ¿Tienes múltiples agentes trabajando en git worktrees? No colisionarán. Esto es enorme para herramientas como los agentes en segundo plano de VS Code que crean entornos paralelos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ojos de agente a través de telemetría.&lt;/strong&gt; Aquí es donde se pone realmente potente. El CLI de Aspire expone datos OpenTelemetry completos durante el desarrollo — trazas, métricas, logs estructurados. Tu agente no solo lee la salida de consola esperando lo mejor. Puede rastrear una petición fallida entre servicios, perfilar endpoints lentos e identificar exactamente dónde se rompen las cosas. Eso es observabilidad de nivel producción en el ciclo de desarrollo.&lt;/p&gt;
&lt;h2 id="la-analogía-de-los-parachoques-de-boliche"&gt;La analogía de los parachoques de boliche&lt;/h2&gt;
&lt;p&gt;El equipo de Aspire usa una gran analogía: piensa en Aspire como los parachoques de una pista de boliche para agentes de IA. Si el agente no es perfecto (y no lo será), los parachoques evitan que tire canaletas. La definición del stack previene mala configuración, el compilador atrapa errores, el CLI maneja la gestión de procesos y la telemetría provee el ciclo de retroalimentación.&lt;/p&gt;
&lt;p&gt;Combina esto con algo como Playwright CLI, y tu agente puede realmente &lt;em&gt;usar&lt;/em&gt; tu app — haciendo clic en flujos, revisando el DOM, viendo cosas rotas en telemetría, arreglando el código, reiniciando y probando de nuevo. Construir, ejecutar, observar, arreglar. Ese es el ciclo de desarrollo autónomo que hemos estado persiguiendo.&lt;/p&gt;
&lt;h2 id="primeros-pasos"&gt;Primeros pasos&lt;/h2&gt;
&lt;p&gt;¿Nuevo en Aspire? Instala el CLI desde &lt;a href="https://get.aspire.dev"&gt;get.aspire.dev&lt;/a&gt; y sigue la &lt;a href="https://aspire.dev/get-started/first-app"&gt;guía de inicio&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;¿Ya usas Aspire? Ejecuta &lt;code&gt;aspire update --self&lt;/code&gt; para obtener la 13.2, luego apunta tu agente de código favorito a tu repo. Te sorprenderá lo mucho más lejos que llega con los guardrails de Aspire.&lt;/p&gt;
&lt;h2 id="para-cerrar"&gt;Para cerrar&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 ya no es solo un framework para aplicaciones distribuidas — se está convirtiendo en infraestructura esencial para agentes. Definiciones de stack estructuradas, arranque con un comando, ejecuciones paralelas aisladas y telemetría en tiempo real le dan a los agentes de IA exactamente lo que necesitan para pasar de escribir código a enviar apps.&lt;/p&gt;
&lt;p&gt;Lee el &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;post completo&lt;/a&gt; del equipo de Aspire para todos los detalles y videos de demostración.&lt;/p&gt;</content:encoded></item><item><title>El Modo Aislado de Aspire Resuelve la Pesadilla de Conflictos de Puertos en Desarrollo Paralelo</title><link>https://thedotnetblog.com/es/news/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/es/news/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/</guid><description>Aspire 13.2 introduce el modo --isolated: puertos aleatorios, secretos separados y cero colisiones al ejecutar múltiples instancias del mismo AppHost. Perfecto para agentes de IA, worktrees y flujos de trabajo paralelos.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post fue traducido automáticamente. Para la versión original, &lt;a href="https://thedotnetblog.com/es/news/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/"&gt;haz clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si alguna vez intentaste ejecutar dos instancias del mismo proyecto al mismo tiempo, conoces el dolor. El puerto 8080 ya está en uso. El puerto 17370 está ocupado. Mata algo, reinicia, malabarea variables de entorno — es un asesino de productividad.&lt;/p&gt;
&lt;p&gt;Este problema está empeorando, no mejorando. Los agentes de IA crean git worktrees para trabajar de forma independiente. Los agentes en segundo plano levantan entornos separados. Los desarrolladores hacen checkout del mismo repo dos veces para ramas de funcionalidades. Cada uno de estos escenarios choca con la misma pared: dos instancias de la misma app peleando por los mismos puertos.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 resuelve esto con un solo flag. James Newton-King del equipo de Aspire &lt;a href="https://devblogs.microsoft.com/aspire/aspire-isolated-mode-parallel-development/"&gt;escribió todos los detalles&lt;/a&gt;, y es una de esas funcionalidades de &amp;ldquo;¿por qué no teníamos esto antes?&amp;rdquo;&lt;/p&gt;
&lt;h2 id="la-solución---isolated"&gt;La solución: &lt;code&gt;--isolated&lt;/code&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire run --isolated
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Eso es todo. Cada ejecución obtiene:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Puertos aleatorios&lt;/strong&gt; — no más colisiones entre instancias&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secretos de usuario aislados&lt;/strong&gt; — cadenas de conexión y claves API permanecen separados por instancia&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sin reasignación manual de puertos. Sin malabarismo de variables de entorno. Cada ejecución obtiene un entorno limpio y libre de colisiones automáticamente.&lt;/p&gt;
&lt;h2 id="escenarios-reales-donde-esto-brilla"&gt;Escenarios reales donde esto brilla&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Múltiples checkouts.&lt;/strong&gt; Tienes una rama de funcionalidad en un directorio y un bugfix en otro:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Terminal 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/projects/my-app-feature
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire run --isolated
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Terminal 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/projects/my-app-bugfix
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire run --isolated
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ambos se ejecutan sin conflictos. El dashboard muestra qué está corriendo y dónde.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agentes en segundo plano en VS Code.&lt;/strong&gt; Cuando el agente en background de Copilot Chat crea un git worktree para trabajar en tu código de forma independiente, puede necesitar ejecutar tu AppHost de Aspire. Sin &lt;code&gt;--isolated&lt;/code&gt;, eso es una colisión de puertos con tu worktree principal. Con él, ambas instancias simplemente funcionan.&lt;/p&gt;
&lt;p&gt;El skill de Aspire que viene con &lt;code&gt;aspire agent init&lt;/code&gt; instruye automáticamente a los agentes a usar &lt;code&gt;--isolated&lt;/code&gt; cuando trabajan en worktrees. Así que el agente en background de Copilot debería manejar esto de forma nativa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tests de integración junto al desarrollo.&lt;/strong&gt; ¿Necesitas ejecutar tests contra un AppHost en vivo mientras sigues construyendo funcionalidades? El modo aislado le da a cada contexto sus propios puertos y configuración.&lt;/p&gt;
&lt;h2 id="cómo-funciona-internamente"&gt;Cómo funciona internamente&lt;/h2&gt;
&lt;p&gt;Cuando pasas &lt;code&gt;--isolated&lt;/code&gt;, el CLI genera un ID de instancia único para la ejecución. Esto impulsa dos comportamientos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Aleatorización de puertos&lt;/strong&gt; — en vez de vincularse a puertos predecibles definidos en la configuración de tu AppHost, el modo aislado elige puertos aleatorios disponibles para todo — el dashboard, los endpoints de servicio, todo. El service discovery se ajusta automáticamente, así que los servicios se encuentran entre sí sin importar qué puertos les tocaron.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Aislamiento de secretos&lt;/strong&gt; — cada ejecución aislada obtiene su propio almacén de secretos de usuario, identificado por el ID de instancia. Las cadenas de conexión y claves API de una ejecución no se filtran a otra.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tu código no necesita cambios. El service discovery de Aspire resuelve los endpoints en tiempo de ejecución, así que todo se conecta correctamente sin importar la asignación de puertos.&lt;/p&gt;
&lt;h2 id="cuándo-usarlo"&gt;Cuándo usarlo&lt;/h2&gt;
&lt;p&gt;Usa &lt;code&gt;--isolated&lt;/code&gt; cuando ejecutes múltiples instancias del mismo AppHost simultáneamente — ya sea desarrollo paralelo, tests automatizados, agentes de IA o git worktrees. Para desarrollo de instancia única donde prefieras puertos predecibles, el &lt;code&gt;aspire run&lt;/code&gt; regular sigue funcionando bien.&lt;/p&gt;
&lt;h2 id="para-cerrar"&gt;Para cerrar&lt;/h2&gt;
&lt;p&gt;El modo aislado es una funcionalidad pequeña que resuelve un problema real y cada vez más común. A medida que el desarrollo asistido por IA nos empuja hacia más flujos paralelos — múltiples agentes, múltiples worktrees, múltiples contextos — la capacidad de simplemente levantar otra instancia sin pelear por puertos es esencial.&lt;/p&gt;
&lt;p&gt;Lee el &lt;a href="https://devblogs.microsoft.com/aspire/aspire-isolated-mode-parallel-development/"&gt;post completo&lt;/a&gt; para todos los detalles técnicos y pruébalo con &lt;code&gt;aspire update --self&lt;/code&gt; para obtener la 13.2.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 incluye una CLI de documentación — y tu agente de IA también puede usarla</title><link>https://thedotnetblog.com/es/news/emiliano-montesdeoca/aspire-docs-cli-ai-skills/</link><pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/es/news/emiliano-montesdeoca/aspire-docs-cli-ai-skills/</guid><description>.NET Aspire 13.2 añade aspire docs — una CLI para buscar, explorar y leer documentación oficial sin salir de tu terminal. También funciona como herramienta para agentes de IA. Te cuento por qué esto importa.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Este post fue traducido automáticamente. Para la versión original, &lt;a href="https://thedotnetblog.com/es/news/emiliano-montesdeoca/aspire-docs-cli-ai-skills/"&gt;haz clic aquí&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;¿Conocés ese momento cuando estás metido hasta el cuello en un Aspire AppHost, conectando integraciones, y necesitás verificar exactamente qué parámetros espera la integración de Redis? Hacés alt-tab al navegador, buscás por aspire.dev, entrecerrás los ojos mirando los docs de la API, y volvés a tu editor. Contexto perdido. Flujo roto.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 acaba de &lt;a href="https://devblogs.microsoft.com/aspire/aspire-docs-in-your-terminal/"&gt;lanzar una solución para eso&lt;/a&gt;. La CLI &lt;code&gt;aspire docs&lt;/code&gt; te permite buscar, explorar y leer documentación oficial de Aspire directamente desde tu terminal. Y como está respaldada por servicios reutilizables, los agentes de IA y skills pueden usar los mismos comandos para consultar docs en lugar de alucinar APIs que no existen.&lt;/p&gt;
&lt;h2 id="el-problema-que-esto-realmente-resuelve"&gt;El problema que esto realmente resuelve&lt;/h2&gt;
&lt;p&gt;David Pine lo clava en el post original: los agentes de IA eran &lt;em&gt;terribles&lt;/em&gt; ayudando a los desarrolladores a construir apps con Aspire. Recomendaban &lt;code&gt;dotnet run&lt;/code&gt; en vez de &lt;code&gt;aspire run&lt;/code&gt;, referenciaban learn.microsoft.com para docs que viven en aspire.dev, sugerían paquetes NuGet desactualizados, y — mi favorito personal — alucinaban APIs que no existen.&lt;/p&gt;
&lt;p&gt;¿Por qué? Porque Aspire fue específico de .NET por mucho más tiempo del que lleva siendo políglota, y los LLMs trabajan con datos de entrenamiento que preceden las últimas funcionalidades. Cuando le das a un agente de IA la capacidad de buscar los docs actuales, deja de adivinar y empieza a ser útil.&lt;/p&gt;
&lt;h2 id="tres-comandos-cero-pestañas-del-navegador"&gt;Tres comandos, cero pestañas del navegador&lt;/h2&gt;
&lt;p&gt;La CLI es refrescantemente simple:&lt;/p&gt;
&lt;h3 id="listar-todos-los-docs"&gt;Listar todos los docs&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Devuelve cada página de documentación disponible en aspire.dev. ¿Necesitás salida legible por máquina? Agregá &lt;code&gt;--format Json&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="buscar-un-tema"&gt;Buscar un tema&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs search &lt;span class="s2"&gt;&amp;#34;redis&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Busca tanto en títulos como en contenido con puntuación de relevancia ponderada. El mismo motor de búsqueda que alimenta la herramienta de documentación internamente. Obtenés resultados rankeados con títulos, slugs y puntuaciones de relevancia.&lt;/p&gt;
&lt;h3 id="leer-una-página-completa-o-solo-una-sección"&gt;Leer una página completa (o solo una sección)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs get redis-integration
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Transmite la página completa como markdown a tu terminal. ¿Necesitás solo una sección?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs get redis-integration --section &lt;span class="s2"&gt;&amp;#34;Add Redis resource&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Precisión quirúrgica. Sin hacer scroll por 500 líneas. Solo la parte que necesitás.&lt;/p&gt;
&lt;h2 id="el-ángulo-del-agente-de-ia"&gt;El ángulo del agente de IA&lt;/h2&gt;
&lt;p&gt;Acá es donde se pone interesante para los que desarrollamos con herramientas de IA. Los mismos comandos de &lt;code&gt;aspire docs&lt;/code&gt; funcionan como herramientas para agentes de IA — a través de skills, servidores MCP, o wrappers simples de CLI.&lt;/p&gt;
&lt;p&gt;En vez de que tu asistente de IA invente APIs de Aspire basándose en datos de entrenamiento obsoletos, puede llamar a &lt;code&gt;aspire docs search &amp;quot;postgres&amp;quot;&lt;/code&gt;, encontrar los docs oficiales de integración, leer la página correcta, y darte el enfoque documentado. Documentación en tiempo real y actual — no lo que el modelo memorizó hace seis meses.&lt;/p&gt;
&lt;p&gt;La arquitectura detrás de esto es intencional. El equipo de Aspire construyó servicios reutilizables (&lt;code&gt;IDocsIndexService&lt;/code&gt;, &lt;code&gt;IDocsSearchService&lt;/code&gt;, &lt;code&gt;IDocsFetcher&lt;/code&gt;, &lt;code&gt;IDocsCache&lt;/code&gt;) en lugar de una integración única. Eso significa que el mismo motor de búsqueda funciona para humanos en la terminal, agentes de IA en tu editor, y automatización en tu pipeline de CI.&lt;/p&gt;
&lt;h2 id="escenarios-del-mundo-real"&gt;Escenarios del mundo real&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Consultas rápidas en terminal:&lt;/strong&gt; Estás tres archivos adentro y necesitás los parámetros de configuración de Redis. Dos comandos, noventa segundos, de vuelta al trabajo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs search &lt;span class="s2"&gt;&amp;#34;redis&amp;#34;&lt;/span&gt; --limit &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs get redis-integration --section &lt;span class="s2"&gt;&amp;#34;Configuration&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Desarrollo asistido por IA:&lt;/strong&gt; Tu skill de VS Code envuelve los comandos de la CLI. Preguntás &amp;ldquo;Agregá una base de datos PostgreSQL a mi AppHost&amp;rdquo; y el agente busca los docs reales antes de responder. Sin alucinaciones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Validación en CI/CD:&lt;/strong&gt; Tu pipeline valida configuraciones de AppHost contra documentación oficial de forma programática. La salida &lt;code&gt;--format Json&lt;/code&gt; se conecta limpiamente con &lt;code&gt;jq&lt;/code&gt; y otras herramientas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bases de conocimiento personalizadas:&lt;/strong&gt; ¿Estás construyendo tu propia herramienta de IA? Enviá la salida JSON estructurada directamente a tu base de conocimiento:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs search &lt;span class="s2"&gt;&amp;#34;monitoring&amp;#34;&lt;/span&gt; --format Json &lt;span class="p"&gt;|&lt;/span&gt; jq &lt;span class="s1"&gt;&amp;#39;[.[] | {slug, title, summary}]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sin web scraping. Sin API keys. Los mismos datos estructurados que usa internamente la herramienta de documentación.&lt;/p&gt;
&lt;h2 id="la-documentación-siempre-está-actualizada"&gt;La documentación siempre está actualizada&lt;/h2&gt;
&lt;p&gt;Esta es la parte que más aprecio. La CLI no descarga una captura estática — consulta aspire.dev con caché basado en ETag. En el momento en que los docs se actualizan, tu CLI y cualquier skill construido sobre ella lo refleja. Sin copias obsoletas, sin momentos de &amp;ldquo;pero el wiki decía&amp;hellip;&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="para-cerrar"&gt;Para cerrar&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;aspire docs&lt;/code&gt; es una de esas funcionalidades pequeñas que resuelve un problema real de forma limpia. Los humanos obtienen acceso a documentación nativa de terminal. Los agentes de IA obtienen una forma de dejar de adivinar y empezar a referenciar docs reales. Y todo está respaldado por la misma fuente de verdad.&lt;/p&gt;
&lt;p&gt;Si estás construyendo con .NET Aspire y todavía no probaste la CLI, ejecutá &lt;code&gt;aspire docs search &amp;quot;tu-tema-aquí&amp;quot;&lt;/code&gt; y fijate cómo se siente. Después considerá envolver esos comandos en cualquier skill de IA o configuración de automatización que estés usando — tus agentes te lo van a agradecer.&lt;/p&gt;
&lt;p&gt;Mirá el &lt;a href="https://davidpine.dev/posts/aspire-docs-mcp-tools/"&gt;análisis profundo de David Pine&lt;/a&gt; sobre cómo se armó la herramienta de documentación, y la &lt;a href="https://aspire.dev/reference/cli/commands/aspire-docs/"&gt;referencia oficial de la CLI&lt;/a&gt; para todos los detalles.&lt;/p&gt;</content:encoded></item></channel></rss>