{"id":648,"date":"2026-09-06T11:53:13","date_gmt":"2026-09-06T14:53:13","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2026\/09\/vibe-coding-linux-skills-ia-cli\/"},"modified":"2026-09-08T19:05:27","modified_gmt":"2026-09-08T22:05:27","slug":"vibe-coding-linux-skills-ia-cli","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/es\/2026\/09\/vibe-coding-linux-skills-ia-cli\/","title":{"rendered":"Vibe coding en Linux: cuatro skills de IA en el CLI"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote LinuxPro instalando um m\u00f3dulo de mem\u00f3ria em um rack, com especifica\u00e7\u00e3o, terminal e browser no laborat\u00f3rio\" src=\"\/wp-content\/uploads\/2026\/09\/skills-ia-cli-ai-vibe-cli-v1.webp\" width=\"1486\" height=\"856\" \/><\/p>\n<p>Vibe coding en el CLI es r\u00e1pido hasta que el agente olvida lo que acordaron ayer, vuelve a leer todo el repositorio con <code data-no-translation=\"\">grep<\/code> y hace clic en el banner de cookies en lugar del bot\u00f3n Guardar. Cuatro herramientas de c\u00f3digo abierto \u2014 <a href=\"https:\/\/github.com\/vercel-labs\/agent-browser\">agent-browser<\/a>, <a href=\"https:\/\/github.com\/Fission-AI\/OpenSpec\">OpenSpec<\/a>, <a href=\"https:\/\/github.com\/DeusData\/codebase-memory-mcp\">codebase-memory-mcp<\/a> e <a href=\"https:\/\/github.com\/akitaonrails\/ai-memory\">ai-memory<\/a> \u2014 cierran exactamente esos huecos: el navegador, el acuerdo antes del c\u00f3digo, el mapa del repo y la memoria entre sesiones y agentes.<\/p>\n<p><!-- more --><\/p>\n<h2>Qu\u00e9 es una skill, en la pr\u00e1ctica<\/h2>\n<p>No Grok, no Claude Code, no Codex y en los otros agentes de terminal, una <em>skill<\/em> es un <code data-no-translation=\"\">SKILL.md<\/code> con instrucci\u00f3n de cu\u00e1ndo usarlo, m\u00e1s un CLI o un servidor MCP. El modelo no \u201cconoce\u201d tu proyecto: lee el archivo, llama a la herramienta y devuelve el resultado. Sin skill, el vibe coding se convierte en chat. Con skill, se convierte en procedimiento.<\/p>\n<p>Los cuatro de abajo se complementan. Ninguno sustituye al otro. Juntos, el agente planifica, encuentra el c\u00f3digo correcto, recuerda la sesi\u00f3n anterior y verifica la interfaz como un usuario. El mapa m\u00e1s amplio de asistentes en el terminal de este blog: <a href=\"\/es\/2026\/09\/assistentes-de-ia-no-terminal-linux\/\">Asistentes de IA en el terminal Linux<\/a>. IA local: <a href=\"\/es\/2026\/09\/rodando-ia-local-no-linux-com-ollama\/\">Ollama<\/a>.<\/p>\n<h2>OpenSpec: acordar antes de generar c\u00f3digo<\/h2>\n<p><a href=\"https:\/\/github.com\/Fission-AI\/OpenSpec\">OpenSpec<\/a> (Fission-AI, MIT, v1.12.0 en septiembre de 2026) es spec-driven development para agente. La filosof\u00eda cabe en una tarjeta: fluido, iterativo, hecho para brownfield. Cada cambio recibe una carpeta <code data-no-translation=\"\">openspec\/changes\/&lt;nome&gt;\/<\/code> con <code data-no-translation=\"\">proposal.md<\/code>, <code data-no-translation=\"\">specs\/<\/code>, <code data-no-translation=\"\">design.md<\/code> e <code data-no-translation=\"\">tasks.md<\/code> \u2014 Markdown puro, escenario WHEN\/THEN, sin DSL.<\/p>\n<p>El nuevo flujo es el <code data-no-translation=\"\">\/opsx:<\/code>:<\/p>\n<ul>\n<li><code data-no-translation=\"\">\/opsx:explore<\/code> \u2014 pensar con el agente, sin comprometer artefacto<\/li>\n<li><code data-no-translation=\"\">\/opsx:propose add-dark-mode<\/code> \u2014 crear el change<\/li>\n<li><code data-no-translation=\"\">\/opsx:apply<\/code> \u2014 implementar la checklist<\/li>\n<li><code data-no-translation=\"\">\/opsx:archive<\/code> \u2014 archivar y actualizar las specs vivas<\/li>\n<\/ul>\n<p>Instalaci\u00f3n (Node.js 20.19+):<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">npm install -g @fission-ai\/openspec@latest\ncd seu-projeto\nopenspec init\nopenspec update   # depois de um upgrade, regenera as instru\u00e7\u00f5es do agente\n<\/code><\/pre>\n<p>Qu\u00e9 cambia en el trabajo: el agente deja de \u201cadivinar el alcance\u201d en mitad del diff. T\u00fa revisas el plan <em>antes<\/em> del c\u00f3digo. En equipo, lo mismo <code data-no-translation=\"\">openspec\/<\/code> se sube a git; la beta de Stores permite un \u00fanico repo de specs compartido entre varios c\u00f3digos. Telemetr\u00eda an\u00f3nima (nombre del comando y versi\u00f3n) se desactiva con <code data-no-translation=\"\">OPENSPEC_TELEMETRY=0<\/code>.<\/p>\n<p>Este mismo sitio usa OpenSpec en los cambios del blog. Sin la carpeta de la change, el agente reescrib\u00eda posts antiguos, tocaba el slug y romp\u00eda la URL indexada. Con la spec, la regla vive en el repo, no en el chat.<\/p>\n<h2>agent-browser: el agente hace clic de verdad<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote LinuxPro testando uma interface de navegador em uma bancada Linux\" src=\"\/wp-content\/uploads\/2026\/09\/skills-ia-cli-browser-v2.webp\" width=\"1200\" height=\"675\" \/><\/p>\n<p><a href=\"https:\/\/github.com\/vercel-labs\/agent-browser\">agent-browser<\/a> es la CLI de automatizaci\u00f3n de navegador de Vercel Labs, binario nativo en <a href=\"\/es\/2026\/09\/a-historia-da-linguagem-rust\/\">Rust<\/a>, Apache-2.0, v0.36.0 (1 de septiembre de 2026). No es Playwright sobre Node: el demonio habla CDP con Chrome for Testing. El truco para el modelo es el <code data-no-translation=\"\">snapshot<\/code> \u2014 \u00e1rbol de accesibilidad con refs <code data-no-translation=\"\">@e2<\/code>, <code data-no-translation=\"\">@e3<\/code>. El agente hace clic en la ref, no en el selector que se rompi\u00f3 el sprint pasado.<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">npm install -g agent-browser\nagent-browser install --with-deps   # Linux: Chrome + libs do sistema\n\nagent-browser open https:\/\/www.linuxpro.com.br\nagent-browser snapshot -i           # s\u00f3 elementos interativos\nagent-browser click @e2\nagent-browser screenshot \/tmp\/home.png\nagent-browser close\n<\/code><\/pre>\n<p>En el vibe coding esto cierra el ciclo: el agente levanta la app, abre la p\u00e1gina, rellena el formulario, hace una captura y la compara. <code data-no-translation=\"\">screenshot --annotate<\/code> numera los botones; el mismo n\u00famero sirve para el clic. Tiene MCP (<code data-no-translation=\"\">agent-browser mcp<\/code>), sesiones aisladas, b\u00f3veda de contrase\u00f1as cifrada (el LLM no ve la contrase\u00f1a), allowlist de dominio y, en Linux, <code data-no-translation=\"\">doctor<\/code> para diagnosticar el demonio zombi.<\/p>\n<p>No uses esto contra sitios de terceros sin permiso. Para tu <em>seu<\/em> localhost, el staging y el smoke test del tema, es Selenium lo que el agente por fin entiende.<\/p>\n<h2>codebase-memory-mcp: el mapa del repo, no el grep<\/h2>\n<p><a href=\"https:\/\/github.com\/DeusData\/codebase-memory-mcp\">codebase-memory-mcp<\/a> (DeusData, MIT) indexa el c\u00f3digo en un grafo persistente \u2014 funciones, clases, rutas HTTP, qui\u00e9n llama a qui\u00e9n. Tree-sitter en 162 idiomas, LSP h\u00edbrido en un pu\u00f1ado de ellos, 15 tools MCP, binario \u00fanico, cero API key. El c\u00f3digo no sale de la m\u00e1quina. El preprint est\u00e1 en arXiv <a href=\"https:\/\/arxiv.org\/abs\/2603.27277\">2603.27277<\/a>.<\/p>\n<p>El n\u00famero que importa en el vibe coding: cinco consultas estructurales ~3.400 tokens frente a ~412.000 en el ida y vuelta de <code data-no-translation=\"\">grep<\/code>\/<code data-no-translation=\"\">read<\/code> (99%). El kernel Linux (28M LOC) se indexa en aproximadamente 3 minutos en el M3; un repositorio medio, en milisegundos. UI 3D en <code data-no-translation=\"\">http:\/\/localhost:9749<\/code>.<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">curl -fsSL https:\/\/raw.githubusercontent.com\/DeusData\/codebase-memory-mcp\/main\/install.sh | bash\n# reinicie o agente; pe\u00e7a \"index this project\"\n<\/code><\/pre>\n<p>El instalador detecta Claude Code, Codex, Grok, Cursor, Gemini CLI y decenas m\u00e1s. Tres niveles de agente (Scout, Verify, Auditor) evitan que el modelo afirme \u201cno existe caller\u201d sin mirar el grafo. Para el d\u00eda a d\u00eda: \u201c\u00bfqu\u00e9 llama <code data-no-translation=\"\">ProcessOrder<\/code>?\u201d, \u201c\u00bfcu\u00e1l es el impacto de este diff?\u201d, \u201c\u00bfd\u00f3nde est\u00e1 el c\u00f3digo muerto?\u201d. Sin esto, el vibe coding alucina un helper que ya existe tres carpetas m\u00e1s all\u00e1.<\/p>\n<h2>ai-memory: la siguiente sesi\u00f3n empieza desde el punto correcto<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote LinuxPro transportando uma caixa de mem\u00f3ria persistente entre esta\u00e7\u00f5es de agentes em uma sala de servidores\" src=\"\/wp-content\/uploads\/2026\/09\/skills-ia-cli-ai-memory.webp\" width=\"1200\" height=\"675\" \/><\/p>\n<p><a href=\"https:\/\/github.com\/akitaonrails\/ai-memory\">ai-memory<\/a>, creado por F\u00e1bio Akita y distribuido bajo MIT, es una memoria a largo plazo para agentes de programaci\u00f3n. Conecta Claude Code, Codex, OpenCode, Cursor, Gemini CLI, Grok y otros clientes a una misma base: puedes cerrar un agente a mitad de tarea y continuar con otro en el mismo proyecto sin reexplicar la arquitectura, los intentos fallidos y las tareas pendientes.<\/p>\n<p>El dise\u00f1o es sencillo y auditable: hooks de ciclo de vida capturan observaciones saneadas; al final de la sesi\u00f3n pueden convertirse en p\u00e1ginas Markdown en una wiki; b\u00fasqueda, briefing e handoff recuperan el contexto en la siguiente sesi\u00f3n. La wiki es la fuente de verdad y el \u00edndice se deriva de ella. La captura, b\u00fasqueda textual e handoffs funcionan sin clave de API ni llamadas obligatorias a LLM; un proveedor es opcional para res\u00famenes y b\u00fasqueda sem\u00e1ntica.<\/p>\n<p>Para instalar el servicio local, configurar privacidad, MCP y hooks en Linux, sigue la gu\u00eda completa: <a href=\"\/es\/2026\/09\/ai-memory-instalar-configurar-agentes-linux\/\">ai-memory: instala memoria persistente para agentes en Linux<\/a>. Tras la inicializaci\u00f3n del servicio, la integraci\u00f3n de un cliente es breve:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\"># OpenAI Codex\nai-memory install-mcp --client codex --apply\nai-memory install-hooks --agent codex --apply\n\n# reinicie o cliente e continue a tarefa normalmente\n<\/code><\/pre>\n<p>En el d\u00eda a d\u00eda, los hooks realizan la captura; para retomar, basta con pedir \u201c\u00bfd\u00f3nde lo dejamos?\u201d o buscar una decisi\u00f3n del proyecto. El handoff es expl\u00edcito: una sesi\u00f3n deja el testigo y la siguiente lo asume una sola vez. En equipos o en m\u00e1s de una m\u00e1quina, la misma instancia puede compartir conocimiento por proyecto, manteniendo handoffs personales separados.<\/p>\n<p>No lo confundas con el codebase-memory: este responde sobre estructuras y relaciones del <em>c\u00f3digo<\/em>; el ai-memory preserva el contexto de <em>trabajo<\/em> \u2014 decisiones, herramientas utilizadas, intentos y pr\u00f3ximos pasos. Los dos juntos evitan tanto la <code data-no-translation=\"\">grep<\/code> infinidad como la reexplicaci\u00f3n infinita.<\/p>\n<h2>C\u00f3mo encajar las cuatro en el flujo<\/h2>\n<p>Un ciclo t\u00edpico de feature en Linux:<\/p>\n<ol>\n<li><strong>OpenSpec<\/strong> \u2014 <code data-no-translation=\"\">\/opsx:explore<\/code> e <code data-no-translation=\"\">\/opsx:propose<\/code>. Lees el <code data-no-translation=\"\">proposal.md<\/code> y solo entonces env\u00edas a aplicar.<\/li>\n<li><strong>codebase-memory<\/strong> \u2014 el agente pregunta al grafo qui\u00e9n participa en la ruta, en lugar de abrir 40 archivos.<\/li>\n<li><strong>ai-memory<\/strong> \u2014 la siguiente sesi\u00f3n ya sabe que el cambio est\u00e1 en <code data-no-translation=\"\">openspec\/changes\/\u2026<\/code>, qu\u00e9 fall\u00f3 en la prueba de ayer y qui\u00e9n dej\u00f3 el handoff.<\/li>\n<li><strong>agent-browser<\/strong> \u2014 levanta la app, <code data-no-translation=\"\">open<\/code>, <code data-no-translation=\"\">snapshot<\/code>, hace clic, toma captura, compara escritorio y m\u00f3vil.<\/li>\n<\/ol>\n<p>Instala en el orden que duele hoy. Si el agente pierde decisiones entre sesiones o entre clientes, empieza por ai-memory. Si inventa API que ya existe, usa codebase-memory. Si el PR pasa el unit y rompe el bot\u00f3n en Chrome, usa agent-browser. Si el alcance se infla a mitad del chat, usa OpenSpec.<\/p>\n<p>Requisitos de base: Node 20.19+ (OpenSpec), Chrome for Testing (agent-browser), binario C (codebase-memory). Todo funciona en Linux amd64\/arm64. El agente de terminal \u2014 Grok, Claude Code, Codex, Gemini CLI \u2014 es el orquestador; las skills son las manos.<\/p>\n<h2>Cierre<\/h2>\n<p>Vibe coding sin spec es improvisaci\u00f3n. Sin grafo es grep caro. Sin memoria es amnesia. Sin browser es \u201cfunciona en mi headless\u201d. Las cuatro skills no hacen al modelo m\u00e1s inteligente; hacen que el <em>trabajo<\/em> sea verificable. Git sigue siendo la fuente de la verdad \u2014 el historial: <a href=\"\/es\/2026\/09\/a-historia-do-git\/\">La historia de Git<\/a>.<\/p>\n<p>Repositorios: <a href=\"https:\/\/github.com\/Fission-AI\/OpenSpec\">OpenSpec<\/a> \u00b7 <a href=\"https:\/\/github.com\/vercel-labs\/agent-browser\">agent-browser<\/a> \u00b7 <a href=\"https:\/\/github.com\/DeusData\/codebase-memory-mcp\">codebase-memory-mcp<\/a> \u00b7 <a href=\"https:\/\/github.com\/akitaonrails\/ai-memory\">ai-memory<\/a>. Para poner la memoria en marcha en Linux, consulta la <a href=\"\/es\/2026\/09\/ai-memory-instalar-configurar-agentes-linux\/\">gu\u00eda de instalaci\u00f3n y configuraci\u00f3n de ai-memory<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Vibe coding no CLI \u00e9 r\u00e1pido at\u00e9 o agente esquecer o que voc\u00eas combinaram ontem, reler o reposit\u00f3rio inteiro com grep e clicar no banner de cookies em vez do bot\u00e3o Salvar. Quatro ferramentas de c\u00f3digo aberto \u2014 agent-browser, OpenSpec, codebase-memory-mcp e ai-memory \u2014 fecham exatamente esses buracos: o browser, o acordo antes do c\u00f3digo, &#8230; <a title=\"Vibe coding en Linux: cuatro skills de IA en el CLI\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/es\/2026\/09\/vibe-coding-linux-skills-ia-cli\/\" aria-label=\"Leer m\u00e1s sobre Vibe coding no Linux: quatro skills de IA no CLI\">Leer m\u00e1s<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[45,115,2],"tags":[8,116,311,313,312],"class_list":["post-648","post","type-post","status-publish","format-standard","hentry","category-desenv","category-ia","category-linux","tag-cli","tag-ia","tag-mcp","tag-openspec","tag-skills"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/648","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/comments?post=648"}],"version-history":[{"count":4,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/648\/revisions"}],"predecessor-version":[{"id":1472,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/648\/revisions\/1472"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/media?parent=648"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/categories?post=648"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/tags?post=648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}