{"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 no Linux: quatro skills de IA no 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 no CLI \u00e9 r\u00e1pido at\u00e9 o agente esquecer o que voc\u00eas combinaram ontem, reler o reposit\u00f3rio inteiro com <code data-no-translation=\"\">grep<\/code> e clicar no banner de cookies em vez do bot\u00e3o Salvar. Quatro ferramentas de c\u00f3digo aberto \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 fecham exatamente esses buracos: o browser, o acordo antes do c\u00f3digo, o mapa do repo e a mem\u00f3ria entre sess\u00f5es e agentes.<\/p>\n<p><!-- more --><\/p>\n<h2>O que \u00e9 uma skill, na pr\u00e1tica<\/h2>\n<p>No Grok, no Claude Code, no Codex e nos outros agentes de terminal, uma <em>skill<\/em> \u00e9 um <code data-no-translation=\"\">SKILL.md<\/code> com instru\u00e7\u00e3o de quando usar, mais um CLI ou um servidor MCP. O modelo n\u00e3o \u201csabe\u201d o seu projeto: ele l\u00ea o arquivo, chama a ferramenta e devolve o resultado. Sem skill, o vibe coding vira chat. Com skill, vira procedimento.<\/p>\n<p>Os quatro abaixo se complementam. Nenhum substitui o outro. Juntos, o agente planeja, acha o c\u00f3digo certo, lembra da sess\u00e3o anterior e verifica a interface como um usu\u00e1rio. O mapa maior de assistentes no terminal deste blog: <a href=\"\/es\/2026\/09\/assistentes-de-ia-no-terminal-linux\/\">Assistentes de IA no terminal Linux<\/a>. IA local: <a href=\"\/es\/2026\/09\/rodando-ia-local-no-linux-com-ollama\/\">Ollama<\/a>.<\/p>\n<h2>OpenSpec: concordar antes de gerar c\u00f3digo<\/h2>\n<p><a href=\"https:\/\/github.com\/Fission-AI\/OpenSpec\">OpenSpec<\/a> (Fission-AI, MIT, v1.12.0 em setembro de 2026) \u00e9 spec-driven development para agente. A filosofia cabe num cart\u00e3o: fluido, iterativo, feito para brownfield. Cada mudan\u00e7a ganha uma pasta <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, cen\u00e1rio WHEN\/THEN, sem DSL.<\/p>\n<p>O fluxo novo \u00e9 o <code data-no-translation=\"\">\/opsx:<\/code>:<\/p>\n<ul>\n<li><code data-no-translation=\"\">\/opsx:explore<\/code> \u2014 pensar com o agente, sem comprometer artefato<\/li>\n<li><code data-no-translation=\"\">\/opsx:propose add-dark-mode<\/code> \u2014 criar a change<\/li>\n<li><code data-no-translation=\"\">\/opsx:apply<\/code> \u2014 implementar a checklist<\/li>\n<li><code data-no-translation=\"\">\/opsx:archive<\/code> \u2014 arquivar e atualizar as specs vivas<\/li>\n<\/ul>\n<p>Instala\u00e7\u00e3o (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>O que muda no trabalho: o agente para de \u201cadivinhar o escopo\u201d no meio do diff. Voc\u00ea revisa o plano <em>antes<\/em> do c\u00f3digo. Em time, o mesmo <code data-no-translation=\"\">openspec\/<\/code> vai no git; a beta de Stores permite um repo s\u00f3 de specs compartilhado entre v\u00e1rios c\u00f3digos. Telemetria an\u00f4nima (nome do comando e vers\u00e3o) desliga com <code data-no-translation=\"\">OPENSPEC_TELEMETRY=0<\/code>.<\/p>\n<p>Este pr\u00f3prio site usa OpenSpec nas mudan\u00e7as do blog. Sem a pasta da change, o agente reescrevia post antigo, mexia em slug e quebrava URL indexada. Com a spec, a regra fica no repo, n\u00e3o no chat.<\/p>\n<h2>agent-browser: o agente clica de verdade<\/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> \u00e9 CLI de automa\u00e7\u00e3o de browser da Vercel Labs, bin\u00e1rio nativo em <a href=\"\/es\/2026\/09\/a-historia-da-linguagem-rust\/\">Rust<\/a>, Apache-2.0, v0.36.0 (1\u00ba de setembro de 2026). N\u00e3o \u00e9 Playwright no Node: o daemon fala CDP com o Chrome for Testing. O truque para o modelo \u00e9 o <code data-no-translation=\"\">snapshot<\/code> \u2014 \u00e1rvore de acessibilidade com refs <code data-no-translation=\"\">@e2<\/code>, <code data-no-translation=\"\">@e3<\/code>. O agente clica no ref, n\u00e3o no seletor que quebrou na sprint passada.<\/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>No vibe coding isso fecha o ciclo: o agente sobe o app, abre a p\u00e1gina, preenche o form, tira print e compara. <code data-no-translation=\"\">screenshot --annotate<\/code> numera os bot\u00f5es; o mesmo n\u00famero vale para o clique. Tem MCP (<code data-no-translation=\"\">agent-browser mcp<\/code>), sess\u00f5es isoladas, cofre de senha criptografado (o LLM n\u00e3o v\u00ea o password), allowlist de dom\u00ednio e, no Linux, <code data-no-translation=\"\">doctor<\/code> para diagnosticar daemon zumbi.<\/p>\n<p>N\u00e3o use isso contra site de terceiros sem permiss\u00e3o. Para o <em>seu<\/em> localhost, o staging e o smoke test do tema, \u00e9 o Selenium que o agente finalmente entende.<\/p>\n<h2>codebase-memory-mcp: o mapa do repo, n\u00e3o o grep<\/h2>\n<p><a href=\"https:\/\/github.com\/DeusData\/codebase-memory-mcp\">codebase-memory-mcp<\/a> (DeusData, MIT) indexa o c\u00f3digo num grafo persistente \u2014 fun\u00e7\u00f5es, classes, rotas HTTP, quem chama quem. Tree-sitter em 162 l\u00ednguas, LSP h\u00edbrido em um punhado delas, 15 tools MCP, bin\u00e1rio \u00fanico, zero API key. O c\u00f3digo n\u00e3o sai da m\u00e1quina. O preprint est\u00e1 no arXiv <a href=\"https:\/\/arxiv.org\/abs\/2603.27277\">2603.27277<\/a>.<\/p>\n<p>O n\u00famero que importa no vibe coding: cinco consultas estruturais ~3.400 tokens contra ~412.000 no vai-e-volta de <code data-no-translation=\"\">grep<\/code>\/<code data-no-translation=\"\">read<\/code> (99%). Kernel Linux (28M LOC) indexa em cerca de 3 minutos no M3; um repo m\u00e9dio, em milissegundos. UI 3D em <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>O instalador detecta Claude Code, Codex, Grok, Cursor, Gemini CLI e dezenas de outros. Tr\u00eas tiers de agente (Scout, Verify, Auditor) evitam o modelo afirmar \u201cn\u00e3o existe caller\u201d sem olhar o grafo. Para o dia a dia: \u201co que chama <code data-no-translation=\"\">ProcessOrder<\/code>?\u201d, \u201cqual o impacto deste diff?\u201d, \u201ccad\u00ea c\u00f3digo morto?\u201d. Sem isso, o vibe coding alucina um helper que j\u00e1 existe tr\u00eas pastas ao lado.<\/p>\n<h2>ai-memory: a pr\u00f3xima sess\u00e3o come\u00e7a do ponto certo<\/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>, criado por F\u00e1bio Akita e distribu\u00eddo sob MIT, \u00e9 uma mem\u00f3ria de longo prazo para agentes de programa\u00e7\u00e3o. Ele conecta Claude Code, Codex, OpenCode, Cursor, Gemini CLI, Grok e outros clientes a uma mesma base: voc\u00ea pode encerrar um agente no meio da tarefa e continuar com outro no mesmo projeto sem reexplicar a arquitetura, as tentativas que falharam e as pend\u00eancias.<\/p>\n<p>O desenho \u00e9 simples e audit\u00e1vel: hooks de ciclo de vida capturam observa\u00e7\u00f5es sanitizadas; no fim da sess\u00e3o elas podem virar p\u00e1ginas Markdown em uma wiki; busca, briefing e handoff recuperam o contexto na pr\u00f3xima sess\u00e3o. A wiki \u00e9 a fonte de verdade e o \u00edndice \u00e9 derivado dela. Captura, busca textual e handoffs funcionam sem chave de API nem chamadas obrigat\u00f3rias a LLM; um provedor \u00e9 opcional para resumos e busca sem\u00e2ntica.<\/p>\n<p>Para instalar o servi\u00e7o local, configurar privacidade, MCP e hooks no Linux, siga o guia completo: <a href=\"\/es\/2026\/09\/ai-memory-instalar-configurar-agentes-linux\/\">ai-memory: instala memoria persistente para agentes en Linux<\/a>. Depois da inicializa\u00e7\u00e3o do servi\u00e7o, a integra\u00e7\u00e3o de um cliente \u00e9 curta:<\/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>No dia a dia, os hooks fazem a captura; para retomar, basta pedir \u201conde paramos?\u201d ou buscar uma decis\u00e3o do projeto. O handoff \u00e9 expl\u00edcito: uma sess\u00e3o deixa o bast\u00e3o e a pr\u00f3xima o assume uma \u00fanica vez. Em times ou em mais de uma m\u00e1quina, a mesma inst\u00e2ncia pode compartilhar conhecimento por projeto, mantendo handoffs pessoais separados.<\/p>\n<p>N\u00e3o confunda com o codebase-memory: ele responde sobre estruturas e rela\u00e7\u00f5es do <em>c\u00f3digo<\/em>; o ai-memory preserva o contexto de <em>trabalho<\/em> \u2014 decis\u00f5es, ferramentas usadas, tentativas e pr\u00f3ximos passos. Os dois juntos evitam tanto o <code data-no-translation=\"\">grep<\/code> infinito quanto a reexplica\u00e7\u00e3o infinita.<\/p>\n<h2>Como encaixar as quatro no fluxo<\/h2>\n<p>Um ciclo t\u00edpico de feature no 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>. Voc\u00ea l\u00ea o <code data-no-translation=\"\">proposal.md<\/code> e s\u00f3 ent\u00e3o manda aplicar.<\/li>\n<li><strong>codebase-memory<\/strong> \u2014 o agente pergunta ao grafo quem toca na rota, em vez de abrir 40 arquivos.<\/li>\n<li><strong>ai-memory<\/strong> \u2014 a sess\u00e3o seguinte j\u00e1 sabe que a change est\u00e1 em <code data-no-translation=\"\">openspec\/changes\/\u2026<\/code>, o que quebrou no teste de ontem e quem deixou o handoff.<\/li>\n<li><strong>agent-browser<\/strong> \u2014 sobe o app, <code data-no-translation=\"\">open<\/code>, <code data-no-translation=\"\">snapshot<\/code>, clica, tira print, compara desktop e mobile.<\/li>\n<\/ol>\n<p>Instale na ordem que d\u00f3i hoje. Se o agente perde decis\u00f5es entre sess\u00f5es ou entre clientes, comece pelo ai-memory. Se ele inventa API que j\u00e1 existe, use o codebase-memory. Se o PR passa no unit e quebra o bot\u00e3o no Chrome, use agent-browser. Se o escopo infla no meio do chat, use OpenSpec.<\/p>\n<p>Requisitos de ch\u00e3o: Node 20.19+ (OpenSpec), Chrome for Testing (agent-browser), bin\u00e1rio C (codebase-memory). Tudo roda em Linux amd64\/arm64. O agente de terminal \u2014 Grok, Claude Code, Codex, Gemini CLI \u2014 \u00e9 o orquestrador; as skills s\u00e3o as m\u00e3os.<\/p>\n<h2>O que ficou<\/h2>\n<p>Vibe coding sem spec \u00e9 improviso. Sem grafo \u00e9 grep caro. Sem mem\u00f3ria \u00e9 amn\u00e9sia. Sem browser \u00e9 \u201cfunciona na minha headless\u201d. As quatro skills n\u00e3o deixam o modelo mais inteligente; deixam o <em>trabalho<\/em> verific\u00e1vel. O git continua sendo a fonte da verdade \u2014 a hist\u00f3ria: <a href=\"\/es\/2026\/09\/a-historia-do-git\/\">A hist\u00f3ria do Git<\/a>.<\/p>\n<p>Reposit\u00f3rios: <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 p\u00f4r a mem\u00f3ria em funcionamento no Linux, veja o <a href=\"\/es\/2026\/09\/ai-memory-instalar-configurar-agentes-linux\/\">guia de instala\u00e7\u00e3o e configura\u00e7\u00e3o do 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 no Linux: quatro skills de IA no CLI\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/es\/2026\/09\/vibe-coding-linux-skills-ia-cli\/\" aria-label=\"Read more about Vibe coding no Linux: quatro skills de IA no CLI\">Read more<\/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}]}}