{"id":9590,"date":"2026-09-16T10:50:28","date_gmt":"2026-09-16T08:50:28","guid":{"rendered":"https:\/\/www.hostingtg.com\/blog\/?p=9590"},"modified":"2026-09-16T10:50:31","modified_gmt":"2026-09-16T08:50:31","slug":"como-crear-una-skill-para-hermes-agent","status":"publish","type":"post","link":"https:\/\/www.hostingtg.com\/blog\/como-crear-una-skill-para-hermes-agent\/","title":{"rendered":"C\u00f3mo crear una Skill para Hermes Agent paso a paso"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Crear una <strong>Skill para <a href=\"https:\/\/www.hostingtg.com\/servidores-vps-hermes-agent\/\">Hermes Agent<\/a><\/strong> me parece una de las formas m\u00e1s interesantes de ampliar lo que puede hacer el agente sin complicar innecesariamente su arquitectura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando empec\u00e9 a plantearme este tipo de automatizaciones, una de las cosas que m\u00e1s sentido me hizo fue precisamente esa: no todo necesita convertirse en una integraci\u00f3n programada desde cero.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Muchas veces ya tenemos las herramientas necesarias.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tenemos comandos de terminal, scripts, Docker, Git, APIs, utilidades instaladas en el servidor o procedimientos que seguimos manualmente cada vez que ocurre algo. Lo \u00fanico que falta es ense\u00f1arle a Hermes <strong>c\u00f3mo queremos que utilice esas herramientas y en qu\u00e9 orden debe hacerlo<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ah\u00ed es donde entran las <a href=\"https:\/\/www.hostingtg.com\/blog\/hermes-agent-las-20-mejores-skills\/\">Skills<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En lugar de volver a explicarle al agente cada vez qu\u00e9 comandos debe ejecutar, qu\u00e9 informaci\u00f3n debe comprobar o c\u00f3mo debe reaccionar ante determinadas situaciones, podemos convertir ese conocimiento en una habilidad reutilizable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y esto abre bastantes posibilidades.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos crear una Skill para revisar contenedores Docker, analizar logs, trabajar con repositorios Git, preparar despliegues, gestionar copias de seguridad, consultar documentaci\u00f3n o ejecutar determinados procedimientos de mantenimiento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En esta gu\u00eda voy a explicar <strong>c\u00f3mo crear una Skill para Hermes Agent desde cero<\/strong>, qu\u00e9 estructura tiene un archivo <code>SKILL.md<\/code>, cu\u00e1ndo merece la pena utilizar una Skill en lugar de desarrollar una Tool y c\u00f3mo probar que nuestra habilidad realmente funciona.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La idea no es solamente terminar con un archivo Markdown.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo interesante es aprender a transformar un procedimiento que repetimos habitualmente en una capacidad que Hermes pueda reutilizar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 es una Skill en Hermes Agent y para qu\u00e9 sirve<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una Skill es, simplificando bastante, una forma de ense\u00f1arle a Hermes <strong>c\u00f3mo realizar una tarea determinada<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No tenemos necesariamente que a\u00f1adir una capacidad completamente nueva al agente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos aprovechar herramientas que Hermes ya puede utilizar y proporcionarle las instrucciones necesarias para combinarlas correctamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta diferencia es importante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si Hermes ya puede ejecutar comandos en una terminal, por ejemplo, probablemente no necesitemos desarrollar desde cero una integraci\u00f3n espec\u00edfica solamente para ejecutar <code>docker ps<\/code>, consultar unos logs o comprobar el estado de un servicio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos crear una Skill donde definamos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>cu\u00e1ndo tiene sentido realizar esas comprobaciones;<\/li>\n\n\n\n<li>qu\u00e9 comandos deben utilizarse;<\/li>\n\n\n\n<li>en qu\u00e9 orden deben ejecutarse;<\/li>\n\n\n\n<li>c\u00f3mo interpretar la informaci\u00f3n obtenida;<\/li>\n\n\n\n<li>qu\u00e9 situaciones requieren precauci\u00f3n;<\/li>\n\n\n\n<li>c\u00f3mo comprobar que el procedimiento ha terminado correctamente.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Yo no veo una Skill \u00fanicamente como una funci\u00f3n adicional.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Me resulta m\u00e1s \u00fatil verla como una forma de <strong>documentar un procedimiento para que Hermes pueda repetirlo siguiendo nuestros criterios<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eso permite convertir tareas que normalmente requieren varias instrucciones en procesos bastante m\u00e1s reutilizables.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qu\u00e9 puede hacer una Skill<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las posibilidades dependen principalmente de las herramientas disponibles en nuestra instalaci\u00f3n de Hermes y del entorno donde se ejecute.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos utilizar Skills para procedimientos como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>revisar el estado de un servidor;<\/li>\n\n\n\n<li>analizar logs;<\/li>\n\n\n\n<li>trabajar con contenedores Docker;<\/li>\n\n\n\n<li>utilizar comandos Git;<\/li>\n\n\n\n<li>consultar determinada documentaci\u00f3n;<\/li>\n\n\n\n<li>ejecutar scripts existentes;<\/li>\n\n\n\n<li>preparar informes;<\/li>\n\n\n\n<li>comprobar servicios;<\/li>\n\n\n\n<li>realizar determinadas tareas mediante SSH;<\/li>\n\n\n\n<li>seguir procedimientos de despliegue o mantenimiento.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Una Skill no tiene por qu\u00e9 hacer algo espectacular.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">De hecho, algunas de las mejores automatizaciones son precisamente aquellas que eliminan peque\u00f1as tareas repetitivas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si cada vez que aparece una incidencia tengo que explicarle a Hermes qu\u00e9 servicio debe revisar, qu\u00e9 logs consultar y qu\u00e9 comprobaciones realizar despu\u00e9s, probablemente ese proceso ya sea un buen candidato para convertirse en una Skill.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplos de Skills para Docker, Git, logs, backups y SSH<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Imaginemos que administramos varias aplicaciones mediante Docker.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando un servicio deja de funcionar, nuestro procedimiento habitual podr\u00eda ser:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>comprobar los contenedores activos;<\/li>\n\n\n\n<li>localizar contenedores detenidos;<\/li>\n\n\n\n<li>revisar sus \u00faltimos logs;<\/li>\n\n\n\n<li>comprobar el estado del servicio;<\/li>\n\n\n\n<li>evitar reinicios autom\u00e1ticos si no conocemos todav\u00eda la causa;<\/li>\n\n\n\n<li>presentar un diagn\u00f3stico antes de realizar cambios.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Todo eso puede convertirse en una Skill.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos hacer algo similar con <a href=\"https:\/\/www.hostingtg.com\/blog\/instalar-git-en-ubuntu\/\">Git<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, podr\u00edamos definir c\u00f3mo queremos que Hermes revise cambios pendientes antes de actualizar una aplicaci\u00f3n, qu\u00e9 ramas debe comprobar o qu\u00e9 verificaciones queremos realizar antes de un despliegue.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n podemos documentar nuestro procedimiento de backups o nuestras comprobaciones habituales cuando entramos por <a href=\"https:\/\/www.hostingtg.com\/blog\/ssh3\/\">SSH en un servidor<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En mi caso, esta es precisamente una de las ideas que m\u00e1s me interesan de las Skills: <strong>no solamente estamos a\u00f1adiendo funciones; tambi\u00e9n estamos ense\u00f1ando al agente nuestros procedimientos<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Skill vs Tool en Hermes Agent: cu\u00e1l necesitas realmente<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de crear nada, conviene responder una pregunta:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00bfrealmente necesito una Skill o deber\u00eda desarrollar una Tool?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La frontera no siempre es absoluta, pero hay una regla pr\u00e1ctica que me resulta bastante \u00fatil.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si puedo ense\u00f1arle a Hermes c\u00f3mo resolver el problema utilizando herramientas que ya tiene disponibles, empiezo pensando en una <strong>Skill<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si necesito darle una capacidad t\u00e9cnica nueva, integrar una API de una forma muy controlada o realizar un procesamiento espec\u00edfico que deber\u00eda comportarse siempre de manera determinista, probablemente tenga m\u00e1s sentido crear una <strong>Tool<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cu\u00e1ndo es suficiente crear una Skill<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Una Skill suele ser una buena soluci\u00f3n cuando el trabajo consiste principalmente en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>seguir instrucciones;<\/li>\n\n\n\n<li>ejecutar comandos de shell;<\/li>\n\n\n\n<li>utilizar herramientas que Hermes ya conoce;<\/li>\n\n\n\n<li>combinar varios pasos;<\/li>\n\n\n\n<li>interpretar resultados;<\/li>\n\n\n\n<li>aplicar un procedimiento;<\/li>\n\n\n\n<li>verificar que el resultado es correcto.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Pensemos de nuevo en Docker.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si Hermes ya puede utilizar la terminal, no necesito programar una herramienta completa simplemente para ense\u00f1arle qu\u00e9 comandos utilizar cuando quiero diagnosticar un contenedor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Puedo documentar el procedimiento en una Skill.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo mismo ocurre con muchas tareas basadas en Git, consultas de documentaci\u00f3n o mantenimiento de servidores.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cu\u00e1ndo merece la pena desarrollar una Tool<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Una Tool empieza a tener m\u00e1s sentido cuando necesitamos algo diferente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>autenticaciones complejas;<\/li>\n\n\n\n<li>manejo espec\u00edfico de una API;<\/li>\n\n\n\n<li>procesamiento estructurado de datos;<\/li>\n\n\n\n<li>validaciones estrictas;<\/li>\n\n\n\n<li>operaciones que deben ejecutarse siempre exactamente de la misma forma;<\/li>\n\n\n\n<li>una nueva capacidad que Hermes no tiene disponible mediante sus herramientas actuales.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n elegir\u00eda una Tool cuando quiero reducir al m\u00e1ximo la interpretaci\u00f3n del agente durante una operaci\u00f3n sensible.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No todo deber\u00eda delegarse a instrucciones flexibles.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hay tareas donde interesa encapsular el comportamiento en c\u00f3digo y exponer \u00fanicamente una operaci\u00f3n bien definida.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Skill o Tool: ejemplos pr\u00e1cticos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos utilizar esta tabla como regla orientativa:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Necesidad<\/th><th>Skill<\/th><th>Tool<\/th><\/tr><tr><td>Seguir un procedimiento<\/td><td>Muy adecuada<\/td><td>Posible<\/td><\/tr><tr><td>Ejecutar comandos existentes<\/td><td>Muy adecuada<\/td><td>Normalmente innecesaria<\/td><\/tr><tr><td>Utilizar herramientas ya disponibles<\/td><td>Muy adecuada<\/td><td>Posible<\/td><\/tr><tr><td>Interpretar resultados<\/td><td>S\u00ed<\/td><td>S\u00ed<\/td><\/tr><tr><td>Integraci\u00f3n espec\u00edfica con API<\/td><td>Depende<\/td><td>Muy adecuada<\/td><\/tr><tr><td>Autenticaci\u00f3n compleja<\/td><td>Limitada<\/td><td>Muy adecuada<\/td><\/tr><tr><td>Procesamiento personalizado<\/td><td>Limitado<\/td><td>Muy adecuada<\/td><\/tr><tr><td>Comportamiento altamente determinista<\/td><td>Depende<\/td><td>Muy adecuada<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Para m\u00ed, esta separaci\u00f3n evita uno de los errores m\u00e1s habituales al crear automatizaciones: <strong>convertir una tarea relativamente sencilla en un desarrollo mucho m\u00e1s complejo de lo necesario<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo funciona una Skill de Hermes Agent<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una Skill necesita describir suficientemente bien la capacidad que queremos ense\u00f1ar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El elemento central suele ser un archivo llamado <code>SKILL.md<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este archivo combina metadatos con instrucciones que explican al agente cu\u00e1ndo utilizar esa habilidad y qu\u00e9 procedimiento debe seguir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dependiendo de la versi\u00f3n y configuraci\u00f3n de Hermes que estemos utilizando, podemos tener diferentes opciones de metadatos o requisitos. Por eso conviene comprobar siempre la documentaci\u00f3n correspondiente a nuestra instalaci\u00f3n antes de depender de un campo espec\u00edfico.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El concepto general, sin embargo, es bastante sencillo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tenemos un directorio para nuestra Skill y, dentro, un archivo similar a este:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mi-skill\/\n\u2514\u2500\u2500 SKILL.md<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A partir de ah\u00ed podemos a\u00f1adir otros recursos si nuestra habilidad los necesita.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">El archivo SKILL.md<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>SKILL.md<\/code> es donde describimos nuestra habilidad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Normalmente encontraremos dos partes importantes:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>metadatos o frontmatter<\/strong>;<\/li>\n\n\n\n<li><strong>instrucciones de la Skill<\/strong>.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Un ejemplo simplificado podr\u00eda tener esta forma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\nname: docker-diagnostics\ndescription: Revisa el estado de contenedores Docker y analiza problemas b\u00e1sicos antes de realizar cambios.\n---\n\n# Docker Diagnostics\n\nUtiliza esta skill cuando el usuario quiera diagnosticar un problema\nrelacionado con contenedores Docker.\n\n## Procedimiento\n\n1. Comprueba qu\u00e9 contenedores est\u00e1n ejecut\u00e1ndose.\n2. Identifica contenedores detenidos o reinici\u00e1ndose.\n3. Consulta los logs relevantes.\n4. Resume el posible origen del problema.\n5. No reinicies ni elimines contenedores sin confirmaci\u00f3n cuando la acci\u00f3n\n   pueda afectar al servicio.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Esto no pretende ser una plantilla universal para todas las versiones de Hermes, sino mostrar la idea.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una buena Skill deber\u00eda responder r\u00e1pidamente a varias preguntas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00bfpara qu\u00e9 sirve?<\/li>\n\n\n\n<li>\u00bfcu\u00e1ndo debe utilizarse?<\/li>\n\n\n\n<li>\u00bfqu\u00e9 herramientas necesita?<\/li>\n\n\n\n<li>\u00bfqu\u00e9 pasos debe seguir?<\/li>\n\n\n\n<li>\u00bfqu\u00e9 debe evitar?<\/li>\n\n\n\n<li>\u00bfc\u00f3mo verifica que ha terminado correctamente?<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Frontmatter YAML e instrucciones<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El frontmatter permite incluir informaci\u00f3n estructurada sobre la Skill.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s encontramos las instrucciones en Markdown.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed es donde conviene ser especialmente claro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Decir:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Revisa Docker y arregla el problema.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">es una instrucci\u00f3n demasiado vaga.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En cambio:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Comprueba primero el estado de los contenedores. Si alguno est\u00e1 detenido, revisa los \u00faltimos logs antes de sugerir un reinicio. Presenta primero el diagn\u00f3stico y evita eliminar vol\u00famenes o contenedores salvo petici\u00f3n expl\u00edcita.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">define mucho mejor nuestro procedimiento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuanto m\u00e1s importante sea la tarea, m\u00e1s \u00fatil resulta explicar los pasos, l\u00edmites y verificaciones.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3mo sabe Hermes cu\u00e1ndo debe utilizar una Skill<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La descripci\u00f3n de la Skill es especialmente importante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Debe explicar claramente qu\u00e9 problema resuelve.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si creamos descripciones demasiado gen\u00e9ricas, el agente puede tener m\u00e1s dificultades para decidir cu\u00e1ndo resulta relevante utilizar esa habilidad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, una descripci\u00f3n como:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Ayuda con servidores.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">resulta demasiado abierta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una descripci\u00f3n como:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Diagnostica incidencias en aplicaciones desplegadas mediante Docker comprobando contenedores, estado y logs.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">expresa mucho mejor el contexto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No se trata de escribir una descripci\u00f3n enorme.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se trata de definir con suficiente precisi\u00f3n la tarea.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo crear una Skill para Hermes Agent paso a paso<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez entendida la estructura, podemos crear nuestra propia habilidad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yo empezar\u00eda siempre por el procedimiento y no por el archivo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es bastante tentador abrir un editor, crear <code>SKILL.md<\/code> y empezar a escribir instrucciones sin haber pensado realmente qu\u00e9 queremos automatizar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Normalmente funciona mejor hacerlo al rev\u00e9s.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Define primero el procedimiento que quieres automatizar<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de crear la Skill, escribe manualmente qu\u00e9 har\u00edas t\u00fa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Supongamos que queremos diagnosticar una aplicaci\u00f3n Docker.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nuestro procedimiento puede ser:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>comprobar si Docker est\u00e1 disponible;<\/li>\n\n\n\n<li>listar contenedores;<\/li>\n\n\n\n<li>identificar estados an\u00f3malos;<\/li>\n\n\n\n<li>revisar logs relevantes;<\/li>\n\n\n\n<li>comprobar si el contenedor se est\u00e1 reiniciando;<\/li>\n\n\n\n<li>presentar un resumen;<\/li>\n\n\n\n<li>pedir confirmaci\u00f3n antes de determinadas acciones.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Este primer borrador no tiene que ser perfecto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero deber\u00eda reflejar un procedimiento que utilizar\u00edamos realmente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las mejores Skills, en mi opini\u00f3n, nacen de tareas que ya hemos realizado suficientes veces como para saber qu\u00e9 pasos funcionan y qu\u00e9 errores queremos evitar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Crea el directorio de la Skill<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n creamos una carpeta espec\u00edfica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p docker-diagnostics\ncd docker-diagnostics<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dentro crearemos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SKILL.md<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En instalaciones donde las Skills se cargan desde una ubicaci\u00f3n concreta, tendremos que situar posteriormente este directorio en la ruta correspondiente o a\u00f1adirlo mediante la configuraci\u00f3n disponible.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Crea el archivo SKILL.md<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos empezar con una estructura sencilla:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\nname: docker-diagnostics\ndescription: Diagnostica problemas b\u00e1sicos en servicios Docker revisando estado, contenedores y logs.\n---\n\n# Docker Diagnostics\n\n## Cu\u00e1ndo utilizar esta skill\n\nUtiliza esta skill cuando sea necesario diagnosticar un problema\nrelacionado con servicios ejecutados mediante Docker.\n\n## Procedimiento\n\n1. Comprueba que Docker est\u00e1 disponible.\n2. Lista los contenedores.\n3. Identifica estados an\u00f3malos.\n4. Consulta los logs relevantes.\n5. Explica lo encontrado.\n6. Evita acciones destructivas sin confirmaci\u00f3n.\n\n## Verificaci\u00f3n\n\nComprueba que el diagn\u00f3stico identifica claramente el servicio afectado\ny proporciona evidencia de los comandos utilizados.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ya tenemos una Skill b\u00e1sica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero todav\u00eda podemos mejorarla bastante.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. A\u00f1ade el frontmatter YAML<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El frontmatter deber\u00eda contener los metadatos que nuestra versi\u00f3n de Hermes admita y necesite.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Algunas Skills pueden requerir herramientas determinadas, variables de entorno, archivos de credenciales u otros requisitos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mi recomendaci\u00f3n aqu\u00ed es sencilla:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>a\u00f1ade \u00fanicamente los requisitos reales de la Skill<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No conviertas el frontmatter en una colecci\u00f3n de campos innecesarios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuanto m\u00e1s sencillo sea entender qu\u00e9 necesita la habilidad, m\u00e1s f\u00e1cil ser\u00e1 mantenerla posteriormente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. Escribe instrucciones claras y accionables<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Esta probablemente sea la parte m\u00e1s importante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una Skill no deber\u00eda obligar al agente a adivinar nuestro procedimiento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En lugar de:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Comprueba qu\u00e9 ocurre.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">podemos escribir:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Lista primero los contenedores y revisa si alguno se encuentra detenido o reinici\u00e1ndose. No ejecutes cambios hasta haber consultado los logs correspondientes.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Ese peque\u00f1o cambio elimina bastante ambig\u00fcedad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n podemos especificar qu\u00e9 queremos recibir como resultado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>## Resultado esperado\n\nDevuelve:\n\n- contenedor afectado;\n- estado actual;\n- \u00faltimos errores relevantes;\n- posible causa;\n- siguiente acci\u00f3n recomendada.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora Hermes sabe no solamente qu\u00e9 debe hacer, sino tambi\u00e9n c\u00f3mo queremos organizar la respuesta.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6. Define errores, comprobaciones y resultado esperado<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un procedimiento real rara vez funciona siempre exactamente igual.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Puede ocurrir que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Docker no est\u00e9 instalado;<\/li>\n\n\n\n<li>el usuario actual no tenga permisos;<\/li>\n\n\n\n<li>no exista el contenedor indicado;<\/li>\n\n\n\n<li>los logs est\u00e9n vac\u00edos;<\/li>\n\n\n\n<li>haya varios servicios afectados;<\/li>\n\n\n\n<li>una acci\u00f3n requiera confirmaci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Una buena Skill deber\u00eda anticipar los casos m\u00e1s importantes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>## Errores y situaciones especiales\n\n- Si Docker no est\u00e1 disponible, informa del problema y det\u00e9n el procedimiento.\n- Si falta permiso para consultar los contenedores, no intentes modificar permisos autom\u00e1ticamente.\n- Si no puedes identificar el servicio afectado, solicita m\u00e1s informaci\u00f3n.\n- No elimines contenedores, im\u00e1genes o vol\u00famenes como parte del diagn\u00f3stico.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Esto hace que la Skill sea mucho m\u00e1s \u00fatil que una simple lista de comandos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Estructura recomendada de un archivo SKILL.md<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">No existe una \u00fanica forma de escribir todas las Skills.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sin embargo, para procedimientos operativos me resulta especialmente \u00fatil mantener una estructura predecible.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As\u00ed puedo crear nuevas habilidades m\u00e1s r\u00e1pido y revisar las existentes sin tener que descifrar cada una desde cero.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una estructura que utilizar\u00eda como punto de partida ser\u00eda:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\nname: nombre-skill\ndescription: Explicaci\u00f3n breve y espec\u00edfica del prop\u00f3sito.\n---\n\n# Nombre de la Skill\n\n## Cu\u00e1ndo utilizar esta skill\n\nExplica qu\u00e9 situaciones deber\u00edan activar este procedimiento.\n\n## Requisitos\n\nIndica herramientas, comandos, configuraci\u00f3n o dependencias necesarias.\n\n## Procedimiento\n\n1. Primer paso.\n2. Segundo paso.\n3. Tercer paso.\n\n## Situaciones especiales\n\nDefine errores, excepciones y l\u00edmites.\n\n## Resultado esperado\n\nExplica qu\u00e9 informaci\u00f3n debe devolver.\n\n## Verificaci\u00f3n\n\nIndica c\u00f3mo comprobar que la tarea se ha realizado correctamente.<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Nombre y descripci\u00f3n<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El nombre deber\u00eda identificar f\u00e1cilmente la habilidad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La descripci\u00f3n tiene que ser mucho m\u00e1s \u00fatil para el agente que para una persona que est\u00e1 simplemente navegando por carpetas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por eso intentar\u00eda describir <strong>el problema que resuelve<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>description: Revisa contenedores Docker, detecta estados an\u00f3malos y consulta logs para diagnosticar incidencias.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">es mejor que:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>description: Herramientas Docker.<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Cu\u00e1ndo debe utilizarse la Skill<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Este apartado puede parecer redundante si ya tenemos una descripci\u00f3n, pero nos permite a\u00f1adir matices.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos escribir:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Utiliza esta Skill cuando:\n\n- una aplicaci\u00f3n ejecutada en Docker no responda;\n- el usuario quiera comprobar el estado de los contenedores;\n- sea necesario revisar logs de un servicio Docker;\n- exista un contenedor que se reinicia repetidamente.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Esto proporciona bastante contexto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Herramientas y requisitos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si el procedimiento necesita Docker, Git, <code>curl<\/code> u otra utilidad, es conveniente dejarlo claro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando existen variables de entorno o credenciales, tambi\u00e9n tenemos que documentar sus requisitos de la forma admitida por nuestro entorno de Hermes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El objetivo es evitar que la Skill dependa de condiciones invisibles.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Procedimiento paso a paso<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed deber\u00edamos describir lo que realmente hacemos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un buen procedimiento suele tener:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un punto de entrada claro;<\/li>\n\n\n\n<li>pasos ordenados;<\/li>\n\n\n\n<li>condiciones;<\/li>\n\n\n\n<li>l\u00edmites;<\/li>\n\n\n\n<li>una salida esperada.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">No hace falta convertir cada Skill en un manual de cincuenta p\u00e1ginas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero s\u00ed deber\u00edamos incluir la informaci\u00f3n que evitar\u00eda tener que volver a explicar manualmente la tarea.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Errores y situaciones especiales<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es una de las secciones que m\u00e1s valor a\u00f1ade.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando dise\u00f1amos un procedimiento por primera vez tendemos a pensar solamente en el camino ideal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sin embargo, los agentes suelen trabajar mucho mejor cuando tambi\u00e9n les ense\u00f1amos qu\u00e9 hacer cuando ese camino no existe.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Verificaci\u00f3n del resultado<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n me gusta terminar explicando qu\u00e9 significa realmente que la tarea haya finalizado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, en una Skill de diagn\u00f3stico Docker, \u201cterminar\u201d no significa \u00fanicamente haber ejecutado <code>docker ps<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Significa haber identificado el estado, revisado la evidencia disponible y devuelto un diagn\u00f3stico comprensible.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ejemplo pr\u00e1ctico: crear una Skill de Hermes Agent para revisar Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a reunir todo lo anterior en un ejemplo algo m\u00e1s completo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quiero crear una Skill que me ayude cuando una aplicaci\u00f3n desplegada con Docker presenta problemas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No quiero que el agente reinicie cosas autom\u00e1ticamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Primero quiero un diagn\u00f3stico.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qu\u00e9 queremos que haga la Skill<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El comportamiento ser\u00e1:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>comprobar que Docker funciona;<\/li>\n\n\n\n<li>listar contenedores;<\/li>\n\n\n\n<li>localizar estados an\u00f3malos;<\/li>\n\n\n\n<li>consultar logs;<\/li>\n\n\n\n<li>identificar errores relevantes;<\/li>\n\n\n\n<li>resumir la informaci\u00f3n;<\/li>\n\n\n\n<li>pedir confirmaci\u00f3n antes de realizar cambios importantes.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Esta \u00faltima parte me parece especialmente importante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Automatizar no deber\u00eda significar convertir cualquier diagn\u00f3stico en una secuencia de acciones destructivas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Crear el SKILL.md<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Podr\u00edamos partir de algo como:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\nname: docker-diagnostics\ndescription: Diagnostica incidencias en aplicaciones Docker revisando contenedores, estado y logs antes de realizar cambios.\n---\n\n# Docker Diagnostics\n\n## Cu\u00e1ndo utilizar\n\nUtiliza esta Skill cuando el usuario solicite diagnosticar un problema\nrelacionado con Docker o cuando una aplicaci\u00f3n desplegada mediante\ncontenedores no funcione correctamente.\n\n## Procedimiento\n\n1. Comprueba que el comando `docker` est\u00e1 disponible.\n2. Lista los contenedores y sus estados.\n3. Identifica contenedores detenidos, unhealthy o en reinicio.\n4. Consulta los logs del servicio afectado.\n5. Extrae los errores relevantes.\n6. Resume el diagn\u00f3stico.\n7. Sugiere la siguiente comprobaci\u00f3n o acci\u00f3n.\n\n## Seguridad\n\nNo ejecutes autom\u00e1ticamente operaciones que eliminen contenedores,\nim\u00e1genes, redes o vol\u00famenes.\n\nNo reinicies servicios salvo que el usuario lo solicite o confirme\nla acci\u00f3n despu\u00e9s del diagn\u00f3stico.\n\n## Resultado esperado\n\nIncluye:\n\n- servicio afectado;\n- estado;\n- evidencia encontrada;\n- posible causa;\n- siguiente paso recomendado.\n\n## Verificaci\u00f3n\n\nAntes de terminar, comprueba que el diagn\u00f3stico est\u00e1 respaldado por\nla informaci\u00f3n obtenida durante las comprobaciones.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ya tenemos algo bastante \u00fatil.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Definir los comandos que puede ejecutar<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En las instrucciones podemos explicar qu\u00e9 comandos suelen servir para cada paso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker ps<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">o, cuando necesitemos ver tambi\u00e9n contenedores detenidos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker ps -a<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Para consultar logs de un contenedor concreto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker logs --tail 100 nombre-contenedor<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La Skill no tiene por qu\u00e9 convertirse en una gigantesca colecci\u00f3n de comandos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Me parece mejor explicar <strong>para qu\u00e9 se utiliza cada uno y en qu\u00e9 momento<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ense\u00f1arle a interpretar contenedores y logs<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed est\u00e1 una de las diferencias entre una Skill \u00fatil y una lista de comandos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No queremos solamente que Hermes ejecute <code>docker ps<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Queremos que se fije en se\u00f1ales relevantes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>contenedores detenidos;<\/li>\n\n\n\n<li>reinicios repetidos;<\/li>\n\n\n\n<li>estados <code>unhealthy<\/code>;<\/li>\n\n\n\n<li>errores recientes;<\/li>\n\n\n\n<li>excepciones;<\/li>\n\n\n\n<li>problemas de conexi\u00f3n;<\/li>\n\n\n\n<li>fallos de configuraci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s debe relacionar esa informaci\u00f3n con el problema descrito por el usuario.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">A\u00f1adir comprobaciones antes de actuar<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n podemos ense\u00f1ar nuestros criterios operativos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Antes de reiniciar un contenedor:\n\n1. revisa sus logs;\n2. identifica si el fallo parece recurrente;\n3. comprueba si reiniciarlo podr\u00eda interrumpir el servicio;\n4. explica qu\u00e9 acci\u00f3n propones;\n5. solicita confirmaci\u00f3n si existe riesgo operativo.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es precisamente la parte que m\u00e1s valor tiene para m\u00ed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Estamos codificando conocimiento de trabajo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No solamente estamos dici\u00e9ndole al agente que sabe utilizar Docker.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le estamos ense\u00f1ando <strong>c\u00f3mo queremos utilizar Docker en nuestro entorno<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Variables de entorno, credenciales y secretos en una Skill<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hay otro aspecto importante cuando empezamos a crear Skills m\u00e1s avanzadas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tarde o temprano alguna necesitar\u00e1 acceder a una API, un servidor o una herramienta autenticada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed debemos tener cuidado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No deber\u00edamos utilizar <code>SKILL.md<\/code> como un lugar donde escribir indiscriminadamente contrase\u00f1as, tokens o claves privadas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qu\u00e9 datos no deber\u00edas escribir directamente en SKILL.md<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Evitar\u00eda incluir directamente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>contrase\u00f1as;<\/li>\n\n\n\n<li>tokens de acceso;<\/li>\n\n\n\n<li>claves de API;<\/li>\n\n\n\n<li>claves SSH privadas;<\/li>\n\n\n\n<li>secretos internos.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">El archivo deber\u00eda describir <strong>qu\u00e9 credencial necesita la Skill<\/strong>, no necesariamente contener el secreto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Variables de entorno<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para determinados valores, una variable de entorno puede ser una soluci\u00f3n m\u00e1s razonable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La Skill puede documentar que necesita una variable concreta y el entorno puede encargarse de proporcionar su valor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esto adem\u00e1s facilita utilizar la misma Skill en varios servidores o instalaciones.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Archivos de credenciales<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Algunas integraciones pueden necesitar archivos de configuraci\u00f3n o credenciales.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">De nuevo, la Skill deber\u00eda depender del mecanismo de configuraci\u00f3n correspondiente en lugar de incrustar informaci\u00f3n sensible en las instrucciones.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hermes dispone, seg\u00fan versi\u00f3n y configuraci\u00f3n, de mecanismos para declarar determinados requisitos como variables de entorno o archivos de credenciales. Conviene revisar cu\u00e1les est\u00e1n disponibles en nuestra instalaci\u00f3n antes de dise\u00f1ar la habilidad alrededor de ellos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cu\u00e1ndo una integraci\u00f3n ya deber\u00eda convertirse en una Tool<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Este punto vuelve a conectarnos con Skill vs Tool.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si para que una Skill funcione estamos empezando a construir una gran capa de autenticaci\u00f3n, transformaci\u00f3n de datos, control de errores y l\u00f3gica espec\u00edfica, probablemente deber\u00edamos detenernos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quiz\u00e1 el problema ya no sea \u201cense\u00f1ar un procedimiento\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quiz\u00e1 estemos desarrollando una integraci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y en ese caso una Tool puede ser una arquitectura m\u00e1s apropiada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo instalar y cargar una Skill en Hermes Agent<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una Skill perfectamente escrita no sirve de mucho si Hermes no puede encontrarla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed tenemos que comprobar c\u00f3mo est\u00e1 configurada nuestra instalaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hermes permite trabajar con directorios de Skills y, dependiendo del entorno, podremos utilizar ubicaciones locales o directorios externos configurados para cargar nuestras habilidades.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En instalaciones donde se utilice el directorio habitual de usuario, podemos encontrarnos con una estructura similar a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>~\/.hermes\/skills\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">y dentro:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>~\/.hermes\/skills\/docker-diagnostics\/SKILL.md<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pero no asumir\u00eda esta ruta a ciegas en cualquier despliegue.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Comprobar\u00eda primero la configuraci\u00f3n de la instalaci\u00f3n correspondiente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">D\u00f3nde guardar las Skills<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La idea general es mantener cada Skill dentro de su propio directorio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skills\/\n\u251c\u2500\u2500 docker-diagnostics\/\n\u2502   \u2514\u2500\u2500 SKILL.md\n\u251c\u2500\u2500 git-deploy\/\n\u2502   \u2514\u2500\u2500 SKILL.md\n\u2514\u2500\u2500 server-backup\/\n    \u2514\u2500\u2500 SKILL.md<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Esto facilita mantenerlas, compartirlas y ampliarlas posteriormente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">A\u00f1adir directorios externos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En determinados entornos podemos necesitar utilizar directorios adicionales.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esto resulta especialmente \u00fatil si queremos mantener nuestras Skills dentro de un repositorio Git independiente en lugar de mezclarlas con otros archivos de configuraci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n puede ser pr\u00e1ctico para compartir una biblioteca de Skills entre varios entornos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Comprobar que Hermes reconoce la Skill<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s de a\u00f1adirla, lo siguiente no deber\u00eda ser asumir que ya funciona.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hay que verificar que Hermes la ha cargado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si nuestra versi\u00f3n dispone de herramientas de gesti\u00f3n o visualizaci\u00f3n de Skills, podemos utilizarlas para comprobar qu\u00e9 habilidades est\u00e1n disponibles y revisar su contenido.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n podemos iniciar una sesi\u00f3n limpia y realizar una petici\u00f3n que deber\u00eda activar claramente nuestra nueva Skill.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Revisa por qu\u00e9 el contenedor de mi aplicaci\u00f3n Docker est\u00e1 fallando.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Si la descripci\u00f3n y las instrucciones est\u00e1n bien definidas, deber\u00eda resultar razonable que Hermes utilice la habilidad correspondiente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo probar una Skill de Hermes Agent<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Crear la Skill es solamente la mitad del trabajo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La otra mitad es comprobar su comportamiento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una habilidad puede ser perfectamente v\u00e1lida desde el punto de vista del archivo y aun as\u00ed no funcionar como esper\u00e1bamos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por eso probar\u00eda varias situaciones.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Probar la condici\u00f3n de activaci\u00f3n<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Primero utilizo una petici\u00f3n que deber\u00eda activar claramente la Skill.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s pruebo otra que no deber\u00eda activarla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si una habilidad dedicada a diagnosticar Docker aparece constantemente ante cualquier pregunta relacionada con servidores, quiz\u00e1 su descripci\u00f3n sea demasiado amplia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si nunca aparece, puede ser demasiado espec\u00edfica o poco clara.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Comprobar que usa las herramientas correctas<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s revisar\u00eda el procedimiento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfEst\u00e1 comprobando primero el estado?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfConsulta los logs antes de sugerir cambios?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfEst\u00e1 utilizando informaci\u00f3n real o salt\u00e1ndose pasos importantes?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed podremos descubrir que nuestras instrucciones contienen ambig\u00fcedades.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Verificar el resultado<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n deber\u00edamos comprobar la respuesta final.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si definimos que queremos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>servicio afectado;<\/li>\n\n\n\n<li>estado;<\/li>\n\n\n\n<li>evidencia;<\/li>\n\n\n\n<li>posible causa;<\/li>\n\n\n\n<li>siguiente acci\u00f3n;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">deber\u00edamos verificar que Hermes devuelve realmente esa informaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Probar situaciones de error<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es probablemente la prueba m\u00e1s importante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos comprobar qu\u00e9 ocurre cuando:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Docker no est\u00e1 disponible;<\/li>\n\n\n\n<li>el contenedor no existe;<\/li>\n\n\n\n<li>no hay permisos;<\/li>\n\n\n\n<li>los logs no aportan informaci\u00f3n;<\/li>\n\n\n\n<li>hay varios contenedores afectados;<\/li>\n\n\n\n<li>el nombre del servicio es ambiguo.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando probamos estos escenarios empiezan a aparecer mejoras que nunca habr\u00edamos detectado probando \u00fanicamente el caso perfecto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mi Skill no funciona: errores frecuentes y c\u00f3mo solucionarlos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando una Skill no funciona, el problema no siempre est\u00e1 en Hermes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Muchas veces aparece en la propia definici\u00f3n de la habilidad.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Hermes Agent no detecta la Skill<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Lo primero que comprobar\u00eda es:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ubicaci\u00f3n del directorio;<\/li>\n\n\n\n<li>nombre del archivo;<\/li>\n\n\n\n<li>configuraci\u00f3n de las rutas de Skills;<\/li>\n\n\n\n<li>formato del frontmatter;<\/li>\n\n\n\n<li>errores de sintaxis.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Un peque\u00f1o problema de estructura puede impedir que la habilidad se cargue correctamente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Error en el frontmatter YAML<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">YAML puede ser especialmente sensible al formato.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Problemas de indentaci\u00f3n, caracteres inesperados o estructuras incorrectas pueden hacer que el archivo no se interprete como esperamos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si la Skill deja de cargar despu\u00e9s de modificar el frontmatter, empezar\u00eda revisando precisamente esa zona.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">La Skill no se activa cuando deber\u00eda<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed revisar\u00eda principalmente la descripci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Puede que hayamos explicado bien lo que hace para una persona, pero no suficientemente bien el contexto en el que debe utilizarse.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conviene utilizar t\u00e9rminos relacionados directamente con el problema.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, en nuestra Skill:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Docker;<\/li>\n\n\n\n<li>contenedores;<\/li>\n\n\n\n<li>logs;<\/li>\n\n\n\n<li>diagn\u00f3stico;<\/li>\n\n\n\n<li>servicios.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Hermes ejecuta pasos distintos a los esperados<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Esto suele indicar que las instrucciones dejan demasiado espacio a la interpretaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos mejorar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>el orden de los pasos;<\/li>\n\n\n\n<li>las condiciones;<\/li>\n\n\n\n<li>los l\u00edmites;<\/li>\n\n\n\n<li>el resultado esperado;<\/li>\n\n\n\n<li>las acciones que requieren confirmaci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Una frase como:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Haz las comprobaciones necesarias.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">puede sustituirse por una secuencia mucho m\u00e1s concreta.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Faltan herramientas, variables o dependencias<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Otra posibilidad es que el procedimiento est\u00e9 bien, pero el entorno no disponga de lo necesario.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La Skill deber\u00eda dejar claro qu\u00e9 dependencias necesita.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, no tiene demasiado sentido pedirle que utilice Docker en un entorno donde el comando no existe.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">La Skill funciona unas veces y otras no<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed revisar\u00eda dos cosas:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>si la condici\u00f3n de activaci\u00f3n es suficientemente clara;<\/li>\n\n\n\n<li>si el procedimiento contiene instrucciones ambiguas.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Cuanto m\u00e1s cr\u00edtico sea el orden de una tarea, m\u00e1s expl\u00edcito conviene ser.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Buenas pr\u00e1cticas para crear mejores Skills<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s de crear varias Skills, probablemente terminemos desarrollando nuestro propio estilo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aun as\u00ed, hay varias ideas que intentar\u00eda mantener.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Una Skill deber\u00eda resolver una tarea concreta<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Evitar\u00eda crear una habilidad llamada:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Administraci\u00f3n completa de servidores.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Probablemente abarque demasiado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Preferir\u00eda separar procedimientos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>diagn\u00f3stico Docker;<\/li>\n\n\n\n<li>revisi\u00f3n de espacio en disco;<\/li>\n\n\n\n<li>actualizaci\u00f3n de una aplicaci\u00f3n;<\/li>\n\n\n\n<li>comprobaci\u00f3n de backups;<\/li>\n\n\n\n<li>an\u00e1lisis de logs.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Skills m\u00e1s concretas suelen ser m\u00e1s f\u00e1ciles de activar correctamente, probar y mantener.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Escribe procedimientos, no instrucciones vagas<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es probablemente la regla m\u00e1s importante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No escribir\u00eda:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Arregla el servidor.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Escribir\u00eda qu\u00e9 significa para m\u00ed investigar el problema antes de modificar nada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una Skill es especialmente \u00fatil cuando convierte nuestra forma de trabajar en pasos comprensibles.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Haz expl\u00edcitas las comprobaciones<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si algo debe verificarse, lo escribir\u00eda.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Despu\u00e9s del cambio, comprueba que el servicio responde correctamente.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">No asumir\u00eda que esa comprobaci\u00f3n ocurrir\u00e1 autom\u00e1ticamente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Evita acciones destructivas innecesarias<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Especialmente en Skills relacionadas con servidores, bases de datos, Docker o archivos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eliminar algo, modificar configuraciones o reiniciar servicios puede tener consecuencias.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos ense\u00f1ar a Hermes cu\u00e1ndo queremos diagn\u00f3stico, cu\u00e1ndo puede sugerir una acci\u00f3n y cu\u00e1ndo debe pedir confirmaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mant\u00e9n tus Skills actualizadas<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las Skills son documentaci\u00f3n ejecutable en cierto sentido.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y como cualquier documentaci\u00f3n, pueden quedarse obsoletas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si cambia:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>una herramienta;<\/li>\n\n\n\n<li>un comando;<\/li>\n\n\n\n<li>nuestro despliegue;<\/li>\n\n\n\n<li>una API;<\/li>\n\n\n\n<li>el procedimiento interno;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">tambi\u00e9n deber\u00edamos revisar la Skill correspondiente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Las Skills como biblioteca de conocimiento operativo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s de entender c\u00f3mo funcionan, creo que aqu\u00ed aparece una de las posibilidades m\u00e1s interesantes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos dejar de pensar en las Skills como automatizaciones aisladas y empezar a utilizarlas como una <strong>biblioteca de conocimiento operativo<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Imaginemos que tenemos procedimientos definidos para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>desplegar una aplicaci\u00f3n;<\/li>\n\n\n\n<li>revisar una incidencia;<\/li>\n\n\n\n<li>comprobar backups;<\/li>\n\n\n\n<li>investigar un servidor;<\/li>\n\n\n\n<li>preparar una actualizaci\u00f3n;<\/li>\n\n\n\n<li>analizar logs;<\/li>\n\n\n\n<li>revisar un repositorio;<\/li>\n\n\n\n<li>preparar determinados informes.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Normalmente este conocimiento termina repartido entre documentaci\u00f3n, comandos guardados, notas personales y experiencia adquirida con el tiempo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Parte de ese conocimiento puede trasladarse a Skills.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, podr\u00edamos crear:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skills\/\n\u251c\u2500\u2500 diagnose-docker\/\n\u251c\u2500\u2500 deploy-production\/\n\u251c\u2500\u2500 verify-backups\/\n\u251c\u2500\u2500 inspect-server\/\n\u251c\u2500\u2500 update-application\/\n\u2514\u2500\u2500 review-git-repository\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cada una resolver\u00eda un problema concreto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con el tiempo, Hermes dejar\u00eda de ser \u00fanicamente un agente gen\u00e9rico con acceso a determinadas herramientas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tendr\u00eda tambi\u00e9n acceso a <strong>nuestra forma de utilizar esas herramientas<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para m\u00ed, esta es una diferencia bastante importante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No se trata solamente de darle capacidad para ejecutar <code>git<\/code>, Docker o comandos de shell.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se trata de decirle:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Cuando hagamos esta tarea, quiero que trabajemos as\u00ed.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Eso reduce la necesidad de repetir instrucciones y ayuda a convertir procedimientos habituales en conocimiento reutilizable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y cuanto mejor definidos est\u00e9n, m\u00e1s f\u00e1cil ser\u00e1 mantener una forma de trabajo consistente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Las Skills de los agentes de ia Hermes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Crear una <strong>Skill para Hermes Agent<\/strong> no tiene por qu\u00e9 convertirse en un desarrollo complicado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Muchas veces ya disponemos de todas las herramientas t\u00e9cnicas necesarias.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo que necesitamos es ense\u00f1arle al agente qu\u00e9 procedimiento debe seguir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos empezar con algo tan sencillo como un archivo <code>SKILL.md<\/code> que explique:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>cu\u00e1ndo utilizar una habilidad;<\/li>\n\n\n\n<li>qu\u00e9 pasos seguir;<\/li>\n\n\n\n<li>qu\u00e9 herramientas emplear;<\/li>\n\n\n\n<li>qu\u00e9 errores tener en cuenta;<\/li>\n\n\n\n<li>qu\u00e9 acciones evitar;<\/li>\n\n\n\n<li>c\u00f3mo verificar el resultado.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A partir de ah\u00ed podemos a\u00f1adir requisitos, configuraci\u00f3n o recursos adicionales seg\u00fan lo necesitemos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n considero importante no intentar resolver todo mediante Skills.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando una integraci\u00f3n requiere autenticaci\u00f3n compleja, procesamiento espec\u00edfico o un comportamiento t\u00e9cnico estrictamente controlado, una Tool puede ser una soluci\u00f3n mejor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La clave est\u00e1 en utilizar cada mecanismo para el problema adecuado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En mi caso, lo que m\u00e1s me interesa de las Skills es que permiten pasar de tener un agente gen\u00e9rico a tener un agente progresivamente adaptado a nuestro entorno.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos ense\u00f1arle c\u00f3mo diagnosticamos Docker, c\u00f3mo revisamos servidores, c\u00f3mo trabajamos con Git o qu\u00e9 comprobaciones realizamos antes de tocar un servicio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El verdadero potencial del agente no est\u00e1 solamente en lo que sabe hacer cuando lo instalamos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n est\u00e1 en todo lo que podemos ense\u00f1arle despu\u00e9s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y probablemente ah\u00ed est\u00e9 una de las claves de este tipo de herramientas: <strong>no intentar que la IA lo haga todo de forma gen\u00e9rica, sino ense\u00f1arle exactamente c\u00f3mo queremos que trabaje con nosotros.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dudas de la comunidad<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 es una Skill en Hermes Agent?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Una Skill es una forma de proporcionar a Hermes instrucciones y procedimientos reutilizables para realizar una tarea determinada utilizando las capacidades y herramientas disponibles en el agente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 diferencia hay entre una Skill y una Tool?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Una Skill resulta especialmente adecuada cuando queremos ense\u00f1ar un procedimiento utilizando herramientas existentes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una Tool suele tener m\u00e1s sentido cuando necesitamos a\u00f1adir una capacidad t\u00e9cnica nueva, implementar una integraci\u00f3n espec\u00edfica o controlar el comportamiento mediante c\u00f3digo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfD\u00f3nde se guardan las Skills?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La ubicaci\u00f3n depende de la configuraci\u00f3n de Hermes. En instalaciones que utilizan la estructura habitual del usuario podemos encontrarnos con directorios dedicados a Skills, aunque conviene comprobar siempre la configuraci\u00f3n y documentaci\u00f3n de nuestra versi\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPuede una Skill ejecutar comandos de terminal?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Una Skill puede indicar c\u00f3mo utilizar herramientas de terminal cuando ese tipo de ejecuci\u00f3n est\u00e1 disponible en el entorno de Hermes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Precisamente por eso son especialmente interesantes para procedimientos relacionados con Docker, Git, diagn\u00f3stico de servidores o scripts existentes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPuede una Skill utilizar una API?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Puede formar parte de un procedimiento que utilice herramientas capaces de consultar una API.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sin embargo, si necesitamos autenticaci\u00f3n compleja, l\u00f3gica espec\u00edfica o una integraci\u00f3n fuertemente controlada, puede ser m\u00e1s adecuado desarrollar una Tool.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfC\u00f3mo puedo probar si una Skill funciona?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Conviene comprobar al menos cuatro aspectos:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>que Hermes detecta la Skill;<\/li>\n\n\n\n<li>que se activa ante las peticiones adecuadas;<\/li>\n\n\n\n<li>que sigue el procedimiento definido;<\/li>\n\n\n\n<li>que responde correctamente cuando aparecen errores o situaciones inesperadas.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfSe pueden compartir las Skills de Hermes Agent?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Al estar organizadas como habilidades reutilizables, pueden mantenerse de forma independiente y distribuirse cuando su estructura y dependencias lo permitan. Antes de compartir una Skill conviene eliminar informaci\u00f3n sensible y documentar claramente sus requisitos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfCu\u00e1ndo deber\u00eda crear una Tool en lugar de una Skill?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando el problema deje de consistir principalmente en ense\u00f1ar un procedimiento y empiece a requerir una capacidad t\u00e9cnica propia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si estamos implementando autenticaci\u00f3n, procesamiento espec\u00edfico, l\u00f3gica determinista o una integraci\u00f3n compleja, probablemente deber\u00edamos valorar una Tool.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Opini\u00f3n Personal<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las Skills son una de las partes m\u00e1s interesantes de Hermes Agent porque permiten adaptar el agente a nuestra forma real de trabajar sin tener que convertir cada necesidad en un desarrollo complejo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo que m\u00e1s valor les veo es precisamente su capacidad para transformar procedimientos que repetimos constantemente en instrucciones reutilizables. Si cada vez que aparece una incidencia tenemos que explicarle a Hermes qu\u00e9 logs revisar, qu\u00e9 comandos ejecutar o qu\u00e9 comprobaciones hacer antes de tocar un servicio, probablemente ese conocimiento deber\u00eda convertirse en una Skill.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n me parece especialmente \u00fatil la separaci\u00f3n entre <strong>Skill y Tool<\/strong>. No todo necesita c\u00f3digo, una integraci\u00f3n espec\u00edfica o una arquitectura m\u00e1s compleja. Muchas veces el agente ya dispone de las herramientas necesarias y simplemente necesita saber c\u00f3mo queremos que las utilice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para m\u00ed, ah\u00ed est\u00e1 el verdadero potencial de este sistema: pasar de utilizar un agente gen\u00e9rico a construir poco a poco un asistente que conoce nuestros procedimientos, entiende nuestras prioridades y sabe c\u00f3mo abordar las tareas que realizamos habitualmente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con el tiempo, una buena colecci\u00f3n de Skills puede terminar convirti\u00e9ndose en una aut\u00e9ntica biblioteca de conocimiento operativo. Y creo que esa capacidad de ense\u00f1ar al agente c\u00f3mo queremos trabajar puede ser incluso m\u00e1s interesante que a\u00f1adirle constantemente nuevas herramientas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00bfT\u00fa ya est\u00e1s utilizando Skills en Hermes Agent? \u00bfQu\u00e9 tareas o procedimientos te gustar\u00eda automatizar? Cu\u00e9ntamelo en los comentarios, porque seguro que pueden salir ideas muy interesantes entre todos.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Crear una Skill para Hermes Agent me parece una de las formas m\u00e1s interesantes de ampliar lo que puede hacer el agente sin complicar innecesariamente su arquitectura. Cuando empec\u00e9 a plantearme este tipo de automatizaciones, una de las cosas que m\u00e1s sentido me hizo fue precisamente esa: no todo necesita convertirse en una integraci\u00f3n programada [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":9591,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[952],"tags":[1314,1424,606,605,1490],"class_list":["post-9590","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guias","tag-agentes-ia","tag-hermes-agent","tag-ia","tag-inteligencia-artificial","tag-skill"],"_links":{"self":[{"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/posts\/9590","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/comments?post=9590"}],"version-history":[{"count":1,"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/posts\/9590\/revisions"}],"predecessor-version":[{"id":9592,"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/posts\/9590\/revisions\/9592"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/media\/9591"}],"wp:attachment":[{"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/media?parent=9590"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/categories?post=9590"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/tags?post=9590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}