<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss/styles.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Bitdoze (Espanol)</title><description>Articulos en espanol de Bitdoze</description><link>https://www.bitdoze.com/</link><item><title>Reseña OpenCode Go 2026: 18 Modelos de IA por $10/Mes (GPT 5.6 Luna, Kimi K3)</title><link>https://www.bitdoze.com/es/opencode-go-plan/</link><guid isPermaLink="true">https://www.bitdoze.com/es/opencode-go-plan/</guid><description>Reseña de OpenCode Go tras 3 semanas de uso diario. Una API key, 18 modelos incluyendo GPT 5.6 Luna, Kimi K3 y DeepSeek V4 Pro. Funciona con Hermes, OpenClaw y Pi Agent. $5 el primer mes.</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

Llevo meses malabareando API keys de agentes de codificacion. DeepSeek aqui, MiniMax alla, saldo de OpenRouter que recargar, tres paneles de facturacion y no me acuerdo de las contrasenas. Funciona. Sigue siendo un peñazo.

OpenCode Go es, en la practica, una sola clave de $10/mes ($5 el primer mes) para 18 modelos: GPT 5.6 Luna, Grok 4.5, Kimi K3, GLM-5.2, Qwen3.8 Max, DeepSeek V4, MiniMax M3 y un monton de opciones mas baratas. Entra en OpenCode, Hermes, OpenClaw, Pi o cualquier cliente compatible con OpenAI.

Casi lo dejo pasar. Otra suscripcion. Otra cosa que cancelar despues. A $10 pense en quemar una semana y largarme si no servia. Tres semanas despues sigo usandolo. Aqui va la version honesta.

&lt;Button text=&quot;Obtén $5 en Creditos Gratis&quot; link=&quot;https://go.bitdoze.com/opencode-go&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

## Que es OpenCode Go

OpenCode Go es una suscripcion plana del equipo de OpenCode: una API key, 18 modelos, $10/mes despues de un primer mes a $5. Sin cuentas por token. Sin cuentas separadas en cada proveedor.

Los modelos se sirven desde EE.UU., UE y Singapur. La mayoria de los proveedores afirman cero retencion, asi que tu codigo no deberia entrenar el siguiente modelo de nadie. Las excepciones son Grok 4.5 y GPT 5.6 Luna, que guardan logs durante 30 dias. Importa si trabajas con codigo propietario.

No necesitas OpenCode el IDE para usar Go. Apunta cualquier cliente compatible con OpenAI al endpoint: [Hermes Agent](/es/guia-configuracion-hermes-agent/), [OpenClaw](/openclaw-alternatives/), [Pi Agent](/es/guia-configuracion-pi-agent/), Mastra, Agno, Codex, lo que ya uses.

&lt;Button text=&quot;Probar OpenCode Go&quot; link=&quot;https://go.bitdoze.com/opencode-go&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

## Que modelos incluye

La lista actual (18 modelos):

| Modelo | Notas |
|--------|-------|
| **GPT 5.6 Luna** | Ultima incorporacion; el tier barato de OpenAI, fuerte en tareas dificiles |
| **Grok 4.5** | Fuerte en tareas dificiles, pero quema la cuota rapido |
| **Kimi K3** | Nuevo flagship de Moonshot; bueno en codigo, pocos requests por tope |
| **GLM-5.2** | Flagship actual de Zhipu para agentes de codigo |
| GLM-5.1 | GLM anterior, mismo tier de uso que 5.2 |
| Kimi K2.7 Code | Kimi afinado a codigo, muchas mas solicitudes que K3 |
| Kimi K2.6 | Bien para el dia a dia si no necesitas K3 |
| MiMo-V2.5-Pro | Modelo de codigo mas fuerte de Xiaomi |
| MiMo-V2.5 | Barato y con muchos requests |
| MiniMax M3 | Buen caballo de batalla agentico |
| MiniMax M2.7 | Sigue siendo mi default para trabajo diario |
| **Qwen3.8 Max** | Nuevo tier de Qwen, muy pocos requests por tope |
| Qwen3.7 Max | Anterior top de la linea Qwen |
| Qwen3.7 Plus | Opcion intermedia de Qwen 3.7 |
| Qwen3.6 Plus | Qwen mas viejo, sigue sirviendo |
| DeepSeek V4 Pro | Buena codificacion general, contexto largo |
| DeepSeek V4 Flash | Rapido y barato para trabajos cortos |
| Hy3 | Modelo open con alto numero de requests |

&lt;Notice type=&quot;info&quot; title=&quot;GPT 5.6 Luna y Qwen3.8 Max ya estan disponibles&quot;&gt;
Las dos ultimas incorporaciones son GPT 5.6 Luna (el tier barato de OpenAI) y Qwen3.8 Max. Se unen a Grok 4.5 y Kimi K3 en el tier de $15: unos $15 de uso incluido al mes frente a $60 en la mayoria del catalogo. Se nota en el limite de 5 horas. Los dejo para problemas duros y quemo MiniMax, DeepSeek Flash o MiMo cuando necesito volumen. Ejecuta `/models` en OpenCode si la lista se ha movido otra vez.
&lt;/Notice&gt;

OpenCode no mete cualquier modelo nuevo en Go. Primero lo prueban con agentes de codificacion y solo añaden lo que aguanta. La lista seguira cambiando.

## Limites de uso

Go no es ilimitado. Usa limites en valor de dolares, no en numero de solicitudes. Tu numero real de solicitudes depende del modelo que elijas.

| Limite | Tope |
|--------|------|
| Por 5 horas | $12 |
| Por semana | $30 |
| Por mes | $60 |

Los modelos mas baratos rinden mas. Estimaciones oficiales de [docs de Go](https://opencode.ai/docs/go/):

| Modelo | Solicitudes por 5 horas | Solicitudes por semana | Solicitudes por mes |
|--------|------------------------|----------------------|-------------------|
| DeepSeek V4 Flash | 31,650 | 79,050 | 158,150 |
| MiMo-V2.5 | 30,100 | 75,200 | 150,400 |
| Hy3 | 4,300 | 10,750 | 21,500 |
| Qwen3.7 Plus | 4,300 | 10,800 | 21,600 |
| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 |
| MiniMax M2.7 | 3,400 | 8,500 | 17,000 |
| Qwen3.6 Plus | 3,300 | 8,200 | 16,300 |
| MiMo-V2.5-Pro | 3,250 | 8,150 | 16,300 |
| MiniMax M3 | 3,200 | 8,000 | 16,000 |
| GPT 5.6 Luna | 2,050 | 5,100 | 10,250 |
| Kimi K2.7 Code | 1,350 | 3,380 | 6,750 |
| Kimi K2.6 | 1,150 | 2,880 | 5,750 |
| GLM-5.2 | 880 | 2,150 | 4,300 |
| GLM-5.1 | 880 | 2,150 | 4,300 |
| Qwen3.7 Max | 340 | 840 | 1,690 |
| Qwen3.8 Max | 160 | 400 | 810 |
| Grok 4.5 | 120 | 300 | 600 |
| Kimi K3 | 110 | 250 | 490 |

Si te apoyas en Grok 4.5, GPT 5.6 Luna o Kimi K3 a tope, te comes el limite de 5 horas. Con DeepSeek V4 Flash, MiMo-V2.5 o MiniMax M2.7 dudo que toques nada a menos que los agentes corran todo el dia.

&lt;Notice type=&quot;info&quot; title=&quot;Usar creditos mas alla de los limites&quot;&gt;
Si tienes creditos en tu saldo de OpenCode Zen, puedes activar la opcion &quot;Usar saldo&quot; en la consola. Cuando se agoten los limites de Go, usara tu saldo de Zen en vez de bloquear las solicitudes.
&lt;/Notice&gt;

## Configuracion

La configuracion toma unos dos minutos.

1. Ve a [opencode.ai/auth](https://go.bitdoze.com/opencode-go) y crea una cuenta
2. Suscribete a Go y copia tu API key
3. En OpenCode, ejecuta `/connect`
4. Selecciona `OpenCode Go` y pega tu clave
5. Ejecuta `/models` para ver los modelos disponibles

La URL base de la API es:

```
https://opencode.ai/zen/go/v1/chat/completions
```

### Usar Go con otros agentes

Como el endpoint es compatible con OpenAI, puedes usar Go con cualquier herramienta que soporte endpoints de API personalizados:

&lt;Tabs&gt;
&lt;Tab name=&quot;Hermes Agent&quot;&gt;
```bash
echo &quot;OPENAI_BASE_URL=https://opencode.ai/zen/go/v1/chat/completions&quot; &gt;&gt; ~/.hermes/.env
echo &quot;OPENAI_API_KEY=tu-clave-go&quot; &gt;&gt; ~/.hermes/.env
hermes config set model opencode-go/deepseek-v4-pro
```
Consulta la [guia de Hermes](/es/guia-configuracion-hermes-agent/) para instrucciones completas.
&lt;/Tab&gt;
&lt;Tab name=&quot;OpenClaw&quot;&gt;
Configura la URL base como `https://opencode.ai/zen/go/v1/chat/completions` y usa tu API key de Go en la configuracion de OpenClaw. Consulta el articulo de [alternativas a OpenClaw](/openclaw-alternatives/) para mas detalles.
&lt;/Tab&gt;
&lt;Tab name=&quot;Pi Agent&quot;&gt;
```bash
export OPENAI_BASE_URL=https://opencode.ai/zen/go/v1/chat/completions
export OPENAI_API_KEY=tu-clave-go
# /model, selecciona el proveedor opencode-go
```
Consulta la [guia de Pi](/es/guia-configuracion-pi-agent/) para instrucciones completas.
&lt;/Tab&gt;
&lt;Tab name=&quot;Mastra&quot;&gt;
En la configuracion de tu agente Mastra, usa OpenCode Go como proveedor de modelos:
```typescript
import { createOpenAI } from &apos;@ai-sdk/openai&apos;;

const opencodeGo = createOpenAI({
  baseURL: &apos;https://opencode.ai/zen/go/v1&apos;,
  apiKey: process.env.OPENCODE_API_KEY,
});

// Usar en la definicion del agente
const agent = new Agent({
  name: &apos;assistant&apos;,
  model: opencodeGo(&apos;deepseek-v4-pro&apos;),
  // ... otra configuracion
});
```
Consulta la [guia de Mastra](/build-ai-agent-mastra/) para instrucciones completas.
&lt;/Tab&gt;
&lt;/Tabs&gt;

## Para quien es esto

Go tiene sentido si:

- No quieres gestionar multiples API keys y paneles de facturacion
- Estas fuera de EE.UU. y quieres acceso de baja latencia a los modelos (los endpoints de Singapur y UE ayudan)
- Quieres un costo mensual predecible en vez de facturacion por token
- Estas empezando con agentes de codificacion IA y quieres una forma simple de acceder a buenos modelos
- Usas multiples agentes (OpenCode + Hermes + OpenClaw + Mastra) y quieres una sola clave para todos

Go no tiene sentido si:

- Solo usas uno o dos modelos y ya tienes acceso barato a la API
- Necesitas modelos que no estan en la lista (como Claude o GPT-4)
- Haces trabajo de produccion intensivo que necesita limites muy altos o ilimitados

## Como se compara con gestionar tus propias clave

Hice los numeros para mi propio uso. Normalmente uso MiniMax M2.7 y DeepSeek V4 Pro a traves de sus APIs directas. Mi costo mensual con claves API directas era de $15-20 dependiendo de cuanto usaba los agentes ese mes.

Con Go a $10/mes, tengo acceso a esos mismos modelos mas 10 otros que no me habria molestado en configurar. Los limites son lo suficientemente generosos como para no haberlos alcanzado una sola vez en tres semanas de uso diario.

La contrapartida es el control. Con claves API directas, puedo cambiar de proveedor si uno falla. Con Go, dependo del equipo de OpenCode para manejar la conmutacion por error. En la practica, no he tenido problemas de tiempo de inactividad, pero vale la pena mencionarlo.

&lt;Accordion label=&quot;¿Como se compara Go con OpenRouter?&quot; group=&quot;faq&quot;&gt;
OpenRouter es un agregador de pago por token. Cargas creditos y pagas por lo que usas. Go es una suscripcion mensual fija con limites de uso. Si usas muchos tokens, Go es mas barato. Si usas muy pocos tokens, OpenRouter podria ser mas barato. Go tambien incluye modelos de proveedores que no estan en OpenRouter.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo usar Go con herramientas que no sean OpenCode?&quot; group=&quot;faq&quot;&gt;
Si. El endpoint de Go es compatible con OpenAI. Cualquier herramienta que soporte endpoints compatibles con OpenAI puede usarlo. Esto incluye Hermes Agent, OpenClaw, Pi Agent y otros. Configura la URL base como `https://opencode.ai/zen/go/v1/chat/completions` y usa tu API key de Go.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Que pasa si alcanzo los limites de uso?&quot; group=&quot;faq&quot;&gt;
Las solicitudes se bloquean hasta que el limite se reinicia. El limite de 5 horas se reinicia de forma continua. Si tienes creditos en tu saldo de Zen, puedes activar la opcion &quot;Usar saldo&quot; para continuar despues de alcanzar los limites de Go.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Mi codigo se usa para entrenamiento?&quot; group=&quot;faq&quot;&gt;
OpenCode dice que los proveedores de Go no entrenan con tus prompts. La mayoria mantiene cero retencion; Grok 4.5 y GPT 5.6 Luna guardan logs durante 30 dias. Es su politica; yo no la he auditado por mi cuenta.
&lt;/Accordion&gt;

## Que hay de nuevo

La lista ya no es la del lanzamiento. Lo ultimo en llegar son GPT 5.6 Luna (el tier barato de OpenAI) y Qwen3.8 Max, que se suman a Grok 4.5, Kimi K3, Qwen 3.7, MiniMax M3 y Hy3. Algunos modelos viejos salieron. Los limites de $12 / $30 / $60 se mantienen; lo que cambia es cuanto rinde cada modelo dentro de esos topes.

&lt;Accordion label=&quot;¿Han añadido nuevos modelos recientemente?&quot; group=&quot;faq&quot;&gt;
Si. GPT 5.6 Luna y Qwen3.8 Max son las ultimas incorporaciones, junto a Grok 4.5 y Kimi K3 con menos uso incluido. Lo que no rinde para agentes de codigo no se queda. Mira `/models` o la [doc oficial de Go](https://opencode.ai/docs/go/) para la lista del dia.
&lt;/Accordion&gt;

## Mi opinion despues de tres semanas

Si ya tienes claves baratas y solo usas un modelo, Go es opcional. Comodo, no cambia la vida. Para mi el gancho es la simplicidad: una factura, una clave, y funciona en todos los agentes que ya uso.

Si todavia andas copiando cinco API keys, empieza con el primer mes a $5. Dejo Grok 4.5, GPT 5.6 Luna y Kimi K3 para lo dificil, MiniMax M3 o GLM-5.2 para sesiones normales, y DeepSeek Flash o MiMo cuando solo quiero volumen.

&lt;Button text=&quot;Obtén $5 en Creditos Gratis&quot; link=&quot;https://go.bitdoze.com/opencode-go&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

## Articulos relacionados

- [TinyFish: Busqueda Web Gratuita para Agentes de Codificacion](/tinyfish-ai-agents-web-search/) — busqueda y fetching web gratuito
- [Crear tu Propio Agente IA con Mastra](/build-ai-agent-mastra/) — guia completa usando OpenCode Go con Mastra
- [Guia de Configuracion de Pi Agent](/pi-coding-agent-setup-guide/) — instalar y configurar Pi
- [Guia de Configuracion de OpenCode](/es/guia-configuracion-opencode/) — instalacion completa paso a paso
- [Mejores Modelos Baratos para Agentes de Codificacion IA](/es/mejores-modelos-baratos-hermes-agent/) — precios y benchmarks</content:encoded><category>ai</category><category>ai-tools</category><category>opencode</category><category>llm</category></item><item><title>Clona Tu Voz con Fish Audio en 2 Minutos (Guía 2026)</title><link>https://www.bitdoze.com/es/fish-audio-clonar-voz/</link><guid isPermaLink="true">https://www.bitdoze.com/es/fish-audio-clonar-voz/</guid><description>Clona tu voz con 15 segundos de audio en el plan gratis de Fish Audio. Paso a paso con tips de grabación, etiquetas de emoción y errores que arruinaron mi primer intento.</description><pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import fishAudioInterface from &quot;@assets/images/26/07/fish-audio-inerface.webp&quot;;
import fishAudioClone from &quot;@assets/images/26/07/fish-audio-clone-voice.webp&quot;;

Clono mi voz en Fish Audio para YouTube. Del primer sample limpio al clon usable: unos dos minutos. El primer intento salio fatal porque grabe con el ventilador del techo encendido. Aqui va el camino que funciono y lo que reharia.

&lt;Button text=&quot;Prueba Fish Audio Gratis&quot; link=&quot;https://go.bitdoze.com/fish-audio&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

## Lo que necesitas

- Una cuenta de Fish Audio (el nivel gratuito funciona)
- 10-15 segundos de audio claro de ti hablando
- Una habitacion silenciosa (el ruido de fondo perjudica la calidad)
- Un microfono decente (el de tu laptop funciona, un USB es mejor)

&lt;Notice type=&quot;info&quot; title=&quot;Antes de empezar&quot;&gt;
La clonacion de voz de Fish Audio es gratuita en el nivel gratuito. No necesitas un plan de pago para clonar tu voz. El clon puede hablar en 83 idiomas una vez creado.
&lt;/Notice&gt;

## Paso 1: Graba tu muestra de voz

Graba leyendo un parrafo claramente durante unos 15 segundos. Esto es lo que yo use:

&gt; &quot;El rapido zorro marron salta sobre el perro perezoso. Estoy grabando esta muestra para crear un clon de voz que pueda usar para mis proyectos de video. Hablar de forma natural y clara ayuda a la IA a capturar las caracteristicas de mi voz.&quot;

### Consejos de grabacion

**Mantenlo limpio.** Graba en una habitacion silenciosa. Cierra ventanas, apaga ventiladores, silencia tu telefono. El ruido de fondo se hornea en el clon y hace que suene peor.

**Habla naturalmente.** No leas en monotono o intentes sonar como un presentador de noticias. Habla como normalmente lo harias en una conversacion. El clon coincidira con tu cadencia natural, asi que dale tu voz real.

**Usa un buen microfono si tienes uno.** Un microfono condensador USB como el Blue Yeti o Audio-Technica AT2020 produce resultados mas limpios que un microfono de laptop. Dicho esto, probe con el microfono de mi laptop y el clon todavia era util.

**Apunta a 15 segundos.** Fish Audio necesita al menos 10 segundos, pero 15 segundos dan al modelo mas material con el que trabajar. No grabes durante cinco minutos pensando que mas es mejor. No lo es. Muestras cortas y limpias producen clones mejores.

**Evita leer listas o numeros.** Los parrafos de texto natural funcionan mejor. Las listas y numeros tienen una prosodia inusual que puede confundir al modelo.

## Paso 2: Sube a Fish Audio

1. Ve a [Fish Audio](https://go.bitdoze.com/fish-audio) e inicia sesion
2. Haz clic en **Voice** en la barra lateral izquierda
3. Haz clic en **Create Voice** o el boton **+**
4. Sube tu archivo de audio (MP3, WAV o M4A)
5. Agrega un nombre para tu voz (yo use &quot;Mi Voz&quot;)
6. Agrega una descripcion (opcional, pero te ayuda a encontrarla despues)
7. Haz clic en **Create**

La subida y el procesamiento toman unos 30 segundos a 2 minutos. Fish Audio procesa el audio, extrae las caracteristicas de tu voz y construye un modelo a partir de el.

&lt;figure&gt;
&lt;img src=&quot;../../assets/images/26/07/fish-audio-clone-voice.webp&quot; alt=&quot;Voz clonada en Fish Audio mostrando forma de onda y configuracion de idioma&quot; /&gt;
&lt;figcaption&gt;Voz clonada en Fish Audio con forma de onda y ajustes de idioma&lt;/figcaption&gt;
&lt;/figure&gt;

## Paso 3: Prueba tu clon

Una vez que el clon esta listo, ve a la pagina de generacion TTS:

1. Selecciona tu voz clonada del menu desplegable de voces
2. Escribe una oracion de prueba (algo diferente a tu grabacion)
3. Haz clic en **Generate**
4. Escucha la salida

Prueba con diferentes tipos de texto:

- Una oracion normal para verificar la calidad basica
- Una pregunta para verificar el aumento de entonacion
- Un parrafo mas largo para verificar la consistencia
- Algo emocional para verificar el rango

Si el clon suena mal, vuelve a grabar con una muestra mas limpia e intenta de nuevo. La calidad del audio de entrada es el factor mas importante en que tan bueno suena el clon.

&lt;figure&gt;
&lt;img src=&quot;../../assets/images/26/07/fish-audio-inerface.webp&quot; alt=&quot;Interfaz TTS de Fish Audio con controles de emocion y seleccion de modelo&quot; /&gt;
&lt;figcaption&gt;Interfaz TTS de Fish Audio con controles de emocion y modelo S2.1 Pro&lt;/figcaption&gt;
&lt;/figure&gt;

## Paso 4: Agrega etiquetas de emocion

Las etiquetas de emocion de Fish Audio es lo que la distingue de otras herramientas TTS. Una vez que tu clon funciona, puedes agregar etiquetas para controlar la entonacion:

- `(excited)` — alegre, energetico
- `(sad)` — mas lento, tono mas bajo
- `(whisper)` — silencioso, intimo
- `(angry)` — agresivo, fuerte
- `(serious)` — firme, medido
- `(happy)` — calido, positivo

Coloca la etiqueta al inicio de la seccion que quieres afectar:

```
(excited) Acabo de conseguir la promocion en la que he estado trabajando durante dos anos!
(serious) Pero necesito pensar cuidadosamente si aceptarla.
(whisper) Entre tu y yo, ya tome mi decision.
```

### Consejos para etiquetas de emocion

**No te excedas.** Una o dos etiquetas por parrafo es suficiente. Demasiadas etiquetas hacen que la salida suene antinatural.

**Coloca etiquetas en puntos de ruptura natural.** Ponlas al inicio de oraciones o clausulas, no en medio de una palabra.

**Experimenta.** El mismo texto con diferentes etiquetas produce resultados muy diferentes. Prueba algunas variaciones antes de comprometerte con una version final.

**Combina con puntuacion.** Los signos de exclamacion, puntos suspensivos y signos de interrogacion funcionan con las etiquetas de emocion para dar forma a la entonacion.

## Paso 5: Genera y descarga

Una vez que estas satisfecho con la salida:

1. Haz clic en **Generate** para crear el audio
2. Escucha la salida completa
3. Si suena bien, haz clic en **Download** para guardar como MP3 o WAV
4. Importa en tu editor de video, herramienta de podcast o proyecto

Puedes generar tantas variaciones como quieras. Prueba diferentes redacciones, diferentes colocaciones de etiquetas y diferentes textos hasta que la salida coincida con lo que necesitas.

&lt;Accordion label=&quot;Cuanto tiempo toma la clonacion de voz?&quot; group=&quot;faq&quot;&gt;
Unos 30 segundos a 2 minutos. Fish Audio procesa tu muestra de audio, extrae las caracteristicas de la voz y construye un modelo. El tiempo real depende de la carga del servidor, pero generalmente es menos de dos minutos.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Puedo clonar la voz de otra persona?&quot; group=&quot;faq&quot;&gt;
Solo deberias clonar voces para las que tengas permiso. Fish Audio requiere que tengas el derecho de clonar cualquier voz que subas. Clonar la voz de otra persona sin consentimiento puede violar sus terminos de servicio y podria tener consecuencias legales.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Puedo mejorar mi clon despues de crearlo?&quot; group=&quot;faq&quot;&gt;
Puedes crear un nuevo clon con una muestra de audio mejor. No hay forma de &quot;ajustar&quot; un clon existente. Si la calidad no es lo que quieres, graba una muestra mas limpia y crea una nueva voz.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;En cuantos idiomas puede hablar mi clon?&quot; group=&quot;faq&quot;&gt;
Fish Audio soporta 83 idiomas. Tu clon puede generar habla en cualquiera de estos idiomas. La calidad varia segun el idioma. Los idiomas principales como ingles, chino, japones, frances y aleman funcionan bien. Los idiomas menos comunes pueden tener algunos artefactos de acento.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Estan seguros mis datos de voz?&quot; group=&quot;faq&quot;&gt;
Fish Audio usa cifrado estandar para datos de voz. No reclaman derechos perpetuos sobre tu voz (a diferencia de algunos competidores). Dicho esto, lee los terminos de servicio antes de subir audio sensible. Para uso comercial, los planes de pago incluyen licencias adecuadas.
&lt;/Accordion&gt;

## Errores comunes

**Grabar en una habitacion ruidosa.** El ruido de fondo, el eco y la reverberacion de la habitacion se capturan en el clon. Graba en la habitacion mas silenciosa que puedas encontrar.

**Hablar demasiado lento o de forma antinatural.** Si lees como un robot, tu clon sonara como un robot. Habla como normalmente hablarias.

**Usar demasiadas etiquetas de emocion.** Dos o tres etiquetas por parrafo esta bien. Diez etiquetas por parrafo hace que la salida suene entrecortada y antinatural.

**No probar lo suficiente.** Genera varias variaciones con diferente texto antes de decidir si el clon es bueno o malo. Una mala salida no significa que el clon este roto.

**Esperar perfeccion.** La clonacion de voz IA es buena, no perfecta. El clon sonara como tu en un buen dia, no exactamente como tu en cada situacion. Para la mayoria de los propositos de creacion de contenido, eso es suficientemente bueno.

## Lo que haria diferente

Si empezara de nuevo, yo:

1. Grabaria en una habitacion tratada o closet (menos eco)
2. Usaria mi microfono USB en lugar del de la laptop
3. Grabaria algunas muestras diferentes y probaria cada una antes de elegir la mejor
4. Empezaria sin etiquetas de emocion y las agregaria gradualmente

El clon que tengo ahora funciona bien para mis videos de YouTube. Mi esposa no pudo notar la diferencia en una prueba ciega, lo cual es suficientemente bueno para mi. Pero el primer intento no fue genial porque grabe en una habitacion con un ventilador de techo funcionando. La entrada limpia importa.

&lt;Button text=&quot;Clona Tu Voz Gratis&quot; link=&quot;https://go.bitdoze.com/fish-audio&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Articulos relacionados&quot;&gt;
- [Reseña Fish Audio 2026](/es/resena-fish-audio/) — precios, API gratis, lo bueno y lo malo
- [Fish Audio vs ElevenLabs](/es/fish-audio-vs-elevenlabs/) — si vienes de ElevenLabs
- [Fish Audio vs MiniMax](/es/fish-audio-vs-minimax/) — otra alternativa de voz IA
&lt;/Notice&gt;</content:encoded><category>ai</category><category>fish-audio</category><category>voice-cloning</category><category>text-to-speech</category></item><item><title>Fish Audio vs ElevenLabs 2026: Cambié y Ahorré $84 al Año</title><link>https://www.bitdoze.com/es/fish-audio-vs-elevenlabs/</link><guid isPermaLink="true">https://www.bitdoze.com/es/fish-audio-vs-elevenlabs/</guid><description>Seis meses en ElevenLabs, luego Fish Audio. Cara a cara en calidad en inglés, clonación (15s vs 60s), 83 idiomas, etiquetas de emoción y coste real al mes.</description><pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import fishAudioInterface from &quot;@assets/images/26/07/fish-audio-inerface.webp&quot;;
import fishAudioClone from &quot;@assets/images/26/07/fish-audio-clone-voice.webp&quot;;

Use ElevenLabs unos seis meses antes de pasar a Fish Audio. No porque ElevenLabs sea malo. No lo es. El multilingue no bastaba para mi mezcla ingles/rumano y la factura se ponia absurda para un creador solo. Despues de pasar los mismos guiones por las dos, esto es lo que cambio de verdad.

## La version corta

Fish Audio gana en multilingue, etiquetas de emocion, velocidad de clonacion y precio. ElevenLabs sigue ganando en fidelidad pura de ingles y tiene una UI mas limpia. Si solo publicas en ingles y la calidad lo es todo, quedate en ElevenLabs. El resto deberia probar Fish primero.

| Caracteristica | Fish Audio | ElevenLabs |
|----------------|-----------|------------|
| Audio necesario para clonar | 10-15 segundos | 60+ segundos |
| Plan mas barato con clonacion | Gratis / $15/mes | $22/mes |
| Idiomas | 83 | 32 |
| Control de emociones | Basado en etiquetas | Limitado |
| Voces de la comunidad | 2 millones+ | Gran biblioteca |
| Calidad de voz en ingles | Muy buena | La mejor |
| Precio de API | $15/millon caracteres | ~$30/millon caracteres |
| Nivel gratuito | Si | Si (sin clonacion) |
| Derechos de datos de voz | Estandar | Reclamo de licencia perpetua |

&lt;Button text=&quot;Prueba Fish Audio Gratis&quot; link=&quot;https://go.bitdoze.com/fish-audio&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

## Calidad de voz

Esta es la comparacion que mas importa, y esta cerca.

El modelo S2.1 Pro de Fish Audio maneja bien el ingles. La salida suena limpia, el ritmo es natural y las etiquetas de emocion te permiten cambiar el tono dentro de una generacion. Lo uso para narracion de YouTube y la calidad es lo suficientemente buena como para que la mayoria de los espectadores no noten que es IA.

ElevenLabs produce las voces en ingles mas realistas que he escuchado de cualquier herramienta TTS. La entonacion, los micro-pausas, la forma en que maneja el enfasis, suena humano. Si produces narracion solo en ingles para un podcast o audiolibro, ElevenLabs es el referente.

Donde Fish Audio se adelanta es en el control de emociones. Puedes etiquetar secciones de texto con emociones como `(excited)`, `(whisper)` o `(serious)` y la voz cambia la entonacion a mitad de oracion. ElevenLabs no tiene esto. Obtienes un tono por generacion, y si quieres cambiar la emocion, generas clips separados y los editas juntos.

Para contenido multilingue, Fish Audio gana claramente. Probe ambos con narracion mixta en ingles y rumano. Fish Audio manejo las transiciones de idioma limpiamente. ElevenLabs tenia sangrado de acento notable al cambiar entre idiomas, y la pronunciacion rumana estaba desviada en varias palabras.

&lt;figure&gt;
&lt;img src=&quot;../../assets/images/26/07/fish-audio-inerface.webp&quot; alt=&quot;Interfaz TTS de Fish Audio con controles de emocion y seleccion de modelo&quot; /&gt;
&lt;figcaption&gt;Interfaz TTS de Fish Audio con controles de emocion y modelo S2.1 Pro&lt;/figcaption&gt;
&lt;/figure&gt;

## Clonacion de voz

Fish Audio clona mas rapido y con menos audio. Necesitas unos 10 a 15 segundos de habla clara. Subelo, espera unos dos minutos y tienes un clon funcional. La calidad es buena. Use mi propio clon durante una semana de narracion de YouTube y nadie noto que era IA.

ElevenLabs tiene dos modos de clonacion. La Clonacion de Voz Instantanea necesita unos 10 segundos de audio pero solo esta disponible en planes de pago desde $6/mes (Starter), y la calidad es decente pero no excelente. La Clonacion de Voz Profesional necesita 30+ minutos de audio y produce resultados casi perfectos, pero solo esta en el plan Creator de $22/mes y superior.

Aqui esta la diferencia practica: si quieres clonar tu voz rapido y barato, Fish Audio lo hace en menos de dos minutos gratis. Si quieres la maxima fidelidad de clon y estas dispuesto a grabar 30 minutos de audio y pagar $22/mes, la Clonacion de Voz Profesional de ElevenLabs es mejor.

&lt;figure&gt;
&lt;img src=&quot;../../assets/images/26/07/fish-audio-clone-voice.webp&quot; alt=&quot;Voz clonada en Fish Audio mostrando forma de onda y configuracion de idioma&quot; /&gt;
&lt;figcaption&gt;Mi voz clonada en Fish Audio con forma de onda y ajustes de idioma&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;Notice type=&quot;warning&quot; title=&quot;Propiedad de datos de voz&quot;&gt;
ElevenLabs actualizo sus terminos de servicio para reclamar derechos &quot;perpetuos, irrevocables y libres de regalias&quot; sobre los datos de voz subidos a su plataforma. Fish Audio no tiene esta clausula. Si estas clonando tu propia voz para uso comercial, lee los terminos de ambas plataformas cuidadosamente.
&lt;/Notice&gt;

## Precios

Aqui es donde la brecha se hace mas amplia.

### Precios de ElevenLabs

| Plan | Precio | Caracteres/mes | Clonacion |
|------|--------|---------------|-----------|
| Gratis | $0 | 10,000 | No |
| Starter | $6/mes | 30,000 | Solo instantanea |
| Creator | $22/mes | 121,000 | Profesional |
| Pro | $99/mes | 600,000 | Profesional |
| Scale | $299/mes | 1,800,000 | Profesional |

Los creditos no se acumulan. Si no los usas, desaparecen. El plan Creator a $22/mes es el minimo para Clonacion de Voz Profesional.

### Precios de Fish Audio

| Plan | Precio | Lo que obtienes |
|------|--------|-----------------|
| Gratis | $0 | Generaciones limitadas, voces de la comunidad, API gratuita S2.1 Pro |
| Starter | ~$15/mes | Mas generaciones, clonacion de voz, procesamiento prioritario |
| Pro | ~$45/mes | Limites mas altos, derechos comerciales |
| Enterprise | Personalizado | SLA, soporte dedicado |

Fish Audio usa precios de pago por uso. Sin expiracion de creditos. La API gratuita S2.1 Pro da a los desarrolladores la misma calidad de modelo que el nivel de pago sin limite rigido de uso.

Para un creador que produce unas 2 horas de audio al mes, la comparacion de costos funciona asi:

- **Plan Creator de ElevenLabs**: $22/mes por 121,000 caracteres
- **Plan Starter de Fish Audio**: ~$15/mes con salida similar o mejor

Eso son unos $84 de ahorro al ano. A lo largo de unos anos, se acumula.

&lt;Button text=&quot;Empieza con Fish Audio&quot; link=&quot;https://go.bitdoze.com/fish-audio&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

## Soporte de idiomas

Fish Audio soporta 83 idiomas. ElevenLabs soporta 32.

El numero crudo no es toda la historia. Lo que importa es que tan bien cada plataforma maneja los idiomas que realmente necesitas. Para idiomas principales como ingles, frances, aleman, espanol y japones, ambas son solidas. Para idiomas menos comunes, Fish Audio generalmente tiene mejor cobertura y pronunciacion mas natural.

Yo creo contenido en ingles y rumano. Fish Audio maneja ambos bien. El rumano de ElevenLabs es utilizable pero tiene problemas notables con ciertos sonidos de vocales y patrones de acentuacion. Si creas contenido en idiomas asiaticos, Fish Audio tiene mejor soporte para chino, japones y coreano.

## Emocion y expresion

Fish Audio usa un sistema de etiquetas. Insertas etiquetas como `(excited)`, `(sad)`, `(whisper)` o `(angry)` directamente en tu texto, y la voz cambia la entonacion para esa seccion. Toma algo de practica para hacerlo bien, pero los resultados valen la pena.

ElevenLabs tiene voces &quot;emocionales&quot; en su biblioteca, pero no puedes controlar la emocion dentro de una sola generacion. Eliges una voz que suena de cierta manera y se mantiene asi durante todo el proceso. Si tu script cambia de serio a alegre, necesitas generar clips separados y unirlos en postproduccion.

Para trabajo de narracion donde los cambios de tono importan, como videos de YouTube, audiolibros o contenido de capacitacion, el sistema de etiquetas de Fish Audio es una ventaja significativa.

## API y experiencia de desarrollador

Ambas plataformas tienen APIs solidas. ElevenLabs ha existido por mas tiempo y tiene mas integraciones de terceros. Su documentacion es completa y los SDK de JavaScript/Python son maduros.

La API de Fish Audio es limpia y directa. Los endpoints REST estan bien documentados y el SDK de Python funciona como se espera. La API gratuita S2.1 Pro es un fuerte atractivo para desarrolladores que prueban TTS en sus aplicaciones. Configura `model: &quot;s2.1-pro-free&quot;` y estas ejecutando el mismo modelo que los clientes de pago.

Una diferencia practica: el precio de la API de Fish Audio a $15/millon caracteres es aproximadamente la mitad de los ~$30/millon caracteres de ElevenLabs. Para aplicaciones de alto volumen, esta diferencia es significativa.

## Quien deberia elegir Fish Audio

**Creadores multilingues.** Si produces contenido en mas de un idioma, Fish Audio lo maneja mejor y mas barato.

**Creadores con presupuesto limitado.** El nivel gratuito es funcional, la clonacion de voz es gratuita y los planes de pago son mas baratos que ElevenLabs.

**Desarrolladores.** La API gratuita S2.1 Pro y el menor precio por caracter hacen de Fish Audio la mejor opcion para construir TTS en productos.

**Cualquiera que quiera control de emociones.** El sistema de etiquetas te permite dar forma a la entonacion dentro de una sola generacion, algo que ElevenLabs no puede hacer.

## Quien deberia elegir ElevenLabs

**Creadores solo en ingles que quieren la mejor calidad.** Las voces en ingles de ElevenLabs aun son el referente. Si solo produces contenido en ingles y la calidad es tu prioridad, vale el costo adicional.

**Equipos que necesitan una interfaz pulida.** ElevenLabs tiene una aplicacion web mas refinada y mejores integraciones de terceros.

**Usuarios empresariales.** ElevenLabs tiene mas funciones empresariales, incluyendo cumplimiento HIPAA y SSO personalizado.

## Mi recomendacion

Cambi de ElevenLabs a Fish Audio y no voy a volver. La calidad de voz es lo suficientemente cercana para mi contenido de YouTube, el soporte multilingue es mejor, y estoy ahorrando unos $84/ano. Las etiquetas de emocion tomaron algo de acostumbrarme, pero ahora no puedo imaginar volver al TTS plano.

Si solo produces contenido en ingles y el dinero no es una preocupacion, ElevenLabs aun es la mejor herramienta. Para todos los demas, Fish Audio es el mejor valor.

&lt;Button text=&quot;Prueba Fish Audio Gratis&quot; link=&quot;https://go.bitdoze.com/fish-audio&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

&lt;Accordion label=&quot;Puedo usar Fish Audio y ElevenLabs juntos?&quot; group=&quot;faq&quot;&gt;
Si. Algunos creadores usan ElevenLabs para su voz de narracion en ingles principal y Fish Audio para versiones multilingues o personajes secundarios. Ambas plataformas exportan archivos de audio estandar, asi que mezclarlos en postproduccion es sencillo.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Cual tiene mejor clonacion de voz?&quot; group=&quot;faq&quot;&gt;
Fish Audio clona mas rapido (10-15 segundos vs 60+ segundos) y es mas barato (gratis vs $22/mes para clonacion profesional). La Clonacion de Voz Profesional de ElevenLabs produce resultados de fidelidad ligeramente mas alta pero requiere 30+ minutos de audio. Para clones rapidos, Fish Audio es la mejor opcion. Para clones de calidad de estudio, ElevenLabs tiene una ventaja.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Vale ElevenLabs el costo adicional?&quot; group=&quot;faq&quot;&gt;
Para contenido solo en ingles donde la maxima calidad de voz importa, si. Para contenido multilingue, proyectos con presupuesto limitado o desarrolladores que construyen TTS en aplicaciones, no. Fish Audio te da mas por menos en esos casos.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Que hay de la propiedad de datos de voz?&quot; group=&quot;faq&quot;&gt;
ElevenLabs reclama derechos perpetuos, irrevocables y libres de regalias sobre los datos de voz en sus terminos de servicio. Fish Audio no tiene esta clausula. Si estas clonando tu propia voz, esta diferencia importa. Lee los terminos de ambas plataformas antes de subir audio sensible.
&lt;/Accordion&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Articulos relacionados&quot;&gt;
- [Reseña Fish Audio 2026](/es/resena-fish-audio/) — reseña completa, API gratis, pros y contras
- [Clona tu voz con Fish Audio](/es/fish-audio-clonar-voz/) — guia de 2 minutos con capturas
- [Fish Audio vs MiniMax](/es/fish-audio-vs-minimax/) — si tambien estas mirando MiniMax
&lt;/Notice&gt;</content:encoded><category>ai</category><category>fish-audio</category><category>elevenlabs</category><category>voice-cloning</category></item><item><title>Fish Audio vs MiniMax 2026: ¿Qué Herramienta de Voz IA Gana?</title><link>https://www.bitdoze.com/es/fish-audio-vs-minimax/</link><guid isPermaLink="true">https://www.bitdoze.com/es/fish-audio-vs-minimax/</guid><description>Fish Audio vs MiniMax cara a cara: clonación, calidad en inglés y chino, precios y API gratis. Pasé los mismos guiones de YouTube por las dos.</description><pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import fishAudioInterface from &quot;@assets/images/26/07/fish-audio-inerface.webp&quot;;
import fishAudioClone from &quot;@assets/images/26/07/fish-audio-clone-voice.webp&quot;;

Clono mi voz en Fish Audio con un clip corto y la uso en YouTube. Cuando Speech-02 de MiniMax empezo a liderar el ranking de Artificial Analysis Speech Arena, pase los mismos guiones por las dos herramientas para ver si merecia cambiar. Spoiler: me quede casi siempre en Fish Audio, pero MiniMax gana en un par de casos concretos.

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre este articulo&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Comparacion de calidad de voz y naturalidad&lt;/li&gt;
&lt;li&gt;Clonacion de voz: velocidad y fidelidad&lt;/li&gt;
&lt;li&gt;Controles de emocion y expresion&lt;/li&gt;
&lt;li&gt;Soporte de idiomas y rendimiento multilingue&lt;/li&gt;
&lt;li&gt;API de desarrollador y precios&lt;/li&gt;
&lt;li&gt;Que plataforma se adapta a diferentes casos de uso&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

## La version corta

Fish Audio gana en biblioteca, precio para desarrolladores, API gratis y cobertura de idiomas (83). MiniMax suena muy bien, sobre todo en chino, y sus etiquetas de risa y respiracion van bien para narracion expresiva. Si eres multilingue o vas ajustado de presupuesto, empieza con Fish. Si el trabajo es calidad en chino, prueba MiniMax primero.

| Caracteristica | Fish Audio | MiniMax |
|----------------|-----------|---------|
| Modelo mas reciente | S2.1 Pro | Speech 2.8 (HD/Turbo) |
| Idiomas | 83 | 40+ |
| Audio necesario para clonar | 10-15 segundos | 10 segundos |
| Voces de la comunidad | 2 millones+ | 300+ |
| Control de emociones | Etiquetas como (excited), (whisper) | Etiquetas + efectos de sonido (laughs), (breath) |
| Precio de API | $15/millon caracteres | $60-100/millon caracteres |
| Nivel gratuito | Si, con API gratuita S2.1 Pro | Uso gratuito limitado |
| Mejor para | Multilingue, presupuesto limitado | Contenido chino, narracion expresiva |

&lt;Button text=&quot;Prueba Fish Audio Gratis&quot; link=&quot;https://go.bitdoze.com/fish-audio&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

## Calidad de voz

Ambas plataformas producen habla que suena natural. Las diferencias son sutiles pero reales.

El modelo S2.1 Pro de Fish Audio maneja bien el ingles. La salida suena limpia, el ritmo es natural y las etiquetas de emocion te permiten cambiar el tono dentro de una generacion. Lo uso para narracion de YouTube y la calidad es suficientemente buena para que la mayoria de los espectadores no noten que es IA.

El Speech 2.8 HD de MiniMax se enfoca en narracion de alta fidelidad. Segun Artificial Analysis, su modelo Speech-02 esta en o cerca de la cima del leaderboard de calidad de voz. La variante HD produce salida pulida adecuada para audiolibros y voiceovers profesionales. La variante Turbo intercambia algo de calidad por velocidad, lo cual es mejor para aplicaciones en tiempo real.

Para contenido en chino, MiniMax tiene una ventaja. Sus modelos fueron construidos con fuerte soporte de idioma chino desde el principio, y la pronunciacion y ritmo en mandarin son mas naturales que la mayoria de los competidores. Si creas contenido en chino, MiniMax vale la pena probarlo primero.

Para ingles y otros idiomas europeos, la diferencia es menos clara. Ambos producen buenos resultados. Recomendaria generar el mismo script en ambas plataformas y comparar la salida lado a lado.

## Clonacion de voz

Ambas plataformas clonan voces a partir de muestras de audio cortas. El proceso es similar, pero los detalles difieren.

**Fish Audio** necesita de 10 a 15 segundos de audio claro. Subelo, espera unos dos minutos y el clon esta listo. La calidad es buena para creacion de contenido. Mi clon suena lo suficientemente cercano a mi voz real como para que los oyentes no noten la diferencia en un video de YouTube.

**MiniMax** necesita unos 10 segundos de audio. El proceso de clonacion toma unos 30 segundos. Su anuncio de Speech 2.5 afirma que el modelo puede &quot;replicar perfectamente el acento unico, estilo de habla y tono emocional de una persona&quot; a traves de idiomas. La clonacion interlinguistica preserva las caracteristicas vocales al cambiar entre idiomas, lo cual es util para contenido multilingue.

Una diferencia practica: MiniMax elimina las voces clonadas no usadas despues de 7 dias. Si clonas una voz y no la usas, necesitaras volver a clonar. Fish Audio mantiene tus clones mientras tu cuenta este activa.

&lt;figure&gt;
&lt;img src=&quot;../../assets/images/26/07/fish-audio-clone-voice.webp&quot; alt=&quot;Voz clonada en Fish Audio mostrando forma de onda y configuracion de idioma&quot; /&gt;
&lt;figcaption&gt;Mi voz clonada en Fish Audio con forma de onda y ajustes de idioma&lt;/figcaption&gt;
&lt;/figure&gt;

## Controles de emocion y expresion

Aqui es donde las plataformas divergen de formas interesantes.

**Fish Audio** usa etiquetas de emocion. Insertas etiquetas como `(excited)`, `(sad)`, `(whisper)` o `(angry)` en tu texto, y la voz cambia la entonacion para esa seccion. El sistema es simple y efectivo. Puedes cambiar el tono dentro de una sola generacion sin editar multiples clips juntos.

**MiniMax** tiene etiquetas de emocion tambien, pero tambien soporta etiquetas de sonido y etiquetas de interjeccion. Estas agregan expresiones vocales no verbales:

- `(laughs)` — agrega risa
- `(chuckle)` — risa sutil
- `(breath)` — respiracion audible
- `(sighs)` — un suspiro
- `(clear-throat)` — aclarar la garganta
- `(gasp)` — sorpresa con intake de aire

Estas etiquetas de sonido hacen que la narracion se sienta mas humana, especialmente en contenido narrativo o dirigido a personajes. Una respiracion entre parrafos o una risita despues de una linea casual cambia como el oyente experimenta el audio.

MiniMax tambien soporta marcadores de pausa con sintaxis `&lt;#x#&gt;`, donde x es la duracion de la pausa en segundos. Esto te da control preciso sobre el ritmo sin depender de trucos de puntuacion.

Si necesitas control de emociones basico, ambas plataformas funcionan. Si necesitas control granular sobre sonidos no verbales y pausas, MiniMax tiene mas opciones.

&lt;figure&gt;
&lt;img src=&quot;../../assets/images/26/07/fish-audio-inerface.webp&quot; alt=&quot;Interfaz TTS de Fish Audio con controles de emocion y seleccion de modelo&quot; /&gt;
&lt;figcaption&gt;Interfaz TTS de Fish Audio con controles de emocion y modelo S2.1 Pro&lt;/figcaption&gt;
&lt;/figure&gt;

## Soporte de idiomas

Fish Audio soporta 83 idiomas. MiniMax soporta 40+.

Los numeros crudos favorecen a Fish Audio, pero lo que importa es que tan bien cada plataforma maneja los idiomas que realmente necesitas. Esto es lo que encontre:

**Para ingles:** Ambos son solidos. Fish Audio y MiniMax producen salida en ingles limpia y natural.

**Para chino:** MiniMax es mas fuerte. Sus modelos fueron optimizados para chino desde el principio, y la salida en mandarin suena mas natural.

**Para idiomas europeos:** Ambos manejan bien los idiomas principales (frances, aleman, espanol, portugues, italiano). Fish Audio tiene mejor cobertura para idiomas europeos menos comunes.

**Para idiomas asiaticos:** MiniMax tiene fuerte soporte para japones, coreano y vietnamita. Fish Audio cubre estos tambien, pero el soporte de idiomas asiaticos de MiniMax esta mas pulido.

Si creas contenido en uno o dos idiomas principales, ambas plataformas funcionan. Si necesitas amplia cobertura de idiomas a traves de muchos idiomas diferentes, Fish Audio tiene la ventaja.

## API de desarrollador

Ambas plataformas ofrecen APIs REST para texto a voz. La experiencia de desarrollador difiere en algunas formas.

### API de Fish Audio

- Endpoints REST y SDK de Python
- API gratuita S2.1 Pro (configura `model: &quot;s2.1-pro-free&quot;`)
- Precio: $15/millon caracteres
- Documentacion en docs.fish.audio
- Soporta streaming y generacion por lotes

### API de MiniMax

- API REST en `/v1/t2a_v2`
- Dos variantes de modelo: `speech-2.8-hd` y `speech-2.8-turbo`
- Precio: $60/millon caracteres (Turbo), $100/millon caracteres (HD)
- Disponible directamente a traves de MiniMax o proveedores terceros (Replicate, fal.ai)
- Soporta streaming, marcas de tiempo de subtitulos y flujos de trabajo asincronos de formato largo

La diferencia de precios es significativa. Fish Audio a $15/millon caracteres es aproximadamente 4x mas barato que MiniMax Turbo a $60/millon caracteres, y aproximadamente 7x mas barato que MiniMax HD a $100/millon caracteres.

Para desarrolladores que construyen TTS en productos, la API gratuita S2.1 Pro de Fish Audio es dificil de superar. Obtienes la misma calidad de modelo que los clientes de pago sin limite rigido de uso. MiniMax no tiene un nivel gratuito equivalente para sus mejores modelos.

&lt;Notice type=&quot;info&quot; title=&quot;Consejo para desarrolladores&quot;&gt;
Si estas construyendo un producto que necesita TTS, empieza con la API gratuita S2.1 Pro de Fish Audio. Configura `model: &quot;s2.1-pro-free&quot;` en tu llamada API. La misma calidad que el nivel de pago, sin costo.
&lt;/Notice&gt;

## Comparacion de precios

| | Fish Audio | MiniMax |
|---|-----------|---------|
| Nivel gratuito | Si, con API gratuita S2.1 Pro | Limitado |
| Planes de pago | Desde ~$15/mes | Pago por uso |
| Precio de API | $15/millon caracteres | $60-100/millon caracteres |
| Costo de clonacion de voz | Gratis | $3 por voz (via Replicate) |
| Expiracion de creditos | Ninguna | Varia segun proveedor |

Fish Audio es mas barato en todos los niveles. El nivel gratuito es mas generoso, los planes de pago cuestan menos y el precio de la API es significativamente mas bajo. Para aplicaciones de alto volumen, la diferencia de costo se acumula rapido.

Los precios de MiniMax a traves de proveedores terceros como Replicate pueden diferir de sus precios directos. Verifica las tarifas del proveedor especifico antes de comprometerte.

&lt;Button text=&quot;Empieza con Fish Audio&quot; link=&quot;https://go.bitdoze.com/fish-audio&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

## Biblioteca de voces

Fish Audio tiene mas de 2 millones de voces subidas por la comunidad. MiniMax tiene unas 300 voces oficiales.

La diferencia de tamanio importa cuando buscas un estilo de voz especifico. Con 2 millones de voces, puedes buscar por idioma, acento, edad, genero y caso de uso. Encontrar algo cercano a lo que necesitas sin clonar es realista en Fish Audio.

Las 300 voces de MiniMax estan curadas y generalmente son de alta calidad. Es menos probable que encuentres una voz mediocre en su biblioteca. Pero la seleccion es mas pequena, asi que podrias no encontrar el estilo exacto que quieres.

Si prefieres navegar y elegir de una gran seleccion, Fish Audio gana. Si prefieres un conjunto mas pequeno y curado de voces confiables, MiniMax funciona.

## Quien deberia elegir Fish Audio

**Creadores con presupuesto limitado.** El nivel gratuito y los precios bajos de API hacen de Fish Audio la opcion mas barata en cada nivel de uso.

**Creadores multilingues.** 83 idiomas vs 40+ significa mejor cobertura para idiomas menos comunes.

**Desarrolladores.** La API gratuita S2.1 Pro y el menor precio por caracter hacen de Fish Audio la mejor opcion para construir TTS en productos.

**Cualquiera que quiera una gran biblioteca de voces.** Dos millones de voces significa que probablemente encontraras lo que necesitas sin clonar.

## Quien deberia elegir MiniMax

**Creadores de contenido en chino.** El soporte de idioma chino de MiniMax es lo mejor que he escuchado.

**Creadores que necesitan etiquetas de sonido.** La capacidad de agregar risas, respiraciones, suspiros y otros sonidos no verbales hace que la narracion se sienta mas humana.

**Equipos ya en el ecosistema MiniMax.** Si usas otros productos de IA de MiniMax (video, musica), quedarte en el mismo ecosistema simplifica las cosas.

**Usuarios que necesitan control preciso de pausas.** La sintaxis `&lt;#x#&gt;` te da control exacto sobre el ritmo.

## Mi opinion

Yo uso Fish Audio y me quedo con el. El precio es mejor, la cobertura de idiomas es mas amplia y la API gratuita es util para mis proyectos paralelos. MiniMax es una plataforma fuerte, especialmente para contenido en chino y narracion expresiva, pero la diferencia de precio de 4-7x en uso de API es dificil de justificar para mi caso de uso.

Si estuviera creando contenido en chino o necesitara el sistema de etiquetas de sonido para narracion dirigida a personajes, consideraria seriamente MiniMax. Para todo lo demas, Fish Audio es el mejor valor.

&lt;Accordion label=&quot;Es MiniMax Speech-02 mejor que Fish Audio S2.1 Pro?&quot; group=&quot;faq&quot;&gt;
Depende del caso de uso. MiniMax Speech-02 ocupa posiciones altas en benchmarks de calidad de voz y tiene fuerte soporte de idioma chino. Fish Audio S2.1 Pro tiene cobertura de idiomas mas amplia, precios mas bajos y un nivel gratuito de API. Para la mayoria de los usuarios, la diferencia en calidad de voz en ingles es lo suficientemente pequena como para que los precios y el soporte de idiomas importen mas.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Puedo usar ambas plataformas juntas?&quot; group=&quot;faq&quot;&gt;
Si. Ambas exportan archivos de audio estandar (MP3, WAV). Puedes generar diferentes secciones de un proyecto en diferentes plataformas y combinarlas en tu editor. Algunos creadores usan MiniMax para narracion en chino y Fish Audio para ingles.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Cual tiene mejor clonacion de voz?&quot; group=&quot;faq&quot;&gt;
Ambos clonan de unos 10-15 segundos de audio con calidad similar. MiniMax afirma mejor clonacion interlinguistica (preservando tu voz a traves de idiomas). Fish Audio mantiene los clones permanentemente mientras MiniMax elimina clones no usados despues de 7 dias. Prueba ambos con tu propia voz para ver cual suena mejor para ti.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Es gratis MiniMax?&quot; group=&quot;faq&quot;&gt;
MiniMax tiene uso gratuito limitado. Sus mejores modelos (Speech 2.8 HD) cuestan $100/millon caracteres. A traves de proveedores terceros como Replicate, puedes obtener pequenos niveles gratuitos. La API gratuita S2.1 Pro de Fish Audio es mas generosa para desarrolladores.
&lt;/Accordion&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Articulos relacionados&quot;&gt;
- [Reseña Fish Audio 2026](/es/resena-fish-audio/) — reseña completa, precios y API gratis
- [Fish Audio vs ElevenLabs](/es/fish-audio-vs-elevenlabs/) — la comparacion que mas gente busca primero
- [Clona tu voz con Fish Audio](/es/fish-audio-clonar-voz/) — guia de 2 minutos con capturas
&lt;/Notice&gt;</content:encoded><category>ai</category><category>fish-audio</category><category>minimax</category><category>voice-cloning</category></item><item><title>Reseña Bunny.net 2026: Opinión Honesta Después de 1 Año (Más Barato que Cloudflare)</title><link>https://www.bitdoze.com/es/resena-bunny-net/</link><guid isPermaLink="true">https://www.bitdoze.com/es/resena-bunny-net/</guid><description>CDN + Stream de Bunny.net en producción durante 12 meses. $0.01/GB de ancho de banda, transcodificación de vídeo gratis, 119 PoPs. Lo que me gusta y lo que me molesta.</description><pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate><content:encoded>import { Image } from &quot;astro:assets&quot;;
import bunnyMainInterface from &quot;@assets/images/26/04/bunny-main-interface.webp&quot;;
import bunnyCdnInterface from &quot;@assets/images/26/04/bunny-cdn-interface.webp&quot;;
import bunnyStreamInterface from &quot;@assets/images/26/04/bunny-stream-interface.webp&quot;;
import bunnyStorageInterface from &quot;@assets/images/26/04/bunny-storage-interface.webp&quot;;

import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

Llevo mas de un año con sitios en [Bunny.net](https://go.bitdoze.com/bunny): CDN delante de WordPress y Stream para video. Antes estaba en el plan gratis de Cloudflare y probe CloudFront un rato. El pricing de CloudFront me sacaba de quicio (ancho de banda y cobro por request?), y el gratis de Cloudflare es dificil de batir en precio, pero queria control real de cache y video sin pegar tres proveedores con cinta.

Bunny arreglo la mayoria de eso. No todo. Tras doce meses en produccion, esto es lo que sigue valiendo y lo que todavia me molesta.

&lt;Notice type=&quot;success&quot; title=&quot;Prueba Bunny.net gratis durante 14 días&quot;&gt;
  Puedes probar todo lo que menciono en esta reseña tú mismo. [Regístrate en Bunny.net](https://go.bitdoze.com/bunny) sin necesidad de tarjeta de crédito y obtén una prueba gratuita completa de 14 días.
&lt;/Notice&gt;

## Qué es realmente Bunny.net

Bunny.net empezó como un CDN (antes se llamaban BunnyCDN) pero desde entonces ha crecido hasta convertirse en una plataforma edge completa. Piénsalo como una alternativa más pequeña y barata al stack de AWS de CloudFront + S3 + MediaConvert, excepto que todo vive bajo un mismo panel de control y los precios no requieren una hoja de cálculo para descifrarlos.

&lt;Image src={bunnyMainInterface} alt=&quot;Panel principal de Bunny.net&quot; /&gt;

La empresa tiene sede en Eslovenia, lo que significa que están bajo las leyes de protección de datos de la UE. Operan más de 119 ubicaciones edge en 82 países, con una capacidad de red superior a 250 Tbps.

Esto es todo lo que ofrecen actualmente:

| Servicio | Qué hace | Precio inicial |
|---------|-------------|----------------|
| **Bunny CDN** | Red de distribución de contenido | $0.01/GB (EU/NA) |
| **Bunny Stream** | Alojamiento y streaming de vídeo | $0.01/GB almacenamiento + entrega |
| **Bunny Storage** | Almacenamiento de objetos replicado en el edge | $0.01/GB (región única) |
| **Bunny Optimizer** | Optimización de imágenes/CSS/JS | $9.50/mes por sitio |
| **Bunny DNS** | DNS programable con monitoreo | Gratis (incluido) |
| **Bunny Shield** | WAF, DDoS, protección contra bots | Nivel gratuito disponible |
| **Bunny Database** | Base de datos global compatible con SQLite | $0.30/mil millones de lecturas |
| **Edge Scripting** | Funciones serverless (Deno) | $0.20/millón de peticiones |
| **Magic Containers** | Despliegue global de Docker | Pago por uso de CPU/memoria |

Son muchos productos para una empresa que empezó siendo &quot;solo un CDN.&quot; Voy a repasar los que más importan.

## Bunny CDN: el producto principal

Esto es por lo que la mayoría se registra, y sigue siendo la parte más fuerte de la plataforma.

&lt;Image src={bunnyCdnInterface} alt=&quot;Interfaz de pull zone de Bunny CDN&quot; /&gt;

### Cómo funciona

Creas una &quot;pull zone&quot; que se coloca delante de tu servidor de origen. Bunny cachea tu contenido en sus más de 119 PoPs y lo sirve desde la ubicación más cercana a tu visitante. La configuración lleva unos 5 minutos: apuntas tu pull zone a tu origen, actualizas tu DNS y ya estás funcionando.

### Mi experiencia con WordPress

He estado usando Bunny CDN con mis sitios WordPress y la configuración fue muy sencilla. Tienen un plugin de WordPress que configura todo automáticamente, pero incluso sin él, simplemente cambias las URLs de tus assets al hostname de la pull zone de Bunny y listo.

Lo que noté de inmediato fue la caída en la carga del servidor de origen. Con Perma-Cache activado, mi VPS pasó de gestionar cada petición a prácticamente no ver tráfico. Los tiempos de carga mejoraron en general, especialmente para visitantes fuera de Europa, donde está mi servidor. El TTFB (Time to First Byte) para assets cacheados bajó a menos de 30ms en la mayoría de ubicaciones.

Si estás usando WordPress en un VPS económico (Hetzner, DigitalOcean, etc.), añadir Bunny CDN delante es probablemente la mejor mejora de rendimiento que puedes hacer por el dinero.

### Rendimiento

Bunny afirma una latencia global media de 24ms, y según mis pruebas, se cumple para tráfico de EU y NA. Asia-Pacífico varía más, entre 30-60ms dependiendo del país. Para ponerlo en contexto, Cloudflare normalmente alcanza 15-20ms (tienen más PoPs), pero Bunny es más rápido que CloudFront en la mayoría de regiones fuera de EE.UU.

La verdadera ventaja en rendimiento es su función Perma-Cache. El caché CDN normal expira y necesita volver a consultar al origen. Perma-Cache almacena tu contenido en el almacenamiento edge de forma permanente, así que obtienes una tasa de acierto de caché cercana al 100%. Tu servidor de origen apenas se toca.

### Características principales

&lt;ListCheck&gt;
- **Perma-Cache**: Almacenamiento edge permanente para una tasa de acierto de caché cercana al 100%
- **SmartEdge routing**: Envía a los usuarios al PoP más rápido, no solo al más cercano
- **Edge Rules**: Lógica personalizada para redirecciones, cabeceras, caché y seguridad
- **Analíticas en tiempo real**: Monitoreo de tráfico con acceso a logs en bruto
- **Purga instantánea**: La limpieza de caché se propaga en segundos
- **SSL gratuito**: Certificados Let&apos;s Encrypt con un clic
- **Protección DDoS**: Incluida en todos los planes, sin cargo extra
- **SafeHop**: Tiempos de espera de origen configurables y lógica de reintento automático
&lt;/ListCheck&gt;

### Precios del CDN

Bunny tiene dos niveles de red:

&lt;Tabs&gt;
&lt;Tab name=&quot;Red estándar (119 PoPs)&quot;&gt;

Precios por región con cobertura global completa:

| Región | Precio por GB |
|--------|-------------|
| Europa y Norteamérica | $0.01 |
| Asia y Oceanía | $0.03 |
| Sudamérica | $0.045 |
| Oriente Medio y África | $0.06 |

Ideal para: La mayoría de sitios web, apps y proyectos que necesitan alcance mundial.

&lt;/Tab&gt;
&lt;Tab name=&quot;Red de volumen (10 PoPs)&quot;&gt;

Tarifa plana única para proyectos con mucho ancho de banda:

| Nivel | Precio por GB |
|------|-------------|
| Primeros 500 TB | $0.005 |
| 500 TB - 1 PB | $0.004 |
| 1 PB - 2 PB | $0.002 |
| 2 PB+ | Contáctalos |

Ideal para: Plataformas de vídeo, distribución de archivos grandes, cualquier cosa con mucho consumo de ancho de banda.

&lt;/Tab&gt;
&lt;/Tabs&gt;

Para ponerlo en perspectiva: 5 TB de tráfico EU/NA en Bunny cuesta unos $50. Lo mismo en CloudFront sale $425+. En Fastly, más de $600. No es un error tipográfico.

## Bunny Stream: vídeo sin complicaciones

&lt;Image src={bunnyStreamInterface} alt=&quot;Interfaz de la biblioteca de vídeos de Bunny Stream&quot; /&gt;

Este es el otro servicio que uso regularmente, y es la razón principal por la que ya no estoy en Vimeo ni en Wistia. Escribí una [guía paso a paso para configurar Bunny Stream](/es/guia-bunny-stream/) si quieres el tutorial práctico. Aquí va el resumen.

### Lo que obtienes

Subes un vídeo, Bunny lo transcodifica en múltiples resoluciones (de 240p a 1080p, con 4K disponible), lo replica en sus regiones de almacenamiento y lo sirve a través del CDN con un reproductor integrado. El reproductor es personalizable (colores, controles, idioma) o puedes obtener las URLs del stream HLS en bruto y usar tu propio reproductor.

### Por qué dejé Vimeo

Coste. Los precios de Vimeo para alojamiento de vídeo se disparan rápido una vez que tienes más de un puñado de vídeos. Bunny Stream cobra por almacenamiento ($0.01/GB) y ancho de banda de entrega. La transcodificación es gratis. El reproductor es gratis. DRM está incluido si lo necesitas.

Con 300 GB de vídeo almacenado con 50 GB de tráfico mensual y un solo punto de replicación, estás pagando aproximadamente $3.50/mes. Intenta conseguir ese número en cualquier plataforma de vídeo tradicional.

### Características de Stream

&lt;ListCheck&gt;
- **Transcodificación gratuita**: Sin costes de codificación por minuto
- **Bitrate adaptativo**: Streaming HLS en múltiples niveles de calidad
- **Reproductor personalizable**: Control total sobre colores, controles, marcas de agua, idioma
- **Protección DRM**: Nivel empresarial, bloquea descargas y grabación de pantalla
- **Autenticación por token**: Controla exactamente quién puede ver tus vídeos
- **Protección contra hotlinking**: Bloquea la inserción no autorizada en otros sitios
- **Subidas reanudables TUS**: Subidas grandes que sobreviven a cortes de conexión
- **Diseño API-first**: API REST completa con soporte de webhooks
- **Etiquetado de contenido con IA**: Categorización automática del contenido de vídeo
&lt;/ListCheck&gt;

### Stream vs proveedores cloud tradicionales

| Característica | Bunny Stream | Tradicional (AWS, etc.) |
|---------|-------------|----------------------|
| Codificación | Gratis | ~$0.02/minuto |
| Almacenamiento | $0.01/GB | ~$0.02/GB |
| Entrega CDN | Desde $0.005/GB | Desde $0.085/GB |
| Reproductor | Incluido gratis | Requiere integración externa |
| DRM | Incluido | Cargos adicionales |
| Complejidad de configuración | Minutos | Horas a días |

## Otros servicios de Bunny.net

No uso todos estos a diario, pero aquí va lo que hace cada uno y para quién está pensado.

&lt;Accordion label=&quot;Bunny Storage&quot; group=&quot;services&quot;&gt;

&lt;Image src={bunnyStorageInterface} alt=&quot;Interfaz del administrador de archivos de Bunny Storage&quot; /&gt;

Almacenamiento de objetos replicado en el edge en hasta 15 regiones. Piensa en S3, pero tus archivos se copian automáticamente a múltiples ubicaciones en todo el mundo.

**Precios:**

| Configuración | Precio por GB |
|-------|-------------|
| Región única | $0.01 |
| Dos regiones | $0.02 |
| Tres regiones | $0.025 |
| Cada adicional | +$0.005 |

Sin cargos de egress al entregar a través de Bunny CDN, sin cargos por peticiones API, y replicación global automática. Bunny reporta una latencia global media de 41ms comparada con 131ms para AWS S3 en EU Central. La arquitectura distribuida hace que ese número sea verosímil.

Subida vía FTP, SFTP, HTTP API o su administrador de archivos web.

Preparé una [comparación detallada de Bunny Storage vs S3 vs Backblaze B2](/es/bunny-storage-vs-s3-vs-backblaze/) si quieres ver cómo se comparan los precios con otros proveedores.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Bunny Optimizer&quot; group=&quot;services&quot;&gt;

Optimización automática de imágenes, conversión a WebP/AVIF, y minificación de CSS/JS. Conectas tu sitio y se encarga de todo al vuelo sin plugins ni cambios en el código.

**Precio:** $9.50/mes por sitio web. Tarifa plana, peticiones y optimizaciones ilimitadas.

**Qué hace:**

- Comprime imágenes hasta un 80%
- Convierte a WebP según el soporte del navegador
- Redimensiona imágenes según el tipo de dispositivo
- Minifica CSS y JavaScript

Si ya ejecutas optimización de imágenes en tu proceso de build (como yo hago con Astro), esto puede ser redundante. Pero para sitios WordPress o cualquiera que sirva imágenes sin optimizar, la mejora en Core Web Vitals es notable.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Bunny DNS&quot; group=&quot;services&quot;&gt;

Alojamiento DNS gratuito con algunos extras que no ves en otros sitios: registros DNS programables (escribe lógica de enrutamiento real en código), monitoreo de salud integrado para registros A, balanceo de carga y enrutamiento geográfico. Funciona en más de 36 PoPs anycast con latencia inferior a 20ms en la mayoría de regiones.

Si ya estás en Cloudflare DNS, no hay una razón fuerte para migrar a menos que necesites la capacidad de scripting. Pero si ya usas Bunny CDN, tener DNS en el mismo panel simplifica las cosas.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Bunny Shield (WAF y seguridad)&quot; group=&quot;services&quot;&gt;

Su producto de seguridad, lanzado hace relativamente poco. Combina un WAF, mitigación DDoS, detección de bots, limitación de tasa y escaneo de subidas bajo un mismo techo.

**Niveles de precios:**

| Característica | Básico (Gratis) | Avanzado ($9.50/mes) | Business ($99/mes) |
|---------|-------------|--------------------|--------------------|
| Reglas WAF | 71 integradas | 255 integradas | 255 integradas |
| Reglas WAF personalizadas | No | 10 | 25 |
| Protección DDoS | Sí | Sí | Sí |
| Mitigación de bots | Básica | Avanzada | Avanzada |
| Limitación de tasa | No | Sí | Sí |

El nivel gratuito cubre reglas WAF básicas y protección DDoS, lo cual ya es más de lo que muchos CDNs incluyen por defecto. Los niveles de pago añaden reglas personalizadas, detección de bots más inteligente y limitación de tasa por IP o ruta.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Edge Scripting&quot; group=&quot;services&quot;&gt;

Funciones serverless ejecutándose en Deno, desplegadas en las más de 119 ubicaciones edge. Escribe TypeScript o JavaScript, sube a GitHub y se publica globalmente en menos de 100ms.

**Precio:** $0.20 por millón de peticiones + $0.02 por 1,000 segundos de tiempo de CPU.

Esto compite con Cloudflare Workers y Deno Deploy. El runtime de Deno te da soporte de TypeScript de serie, y como Deno es open source, evitas el vendor lock-in.

Útil para: pruebas A/B, middleware de autenticación, API gateways, enrutamiento de peticiones, o cualquier situación donde el cómputo necesite estar cerca del usuario.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Bunny Database&quot; group=&quot;services&quot;&gt;

Un servicio de base de datos compatible con SQLite que se ejecuta en la red global de Bunny. Creas una base de datos, eliges una región primaria y opcionalmente añades réplicas de lectura en cualquiera de sus 41 regiones disponibles. Cuando nadie la está consultando, la base de datos se apaga y solo pagas por almacenamiento.

Usa el protocolo libSQL, así que te conectas con SDKs oficiales para TypeScript/JavaScript, Go, Rust y .NET. También hay una API HTTP simple si tu stack aún no tiene SDK.

**Precios (pago por uso):**

| Recurso | Coste |
|----------|------|
| Lecturas | $0.30 por mil millones de filas |
| Escrituras | $0.30 por millón de filas |
| Almacenamiento | $0.10 por GB por región activa/mes |

Actualmente en vista previa pública y gratuito de usar mientras dure.

**Ideal para:** Catálogos de productos, perfiles de usuario, configuración de apps, filtrado de metadatos y otras cargas de trabajo con muchas lecturas. Como está construido sobre SQLite, no es la mejor opción para sistemas transaccionales con muchas escrituras, pero para la mayoría de aplicaciones web la relación lectura/escritura lo hace una buena opción.

Se combina bien con Edge Scripting o Magic Containers para un stack edge-native completo.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Magic Containers&quot; group=&quot;services&quot;&gt;

Su producto más nuevo y ambicioso. Despliega contenedores Docker en más de 40 ubicaciones globales con autoescalado impulsado por IA. Sin configuración de Kubernetes, sin sobrecarga de DevOps.

Cada contenedor se ejecuta completamente aislado (no apretados en procesos compartidos como algunas plataformas serverless), con almacenamiento NVMe y CPUs de alta frecuencia. Su argumento es un ahorro de 5x sobre el hosting edge tradicional, porque la IA solo aprovisiona recursos donde y cuando el tráfico realmente lo demanda.

**Casos de uso:** Servicios API, servidores de juegos, clusters DNS, apps en tiempo real, procesamiento de imágenes, microservicios.

Todavía bastante nuevo, así que está menos probado en batalla que algo como AWS ECS o Fly.io. Pero el concepto es sólido, especialmente si actualmente estás cuidando despliegues Docker en instancias VPS.

&lt;/Accordion&gt;

## El panel de control y la experiencia de desarrollador

Algo a lo que siempre vuelvo es lo limpio que es el panel de control. Después de pasar tiempo en la Consola de AWS (que parece diseñada para confundir) y la interfaz cada vez más recargada de Cloudflare, el panel de Bunny se siente directo.

Todo está donde esperarías. Configuración de pull zones, analíticas, gestión de almacenamiento, bibliotecas de vídeo. Las analíticas en tiempo real realmente se actualizan en tiempo real, y el explorador de logs en bruto es genuinamente útil cuando estás depurando fallos de caché o comportamientos de enrutamiento extraños.

La API está bien documentada y es consistente entre servicios. Si estás automatizando despliegues o construyendo integraciones, no pasarás horas luchando con casos edge no documentados.

## Lo que me gusta

&lt;ListCheck&gt;
- **Transparencia en precios**: Sin tarifas ocultas, sin cobros por petición, sin facturas sorpresa
- **Mínimo mensual de $1**: Los proyectos pequeños prácticamente no cuestan nada
- **Prueba gratuita de 14 días**: Sin necesidad de tarjeta de crédito para empezar
- **Perma-Cache**: Tasa de acierto de caché cercana al 100% sin configuración complicada
- **Plataforma todo-en-uno**: CDN, almacenamiento, vídeo, base de datos, DNS y seguridad en un solo lugar
- **Calidad del soporte**: 5 minutos de media en primera respuesta, 3 horas de media en resolución, 24/7
- **Pago por uso**: Escala a cero cuando no lo necesitas
- **Empresa con sede en la UE**: Cumplimiento GDPR integrado, los datos se quedan donde tú quieras
- **Protección contra sobrecargos**: Establece límites de ancho de banda mensuales para evitar sustos en la factura
&lt;/ListCheck&gt;

## Lo que me molesta

&lt;ListCheck&gt;
- **Red más pequeña que Cloudflare**: 119 PoPs vs 300+, se nota en algunas regiones asiáticas
- **Sin nivel CDN gratuito**: El plan gratuito de Cloudflare es difícil de superar para proyectos de hobby
- **Precio del Optimizer por sitio**: $9.50/mes por sitio se acumula cuando gestionas varias propiedades
- **Magic Containers aún madurando**: Menos probado que AWS ECS o Fly.io para cargas de producción
- **Sin analítica web integrada**: Seguirás necesitando una herramienta de analítica separada
- **La UI de Shield necesita pulirse**: El editor de reglas WAF se siente básico junto al de Cloudflare
&lt;/ListCheck&gt;

## Bunny.net vs la competencia

Así se compara Bunny con los CDNs que probablemente estés considerando:

| Característica | Bunny.net | Cloudflare | CloudFront | Fastly |
|---------|-----------|-----------|------------|--------|
| Precio CDN (EU/NA) | $0.01/GB | Nivel gratis / $0.05/GB | $0.085/GB | $0.12/GB |
| Coste de 5 TB (EU/NA) | ~$50 | Gratis* / ~$250 | $425+ | $600+ |
| PoPs globales | 119 | 300+ | 450+ | 72 |
| Latencia global media | 24ms | ~15ms | ~27ms | ~29ms |
| Streaming de vídeo | Integrado | No | Servicio separado | No |
| Almacenamiento de objetos | Integrado | R2 | S3 (facturación separada) | No |
| Base de datos | Integrada (SQLite) | D1 | DynamoDB (separado) | No |
| SSL gratuito | Sí | Sí | Sí | Sí |
| Protección DDoS | Incluida | Incluida | AWS Shield | Incluida |
| Nivel gratuito | Prueba de 14 días | Sí (generoso) | Prueba de 12 meses | No |
| Coste mensual mínimo | $1 | $0 | ~$1 | $50 |

El nivel gratuito de Cloudflare es imbatible si lo único que necesitas es caché CDN básico. Pero cuando empiezas a añadir almacenamiento, alojamiento de vídeo y cómputo, la comparación de costes cambia rápido. La ventaja de Bunny es tener todo incluido con tarifas directas por GB.

&lt;Notice type=&quot;info&quot; title=&quot;Sobre esta comparación&quot;&gt;
  Los números de rendimiento provienen de las pruebas independientes de CDNPerf (marzo de 2025). Los precios son de la página pública de precios de cada proveedor. Tus resultados reales dependerán de la ubicación de tus visitantes y la configuración de tu servidor de origen.
&lt;/Notice&gt;

## Quién debería usar Bunny.net

**Buena opción para:**

- Sitios pequeños y medianos que necesitan funciones CDN más allá del nivel gratuito de Cloudflare
- Cualquiera que aloje contenido de vídeo (cursos, tutoriales, vídeos de marketing) y quiera escapar de los precios de Vimeo o Wistia
- Desarrolladores que quieren CDN + almacenamiento + cómputo en un solo panel
- Sitios WordPress que buscan integración CDN fácil y optimización de imágenes
- Empresas en la UE que se preocupan por la soberanía de datos

**Probablemente no sea la mejor opción para:**

- Proyectos de hobby con presupuesto cero (el plan gratuito de Cloudflare cubre eso)
- Grandes empresas con arquitecturas multi-cloud complejas (el ecosistema de AWS va mucho más profundo)
- Sitios que necesitan 300+ PoPs para latencia mínima en cada rincón del mundo

## Preguntas frecuentes

&lt;Accordion label=&quot;¿Es Bunny.net bueno para WordPress?&quot; group=&quot;faq&quot;&gt;

Por experiencia personal, sí. He estado usando Bunny CDN con WordPress y la diferencia en tiempos de carga fue obvia desde el primer día. Tienen un plugin de WordPress que gestiona la integración CDN automáticamente, y combinado con Bunny Optimizer ($9.50/mes) para compresión de imágenes y minificación de JS/CSS, es una de las configuraciones CDN más sencillas para WordPress. También puedes combinarlo con Varnish y Redis en tu servidor para un stack de caché completo. Toda la configuración me llevó unos 10 minutos.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Cómo se compara Bunny.net con Cloudflare?&quot; group=&quot;faq&quot;&gt;

Cloudflare tiene un mejor nivel gratuito y más ubicaciones edge. Bunny tiene ancho de banda de pago más barato, streaming de vídeo integrado y precios más simples una vez que superas el nivel gratuito. Si el plan gratuito de Cloudflare ya hace lo que necesitas, no hay razón urgente para cambiar. Si necesitas alojamiento de vídeo o precios de ancho de banda predecibles a escala, Bunny tiene más sentido económico.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo usar Bunny Stream para cursos online?&quot; group=&quot;faq&quot;&gt;

Para la mayoría de creadores de cursos, sí. Obtienes streaming con bitrate adaptativo, protección DRM (bloquea descargas y grabación de pantalla), autenticación por token y un reproductor personalizable. Lo principal que pierdes comparado con Vimeo son sus integraciones integradas con plataformas de cursos, pero si tienes tu propio LMS, la API de Bunny gestiona la inserción sin problemas.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Qué métodos de pago acepta Bunny.net?&quot; group=&quot;faq&quot;&gt;

Tarjetas de crédito (Visa, Mastercard, American Express), PayPal y criptomonedas. El mínimo mensual de $1 significa que puedes ejecutar proyectos pequeños sin comprometerte con mucho.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Funciona Bunny.net con generadores de sitios estáticos?&quot; group=&quot;faq&quot;&gt;

Sí, y funciona bien. Puedes desplegar tu sitio estático en Bunny Storage y servirlo a través de Bunny CDN para una configuración completamente alojada en el edge. Yo tengo mi sitio Astro así. Perma-Cache más almacenamiento edge significa que tu sitio carga desde el PoP más cercano cada vez, sin necesidad de servidor de origen.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Hay prueba gratuita?&quot; group=&quot;faq&quot;&gt;

14 días, sin necesidad de tarjeta de crédito, acceso completo a todas las funciones. Después de la prueba, el mínimo mensual de $1 entra en juego, que honestamente cubre la mayoría de proyectos pequeños sin ningún coste perceptible.

&lt;/Accordion&gt;

## Mi opinión después de usarlo en producción

Bunny.net ocupa un lugar que la mayoría de proveedores CDN ignoran. Es más barato que los grandes proveedores cloud por un margen amplio, más capaz que la mayoría de CDNs económicos, y la plataforma combinada (CDN + almacenamiento + vídeo + base de datos + DNS + seguridad) significa que no estás pegando con cinta cinco servicios separados.

Solo el streaming de vídeo me ahorró una cantidad significativa comparado con lo que pagaba por Vimeo. El rendimiento del CDN queda al alcance de proveedores que cobran 5-10x más. Y el equipo de soporte responde en minutos, lo cual todavía me sorprende después de años esperando 48 horas para que AWS acuse recibo de un ticket.

No es perfecto. La red es más pequeña que la de Cloudflare, el panel de seguridad podría mejorar, y los productos más nuevos como Magic Containers y Edge Scripting todavía están asentándose. Pero por el precio, no he encontrado una mejor combinación de funciones y rendimiento.

Si actualmente estás pagando de más por CloudFront, quieres alojamiento de vídeo sin los precios de Vimeo, o simplemente necesitas un CDN que no requiera una certificación de AWS para configurarlo, Bunny.net vale la pena probarlo.

&lt;Button text=&quot;Prueba Bunny.net Gratis 14 Días&quot; link=&quot;https://go.bitdoze.com/bunny&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;lg&quot; /&gt;</content:encoded><category>hosting</category><category>cdn</category><category>video-streaming</category></item><item><title>Reseña Fish Audio 2026: Clonación de Voz IA Gratis que Suena Humana</title><link>https://www.bitdoze.com/es/resena-fish-audio/</link><guid isPermaLink="true">https://www.bitdoze.com/es/resena-fish-audio/</guid><description>Cloné mi voz con un clip de 15 segundos y la uso en todos mis vídeos de YouTube. Reseña de Fish Audio: S2.1 Pro, etiquetas de emoción, 83 idiomas y el plan API gratis.</description><pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import fishAudioInterface from &quot;@assets/images/26/07/fish-audio-inerface.webp&quot;;
import fishAudioClone from &quot;@assets/images/26/07/fish-audio-clone-voice.webp&quot;;

Clono mi voz en Fish Audio con unos 15 segundos de audio y la uso en YouTube. Vine de ElevenLabs porque la factura subia y el multilingue no aguantaba mi mezcla de ingles y rumano. Llevo unas semanas y sigo aqui. Version honesta: que funciona, que falla y quien deberia saltarselo.

&lt;Button text=&quot;Prueba Fish Audio Gratis&quot; link=&quot;https://go.bitdoze.com/fish-audio&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

## Que es Fish Audio

Fish Audio es una plataforma de voz IA que hace texto a voz, clonacion de voz, voz a texto y otras tareas de audio. Puedes usarla a traves de su aplicacion web sin codigo, o a traves de su API REST y SDK de Python si quieres construir algo encima.

Lo que me llamo la atencion fue el control de emociones. La mayoria de herramientas TTS te dan una salida plana y monotona a menos que dediques tiempo a ajustar etiquetas SSML. Fish Audio te permite marcar secciones de texto con etiquetas de emocion como `(excited)` o `(whisper)` y la voz realmente cambia la entonacion. Suena como algo pequeno, pero hace una gran diferencia cuando estas narrando un video de 10 minutos y necesitas que el tono cambie.

Tienen mas de 2 millones de voces subidas por la comunidad en su biblioteca. Puedes elegir una voz que alguien mas creo, o clonar la tuya propia con unos 10 a 15 segundos de audio. La calidad de clonacion es solida. No perfecta, pero lo suficientemente buena como para que mi esposa no pudiera notar la diferencia en una prueba ciega entre mi voz real y el clon en una narracion de video.

&lt;figure&gt;
&lt;img src=&quot;../../assets/images/26/07/fish-audio-inerface.webp&quot; alt=&quot;Interfaz TTS de Fish Audio con controles de emocion y seleccion de modelo&quot; /&gt;
&lt;figcaption&gt;Interfaz TTS de Fish Audio con controles de emocion y modelo S2.1 Pro&lt;/figcaption&gt;
&lt;/figure&gt;

## Los modelos

Fish Audio ejecuta tres modelos TTS principales:

- **S2.1 Pro** — su modelo de produccion actual. Mejor calidad, menor latencia y mayor rendimiento que la generacion anterior. Este es el que uso.
- **S2 Pro** — la generacion anterior. Todavia solido, soporta multi-hablante y control de expresion en lenguaje natural.
- **S1** — el modelo mas antiguo que usa etiquetas de emocion entre parentesis como `(happy)` o `(sad)`.

Aqui esta la parte que me sorprendio: hicieron el S2.1 Pro gratuito para desarrolladores. El mismo modelo que alimenta su nivel de pago, acceso API gratuito, 83 idiomas, sin limite rigido de uso. Solo configuras `model: &quot;s2.1-pro-free&quot;` en tu llamada API y estas en S2.1 Pro. Si estas construyendo una aplicacion o probando TTS en un proyecto, esto es un buen trato.

&lt;Notice type=&quot;info&quot; title=&quot;API gratuita S2.1 Pro&quot;&gt;
Fish Audio hizo su mejor modelo gratuito para desarrolladores. Configura `model: &quot;s2.1-pro-free&quot;` y obtienes la misma calidad S2.1 Pro sin costo. Sin limite rigido de uso. Mismo endpoint que la version de pago.
&lt;/Notice&gt;

## Lo que Fish Audio realmente hace bien

**La clonacion de voz es rapida.** Grabe unos 15 segundos leyendo un parrafo, lo subi y tenia un clon funcional en menos de dos minutos. ElevenLabs requiere 60 segundos de audio para clonar, y el clon esta detras de su nivel de $22/mes. Fish Audio lo hace mas rapido y mas barato.

**El control de emociones funciona.** El sistema de etiquetas toma un poco de acostumbrarse. No puedes simplemente rociar `(excited)` por todas partes y esperar buenos resultados. Pero una vez que averiguas donde colocarlas, la salida suena notablemente mas natural que el TTS plano. Lo uso para narracion de YouTube y la diferencia es obvia.

**El soporte multilingue es fuerte.** Fish Audio maneja 83 idiomas. Lo probe con contenido mixto en ingles y rumano y la pronunciacion fue limpia. Sin sangrado de acento robotico que obtienes con algunas otras herramientas. Si creas contenido en multiples idiomas, aqui es donde Fish Audio se adelanta a ElevenLabs.

**La biblioteca de voces de la comunidad es grande.** Dos millones de voces significa que probablemente encontraras algo cercano a lo que necesitas sin clonar nada. Puedes buscar por idioma, estilo y caso de uso. Algunas de las voces de la comunidad son sorprendentemente buenas.

**El precio es razonable.** El nivel gratuito te da suficiente para probar correctamente. Los planes de pago comienzan en alrededor de $15/mes con precios de pago por uso. Sin tonterias de expiracion de creditos. Pagas por lo que usas.

&lt;Button text=&quot;Empieza con Fish Audio&quot; link=&quot;https://go.bitdoze.com/fish-audio&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

## Donde falla

**La aplicacion web puede ser lenta.** Generar audio largo a traves de la interfaz del navegador toma un tiempo. La API es mas rapida, pero si eres un usuario no tecnico que solo quiere pegar texto y obtener audio, la experiencia web podria ser mejor.

**Las etiquetas de emocion tienen una curva de aprendizaje.** La documentacion explica que etiquetas estan disponibles, pero no mucho sobre la estrategia de colocacion. Tuve que experimentar durante aproximadamente una hora antes de obtener resultados con los que estaba satisfecho. Algunos scripts de ejemplo con audio antes/despues ayudarian.

**La calidad de la biblioteca de voces varia.** Dos millones de voces es mucho, y no todas son buenas. La busqueda y el filtrado podrian mejorarse. Pase mas tiempo del que queria navegando por voces mediocres antes de encontrar las que me gustaron.

**No hay aplicacion de escritorio.** Es solo web o API. Si quieres una aplicacion nativa para trabajo sin conexion, estas fuera de suerte. Hay una aplicacion movil en Google Play, pero no la he probado.

## Fish Audio vs ElevenLabs

Esta es la comparacion que la mayoria de la gente quiere saber. He usado ambas, asi que asi es como se comparan:

| Caracteristica | Fish Audio | ElevenLabs |
|----------------|-----------|------------|
| Audio necesario para clonar | 10-15 segundos | 60+ segundos |
| Plan mas barato con clonacion | Gratis / $15/mes | $22/mes |
| Idiomas | 83 | 32 |
| Control de emociones | Basado en etiquetas | Limitado |
| Voces de la comunidad | 2 millones+ | Gran biblioteca |
| Calidad de voz en ingles | Muy buena | La mejor |
| Precio de API | $15/millon caracteres | ~$30/millon caracteres |
| Nivel gratuito | Si | Si (sin clonacion) |

ElevenLabs aun tiene la ventaja en calidad pura de voz en ingles. Si solo produces contenido en ingles y el presupuesto no es una preocupacion, ElevenLabs es dificil de superar. Pero para trabajo multilingue, control de emociones y costo, Fish Audio es la mejor opcion. La API gratuita S2.1 Pro la hace aun mas atractiva para desarrolladores.

Una cosa a tener en cuenta: ElevenLabs actualizo sus terminos de servicio para reclamar derechos perpetuos sobre los datos de voz. Fish Audio no tiene esa clausula. Si estas clonando tu propia voz, lee la letra pequena.

&lt;Notice type=&quot;warning&quot; title=&quot;Propiedad de datos de voz&quot;&gt;
Antes de clonar tu voz en cualquier plataforma, lee los terminos de servicio. ElevenLabs reclama derechos perpetuos, irrevocables y libres de regalias sobre los datos de voz. Los terminos de Fish Audio son mas estandar. Esto importa si usas tu propia voz comercialmente.
&lt;/Notice&gt;

## Precios

Fish Audio mantiene los precios simples:

| Plan | Precio | Lo que obtienes |
|------|--------|-----------------|
| Gratis | $0 | Generaciones limitadas, acceso a voces de la comunidad, API gratuita S2.1 Pro |
| Starter | ~$15/mes | Mas generaciones, clonacion de voz, procesamiento prioritario |
| Pro | ~$45/mes | Limites mas altos, derechos comerciales, procesamiento mas rapido |
| Enterprise | Personalizado | Soporte dedicado, SLA, integraciones personalizadas |

El nivel gratuito es suficiente para probar la clonacion de voz y generar algunos clips de audio. Si produces contenido regularmente, el plan Starter cubre la mayoria de los casos de uso. El modelo de pago por uso significa que no pierdes creditos al final del mes.

Para desarrolladores, la API gratuita S2.1 Pro es dificil de discutir. La misma calidad de modelo que el nivel de pago, sin limite rigido de uso. Si estas construyendo un producto que necesita TTS, empieza aqui.

## Como empezar

1. Ve a [Fish Audio](https://go.bitdoze.com/fish-audio) y crea una cuenta gratuita
2. Elige una voz de la biblioteca de la comunidad o clona la tuya
3. Pega tu texto, selecciona emociones donde sea necesario y genera
4. Descarga el audio o usa la API en tu proyecto

Para clonacion de voz, grabate leyendo un parrafo claramente durante unos 15 segundos. Sube el audio, espera un minuto o dos, y tu clon esta listo. Prueba con algunos scripts diferentes antes de comprometerte con un plan de pago.

Si quieres usar la API, su documentacion en [docs.fish.audio](https://docs.fish.audio/overview/capabilities) cubre el SDK de Python y los endpoints REST. El modelo `s2.1-pro-free` es un buen punto de partida.

&lt;figure&gt;
&lt;img src=&quot;../../assets/images/26/07/fish-audio-clone-voice.webp&quot; alt=&quot;Voz clonada en Fish Audio mostrando forma de onda y configuracion de idioma&quot; /&gt;
&lt;figcaption&gt;Mi voz clonada en Fish Audio con forma de onda y ajustes de idioma&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;Accordion label=&quot;Como funciona la clonacion de voz?&quot; group=&quot;faq&quot;&gt;
Fish Audio analiza un clip de audio corto (10-15 segundos) para capturar las caracteristicas de tu voz: tono, ritmo, estilo de habla y cadencia. Construye un modelo a partir de ese clip que luego puede generar habla en tu voz a partir de cualquier entrada de texto. El clon puede hablar en 83 idiomas, aunque la calidad varia segun el idioma.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Es gratis Fish Audio?&quot; group=&quot;faq&quot;&gt;
Si, hay un nivel gratuito con generaciones limitadas y acceso a voces de la comunidad. La API S2.1 Pro tambien es gratuita para desarrolladores sin limite rigido de uso. Los planes de pago comienzan en alrededor de $15/mes para limites mas altos y funciones de clonacion de voz.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Es seguro Fish Audio?&quot; group=&quot;faq&quot;&gt;
Fish Audio usa cifrado estandar y no reclama derechos perpetuos sobre tus datos de voz (a diferencia de algunos competidores). Dicho esto, lee los terminos de servicio antes de subir audio sensible. Para uso comercial de voces clonadas, los planes de pago incluyen licencias adecuadas.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Fish Audio vs ElevenLabs: cual deberia elegir?&quot; group=&quot;faq&quot;&gt;
Fish Audio es mejor para contenido multilingue, control de emociones y proyectos con presupuesto limitado. ElevenLabs tiene una ligera ventaja en calidad pura de voz en ingles. Si creas contenido en multiples idiomas o quieres la API gratuita, ve con Fish Audio. Si solo haces narracion en ingles y quieres la mejor calidad absoluta, ElevenLabs vale el costo adicional.
&lt;/Accordion&gt;

## Quien deberia usar Fish Audio

**Creadores de contenido** que producen videos, podcasts o audiolibros en multiples idiomas. Las etiquetas de emocion hacen que la narracion suene menos robotica, y el precio no arruinara tu presupuesto.

**Desarrolladores** que construyen aplicaciones que necesitan TTS. La API gratuita S2.1 Pro es generosa y la documentacion es decente. SDK de Python y endpoints REST estan disponibles.

**Equipos** que necesitan una voz de marca consistente en el contenido. Clona una voz, usala en todas partes. El soporte multilingue significa que puedes localizar sin contratar actores de voz para cada idioma.

**Cualquiera que pruebe herramientas de voz IA.** El nivel gratuito es suficiente para obtener una sensacion real de la plataforma antes de gastar dinero.

## Quien deberia buscar en otro lugar

Si solo produces contenido en ingles y quieres la maxima fidelidad de voz, ElevenLabs aun es el referente. Si necesitas una aplicacion de escritorio para trabajo sin conexion, Fish Audio no tiene una. Y si quieres una herramienta que funcione perfectamente desde el principio sin experimentacion, el sistema de etiquetas de emocion te frustrara al principio.

## Pensamientos finales

Vine por el clon mas barato y me quede por las etiquetas de emocion y la API gratis. La calidad del clon vale para YouTube. La web sigue mas lenta de lo que deberia, el buscador de voces es un lio y las etiquetas piden practica. Para mi caso, nada de eso gana al precio y al multilingue.

¿Quieres probarlo? Nivel gratis, 15 segundos de audio, unos dos minutos de espera. Si estas comparando alternativas, tambien escribi [Fish Audio vs ElevenLabs](/es/fish-audio-vs-elevenlabs/) y una [comparacion Fish Audio vs MiniMax](/es/fish-audio-vs-minimax/).

&lt;Button text=&quot;Prueba Fish Audio Gratis&quot; link=&quot;https://go.bitdoze.com/fish-audio&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Articulos relacionados&quot;&gt;
- [Fish Audio vs ElevenLabs 2026](/es/fish-audio-vs-elevenlabs/) — calidad, clonacion y coste real al año
- [Clona tu voz con Fish Audio en 2 minutos](/es/fish-audio-clonar-voz/) — guia con capturas y tips de grabacion
- [Fish Audio vs MiniMax](/es/fish-audio-vs-minimax/) — ingles vs chino, precios, API gratis
&lt;/Notice&gt;</content:encoded><category>ai</category><category>fish-audio</category><category>voice-cloning</category><category>text-to-speech</category></item><item><title>Reseña Zcode 2026: Agente de Código IA Gratis con Goal Mode (vs Cursor)</title><link>https://www.bitdoze.com/es/resena-zcode-ai/</link><guid isPermaLink="true">https://www.bitdoze.com/es/resena-zcode-ai/</guid><description>Reseña práctica de Zcode: agente de código IA gratis con Goal Mode para tareas largas, multi-modelo y Bot Channel en el móvil. Cómo se compara con Cursor.</description><pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate><content:encoded>import { Image } from &quot;astro:assets&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;
import YouTubeEmbed from &quot;@components/widgets/YouTubeEmbed.astro&quot;;

import zcodeInterface from &quot;@assets/images/26/02/zcode-interface.webp&quot;;
import zcodeModelsPanel from &quot;@assets/images/26/02/zcode-apikey-models-panel-en.webp&quot;;
import zcodePermissions from &quot;@assets/images/26/02/zcode-agent-permissions-en.webp&quot;;
import zcodeAgentsCall from &quot;@assets/images/26/02/zcode-agents-call-en.webp&quot;;
import zcodeSkillList from &quot;@assets/images/26/02/zcode-skill-list-en.webp&quot;;
import zcodeMcp from &quot;@assets/images/26/02/zcode-mcp.webp&quot;;
import zcodePluginDiscover from &quot;@assets/images/26/02/zcode-plugin-discover-en.webp&quot;;

Queria un agente de codigo de escritorio gratis que aguantara tareas largas sin que yo lo estuviera mirando. Eso es mas o menos Zcode: lo descargas, conectas un modelo y Goal Mode sigue hasta terminar. Bot Channels te ponen la misma sesion en el movil. Si no quieres vivir solo de GLM, admite otros modelos.

Zcode es la app oficial de [Z.AI](https://go.bitdoze.com/glm), la gente detras de GLM. Gestor de archivos, terminal, Git, preview del navegador y chat del agente en una ventana. Abres un proyecto, le dices que necesitas, y lee archivos, escribe codigo, lanza comandos y hace commits.

Lo uso desde el lanzamiento. Con v3.2 por fin se siente estable para trabajo real. Cursor y Windsurf siguen pareciendo editores con chat pegado. Zcode es al reves: el agente es el producto y la UI va detras. Z.AI lo llama &quot;Agentic Development Environment&quot;, lenguaje de marketing, pero describe bien como se comporta la app.

&lt;Notice type=&quot;info&quot; title=&quot;Claude Code No Es Necesario&quot;&gt;

Z Code **no** requiere una suscripción a Claude Code. Soporta modelos GLM, Anthropic API, OpenRouter, Moonshot (Kimi), y cualquier endpoint compatible con OpenAI/Anthropic. Claude Code es solo uno de varios proveedores opcionales.

&lt;/Notice&gt;

## Qué hace realmente Z Code


&lt;YouTubeEmbed
  url=&quot;https://www.youtube.com/embed/pzIARgn-bQw&quot;
  label=&quot;Z Code AI: Agentes Potentes, Soporte MCP y Programación Multi-Modelo&quot;
/&gt;


Esto es lo que obtienes al abrirlo. Interactúas mediante lenguaje natural, y el agente maneja operaciones de archivos, comandos de terminal y vistas previas del navegador.

&lt;Image src={zcodeInterface} alt=&quot;Interfaz principal de Z Code con gestor de archivos, terminal y chat del agente&quot; /&gt;

&lt;ListCheck&gt;

- **Chat con Agente**: Habla con modelos de IA con contexto completo del proyecto. Adjunta archivos, referencia carpetas, invoca agentes especializados.
- **ADE Integrado**: Gestor de archivos incorporado, terminal, panel de commits Git y vista previa de navegador en vivo. No necesitas cambiar entre aplicaciones.
- **Chat como Versionado**: Cada conversación crea checkpoints automáticos. Revierte el código al estado después de cualquier mensaje.
- **Soporte Multi-Modelo**: Usa GLM-5, Claude, GPT, Kimi K2.5, DeepSeek, o cualquier modelo compatible.
- **Ecosistema MCP**: Extiende las capacidades del agente con servicios Model Context Protocol para visión, búsqueda web y más.
- **Desarrollo Remoto**: Controla tu sesión de escritorio desde un dispositivo móvil mediante conexión por código QR.

&lt;/ListCheck&gt;

## Instalación

Z Code está disponible como aplicación de escritorio para macOS y Windows. No hay versión solo CLI, es una aplicación GUI completa.

### macOS

1. Descarga el DMG desde [zcode-ai.com](https://zcode-ai.com/docs/install)
2. Abre el archivo DMG
3. Arrastra **Z Code.app** a tu carpeta de **Applications**
4. Ejecútalo desde Launchpad

### Windows

1. Descarga el instalador desde [zcode-ai.com](https://zcode-ai.com/docs/install)
2. Doble clic en el instalador
3. Sigue el asistente de configuración

Después de la instalación, abre la aplicación e inicia sesión para empezar a usarla.

&lt;Button
  text=&quot;Descargar Z Code&quot;
  link=&quot;https://zcode-ai.com/docs/install&quot;
  size=&quot;lg&quot;
  color=&quot;blue&quot;
  variant=&quot;solid&quot;
/&gt;

## Configurando proveedores de IA

La configuración de proveedores es una de las mejores partes de Z Code. No estás bloqueado en un único servicio de IA. Puedes conectar múltiples proveedores y cambiar entre modelos por conversación.

### Proveedores soportados

&lt;Image src={zcodeModelsPanel} alt=&quot;Panel de configuración de modelos de Z Code con ajustes de proveedores de IA&quot; /&gt;

| Proveedor | Modelos Disponibles | Cómo Conectar |
| --- | --- | --- |
| **Z.AI / BigModel** | GLM-5, GLM-4.7, GLM-4.6, GLM-4.5 | Integrado, vincula tu cuenta Zhipu |
| **Anthropic** | Claude Sonnet 4.5, Opus 4.5, etc. | Introduce tu API key de Anthropic |
| **OpenRouter** | Más de 100 modelos | Establece la URL base a `https://openrouter.ai/api`, añade API key |
| **Moonshot** | Kimi K2.5, Kimi K2-Turbo | URL base: `https://api.moonshot.cn/anthropic` |
| **Personalizado** | Cualquier API compatible con OpenAI/Anthropic | Añade nombre del proveedor, URL base y API key |

### Pasos de configuración

Hay tres formas de añadir un proveedor:

1. **Mediante botón Connect**: Haz clic en &quot;Connect&quot; en la página de bienvenida para vincular tu cuenta Zhipu o establecer una API key de terceros.
2. **Mediante Selector de Modelo**: Haz clic en el nombre del modelo en el chat, luego &quot;Manage Models&quot; abajo.
3. **Mediante icono de Settings**: Haz clic en el engranaje de configuración en la esquina superior derecha para ir directamente al panel de Models.

&lt;Tabs&gt;
&lt;Tab name=&quot;Configurar OpenRouter&quot;&gt;

1. Ve a [openrouter.ai](https://openrouter.ai), crea una cuenta y genera una API key
2. En Z Code, ve a **Agents Settings &gt; Models**
3. Haz clic en **Add Provider**
4. Establece el nombre como &quot;OpenRouter&quot;
5. Establece la API Base URL a `https://openrouter.ai/api`
6. Introduce tu API key
7. Activa el toggle

&lt;/Tab&gt;
&lt;Tab name=&quot;Configurar Anthropic&quot;&gt;

1. Obtén una API key desde [console.anthropic.com](https://console.anthropic.com)
2. En Z Code, ve a **Agents Settings &gt; Models**
3. Selecciona &quot;Anthropic&quot; de la lista de proveedores
4. Activa el toggle
5. Introduce tu API key
6. Los modelos integrados como Claude Sonnet 4.5 y Opus 4.5 quedan disponibles

&lt;/Tab&gt;
&lt;Tab name=&quot;Configurar DeepSeek&quot;&gt;

1. Obtén una API key de DeepSeek
2. En Z Code, ve a **Agents Settings &gt; Models**
3. Haz clic en **Add Provider**
4. Establece el nombre como &quot;deepseek&quot;
5. Establece la Base URL a `https://api.deepseek.com/anthropic`
6. Introduce tu API key
7. Añade el nombre del modelo &quot;deepseek-chat&quot;

&lt;/Tab&gt;
&lt;/Tabs&gt;

&lt;Notice type=&quot;success&quot; title=&quot;Trae Tu Propio Modelo&quot;&gt;

Z Code funciona con cualquier servicio que hable el protocolo Anthropic u OpenAI. Incluso puedes apuntarlo a modelos desplegados localmente ejecutándose en tu propia máquina.

&lt;/Notice&gt;

## Modos de permisos

Cada vez que inicias un chat, eliges cuánta libertad tiene el agente. Z Code tiene cuatro modos de permisos, y puedes alternar entre ellos con **Shift + Tab**.

&lt;Image src={zcodePermissions} alt=&quot;Selector de modos de permisos de Z Code mostrando Always Ask, Accept Edits, Plan Mode y Bypass&quot; /&gt;

| Modo | Qué Sucede | Ideal Para |
| --- | --- | --- |
| **Always Ask** | El agente pregunta antes de cada acción (ediciones de archivos, comandos, red) | Tareas críticas que necesitan control total |
| **Accept Edits** | El agente edita archivos libremente pero pregunta antes de ejecutar comandos o acceder a la red | Generación de código confiable, acceso controlado al sistema |
| **Plan Mode** | El agente crea primero un plan de acción, espera tu aprobación antes de ejecutar | Tareas complejas donde quieres revisar el enfoque |
| **Bypass Permissions** | El agente hace todo automáticamente sin confirmación | Solo entornos aislados, mayor riesgo |

&lt;Notice type=&quot;warning&quot; title=&quot;Usa Bypass con Cuidado&quot;&gt;

El modo Bypass permite al agente ejecutar cualquier comando sin preguntar. Úsalo solo en entornos sandbox o desechables donde un error no te cueste nada.

&lt;/Notice&gt;

## Agentes especializados

Z Code incluye agentes integrados a los que el agente principal puede delegar trabajo. Cada uno se ejecuta en su propia ventana de contexto con prompts y permisos de herramientas independientes.

### Agentes integrados

| Agente | Qué Hace |
| --- | --- |
| **bug-analyzer** | Análisis profundo del flujo de ejecución de código e investigación de causas raíz |
| **code-reviewer** | Detección de vulnerabilidades de seguridad, problemas de rendimiento, verificaciones de fiabilidad en producción |
| **dev-planner** | Desglosa requisitos en tareas con análisis de dependencias |
| **story-generator** | Crea historias de usuario con criterios de aceptación a partir de git diffs o PRDs |
| **ui-sketcher** | Transforma requisitos de funcionalidad en diseños de interfaz ASCII |

### Invocar agentes

Escribe `@` en el chat para ver la lista de agentes, o referencia uno directamente:

&lt;Image src={zcodeAgentsCall} alt=&quot;Invocación de agente en Z Code con mención @ mostrando agentes disponibles&quot; /&gt;

```
@code-reviewer Revisa el módulo de pagos
@bug-analyzer Investiga este error
@dev-planner Desglosa la funcionalidad de registro de usuario
```

Los agentes también pueden ejecutarse en paralelo. Pide al agente principal que &quot;revise los cambios del API y actualice la documentación&quot; y lanzará múltiples agentes simultáneamente.

### Crear agentes personalizados

Puedes definir tus propios agentes mediante la UI de Settings o como archivos Markdown:

**Agentes a nivel de proyecto** van en `.zcode/agents/` (compartidos con el equipo vía Git).
**Agentes a nivel de usuario** van en `~/.zcode/agents/` (disponibles en todos tus proyectos).

Aquí tienes un ejemplo de archivo de agente:

```markdown
---
name: security-auditor
description: Experto en seguridad. Usar al implementar autenticación, pagos o manejar datos sensibles.
model: inherit
---

Eres un experto en seguridad responsable de revisar vulnerabilidades en el código.

Al ejecutar:
1. Identificar rutas de código sensibles a la seguridad
2. Verificar vulnerabilidades comunes (inyección, XSS, bypass de autenticación)
3. Verificar que no haya secrets hardcodeados
4. Revisar validación y sanitización de entrada

Reportar hallazgos por severidad:
- Crítico (debe corregirse antes del despliegue)
- Alto (corregir lo antes posible)
- Medio (direccionar cuando sea posible)
```

## Sistema de Skills

Las Skills son archivos Markdown que enseñan al agente cómo manejar tareas específicas. Funcionan como guías reutilizables. Cuando tu petición coincide con la descripción de una skill, el agente la sugiere o tú la seleccionas con `@`.

&lt;Image src={zcodeSkillList} alt=&quot;Panel de gestión de skills de Z Code mostrando skills de usuario y plugin instaladas&quot; /&gt;

### Tipos de Skill

| Tipo | Almacenamiento | Alcance |
| --- | --- | --- |
| **User Skills** | `~/.claude/skills/` | Todos los proyectos |
| **Plugin Skills** | Instaladas vía plugins | Disponibles automáticamente |
| **Project Skills** | `.claude/skills/` | Solo proyecto actual |

### Crear una skill

Una skill es un archivo Markdown con frontmatter YAML:

```markdown
---
name: explaining-code
description: Explicar código con diagramas visuales y analogías
---

# Estándares de Explicación de Código

Al explicar código, siempre incluir:

1. **Empezar con analogías**: Comparar el código con cosas cotidianas
2. **Diagramas visuales**: Usar diagramas ASCII para mostrar el flujo
3. **Desglose paso a paso**: Explicar claramente cada parte
```

Las skills también pueden contener scripts ejecutables en Python, Node.js u otros lenguajes. El agente ejecuta el script y solo la salida consume tokens de contexto, no el código fuente del script.

## Servicios MCP

Z Code usa el Model Context Protocol para extender lo que pueden hacer los agentes. Tres servicios MCP integrados cubren necesidades comunes:

&lt;Image src={zcodeMcp} alt=&quot;Configuración de servicios MCP de Z Code con comprensión visual, búsqueda web y lector web&quot; /&gt;

&lt;Tabs&gt;
&lt;Tab name=&quot;Comprensión Visual&quot;&gt;

**zai-mcp-server**: Permite al agente analizar imágenes.

1. Obtén un token API de [open.bigmodel.cn](https://open.bigmodel.cn)
2. En Z Code Settings &gt; MCP Servers, edita `zai-mcp-server`
3. Añade tu `Z_AI_API_KEY` a las variables de entorno
4. Establece `Z_AI_MODE` a `ZHIPU`
5. Guarda y activa

&lt;/Tab&gt;
&lt;Tab name=&quot;Búsqueda Web&quot;&gt;

**web-search-prime**: Da al agente acceso a internet en tiempo real.

1. Obtén un token API de [open.bigmodel.cn](https://open.bigmodel.cn)
2. En Z Code Settings &gt; MCP Servers, edita `web-search-prime`
3. Añade tu key al header `Authorization` como `Bearer your_api_key`
4. Guarda y activa

&lt;/Tab&gt;
&lt;Tab name=&quot;Lector Web&quot;&gt;

**web-reader**: Parsea páginas web y extrae contenido estructurado.

1. Obtén un token API de [open.bigmodel.cn](https://open.bigmodel.cn)
2. En Z Code Settings &gt; MCP Servers, edita `web-reader`
3. Añade tu key al header `Authorization`
4. Guarda y activa

&lt;/Tab&gt;
&lt;/Tabs&gt;

## Sistema de Plugins

Los plugins añaden nuevos comandos, agentes, conexiones MCP, servidores de lenguaje y más a Z Code. Incluye acceso al marketplace oficial de plugins de Claude Code.

&lt;Image src={zcodePluginDiscover} alt=&quot;Marketplace de plugins de Z Code mostrando plugins disponibles para agentes, comandos, MCP y LSP&quot; /&gt;

### Tipos de Plugin

| Tipo | Qué Añade |
| --- | --- |
| **Agent** | Agentes especializados con flujos de trabajo de dominio |
| **Command** | Comandos slash `/` personalizados |
| **MCP** | Conexiones a herramientas externas y fuentes de datos |
| **LSP** | Servidores de lenguaje para navegación de código y verificación de tipos |
| **Skill** | Guías de comportamiento para el agente |
| **Hook** | Acciones de auto-ejecución en eventos específicos |

### Ámbitos de instalación

| Ámbito | Ubicación | Visibilidad |
| --- | --- | --- |
| **User** | `~/.claude/` | Todos tus proyectos |
| **Project** | `.claude/settings.json` | Compartido con el equipo (commit al repo) |
| **Local** | `.claude/local.settings.json` | Solo tú, proyecto actual |

También puedes añadir marketplaces de terceros o privados de equipo apuntando Z Code a un repositorio Git o a un archivo `marketplace.json` alojado.

## Estilos de salida

Z Code te permite elegir cómo el agente te habla. Cinco estilos integrados vienen incluidos:

| Estilo | Ideal Para | Descripción |
| --- | --- | --- |
| **Default** | Trabajo diario | Conciso y profesional |
| **Explanatory** | Entender código | Explicaciones detalladas de decisiones de implementación |
| **Learning** | Aprender nuevas tecnologías | Enseñanza guiada con pausas para práctica práctica |
| **Coding Vibes** | Sesiones casuales | Tono energético con emojis y jerga |
| **Structural Thinking** | Diseño de arquitectura | Análisis en capas, modular |

También puedes crear estilos personalizados. Cada estilo es un archivo Markdown con frontmatter e instrucciones que definen el tono, formato y comportamiento del agente.

## Control de versiones

Z Code maneja el versionado en dos niveles, y honestamente esta es una de las características que más me gustaron.

### Rollback a nivel de conversación

Cada mensaje que envías crea un checkpoint. Puedes:

- **Revisar**: Ver todos los cambios de archivo después de cualquier interacción en una vista diff multi-archivo
- **Deshacer**: Revertir solo los cambios de la última interacción
- **Restaurar**: Saltar al estado después de cualquier mensaje específico en tu historial de chat

Esto significa que tu historial de conversación también es tu línea de tiempo de versiones. Prueba diferentes enfoques y revierte si algo no funciona.

### Panel de Git integrado

Un panel completo de gestión Git está integrado en la barra lateral izquierda:

- Ver archivos modificados con marcadores de estado (M para modificado, U para sin rastrear)
- Escribir mensajes de commit y hacer commit con un clic
- Cambiar de rama desde la barra de estado inferior
- Navegar el historial de commits

&lt;Notice type=&quot;info&quot; title=&quot;Chat + Git = Red de Seguridad&quot;&gt;

El rollback de conversación maneja los momentos de &quot;ese último cambio rompió algo&quot;. Git maneja los momentos más grandes de &quot;déjame guardar este hito&quot;. Juntos te permiten experimentar más libremente.

&lt;/Notice&gt;

## Sistema de memoria

Z Code lee un archivo `CLAUDE.md` de la raíz de tu proyecto y lo carga en cada conversación. Pon aquí tus convenciones de proyecto, notas de arquitectura y estándares de código.

### Inicio rápido

Ejecuta `/init` en el chat y Z Code generará automáticamente un archivo `CLAUDE.md` para tu proyecto.

### Qué poner en CLAUDE.md

```markdown
# Arquitectura del Proyecto

Este proyecto usa una arquitectura en capas:

- `src/api/`: Definiciones de rutas API
- `src/services/`: Capa de lógica de negocio
- `src/models/`: Modelos de datos

## Convenciones de Desarrollo

- Las rutas API usan estilo RESTful
- Todas las operaciones de base de datos pasan por la capa de servicios
- El manejo de errores usa la utilidad errorHandler unificada

## Estilo de Código

- Las variables usan camelCase
- Las constantes usan UPPER_CASE
- Los nombres de archivo usan kebab-case
- Sangrado de 2 espacios
- Comillas simples para strings
```

Mantenlo por debajo de 200 líneas. Pon la información más importante primero. No incluyas secrets ni API keys.

## Desarrollo remoto

Z Code puede transmitir tu sesión de escritorio a un teléfono vía WebSocket. Es útil para verificar tareas de larga duración o manejar una corrección rápida cuando no estás en tu escritorio.

1. Haz clic en el icono &quot;Remote Development&quot; en la esquina superior derecha de Z Code
2. Aparece un código QR en pantalla
3. Escanéalo con tu teléfono
4. Tu teléfono muestra una vista en vivo de la sesión de Z Code

Toda la ejecución de código permanece en el escritorio. El teléfono solo maneja la visualización y entrada de texto. Actualmente limitado a un dispositivo móvil por sesión.

## Z Code vs otras herramientas de programación con IA

He preparado una tabla comparativa ya que probablemente es la primera pregunta que la mayoría tiene:

| Característica | Z Code | Cursor | Claude Code CLI | Windsurf |
| --- | --- | --- | --- | --- |
| **Tipo** | ADE independiente | IDE (fork de VS Code) | CLI de terminal | IDE (fork de VS Code) |
| **Multi-Modelo** | Sí, GLM, Claude, GPT, Kimi, DeepSeek, personalizado | Sí, múltiples proveedores | Solo Claude | Sí, múltiples proveedores |
| **Agentes Especializados** | Integrados + personalizados | No | No | AI Flows |
| **Sistema de Skills** | Sí, guías Markdown reutilizables | No | No | No |
| **Marketplace de Plugins** | Sí, agentes, comandos, MCP, LSP | Extensiones | No | Extensiones |
| **Versionado de Chat** | Sí, checkpoints de conversación + rollback | No | No | No |
| **Dev Remoto (Móvil)** | Sí, código QR al teléfono | No | No | No |
| **Soporte MCP** | Sí, integrado + personalizado | Comunidad | Sí | Sí |
| **Archivos de Memoria** | CLAUDE.md auto-cargado | .cursorrules | CLAUDE.md | .windsurfrules |
| **Integración Git** | Panel integrado | Integrado | Basado en CLI | Integrado |

## Empezando en 5 minutos

La forma más rápida de comenzar:

**Paso 1**: Descarga e instala Z Code desde [zcode-ai.com](https://zcode-ai.com/docs/install)

**Paso 2**: Abre la aplicación y haz clic en &quot;Connect&quot; para configurar tu proveedor de IA. Si tienes una key de OpenRouter, eso te da acceso a la gama más amplia de modelos.

**Paso 3**: Abre una carpeta de proyecto en Z Code.

**Paso 4**: Escribe `/init` en el chat para generar un archivo de memoria `CLAUDE.md` para tu proyecto.

**Paso 5**: Empieza a chatear. Pide al agente que explique tu base de código, arregle un bug o construya una nueva funcionalidad.

&lt;Button
  text=&quot;Comenzar con Z Code&quot;
  link=&quot;https://zcode-ai.com&quot;
  size=&quot;lg&quot;
  color=&quot;blue&quot;
  variant=&quot;solid&quot;
/&gt;

## Pros y contras

&lt;ListCheck&gt;

- **Flexibilidad multi-modelo**: Usa cualquier proveedor de IA, cambia modelos por tarea
- **Delegación a agentes**: Agentes integrados y personalizados mantienen el contexto limpio
- **Versionado de conversación**: Revierte cambios de código vinculados al historial de chat
- **Ecosistema de plugins**: Extiende con agentes, comandos, MCP, LSP y hooks
- **Acceso remoto**: Verifica tareas desde tu teléfono
- **Sistema de Skills**: Guías de tareas reutilizables que estandarizan el comportamiento del agente

&lt;/ListCheck&gt;

### Desventajas

- **Solo escritorio**: Sin versión web, sin extensión de VS Code. Usas su aplicación o nada.
- **Herramienta nueva**: El ecosistema aún es pequeño. Menos recursos de comunidad comparado con Cursor o Copilot.
- **Ecosistema Z.AI**: Algunos servicios MCP necesitan específicamente API keys de Zhipu/BigModel.
- **Solo macOS y Windows**: Sin soporte para Linux aún.
- **Muchas piezas en movimiento**: Agentes, skills, plugins, MCP, memoria. Hay una curva de aprendizaje para averiguar qué pieza usar cuándo.

## Preguntas frecuentes

&lt;Accordion label=&quot;¿Necesito Claude Code para usar Z Code?&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

No. Z Code soporta múltiples proveedores de IA. Puedes usar GLM-5, modelos a través de OpenRouter, la API de Anthropic directamente, Moonshot (Kimi), DeepSeek, o cualquier servicio que hable el protocolo OpenAI o Anthropic. Claude Code es solo un método de conexión opcional.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Z Code es gratuito?&quot; group=&quot;faq&quot;&gt;

Z Code en sí es gratuito de descargar y usar. Pagas por los modelos de IA que conectas — ya sea a través de los GLM Coding Plans de Z.AI, créditos de OpenRouter, uso de la API de Anthropic, o cualquier proveedor que elijas.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo usar Z Code con modelos locales?&quot; group=&quot;faq&quot;&gt;

Sí. Z Code soporta cualquier endpoint de API compatible con OpenAI o Anthropic. Apúntalo a un servidor de inferencia local (como Ollama o vLLM) y funcionará con cualquier modelo que estés ejecutando.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Cómo se compara Z Code con Cursor?&quot; group=&quot;faq&quot;&gt;

Cursor es un fork de VS Code enfocado en edición asistida por IA. Z Code es un entorno independiente construido alrededor de interacciones con agentes. Z Code tiene agentes especializados, un sistema de skills, un marketplace de plugins y rollback de versionado a nivel de conversación. Cursor tiene una experiencia de IDE más familiar y una base de usuarios existente más grande.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Z Code funciona en Linux?&quot; group=&quot;faq&quot;&gt;

No al momento de escribir esto. Z Code está disponible solo para macOS y Windows.

&lt;/Accordion&gt;

## Conclusión

Z Code apuesta por que el IDE del futuro es agent-first, no editor-first. Si esa apuesta paga, tiene ventaja sobre herramientas que están retrofitting agentes en editores existentes. El soporte multi-modelo, agentes personalizados y versionado de conversación son genuinamente útiles, y me encontré usando la función de rollback más de lo que esperaba.

El trade-off es que estás dejando atrás el ecosistema de VS Code y sus extensiones. Para algunos proyectos eso no importará. Para otros es un dealbreaker. Mi sugerencia: pruébalo primero en un proyecto paralelo. La descarga gratuita y el modelo de precios BYOK lo hacen de bajo riesgo para probar.

&lt;Button
  text=&quot;Probar Z Code&quot;
  link=&quot;https://zcode-ai.com&quot;
  size=&quot;lg&quot;
  color=&quot;blue&quot;
  variant=&quot;solid&quot;
/&gt;</content:encoded><category>ai</category><category>zcode</category><category>ai-coding</category><category>glm</category></item><item><title>Agregar un Agente de Imagen IA a Mastra con Kie.ai</title><link>https://www.bitdoze.com/es/agente-imagen-mastra-kie-ai/</link><guid isPermaLink="true">https://www.bitdoze.com/es/agente-imagen-mastra-kie-ai/</guid><description>Guia paso a paso para agregar un agente de generacion de imagenes Mastra impulsado por Kie.ai. Cubre Nano Banana, Flux-2, GPT Image, Seedream, subidas, trabajos async y descargas locales para portadas de blog y miniaturas de YouTube.</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

Ya tengo un [asistente Mastra](/build-ai-agent-mastra/) que puede buscar en la web, leer archivos, ejecutar comandos shell y recordar contexto. Eso cubre investigacion y codificacion. No cubre la otra mitad del trabajo de contenido: portadas, miniaturas, graficos sociales y ediciones con logo.

Asi que agregue un agente de imagen dedicado. Chateas con el en Mastra Studio, elige un modelo, escribe un prompt, llama a una API de imagen, hace poll hasta que el trabajo termina y guarda el PNG en el workspace. Sin pestana de diseno separada, sin copiar y pegar URLs temporales que desaparecen dos semanas despues.

El backend de generacion es [Kie.ai](https://go.bitdoze.com/kie-ai). Una API key, un formato de trabajo async y acceso a los modelos que realmente uso para portadas de blog y miniaturas de YouTube: Google Nano Banana / Nano Banana 2, Seedream, Flux-2, GPT Image 2, Ideogram, Topaz upscale, Recraft background removal y mas.

Este articulo recorre como conecte ese agente en Mastra, desde el cliente Kie hasta las instrucciones del agente. Puedes dejar caer el mismo patron en el proyecto [mastra-assistant](https://github.com/bitdoze/mastra-assistant) o cualquier aplicacion Mastra existente.

&lt;Button text=&quot;Prueba Kie.ai (API Key)&quot; link=&quot;https://go.bitdoze.com/kie-ai&quot; variant=&quot;solid&quot; color=&quot;purple&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;
&lt;Button text=&quot;Construye un Agente Mastra Primero&quot; link=&quot;/build-ai-agent-mastra/&quot; variant=&quot;outline&quot; color=&quot;purple&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

## Por que Kie.ai para generacion de imagenes

Si solo necesitas el modelo de imagen de OpenAI, llama a OpenAI. El dolor empieza cuando quieres varios modelos detras de una integracion:

- Google Nano Banana 2 para portadas 16:9 rapidas y de alta calidad
- Seedream Pro para tomas fotorrealistas estilo producto
- Flux-2 Pro para graficos comerciales nitidos
- GPT Image 2 cuando importa seguir instrucciones y texto en imagen
- Ideogram cuando la tipografia tiene que ser legible
- Topaz / Recraft para upscale y eliminacion de fondo

Cada proveedor oficial tiene su propia auth, formato de payload, historia de polling y pagina de precios. Kie se situa en el medio como una capa API multimodelo: modelos de imagen, video, musica y LLM detras de una billetera y una API de tareas.

Aqui esta la imagen practica de su plataforma y documentacion:

| Caracteristica | Lo que obtienes |
|---|---|
| Modelos | 100+ entre imagen, video, audio y chat (Nano Banana, GPT Image, Seedream, Flux, Veo, Kling, Seedance, Suno, Claude, Gemini, GPT y mas) |
| Precios | Generalmente ~30-50% por debajo de APIs oficiales; algunos modelos de alta demanda mucho mas bajos (la plataforma reclama hasta ~80% en modelos seleccionados) |
| Facturacion | Billetera de creditos; la plataforma indica que generaciones fallidas no se cobran |
| Creditos | No expiran; cuentas nuevas obtienen creditos de prueba gratuitos para probar en el Playground |
| Auth | `Authorization: Bearer YOUR_API_KEY` contra `https://api.kie.ai` |
| Trabajos | Async: `POST /api/v1/jobs/createTask` → poll `GET /api/v1/jobs/recordInfo?taskId=...` o usa un webhook |
| Limites de tasa | Aproximadamente 20 nuevas solicitudes / 10 segundos por defecto; tareas concurrentes en ejecucion son generosas |
| Retencion | Medios generados ~14 dias; logs ~2 meses (descarga lo que te importe) |
| Ops | UI de logs, limites de tasa por API key, lista IP allowlist opcional, canales de soporte Discord/Telegram |

Para trabajo de agentes, el modelo de trabajo async es la parte importante. La generacion de imagenes no es un chat completion de 200ms. Tu herramienta debe crear una tarea, esperar (o hacer poll) y luego descargar el resultado antes de que la URL temporal de Kie caduque. Eso es exactamente lo que hacen las herramientas Mastra a continuacion.

Ejemplos de precios de imagen de su pagina publica de precios (verifica [kie.ai/pricing](https://kie.ai/pricing) para numeros actuales):

- Nano Banana 2: aproximadamente $0.04-$0.09 por imagen dependiendo de la resolucion
- GPT Image 2: aproximadamente $0.03-$0.08 por imagen en tamanos comunes
- APIs oficiales: generalmente 2-5x mas caras en el mismo nivel de modelo

Uso Kie porque puedo cambiar model ids sin reescribir el agente cada vez que llega un nuevo modelo de imagen de Google u OpenAI.

&lt;Button text=&quot;Abrir Kie.ai Market y Precios&quot; link=&quot;https://go.bitdoze.com/kie-ai&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;
&lt;Button text=&quot;Leer Docs de Kie API&quot; link=&quot;https://docs.kie.ai/&quot; variant=&quot;outline&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Divulgacion de afiliados&quot;&gt;
Algunos enlaces a Kie.ai en este articulo son enlaces de afiliados (`go.bitdoze.com/kie-ai`). Uso el producto para generacion de imagenes en mi propia configuracion Mastra. Los precios y disponibilidad de modelos cambian; siempre verifica en el sitio oficial.
&lt;/Notice&gt;

## Que construiremos

Al final tendras:

1. Un pequeno cliente Kie (crear tarea, poll, creditos, subida de archivos, descarga)
2. Cinco herramientas Mastra: listar modelos, generar, estado de tarea, creditos, listar assets
3. Un agente de imagen con instrucciones para miniaturas, portadas de blog y flujos de imagen de referencia
4. Registro en `src/mastra/index.ts` para que Studio muestre `image-agent`

El agente puede:

- Generar assets text-to-image a 16:9 para blog/YouTube
- Editar con logos o referencias de rostros (modelos image-to-image / edit)
- Hacer upscale o eliminar fondos
- Guardar archivos bajo `workspace/images/generated/`
- Investigar referencias visuales con TinyFish si ya tienes esas herramientas de la [guia del asistente Mastra](/build-ai-agent-mastra/)

Las subidas de referencia se manejan dentro de `generate_kie_image` via `localImagePaths` (subir archivo local → URL Kie → adjuntar a la tarea). No necesitas una herramienta de preparacion separada para el flujo basico.

## Prerrequisitos

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Un proyecto Mastra funcionando (ver &lt;a href=&quot;/build-ai-agent-mastra/&quot;&gt;Construye Tu Propio Agente IA con Mastra&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Node.js 22+ (o Bun, si asi ejecutas la app)&lt;/li&gt;
&lt;li&gt;Una API key de LLM para el cerebro del agente (OpenRouter, OpenCode Go, etc.)&lt;/li&gt;
&lt;li&gt;Una &lt;a href=&quot;https://go.bitdoze.com/kie-ai&quot;&gt;API key de Kie.ai&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

Opcional pero util: TinyFish para flujos de &quot;investigar miniaturas de competidores antes de generar&quot;.

## Arquitectura

```text
User (Studio chat)
    │
    ▼
image-agent  (LLM + instructions)
    │
    ├─ list_kie_image_models
    ├─ generate_kie_image  ──► Kie createTask + poll + download
    │                          (uploads localImagePaths first if needed)
    ├─ get_kie_image_task
    ├─ get_kie_credits
    └─ list_image_assets
            │
            ▼
    workspace/images/uploads/     (your logos &amp; refs)
    workspace/images/generated/   (outputs)
```

El LLM nunca habla con Kie directamente. Solo elige herramientas. Eso mantiene auth, reintentos, seguridad de rutas y logica de descarga en TypeScript donde puedes probarlo.

## Paso 1: Obtener una API key de Kie

1. Registrate en [Kie.ai](https://go.bitdoze.com/kie-ai)
2. Abre [gestion de API Key](https://kie.ai/api-key)
3. Crea una key y guardala solo en env del servidor (nunca en codigo frontend)

Agrega a `.env`:

```bash
KIE_API_KEY=your-kie-api-key
```

Overrides opcionales:

```bash
# Usa un modelo mas fuerte/barato solo para el agente de imagen
AGENT_IMAGE_MODEL=google/gemini-2.5-flash
AGENT_IMAGE_MAX_STEPS=25
```

## Paso 2: Conceptos basicos del cliente Kie

Crea `src/mastra/tools/kie-client.ts`. Esta es la capa de bajo nivel. Manten el catalogo de modelos y HTTP aqui para que las herramientas se mantengan delgadas.

### Auth y bases

```ts
export const KIE_API_BASE = &quot;https://api.kie.ai&quot;;
// File uploads use a separate host
export const KIE_UPLOAD_BASE = &quot;https://kieai.redpandaai.co&quot;;

export function getApiKey(): string {
  const apiKey = process.env.KIE_API_KEY;
  if (!apiKey) {
    throw new Error(
      &quot;KIE_API_KEY is not set. Add it to .env (from https://kie.ai/api-key).&quot;,
    );
  }
  return apiKey;
}

function authHeaders(json = true): HeadersInit {
  const headers: Record&lt;string, string&gt; = {
    Authorization: `Bearer ${getApiKey()}`,
  };
  if (json) headers[&quot;Content-Type&quot;] = &quot;application/json&quot;;
  return headers;
}
```

### Crear tarea + poll

La API Market de Kie es async. Un `200` al crear significa &quot;aceptado,&quot; no &quot;imagen lista.&quot;

```ts
export async function kieCreateTask(body: {
  model: string;
  input: Record&lt;string, unknown&gt;;
  callBackUrl?: string;
}): Promise&lt;{ ok: true; data: { taskId: string } } | { ok: false; error: string }&gt; {
  const res = await fetch(`${KIE_API_BASE}/api/v1/jobs/createTask`, {
    method: &quot;POST&quot;,
    headers: authHeaders(),
    body: JSON.stringify(body),
  });
  const json = await res.json();
  if (!res.ok || json?.code !== 200) {
    return { ok: false, error: json?.msg || `createTask failed (HTTP ${res.status})` };
  }
  const taskId = json?.data?.taskId as string | undefined;
  if (!taskId) return { ok: false, error: &quot;createTask succeeded but no taskId returned&quot; };
  return { ok: true, data: { taskId } };
}

export async function kieGetTask(taskId: string) {
  const res = await fetch(
    `${KIE_API_BASE}/api/v1/jobs/recordInfo?taskId=${encodeURIComponent(taskId)}`,
    { method: &quot;GET&quot;, headers: authHeaders(false) },
  );
  const json = await res.json();
  const data = json?.data;
  if (!data) return { ok: false as const, error: json?.msg || &quot;No task data&quot; };

  let resultUrls: string[] | undefined;
  if (data.resultJson) {
    const parsed =
      typeof data.resultJson === &quot;string&quot; ? JSON.parse(data.resultJson) : data.resultJson;
    if (parsed?.resultUrls) resultUrls = parsed.resultUrls;
  }

  return {
    ok: true as const,
    data: {
      taskId: data.taskId as string,
      model: data.model as string | undefined,
      // waiting | queuing | generating | success | fail
      state: data.state as string | undefined,
      resultUrls,
      failMsg: data.failMsg as string | undefined,
      creditsConsumed: data.creditsConsumed as number | undefined,
    },
  };
}

export async function pollTaskUntilDone(
  taskId: string,
  options?: { timeoutMs?: number; intervalMs?: number },
) {
  const timeoutMs = options?.timeoutMs ?? 10 * 60 * 1000;
  const intervalMs = options?.intervalMs ?? 3000;
  const start = Date.now();
  let delay = intervalMs;

  while (Date.now() - start &lt; timeoutMs) {
    const result = await kieGetTask(taskId);
    if (!result.ok) return result;
    // Terminal states only. waiting / queuing / generating keep looping.
    if (result.data.state === &quot;success&quot; || result.data.state === &quot;fail&quot;) return result;
    await new Promise((r) =&gt; setTimeout(r, delay));
    delay = Math.min(delay * 1.25, 15000);
  }
  return { ok: false as const, error: `Timed out waiting for task ${taskId}` };
}
```

### Creditos

```ts
export async function kieGetCredits() {
  const res = await fetch(`${KIE_API_BASE}/api/v1/chat/credit`, {
    method: &quot;GET&quot;,
    headers: authHeaders(false),
  });
  const json = await res.json();
  if (!res.ok || json?.code !== 200) {
    return { ok: false as const, error: json?.msg || &quot;credit check failed&quot; };
  }
  return { ok: true as const, data: Number(json.data) };
}
```

### Subir archivos locales (para logos / referencias de rostros)

Los modelos I2I y edit necesitan URLs de imagen publicas o alojadas en Kie. Sube archivos locales del workspace primero:

```ts
export async function kieUploadLocalFile(absPath: string) {
  const buf = await Bun.file(absPath).arrayBuffer(); // or fs.readFileSync
  const bytes = Buffer.from(buf);
  const ext = absPath.split(&quot;.&quot;).pop()?.toLowerCase() ?? &quot;png&quot;;
  const mime =
    ext === &quot;png&quot; ? &quot;image/png&quot; : ext === &quot;webp&quot; ? &quot;image/webp&quot; : &quot;image/jpeg&quot;;
  const base64Data = `data:${mime};base64,${bytes.toString(&quot;base64&quot;)}`;

  const res = await fetch(`${KIE_UPLOAD_BASE}/api/file-base64-upload`, {
    method: &quot;POST&quot;,
    headers: authHeaders(),
    body: JSON.stringify({
      base64Data,
      uploadPath: &quot;images&quot;,
      fileName: absPath.split(&quot;/&quot;).pop(),
    }),
  });
  const json = await res.json();
  // Docs return downloadUrl and fileUrl
  const fileUrl =
    json?.data?.downloadUrl || json?.data?.fileUrl || json?.downloadUrl;
  if (!fileUrl) {
    return { ok: false as const, error: json?.msg || &quot;Upload returned no URL&quot; };
  }
  return { ok: true as const, data: { fileUrl: String(fileUrl) } };
}
```

Los archivos subidos en el host de Kie son temporales (docs: eliminados despues de unos dias; trata las URLs como de corta duracion). Prefiere `downloadUrl` o `fileUrl` de la respuesta y pasalos a la tarea de generacion de inmediato.

### Descargar resultados al workspace

Los medios de Kie son temporales (~14 dias; algunos docs tambien indican que las URLs de resultado pueden caducar mas rapido). Siempre guarda en disco.

```ts
import { join } from &quot;node:path&quot;;
import { mkdirSync, writeFileSync } from &quot;node:fs&quot;;

export const IMAGES_GENERATED = join(process.cwd(), &quot;workspace/images/generated&quot;);
export const IMAGES_UPLOADS = join(process.cwd(), &quot;workspace/images/uploads&quot;);

export function resolveWorkspacePath(relativeOrAbs: string): string {
  if (relativeOrAbs.startsWith(&quot;/&quot;) || /^[A-Za-z]:\\/.test(relativeOrAbs)) {
    return relativeOrAbs;
  }
  // Accept &quot;images/uploads/logo.png&quot; or &quot;workspace/images/uploads/logo.png&quot;
  const cleaned = relativeOrAbs.replace(/^workspace\//, &quot;&quot;);
  return join(process.cwd(), &quot;workspace&quot;, cleaned);
}

export function findModel(modelId: string) {
  return KIE_IMAGE_MODELS.find((m) =&gt; m.id === modelId);
}

export async function downloadToGenerated(url: string, fileName?: string) {
  mkdirSync(IMAGES_GENERATED, { recursive: true });
  const res = await fetch(url);
  if (!res.ok) throw new Error(`Download failed HTTP ${res.status}`);
  const buf = Buffer.from(await res.arrayBuffer());
  const stamp = new Date().toISOString().replace(/[:.]/g, &quot;-&quot;);
  const base = (fileName ?? `kie-${stamp}`).replace(/[^a-zA-Z0-9._-]/g, &quot;_&quot;);
  const withExt = base.includes(&quot;.&quot;) ? base : `${base}.png`;
  const outPath = join(IMAGES_GENERATED, withExt);
  writeFileSync(outPath, buf);
  return { path: outPath, bytesWritten: buf.length };
}
```

### Catalogo de modelos curado

No dejes que el LLM invente model ids. Incluye una lista curada que el agente pueda listar y filtrar:

```ts
export type ImageMode =
  | &quot;text-to-image&quot;
  | &quot;image-to-image&quot;
  | &quot;edit&quot;
  | &quot;upscale&quot;
  | &quot;remove-background&quot;;

export type KieImageModel = {
  id: string;
  name: string;
  family: string;
  mode: ImageMode;
  bestFor: string;
  supportsImageUrls: boolean;
  /** Kie input field for reference images (varies by model) */
  imageField?: &quot;image_input&quot; | &quot;image_urls&quot; | &quot;input_urls&quot; | &quot;image&quot;;
  defaultAspectRatio?: string;
  notes?: string;
};

export const KIE_IMAGE_MODELS: KieImageModel[] = [
  {
    id: &quot;nano-banana-2&quot;,
    name: &quot;Google Nano Banana 2&quot;,
    family: &quot;Google&quot;,
    mode: &quot;text-to-image&quot;,
    bestFor: &quot;Blog covers, social graphics, optional image refs&quot;,
    supportsImageUrls: true,
    imageField: &quot;image_input&quot;,
    defaultAspectRatio: &quot;16:9&quot;,
    notes: &quot;Bare id nano-banana-2 (not google/nano-banana-2). resolution: 1K|2K|4K&quot;,
  },
  {
    id: &quot;seedream/5-pro-text-to-image&quot;,
    name: &quot;Seedream 5.0 Pro T2I&quot;,
    family: &quot;Seedream&quot;,
    mode: &quot;text-to-image&quot;,
    bestFor: &quot;Photoreal thumbnails and product shots&quot;,
    supportsImageUrls: false,
    defaultAspectRatio: &quot;16:9&quot;,
    notes: &quot;Requires quality: basic|high in addition to aspect_ratio&quot;,
  },
  {
    id: &quot;flux-2/pro-text-to-image&quot;,
    name: &quot;Flux-2 Pro T2I&quot;,
    family: &quot;Flux-2&quot;,
    mode: &quot;text-to-image&quot;,
    bestFor: &quot;Sharp commercial graphics&quot;,
    supportsImageUrls: false,
    defaultAspectRatio: &quot;16:9&quot;,
  },
  {
    id: &quot;gpt-image-2-text-to-image&quot;,
    name: &quot;GPT Image 2 T2I&quot;,
    family: &quot;GPT Image&quot;,
    mode: &quot;text-to-image&quot;,
    bestFor: &quot;Instruction following, text-in-image&quot;,
    supportsImageUrls: false,
    defaultAspectRatio: &quot;16:9&quot;,
  },
  {
    id: &quot;google/nano-banana-edit&quot;,
    name: &quot;Google Nano Banana Edit&quot;,
    family: &quot;Google&quot;,
    mode: &quot;edit&quot;,
    bestFor: &quot;Logo-aware edits and photo instructions&quot;,
    supportsImageUrls: true,
    imageField: &quot;image_urls&quot;,
    defaultAspectRatio: &quot;16:9&quot;,
  },
  {
    id: &quot;gpt-image-2-image-to-image&quot;,
    name: &quot;GPT Image 2 I2I&quot;,
    family: &quot;GPT Image&quot;,
    mode: &quot;image-to-image&quot;,
    bestFor: &quot;Face lock / identity-preserving edits&quot;,
    supportsImageUrls: true,
    imageField: &quot;input_urls&quot;,
    defaultAspectRatio: &quot;16:9&quot;,
  },
  {
    id: &quot;topaz/image-upscale&quot;,
    name: &quot;Topaz Image Upscale&quot;,
    family: &quot;Topaz&quot;,
    mode: &quot;upscale&quot;,
    bestFor: &quot;Final 2x/4x upscale&quot;,
    supportsImageUrls: true,
    imageField: &quot;image_urls&quot;,
  },
  {
    id: &quot;recraft/remove-background&quot;,
    name: &quot;Recraft Remove Background&quot;,
    family: &quot;Recraft&quot;,
    mode: &quot;remove-background&quot;,
    bestFor: &quot;Cut out product/logo backgrounds&quot;,
    supportsImageUrls: true,
    imageField: &quot;image&quot;,
  },
];
```

Agrega mas ids desde [docs.kie.ai](https://docs.kie.ai/) segun los necesites. El agente solo ve lo que listas.

## Paso 3: Herramientas de imagen Mastra

Crea `src/mastra/tools/kie-image.ts`. Las herramientas son `createTool` + Zod. El campo `description` es la documentacion API orientada al modelo, asi que escribelo con cuidado.

### Listar modelos

```ts
import { createTool } from &quot;@mastra/core/tools&quot;;
import { z } from &quot;zod&quot;;
import { KIE_IMAGE_MODELS } from &quot;./kie-client&quot;;

export const listKieImageModels = createTool({
  id: &quot;list_kie_image_models&quot;,
  description:
    &quot;List available Kie.ai image models for thumbnails, blog covers, and marketing graphics. Call this before generating if you are unsure which model id to use.&quot;,
  inputSchema: z.object({
    mode: z
      .enum([
        &quot;text-to-image&quot;,
        &quot;image-to-image&quot;,
        &quot;edit&quot;,
        &quot;upscale&quot;,
        &quot;remove-background&quot;,
        &quot;all&quot;,
      ])
      .optional(),
    family: z.string().optional(),
  }),
  outputSchema: z.object({
    count: z.number(),
    models: z.array(
      z.object({
        id: z.string(),
        name: z.string(),
        family: z.string(),
        mode: z.string(),
        bestFor: z.string(),
        supportsImageUrls: z.boolean(),
        notes: z.string().optional(),
      }),
    ),
  }),
  execute: async (input) =&gt; {
    let models = KIE_IMAGE_MODELS;
    if (input.mode &amp;&amp; input.mode !== &quot;all&quot;) {
      models = models.filter((m) =&gt; m.mode === input.mode);
    }
    if (input.family) {
      const f = input.family.toLowerCase();
      models = models.filter((m) =&gt; m.family.toLowerCase().includes(f));
    }
    return {
      count: models.length,
      models: models.map((m) =&gt; ({
        id: m.id,
        name: m.name,
        family: m.family,
        mode: m.mode,
        bestFor: m.bestFor,
        supportsImageUrls: m.supportsImageUrls,
        notes: m.notes,
      })),
    };
  },
});
```

### Generar (crear + poll + descargar)

```ts
import { existsSync } from &quot;node:fs&quot;;
import {
  findModel,
  kieCreateTask,
  pollTaskUntilDone,
  kieUploadLocalFile,
  downloadToGenerated,
  getApiKey,
  resolveWorkspacePath,
} from &quot;./kie-client&quot;;

export const generateKieImage = createTool({
  id: &quot;generate_kie_image&quot;,
  description: `Generate or edit an image via Kie.ai. Creates an async task, polls until done, downloads into workspace/images/generated/, returns local paths.
Defaults:
- Blog/YouTube 16:9: nano-banana-2, seedream/5-pro-text-to-image, flux-2/pro-text-to-image
- Text-heavy graphics: gpt-image-2-text-to-image or ideogram/v3-text-to-image
- Logo/reference edits: google/nano-banana-edit or nano-banana-2 with localImagePaths
Important: Nano Banana 2 ids are bare: nano-banana-2 (NOT google/nano-banana-2).`,
  inputSchema: z.object({
    model: z.string().describe(&quot;Exact Market model id&quot;),
    prompt: z.string().min(1).max(20000).optional(),
    aspectRatio: z.string().optional().describe(&quot;e.g. 16:9, 1:1, 9:16&quot;),
    quality: z.string().optional().describe(&quot;Seedream: basic|high&quot;),
    resolution: z.string().optional().describe(&quot;1K | 2K | 4K when supported&quot;),
    imageUrls: z.array(z.string().url()).optional(),
    localImagePaths: z
      .array(z.string())
      .optional()
      .describe(&quot;Workspace paths under images/uploads/, uploaded to Kie first&quot;),
    fileName: z.string().optional(),
    wait: z.boolean().optional().describe(&quot;Default true: poll + download&quot;),
  }),
  outputSchema: z.object({
    success: z.boolean(),
    taskId: z.string().optional(),
    model: z.string().optional(),
    state: z.string().optional(),
    remoteUrls: z.array(z.string()).optional(),
    localPaths: z.array(z.string()).optional(),
    creditsConsumed: z.number().optional(),
    error: z.string().optional(),
  }),
  execute: async (input) =&gt; {
    try {
      getApiKey();
    } catch (e) {
      return { success: false, error: e instanceof Error ? e.message : String(e) };
    }

    const imageUrls: string[] = [...(input.imageUrls ?? [])];
    if (input.localImagePaths?.length) {
      for (const p of input.localImagePaths) {
        const abs = resolveWorkspacePath(p);
        if (!existsSync(abs)) {
          return {
            success: false,
            error: `localImagePath not found: ${p}. Do not generate without the reference.`,
          };
        }
        const uploaded = await kieUploadLocalFile(abs);
        if (!uploaded.ok) {
          return { success: false, error: `Upload failed for ${p}: ${uploaded.error}` };
        }
        imageUrls.push(uploaded.data.fileUrl);
      }
    }

    const meta = findModel(input.model);
    const taskInput: Record&lt;string, unknown&gt; = {
      prompt: input.prompt,
      aspect_ratio: input.aspectRatio ?? meta?.defaultAspectRatio ?? &quot;16:9&quot;,
    };
    if (input.quality) taskInput.quality = input.quality;
    if (input.resolution) taskInput.resolution = input.resolution;
    // Seedream Pro requires quality even if the agent forgets it
    if (input.model.startsWith(&quot;seedream/&quot;) &amp;&amp; !taskInput.quality) {
      taskInput.quality = &quot;basic&quot;;
    }
    if (imageUrls.length) {
      // Field name is model-specific: image_input | image_urls | input_urls | image
      const field =
        meta?.imageField ??
        (meta?.id === &quot;nano-banana-2&quot; || meta?.id === &quot;nano-banana-pro&quot;
          ? &quot;image_input&quot;
          : meta?.id?.startsWith(&quot;gpt-image&quot;)
            ? &quot;input_urls&quot;
            : &quot;image_urls&quot;);
      if (field === &quot;image&quot;) {
        taskInput.image = imageUrls[0];
      } else {
        taskInput[field] = imageUrls;
      }
    }

    const created = await kieCreateTask({ model: input.model, input: taskInput });
    if (!created.ok) return { success: false, error: created.error, model: input.model };

    const taskId = created.data.taskId;
    if (input.wait === false) {
      return { success: true, taskId, model: input.model, state: &quot;submitted&quot; };
    }

    const done = await pollTaskUntilDone(taskId);
    if (!done.ok) return { success: false, taskId, error: done.error, model: input.model };
    if (done.data.state === &quot;fail&quot;) {
      return {
        success: false,
        taskId,
        state: &quot;fail&quot;,
        error: done.data.failMsg || &quot;Generation failed&quot;,
        model: input.model,
      };
    }

    const remoteUrls = done.data.resultUrls ?? [];
    const localPaths: string[] = [];
    for (let i = 0; i &lt; remoteUrls.length; i++) {
      const base =
        input.fileName &amp;&amp; remoteUrls.length === 1
          ? input.fileName
          : input.fileName
            ? `${input.fileName}-${i + 1}`
            : undefined;
      const saved = await downloadToGenerated(remoteUrls[i], base);
      localPaths.push(saved.path);
    }

    return {
      success: true,
      taskId,
      model: input.model,
      state: done.data.state,
      remoteUrls,
      localPaths,
      creditsConsumed: done.data.creditsConsumed,
    };
  },
});
```

### Creditos, estado de tarea y assets locales

Manten estas pequenas. El agente las usa para &quot;tengo presupuesto?&quot; y &quot;donde esta mi logo?&quot;

```ts
export const getKieCredits = createTool({
  id: &quot;get_kie_credits&quot;,
  description: &quot;Check remaining Kie.ai account credits before bulk generation.&quot;,
  inputSchema: z.object({}),
  outputSchema: z.object({
    success: z.boolean(),
    credits: z.number().optional(),
    error: z.string().optional(),
  }),
  execute: async () =&gt; {
    try {
      getApiKey();
    } catch (e) {
      return { success: false, error: e instanceof Error ? e.message : String(e) };
    }
    const result = await kieGetCredits();
    if (!result.ok) return { success: false, error: result.error };
    return { success: true, credits: result.data };
  },
});

export const getKieImageTask = createTool({
  id: &quot;get_kie_image_task&quot;,
  description:
    &quot;Check status of a Kie image task by taskId. When success and download=true, save files under images/generated/.&quot;,
  inputSchema: z.object({
    taskId: z.string(),
    download: z.boolean().optional(),
    fileName: z.string().optional(),
  }),
  outputSchema: z.object({
    success: z.boolean(),
    taskId: z.string().optional(),
    state: z.string().optional(),
    remoteUrls: z.array(z.string()).optional(),
    localPaths: z.array(z.string()).optional(),
    error: z.string().optional(),
  }),
  execute: async (input) =&gt; {
    const result = await kieGetTask(input.taskId);
    if (!result.ok) return { success: false, taskId: input.taskId, error: result.error };

    const remoteUrls = result.data.resultUrls ?? [];
    const localPaths: string[] = [];
    if (result.data.state === &quot;success&quot; &amp;&amp; input.download !== false) {
      for (let i = 0; i &lt; remoteUrls.length; i++) {
        const base =
          input.fileName &amp;&amp; remoteUrls.length === 1
            ? input.fileName
            : input.fileName
              ? `${input.fileName}-${i + 1}`
              : undefined;
        const saved = await downloadToGenerated(remoteUrls[i], base);
        localPaths.push(saved.path);
      }
    }
    if (result.data.state === &quot;fail&quot;) {
      return {
        success: false,
        taskId: input.taskId,
        state: &quot;fail&quot;,
        error: result.data.failMsg || &quot;Task failed&quot;,
      };
    }
    return {
      success: true,
      taskId: input.taskId,
      state: result.data.state,
      remoteUrls,
      localPaths: localPaths.length ? localPaths : undefined,
    };
  },
});

export const listImageAssets = createTool({
  id: &quot;list_image_assets&quot;,
  description:
    &quot;List local images in workspace/images/uploads and workspace/images/generated. Use relative paths as localImagePaths.&quot;,
  inputSchema: z.object({
    subdir: z.enum([&quot;uploads&quot;, &quot;generated&quot;, &quot;all&quot;]).optional(),
  }),
  outputSchema: z.object({
    count: z.number(),
    assets: z.array(
      z.object({
        relativePath: z.string(),
        size: z.number(),
        modifiedAt: z.string(),
      }),
    ),
  }),
  execute: async (input) =&gt; {
    const { readdirSync, statSync, existsSync } = await import(&quot;node:fs&quot;);
    const { join } = await import(&quot;node:path&quot;);
    const dirs =
      input.subdir === &quot;uploads&quot;
        ? [IMAGES_UPLOADS]
        : input.subdir === &quot;generated&quot;
          ? [IMAGES_GENERATED]
          : [IMAGES_UPLOADS, IMAGES_GENERATED];
    const assets: { relativePath: string; size: number; modifiedAt: string }[] = [];
    for (const dir of dirs) {
      if (!existsSync(dir)) continue;
      for (const name of readdirSync(dir)) {
        if (name.startsWith(&quot;.&quot;)) continue;
        const full = join(dir, name);
        const st = statSync(full);
        if (!st.isFile()) continue;
        assets.push({
          relativePath: full.includes(&quot;/workspace/&quot;)
            ? full.slice(full.indexOf(&quot;images/&quot;))
            : full,
          size: st.size,
          modifiedAt: st.mtime.toISOString(),
        });
      }
    }
    return { count: assets.length, assets };
  },
});
```

Conecta las exportaciones:

```ts
export const kieImageTools = {
  listKieImageModels,
  generateKieImage,
  getKieImageTask,
  getKieCredits,
  listImageAssets,
};
```

&lt;Notice type=&quot;warning&quot; title=&quot;No saltes las subidas de referencia&quot;&gt;
Si el usuario proporciona una ruta de rostro o logo, subela y pasala a un modelo I2I/edit. Nunca vuelvas a puro text-to-image e inventes el rostro. Falla la llamada a la herramienta en su lugar.
&lt;/Notice&gt;

## Paso 4: Definir el agente de imagen

Crea `src/mastra/agents/image-agent.ts`. Un agente, instrucciones enfocadas, herramientas solo para imagenes (mas investigacion web opcional).

```ts
import { Agent } from &quot;@mastra/core/agent&quot;;
import {
  UnicodeNormalizer,
  PromptInjectionDetector,
} from &quot;@mastra/core/processors&quot;;
import { memory } from &quot;../memory&quot;;
import { workspace } from &quot;../workspaces&quot;;
import {
  listKieImageModels,
  generateKieImage,
  getKieImageTask,
  getKieCredits,
  listImageAssets,
} from &quot;../tools/kie-image&quot;;

const IMAGE_AGENT_MODEL =
  process.env.AGENT_IMAGE_MODEL ??
  process.env.AGENT_MODEL ??
  &quot;google/gemini-2.5-flash&quot;;

export const imageAgent = new Agent({
  id: &quot;image-agent&quot;,
  name: &quot;Image Agent&quot;,
  instructions: () =&gt; {
    const iso = new Date().toISOString().split(&quot;T&quot;)[0];
    const year = String(new Date().getUTCFullYear());
    return `TODAY IS ${iso}. THE CURRENT YEAR IS ${year}.

You are the Image Agent for YouTube thumbnails, blog covers, social graphics, product shots, and brand-aware edits.

## Capabilities
- List models with list_kie_image_models
- Generate/edit with generate_kie_image (async create + poll + download)
- Manage assets under images/uploads/ and images/generated/
- Check credits with get_kie_credits before bulk runs

## Workspace layout
- images/uploads/: logos, references, user sources
- images/generated/: Kie outputs

## Model defaults
| Use case | Preferred model |
|---|---|
| YouTube / blog 16:9 | nano-banana-2, seedream/5-pro-text-to-image, flux-2/pro-text-to-image |
| Fast draft | nano-banana-2-lite or seedream/5-lite-text-to-image |
| Readable text | gpt-image-2-text-to-image or ideogram/v3-text-to-image |
| Edit with logo/ref | google/nano-banana-edit, nano-banana-2 (+ localImagePaths) |
| Face lock | gpt-image-2-image-to-image (+ localImagePaths) |
| Upscale | topaz/image-upscale |
| Remove background | recraft/remove-background |

### Critical model IDs
- nano-banana-2, nano-banana-2-lite, nano-banana-pro: bare IDs (NOT google/nano-banana-2*)
- google/nano-banana, google/nano-banana-edit, google/imagen4: keep the google/ prefix
- Call list_kie_image_models when unsure; never invent prefixes

## Workflow
1. Clarify goal briefly (platform, aspect ratio, style). Prefer defaults: blog/YouTube → 16:9.
2. If logos/refs are needed, list_image_assets or ask the user to drop files in images/uploads/.
3. Write a strong prompt: subject, composition, lighting, style, palette, exact text, negatives.
4. Call generate_kie_image with a clear fileName.
5. Report local paths under images/generated/ and offer iteration.

## Prompt craft
- Be specific: camera angle, lighting, materials, mood, brand hex colors.
- Thumbnails: high contrast, large subject, 3–6 words of text, safe margins.
- Blog covers: readable at small size, match site aesthetic, avoid clutter.
- When using a logo: use an edit/I2I model and describe placement.

## Rules
- Prefer real tool work over guessing model ids.
- Do not invent file paths. List assets first.
- Kie remote URLs expire; always rely on local downloads.
- If KIE_API_KEY is missing, say so clearly.
- Keep responses concise: model, prompt used, output paths.`;
  },
  model: IMAGE_AGENT_MODEL,
  memory,
  workspace,
  inputProcessors: [
    new UnicodeNormalizer({
      stripControlChars: true,
      collapseWhitespace: true,
    }),
    // optional: PromptInjectionDetector with a cheap guard model
  ],
  tools: {
    listKieImageModels,
    generateKieImage,
    getKieImageTask,
    getKieCredits,
    listImageAssets,
  },
  defaultOptions: { maxSteps: Number(process.env.AGENT_IMAGE_MAX_STEPS ?? 25) },
});
```

Algunas decisiones de diseno que importan:

- `instructions` es una funcion para que la fecha se mantenga actual (mismo patron que el [agente asistente](/build-ai-agent-mastra/)).
- Los valores por defecto del modelo viven en el prompt, no solo en tu cabeza. El LLM sigue una tabla de forma mas confiable que un vago &quot;elige un buen modelo.&quot;
- `workspace` es opcional pero util para que el agente tambien pueda listar/leer archivos si habilitas las herramientas de workspace. Las herramientas dedicadas de list/generate son suficientes para una configuracion minima.
- `maxSteps: 25` es suficiente para list → generate → reintento opcional sin loops descontrolados.

## Paso 5: Registrar el agente

En `src/mastra/index.ts`:

```ts
import { Mastra } from &quot;@mastra/core/mastra&quot;;
import { assistant } from &quot;./agents/assistant&quot;;
import { imageAgent } from &quot;./agents/image-agent&quot;;

export const mastra = new Mastra({
  agents: {
    assistant,
    imageAgent,
  },
  // storage, logger, server (same as your existing app)
});
```

Si usas flags de dominio (deploys mas ligeros), filtralo:

```ts
// ENABLE_IMAGE=false to skip registration
if (process.env.ENABLE_IMAGE !== &quot;false&quot;) {
  agents.imageAgent = imageAgent;
}
```

## Paso 6: Ejecutar y probar

```bash
# .env must include:
# KIE_API_KEY=...
# OPENROUTER_API_KEY=...   (or your LLM provider)
# AGENT_MODEL=google/gemini-2.5-flash

npm run dev
# or: bun run dev
```

Abre Studio en `http://localhost:4111`, selecciona Image Agent y prueba:

```text
Create a 16:9 blog cover for an article about adding an image agent to Mastra.
Style: clean purple gradient tech illustration, subtle node graph, title text
&quot;Mastra Image Agent&quot;, high contrast, no clutter. Save as mastra-image-cover.
```

Lo que deberias ver en los traces:

1. Opcional `list_kie_image_models` o eleccion directa de modelo (`nano-banana-2` / Seedream / Flux)
2. `generate_kie_image` con `aspectRatio: &quot;16:9&quot;` y un prompt largo
3. Poll hasta `state: success`
4. Ruta local como `workspace/images/generated/mastra-image-cover.png`

### Flujo de logo / referencia de rostro

```bash
mkdir -p workspace/images/uploads
cp ~/Downloads/logo.png workspace/images/uploads/logo.png
```

Luego en el chat:

```text
Use images/uploads/logo.png. Generate a YouTube thumbnail 16:9 for
&quot;Self-Host Mastra on a VPS&quot;. Place the logo bottom-left, keep it crisp,
dark background, large bold title, high contrast.
```

El agente deberia pasar `localImagePaths: [&quot;images/uploads/logo.png&quot;]` a un modelo edit/I2I como `google/nano-banana-edit` o `nano-banana-2`, no inventar el logo desde texto.

## Tabla rapida de modelos

| Objetivo | Model id | Notas |
|---|---|---|
| Portada de blog por defecto | `nano-banana-2` | Id bare; refs opcionales `image_input`; 1K/2K/4K |
| Fotorreal | `seedream/5-pro-text-to-image` | Necesita `quality: basic\|high` |
| Comercial nitido | `flux-2/pro-text-to-image` | Graficos de marketing |
| Texto en imagen | `gpt-image-2-text-to-image` o `ideogram/v3-text-to-image` | Tipografia |
| Editar / logo | `google/nano-banana-edit` | Campo: `image_urls` |
| Bloqueo de rostro | `gpt-image-2-image-to-image` | Campo: `input_urls` |
| Upscale | `topaz/image-upscale` | Verifica docs para campos de factor |
| Recorte | `recraft/remove-background` | A menudo un campo singular `image` |

Los model ids cambian conforme Kie incorpora nuevos lanzamientos. Trata tu catalogo en `kie-client.ts` como la fuente de verdad, y manten `list_kie_image_models` en el cinturon de herramientas.

## Patrones de prompt que funcionan

**Portada de blog (16:9)**

```text
Wide 16:9 blog hero image. Subject: abstract TypeScript agent nodes connected
by thin purple lines on a soft lavender gradient. Clean modern tech illustration,
flat with subtle depth, generous negative space on the right for title overlay.
No watermarks, no tiny unreadable text, no crowded UI mockups. High contrast.
```

**Miniatura de YouTube (16:9)**

```text
YouTube thumbnail 16:9, high contrast, large central subject (developer at laptop
with glowing purple AI node graph). Bold 4-word title &quot;Build Image Agents&quot; in
thick white sans-serif with dark outline. Leave safe margins. Punchy colors,
shallow depth of field, no busy background.
```

**Composicion con logo**

```text
Place the provided logo in the bottom-left corner, keep proportions, do not
distort or recolor the logo mark. Dark navy background, soft bokeh lights,
product photography lighting, 16:9.
```

## Consejos de produccion

1. Descarga todo. Kie mantiene medios ~14 dias. Tu workspace es el almacen duradero.
2. Falla fuerte en refs faltantes. Si la subida falla, devuelve un error. El fallback silencioso a T2I arruina el trabajo de marca.
3. Vigila los creditos. Llama `get_kie_credits` antes de ejecuciones por lotes.
4. Separa el agente del asistente. El trabajo de imagen quema steps y tokens en prompts largos. Un agente dedicado mantiene al asistente de codificacion enfocado.
5. Limites de tasa. Por defecto es aproximadamente 20 nuevos trabajos por 10 segundos. Para portadas por lotes, pon una pequena pausa entre creaciones.
6. Manten secretos en el servidor. `KIE_API_KEY` solo en `.env` / secretos del host. Nunca lo envies al navegador.
7. Webhook opcional. Para modelos de video largos despues, prefiere `callBackUrl` sobre polls largos. Las imagenes generalmente funcionan bien con polling de 3-15s.

## Solucion de problemas

&lt;Accordion&gt;
&lt;details&gt;
&lt;summary&gt;401 / &quot;You do not have access permissions&quot;&lt;/summary&gt;

Header `Authorization: Bearer ...` faltante o incorrecto, o `KIE_API_KEY` vacio. Confirma la key en [kie.ai/api-key](https://kie.ai/api-key) y que el proceso realmente cargo `.env`.
&lt;/details&gt;

&lt;details&gt;
&lt;summary&gt;Model not supported / invalid model&lt;/summary&gt;

Id incorrecto. Nano Banana 2 es `nano-banana-2`, no `google/nano-banana-2`. Llama `list_kie_image_models` y copia el id exactamente de tu catalogo / [docs.kie.ai](https://docs.kie.ai/).
&lt;/details&gt;

&lt;details&gt;
&lt;summary&gt;Tarea atascada en waiting / queuing / generating&lt;/summary&gt;

Aun ejecutandose. Sigue haciendo poll. Aumenta `timeoutMs` para modelos pesados. Verifica [kie.ai/logs](https://kie.ai/logs) para el estado real y mensaje de fallo.
&lt;/details&gt;

&lt;details&gt;
&lt;summary&gt;Subida exitosa pero sin fileUrl&lt;/summary&gt;

Parsea `downloadUrl` asi como `fileUrl`. El host de subida de Kie puede retornar cualquiera de los dos campos dependiendo del endpoint.
&lt;/details&gt;

&lt;details&gt;
&lt;summary&gt;La imagen se ve mal / el rostro no coincide&lt;/summary&gt;

Usaste un modelo T2I puro sin referencias, o la subida nunca se adjunto. Confirma que `localImagePaths` se resolvio, la subida retorno una URL y el modelo soporta entradas de imagen (`google/nano-banana-edit`, `nano-banana-2`, `gpt-image-2-image-to-image`, Seedream I2I). Tambien verifica el nombre del campo de imagen: `image_input` vs `image_urls` vs `input_urls`.
&lt;/details&gt;

&lt;details&gt;
&lt;summary&gt;HTTP 429&lt;/summary&gt;

Alcanzaste el limite de tasa de creacion. Haz back off y reintenta. Contacta soporte de Kie si necesitas limites mas altos para volumen de produccion.
&lt;/details&gt;

&lt;details&gt;
&lt;summary&gt;Tarea Seedream rechazada al crear&lt;/summary&gt;

Seedream 5 Pro requiere `quality` (`basic` o `high`) y `aspect_ratio`. La herramienta de ejemplo por defecto pone `quality` en `basic` cuando el model id empieza con `seedream/`.
&lt;/details&gt;
&lt;/Accordion&gt;

## Donde encaja esto con el resto de Mastra

- Asistente base: [Construye Tu Propio Agente IA con Mastra](/build-ai-agent-mastra/)
- Eleccion de framework: [Mastra vs Eve](/mastra-vs-eve-typescript-ai-agents/)
- Herramientas de investigacion web: [TinyFish para agentes IA](/es/tinyfish-busqueda-web-agentes-ia/)
- Resena del producto Kie (precios, competidores, pros/contras): [Kie.ai Review 2026](/kie-ai-review/)
- Plataforma Kie: [go.bitdoze.com/kie-ai](https://go.bitdoze.com/kie-ai) · docs en [docs.kie.ai](https://docs.kie.ai/)

Una vez que la generacion de imagenes funciona, el mismo patron se extiende a video (Veo, Kling, Seedance en Kie): misma forma createTask/poll, timeouts mas largos, diferentes model ids. Mantengo eso como un agente de video separado para que los presupuestos de steps y las instrucciones se mantengan limpios.

&lt;Button text=&quot;Obtener una API Key de Kie.ai&quot; link=&quot;https://go.bitdoze.com/kie-ai&quot; variant=&quot;solid&quot; color=&quot;purple&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;
&lt;Button text=&quot;Guia del Asistente Mastra&quot; link=&quot;/build-ai-agent-mastra/&quot; variant=&quot;outline&quot; color=&quot;purple&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

&lt;Notice type=&quot;success&quot; title=&quot;Siguiente paso&quot;&gt;
Registra el agente de imagen junto a tu asistente, abre Studio y genera una portada en `workspace/images/generated/`. Si algo falla, verifica la pagina de logs de Kie y el string de error de la herramienta primero. La mayoria de los problemas son model ids incorrectos o `KIE_API_KEY` faltante.
&lt;/Notice&gt;</content:encoded><category>ai</category><category>mastra</category><category>herramientas-ia</category><category>generacion-imagenes</category></item><item><title>Resena Kie.ai 2026: API Barata de Imagen, Video y LLM IA (Pros, Contras, Alternativas)</title><link>https://www.bitdoze.com/es/resena-kie-ai/</link><guid isPermaLink="true">https://www.bitdoze.com/es/resena-kie-ai/</guid><description>Resena honesta de Kie.ai para desarrolladores: API de IA unificada para Nano Banana, GPT Image, Veo, Kling, Suno, Claude y mas. Precios, como lo uso con Mastra, vs fal.ai y Replicate, y cuando saltarlo.</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

Me canse de manejar cinco APIs de imagen solo para publicar portadas de blog y miniaturas de YouTube. Google tiene un portal. OpenAI tiene otro. Flux quiere algo distinto. Video es peor: Veo, Kling, Seedance cada uno con sus propias claves, facturacion y peculiaridades async.

[Kie.ai](https://go.bitdoze.com/kie-ai) vende una propuesta simple: una API, una billetera, muchos de los modelos que la gente realmente quiere, generalmente mas baratos que los endpoints oficiales. Imagen, video, musica y chat bajo el mismo flujo `createTask`.

Uso Kie como backend de generacion para un [agente de imagen Mastra](/es/agente-imagen-mastra-kie-ai/) que escribe prompts, crea trabajos, hace poll hasta que terminan, y guarda PNGs en un workspace. Esta resena es que es Kie, para que es bueno, donde es mas debil que fal.ai o Replicate, y si el descuento de precio vale los compromisos.

&lt;Button text=&quot;Prueba Kie.ai (Obtener API Key)&quot; link=&quot;https://go.bitdoze.com/kie-ai&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;
&lt;Button text=&quot;Conecta Kie a un Agente de Imagen Mastra&quot; link=&quot;/es/agente-imagen-mastra-kie-ai/&quot; variant=&quot;outline&quot; color=&quot;purple&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Que cubre esta resena&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Que es Kie.ai y que servicios ofrece&lt;/li&gt;
&lt;li&gt;Familias de modelos de imagen, video, musica y LLM (con precios de ejemplo)&lt;/li&gt;
&lt;li&gt;Como funciona la API async (crear tarea, poll, webhook, subir archivos)&lt;/li&gt;
&lt;li&gt;Como uso Kie para portadas de blog y miniaturas con Mastra&lt;/li&gt;
&lt;li&gt;Kie vs fal.ai, Replicate, OpenRouter y APIs oficiales&lt;/li&gt;
&lt;li&gt;Pros, contras, notas de precios y quien deberia saltarlo&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

&lt;Notice type=&quot;warning&quot; title=&quot;Divulgacion de afiliados&quot;&gt;
Algunos enlaces de Kie.ai en este articulo son enlaces de afiliados (`https://go.bitdoze.com/kie-ai`). Uso el producto en produccion para generacion de imagenes. Precios, listas de modelos y descuentos cambian; siempre verifica la [pagina de precios](https://kie.ai/pricing) y [docs](https://docs.kie.ai/) oficiales.
&lt;/Notice&gt;

## Que es Kie.ai?

**Kie.ai** (a menudo escrito KIE o Kie AI) es una plataforma para desarrolladores que revende y unifica acceso a modelos generativos de terceros. Creas una API key, cargas creditos, y llamas a una Market API compartida en vez de integrar cada proveedor por separado.

Piensa en ello como una pasarela multimodelo para generacion, no un producto de UI de chat. El producto es la API:

- Un header de auth: `Authorization: Bearer YOUR_API_KEY`
- Una API de jobs para la mayoria de modelos de media: crear tarea → poll o webhook
- Un balance de creditos para imagen, video, audio y muchos modelos de chat
- Un Playground web para probar prompts antes de escribir codigo
- Logs para cada tarea (inputs, estado, creditos, resultados)

Datos publicos de su sitio (verifica los numeros actuales tu mismo):

| Dato | Detalle |
|---|---|
| Desarrolladores | 120,000+ |
| Paises | 80+ |
| Cobertura de modelos | 100+ entre imagen, video, musica, LLM |
| Ahorro tipico | ~30–50% vs APIs oficiales; modelos seleccionados mayor |
| Trabajos fallidos | La plataforma indica que no se cobran |
| Expiracion de creditos | Los creditos no expiran |
| Prueba gratuita | Usuarios nuevos reciben creditos de prueba + Playground |

Si quieres una superficie de integracion unica para &quot;genera una portada, luego quizas un video corto, luego quizas musica,&quot; Kie esta construido para eso. Si solo necesitas un modelo oficial y SLA del proveedor, compra la API oficial.

## Que servicios ofrece Kie?

Kie agrupa modelos en un Market. Las categorias importan mas que las marcas cuando disenas un agente.

### 1. Generacion y edicion de imagenes

Esto es lo que mas uso. Familias tipicas:

| Familia | Modelos de ejemplo | Buen para |
|---|---|---|
| Google Nano Banana | `google/nano-banana`, `nano-banana-2`, `nano-banana-pro`, `google/nano-banana-edit` | Portadas de blog, graficos sociales, borradores rapidos, ediciones con refs |
| Seedream | `seedream/5-pro-text-to-image`, variantes I2I | Fotos estilo producto fotorrealista, miniaturas |
| Flux-2 | `flux-2/pro-text-to-image`, variantes flex | Graficos comerciales nitidos |
| GPT Image | `gpt-image-2-text-to-image`, `gpt-image-2-image-to-image` | Seguimiento de instrucciones, texto en imagen, bloqueo de identidad |
| Ideogram | `ideogram/v3-text-to-image` | Tipografia legible, texto estilo logo |
| Imagen | `google/imagen4`, fast/ultra | Fotorrealismo de alta fidelidad |
| Qwen / Z-Image | Qwen T2I/edit, Z-Image | Prompts multilingues, arte estilizado |
| Utilidad | Topaz upscale, Recraft remove-bg / crisp upscale | Pipeline de acabado |

Precios publicos de imagen de ejemplo desde la pagina de precios de Kie (USD, sujetos a cambio):

| Modelo (aprox.) | Precio Kie | Oficial (listado) | Descuento (listado) |
|---|---|---|---|
| Nano Banana 2 1K | ~$0.04 / imagen | ~$0.08 | ~50% |
| Nano Banana 2 2K | ~$0.06 / imagen | ~$0.12 | ~50% |
| Nano Banana 2 4K | ~$0.09 / imagen | ~$0.16 | ~44% |
| GPT Image 2 1K T2I | ~$0.03 / imagen | ~$0.22 | ~86% |
| Seedream 5 Pro 1K | ~$0.035 / imagen | ~$0.045 | ~22% |

Esos diferenciales son por los que Kie es atractivo para generacion de portadas de alto volumen. Siempre re-verifica [kie.ai/pricing](https://kie.ai/pricing).

### 2. Generacion de video

Modelos pesados para text-to-video e image-to-video:

- Google Veo 3.1 (niveles de calidad 1080p / 4K)
- Kling 3.0 y lineas anteriores de Kling (multi-shot, audio nativo en versiones mas recientes)
- ByteDance Seedance 2.0 (incluyendo variantes Fast / Mini)
- Grok Imagine video
- Wan, Hailuo, Runway Aleph, y otros en el Market

Video es donde la API async unificada ayuda. Los trabajos tardan mas; o haces poll de `recordInfo` o pasas un webhook. Ejemplo de precios listados: Veo 3.1 calidad 1080p alrededor de **$1.28** en Kie vs tasas oficiales mas altas; Grok Imagine video se cobra por segundo con un gran descuento vs oficial. De nuevo: la pagina en vivo gana sobre este articulo.

### 3. Musica y audio

- Suno (generacion de musica, covers, herramientas relacionadas con stems segun el endpoint)
- ElevenLabs (modelos TTS / dialogue via Market)
- Otros modelos de speech / isolation a medida que los integran

Todavia uso [Fish Audio](/es/resena-fish-audio/) para mi propio flujo de clonacion de voz. Kie es util si quieres musica estilo Suno o acceso a ElevenLabs en la misma billetera de creditos que las imagenes.

### 4. APIs de Chat / LLM

Kie tambien lista modelos de chat (familias Claude, GPT, Gemini, Grok) con precios por token frecuentemente muy por debajo de los precios oficiales de lista. Estilo de ejemplo de sus tablas: grandes descuentos en Claude Opus / Sonnet y niveles de chat GPT.

Para coding de agentes del dia a dia todavia prefiero **OpenRouter** o **OpenCode Go** porque el enrutamiento de modelos, el ecosistema de herramientas y la fiabilidad para loops de agentes son mas maduros alli. Trato el chat de Kie como una opcion, no mi cerebro por defecto para [agentes Mastra](/es/construir-agente-ia-mastra/).

### 5. Servicios de plataforma alrededor de los modelos

| Servicio | Por que importa |
|---|---|
| API keys | Limites de tasa, lista de IPs permitidas opcional |
| Playground | Probar un modelo antes de codificar |
| Logs | Historial de tareas, creditos, errores |
| Facturacion / billetera | Una sola recarga; facturas para negocios |
| API de subida de archivos | Alojar referencias para I2I/edit (URLs temporales) |
| Webhooks | Evitar long polling en trabajos de video lentos |
| Soporte VIP | Canales Discord / Telegram para usuarios de API |

## Como funciona la API de Kie (version simple)

No obtienes un &quot;aqui esta un PNG&quot; sincrono para la mayoria de los modelos del Market. Flujo:

```text
1. POST https://api.kie.ai/api/v1/jobs/createTask
   Authorization: Bearer YOUR_API_KEY
   body: { model, input, callBackUrl? }

2. Response 200 + taskId  →  tarea aceptada, NO terminada

3a. Poll GET /api/v1/jobs/recordInfo?taskId=...
    hasta que state = success | fail
    (intermedio: waiting | queuing | generating)
 OR
3b. Esperar callback del webhook

4. Leer URLs de resultados desde resultJson
5. Descargar archivos tu mismo (media retenida ~14 dias)
```

Verificacion de creditos:

```http
GET https://api.kie.ai/api/v1/chat/credit
Authorization: Bearer YOUR_API_KEY
```

Limite de tasa por defecto (desde docs): alrededor de **20 nuevas solicitudes cada 10 segundos**. Las tareas concurrentes en ejecucion son relativamente altas. HTTP **429** significa retroceder; los creates rechazados no se encolan.

**Retencion:** media generada ~**14 dias**, logs ~**2 meses**. Tu app deberia descargar y almacenar assets si importan. Las subidas de archivos para referencias usan un host separado (`https://kieai.redpandaai.co`) y tambien son temporales.

**Seguridad:** nunca pongas `KIE_API_KEY` en codigo frontend o repos publicos. Usa solo env del lado del servidor.

Docs: [docs.kie.ai](https://docs.kie.ai/) · Market quickstart: [Market API](https://docs.kie.ai/market/quickstart)

&lt;Button text=&quot;Crea una API key gratis de Kie&quot; link=&quot;https://go.bitdoze.com/kie-ai&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

## Como uso Kie.ai (flujo real)

Ejecuto un stack de [Mastra](https://mastra.ai/) para investigacion, contenido y media. El asistente de coding usa busqueda web ([TinyFish](/es/tinyfish-busqueda-web-agentes-ia/)). El agente de imagen usa Kie.

### Que genero con Kie

1. Imagenes de portada de blog (16:9) para posts de bitdoze.com
2. Miniaturas de YouTube con alto contraste y titulos cortos
3. Ediciones con logo (dejo un logo en `workspace/images/uploads/`, modelo I2I/edit)
4. Upscale / eliminacion de fondo cuando un asset final necesita pulido

### Lo que el agente hace por mi

- Elige un model id de un catalogo curado (`nano-banana-2`, Seedream Pro, Flux-2 Pro, GPT Image 2, etc.)
- Escribe un prompt detallado (sujeto, iluminacion, paleta, texto, negativos)
- Llama a herramientas que envuelven Kie: crear tarea → poll → descargar a `workspace/images/generated/`
- Sube imagenes de referencia locales al host de archivos de Kie cuando hace bloqueo de cara/logo
- Verifica creditos restantes antes de ejecuciones masivas

Escribi una guia completa de integracion aqui: [Agrega un Agente de Imagen IA a Mastra con Kie.ai](/es/agente-imagen-mastra-kie-ai/).

### Por que no llamar a Google/OpenAI directamente?

Podria. Para un solo modelo, las APIs oficiales funcionan bien. Mi problema era comprar modelos:

- Nano Banana 2 para velocidad + calidad en portadas
- Seedream cuando quiero un aspecto fotorrealista diferente
- GPT Image cuando el texto en imagen debe ser correcto
- Topaz cuando necesito un upscale limpio

Sin Kie, eso es cuatro cuentas, cuatro SDKs, cuatro dashboards de facturacion. Con Kie, es una `KIE_API_KEY` y un string de modelo.

### Para que NO uso Kie (hoy)

- LLM principal para agentes de coding (OpenRouter / OpenCode Go)
- Clonacion de voz de mi propia voz (Fish Audio)
- Chat mision-critica con requerimientos de SLA del proveedor

Kie es la capa de generacion de media, no todo mi stack de IA.

## Precios: como gana dinero Kie

Kie es creditos prepagados. Recargas una billetera y gastas por generacion (o por token para chat).

### Reglas que importan

- Tareas fallidas: la plataforma indica **$0** (no se te cobra por generaciones fallidas)
- Los creditos no expiran
- Precios publicos transparentes con columnas &quot;Kie vs oficial / fal&quot; en muchas filas
- Recargas mas grandes pueden incluir creditos de bonificacion (ver pagina de facturacion)
- Facturas de negocio disponibles despues de la recarga

### Modelo mental de costos

| Carga de trabajo | Unidad aproximada | Notas |
|---|---|---|
| Portadas de blog | por imagen | Centavos, no dolares, en modelos comunes |
| Miniaturas | por imagen | Igual; las iteraciones se acumulan si regeneras mucho |
| Upscale / remove-bg | por imagen | Modelos de utilidad, usualmente baratos relativo a video |
| Video IA corto | por video o por segundo | Dolares, no centavos; prueba en Playground primero |
| Chat | por 1M tokens | Frecuentemente descuentos profundos vs precio de lista |

Si generas 50 portadas al mes a ~$0.04–$0.09 cada una, todavia estas en territorio de dinero de cafe. Si ejecutas pipelines de video continuos, modela el presupuesto con cuidado y monitorea [logs](https://kie.ai/logs).

## Pros y contras

### Pros

- Una integracion para muchos modelos de imagen/video/musica/chat
- Precios agresivos vs APIs oficiales en modelos populares
- Sin cargo en trabajos fallidos (amigable para loops de agentes que reintentan)
- Los creditos nunca expiran
- Playground + logs hacen que depurar sea menos doloroso
- El patron async es consistente entre modelos del Market
- API de subida de archivos para imagenes de referencia
- Buen ajuste para herramientas de agentes (Mastra, backends personalizados, automatizacion)

### Contras

- No es el proveedor oficial: la estabilidad puede rezagarse respecto a APIs first-party (ellos mismos lo dicen)
- Retencion de media de 14 dias te obliga a descargar resultados
- Los model ids y nombres de campos de input difieren (`image_urls` vs `image_input` vs `input_urls`); tu cliente debe mapearlos
- El soporte es canales comunitarios/privados, no TAM enterprise para la mayoria de usuarios
- El enrutamiento de Chat/LLM es menos motivo para cambiar si ya usas OpenRouter
- Calidad de docs varia por pagina de modelo; espera algo de prueba y error
- Los limites de tasa pueden requerir un ticket de soporte para productos de alto QPS

## Kie.ai vs alternativas

Aqui esta el panorama competitivo para desarrolladores en 2026.

| Plataforma | Mejor en | Debil en | Cuando la elijo |
|---|---|---|---|
| [Kie.ai](https://go.bitdoze.com/kie-ai) | Media multimodelo barata (imagen/video/musica) + API de jobs simple | SLA oficial, soporte enterprise mas profundo | Portadas, miniaturas, experimentos multimodelo |
| fal.ai | Inferencia rapida, catalogo enorme de modelos, fuerte DX de media | Puede ser caro; otra stack que aprender | Cuando un modelo/pipeline especifico de fal es el mejor en su clase |
| Replicate | Hosting de modelos facil, ecosistema abierto enorme | Costo a escala; menos &quot;todos los modelos cerrados estrella mas baratos&quot; | Pesos abiertos, deploys de modelos personalizados |
| OpenRouter | Enrutamiento de Chat/LLM, amigable para agentes | No es primera opcion para generacion de media | Cerebros de agentes, apps multi-LLM |
| APIs oficiales (Google, OpenAI, etc.) | Funciones first-party, soporte, flags mas nuevas | Muchas claves, frecuentemente precio de lista mas alto | Compliance, SLA, productos de un solo proveedor |
| Together / Fireworks / Groq | Inferencia de LLMs abiertos rapida | No es un supermercado completo de imagen/video | Modelos de texto de alto rendimiento |

### Kie vs fal.ai

Ambos venden acceso de desarrollador a modelos generativos. fal es frecuentemente mas fuerte en branding de plataforma de inferencia y ciertos pipelines de modelos. Kie se apoya fuerte en tablas de comparacion de precios y una billetera de creditos que abarca imagen + video + musica + chat.

Si tu necesidad principal es &quot;acceso mas barato y confiable a Nano Banana / GPT Image / Veo / Kling con una clave,&quot; prueba Kie primero. Si ya estas profundamente en el ecosistema y herramientas de latencia de fal, quedate alli a menos que el precio te fuerce a moverte.

### Kie vs Replicate

Replicate brilla para ejecuciones de modelos open-source y deployments personalizados. Kie brilla para modelos comerciales cerrados / populares con descuento. Trabajos diferentes. Muchos equipos usan ambos.

### Kie vs OpenRouter

No los trates como el mismo producto.

- OpenRouter → LLMs para agentes y apps
- Kie → media generativa (+ descuentos de chat opcionales)

Mi stack: OpenRouter/OpenCode para el cerebro del agente, Kie para herramientas de imagen.

### Kie vs APIs oficiales de imagen de Google / OpenAI

Lo oficial gana en:

- Nuevas funciones el dia uno
- Contratos de soporte del proveedor
- Hoja de ruta de producto mas clara a largo plazo

Kie gana en:

- Multimodelo sin multi-facturacion
- Menor costo unitario en muchos modelos listados
- Una integracion async para agentes

Para un motor de contenido personal y experimentos de SaaS pequenos, Kie es suficiente. Para un banco o un proceso de adquisicion estricto, empieza con lo oficial.

## Quien deberia usar Kie.ai?

**Buen ajuste**

- Indie hackers y sitios de contenido generando muchas portadas/miniaturas
- Constructores de agentes IA que necesitan herramientas de imagen/video detras de una clave
- Startups probando multiples modelos de media antes de fijar un proveedor
- Cualquiera que odia mantener cinco SDKs de proveedores para trabajos similares

**Mal ajuste**

- Equipos que necesitan un SLA enterprise firmado solo con Google/OpenAI
- Apps que no pueden tolerar inestabilidad ocasional del lado del proveedor
- Productos que deben mantener cada byte dentro de un contrato de region de nube especifica
- Usuarios que solo necesitan un modelo de chat gratuito (usar niveles gratuitos en otro lado)

## Como empezar en 10 minutos

1. Registrate en [Kie.ai](https://go.bitdoze.com/kie-ai)
2. Crea una API key en [kie.ai/api-key](https://kie.ai/api-key)
3. Prueba un modelo en el Playground
4. Llama a createTask desde tu backend
5. Haz poll de `recordInfo` (o configura un webhook)
6. Descarga la URL del resultado a tu propio almacenamiento

Ejemplo minimo de create:

```bash
curl -X POST &quot;https://api.kie.ai/api/v1/jobs/createTask&quot; \
  -H &quot;Authorization: Bearer $KIE_API_KEY&quot; \
  -H &quot;Content-Type: application/json&quot; \
  -d &apos;{
    &quot;model&quot;: &quot;nano-banana-2&quot;,
    &quot;input&quot;: {
      &quot;prompt&quot;: &quot;16:9 tech blog cover, purple gradient, clean node graph, high contrast&quot;,
      &quot;aspect_ratio&quot;: &quot;16:9&quot;,
      &quot;resolution&quot;: &quot;1K&quot;
    }
  }&apos;
```

Luego haz poll:

```bash
curl &quot;https://api.kie.ai/api/v1/jobs/recordInfo?taskId=YOUR_TASK_ID&quot; \
  -H &quot;Authorization: Bearer $KIE_API_KEY&quot;
```

Para una integracion completa de agente (herramientas, subidas, descargas locales), usa la [guia del agente de imagen Mastra](/es/agente-imagen-mastra-kie-ai/).

## FAQ

&lt;Accordion&gt;
&lt;details&gt;
&lt;summary&gt;Es Kie.ai gratis?&lt;/summary&gt;

Las cuentas nuevas tipicamente reciben creditos de prueba y pueden usar el Playground. El uso continuo se paga desde una billetera de creditos. Verifica las ofertas actuales al registrarte.
&lt;/details&gt;

&lt;details&gt;
&lt;summary&gt;Expiran los creditos de Kie?&lt;/summary&gt;

No. FAQ oficial: los creditos no expiran.
&lt;/details&gt;

&lt;details&gt;
&lt;summary&gt;Se me cobra si la generacion falla?&lt;/summary&gt;

Kie indica que las tareas fallidas no se cobran. Esa es una de las mejores politicas para reintentos de agentes. Confirma en su billing/FAQ si lo necesitas para contabilidad.
&lt;/details&gt;

&lt;details&gt;
&lt;summary&gt;Cuanto tiempo se almacenan las imagenes y videos?&lt;/summary&gt;

Alrededor de 14 dias para archivos de media. Descarga cualquier cosa que necesites permanentemente. Los logs se quedan mas (~2 meses). Los archivos de referencia subidos tambien son temporales.
&lt;/details&gt;

&lt;details&gt;
&lt;summary&gt;Es Kie seguro para produccion?&lt;/summary&gt;

Muchos equipos ejecutan cargas de trabajo de produccion en el. Kie mismos notan que la estabilidad puede ser ligeramente inferior a la de proveedores oficiales como compensacion por el precio. Para mi pipeline de imagenes eso es aceptable; para sistemas criticos de vida, evalua con cuidado y manten fallbacks.
&lt;/details&gt;

&lt;details&gt;
&lt;summary&gt;Puedo usar Kie solo para imagenes?&lt;/summary&gt;

Si. Asi es como empece. No tienes que tocar video o musica.
&lt;/details&gt;

&lt;details&gt;
&lt;summary&gt;Kie.ai vs fal.ai, cual es mas barato?&lt;/summary&gt;

Depende del modelo y la semana. La pagina de precios de Kie frecuentemente muestra columnas de Kie vs oficial/fal. Compara el modelo exacto que necesitas en vez de confiar en un ganador global.
&lt;/details&gt;

&lt;details&gt;
&lt;summary&gt;Donde obtengo soporte?&lt;/summary&gt;

El dashboard enlaza a canales VIP de Discord/Telegram; el email es `support@kie.ai`. Prefiere los canales privados para problemas de API.
&lt;/details&gt;
&lt;/Accordion&gt;

## Veredicto

Kie.ai es una opcion fuerte si quieres generacion de media multimodelo mas barata sin construir una matriz de proveedores. Una clave, una billetera, jobs async que los agentes pueden envolver limpiamente.

Lo uso para trabajo de contenido real: portadas de blog, miniaturas y ediciones de marca a traves de un agente de imagen Mastra. No lo uso como mi unica plataforma de IA. Los LLMs se quedan en OpenRouter/OpenCode; la clonacion de voz se queda en Fish Audio; Kie maneja la capa de &quot;haz la imagen&quot;.

Si eso coincide con tu stack, empieza con creditos de prueba, genera diez portadas, mira los logs, y decide con costos unitarios reales, no solo tablas de marketing.

&lt;Button text=&quot;Prueba Kie.ai&quot; link=&quot;https://go.bitdoze.com/kie-ai&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;
&lt;Button text=&quot;Construye un Agente de Imagen Mastra con Kie&quot; link=&quot;/es/agente-imagen-mastra-kie-ai/&quot; variant=&quot;outline&quot; color=&quot;purple&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;
&lt;Button text=&quot;Construye un Agente de Coding Mastra&quot; link=&quot;/es/construir-agente-ia-mastra/&quot; variant=&quot;outline&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

&lt;Notice type=&quot;success&quot; title=&quot;Conclusion&quot;&gt;
Kie.ai = API de generacion multimodelo con descuento. Buena para herramientas de imagen/video en agentes y sitios de contenido. Compara precios por modelo, descarga tus outputs, y manten un fallback oficial si necesitas SLA del proveedor.
&lt;/Notice&gt;</content:encoded><category>ai</category><category>herramientas-ia</category><category>api</category><category>generacion-imagenes</category></item><item><title>Montar un Bucket S3 como Sistema de Archivos en un VPS con ZeroFS y JuiceFS</title><link>https://www.bitdoze.com/es/montar-bucket-s3-sistema-archivos-vps/</link><guid isPermaLink="true">https://www.bitdoze.com/es/montar-bucket-s3-sistema-archivos-vps/</guid><description>Convierte un bucket S3 de Bunny.net en un sistema de archivos POSIX real en tu VPS. Configuración paso a paso de ZeroFS y JuiceFS, con caché, servicios systemd y cuál elegir.</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

El almacenamiento de objetos es barato. Un VPS con un disco local grande no lo es. Así que el movimiento obvio es guardar el grueso de tus datos en un bucket S3 y pagar solo por el almacenamiento que realmente usas, mientras tu servidor se mantiene pequeño y rápido. El problema es que S3 habla HTTP, no POSIX, así que la mayoría de las aplicaciones no pueden escribir en él como en una carpeta normal.

Esa brecha es la que resuelven las capas de sistema de archivos. Se sitúan entre tus aplicaciones y el bucket, presentando un punto de montaje normal como `/mnt/data` mientras mueven los bytes hacia y desde el almacenamiento de objetos por detrás. Llevo un tiempo usando esta configuración en varios servidores, y que Bunny.net haya añadido una [API compatible con S3 a su almacenamiento](https://docs.bunny.net/storage/s3) lo hizo mucho más atractivo, sobre todo porque su almacenamiento cuesta $0,01/GB sin tarifas de egress a través de su CDN.

Esta guía recorre dos herramientas que hacen bien el trabajo: **ZeroFS** y **JuiceFS**. Ambas convierten un bucket S3 en un sistema de archivos montable en un VPS, pero llegan ahí por caminos muy distintos. Te mostraré cómo configurar cada una contra un bucket de Bunny.net y luego te ayudaré a elegir.

&lt;Notice type=&quot;success&quot; title=&quot;Prueba Bunny.net gratis durante 14 días&quot;&gt;
  Necesitarás un bucket compatible con S3 para esta guía. [Regístrate en Bunny.net](https://go.bitdoze.com/bunny) sin tarjeta de crédito y obtén una prueba de 14 días. Mi [reseña completa de Bunny.net](/es/resena-bunny-net/) cubre el resto de la plataforma.
&lt;/Notice&gt;

## Por qué montar S3 como sistema de archivos

Antes del cómo, aquí va el por qué. Apuntar un sistema de archivos al almacenamiento de objetos te da unas cuantas cosas que un disco de VPS normal no puede:

&lt;ListCheck&gt;
- **Capacidad barata y elástica**: Pagas por GB en lugar de redimensionar un volumen cada vez que te quedas corto
- **Durabilidad fuera del servidor**: Los archivos viven en almacenamiento de objetos replicado, no en un único disco que puede fallar
- **Almacenamiento compartido**: Varios servidores pueden leer del mismo montaje respaldado por el bucket
- **Sin cambios en las apps**: El software escribe en una ruta, no en un SDK, así que tus herramientas actuales simplemente funcionan
- **Copias de seguridad y medios sencillos**: Ideal para bibliotecas multimedia, backups, archivos y activos estáticos
&lt;/ListCheck&gt;

Eso sí, no es magia. Los viajes de ida y vuelta a S3 tardan entre 50 y 300 ms, así que sin caché local un montaje básico se siente dolorosamente lento con archivos pequeños. Ambas herramientas de abajo lo resuelven con una caché local, que es la razón principal para usarlas en lugar de algo más simple como `s3fs`.

## Las dos opciones comparadas

ZeroFS y JuiceFS llegan al mismo destino con arquitecturas diferentes. Esto importa para la configuración y para qué cargas de trabajo maneja bien cada una.

| | **ZeroFS** | **JuiceFS** |
|---|---|---|
| Lenguaje | Rust | Go |
| Metadatos | Guardados en el bucket (árbol LSM) | Base de datos aparte (Redis, etc.) |
| Servicios extra | Ninguno necesario | Necesita un motor de metadatos |
| Protocolos | NFS, 9P, NBD | Montaje FUSE, gateway S3 |
| Cifrado | Siempre activo (XChaCha20) | Opcional |
| Compresión | zstd / LZ4 | LZ4 / zstd |
| Dispositivos de bloque | Sí (NBD, corre ZFS) | No |
| Esfuerzo de configuración | Bajo (un solo binario) | Medio (binario + base de datos) |
| Mejor para | Montajes simples de un nodo, almacenamiento de bloques | Compartido/multicliente, gran escala |
| Licencia | AGPL-3.0 / comercial | Apache 2.0 |

La versión corta: **ZeroFS** es más simple porque guarda todo (incluidos los metadatos) en el bucket, así que no hay base de datos que ejecutar. **JuiceFS** está más probado a escala y permite que muchos clientes compartan un mismo sistema de archivos, pero necesita un motor de metadatos como Redis junto al almacenamiento de objetos.

&lt;Notice type=&quot;info&quot; title=&quot;Una nota sobre los metadatos&quot;&gt;
  JuiceFS guarda los metadatos de los archivos (nombres, tamaños, estructura de directorios) en una base de datos aparte por velocidad y consistencia. Esa base de datos es crítica: si la pierdes, pierdes el mapa de tus datos. ZeroFS evita esto manteniendo los metadatos en el propio bucket como un árbol log-structured merge.
&lt;/Notice&gt;

## Paso 1: Crear un bucket S3 en Bunny.net

Ambas herramientas necesitan un bucket compatible con S3. Así se crea uno en Bunny.net.

&lt;Notice type=&quot;warning&quot; title=&quot;La compatibilidad con S3 se fija al crear&quot;&gt;
  La API de S3 de Bunny todavía está en beta y debe activarse al crear la storage zone. No puedes activarla en una zona existente, así que crea una nueva para esto.
&lt;/Notice&gt;

1. En el panel de Bunny, ve a **Storage** → **Add Storage Zone**
2. Dale un nombre (mínimo 4 caracteres, solo letras, números y guiones). Este nombre será tu nombre de bucket y tu access key
3. Activa la opción **S3 Compatibility**
4. Elige un nivel de almacenamiento y una región cercana a tu VPS
5. Activa la replicación en al menos una región extra (recomendado por durabilidad)
6. Confirma y añade la zona

Una vez creada, abre la pestaña **Access** y consigue tus credenciales. Las mapearás a los valores estándar de S3 así:

| Ajuste S3 | Valor de Bunny |
|---|---|
| Access Key ID | El nombre de tu storage zone |
| Secret Access Key | La contraseña de tu storage zone |
| Endpoint | `https://[region]-s3.storage.bunnycdn.com` |
| Región | `de`, `ny`, `sg`, `uk`, `se`, `la` o `jh` |

La compatibilidad con S3 funciona actualmente en Frankfurt (`de`), Nueva York (`ny`), Singapur (`sg`), Londres (`uk`), Estocolmo (`se`), Los Ángeles (`la`) y Johannesburgo (`jh`). Bunny solo admite **URLs de tipo path** (`endpoint/nombre-bucket/clave`), algo que ambas herramientas manejan sin problema.

Puedes probar las credenciales con la AWS CLI antes de seguir:

```sh
aws s3 ls s3://nombre-de-tu-zona/ \
  --endpoint-url https://de-s3.storage.bunnycdn.com
```

Si quieres ver con más detalle cómo se compara Bunny Storage en precio, escribí un desglose de [Bunny Storage vs S3 vs Backblaze](/es/bunny-storage-vs-s3-vs-backblaze/).

## Requisitos previos

Para cualquiera de las dos herramientas necesitarás:

- Un VPS Linux (Ubuntu/Debian va muy bien aquí)
- Acceso root o `sudo`
- Un SSD local con algo de espacio libre para la caché (10 GB o más es un buen comienzo)
- Las credenciales S3 de Bunny de arriba

&lt;Button link=&quot;https://go.bitdoze.com/hetzner&quot; text=&quot;Hetzner VPS&quot; /&gt;
&lt;Button link=&quot;https://go.bitdoze.com/hostinger-vps&quot; text=&quot;Hostinger VPS&quot; /&gt;
&lt;Button link=&quot;https://go.bitdoze.com/do&quot; text=&quot;DigitalOcean $100 Gratis&quot; /&gt;

Si eres nuevo ejecutando servicios en un VPS, mi [guía de Docker en Ubuntu](https://www.bitdoze.com/install-docker-ubuntu-arm/) cubre lo básico sobre almacenamiento y autoalojamiento.

## Opción A: ZeroFS

[ZeroFS](https://github.com/Barre/zerofs) es una herramienta en Rust que sirve un bucket S3 como sistema de archivos POSIX por NFS y 9P, o como dispositivo de bloque crudo por NBD. Todo corre en un único proceso en espacio de usuario, y los datos siempre se comprimen y cifran antes de salir de tu servidor. No hay base de datos aparte, lo que la hace la más sencilla de poner en marcha.

### Instalar ZeroFS

El script de instalación descarga el binario precompilado adecuado para tu plataforma:

```sh
curl -sSfL https://sh.zerofs.net | sh
```

Para fijar una versión e instalar sin root:

```sh
curl -sSfL https://sh.zerofs.net | VERSION=v1.2.6 INSTALL_DIR=$HOME/.local/bin sh
```

&lt;Notice type=&quot;warning&quot; title=&quot;Requisito de CPU&quot;&gt;
  El binario precompilado de Linux amd64 necesita una CPU con AVX2 (Intel Haswell 2013+ o AMD Excavator 2015+). En hardware más antiguo el binario falla con un error de instrucción ilegal, y tendrás que compilarlo desde el código fuente para un objetivo x86-64 base.
&lt;/Notice&gt;

### Configurar ZeroFS

Genera una configuración inicial y edítala:

```sh
zerofs init   # escribe zerofs.toml
```

Aquí tienes un `zerofs.toml` funcional para un bucket de Bunny.net. Fíjate en la línea `conditional_put`, que explico más abajo:

```toml
[cache]
dir = &quot;/var/cache/zerofs&quot;
disk_size_gb = 10.0
memory_size_gb = 1.0

[storage]
url = &quot;s3://nombre-de-tu-zona/zerofs-data&quot;
encryption_password = &quot;${ZEROFS_PASSWORD}&quot;

[filesystem]
compression = &quot;zstd-3&quot;

[servers.nfs]
addresses = [&quot;127.0.0.1:2049&quot;]

[aws]
access_key_id = &quot;${AWS_ACCESS_KEY_ID}&quot;
secret_access_key = &quot;${AWS_SECRET_ACCESS_KEY}&quot;
endpoint = &quot;https://de-s3.storage.bunnycdn.com&quot;
default_region = &quot;de&quot;
conditional_put = &quot;redis://localhost:6379&quot;
```

&lt;Notice type=&quot;info&quot; title=&quot;Por qué la línea de Redis&quot;&gt;
  ZeroFS necesita escrituras condicionales (put-if-not-exists) para protegerse contra la corrupción. AWS S3 lo admite de forma nativa, pero muchos almacenes compatibles con S3 aún no lo exponen. Apuntar `conditional_put` a una URL de Redis deja que ZeroFS coordine esas escrituras a través de Redis. Instala Redis con `sudo apt install redis-server` y mantenlo en localhost. Si confirmas que tu zona de Bunny soporta puts condicionales, puedes quitar esta línea.
&lt;/Notice&gt;

&lt;Notice type=&quot;warning&quot; title=&quot;Problema de compatibilidad de Bunny.net S3 con ZeroFS&quot;&gt;
  A mediados de 2026, la API de S3 de Bunny (todavía en vista previa cerrada) no devuelve un encabezado ETag en las respuestas de PUT. ZeroFS requiere ETags para verificar las escrituras, así que el arranque falla con un error `MissingEtag` incluso con `conditional_put` configurado. Es una limitación del lado de Bunny que probablemente corrijan a medida que madure la API. Hasta entonces, usa JuiceFS (Opción B) con Bunny, o combina ZeroFS con un proveedor S3 distinto como Cloudflare R2 o AWS S3.
&lt;/Notice&gt;

El `encryption_password` no es opcional, ZeroFS no tiene modo sin cifrado. Guárdalo a buen recaudo, porque perderlo significa perder el acceso a todo lo que hay en el bucket.

### Ejecutar ZeroFS

Exporta tus secretos y arranca el servidor:

```sh
export AWS_ACCESS_KEY_ID=&quot;nombre-de-tu-zona&quot;
export AWS_SECRET_ACCESS_KEY=&quot;contraseña-de-tu-storage&quot;
export ZEROFS_PASSWORD=&quot;una-frase-larga-y-aleatoria&quot;

zerofs run -c zerofs.toml
```

### Montar el sistema de archivos

ZeroFS ya está sirviendo NFS en `127.0.0.1:2049`. Móntalo como cualquier recurso NFS:

```sh
sudo mkdir -p /mnt/data
sudo mount -t nfs -o nolock,vers=3 127.0.0.1:/ /mnt/data
```

Eso es todo. Cualquier cosa que escribas en `/mnt/data` se comprime, se cifra y se envía a tu bucket de Bunny, con las lecturas calientes servidas desde la caché local en microsegundos.

### Ejecutarlo como servicio

Para cualquier cosa más allá de pruebas, ejecuta ZeroFS bajo systemd para que sobreviva a los reinicios. Crea `/etc/systemd/system/zerofs.service`:

```ini
[Unit]
Description=ZeroFS S3-backed filesystem
After=network-online.target redis-server.service
Wants=network-online.target

[Service]
Environment=AWS_ACCESS_KEY_ID=nombre-de-tu-zona
Environment=AWS_SECRET_ACCESS_KEY=contraseña-de-tu-storage
Environment=ZEROFS_PASSWORD=una-frase-larga-y-aleatoria
ExecStart=/usr/local/bin/zerofs run -c /etc/zerofs/zerofs.toml
Restart=on-failure

[Install]
WantedBy=multi-user.target
```

Luego actívalo:

```sh
sudo systemctl daemon-reload
sudo systemctl enable --now zerofs
```

&lt;Notice type=&quot;warning&quot; title=&quot;Mantén los secretos fuera del archivo de unidad&quot;&gt;
  Poner las credenciales directamente en una unidad de systemd está bien para un arranque rápido, pero en producción muévelas a un `EnvironmentFile=` con permisos `600`, o usa un gestor de secretos. Nunca los subas a git.
&lt;/Notice&gt;

ZeroFS también puede exponer el bucket como un dispositivo de bloque crudo por NBD, que es lo que hace posibles las demos de &quot;correr ZFS sobre S3&quot;. Eso va más allá de un montaje básico, pero está ahí si lo necesitas.

## Opción B: JuiceFS

[JuiceFS](https://github.com/juicedata/juicefs) es un sistema de archivos distribuido maduro y ampliamente desplegado, construido sobre almacenamiento de objetos más un motor de metadatos aparte. Es totalmente compatible con POSIX, soporta miles de clientes concurrentes y se usa en producción para cargas de big data y machine learning. El compromiso es que ejecutas una base de datos de metadatos junto a él.

### Instalar Redis para los metadatos

JuiceFS guarda los metadatos de los archivos en un motor como Redis, MySQL o SQLite. Para un solo VPS, Redis es la opción fácil. Puedes instalarlo directamente en el host o ejecutarlo en Docker, lo que encaje mejor con cómo gestionas la máquina.

&lt;Tabs&gt;
  &lt;Tab name=&quot;Paquete del sistema&quot;&gt;

```sh
sudo apt update
sudo apt install redis-server
sudo systemctl enable --now redis-server
```

  &lt;/Tab&gt;

  &lt;Tab name=&quot;Docker&quot;&gt;

Si ya usas Docker (o simplemente prefieres mantener los servicios en contenedores), un pequeño `compose.yaml` hace el trabajo. Esto también sirve para el Redis de `conditional_put` de ZeroFS de la Opción A, el mismo contenedor vale para ambos.

```yaml
services:
  redis:
    image: redis:7-alpine
    container_name: juicefs-redis
    restart: unless-stopped
    command: redis-server --appendonly yes
    ports:
      - &quot;127.0.0.1:6379:6379&quot;
    volumes:
      - ./redis-data:/data
```

Levántalo:

```sh
docker compose up -d
```

La opción `--appendonly yes` activa la persistencia AOF para que tus metadatos sobrevivan al reinicio de un contenedor, y enlazarlo a `127.0.0.1` mantiene Redis fuera de internet público. El volumen guarda los datos en el host. Si gestionas tus stacks con una interfaz, mi [guía de instalación de Dockge](/es/instalar-dockge/) hace que desplegar esto sea cuestión de un par de clics.

  &lt;/Tab&gt;
&lt;/Tabs&gt;

&lt;Notice type=&quot;warning&quot; title=&quot;Protege tu motor de metadatos&quot;&gt;
  La base de datos Redis es el índice de todo tu sistema de archivos. Haz copias de seguridad con regularidad (activa la persistencia RDB/AOF) y nunca la expongas a internet público. Si pierdes los metadatos, los bloques de datos de tu bucket quedan inservibles.
&lt;/Notice&gt;

### Instalar JuiceFS

Un solo comando descarga el cliente más reciente:

```sh
curl -sSL https://d.juicefs.com/install | sh -
```

Comprueba que se instaló:

```sh
juicefs version
```

### Formatear el sistema de archivos

El comando `format` inicializa el sistema de archivos, enlazando tu motor de metadatos con el bucket de Bunny. Ejecútalo una vez:

```sh
juicefs format \
  --storage s3 \
  --bucket https://de-s3.storage.bunnycdn.com/nombre-de-tu-zona \
  --access-key nombre-de-tu-zona \
  --secret-key contraseña-de-tu-storage \
  redis://localhost:6379/1 \
  myjfs
```

Algunas notas sobre los flags:

- `--bucket` usa la URL de tipo path que exige Bunny, con el nombre de tu zona como último segmento de la ruta
- `redis://localhost:6379/1` es el motor de metadatos (base de datos 1 del Redis local)
- `myjfs` es el nombre del volumen, usado en comandos posteriores

### Montar el sistema de archivos

Ahora móntalo, apuntando a la misma URL de Redis:

```sh
sudo mkdir -p /mnt/data
juicefs mount redis://localhost:6379/1 /mnt/data --background
```

JuiceFS mantiene una caché local (por defecto en `/var/jfsCache`) para que las lecturas repetidas sigan siendo rápidas. Puedes ajustar el tamaño de la caché al montar:

```sh
juicefs mount redis://localhost:6379/1 /mnt/data \
  --cache-size 10240 \
  --background
```

`--cache-size` está en MB, así que `10240` te da una caché local de 10 GB.

### Ejecutarlo como servicio

JuiceFS puede generar un montaje compatible con systemd, pero el enfoque duradero más simple es un archivo de unidad en `/etc/systemd/system/juicefs.service`:

```ini
[Unit]
Description=JuiceFS mount
After=network-online.target redis-server.service
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/juicefs mount redis://localhost:6379/1 /mnt/data --cache-size 10240
ExecStop=/usr/local/bin/juicefs umount /mnt/data
Restart=on-failure

[Install]
WantedBy=multi-user.target
```

Actívalo:

```sh
sudo systemctl daemon-reload
sudo systemctl enable --now juicefs
```

### Revisar el sistema de archivos

JuiceFS incluye comandos útiles de inspección:

```sh
juicefs status redis://localhost:6379/1   # muestra info del volumen
juicefs bench /mnt/data                   # ejecuta un benchmark rápido
```

## Rendimiento y caché

Ninguna herramienta puede vencer a la física, la latencia de S3 es la que es, así que la caché local es lo que hace usable la experiencia. Unas cuantas cosas que conviene saber:

&lt;ListCheck&gt;
- **Dimensiona la caché para tu conjunto caliente**: Dale a la caché espacio suficiente para los archivos que lees a menudo. Una caché de 10 GB en un VPS pequeño cubre la mayoría de cargas multimedia y web
- **Usa un disco de caché rápido**: Pon la caché en NVMe local, no en un volumen de red, o pierdes el sentido
- **Las escrituras son asíncronas**: Ambas herramientas agrupan y suben en segundo plano, así que el rendimiento de escritura se siente local hasta que la caché se llena
- **Elige una región cercana**: Haz coincidir tu región de Bunny con la ubicación de tu VPS para reducir el tiempo de ida y vuelta
- **Cuidado con cargas de archivos pequeños**: Millones de archivos diminutos estresan más los metadatos que el ancho de banda, y ahí el motor dedicado de JuiceFS tiene ventaja
&lt;/ListCheck&gt;

Para cargas que son sobre todo lecturas y escrituras secuenciales grandes (medios, backups, archivos), ambas herramientas vuelan una vez que la caché está caliente. Para acceso aleatorio a archivos pequeños, el rendimiento depende mucho del ratio de aciertos de caché.

## ¿Cuál deberías elegir?

Después de usar las dos, esta es mi regla general:

**Elige ZeroFS si** quieres la configuración más simple, estás en un solo nodo, te gusta que el cifrado sea obligatorio, o necesitas funciones de dispositivo de bloque como correr ZFS sobre S3. No tener una base de datos extra que cuidar es una ventaja real en un VPS pequeño. Combínalo con Cloudflare R2 o AWS S3 (la API de S3 de Bunny actualmente no devuelve ETags, que ZeroFS necesita).

**Elige JuiceFS si** necesitas varios servidores compartiendo un sistema de archivos, operas a mayor escala, quieres la opción más probada con la comunidad más amplia, ya ejecutas Redis, o usas el S3 de Bunny.net (JuiceFS funciona sin problemas con la API de S3 de Bunny). El motor de metadatos es trabajo extra, pero te da una consistencia y concurrencia que una herramienta de un solo nodo no puede igualar.

Para un servidor doméstico o un único VPS con una biblioteca multimedia o backups, me inclino por ZeroFS por la simplicidad. Para cualquier cosa compartida entre máquinas o que apunte a escala seria, JuiceFS es la apuesta más segura.

## Solución de problemas

&lt;Accordion label=&quot;El montaje es extremadamente lento con archivos pequeños&quot; group=&quot;troubleshoot&quot; expanded=&quot;true&quot;&gt;

Casi siempre es una caché fría o demasiado pequeña. Comprueba que tu directorio de caché está en NVMe local (no en un disco de red) y aumenta el tamaño de la caché para que quepan tus archivos de acceso frecuente. Confirma también que tu región de Bunny coincide con la ubicación de tu VPS, un bucket en Frankfurt servido a un VPS en Singapur añade latencia a cada fallo de caché.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;ZeroFS da errores sobre puts condicionales o fencing&quot; group=&quot;troubleshoot&quot;&gt;

ZeroFS necesita soporte de put-if-not-exists, que muchos almacenes compatibles con S3 no exponen. Pon `conditional_put = &quot;redis://localhost:6379&quot;` en la sección `[aws]` de tu `zerofs.toml` y asegúrate de que Redis esté corriendo en local. Esto deja que ZeroFS coordine esas escrituras a través de Redis en lugar del bucket.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;El montaje de JuiceFS falla o se queda colgado&quot; group=&quot;troubleshoot&quot;&gt;

Comprueba que Redis es accesible (`redis-cli ping` debería devolver `PONG`) y que usas exactamente la misma URL de Redis con la que formateaste. Un número de base de datos distinto (el `/1` del final) apunta JuiceFS a un almacén de metadatos vacío. Verifica también que la URL del bucket es de tipo path, con el nombre de tu zona como último segmento.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Permiso denegado al escribir en el montaje&quot; group=&quot;troubleshoot&quot;&gt;

Los montajes NFS y FUSE mapean los UID/GID desde el proceso del servidor. Para ZeroFS por NFS, monta con `nolock` y revisa la propiedad de `/mnt/data`. Para JuiceFS, ejecuta el montaje como el usuario que necesita acceso de escritura, o ajusta los permisos del directorio tras montar.

&lt;/Accordion&gt;

## Preguntas frecuentes

&lt;Accordion label=&quot;¿Es más rápido que usar el disco de mi VPS sin más?&quot; group=&quot;faq&quot;&gt;

No, el disco local siempre es más rápido para los datos que caben en él. El sentido de un sistema de archivos respaldado por S3 es la capacidad barata, elástica y fuera del servidor para datos que no necesitan velocidad de disco: medios, backups, archivos y almacenamiento compartido. La caché local reduce la diferencia para los archivos calientes, pero es una herramienta distinta para un trabajo distinto.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo usar esto con contenedores Docker?&quot; group=&quot;faq&quot;&gt;

Sí. Una vez que el sistema de archivos está montado en una ruta como `/mnt/data`, puedes hacer bind-mount de esa ruta dentro de los contenedores como un volumen. Funciona bien para servidores multimedia o contenedores de backup. Si gestionas tus stacks con una interfaz, mi [guía de instalación de Dockge](/es/instalar-dockge/) muestra cómo apuntar los volúmenes de compose a cualquier ruta del host.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Bunny.net cobra por las solicitudes que hacen estas herramientas?&quot; group=&quot;faq&quot;&gt;

Bunny Storage no cobra por solicitud de API, lo cual es una ventaja real aquí ya que ambas herramientas hacen muchas llamadas pequeñas. Pagas por almacenamiento ($0,01/GB en una sola región) y por ancho de banda de entrega si sirves a través de la CDN. No hay tarifas de egress al entregar por la CDN de Bunny. Consulta mi [reseña de Bunny.net](/es/resena-bunny-net/) para el panorama completo de precios.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Perderé datos si se pierden los metadatos?&quot; group=&quot;faq&quot;&gt;

Para JuiceFS, sí, el motor de metadatos Redis es el mapa de tus bloques de datos, así que haz copias de seguridad y nunca lo ejecutes sin persistencia. Para ZeroFS, los metadatos viven en el bucket junto a los datos, así que no hay base de datos aparte que perder, pero la contraseña de cifrado es igual de crítica: si la pierdes, los datos son irrecuperables.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo usar otro proveedor S3 en lugar de Bunny?&quot; group=&quot;faq&quot;&gt;

Por supuesto. Ambas herramientas funcionan con AWS S3, Cloudflare R2, Backblaze B2, MinIO y cualquier almacén compatible con S3. Solo cambia el endpoint y las credenciales. Me centré en Bunny por el precio plano de $0,01/GB y la ausencia de tarifas por solicitud, que encajan con el patrón de acceso parlanchín de una capa de sistema de archivos.

&lt;/Accordion&gt;

## Para terminar

Montar un bucket S3 como sistema de archivos solía significar pelearse con `s3fs` y aceptar un rendimiento pésimo con archivos pequeños. ZeroFS y JuiceFS lo arreglan con una caché local inteligente, y hacen que el almacenamiento de objetos sea de verdad usable como sistema de archivos de trabajo en un VPS.

Combina cualquiera de los dos con el almacenamiento de tarifa plana y sin egress de Bunny.net y obtienes capacidad elástica que cuesta una fracción de redimensionar el disco de tu servidor. Empieza con ZeroFS si quieres las menos piezas móviles, recurre a JuiceFS cuando necesites almacenamiento compartido o a gran escala.

&lt;Button text=&quot;Prueba Bunny.net Gratis 14 Días&quot; link=&quot;https://go.bitdoze.com/bunny&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;lg&quot; /&gt;

## Artículos relacionados

- [Reseña de Bunny.net](/es/resena-bunny-net/) - la plataforma completa tras un año en producción
- [Bunny Storage vs S3 vs Backblaze](/es/bunny-storage-vs-s3-vs-backblaze/) - precios de almacenamiento en la nube comparados
- [Guía de Bunny Stream](/es/guia-bunny-stream/) - alojamiento de vídeo en Bunny
- [Instalar Dockge](/es/instalar-dockge/) - gestiona stacks de Docker compose con volúmenes respaldados por bucket
- [Instalar Docker en Ubuntu](https://www.bitdoze.com/install-docker-ubuntu-arm/) - configuración de Docker y Compose</content:encoded><category>hosting</category><category>self-hosted</category><category>cdn</category></item><item><title>Autoaloja Tu Git y CI/CD con Forgejo y Woodpecker CI</title><link>https://www.bitdoze.com/es/forgejo-woodpecker-ci-cicd/</link><guid isPermaLink="true">https://www.bitdoze.com/es/forgejo-woodpecker-ci-cicd/</guid><description>Configura una alternativa a GitHub autoalojada con Forgejo y CI/CD usando Woodpecker CI. Guia completa con Docker Compose en un VPS.</description><pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import YouTubeEmbed from &quot;@components/widgets/YouTubeEmbed.astro&quot;;
import { Picture } from &quot;astro:assets&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;

GitHub Actions esta bien hasta que ves la factura, te topas con los limites de tasa, o te das cuenta de que tu codigo se ejecuta en los servidores de otro. Si ya autoalojas tus aplicaciones en un VPS, alojar tu propio servidor Git y pipeline de CI/CD es el siguiente paso logico. Y es mas facil de lo que parece.

Esta guia explica como configurar **Forgejo** (un forge Git autoalojado) con CI/CD mediante **Woodpecker CI**. Forgejo gestiona tus repositorios, issues y pull requests. Woodpecker ejecuta tus builds, tests y despliegues. Juntos reemplazan a GitHub y GitHub Actions.

## Por que no quedarse en GitHub?

Hay varias razones por las que la gente se muda:

- **Control de costes**: El tier gratuito de GitHub Actions se agota rapido en repositorios privados. Los runners autoalojados ayudan, pero sigues en la infraestructura de GitHub.
- **Propiedad de los datos**: Tu codigo, issues, pull requests y logs de CI viven en tu servidor. Sin sorpresas en los terminos de servicio.
- **Desarrollo offline/local**: Un VPS en tu region sin depender de la disponibilidad de GitHub.
- **Lock-in de GitHub Actions**: Cuantos mas workflows escribes, mas dificil es irse. Forgejo + Woodpecker mantiene la portabilidad.

Dicho esto, mucha gente mantiene un espejo en GitHub para el lado social del codigo. Puedes tener las dos cosas.

## Forgejo vs Gitea: cual es la diferencia?

Forgejo se bifurco de Gitea en octubre de 2022 despues de que una empresa con fines de lucro se hiciera con el proyecto Gitea (dominios, marca, todo). La comunidad no fue consultada. Una carta abierta fue ignorada. Asi que hicieron un fork.

Desde 2024, Forgejo es un hard fork -- los codigos base han divergido. Aqui van las diferencias:

| | Forgejo | Gitea |
|---|---|---|
| **Gobierno** | Sin fines de lucro (Codeberg e.V.) | Empresa con fines de lucro |
| **Licencia** | Exclusivamente Software Libre | Open Core (algunas features propietarias) |
| **Desarrollado en** | El propio Forgejo | GitHub |
| **CI/CD testeado con** | Forgejo Actions | GitHub Actions |
| **Seguridad** | Aviso previo para todos los usuarios | Aviso previo solo para clientes de pago |
| **Federacion** | Trabajando en soporte ActivityPub | Sin planes de federacion |
| **Tests end-to-end** | Si | No (a mediados de 2025) |
| **Migracion desde Gitea** | Soportada, mismo esquema de BD | N/A |

Funcionalmente son muy similares. Mismo UI, mismo formato de config, mismo Docker setup. Si empiezas de cero, ve con Forgejo. Si ya estas en Gitea y funciona bien, la migracion no es urgente -- pero es un solo comando cuando estes listo.

## Lo que necesitas

- Un VPS con al menos 2 GB de RAM (4 GB recomendado si ejecutas CI/CD en la misma maquina). [Hetzner](https://go.bitdoze.com/hetzner) o [Hostinger](https://go.bitdoze.com/hostinger-vps) funcionan bien.
- Docker y Docker Compose instalados
- Un nombre de dominio (o subdominio) apuntando a tu VPS
- Comodidad basica con la terminal

&lt;Notice type=&quot;info&quot; title=&quot;Un solo VPS es suficiente&quot;&gt;

Todo en esta guia corre en un solo servidor. Forgejo, Woodpecker y el runner de CI pueden coexistir en un VPS de 4 GB sin problemas. Siempre puedes separarlos mas adelante.

&lt;/Notice&gt;

## Paso 1: Instalar Forgejo

Crea un directorio para Forgejo y prepara el Docker Compose:

```sh
mkdir -p /opt/forgejo &amp;&amp; cd /opt/forgejo
```

### Docker Compose

```yaml
services:
  forgejo:
    image: codeberg.org/forgejo/forgejo:10
    container_name: forgejo
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - FORGEJO__database__DB_TYPE=sqlite3
      - FORGEJO__server__DOMAIN=git.tudominio.com
      - FORGEJO__server__ROOT_URL=https://git.tudominio.com
      - FORGEJO__server__SSH_DOMAIN=git.tudominio.com
      - FORGEJO__server__SSH_PORT=2222
      - FORGEJO__server__SSH_LISTEN_PORT=22
      - FORGEJO__service__DISABLE_REGISTRATION=true
      - FORGEJO__actions__ENABLED=true
    restart: unless-stopped
    volumes:
      - ./data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - &quot;3000:3000&quot;
      - &quot;2222:22&quot;
```

Un par de cosas a tener en cuenta:

- **SSH en puerto 2222**: El servidor SSH integrado de Forgejo usa el puerto 2222 para no entrar en conflicto con el SSH del sistema en el 22. Clonaras repos con `ssh://git@tudominio.com:2222/usuario/repo.git`.
- **Registro deshabilitado**: No quieres que cualquiera cree cuentas en tu servidor Git. Crea las cuentas manualmente o habilita el registro brevemente.
- **SQLite**: Sirve para equipos pequenos y uso personal. Si tienes 10+ usuarios, cambia a PostgreSQL.

### Iniciar Forgejo

```sh
docker compose up -d
```

Visita `https://git.tudominio.com`, completa el asistente de configuracion inicial y crea tu cuenta de administrador.

### Proxy inverso con Nginx

Si ejecutas Nginx en el host (no en Docker), anade un bloque de servidor:

```nginx
server {
    server_name git.tudominio.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/git.tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/git.tudominio.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
```

Obten el certificado primero:

```sh
certbot --nginx -d git.tudominio.com
```

&lt;Notice type=&quot;warning&quot; title=&quot;Firewall&quot;&gt;

Asegurate de que los puertos 80, 443 y 2222 esten abiertos. Si usas UFW:

```sh
sudo ufw allow &apos;Nginx Full&apos;
sudo ufw allow 2222
```

&lt;/Notice&gt;

## Paso 2: Instalar Woodpecker CI

Woodpecker es un servidor de CI/CD independiente que se conecta a Forgejo mediante OAuth. Es un fork comunitario de Drone CI, mantenido despues de que Drone cambiara su licencia. Cada paso del pipeline se ejecuta en su propio contenedor Docker, asi que tu entorno de build siempre esta limpio y reproducible.

### Crear una aplicacion OAuth en Forgejo

1. Ve a **Administracion del Sitio → Aplicaciones** (o a Configuracion de Usuario → Aplicaciones)
2. Crea una nueva aplicacion OAuth2:
   - **Nombre**: Woodpecker CI
   - **URI de Redireccion**: `https://ci.tudominio.com/authorize`
3. Guarda el **Client ID** y el **Client Secret**

### Docker Compose para Woodpecker

```sh
mkdir -p /opt/woodpecker &amp;&amp; cd /opt/woodpecker
```



```yaml
services:
  woodpecker-server:
    image: woodpeckerci/woodpecker-server:v3
    container_name: woodpecker-server
    restart: unless-stopped
    ports:
      - &quot;8000:8000&quot;
    volumes:
      - woodpecker_data:/var/lib/woodpecker
    environment:
      - WOODPECKER_OPEN=false
      - WOODPECKER_HOST=https://ci.tudominio.com
      - WOODPECKER_GITEA=true
      - WOODPECKER_GITEA_URL=https://git.tudominio.com
      - WOODPECKER_GITEA_CLIENT=TU_CLIENT_ID
      - WOODPECKER_GITEA_SECRET=TU_CLIENT_SECRET
      - WOODPECKER_AGENT_SECRET=TU_SECRETO_ALEATORIO
      - WOODPECKER_DATABASE_DRIVER=sqlite3
      - WOODPECKER_DATABASE_DATASOURCE=/var/lib/woodpecker/woodpecker.db

  woodpecker-agent:
    image: woodpeckerci/woodpecker-agent:v3
    container_name: woodpecker-agent
    restart: unless-stopped
    depends_on:
      - woodpecker-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WOODPECKER_SERVER=woodpecker-server:9000
      - WOODPECKER_AGENT_SECRET=TU_SECRETO_ALEATORIO
      - WOODPECKER_MAX_WORKFLOWS=2

volumes:
  woodpecker_data:
```

Genera el secreto del agente:

```sh
openssl rand -hex 32
```

Usa el mismo secreto para ambas entradas de `WOODPECKER_AGENT_SECRET`.

&lt;Notice type=&quot;warning&quot; title=&quot;Acceso al socket de Docker&quot;&gt;

El agente monta `/var/run/docker.sock`, lo que le da acceso completo al demonio Docker del host. Para un VPS de un solo usuario esto esta bien. Para entornos compartidos, considera usar Podman sin root o Kaniko.

&lt;/Notice&gt;

Inicialo:

```sh
docker compose up -d
```

Anade un proxy inverso de Nginx para `ci.tudominio.com` igual que con Forgejo (proxy al puerto 8000).

### Tu primer pipeline de Woodpecker

Crea `.woodpecker.yml` en la raiz de un repositorio en Forgejo:

```yaml
pipeline:
  build:
    image: node:20-alpine
    commands:
      - npm ci
      - npm run build

  test:
    image: node:20-alpine
    commands:
      - npm test
    depends_on:
      - build

  deploy:
    image: alpine:3.20
    commands:
      - apk add --no-cache openssh-client
      - ssh -o StrictHostKeyChecking=no deploy@tuserver &quot;cd /var/www/miapp &amp;&amp; git pull &amp;&amp; ./build.sh&quot;
    depends_on:
      - test
    when:
      branch: main
```

Cada paso se ejecuta en su propio contenedor. El paso de `deploy` solo se ejecuta en la rama `main`.

### Construir y subir imagenes Docker

Woodpecker tiene un plugin de Docker integrado:

```yaml
pipeline:
  build-image:
    image: plugins/docker
    settings:
      repo: git.tudominio.com/tuusuario/miapp
      registry: git.tudominio.com
      tags:
        - latest
        - ${CI_COMMIT_SHA:0:8}
      username:
        from_secret: docker_username
      password:
        from_secret: docker_password
    when:
      branch: main
```

Anade los secretos mediante la UI o el CLI de Woodpecker:

```sh
woodpecker-cli secret add \
  --repository tuusuario/miapp \
  --name docker_username \
  --value &apos;tuusuario&apos;

woodpecker-cli secret add \
  --repository tuusuario/miapp \
  --name docker_password \
  --value &apos;tu_token&apos;
```

---

## Paso 3: Configurar despliegues automaticos

Aqui va un patron del mundo real. Haces push al codigo, Woodpecker ejecuta los tests, y si pasan, la app se despliega en el mismo VPS.

### El workflow de despliegue

El enfoque mas simple: conectarte por SSH al servidor, hacer pull del ultimo codigo, reconstruir.

&lt;Notice type=&quot;info&quot; title=&quot;Despliegues en el mismo servidor&quot;&gt;

Si Forgejo, CI y tu app corren en el mismo VPS, la conexion SSH es solo localhost. Parece redundante, pero mantiene tu workflow portable -- cambia el destino SSH a otro servidor y todo sigue funcionando.

&lt;/Notice&gt;

### Con apps de Docker Compose

Si tu app corre en Docker Compose, el script de despliegue se complica un poco:

```sh
#!/bin/bash
cd /opt/miapp
git pull --force origin main
docker compose down
docker compose up -d --build
docker image prune -f
```

El flag `--build` reconstruye la imagen desde el Dockerfile. `docker image prune` limpia las imagenes viejas para que no se coman el espacio en disco.

### Despliegues sin downtime

Para despliegues sin tiempo de inactividad, tienes algunas opciones segun tu stack:

- **Swap de upstream en Nginx**: Construye el nuevo contenedor en un puerto diferente, testalo, luego cambia el upstream de Nginx y recarga.
- **Docker Compose con healthchecks**: Define un healthcheck en tu compose file. Docker no enviara trafico hasta que el nuevo contenedor este healthy.
- **Usar Kamal**: Si quieres despliegues sin downtime sin escribir scripts, [Kamal](https://kamal-deploy.org/) maneja esto de entrada. Es del equipo de Basecamp/Rails pero funciona con cualquier app Docker.

## Paso 4: Registro de contenedores (opcional)

Forgejo tiene un registro de contenedores integrado. Hablitalo en `app.ini`:

```ini
[packages]
ENABLED=true
```

Luego sube imagenes a `git.tudominio.com/tuusuario/miapp:tag` desde tu pipeline de CI. El plugin Docker de Woodpecker maneja esto sin problemas.

Esto te ahorra ejecutar un registro Docker separado o pagar por Docker Hub.

## Por que Woodpecker y no otra cosa?

Forgejo en realidad tiene un sistema de CI integrado tambien (Forgejo Actions, compatible con la sintaxis de GitHub Actions). Entonces, por que molestarse en instalar Woodpecker por separado?

Algunas razones:

- **UI dedicada**: Woodpecker tiene su propia interfaz web para monitorear builds, ver logs y gestionar secretos. Es mas limpio que meter CI dentro de la UI de Forgejo.
- **Matrix builds**: Ejecuta el mismo pipeline con multiples versiones de Node, Python o lo que sea. Woodpecker lo maneja de forma nativa.
- **Limites de recursos por paso**: Caps de CPU y memoria por paso del pipeline para que un build no se coma los recursos del resto del servidor.
- **Soporte multi-forge**: Si tambien tienes repos en GitHub o GitLab, Woodpecker puede conectarse a todos. No estas atado a un proveedor Git.
- **Ecosistema de plugins**: El sistema de plugins de Woodpecker esta pensado para CI/CD. Builds de imagenes Docker, notificaciones a Slack, subida de artefactos a S3 -- todo de primera clase.

Si vienes de GitHub y solo quieres copiar tus archivos de `.github/workflows` con cambios minimos, Forgejo Actions es el camino mas simple. Pero si estas configurando CI/CD desde cero y quieres algo robusto, Woodpecker es la mejor herramienta.

## Copias de seguridad

No te saltes esta parte. Tu servidor Git es la fuente de verdad de todos tus proyectos.

```sh
#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR=&quot;/home/backups/forgejo&quot;

# Detener Forgejo para una copia consistente
cd /opt/forgejo &amp;&amp; docker compose stop

# Crear archivo comprimido
tar -czf &quot;$BACKUP_DIR/forgejo-$DATE.tar.gz&quot; -C /opt/forgejo/data .

# Reiniciar Forgejo
docker compose up -d

# Encriptar
gpg --encrypt --armor -r tu@email.com \
  -o &quot;$BACKUP_DIR/forgejo-$DATE.tar.gz.gpg&quot; \
  &quot;$BACKUP_DIR/forgejo-$DATE.tar.gz&quot;

# Eliminar copia sin encriptar
rm &quot;$BACKUP_DIR/forgejo-$DATE.tar.gz&quot;
```

Ejecutalo cada noche con cron. Copia las copias encriptadas fuera del servidor (rsync a un NAS, rclone a S3, lo que te funcione).

Para Woodpecker, haz copia del volumen `woodpecker_data` de la misma manera.

## El panorama completo

Asi se ve la configuracion completa en un solo VPS:

```
/opt/
├── forgejo/
│   ├── docker-compose.yml
│   └── data/                  # Datos de Forgejo + SQLite DB
├── woodpecker/
│   ├── docker-compose.yml
│   └── ...
├── miapp/
│   ├── docker-compose.yml
│   └── ...
└── otra-app/
    └── docker-compose.yml
```

Push a Forgejo → CI ejecuta tests → despliega en el mismo servidor → Nginx lo sirve. Coste total: un VPS, unos 7-15 EUR/mes.

Sin facturas de GitHub. Sin sorpresas de Vercel. Tu codigo, tu servidor, tus reglas.

## Problemas comunes

**Conflictos de puerto SSH**: El SSH de Forgejo corre en el puerto 2222 por defecto. Asegurate de que tu firewall lo permita y que las URLs de clonado incluyan el puerto.

**El agente no recoge trabajos**: Revisa los logs del agente con `docker compose logs woodpecker-agent`. Asegurate de que `WOODPECKER_AGENT_SECRET` coincida entre servidor y agente.

**Permisos del socket de Docker**: Si el runner de CI no puede acceder a Docker, verifica que el contenedor tenga `/var/run/docker.sock` montado y que el usuario tenga permisos de Docker.

**Espacio en disco**: Los runners de CI generan muchas imagenes Docker con el tiempo. Anade un cron job para limpiar imagenes viejas:

```sh
0 3 * * * docker system prune -af --filter &quot;until=72h&quot;
```

Esto elimina imagenes sin usar de mas de 3 dias.</content:encoded><category>self-hosting</category><category>self-hosted</category><category>docker</category><category>cicd</category></item><item><title>TinyFish: API de Busqueda Web y Fetch Gratuita para Tus Agentes de Codificacion con IA</title><link>https://www.bitdoze.com/es/tinyfish-busqueda-web-agentes-ia/</link><guid isPermaLink="true">https://www.bitdoze.com/es/tinyfish-busqueda-web-agentes-ia/</guid><description>TinyFish da a tus agentes de IA busqueda web estructurada y obtencion limpia de paginas gratis. Configuralo con Pi, Hermes, OpenClaw o cualquier agente de codificacion en menos de 5 minutos.</description><pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

Todo agente de codificacion con IA choca con el mismo muro tarde o temprano. Le preguntas sobre la ultima API de una libreria, una imagen de Docker que cambio su esquema de etiquetado, o un formato de configuracion que se actualizo la semana pasada. Los datos de entrenamiento del modelo se detienen en 2025 (o antes), y o bien alucina o te dice que revises la documentacion tu mismo. No sirve de mucho.

La solucion es darle a tu agente acceso a la web en vivo. Y ahi es donde entra [TinyFish](https://tinyfish.ai/). TinyFish proporciona busqueda web estructurada y obtencion limpia de paginas a traves de una sola clave API. Search y Fetch son gratis — sin tarjeta de credito, sin periodo de prueba, solo registrate y adelante.

He estado usando TinyFish a traves del paquete [pi-tinyfish](https://github.com/x1any/pi-tinyfish) en [Pi coding agent](/es/guia-configuracion-pi-agent/) durante unas semanas. Funciona lo suficientemente bien como para querer explicar que hace, como configurarlo, y por que importa para agentes como [Hermes](/es/guia-configuracion-hermes-agent/) y [OpenClaw](/es/guia-configuracion-openclaw/) tambien.

&lt;Button text=&quot;Obtener clave API gratuita de TinyFish&quot; link=&quot;https://go.bitdoze.com/tinyfish&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre esta guia&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Que es TinyFish y como funcionan Search + Fetch&lt;/li&gt;
&lt;li&gt;Configurar TinyFish con Pi coding agent mediante pi-tinyfish&lt;/li&gt;
&lt;li&gt;Usar TinyFish con Hermes Agent, OpenClaw y otros agentes de codificacion&lt;/li&gt;
&lt;li&gt;El TinyFish Cookbook: recetas listas para tareas comunes de automatizacion&lt;/li&gt;
&lt;li&gt;Niveles de precios y limites de tasa&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

## Que hace realmente TinyFish

TinyFish tiene cuatro endpoints, pero solo necesitas dos para empezar:

**Search** toma una consulta y devuelve resultados JSON estructurados. No es una lista de enlaces azules pensados para ojos humanos — datos limpios y estables en ranking que un LLM puede parsear sin adivinar. Los tiempos de respuesta estan por debajo de 500ms. Puedes pasar pistas de ubicacion e idioma para resultados geolocalizados.

**Fetch** toma una o varias URLs y devuelve contenido limpio. La pagina se renderiza en un navegador Chromium real (JavaScript, SPAs, todo), y luego se eliminan las barras de navegacion, banners de cookies, anuncios y scripts. Obtienes markdown, HTML o JSON de vuelta. Tu modelo deja de gastar tokens en basura HTML.

Los dos endpoints mas pesados — Agent (automatizacion de navegador en lenguaje natural) y Browser (sesiones CDP raw) — son de pago y consumen créditos. Para uso con agentes de codificacion, Search y Fetch cubren el 95% de lo que necesitas.

### Por que esto importa para los agentes de codificacion

La mayoria de agentes de codificacion dependen de los datos de entrenamiento del modelo para cualquier cosa fuera de tu codebase. Eso funciona para patrones estables y APIs bien documentadas. Se desmorona con:

- **Lanzamientos recientes** — una libreria que publico cambios incompatibles la semana pasada
- **Diferencias especificas por version** — &quot;esta imagen de Docker todavia soporta ARM64 en v3?&quot;
- **Soluciones de la comunidad** — el issue de GitHub donde alguien ya resolvio tu problema exacto
- **Busqueda de documentacion** — leer la documentacion real en vez de adivinar desde la memoria

Darle a tu agente un pipeline de busqueda + fetch lo convierte de &quot;creo que asi funciona&quot; a &quot;aqui esta la documentacion actual, y aqui hay tres issues de GitHub confirmando este comportamiento.&quot;

## Configurar TinyFish con Pi coding agent

Pi ya soporta TinyFish a traves del paquete [pi-tinyfish](https://github.com/x1any/pi-tinyfish). Anade dos herramientas a tu agente: `tinyfish_search` y `tinyfish_fetch`. La instalacion es un solo comando.

### Paso 1: Obtener tu clave API

Registrate en [agent.tinyfish.ai](https://agent.tinyfish.ai/). Sin tarjeta de credito. Copia la clave API del dashboard.

### Paso 2: Instalar pi-tinyfish

&lt;Tabs&gt;
&lt;Tab name=&quot;npm&quot;&gt;
```bash
pi install npm:pi-tinyfish
```
&lt;/Tab&gt;
&lt;Tab name=&quot;git&quot;&gt;
```bash
pi install git:github.com/x1any/pi-tinyfish
```
&lt;/Tab&gt;
&lt;/Tabs&gt;

### Paso 3: Configurar la clave API

```bash
export TINYFISH_API_KEY=&quot;tu_clave_api_aqui&quot;
```

Anade eso a tu perfil de shell (`~/.bashrc`, `~/.zshrc`, o `~/.config/fish/config.fish`) para que persista entre sesiones.

### Paso 4: Usarlo

Eso es todo. La proxima vez que inicies Pi en un proyecto, el agente puede llamar a `tinyfish_search` y `tinyfish_fetch` como herramientas. Cuando necesite buscar algo sobre una libreria, consultar documentacion o verificar un formato de configuracion, buscara en la web y obtendra las paginas relevantes automaticamente.

La latencia de busqueda es tipicamente de 1-3 segundos. Fetch puede tardar unos segundos mas dependiendo de la pagina. Ambas herramientas usan tiempos de espera sensatos por defecto (10s para search, 150s para fetch).

&lt;Notice type=&quot;success&quot; title=&quot;Ahorro de tokens&quot;&gt;
TinyFish Fetch elimina la navegacion, scripts y contenido repetitivo de las paginas antes de devolver el contenido. Tu modelo procesa el contenido real del articulo, no tres kilobytes de banners de consentimiento de cookies y enlaces de pie de pagina. Esto reduce significativamente el uso de tokens por cada fetch.
&lt;/Notice&gt;

## Usar TinyFish con Hermes Agent

[Hermes Agent](/es/guia-configuracion-hermes-agent/) de Nous Research tiene una herramienta de busqueda web integrada, pero TinyFish te da mas control sobre los resultados de busqueda y anade obtencion limpia de paginas que Hermes no tiene de serie.

Hay tres formas de conectar TinyFish a Hermes:

### Opcion 1: Servidor MCP

TinyFish ejecuta un servidor MCP en `https://mcp.tinyfish.ai`. Anadelo a tu configuracion MCP de Hermes:

```json
{
  &quot;mcpServers&quot;: {
    &quot;tinyfish&quot;: {
      &quot;url&quot;: &quot;https://mcp.tinyfish.ai&quot;
    }
  }
}
```

Esto da a Hermes acceso a Search y Fetch a traves del protocolo MCP estandar. El agente las ve como herramientas nativas.

### Opcion 2: Habilidad de agente (Skill)

Instala la habilidad de TinyFish desde el cookbook:

```bash
npx skills add github.com/tinyfish-io/tinyfish-cookbook --skill use-tinyfish
```

Esto ensena a Hermes cuando usar Search vs Fetch vs Agent, y como llamarlas correctamente. La habilidad incluye logica de decision — usar search para encontrar URLs, fetch para leer paginas conocidas, y escalar a agent solo cuando se necesita automatizacion interactiva del navegador.

### Opcion 3: Wrapper CLI

Si prefieres integracion basada en shell, instala el CLI:

```bash
npm install -g @tiny-fish/cli
tinyfish auth login
```

Entonces Hermes puede llamar a `tinyfish search query &quot;...&quot;` y `tinyfish fetch content get &lt;urls&gt;` a traves de su acceso al terminal. El CLI escribe resultados en el sistema de archivos en vez de pasarlos por el contexto del modelo, lo que mantiene bajo el uso de tokens.

### Cual opcion elegir

MCP es la mas limpia si tu version de Hermes lo soporta. La opcion de skill funciona bien si quieres que el agente entienda la jerarquia de herramientas (search primero, fetch segundo, agent al final). CLI es el respaldo que funciona en todas partes.

## Usar TinyFish con OpenClaw y otros agentes

Los mismos patrones aplican a [OpenClaw](/es/guia-configuracion-openclaw/), [OpenCode](/es/guia-configuracion-opencode/), Claude Code, Cursor, Codex y cualquier otro agente de codificacion que soporte MCP, habilidades o acceso al shell.

### MCP para cualquier agente

La URL del servidor MCP es la misma sin importar que agente uses:

```json
{
  &quot;mcpServers&quot;: {
    &quot;tinyfish&quot;: {
      &quot;url&quot;: &quot;https://mcp.tinyfish.ai&quot;
    }
  }
}
```

Esto funciona con Claude Code, Cursor, Codex, ChatGPT desktop y cualquier cliente compatible con MCP. Ponlo en tu configuracion y reinicia.

### API REST para integraciones personalizadas

Si estas construyendo algo personalizado o tu agente no soporta MCP, usa los endpoints REST directamente:

```bash
# Busqueda
curl &quot;https://api.search.tinyfish.ai?query=docker+compose+healthcheck&quot; \
  -H &quot;X-API-Key: $TINYFISH_API_KEY&quot;

# Fetch
curl -X POST https://api.fetch.tinyfish.ai \
  -H &quot;X-API-Key: $TINYFISH_API_KEY&quot; \
  -H &quot;Content-Type: application/json&quot; \
  -d &apos;{&quot;urls&quot;: [&quot;https://docs.docker.com/compose/how-tos/startup-order/&quot;]}&apos;
```

Ambos endpoints devuelven JSON. Search te da resultados clasificados con titulos, snippets y URLs. Fetch te da el contenido limpio de la pagina mas metadatos (titulo, idioma, autor, fecha de publicacion).

### SDKs para uso programatico

&lt;Tabs&gt;
&lt;Tab name=&quot;Python&quot;&gt;
```bash
pip install tinyfish
```
```python
from tinyfish import TinyFish

client = TinyFish()  # lee TINYFISH_API_KEY del entorno

# Busqueda
results = client.search.query(&quot;best React state management 2026&quot;)

# Fetch
content = client.fetch.content.get(
    urls=[&quot;https://tanstack.com/query/latest&quot;],
    format=&quot;markdown&quot;
)
```
&lt;/Tab&gt;
&lt;Tab name=&quot;TypeScript&quot;&gt;
```bash
npm install @tiny-fish/sdk
```
```typescript
import { TinyFish } from &quot;@tiny-fish/sdk&quot;;

const client = new TinyFish(); // lee TINYFISH_API_KEY del entorno

// Busqueda
const results = await client.search.query(&quot;best React state management 2026&quot;);

// Fetch
const content = await client.fetch.content.get({
  urls: [&quot;https://tanstack.com/query/latest&quot;],
  format: &quot;markdown&quot;,
});
```
&lt;/Tab&gt;
&lt;/Tabs&gt;

## El TinyFish Cookbook

El [TinyFish Cookbook](https://github.com/tinyfish-io/tinyfish-cookbook) es una coleccion de proyectos listos para usar construidos sobre TinyFish. Algunos son realmente utiles:

| Proyecto | Que hace |
|----------|----------|
| [viet-bike-scout](https://github.com/tinyfish-io/tinyfish-cookbook/tree/main/viet-bike-scout) | Comparacion de precios de alquiler de motos en ciudades vietnamitas |
| [openbox-deals](https://github.com/tinyfish-io/tinyfish-cookbook/tree/main/openbox-deals) | Agregador de ofertas de productos reacondicionados en 8 tiendas |
| [competitor-scout-cli](https://github.com/tinyfish-io/tinyfish-cookbook/tree/main/competitor-scout-cli) | CLI en lenguaje natural para investigar precios de la competencia |
| [silicon-signal](https://github.com/tinyfish-io/tinyfish-cookbook/tree/main/silicon-signal) | Rastreador de la cadena de suministro de semiconductores |
| [code-reference-finder](https://github.com/tinyfish-io/tinyfish-cookbook/tree/main/code-reference-finder) | Encuentra ejemplos de uso real de fragmentos de codigo en GitHub y Stack Overflow |
| [tinyskills](https://github.com/tinyfish-io/tinyfish-cookbook/tree/main/tinyskills) | Genera guias SKILL.md desde documentacion, GitHub y blogs de desarrolladores |

El code-reference-finder es al que mas vuelvo. Pegas una firma de funcion, y busca en GitHub y Stack Overflow ejemplos de uso real. Ahorra mucho tiempo de &quot;como usa nadie esta API realmente&quot;.

El cookbook tambien incluye la [habilidad use-tinyfish](https://github.com/tinyfish-io/tinyfish-cookbook/blob/main/skills/use-tinyfish/SKILL.md) que ensena a cualquier agente de codificacion la herramienta correcta a usar. Cubre la escalera de decision: search para encontrar URLs, fetch para leer paginas, agent para tareas interactivas del navegador, y browser para control CDP raw.

&lt;Button text=&quot;Explorar el TinyFish Cookbook&quot; link=&quot;https://github.com/tinyfish-io/tinyfish-cookbook&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

## Precios y limites de tasa

El nivel gratuito cubre Search y Fetch con limites generosos:

| Endpoint | Coste | Limite de tasa gratuito |
|----------|-------|------------------------|
| **Search** | Gratis | 30 peticiones/min |
| **Fetch** | Gratis | 150 URLs/min |
| **Agent** | 1 credito/paso | 2 ejecuciones simultaneas |
| **Browser** | 1 credito/4 min | 5 sesiones simultaneas |

Los endpoints Agent y Browser consumen creditos. Obtienes 500 creditos gratis al registrarte, y los planes de pago empiezan en $13/mes por 1.650 creditos. Para uso con agentes de codificacion, Search y Fetch son todo lo que necesitas, y esos son gratis.

Los fetches fallidos no cuentan contra tu cuota. Si una URL devuelve un error, no pagas por ella.

&lt;Accordion label=&quot;Comparacion con alternativas&quot; group=&quot;alternativas&quot;&gt;

TinyFish no es la unica opcion para dar acceso web a los agentes. Asi se compara:

| Caracteristica | TinyFish Fetch | Firecrawl | Fetch nativo LLM | Playwright manual |
|----------------|---------------|-----------|-------------------|-------------------|
| **Renderizado JavaScript** | Si (Chromium real) | Si | No (solo HTML estatico) | Si |
| **Extraccion limpia de contenido** | Si | Si | HTML raw | Manual |
| **Stealth/anti-bot** | Integrado | Variable | No | Configuracion manual |
| **Nivel gratuito** | Si (Search + Fetch) | Limitado | Depende del proveedor | Pagas por computacion |
| **Optimizacion de tokens** | Elimina basura | Elimina basura | HTML completo | Manual |
| **Batch multi-URL** | Hasta 10 URLs/llamada | Variable | No | Manual |

La ventaja principal de TinyFish sobre montar Playwright tu mismo es que no gestionas instancias de navegador, rotacion de proxies o deteccion anti-bot. La ventaja sobre el fetch nativo del LLM es el renderizado JavaScript — la mayoria de sitios de documentacion modernos son SPAs que devuelven shells vacios sin el.

&lt;/Accordion&gt;

## Lo que me gusta y lo que no

He estado usando TinyFish a traves de Pi durante unas semanas. Aqui va la opinion honesta.

**Lo que funciona bien:** Los resultados de busqueda son limpios y rapidos. Fetch realmente renderiza SPAs correctamente, lo que importa para sitios de documentacion basados en React (te miro a ti, Next.js y Docusaurus). El nivel gratuito es lo suficientemente generoso para uso diario con agentes de codificacion. El ahorro de tokens por contenido limpio es real — mi uso de tokens por sesion bajo de forma notable despues de cambiar del fetching de HTML raw.

**Lo que podria mejorar:** El endpoint Fetch puede ser lento en paginas pesadas (5-10 segundos para sitios con mucho JavaScript). Search ocasionalmente devuelve resultados desactualizados para eventos muy recientes — no es en tiempo real como Google. Y los endpoints Agent/Browser, aunque potentes, se vuelven caros rapido si necesitas automatizacion interactiva.

**En resumen:** Para dar a tu agente de codificacion la capacidad de leer documentacion actual y buscar en web, el nivel gratuito de Search + Fetch es dificil de superar. Lo tengo conectado a Pi a traves de pi-tinyfish, y planeo anadir el servidor MCP a mi configuracion de Hermes despues.

## Siguientes pasos

- [Obtener una clave API gratuita de TinyFish](https://go.bitdoze.com/tinyfish) — sin tarjeta de credito
- [Instalar pi-tinyfish](https://github.com/x1any/pi-tinyfish) para Pi coding agent
- [Leer el TinyFish Cookbook](https://github.com/tinyfish-io/tinyfish-cookbook) para ideas de proyectos y la habilidad del agente
- [Documentacion de TinyFish](https://docs.tinyfish.ai/) para la referencia completa de la API
- [Guia de configuracion de Pi coding agent](/es/guia-configuracion-pi-agent/) si aun no has instalado Pi
- [Guia de configuracion de Hermes Agent](/es/guia-configuracion-hermes-agent/) para instalacion y configuracion de Hermes</content:encoded><category>ai</category><category>ai-tools</category><category>llm</category></item><item><title>Cómo Autoalojar Traceway como Alternativa Gratuita a Datadog</title><link>https://www.bitdoze.com/es/traceway-guia-autoalojamiento/</link><guid isPermaLink="true">https://www.bitdoze.com/es/traceway-guia-autoalojamiento/</guid><description>Despliega Traceway, una plataforma de observabilidad nativa de OpenTelemetry, con Docker Compose en menos de 2 minutos. Obtén logs, trazas, métricas y session replay sin dependencia de un proveedor.</description><pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;

Las facturas de observabilidad aparecen sin avisar. Un día estás registrando unos pocos servicios, al siguiente estás mirando una factura de Datadog que compite con tu gasto en la nube. Traceway le da la vuelta a ese modelo: tiene licencia MIT, es nativo de OpenTelemetry y puedes tener el stack completo funcionando en tu propio hardware en unos dos minutos.

## ¿Qué es Traceway?

[Traceway](https://github.com/tracewayapp/traceway) es una plataforma de observabilidad de código abierto que maneja logs, trazas, métricas, session replay, excepciones y trazado de IA bajo un mismo techo. Ingiera datos directamente mediante OTLP/HTTP, así que te saltas el collector, los SDKs de proveedor y el código de unión. Apunta cualquier SDK de OpenTelemetry hacia él y los datos empiezan a fluir.

El proyecto tiene unas 290 estrellas en GitHub y se distribuye bajo una licencia MIT limpia. Sin BSL, sin un tier &quot;open core&quot; que reserve funciones para planes de pago. Todas las funcionalidades están incluidas.

### Qué incluye

| Funcionalidad | Qué hace |
| --- | --- |
| Logs | Búsqueda estructurada y vinculada a trazas con rendimiento inferior a un segundo |
| Trazas | Cascadas de spans de extremo a extremo en todos los servicios |
| Métricas | Métricas de host, runtime y personalizadas con widgets de dashboard configurables |
| Excepciones | Stack traces normalizadas con SHA-256 agrupadas en incidencias clasificadas, con source maps para bundles JS |
| Session Replay | Reproduce sesiones de usuario previas a errores en web (cualquier framework JS) y Flutter |
| Observabilidad de IA | Seguimiento de coste, tokens, latencia y conversaciones completas de LLMs entre proveedores |

### Por qué Traceway frente a las alternativas

| | Empresarial (Datadog/New Relic) | OSS DIY (Prometheus + Loki + Tempo) | Traceway |
| --- | --- | --- | --- |
| Precio | Por evento, por host, por usuario | Gratis pero mucho tiempo de operación | Autoalojado gratis, cloud con tarifa fija |
| Configuración | SDK de proveedor por lenguaje | Unir 6 herramientas | `docker compose up -d` |
| Licencia | Propietaria | Mixta, algunas BSL/open-core | MIT, sin asteriscos |
| OTel | Envuelto en SDK de proveedor | Requiere Collector | Ingesta nativa OTLP/HTTP |
| Replay + trazas + IA | Tres productos separados | Conéctalos tú mismo | Un sistema, un trace ID |

&lt;Notice type=&quot;info&quot; title=&quot;Nuevo pero funcional&quot;&gt;
Traceway es un proyecto más joven comparado con los grandes nombres. Está en desarrollo activo y los parches llegan con frecuencia. Para uso en producción, vigila las versiones y prueba las actualizaciones antes de aplicarlas.
&lt;/Notice&gt;

## Arquitectura

Traceway se compone de tres servicios principales cuando se despliega de forma independiente:

| Servicio | Tecnología | Función |
| --- | --- | --- |
| Backend | Go 1.25, Gin | Ingesta OTLP, API REST, alertas, migraciones |
| Frontend | SvelteKit 2, Svelte 5, Tailwind CSS v4 | Dashboard SPA |
| Base de datos | ClickHouse + PostgreSQL | Almacenamiento de telemetría (ClickHouse) y datos relacionales (PostgreSQL) |

Todo se comunica a través de la red interna de Docker. El backend expone endpoints OTLP/HTTP para trazas, métricas y logs en `/api/otel/v1/traces`, `/api/otel/v1/metrics` y `/api/otel/v1/logs`.

## Requisitos previos

&lt;ListCheck&gt;
- Un VPS Linux o servidor dedicado con Docker y Docker Compose v2 instalados
- Al menos 4 GB de RAM (ClickHouse y PostgreSQL se ejecutan junto al backend y frontend)
- Acceso root o sudo
- Puerto 80 disponible para el dashboard
&lt;/ListCheck&gt;

&lt;Button text=&quot;Prueba Hetzner Cloud&quot; link=&quot;https://go.bitdoze.com/hetzner&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;lg&quot; external={true} icon=&quot;rocket-launch&quot; /&gt;
&lt;Button text=&quot;Prueba Hostinger VPS&quot; link=&quot;https://go.bitdoze.com/hostinger-vps&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;lg&quot; external={true} icon=&quot;rocket-launch&quot; /&gt;

## Desplegar Traceway con Docker Compose

Esta es la parte esencial. Clonar, compose up, listo.

### Paso 1: Clonar el repositorio

```bash
git clone https://github.com/tracewayapp/traceway
cd traceway
```

### Paso 2: Iniciar el stack

```bash
docker compose up -d
```

El dashboard aparece en `http://ip-de-tu-servidor`. Así de simple.

Entre bastidores, Docker Compose descarga las imágenes de Traceway, arranca ClickHouse y PostgreSQL, ejecuta las migraciones pendientes e inicia la API y el frontend. El primer arranque tarda unos 90 segundos mientras las bases de datos se inicializan.

### Paso 3: Crear tu primer proyecto

Abre el dashboard, inicia sesión con las credenciales predeterminadas y crea un proyecto. La interfaz te guía. Obtendrás un endpoint de ingesta y un token de acceso para cada proyecto.

&lt;Notice type=&quot;warning&quot; title=&quot;Cambia las credenciales predeterminadas&quot;&gt;
El login predeterminado es `admin@localhost.com` / `admin`. Cambia la contraseña inmediatamente desde la interfaz, o establece las tuyas propias con variables de entorno antes del primer arranque.
&lt;/Notice&gt;

## Ejemplo práctico: Instrumentar una app Node.js

Vamos a conectar una aplicación real. Así es como se pasa de &quot;he desplegado Traceway&quot; a &quot;veo los datos de mi app&quot;.

### Configurar una app Express básica

Si no tienes una app a mano, crea una:

```bash
mkdir traceway-demo &amp;&amp; cd traceway-demo
npm init -y
npm install express @opentelemetry/api @opentelemetry/sdk-node \
  @opentelemetry/auto-instrumentations-node \
  @opentelemetry/exporter-trace-otlp-http
```

### Conectar OpenTelemetry

Crea un archivo llamado `tracing.js`:

```javascript
const { NodeSDK } = require(&apos;@opentelemetry/sdk-node&apos;);
const { OTLPTraceExporter } = require(&apos;@opentelemetry/exporter-trace-otlp-http&apos;);
const { getNodeAutoInstrumentations } = require(&apos;@opentelemetry/auto-instrumentations-node&apos;);

const sdk = new NodeSDK({
  traceExporter: new OTLPTraceExporter({
    url: &apos;http://ip-de-tu-servidor/api/otel/v1/traces&apos;,
  }),
  instrumentations: [getNodeAutoInstrumentations()],
});

sdk.start();
```

### Crear el servidor

Crea `index.js`:

```javascript
require(&apos;./tracing&apos;);

const express = require(&apos;express&apos;);
const app = express();

app.get(&apos;/&apos;, (req, res) =&gt; {
  res.json({ message: &apos;Traceway está observando&apos; });
});

app.get(&apos;/lento&apos;, async (req, res) =&gt; {
  await new Promise(resolve =&gt; setTimeout(resolve, 2000));
  res.json({ message: &apos;Este tardó un poco&apos; });
});

app.listen(3000, () =&gt; console.log(&apos;App ejecutándose en el puerto 3000&apos;));
```

Ejecútalo con `node index.js` y luego haz curl a ambos endpoints varias veces:

```bash
curl http://localhost:3000/
curl http://localhost:3000/lento
```

Vuelve al dashboard de Traceway. Las trazas aparecen en segundos. Los spans desglosan cada petición, el endpoint `/lento` visiblemente tarda más, y puedes navegar por la cascada para ver exactamente dónde se va el tiempo.

## Ejemplo práctico: Instrumentar una app Python

Python funciona igual. Aquí tienes una configuración mínima con Flask:

```bash
mkdir traceway-python &amp;&amp; cd traceway-python
python3 -m venv venv &amp;&amp; source venv/bin/activate
pip install flask opentelemetry-distro opentelemetry-exporter-otlp-proto-http
```

Crea `app.py`:

```python
from flask import Flask
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.instrumentation.flask import FlaskInstrumentor

# Apunta el exporter a tu instancia de Traceway
exporter = OTLPSpanExporter(
    endpoint=&quot;http://ip-de-tu-servidor/api/otel/v1/traces&quot;
)

provider = TracerProvider()
provider.add_span_processor(BatchSpanProcessor(exporter))
trace.set_tracer_provider(provider)

app = Flask(__name__)
FlaskInstrumentor().instrument_app(app)

@app.route(&quot;/&quot;)
def home():
    return {&quot;message&quot;: &quot;Traceway también ve esto&quot;}

@app.route(&quot;/error&quot;)
def error():
    1 / 0  # Intencionado — aparece en excepciones
    return &quot;nunca se alcanza&quot;

if __name__ == &quot;__main__&quot;:
    app.run(port=5000)
```

Ejecútalo y visita ambos endpoints. De vuelta en Traceway, verás spans para cada ruta de Flask más una incidencia de excepción agrupada para la división por cero.

## Ejemplo práctico: Session replay en el frontend

Traceway incluye session replay de serie. Para cualquier frontend JavaScript, añade el SDK de navegador de Traceway:

```html
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/@tracewayapp/browser@latest/dist/traceway.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
  Traceway.init({
    projectToken: &apos;token-de-tu-proyecto&apos;,
    endpoint: &apos;http://ip-de-tu-servidor/api/otel/v1/traces&apos;,
    sessionReplay: true,
  });
&lt;/script&gt;
```

Ese fragmento captura sesiones de usuario, logs de consola, peticiones de red y errores. Cuando salta una excepción, la página de detalle del error incluye una reproducción de la sesión del usuario previa al error. Ves exactamente qué hizo clic, qué escribió y qué vio.

El SDK de navegador funciona con React, Vue, Svelte, Next.js y HTML plano. También hay un paquete Flutter para apps móviles.

## Endurecimiento para producción

Una vez que hayas confirmado que todo funciona, asegúralo:

&lt;ListCheck&gt;
- Configura HTTPS con Nginx o Caddy como proxy inverso delante del dashboard de Traceway
- Cambia la contraseña predeterminada antes de exponer nada a la red
- Restringe el puerto de ingesta OTLP solo a servicios internos (no lo expongas públicamente)
- Monta los directorios de datos de ClickHouse y PostgreSQL en volúmenes con nombre para que los datos sobrevivan a reinicios de contenedores
- Establece límites de recursos en los contenedores para que ClickHouse no ahogue la API bajo ingesta intensa
- Programa copias de seguridad regulares de ambas bases de datos
&lt;/ListCheck&gt;

## Actualizar Traceway

```bash
cd traceway
git pull
docker compose pull &amp;&amp; docker compose up -d
```

Las migraciones se ejecutan automáticamente cuando el nuevo backend se inicia. Revisa las notas de versión en GitHub antes de hacer pull; los cambios que rompen compatibilidad se indican explícitamente.

## FAQ

&lt;Accordion label=&quot;¿Cómo se compara Traceway con Grafana + Loki + Tempo?&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;
El stack de Grafana está muy probado pero requiere configurar y mantener Loki para logs, Tempo para trazas, Prometheus para métricas y Grafana para dashboards. Cada pieza tiene su propio lenguaje de configuración, backend de almacenamiento y ruta de actualización. Traceway te da las mismas capacidades — logs, trazas, métricas — en un solo stack de Docker Compose con una única superficie de configuración. Si ya usas el stack de Grafana y te funciona, probablemente no merezca la pena migrar. Si estás empezando desde cero o cansado de unir piezas, vale la pena echarle un vistazo.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo usar Traceway con instrumentación OpenTelemetry existente?&quot; group=&quot;faq&quot;&gt;
Sí. Ese es el objetivo. Si tus servicios ya exportan OTLP, simplemente redirige la URL del exporter a tu instancia de Traceway. No necesitas cambios de código más allá de la URL del endpoint.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Cuál es la huella de almacenamiento?&quot; group=&quot;faq&quot;&gt;
Depende mucho de tu tráfico. ClickHouse comprime bien — espera aproximadamente 1-3 GB por millón de spans para datos típicos de servicios HTTP. PostgreSQL almacena configuración de proyectos y datos de usuario, que es insignificante en comparación. Planea al menos 20 GB de disco si ejecutas en producción con un puñado de servicios, y monitoriza el crecimiento durante las primeras semanas.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Traceway soporta alertas?&quot; group=&quot;faq&quot;&gt;
Sí. Puedes configurar alertas para umbrales de tasa de error, picos de latencia o condiciones de métricas personalizadas. Las notificaciones van a Slack, incidencias de GitHub, correo electrónico o cualquier endpoint webhook.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Hay una opción cloud gestionada?&quot; group=&quot;faq&quot;&gt;
Traceway Cloud existe en cloud.tracewayapp.com si prefieres no autoalojar. Ejecuta el mismo código MIT. El precio es de tarifa fija en lugar de por evento, así que tu factura se mantiene predecible.
&lt;/Accordion&gt;

## Conclusión

Traceway resuelve un problema real. La observabilidad no debería requerir un proceso de compras y un compromiso mensual de cuatro cifras solo para saber por qué tu API va lenta. El proyecto te da logs, trazas, métricas, seguimiento de excepciones y session replay en un stack que controlas, con una licencia MIT que no te la juega más adelante.

El compromiso es la madurez. Datadog tiene una década de pulido a sus espaldas. Traceway es joven y avanza rápido. Pero para equipos pequeños, proyectos paralelos y cualquiera que prefiera gastar dinero en servidores en lugar de dashboards, vale la pena probarlo una tarde.

&lt;Button text=&quot;Ver Traceway en GitHub&quot; link=&quot;https://github.com/tracewayapp/traceway&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;
&lt;Button text=&quot;Documentación de Traceway&quot; link=&quot;https://docs.tracewayapp.com&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;</content:encoded><category>self-hosting</category><category>self-hosted</category><category>observability</category><category>docker</category></item><item><title>Guía de Kanban Hermes: Tableros de Tareas para Flujos Multi-Agente con IA</title><link>https://www.bitdoze.com/es/guia-kanban-hermes/</link><guid isPermaLink="true">https://www.bitdoze.com/es/guia-kanban-hermes/</guid><description>Aprende a configurar y usar Hermes Kanban — el sistema de tableros de tareas integrado que aporta gestión de proyectos estructurada a los flujos de trabajo con agentes de IA.</description><pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import YouTubeEmbed from &quot;@components/widgets/YouTubeEmbed.astro&quot;;

Hermes Kanban es un sistema de tableros integrado en [Hermes Agent](/es/guia-configuracion-hermes-agent/) que te permite gestionar visualmente las tareas, seguir el progreso entre múltiples agentes de IA y coordinar flujos de trabajo complejos de varios pasos. En lugar de enviar todo por chat, Kanban te ofrece una forma estructurada de planificar, asignar y monitorear el trabajo — con un tablero visual que puedes ver desde el [panel integrado](/hermes-dashboard-guide/) o los [paneles de terceros](/best-hermes-dashboards/).

Esta guía cubre la configuración, patrones de uso diario, la decisión Kanban vs delegate_task y flujos de trabajo prácticos multi-agente.

![Hermes Kanban Setup Guide](@assets/images/25/05/hermes-kanban-setup-guide.svg)

## ¿Qué es Hermes Kanban?

Hermes Kanban es un **sistema de gestión de tareas respaldado por SQLite** que se ejecuta junto al gateway de Hermes. Proporciona:

- **Tableros de tareas visuales** con columnas para diferentes estados (backlog, todo, en progreso, revisión, done)
- **Entregas de tareas entre agentes** — asigna tareas a agentes específicos o deja que elijan de una cola
- **Seguimiento de progreso** — observa qué agente está trabajando en qué y cuánto tiempo tardan las tareas
- **Historial persistente** — todos los cambios de estado se registran con marcas de tiempo e IDs de agente
- **Integración con el panel** — visualiza y gestiona tableros desde Hermes WebUI, Scarf, ClawdBoard y otros

Piensa en ello como Jira o Trello, pero diseñado para que los agentes de IA trabajen juntos.

&lt;Notice type=&quot;info&quot; title=&quot;Hermes v0.1.2+&quot;&gt;
Kanban se introdujo en Hermes Agent v0.1.2. Asegúrate de ejecutar una versión reciente. Verifica con `hermes --version`.
&lt;/Notice&gt;

## Kanban vs delegate_task: Cuándo usar cada uno

&lt;Accordion label=&quot;Comparación rápida&quot; group=&quot;comparison&quot; expanded=&quot;true&quot;&gt;

| Característica | Tablero Kanban | delegate_task |
|---|---|---|
| **Ideal para** | Proyectos multi-paso, coordinación de equipo | Tareas únicas, delegación rápida |
| **Visibilidad** | Tablero visual, historial completo | Basado en chat, efímero |
| **Seguimiento** | Persistente, con estado | En línea, se pierde tras la sesión |
| **Multi-agente** | Coordinación integrada | Coordinación manual |
| **Sobrecarga** | Mayor (configuración del tablero) | Menor (un comando) |
| **Usar cuando** | 3+ tareas relacionadas, necesitas supervisión | Tarea aislada, delegación simple |

&lt;/Accordion&gt;

**Usa Kanban cuando:**

- Tienes un proyecto con múltiples tareas relacionadas (p.ej., &quot;construir una API REST&quot; con auth, endpoints, tests, docs)
- Varios agentes necesitan coordinarse (uno escribe código, otro revisa, otro prueba)
- Quieres seguir el progreso en el tiempo y ver qué se completó
- Las tareas tienen dependencias (no se puede desplegar hasta que pasen los tests)

**Usa delegate_task cuando:**

- Necesitas una respuesta rápida o una sola pieza de trabajo
- La tarea es autocontenida sin seguimiento necesario
- Estás en una conversación y quieres mantener el impulso

&lt;Notice type=&quot;info&quot; title=&quot;Funcionan juntos&quot;&gt;
Puedes usar delegate_task para delegar una tarea de Kanban a un agente específico. Kanban es la capa de planificación; delegate_task es el mecanismo de ejecución.
&lt;/Notice&gt;

## Requisitos previos

Antes de configurar Kanban, asegúrate de tener:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Hermes Agent v0.1.2 o posterior instalado&lt;/li&gt;
&lt;li&gt;El gateway de Hermes ejecutándose (`hermes gateway start`)&lt;/li&gt;
&lt;li&gt;Un panel instalado (opcional pero recomendado) — ver [Guía del Panel Hermes](/hermes-dashboard-guide/)&lt;/li&gt;
&lt;li&gt;Un modelo gratuito configurado si quieres evitar costos — ver [Mejores Modelos Baratos para Hermes Agent](/es/mejores-modelos-baratos-hermes-agent/)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

## Paso 1: Habilitar Kanban en la configuración del Gateway

Kanban está habilitado por defecto en versiones recientes de Hermes. Verifícalo:

```bash
# Verificar si Kanban está habilitado
hermes kanban status
```

Si no está habilitado, agrégalo a la configuración del gateway:

```yaml
# ~/.hermes/gateway.yaml
kanban:
  enabled: true
  default_board: &quot;main&quot;
  auto_archive: true
  archive_after_days: 30
```

Reinicia el gateway para aplicar:

```bash
hermes gateway restart
```

## Paso 2: Crear tu primer tablero

```bash
# Crear un nuevo tablero
hermes kanban create-board &quot;Mi Proyecto&quot;

# Listar todos los tableros
hermes kanban boards

# Establecer tablero por defecto
hermes kanban set-default &quot;Mi Proyecto&quot;
```

Cada tablero tiene columnas que representan estados de tareas. Las columnas por defecto son:

| Columna | Propósito |
|---|---|
| **Backlog** | Tareas aún no programadas |
| **Todo** | Tareas listas para trabajar |
| **In Progress** | En progreso actualmente |
| **Review** | Esperando revisión o pruebas |
| **Done** | Tareas completadas |

## Paso 3: Agregar tareas

```bash
# Agregar una tarea al tablero por defecto
hermes kanban add &quot;Implementar autenticación de usuario&quot;

# Agregar con prioridad y asignado
hermes kanban add &quot;Escribir tests de API&quot; --priority high --assignee &quot;test-agent&quot;

# Agregar a una columna específica
hermes kanban add &quot;Actualizar README&quot; --column backlog

# Agregar con descripción
hermes kanban add &quot;Configurar pipeline CI/CD&quot; \
  --description &quot;Configurar GitHub Actions para pruebas y despliegue automatizados&quot; \
  --priority medium
```

### Propiedades de las tareas

Cada tarea soporta estas propiedades:

- **title** — qué hay que hacer
- **description** — requisitos detallados
- **priority** — low, medium, high, critical
- **assignee** — qué agente (o persona) debe trabajar en ella
- **column** — en qué columna del tablero inicia
- **tags** — etiquetas para filtrar (p.ej., `backend`, `frontend`, `docs`)
- **due_date** — cuándo debe completarse la tarea
- **depends_on** — IDs de tareas que deben completarse primero

## Paso 4: Mover tareas por el tablero

```bash
# Mover una tarea a otra columna
hermes kanban move &quot;Implementar autenticación de usuario&quot; --to &quot;In Progress&quot;

# Mover por ID de tarea
hermes kanban move #12 --to &quot;Review&quot;

# Mover todas las tareas con una etiqueta
hermes kanban move --tag backend --to &quot;Done&quot;
```

### Transiciones de estado automáticas

Hermes Kanban puede mover tareas automáticamente cuando los agentes realizan acciones:

- Cuando un agente comienza a trabajar en una tarea → se mueve a **In Progress**
- Cuando un agente envía código para revisión → se mueve a **Review**
- Cuando un revisor aprueba → se mueve a **Done**
- Cuando un revisor solicita cambios → vuelve a **In Progress**

Esto se configura en el perfil del agente:

```yaml
# ~/.hermes/agents/coder.yaml
kanban:
  auto_move: true
  pick_from: &quot;Todo&quot;
  move_to_on_start: &quot;In Progress&quot;
  move_to_on_complete: &quot;Review&quot;
```

## Paso 5: Ver el tablero

### Vista CLI

```bash
# Mostrar el tablero en la terminal
hermes kanban show

# Mostrar un tablero específico
hermes kanban show &quot;Mi Proyecto&quot;

# Mostrar solo tareas de alta prioridad
hermes kanban show --priority high

# Mostrar tareas asignadas a un agente específico
hermes kanban show --assignee &quot;test-agent&quot;
```

### Vista del Panel

El tablero Kanban también está disponible en el [panel de Hermes](/hermes-dashboard-guide/). Abre tu panel y navega a la pestaña Kanban para ver:

- Gestión de tareas con arrastrar y soltar
- Actualizaciones en tiempo real mientras los agentes mueven tareas
- Detalles de tareas con historial completo
- Filtros por agente, prioridad o etiqueta

Para la mejor experiencia visual, [Hermes WebUI (EKKO)](/best-hermes-dashboards/) y [Hermes WebUI (nesquena)](/best-hermes-dashboards/) tienen excelentes vistas de Kanban con soporte de arrastrar y soltar.

## Flujos de trabajo multi-agente

Estos son patrones prácticos para coordinar múltiples agentes.

### Patrón 1: Pipeline Código → Revisión → Despliegue

Configura tres agentes con diferentes roles:

```yaml
# ~/.hermes/agents/coder.yaml
name: &quot;Coder&quot;
role: &quot;Escribe código basado en descripciones de tareas&quot;
kanban:
  pick_from: &quot;Todo&quot;
  move_to_on_complete: &quot;Review&quot;

# ~/.hermes/agents/reviewer.yaml
name: &quot;Reviewer&quot;
role: &quot;Revisa calidad y corrección del código&quot;
kanban:
  pick_from: &quot;Review&quot;
  move_to_on_approve: &quot;Ready to Deploy&quot;
  move_to_on_reject: &quot;Todo&quot;

# ~/.hermes/agents/devops.yaml
name: &quot;DevOps&quot;
role: &quot;Maneja despliegue e infraestructura&quot;
kanban:
  pick_from: &quot;Ready to Deploy&quot;
  move_to_on_complete: &quot;Done&quot;
```

Agrega tareas al tablero y deja que los agentes las procesen:

```bash
hermes kanban add &quot;Construir endpoint de login&quot; --priority high
hermes kanban add &quot;Construir endpoint de perfil de usuario&quot; --priority medium
hermes kanban add &quot;Agregar limitación de tasa&quot; --priority high

# Los agentes recogen y procesan tareas automáticamente
hermes kanban watch  # Monitorear progreso en tiempo real
```

### Patrón 2: Investigación paralela con agregación

Cuando necesitas que múltiples agentes investiguen diferentes aspectos de un problema:

```bash
# Crear tareas de investigación
hermes kanban add &quot;Investigar mejores prácticas de autenticación&quot; --assignee &quot;researcher-1&quot; --tag research
hermes kanban add &quot;Investigar patrones de escalabilidad de BD&quot; --assignee &quot;researcher-2&quot; --tag research
hermes kanban add &quot;Investigar estrategias de caché&quot; --assignee &quot;researcher-3&quot; --tag research

# Crear tarea de agregación que depende de toda la investigación
hermes kanban add &quot;Escribir documento de diseño técnico&quot; \
  --assignee &quot;architect&quot; \
  --depends-on &quot;Investigar mejores prácticas de autenticación,Investigar patrones de escalabilidad de BD,Investigar estrategias de caché&quot; \
  --priority high
```

El agente arquitecto no tomará su tarea hasta que las tres tareas de investigación estén marcadas como done.

### Patrón 3: Ciclo de desarrollo iterativo

Para tareas que necesitan múltiples rondas de refinamiento:

```yaml
# ~/.hermes/agents/fullstack.yaml
kanban:
  pick_from: &quot;Todo&quot;
  move_to_on_complete: &quot;Testing&quot;
  max_iterations: 3
  on_test_failure: &quot;Todo&quot;
```

Esto crea un bucle: Todo → Testing → (si fallan los tests) → Todo, hasta 3 veces. Después de 3 fallos, la tarea se mueve a una columna &quot;Blocked&quot; para intervención humana.

## Características avanzadas

### Dependencias de tareas

Las tareas pueden depender de otras tareas. Una tarea dependiente no será asignable hasta que sus dependencias estén completas:

```bash
# Crear tarea con dependencias
hermes kanban add &quot;Desplegar a producción&quot; \
  --depends-on &quot;Escribir tests,Revisión de código,Pasó auditoría de seguridad&quot;

# Ver grafo de dependencias
hermes kanban dependencies &quot;Desplegar a producción&quot;
```

### Filtros y vistas

```bash
# Filtrar por múltiples criterios
hermes kanban show --priority high --assignee coder --tag backend

# Mostrar solo tareas bloqueadas
hermes kanban show --status blocked

# Mostrar tareas con fecha límite esta semana
hermes kanban show --due-before &quot;2026-05-10&quot;

# Exportar tablero como JSON
hermes kanban export --format json &gt; board.json
```

### Plantillas de tablero

Para tipos de proyectos recurrentes, crea plantillas de tablero:

```bash
# Guardar tablero actual como plantilla
hermes kanban save-template &quot;web-app&quot; --board &quot;Mi Proyecto&quot;

# Crear nuevo tablero desde plantilla
hermes kanban create-board &quot;Nueva App&quot; --template &quot;web-app&quot;
```

Las plantillas comunes incluyen:
- **web-app**: Auth, API, Frontend, Tests, Deploy
- **data-pipeline**: Extract, Transform, Validate, Load, Monitor
- **bug-fix**: Reproduce, Diagnose, Fix, Test, Verify

### Notificaciones

Recibe notificaciones cuando las tareas cambien de estado:

```yaml
# ~/.hermes/gateway.yaml
kanban:
  notifications:
    on_task_complete: true
    on_task_blocked: true
    on_task_overdue: true
    channel: &quot;slack&quot;  # o &quot;discord&quot;, &quot;email&quot;
```

## Ejemplo real: Construir una API REST

Un flujo de trabajo completo para construir una API REST con Kanban:

```bash
# 1. Crear el tablero
hermes kanban create-board &quot;Proyecto API REST&quot;

# 2. Agregar todas las tareas
hermes kanban add &quot;Diseñar esquema de base de datos&quot; --priority high --tag design
hermes kanban add &quot;Configurar estructura del proyecto&quot; --priority high --tag setup
hermes kanban add &quot;Implementar modelo de usuario&quot; --priority high --tag backend --depends-on &quot;Diseñar esquema de base de datos&quot;
hermes kanban add &quot;Implementar endpoints de auth&quot; --priority high --tag backend --depends-on &quot;Implementar modelo de usuario&quot;
hermes kanban add &quot;Implementar endpoints CRUD&quot; --priority medium --tag backend --depends-on &quot;Implementar modelo de usuario&quot;
hermes kanban add &quot;Escribir tests unitarios&quot; --priority medium --tag testing --depends-on &quot;Implementar endpoints de auth,Implementar endpoints CRUD&quot;
hermes kanban add &quot;Escribir tests de integración&quot; --priority medium --tag testing --depends-on &quot;Implementar endpoints de auth,Implementar endpoints CRUD&quot;
hermes kanban add &quot;Configurar CI/CD&quot; --priority low --tag devops
hermes kanban add &quot;Escribir documentación de API&quot; --priority low --tag docs --depends-on &quot;Implementar endpoints CRUD&quot;
hermes kanban add &quot;Desplegar a staging&quot; --priority medium --tag devops --depends-on &quot;Escribir tests unitarios,Escribir tests de integración&quot;

# 3. Asignar agentes
hermes kanban assign &quot;backend&quot; --tag backend
hermes kanban assign &quot;tester&quot; --tag testing
hermes kanban assign &quot;devops&quot; --tag devops

# 4. Monitorear progreso
hermes kanban watch
```

Cada agente toma tareas en orden de dependencia, trabaja en ellas y las avanza. Puedes verificar el progreso en cualquier momento con `hermes kanban show` o a través del panel.

## Consejos para usar Kanban eficazmente

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;**Mantén las tareas pequeñas** — si una tarea tarda más de 30 minutos de tiempo de agente, divídela&lt;/li&gt;
&lt;li&gt;**Usa dependencias con criterio** — no sobre-conectes; deja que tareas independientes corran en paralelo&lt;/li&gt;
&lt;li&gt;**Configura auto-archive** — mantén el tablero limpio archivando tareas completadas automáticamente&lt;/li&gt;
&lt;li&gt;**Usa etiquetas de forma consistente** — crea una taxonomía de etiquetas y respétala&lt;/li&gt;
&lt;li&gt;**Monitorea tareas bloqueadas** — revisa `hermes kanban show --status blocked` regularmente&lt;/li&gt;
&lt;li&gt;**Usa el panel** — el tablero visual hace mucho más fácil detectar cuellos de botella que la salida CLI&lt;/li&gt;
&lt;li&gt;**Empieza con plantillas** — no construyas tableros desde cero cada vez&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

## Solución de problemas

&lt;Accordion label=&quot;Comandos de Kanban no encontrados&quot; group=&quot;faq&quot;&gt;
Asegúrate de ejecutar Hermes Agent v0.1.5 o posterior. Actualiza con:

```bash
hermes update
hermes --version
```

Si Kanban sigue sin estar disponible, verifica que esté habilitado en la configuración del gateway (`~/.hermes/gateway.yaml`).
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Las tareas no son tomadas por los agentes&quot; group=&quot;faq&quot;&gt;
Verifica que:
1. El agente está ejecutándose y conectado al gateway
2. La columna `pick_from` del agente coincide con donde están las tareas
3. La configuración Kanban del agente tiene `auto_pick: true`
4. Las dependencias de las tareas están satisfechas

Verifica el estado del agente con:
```bash
hermes agents status
hermes kanban show --column &quot;Todo&quot;
```
&lt;/Accordion&gt;

&lt;Accordion label=&quot;El tablero no aparece en el panel&quot; group=&quot;faq&quot;&gt;
Actualiza la página del panel. Si la pestaña Kanban sigue sin aparecer:
1. Asegúrate de ejecutar un panel que soporte Kanban (Hermes WebUI v0.3+, Scarf v1.2+)
2. Verifica que el gateway está ejecutándose: `hermes gateway status`
3. Intenta reiniciar el servicio del panel
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Cómo elimino un tablero?&quot; group=&quot;faq&quot;&gt;
```bash
# Archivar un tablero (recomendado — preserva el historial)
hermes kanban archive-board &quot;Mi Proyecto&quot;

# Eliminar un tablero permanentemente
hermes kanban delete-board &quot;Mi Proyecto&quot; --confirm
```

Archivar es mejor que eliminar — siempre puedes restaurar un tablero archivado más tarde.
&lt;/Accordion&gt;

## Siguientes pasos

Una vez que tengas Kanban configurado, explora estas guías relacionadas:

- [Guía de configuración de Hermes Agent](/es/guia-configuracion-hermes-agent/) — si aún no has instalado Hermes, empieza aquí
- [Guía del Panel Hermes](/hermes-dashboard-guide/) — configura el panel integrado para ver tus tableros Kanban visualmente
- [Mejores Paneles de Hermes](/best-hermes-dashboards/) — paneles de terceros con soporte Kanban (Hermes WebUI, Scarf, etc.)
- [Mejores Modelos Baratos para Hermes Agent](/es/mejores-modelos-baratos-hermes-agent/) — modelos gratuitos y asequibles para alimentar tus agentes sin gastar de más

Una vez que superas la configuración inicial, Kanban maneja la mayor parte de la coordinación solo. Empieza simple — un tablero con algunas tareas — y expande desde ahí según te vayas sintiendo cómodo con cómo los agentes toman y mueven el trabajo.

&lt;Button text=&quot;Más guías de herramientas de IA&quot; link=&quot;/category/ai/&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; iconPosition=&quot;right&quot; /&gt;</content:encoded><category>ai</category><category>hermes-agent</category><category>kanban</category><category>ai-agents</category></item><item><title>GitHub Copilot Facturacion por Uso: Que Cambia y 5 Alternativas Mas Baratas</title><link>https://www.bitdoze.com/es/alternativas-github-copilot-2026/</link><guid isPermaLink="true">https://www.bitdoze.com/es/alternativas-github-copilot-2026/</guid><description>GitHub Copilot pasa a facturacion por uso el 1 de junio de 2026. Que cambia, cuanto cuesta realmente, y cinco alternativas que te dan mas control sobre tu presupuesto de codificacion con IA.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;

GitHub anuncio el 27 de abril de 2026 que todos los planes de Copilot pasan a facturacion por uso el 1 de junio. Las unidades de solicitud premium desaparecen. En su lugar, recibes Creditos de IA de GitHub, consumidos segun el uso real de tokens a las tarifas publicadas de la API. Los precios base de los planes no cambian ($10/mes para Pro, $39/mes para Pro+, $19/usuario/mes para Business), pero lo que puedes hacer dentro de esos precios cambia mucho.

Pase los ultimos dias leyendo el anuncio, la documentacion, las tablas de precios y la reaccion de la comunidad. Aqui esta lo que realmente cambia, cuanto cuesta, y a que cambiaria si las cuentas no salen.

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre este articulo&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Que cambia el 1 de junio y que se mantiene igual&lt;/li&gt;
&lt;li&gt;Desglose real de costos por modelo y tipo de tarea&lt;/li&gt;
&lt;li&gt;Cinco alternativas que te dan mas control sobre el gasto&lt;/li&gt;
&lt;li&gt;Mi recomendacion sobre que hacer antes del 1 de junio&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

## Que cambia el 1 de junio

El sistema anterior usaba Unidades de Solicitud Premium (PRUs). Tenias una asignacion mensual y cada modelo tenia un costo fijo en PRUs por solicitud. Si se te agotaban, caias a un modelo mas barato.

El nuevo sistema usa Creditos de IA de GitHub. Cada plan incluye una cantidad mensual de creditos igual al precio del plan:

| Plan | Precio Mensual | Creditos Mensuales |
|------|---------------|-------------------|
| Copilot Pro | $10 | $10 |
| Copilot Pro+ | $39 | $39 |
| Copilot Business | $19/usuario | $19/usuario |
| Copilot Enterprise | $39/usuario | $39/usuario |

Los creditos se consumen segun el uso de tokens a las [tarifas publicadas](https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing) para cada modelo. Un uso mas intensivo consume creditos mas rapido. Cuando se agotan los creditos, el servicio deja de funcionar hasta que compres mas o se reinicie tu ciclo.

### Que se mantiene igual

- Los **precios base** de los planes no cambian.
- Las **completions de codigo y sugerencias de Next Edit** siguen incluidas en todos los planes y no consumen Creditos de IA.
- La **seleccion de modelos** sigue disponible.

### Que es realmente diferente

- **Sin mas respaldo.** En el sistema anterior, si agotabas tus PRUs, Copilot caia a un modelo mas barato y seguia funcionando. En el nuevo sistema, cuando se agotan los creditos, se acabo. Tienes que comprar mas o esperar.
- **El uso varia mucho segun el modelo.** Una completion rapida en GPT-4o-mini es barata. Una sesion agente de varias horas con Claude Opus 4.6 puede quemar todo tu credito mensual en una sola sesion.
- **La revision de codigo de Copilot ahora tambien consume minutos de GitHub Actions.** Ademas de los Creditos de IA.
- **Suscriptores de plan anual:** se quedan en facturacion basada en PRU hasta que expire su plan, pero los multiplicadores de modelo aumentan el 1 de junio.

## Cuanto costara realmente?

| Tarea | Modelo | Uso Aproximado de Tokens | Costo en Creditos |
|-------|--------|--------------------------|-------------------|
| Completion de codigo | GPT-4o-mini | ~500 tokens | centesimos |
| Pregunta en chat | Claude Sonnet 4.6 | ~2K entrada, 500 salida | ~$0.02 |
| Refactorizacion multi-archivo | Claude Opus 4.6 | ~20K entrada, 5K salida | ~$0.50 |
| Sesion agente (1 hora) | Claude Opus 4.6 | ~200K entrada, 50K salida | ~$5-8 |
| Sesion agente (4 horas) | Claude Opus 4.6 | ~1M entrada, 250K salida | ~$25-40 |

Si haces una sesion larga con Opus al mes, eso consume la mayor parte de un credito de $10 de Pro. Si haces dos o tres, estas comprando creditos extra o cambiando de modelo.

**Los usuarios ligeros de Copilot (completions, chat ocasional) apenas lo notaran. Los usuarios pesados de agentes pagaran mas, posiblemente mucho mas.**

## Cinco alternativas que te ahorran dinero

### 1. OpenCode (mejor alternativa general)

OpenCode es el agente de codificacion en terminal open source con mas de 120K estrellas en GitHub. Tu eliges el modelo y el proveedor.

&lt;Button text=&quot;Guia de OpenCode&quot; link=&quot;/es/guia-configuracion-opencode/&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

**Ejemplo de costo:** MiniMax M2.7 a $0.30/M de entrada. Una sesion tipica usa 50K entrada y 10K salida — eso es unos $0.03 por sesion. 100 sesiones al mes por $3.

### 2. Codex CLI de OpenAI (gratis con plan ChatGPT)

Si ya pagas por ChatGPT Plus ($20/mes) o ChatGPT Pro ($200/mes), Codex CLI esta incluido.

**Costo:** Incluido con tu suscripcion existente de ChatGPT. Sin costos de API adicionales.

**Limitacion:** Solo OpenAI. No puedes usar Anthropic, Google ni modelos open source.

### 3. Aider (ligero y flexible)

Aider es un agente de codificacion terminal minimalista que funciona con cualquier proveedor LLM.

**Costo:** Pagas por tokens de API al costo. Mismo precio que usar los modelos directamente.

**Limitacion:** Sin modo plan, sin soporte de imagenes, TUI minima.

### 4. OpenCode Go ($10/mes fijo)

&lt;Button text=&quot;OpenCode Go&quot; link=&quot;https://go.bitdoze.com/opencode-go&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

**Costo:** $10/mes. Limites de uso hasta $60/mes en gasto equivalente de API.

**Por que funciona:** Costo predecible, sin sorpresas por token. 12 modelos incluidos. Para un análisis detallado, consulta la [guía de OpenCode Go](/opencode-go-plan/).

### 5. Modelos locales con Ollama (costo cero de API)

Si tienes hardware decente (16GB+ de RAM o una GPU), puedes ejecutar modelos de codificacion localmente a traves de Ollama.

**Costo:** Cero por token. Solo electricidad y hardware.

**Limitacion:** Los modelos locales son mas debiles que los modelos de API para tareas complejas. Consulta nuestra [guia de Ollama con Docker](/ollama-docker-install/) para la configuracion.

## Que haria antes del 1 de junio

**Revisa tu uso actual.** GitHub lanzara una experiencia de &quot;factura previa&quot; a principios de mayo en la pagina de Resumen de Facturacion. Ve cuanto costaria tu uso actual bajo el nuevo sistema.

**Si solo usas completions:** Quedate en Copilot. Las completions siguen incluidas.

**Si usas Copilot Chat ocasionalmente:** El plan Pro de $10/mes probablemente te cubre.

**Si usas funciones agente intensivamente:** Cambia a OpenCode con un modelo barato para trabajo diario, mantén Copilot solo para completions.

&lt;Notice type=&quot;info&quot; title=&quot;Guias relacionadas&quot;&gt;
- [Guia de configuracion de OpenCode](/es/guia-configuracion-opencode/) — instalacion y configuracion completa
- [Mejores modelos baratos para Hermes Agent](/es/mejores-modelos-baratos-hermes-agent/) — precios y benchmarks para todos los modelos open source
- [Guia de configuracion de Hermes Agent](/es/guia-configuracion-hermes-agent/) — agente de IA autoalojado para tareas de servidor
&lt;/Notice&gt;

## Preguntas frecuentes

&lt;Accordion label=&quot;Las completions de Copilot seguiran funcionando igual?&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;
Si. Las completions de codigo y sugerencias de Next Edit siguen incluidas en todos los planes y no consumen Creditos de IA.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Puedo comprar creditos adicionales si se me agotan?&quot; group=&quot;faq&quot;&gt;
Si. Los usuarios de planes pagados pueden comprar Creditos de IA adicionales.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;OpenCode es realmente gratis?&quot; group=&quot;faq&quot;&gt;
El software es gratis y open source. Pagas por el uso de la API del LLM. Con modelos baratos como MiniMax M2.7 a $0.30/M de entrada, un mes de codificacion intensiva cuesta $5-15.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Puedo usar multiples herramientas a la vez?&quot; group=&quot;faq&quot;&gt;
Si. Puedes usar Copilot para completions en el editor, OpenCode para codificacion en terminal, y Hermes Agent para tareas de servidor. No entran en conflicto entre si.
&lt;/Accordion&gt;

Para mas herramientas de codificacion con IA, comparaciones de modelos y configuraciones de agentes autoalojados, consulta nuestra [comparacion de herramientas de codificacion con IA](/ai-coading-tools/) y el resumen de [alternativas a OpenClaw](/es/alternativas-openclaw/).</content:encoded><category>ai</category><category>ai-tools</category><category>vps</category></item><item><title>Guia de Configuracion de OpenCode: Alternativa Open Source a Claude Code en tu VPS</title><link>https://www.bitdoze.com/es/guia-configuracion-opencode/</link><guid isPermaLink="true">https://www.bitdoze.com/es/guia-configuracion-opencode/</guid><description>Instala y configura OpenCode en un VPS Linux. Conectalo a modelos open source baratos como MiniMax M2.7, Qwen 3.6 y DeepSeek V4. La alternativa open source a Claude Code que cuesta una fraccion del precio.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

Claude Code es bueno. Yo lo uso. Pero cuesta $20/mes como minimo, consume tus limites de tasa rapido, y si estas en el plan anual, estas atado a los precios de Anthropic. Con GitHub Copilot [cambiando a facturacion por uso el 1 de junio](/es/alternativas-github-copilot-2026/), muchos desarrolladores buscan algo que puedan controlar.

[OpenCode](https://opencode.ai/) es la alternativa open source que sigue mejorando. Mas de 120K estrellas en GitHub, mas de 75 proveedores de modelos, y puedes ejecutarlo en un VPS de $6/mes con modelos open source que cuestan centavos por solicitud. Lo he estado usando junto con [Hermes Agent](/es/guia-configuracion-hermes-agent/) y OpenClaw durante las ultimas semanas y se ha convertido en mi agente de codificacion en terminal por defecto.

Esta guia cubre la instalacion en un VPS Linux, la conexion a modelos baratos, y el flujo de trabajo que realmente uso dia a dia.

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre esta guia&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Instalar OpenCode en un VPS Linux en menos de un minuto&lt;/li&gt;
&lt;li&gt;Conectar a modelos open source baratos via OpenRouter y proveedores directos&lt;/li&gt;
&lt;li&gt;Configurar OpenCode Go por $10/mes con acceso a 16 modelos&lt;/li&gt;
&lt;li&gt;Modo plan vs modo construccion, el flujo /init, y consejos de uso real&lt;/li&gt;
&lt;li&gt;Como se compara OpenCode con Claude Code, Codex CLI y Aider&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

## Que es OpenCode realmente

OpenCode es un agente de codificacion basado en terminal. Lee tu base de codigo, planifica cambios, edita archivos, ejecuta comandos e itera sobre errores — el mismo ciclo que ejecuta Claude Code, pero open source y compatible con cualquier proveedor. Funciona con Anthropic, OpenAI, Google, Alibaba, MiniMax, DeepSeek, Xiaomi, Moonshot y mas de 70 proveedores mas. Tambien puedes usar modelos locales a traves de Ollama.

La diferencia clave con Claude Code: tu eliges el modelo y el proveedor. Si Claude Sonnet es demasiado caro para una tarea, cambia a Qwen 3.6 Plus a $0.33/M de tokens de entrada. Si necesitas maximo razonamiento, cambia a GLM 5.1. Tu controlas el costo.

&lt;Button text=&quot;OpenCode GitHub&quot; link=&quot;https://github.com/anomalyco/opencode&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

## Instalar OpenCode en un VPS

El script de instalacion se encarga de todo. En un VPS Linux:

```bash
curl -fsSL https://opencode.ai/install | bash
```

Esto instala el binario `opencode`. Verifica que funciona:

```bash
opencode --version
```

Otros metodos de instalacion si el script no funciona en tu configuracion:

&lt;Tabs&gt;
&lt;Tab name=&quot;npm&quot;&gt;
```bash
npm install -g opencode-ai
```
&lt;/Tab&gt;
&lt;Tab name=&quot;Bun&quot;&gt;
```bash
bun install -g opencode-ai
```
&lt;/Tab&gt;
&lt;Tab name=&quot;Homebrew&quot;&gt;
```bash
brew install anomalyco/tap/opencode
```
&lt;/Tab&gt;
&lt;Tab name=&quot;Docker&quot;&gt;
```bash
docker run -it --rm ghcr.io/anomalyco/opencode
```
&lt;/Tab&gt;
&lt;/Tabs&gt;

### Lo que necesitas

- Node.js 18+ (el script de instalacion se encarga de esto en la mayoria de sistemas)
- Una API key de al menos un proveedor
- Un emulador de terminal que soporte imagenes si quieres arrastrar y soltar capturas de pantalla (WezTerm, Ghostty, Kitty, o Alacritty)

En un VPS sin interfaz grafica, no necesitas soporte de imagenes. OpenCode funciona bien sobre SSH plano.

## Configurar un proveedor de modelos

OpenCode soporta tres formas de conectar modelos, de la mas facil a la mas flexible.

### Opcion 1: OpenCode Zen (la mas simple)

OpenCode Zen es el proveedor integrado. Te registras en [opencode.ai/auth](https://opencode.ai/auth), obtienes una API key, y la pegas en OpenCode.

Ejecuta `/connect` en el TUI, selecciona `opencode`, y pega tu clave.

### Opcion 2: OpenRouter (mas modelos)

OpenRouter te da acceso a mas de 200 modelos a traves de una sola API key. Esto es lo que uso para la mayoria de mi trabajo.

```bash
echo &quot;OPENROUTER_API_KEY=your-key-here&quot; &gt;&gt; ~/.config/opencode/.env
```

Luego en OpenCode, ejecuta `/connect` y selecciona OpenRouter.

### Opcion 3: Claves directas del proveedor

Para proveedores especificos puedes configurar variables de entorno directamente:

```bash
# MiniMax
echo &quot;MINIMAX_API_KEY=your-key&quot; &gt;&gt; ~/.config/opencode/.env

# Z.AI (GLM)
echo &quot;ZAI_API_KEY=your-key&quot; &gt;&gt; ~/.config/opencode/.env

# Xiaomi MiMo
echo &quot;MIMO_API_KEY=your-key&quot; &gt;&gt; ~/.config/opencode/.env

# DeepSeek
echo &quot;DEEPSEEK_API_KEY=your-key&quot; &gt;&gt; ~/.config/opencode/.env

# Moonshot (Kimi)
echo &quot;MOONSHOT_API_KEY=your-key&quot; &gt;&gt; ~/.config/opencode/.env
```

## OpenCode Go: $10/mes, todos los modelos incluidos

Si no quieres gestionar multiples API keys, la [suscripcion OpenCode Go de $10/mes](/opencode-go-plan/) incluye 16 modelos (Grok 4.5, Kimi K3, GLM-5.2, DeepSeek V4, MiniMax M3 y mas) en una sola API key. Para un analisis detallado con limites y uso real, consulta la [reseña de OpenCode Go](/opencode-go-plan/).

&lt;Button text=&quot;OpenCode Go&quot; link=&quot;https://go.bitdoze.com/opencode-go&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

### Que incluye

- $10/mes
- MiniMax M2.7, M2.5, MiMo V2.5 Pro, GLM 5, GLM 5.1, Kimi K2.5, K2.6, DeepSeek V4 Pro, V4 Flash, Qwen 3.5 Plus, Qwen 3.6 Plus y mas
- Modelos alojados en EE.UU., UE y Singapur
- Politica de cero retencion

### Limites de uso

| Limite | Tope |
|--------|------|
| Por 5 horas | $12 |
| Por semana | $30 |
| Por mes | $60 |

Los modelos mas baratos rinden mas. MiniMax M2.7 te da un estimado de 3,400 solicitudes por 5 horas. GLM 5.1 te da 880.

### Configuracion

Suscribete en [opencode.ai/auth](https://opencode.ai/auth), copia tu API key, luego en OpenCode:

```
/connect
```

Selecciona `OpenCode Go` y pega tu clave. Cambia modelos con `/models`.

El endpoint de Go tambien es accesible via API en `https://opencode.ai/zen/go/v1/chat/completions`, asi que puedes usarlo con [Hermes Agent](/es/guia-configuracion-hermes-agent/) u OpenClaw tambien.

## Trabajar con OpenCode dia a dia

### Inicializar un proyecto

La primera vez que abres OpenCode en un proyecto:

```bash
cd /path/to/project
opencode
```

Luego ejecuta:

```
/init
```

OpenCode analiza tu base de codigo y crea un archivo `AGENTS.md` en la raiz del proyecto. Este archivo le dice a OpenCode sobre la estructura de tu proyecto, patrones de codificacion y convenciones. Puedes editarlo manualmente para anadir instrucciones personalizadas.

### Modo plan vs modo construccion

Este es el flujo de trabajo al que siempre vuelvo. Presiona **Tab** para cambiar entre modos:

**Modo plan** (solo lectura): OpenCode lee tu base de codigo y describe como implementaria una funcionalidad. No se hacen cambios.

**Modo construccion** (lectura-escritura): OpenCode hace los cambios reales en tus archivos.

El patron:

1. Cambia a modo plan con Tab
2. Describe lo que quieres
3. Revisa el plan, anade restricciones
4. Cambia a modo construccion con Tab
5. Di que adelante

### Deshacer y rehacer

Si OpenCode hace un cambio que no te gusta:

```
/undo
```

Revierte los cambios y muestra tu prompt original para que puedas reformular.

### Compartir conversaciones

```
/share
```

Crea un enlace a tu conversacion actual. Util para mostrarle a tu equipo lo que hizo el agente.

## Elegir el modelo adecuado para cada tarea

| Tarea | Modelo | Razon |
|-------|--------|-------|
| Ediciones rapidas, refactorizacion | MiniMax M2.7 | Barato y rapido |
| Trabajo frontend, generacion de UI | Qwen 3.6 Plus | Fuerte en &quot;vibe coding&quot; |
| Cambios complejos multi-archivo | GLM 5.1 | Mejor precision de codigo |
| Largo contexto, repos grandes | DeepSeek V4 Pro | 1M contexto, baja alucinacion |
| Uso diario por defecto | MiniMax M2.7 o Qwen 3.6 Plus | Balance de costo y calidad |

Cambia modelos en OpenCode con `/models`. Sin reinicio necesario.

## OpenCode vs Claude Code vs Codex CLI

| Caracteristica | OpenCode | Claude Code | Codex CLI |
|----------------|----------|-------------|-----------|
| **Precio** | Gratis (pagas API) | $20/mes + API | Incluido con ChatGPT |
| **Eleccion de modelo** | 75+ proveedores | Solo Anthropic | Solo OpenAI |
| **Open source** | Si | No | Si |
| **Modo plan** | Si (tecla Tab) | No | No |
| **Soporte de imagenes** | Arrastrar y soltar | Pegar imagenes | No |
| **Servidores MCP** | Si | Si | Si |
| **VPS friendly** | Si | Si | Si |

&lt;Notice type=&quot;warning&quot; title=&quot;Riesgo de suscripcion&quot;&gt;
Usar los tokens OAuth de tu suscripcion de Claude Code o ChatGPT con agentes de codificacion automatizados puede hacer que te suspendan la cuenta. Estos proveedores monitorean el uso automatizado. Usa API keys de los modelos listados arriba en su lugar. Consulta nuestra [guia de modelos](/es/mejores-modelos-opensource-openclaw/) para el desglose completo.
&lt;/Notice&gt;

## Ejecutar OpenCode en un VPS via SSH

OpenCode funciona sobre SSH. Lo ejecuto en un VPS de Hetzner de $6/mes y me conecto desde mi laptop. Algunos consejos:

Usa **tmux** para que tu sesion sobreviva si la conexion SSH se cae:

```bash
tmux new -s code
cd /path/to/project
opencode
```

Para una mejor experiencia de terminal sobre SSH, usa **mosh**:

```bash
mosh user@your-vps-ip
```

## Preguntas frecuentes

&lt;Accordion label=&quot;OpenCode es realmente gratis?&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;
El software es gratis y open source. Pagas por el uso de la API del LLM. Si usas OpenCode Go, son $10/mes. Si usas claves directas del proveedor, pagas por token. MiniMax M2.7 a traves de OpenRouter cuesta $0.30/M de tokens de entrada, que es aproximadamente $3-7/mes para uso tipico de codificacion.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Puedo usar OpenCode con modelos locales via Ollama?&quot; group=&quot;faq&quot;&gt;
Si. Configura `OPENAI_BASE_URL=http://localhost:11434/v1` y `OPENAI_API_KEY=ollama` en tu configuracion de OpenCode. Consulta nuestra [guia de Ollama con Docker](/ollama-docker-install/) para la configuracion.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Puedo usar OpenCode junto con Hermes Agent?&quot; group=&quot;faq&quot;&gt;
Si, se complementan. OpenCode es para tareas de codificacion. Hermes Agent es para tareas mas amplias — busquedas web, tareas programadas, mensajeria, gestion de servidor. Ejecuta ambos en el mismo VPS.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Que VPS necesito?&quot; group=&quot;faq&quot;&gt;
Cualquier VPS Linux con 1GB+ de RAM funciona. OpenCode en si es ligero — el trabajo pesado ocurre en el proveedor de API. Un Hetzner CX22 de $6/mes es mas que suficiente.
&lt;/Accordion&gt;

Si tambien ejecutas agentes de IA en tu servidor, consulta nuestra [guia de configuracion de Hermes Agent](/es/guia-configuracion-hermes-agent/) y el resumen de [alternativas a OpenClaw](/es/alternativas-openclaw/). Para los modelos mas baratos, la guia de los [mejores modelos baratos para Hermes Agent](/es/mejores-modelos-baratos-hermes-agent/) cubre precios y benchmarks para todas las principales opciones open source. Si prefieres un agente de codificacion en terminal mas minimalista con un sistema de extensiones en TypeScript, nuestra [guia de configuracion de Pi coding agent](/es/guia-configuracion-pi-agent/) cubre instalacion, configuracion de modelos y las mejores extensiones. Para una comparacion detallada de estos dos agentes, consulta la [comparacion de OpenCode vs Pi Agent](/es/opencode-vs-pi-agent/).</content:encoded><category>ai</category><category>ai-tools</category><category>self-hosted</category><category>vps</category></item><item><title>Guía de Configuración de Pi Coding Agent: Instala, Configura Modelos y Mejores Extensiones</title><link>https://www.bitdoze.com/es/guia-configuracion-pi-agent/</link><guid isPermaLink="true">https://www.bitdoze.com/es/guia-configuracion-pi-agent/</guid><description>Guía paso a paso para instalar Pi coding agent, conectar modelos baratos como MiniMax M2.7 y Qwen 3.6, y configurar las mejores extensiones. Incluye LazyPi para configuración en un comando y el puerto en Rust.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

He estado usando [OpenCode](/es/guia-configuracion-opencode/) y [Hermes Agent](/es/guia-configuracion-hermes-agent/) durante un tiempo, pero Pi seguía apareciendo en conversaciones. La gente en Reddit y Hacker News lo llamaba &quot;el mínimo que no se interpone en tu camino.&quot; Después de dos semanas de uso diario, entiendo por qué. Pi es un agente de codificación en terminal creado por Mario Zechner que se mantiene pequeño en el núcleo. Lo instalas, lo apuntas a un proyecto, y empiezas a trabajar. Todo lo demás — memoria, soporte MCP, sub-agentes, temas, habilidades — se añade a través de extensiones que tú eliges.

Ese minimalismo es el punto. Donde OpenCode se envía con una TUI, modo plan y soporte de imágenes desde el inicio, Pi te da una base limpia y un sistema de extensiones en TypeScript. Construyes el agente que quieres en lugar de desactivar las funciones que no necesitas.

Esta guía cubre la instalación, configuración de modelos con proveedores baratos, las extensiones que merece la pena instalar, y cómo saltarte la fase de investigación con LazyPi.

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre esta guía&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Instalar Pi en Linux, macOS, y vía npm&lt;/li&gt;
&lt;li&gt;Conectar modelos baratos: MiniMax M2.7, Qwen 3.6, DeepSeek V4 Pro, GLM 5.1&lt;/li&gt;
&lt;li&gt;Añadir modelos personalizados mediante models.json (Ollama, OpenRouter, cualquier API compatible con OpenAI)&lt;/li&gt;
&lt;li&gt;Las 12 extensiones que realmente importan y qué hace cada una&lt;/li&gt;
&lt;li&gt;LazyPi: configuración en un comando con más de 60 habilidades, 76 temas y soporte MCP&lt;/li&gt;
&lt;li&gt;pi_agent_rust: un puerto en alto rendimiento en Rust con 823 estrellas en GitHub&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

Si todavía estás decidiendo entre agentes de codificación, nuestra [guía de OpenCode](/es/guia-configuracion-opencode/) cubre la alternativa open source a Claude Code, y el artículo de [alternativas a GitHub Copilot](/es/alternativas-github-copilot-2026/) analiza qué hacer tras el cambio de precios del 1 de junio.

## Qué es realmente Pi

Pi es un agente de codificación en terminal que lee tu base de código, planifica cambios, edita archivos, ejecuta comandos de shell, e itera cuando hay errores. La instalación por defecto te da cuatro herramientas: lectura, escritura, edición y bash. Eso es todo. Sin modo plan, sin soporte MCP, sin memoria, sin sub-agentes. Los añades a través de extensiones.

El sistema de extensiones es TypeScript. Dejas un archivo `.ts` en `~/.pi/agent/extensions/` y Pi lo carga. Las extensiones pueden registrar herramientas personalizadas que el LLM puede llamar, interceptar llamadas a herramientas antes de que se ejecuten (para bloquear `rm -rf` por ejemplo), añadir comandos slash, modificar el prompt del sistema, y construir componentes de TUI personalizados. Puedes recargarlas en caliente con `/reload` sin reiniciar Pi.

&lt;Button text=&quot;Documentación de Pi&quot; link=&quot;https://pi.dev/docs/latest&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

## Instalando Pi

Pi se distribuye como un paquete npm.

```bash
npm install -g @mariozechner/pi-coding-agent
```

Luego ejecútalo en el directorio de un proyecto:

```bash
cd /ruta/al/proyecto
pi
```

Pi necesita Node.js 18+. Si no tienes Node, instálalo primero:

&lt;Tabs&gt;
&lt;Tab name=&quot;nvm&quot;&gt;
```bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source ~/.bashrc
nvm install 22
```
&lt;/Tab&gt;
&lt;Tab name=&quot;apt&quot;&gt;
```bash
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
```
&lt;/Tab&gt;
&lt;Tab name=&quot;Docker&quot;&gt;
```bash
docker run -it --rm -v $(pwd):/workspace -w /workspace node:22 \
  npx @mariozechner/pi-coding-agent
```
&lt;/Tab&gt;
&lt;/Tabs&gt;

### Autenticación

Pi soporta dos enfoques de autenticación. Elige el que te convenga.

**Inicio de sesión con suscripción** — si tienes Claude Pro/Max, ChatGPT Plus/Pro, GitHub Copilot, o Google Gemini CLI:

```bash
pi
/login
# Selecciona tu proveedor
```

**Clave API** — para acceso directo al proveedor u OpenRouter:

```bash
export ANTHROPIC_API_KEY=sk-ant-...
pi
```

O guarda las claves en `~/.pi/agent/auth.json`:

```json
{
  &quot;anthropic&quot;: { &quot;type&quot;: &quot;api_key&quot;, &quot;key&quot;: &quot;sk-ant-...&quot; },
  &quot;openrouter&quot;: { &quot;type&quot;: &quot;api_key&quot;, &quot;key&quot;: &quot;sk-or-...&quot; }
}
```

Las entradas del archivo de autenticación tienen prioridad sobre las variables de entorno.

## Configurando modelos

Aquí es donde Pi se vuelve interesante. Puedes conectar cualquier proveedor de modelos a través de variables de entorno, el archivo de autenticación, o un archivo `models.json` personalizado.

### Usando proveedores integrados

Pi tiene soporte integrado para estos proveedores:

| Proveedor | Variable de Entorno | Clave en auth.json |
|-----------|---------------------|---------------------|
| Anthropic | `ANTHROPIC_API_KEY` | `anthropic` |
| OpenAI | `OPENAI_API_KEY` | `openai` |
| DeepSeek | `DEEPSEEK_API_KEY` | `deepseek` |
| OpenRouter | `OPENROUTER_API_KEY` | `openrouter` |
| MiniMax | `MINIMAX_API_KEY` | `minimax` |
| ZAI (GLM) | `ZAI_API_KEY` | `zai` |
| Kimi | `KIMI_API_KEY` | `kimi-coding` |
| Google Gemini | `GEMINI_API_KEY` | `google` |
| Groq | `GROQ_API_KEY` | `groq` |
| xAI | `XAI_API_KEY` | `xai` |
| Mistral | `MISTRAL_API_KEY` | `mistral` |
| Fireworks | `FIREWORKS_API_KEY` | `fireworks` |
| OpenCode Zen | `OPENCODE_API_KEY` | `opencode` |
| OpenCode Go | `OPENCODE_API_KEY` | `opencode-go` |
| Hugging Face | `HF_TOKEN` | `huggingface` |

Configura la clave y Pi auto-descubre todos los modelos de ese proveedor:

```bash
export OPENROUTER_API_KEY=sk-or-...
pi
# /model muestra todos los más de 200 modelos de OpenRouter
```

### Añadiendo modelos personalizados con models.json

Para proveedores que no están integrados — o para Ollama, LM Studio, vLLM, y cualquier API compatible con OpenAI — crea `~/.pi/agent/models.json`:

```json
{
  &quot;providers&quot;: {
    &quot;ollama&quot;: {
      &quot;baseUrl&quot;: &quot;http://localhost:11434/v1&quot;,
      &quot;api&quot;: &quot;openai-completions&quot;,
      &quot;apiKey&quot;: &quot;ollama&quot;,
      &quot;models&quot;: [
        { &quot;id&quot;: &quot;llama3.1:8b&quot; },
        { &quot;id&quot;: &quot;qwen2.5-coder:7b&quot; }
      ]
    }
  }
}
```

El campo `apiKey` es obligatorio pero Ollama lo ignora, así que cualquier cadena funciona. El archivo se recarga cada vez que abres `/model`, así que puedes editarlo durante una sesión sin reiniciar Pi.

Para modelos locales que no soportan el rol `developer` usado por modelos de razonamiento, añade flags de compatibilidad:

```json
{
  &quot;providers&quot;: {
    &quot;ollama&quot;: {
      &quot;baseUrl&quot;: &quot;http://localhost:11434/v1&quot;,
      &quot;api&quot;: &quot;openai-completions&quot;,
      &quot;apiKey&quot;: &quot;ollama&quot;,
      &quot;compat&quot;: {
        &quot;supportsDeveloperRole&quot;: false,
        &quot;supportsReasoningEffort&quot;: false
      },
      &quot;models&quot;: [
        {
          &quot;id&quot;: &quot;qwen3.6:27b&quot;,
          &quot;reasoning&quot;: true
        }
      ]
    }
  }
}
```

### Conectando a OpenRouter para modelos baratos

OpenRouter es la forma más fácil de acceder a todos los modelos asequibles en un solo lugar. Configura tu clave:

```bash
export OPENROUTER_API_KEY=sk-or-...
```

Luego usa `/model` en Pi para elegir de la lista completa. Los modelos que sigo usando:

| Modelo | Por qué | Coste |
|--------|---------|-------|
| MiniMax M2.7 | El más barato, bueno para ediciones diarias | $0.30/M entrada |
| Qwen 3.6 Plus | Mejor para front-end y &quot;vibe coding&quot; | $0.33/M entrada |
| DeepSeek V4 Pro | Contexto de 1M, menor alucinación | $0.435/M entrada |
| GLM 5.1 | Mayor precisión en codificación | $1.05/M entrada |
| Kimi K2.6 | Enjambre de agentes para tareas complejas | $0.75/M entrada |

Para un análisis completo de estos modelos con benchmarks y precios, consulta la guía de [mejores modelos baratos para Hermes Agent](/es/mejores-modelos-baratos-hermes-agent/) — los mismos modelos funcionan con Pi.

### Usando OpenCode Go con Pi

[OpenCode Go](https://go.bitdoze.com/opencode-go) es una suscripción de $10/mes que incluye 16 modelos (Grok 4.5, Kimi K3, GLM-5.2 y más). Pi lo soporta como proveedor integrado. Para un análisis detallado, consulta la [reseña de OpenCode Go](/opencode-go-plan/).

```bash
export OPENCODE_API_KEY=tu-clave-opencode-go
pi
# /model, selecciona el proveedor opencode-go
```

### Sobrescribiendo URLs de proveedores integrados

Si quieres enrutar un proveedor integrado a través de un proxy, añade una entrada mínima a models.json:

```json
{
  &quot;providers&quot;: {
    &quot;anthropic&quot;: {
      &quot;baseUrl&quot;: &quot;https://mi-proxy.example.com/v1&quot;
    }
  }
}
```

Todos los modelos integrados de Anthropic permanecen disponibles. La autenticación existente sigue funcionando.

## Instrucciones del proyecto con AGENTS.md

Pi carga archivos de contexto al inicio. Crea un archivo `AGENTS.md` en la raíz de tu proyecto:

```markdown
# Instrucciones del Proyecto

- Ejecuta `npm run check` después de cambios en el código.
- No ejecutes migraciones de producción en local.
- Usa el patrón existente de manejo de errores en src/errors/.
- Mantén las respuestas concisas.
```

Pi carga `~/.pi/agent/AGENTS.md` para instrucciones globales y `AGENTS.md` desde directorios padre y el directorio actual. Ejecuta `/reload` después de cambios.

## Extensiones que merece la pena instalar

Las extensiones son donde Pi se convierte en algo más que un agente básico. Aquí están las que marcan una diferencia real.

### Extensiones que hacen a Pi más inteligente

**pi-memory-md** — Memoria persistente almacenada como archivos Markdown. El agente recuerda lo que aprendió sobre tu proyecto entre sesiones. Sin esto, Pi empieza desde cero cada vez. Esta es la primera extensión que instalo.

**pi-mcp-adapter** — Conecta Pi a cualquier servidor de herramientas compatible con MCP. GitHub, Playwright, Brave Search, Postgres, Notion, Slack — cualquier servidor MCP funciona. Si usas MCP con otros agentes como Hermes o OpenClaw, esto te permite reutilizar las mismas herramientas.

**pi-subagents** — Ejecuta sub-agentes aislados para trabajo paralelo. Cuando una tarea tiene partes independientes, los sub-agentes las abordan simultáneamente en lugar de hacer todo en secuencia.

**pi-plan** — Modo de planificación de solo lectura con ejecución basada en aprobación. Como el modo plan de OpenCode con Tab. Pi describe lo que haría, tú revisas, luego apruebas. Más seguro para código en producción.

### Extensiones que te ahorran tiempo

**pi-web-access** — Búsqueda web y obtención de URLs dentro de Pi. El agente puede buscar documentación, consultar Stack Overflow, o obtener referencias de API sin salir de la terminal.

**pi-autoresearch** — Bucle de investigación de larga duración. Dile a Pi que investigue un tema e itera — buscando, leyendo, resumiendo, buscando de nuevo — hasta tener una respuesta completa.

**pi-simplify** — Revisa el código cambiado recientemente para claridad y consistencia. Después de que el agente haga cambios, ejecuta esto para detectar problemas de estilo y código muerto.

### Extensiones que mejoran la interfaz

**pi-powerbar** — Línea de estado mostrando nombre del modelo, uso de tokens y estado del contexto de un vistazo. Algo pequeño que marca una gran diferencia cuando cambias de modelo frecuentemente.

**pi-usage-extension** — Rastrea el uso de tokens y el coste de la API en la sesión. Si estás intentando reducir costes con modelos baratos, esto te muestra exactamente cuánto cuesta cada solicitud.

**pi-manage-todo-list** — Seguimiento de trabajo multi-paso con un widget de progreso en vivo. Divide una tarea en pasos, rastrea qué está hecho, qué está en progreso, qué queda.

**pi-btw** — Haz preguntas rápidas secundarias sin contaminar el historial de la conversación. Útil para &quot;espera, ¿qué hace esta función otra vez?&quot; sin descarrilar tu tarea actual.

**pi-add-dir** — Carga directorios de proyecto adicionales en la sesión actual de Pi. Si tu trabajo abarca múltiples repos, esto permite a Pi verlos todos.

### Instalando extensiones

Las extensiones de un solo archivo van directamente en el directorio de extensiones:

```bash
# Ejemplo: copiar una sola extensión
cp ask-user-question.ts ~/.pi/agent/extensions/
```

Extensiones de directorio:

```bash
# Copiar el directorio
cp -r pi-memory-md ~/.pi/agent/extensions/

# Instalar dependencias npm si la extensión tiene package.json
cd ~/.pi/agent/extensions/pi-memory-md
npm install
```

Luego reinicia Pi o ejecuta `/reload`.

## LazyPi: un comando, todo configurado

Si no quieres investigar y elegir extensiones individuales, LazyPi lo hace por ti.

&lt;Button text=&quot;LazyPi&quot; link=&quot;https://lazypi.org/&quot; variant=&quot;solid&quot; color=&quot;purple&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

```bash
npx @robzolkos/lazypi
```

Esto instala Pi si no lo tienes, luego añade:

| Característica | Pi (vanilla) | Pi + LazyPi |
|----------------|-------------|-------------|
| Habilidades | 0 | 60+ |
| Temas | 2 | 76 |
| Soporte MCP | No | Sí |
| Sub-agentes | No | Sí |
| Memoria persistente | No | Sí |
| Proveedor Claude Code CLI | No | Sí |
| Seguimiento coste/uso | No | Sí |
| Seguimiento de tareas | No | Sí |
| Modo de planificación | No | Sí |

Puedes instalar todo a la vez o usar el selector interactivo para elegir paquetes específicos. Al re-ejecutar el comando se salta lo que ya está instalado.

El catálogo de LazyPi incluye todas las extensiones listadas arriba además de más de 60 habilidades comunitarias y 76 temas de terminal (Dracula, Nord, Gruvbox, Tokyo Night, Kanagawa, y más).

&lt;Notice type=&quot;info&quot; title=&quot;Consejo de LazyPi&quot;&gt;
LazyPi es un inicio rápido, no una dependencia permanente. Las extensiones que instala viven en tu directorio `~/.pi/agent/` y funcionan independientemente de LazyPi. Puedes desinstalar el runner de LazyPi y conservar todo lo que instaló.
&lt;/Notice&gt;

## Configuración comunitaria: pi-config

El repositorio [pi-config](https://github.com/amosblomqvist/pi-config) de amosblomqvist es una colección curada de habilidades y extensiones personales para Pi. No está pensado para instalarse como un solo paquete — explora el repositorio y copia lo que necesites.

### Qué contiene

**Extensiones:**
- `bash-guard` — bloquea comandos peligrosos antes de que se ejecuten
- `context.ts` — carga contexto adicional desde fuentes externas
- `filechanges` — rastrea modificaciones de archivos entre turnos
- `google-image-search` — busca en Google Images desde Pi
- `memory.ts` — otra implementación de memoria persistente
- `subagents` — soporte para sub-agentes
- `web-fetch` — obtén y lee páginas web
- `web-search` — integración de búsqueda web
- `youtube-search` — busca en YouTube desde Pi
- `video-extract` — extrae información de URLs de vídeo
- `zz-read-only-mode` — fuerza el modo de solo lectura (bloquea todas las escrituras)

**Habilidades:**
- `orchestrator` — coordina flujos de trabajo multi-paso
- `pdf-reader` — lee y extrae texto de archivos PDF
- `reddit` — busca y lee posts de Reddit
- `stop-slop` — evita que el agente genere contenido de baja calidad

### Cómo usarlo

```bash
# Copiar una extensión de un solo archivo
cp extensions/ask-user-question.ts ~/.pi/agent/extensions/

# Copiar una extensión de directorio
cp -r extensions/web-fetch ~/.pi/agent/extensions/

# Instalar dependencias si es necesario
cd ~/.pi/agent/extensions/web-fetch
npm install

# Copiar una habilidad
cp -r skills/reddit ~/.pi/agent/skills/

# Recargar
# En Pi: /reload
```

Algunas extensiones necesitan herramientas del sistema:

```bash
# Para youtube-search y video-extract
brew install yt-dlp ffmpeg

# Para pdf-reader
python3 -m venv ~/.pi/agent/skills/pdf-reader/.venv
~/.pi/agent/skills/pdf-reader/.venv/bin/pip install -r ~/.pi/agent/skills/pdf-reader/requirements.txt
```

&lt;Notice type=&quot;warning&quot; title=&quot;No clones sobre tu configuración&quot;&gt;
No clones el repositorio pi-config directamente en `~/.pi/agent/` si ya tienes Pi configurado. Copia archivos y directorios individuales en su lugar para no sobrescribir tu configuración existente.
&lt;/Notice&gt;

## pi_agent_rust: el puerto en Rust

Si quieres el mismo concepto de agente pero compilado en un solo binario con inicio más rápido y menor uso de memoria, está [pi_agent_rust](https://github.com/Dicklesworthstone/pi_agent_rust).

&lt;Button text=&quot;pi_agent_rust GitHub&quot; link=&quot;https://github.com/Dicklesworthstone/pi_agent_rust&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

### Qué es

Un agente de codificación IA CLI de alto rendimiento escrito en Rust con código cero unsafe. 823 estrellas en GitHub, 2,812 commits, 13 releases, y desarrollo activo (el último commit fue hace horas al momento de escribir). Es una implementación desde cero en Rust que soporta las mismas siete herramientas integradas que Pi (read, write, edit, bash, grep, find, ls) además de proveedores Anthropic y OpenAI con streaming.

### Por qué podrías quererlo

- **Binario único** — no necesita Node.js. El binario de release ocupa menos de 8MB.
- **Tiempo de inicio** — 12ms frente a varios cientos de milisegundos de la versión Node.js.
- **Ecosistema de extensiones** — soporta extensiones TypeScript a través de un runtime QuickJS integrado, así que las extensiones existentes de Pi funcionan.
- **Seguridad** — modelo de amenazas formal, pruebas de fuzz, `forbid(unsafe_code)`, y más de 60 páginas de documentación de seguridad.
- **Gestión de sesiones** — sesiones con SQLite con navegación por ramas y árbol.

### Instalando pi_agent_rust

```bash
# Instalador de una línea
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/pi_agent_rust/main/install.sh | bash
```

O compila desde la fuente:

```bash
git clone https://github.com/Dicklesworthstone/pi_agent_rust.git
cd pi_agent_rust
cargo build --release
# Binario en target/release/pi
```

### Cuándo usar el puerto en Rust

El puerto en Rust es mejor para quienes quieren el agente de terminal más rápido posible, ejecutan en máquinas con recursos limitados, o prefieren una distribución de binario único. La versión Node.js tiene el ecosistema de extensiones más grande y más desarrollo comunitario activo. Ambos leen los mismos archivos `models.json` y `auth.json`, así que puedes cambiar entre ellos sin reconfigurar.

## Pi vs OpenCode vs Claude Code

| Característica | Pi | OpenCode | Claude Code |
|----------------|-----|----------|-------------|
| **Instalación** | Paquete npm | npm/binario | Paquete npm |
| **Lenguaje** | TypeScript | TypeScript | TypeScript |
| **Herramientas por defecto** | 4 (read, write, edit, bash) | Juego completo | Juego completo |
| **Sistema de extensiones** | Extensiones TypeScript | Config + reglas | MCP + hooks |
| **Elección de modelo** | 20+ integrados + personalizados | 75+ proveedores | Solo Anthropic |
| **Modo plan** | Vía extensión | Integrado (tecla Tab) | No |
| **Memoria** | Vía extensión | No | No |
| **Soporte MCP** | Vía extensión | Integrado | Integrado |
| **Sub-agentes** | Vía extensión | No | No |
| **Soporte de imágenes** | Pegar + arrastrar | Arrastrar y soltar | Pegar |
| **Temas** | 2 integrados + 76 comunitarios | Temas integrados | No |
| **Precio** | Gratis (pagas API) | Gratis (pagas API) | $20/mes + API |

Pi empieza más pequeño pero crece a través de extensiones. Si quieres construir tu propio flujo de trabajo de agente desde partes, Pi es la mejor base. Si quieres que todo funcione desde el inicio, OpenCode te lleva ahí más rápido.

## Consejos para el flujo de trabajo diario

### Cambiando modelos

Usa `/model` o `Ctrl+L` para elegir un modelo. Usa `Shift+Tab` para ciclar el nivel de razonamiento. Usa `Ctrl+P` / `Shift+Ctrl+P` para ciclar entre modelos con ámbito.

### Referenciando archivos

Escribe `@` en el editor para buscar archivos por fuzzy-search, o pásalos en la línea de comandos:

```bash
pi @README.md &quot;Resume esto&quot;
pi @src/app.ts @src/app.test.ts &quot;Revisa estos juntos&quot;
```

### Ejecutando comandos de shell

Prefija con `!` para ejecutar un comando y enviar su salida al modelo:

```
!npm run test
```

Usa `!!` para ejecutar un comando sin añadirlo al contexto.

### Sesiones

Las sesiones se guardan automáticamente. Continúa tu última sesión:

```bash
pi -c
```

Navega sesiones anteriores:

```bash
pi -r
```

Dentro de Pi, usa `/resume`, `/new`, `/tree`, `/fork`, y `/clone` para gestionar sesiones.

### Modo no interactivo

Para prompts de una sola vez en scripts o CI:

```bash
pi -p &quot;Resume esta base de código&quot;
cat README.md | pi -p &quot;Resume este texto&quot;
pi -p @captura.png &quot;¿Qué hay en esta imagen?&quot;
```

Usa `--mode json` para salida estructurada o `--mode rpc` para integración con procesos.

## Ejecutando Pi en un VPS

Pi funciona sobre SSH. Lo ejecuto en un VPS de $6/mes y me conecto desde mi portátil.

```bash
# Usa tmux para que las sesiones sobrevivan desconexiones
tmux new -s pi
cd /ruta/al/proyecto
pi
```

Desconecta con `Ctrl+B, D` y reconecta después con `tmux attach -t pi`.

Para una mejor experiencia SSH, usa **mosh**:

```bash
mosh user@tu-ip-vps
```

## Preguntas Frecuentes

&lt;Accordion label=&quot;¿Es Pi gratuito?&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;
El agente en sí es gratuito y de código abierto. Pagas por el uso de la API del LLM. Con modelos baratos como MiniMax M2.7 a $0.30/M tokens de entrada a través de OpenRouter, un mes de codificación cuesta $3-10. [OpenCode Go](/opencode-go-plan/) incluye 16 modelos por $10/mes.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo usar Pi con Ollama para modelos locales?&quot; group=&quot;faq&quot;&gt;
Sí. Añade tu instancia de Ollama a `~/.pi/agent/models.json` con `baseUrl: &quot;http://localhost:11434/v1&quot;`, `api: &quot;openai-completions&quot;`, y `apiKey: &quot;ollama&quot;`. Configura `compat.supportsDeveloperRole` a `false` para modelos que no soporten el rol developer. Consulta nuestra [guía de Ollama con Docker](/es/ollama-docker-instalacion/) para configurar Ollama.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Cómo se compara Pi con OpenCode?&quot; group=&quot;faq&quot;&gt;
Pi es más minimalista por diseño. OpenCode se envía con una TUI, modo plan y soporte de imágenes integrados. Pi te da cuatro herramientas y un sistema de extensiones en TypeScript — añades funciones a través de extensiones. Si quieres construir un flujo de trabajo personalizado desde partes, Pi es la mejor base. Si quieres que todo funcione desde el inicio, OpenCode te lleva ahí más rápido.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Qué es LazyPi?&quot; group=&quot;faq&quot;&gt;
LazyPi (`npx @robzolkos/lazypi`) es un instalador de un comando que añade más de 60 habilidades comunitarias, 76 temas, soporte MCP, sub-agentes, memoria persistente, seguimiento de uso, y modo de planificación a Pi. Es un punto de partida curado, no una dependencia permanente. Todo lo que instala vive en tu directorio `~/.pi/agent/` y funciona independientemente.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Debería usar el puerto en Rust o la versión Node.js?&quot; group=&quot;faq&quot;&gt;
La versión Node.js tiene el ecosistema de extensiones más grande y más soporte comunitario. El puerto en Rust (pi_agent_rust) inicia en 12ms, usa menos de 8MB de memoria, y compila en un solo binario. Ambos leen los mismos archivos de configuración. Si te importa la velocidad y el uso mínimo de recursos, usa el puerto en Rust. Si quieres acceso al ecosistema completo de extensiones comunitarias, usa la versión Node.js.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo usar Pi junto con Hermes Agent u OpenClaw?&quot; group=&quot;faq&quot;&gt;
Sí. Pi es para tareas de codificación — editar archivos, ejecutar builds, refactorizar código. Hermes Agent maneja tareas más amplias como búsquedas web, trabajos programados, mensajería, y gestión de servidores. OpenClaw es otro agente autoalojado con sus propias fortalezas. No entran en conflicto. Ejecútalos todos en el mismo VPS si quieres.
&lt;/Accordion&gt;

Para más guías de agentes IA, consulta la [guía de Hermes Agent](/es/guia-configuracion-hermes-agent/), la [guía de OpenCode](/es/guia-configuracion-opencode/), y los [mejores modelos baratos para cualquier agente de codificación](/es/mejores-modelos-baratos-hermes-agent/). Para los cambios de precios de GitHub Copilot y lo que significan para tu flujo de trabajo, consulta el artículo de [alternativas a Copilot](/es/alternativas-github-copilot-2026/). Para una comparación lado a lado de OpenCode y Pi, consulta la [comparación de OpenCode vs Pi Agent](/es/opencode-vs-pi-agent/).</content:encoded><category>ai</category><category>ai-tools</category><category>self-hosted</category><category>llm</category></item><item><title>Mejores Modelos Open Source Baratos para Hermes Agent en 2026</title><link>https://www.bitdoze.com/es/mejores-modelos-baratos-hermes-agent/</link><guid isPermaLink="true">https://www.bitdoze.com/es/mejores-modelos-baratos-hermes-agent/</guid><description>Cinco modelos open source asequibles para Hermes Agent: MiniMax M3, Xiaomi MiMo V2.5 Pro, GLM 5.2, Kimi K2.6 y DeepSeek V4 Pro. Precios, benchmarks y cual elegir segun tu presupuesto.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

Hermes Agent funciona 24/7. Responde mensajes, ejecuta tareas programadas, corre habilidades y busca en la web sin parar. Ese tipo de uso se acumula rapido si eliges el modelo equivocado. He estado probando distintos proveedores en mi instancia de Hermes durante meses, y el panorama open source ha cambiado mucho desde mis anteriores [recomendaciones de modelos para OpenClaw](/es/mejores-modelos-opensource-openclaw/).

He reducido la lista a cinco modelos que funcionan con Hermes Agent, cuestan una fraccion de lo que pagarias por acceso a la API de Claude o GPT, y en algunos casos igualan o superan a esos modelos propietarios en benchmarks de codigo y agentes.

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre esta guia&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Cinco modelos open source asequibles que funcionan bien con Hermes Agent&lt;/li&gt;
&lt;li&gt;Precio por token, ventanas de contexto y benchmarks de codigo para cada uno&lt;/li&gt;
&lt;li&gt;Cual es el mas barato, cual es el mas potente y cual esta en el medio&lt;/li&gt;
&lt;li&gt;OpenCode Go como una sola suscripcion que incluye los cinco modelos&lt;/li&gt;
&lt;li&gt;Como configurar cada modelo en Hermes Agent&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

Si aun no has instalado Hermes Agent, la [guia de configuracion](/es/guia-configuracion-hermes-agent/) explica todo el proceso. Para opciones de dashboard y gestionar tu agente desde un navegador, consulta la seleccion de los [mejores dashboards para Hermes](/best-hermes-dashboards/).

## Los modelos de un vistazo

| Modelo | Entrada $/M tokens | Salida $/M tokens | Contexto | SWE-Bench Pro | Mejor para |
|--------|-------------------|--------------------|---------|---------------|------------|
| **MiniMax M2.7** | $0.30 | $1.20 | 196K | 56.2% | Opcion mas barata, uso diario |
| **DeepSeek V4 Pro** | $0.435 | $0.87 | 1M | — | Largo contexto con buen precio |
| **Kimi K2.6** | $0.75 | $3.50 | 262K | — | Codigo + agent swarm |
| **MiMo V2.5 Pro** | $1.00 | $3.00 | 1M | — | Agente mas potente, tareas largas |
| **GLM 5.2** | $1.40 | $4.40 | 1M | 62.1% | Mejor en codigo en general |

&lt;Notice type=&quot;success&quot; title=&quot;Resumen&quot;&gt;
**Mas asequible:** MiniMax M3 — $0.30/M de entrada mantiene tu factura mensual por debajo de $15 incluso con uso intensivo. **Mas potente:** GLM 5.2 y MiMo V2.5 Pro — ambos igualan a Claude Opus 4.8 en benchmarks de agentes y codigo.
&lt;/Notice&gt;

## 1. MiniMax M2.7 — La opcion economica

Este es el modelo al que siempre vuelvo para el uso diario con Hermes. A $0.30 por millon de tokens de entrada y $1.20 por millon de tokens de salida, ejecutar Hermes 24/7 cuesta entre $7 y $15 al mes segun cuanto lo uses. Eso es menos que una suscripcion de cafe.

&lt;Button text=&quot;MiniMax M2.7 (10% Descuento)&quot; link=&quot;https://go.bitdoze.com/minimax&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

### Que ofrece M2.7

M2.7 no es nada malo por el precio. Saca 56.2% en SWE-Bench Pro, lo que lo pone en el rango de modelos que cuestan entre tres y cinco veces mas. En el benchmark GDPval-AA para tareas economicamente valiosas, alcanza ELO 1495, la puntuacion mas alta entre modelos open source. Depuracion, analisis de causa raiz, generacion de documentos, llamadas a herramientas en multiples pasos — todo eso lo maneja sin desmoronarse.

MiniMax tambien ofrece M2.7-highspeed, que ejecuta el mismo modelo con mayor throughput por un precio algo mas alto. Para sesiones interactivas de Hermes donde el tiempo de respuesta importa, vale la pena probarlo.

| Especificacion | Valor |
|----------------|-------|
| **Arquitectura** | Mixture-of-Experts (MoE) |
| **Ventana de Contexto** | 196K tokens |
| **SWE-Bench Pro** | 56.2% |
| **GDPval-AA ELO** | 1,495 |
| **Costo Entrada** | $0.30/M tokens |
| **Costo Salida** | $1.20/M tokens |
| **Cache Read** | $0.059/M tokens |

### Token Plan

MiniMax ofrece un [Token Plan](https://platform.minimax.io/subscribe/token-plan) con tarifas con descuento. Si te registras a traves de [este enlace](https://go.bitdoze.com/minimax), obtienes un 10% de descuento en el Token Plan.

&lt;Notice type=&quot;info&quot; title=&quot;Consejo del plan de codificacion&quot;&gt;
El Token Plan de MiniMax te da un pool fijo de tokens con descuento. Para Hermes Agent, el plan base de M2.7 cubre la mayoria de los casos de uso. Suscribete a traves de [go.bitdoze.com/minimax](https://go.bitdoze.com/minimax) para un 10% de descuento.
&lt;/Notice&gt;

### Configurar M2.7 en Hermes

```bash
hermes config set model minimax/minimax-m2.7
```

O configuralo desde el selector de modelos:

```bash
hermes model
```

Selecciona MiniMax y autentica con tu API key.

## 2. DeepSeek V4 Pro — Largo contexto, buen precio

DeepSeek V4 Pro te da una ventana de contexto de 1 millon de tokens por $0.435 por millon de tokens de entrada. El contexto mas largo y el segundo precio mas barato de esta lista. Si tus conversaciones de Hermes se alargan o le pasas repos grandes, este es el modelo que lo maneja sin perder el hilo.

Ejecuta 1.6 billones de parametros totales con 49 mil millones activados por token y soporta modos de pensamiento y sin pensamiento.

| Especificacion | Valor |
|----------------|-------|
| **Arquitectura** | MoE (1.6T total, 49B activos) |
| **Ventana de Contexto** | 1M tokens |
| **AA Intelligence Index** | 51.5 (mejor que el 96% de modelos) |
| **AA Agentic Index** | 67.2 (mejor que el 98% de modelos) |
| **Costo Entrada** | $0.435/M tokens |
| **Costo Salida** | $0.87/M tokens |
| **Cache Read** | $0.003625/M tokens |

### Donde destaca DeepSeek V4 Pro

La tasa de alucinacion de este modelo es del 6.0% en el benchmark AA-Omniscience, la mas baja de esta lista por mucho. Cuando Hermes ejecuta comandos en un servidor en produccion, esa diferencia importa. Tambien saca 96.2% en tau2-Bench Telecom para fiabilidad de agentes conversacionales.

El costo de salida de $0.87/M tokens tambien es el mas barato de la lista. Si tu uso de Hermes genera mucha salida — resumenes de investigacion, generacion de codigo, escritura de documentos — DeepSeek V4 Pro mantiene la factura baja.

&lt;Button text=&quot;Anuncio DeepSeek V4 Pro&quot; link=&quot;https://api-docs.deepseek.com/news/news260424&quot; variant=&quot;outline&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

### Configurar DeepSeek V4 Pro en Hermes

```bash
hermes config set model deepseek/deepseek-v4-pro
```

Anade tu API key de DeepSeek a `~/.hermes/.env`:

```bash
echo &quot;DEEPSEEK_API_KEY=your-key-here&quot; &gt;&gt; ~/.hermes/.env
```

## 3. Kimi K2.6 — Agent swarm integrado

Kimi K2.6 de Moonshot AI hace algo que los demas modelos de esta lista no: un agent swarm que levanta cientos de sub-agentes en paralelo para descomponer y abordar tareas complejas por su cuenta. No tienes que descomponer el trabajo tu mismo — K2.6 lo resuelve.

| Especificacion | Valor |
|----------------|-------|
| **Arquitectura** | MoE (1T total, 32B activos) |
| **Ventana de Contexto** | 262K tokens |
| **AA Intelligence Index** | 53.9 (mejor que el 98% de modelos) |
| **AA Coding Index** | 47.1 (mejor que el 95% de modelos) |
| **AA Agentic Index** | 66.0 (mejor que el 96% de modelos) |
| **Costo Entrada** | $0.75/M tokens |
| **Costo Salida** | $3.50/M tokens |

### Por que K2.6 funciona con Hermes

K2.6 saca 91.1% en GPQA Diamond para razonamiento cientifico de nivel doctoral — la puntuacion mas alta de esta lista. Tambien maneja codigo en Python, Rust y Go en tareas de largo alcance. La funcion Agent Swarm significa que cuando Hermes encuentra una tarea compleja, K2.6 puede descomponerla internamente y trabajar en las partes en paralelo.

Moonshot AI ofrece [Kimi Code](https://www.kimi.com/code) como servicio de suscripcion. Los planes empiezan en $15/mes para el tier Moderato. Si usas Hermes principalmente para tareas de codificacion, la suscripcion de Kimi Code te da una experiencia gestionada con K2.6 incluido.

&lt;Button text=&quot;Pagina de Kimi K2.6&quot; link=&quot;https://www.kimi.com/ai-models/kimi-k2-6&quot; variant=&quot;solid&quot; color=&quot;purple&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

### Configurar K2.6 en Hermes

```bash
hermes config set model moonshotai/kimi-k2.6
```

Anade tu API key de Moonshot:

```bash
echo &quot;MOONSHOT_API_KEY=your-key-here&quot; &gt;&gt; ~/.hermes/.env
```

## 4. Xiaomi MiMo V2.5 Pro — El potente para agentes

MiMo V2.5 Pro es el modelo insignia de Xiaomi y una de las dos opciones mas potentes de esta lista. Fue construido desde cero para escenarios de agentes — ingenieria de software compleja, tareas de largo alcance y flujos de trabajo con cientos de llamadas a herramientas en una sola sesion.

En pruebas internas, MiMo V2.5 Pro completo un compilador SysY completo en Rust en 4.3 horas con 672 llamadas a herramientas, obteniendo una puntuacion perfecta de 233/233 en el conjunto de pruebas oculto. Una tarea que a estudiantes de pregrado de la Universidad de Pekin les toma varias semanas. Tambien construyo una aplicacion web de editor de video funcional — 8,192 lineas de codigo en 1,868 invocaciones de herramientas — en 11.5 horas de trabajo autonomo.

&lt;Button text=&quot;Docs MiMo V2.5 Pro&quot; link=&quot;https://platform.xiaomimimo.com/docs/en-US/news/v2.5-news&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

| Especificacion | Valor |
|----------------|-------|
| **Ventana de Contexto** | 1M tokens |
| **AA Intelligence Index** | 53.8 (mejor que el 98% de modelos) |
| **AA Coding Index** | 45.5 (mejor que el 94% de modelos) |
| **AA Agentic Index** | 67.4 (mejor que el 98% de modelos) |
| **Costo Entrada (hasta 256K)** | $1.00/M tokens |
| **Costo Salida (hasta 256K)** | $3.00/M tokens |
| **Costo Entrada (mas de 256K)** | $2.00/M tokens |
| **Costo Salida (mas de 256K)** | $6.00/M tokens |
| **Cache Read** | $0.20/M tokens |

### Ventaja de eficiencia de tokens

MiMo V2.5 Pro esta optimizado para eficiencia de tokens. En el benchmark de agente ClawEval, alcanza la misma puntuacion que Kimi K2.6 usando un 42% menos de tokens. Eso significa que el precio mas alto por token se compensa al necesitar menos tokens para completar la misma tarea.

El [MiMo Token Plan](https://platform.xiaomimimo.com/token-plan) empieza en $72/ano para el tier Lite (720 millones de creditos). El tier Pro a $600/ano da 8.4 mil millones de creditos. Las horas valle (16:00-24:00 UTC) tienen un 20% de descuento adicional sobre la tarifa del plan.

&lt;Button text=&quot;MiMo Token Plan ($2 Bonus)&quot; link=&quot;https://go.bitdoze.com/mimo&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Bonus de MiMo&quot;&gt;
Registrate a traves de [go.bitdoze.com/mimo](https://go.bitdoze.com/mimo) y obtiene un bono de $2 en el Token Plan de MiMo.
&lt;/Notice&gt;

### Configurar MiMo V2.5 Pro en Hermes

```bash
hermes config set model xiaomi/mimo-v2.5-pro
```

Anade tu API key de MiMo:

```bash
echo &quot;MIMO_API_KEY=your-key-here&quot; &gt;&gt; ~/.hermes/.env
```

MiMo V2.5 Pro tambien esta disponible en OpenRouter, asi que si ya tienes Hermes configurado con una API key de OpenRouter, puedes seleccionarlo de la lista de modelos sin anadir un nuevo proveedor.

## 5. GLM 5.2 — El mas potente en general

GLM 5.2 de Z.AI es el modelo mas nuevo y potente de esta lista, lanzado el 16 de junio de 2026. En SWE-Bench Pro, saca 62.1%, por delante de GPT-5.5 y Gemini 3.1 Pro. En Terminal-Bench 2.1, alcanza 81.0%, a 4 puntos de Claude Opus 4.8. Introduce una ventana de contexto de 1M de tokens (up desde 200K) y control de nivel de esfuerzo para equilibrar capacidad y costo.

&lt;Button text=&quot;Anuncio GLM 5.2&quot; link=&quot;https://z.ai/blog/glm-5.2&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

| Especificacion | Valor |
|----------------|-------|
| **Parametros** | 753B |
| **Ventana de Contexto** | 1M tokens |
| **Salida Maxima** | 128K tokens |
| **SWE-Bench Pro** | 62.1% |
| **Terminal-Bench 2.1** | 81.0% |
| **Costo Entrada** | $1.40/M tokens |
| **Costo Salida** | $4.40/M tokens |

### Que hace diferente a GLM 5.2

GLM 5.2 es el modelo open source mas fuerte disponible. Saca 62.1% en SWE-Bench Pro y 81.0% en Terminal-Bench 2.1, convirtiendolo en el modelo open source mas cercano a Claude Opus 4.8. La nueva ventana de contexto de 1M usa IndexShare para reducir el costo computacional, y el control de nivel de esfuerzo permite elegir entre modos Alto (mas rapido, mas barato) y Maximo (mejores resultados).

Para Hermes Agent, eso significa que GLM 5.2 maneja tareas programadas de larga duracion — briefings matutinos, monitoreo de servidor, tareas de investigacion complejas — sin perder el hilo a mitad de ejecucion. El contexto de 1M tambien significa que puede procesar repositorios completos en una sola sesion.

Z.AI ofrece [Planes de Codificacion GLM](https://z.ai/subscribe) desde $18/mes para el tier Lite. GLM-5.2 consume cuota a 3x durante horas pico y 2x durante horas valle. Hasta septiembre de 2026, el uso en horas valle se factura a 1x.

&lt;Button text=&quot;Planes GLM (10% Descuento)&quot; link=&quot;https://go.bitdoze.com/glm&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Descuento GLM&quot;&gt;
Registrate a traves de [go.bitdoze.com/glm](https://go.bitdoze.com/glm) y obtiene un 10% de descuento en los Planes de Codificacion GLM.
&lt;/Notice&gt;

### Configurar GLM 5.2 en Hermes

```bash
hermes config set model z-ai/glm-5.2
```

Anade tu API key de Z.AI:

```bash
echo &quot;ZAI_API_KEY=your-key-here&quot; &gt;&gt; ~/.hermes/.env
```

GLM 5.2 tambien esta disponible en OpenRouter.

## OpenCode Go — Los cinco modelos, una sola suscripcion

Si no quieres gestionar API keys y facturacion separada para cada proveedor, [OpenCode Go](https://go.bitdoze.com/opencode-go) incluye los cinco modelos en una sola suscripcion por $10/mes. Para un analisis detallado, consulta la [guia de OpenCode Go](/opencode-go-plan/).

&lt;Button text=&quot;OpenCode Go&quot; link=&quot;https://go.bitdoze.com/opencode-go&quot; variant=&quot;solid&quot; color=&quot;purple&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

### Que incluye OpenCode Go

- **$10/mes**
- Acceso a MiniMax M3, MiMo V2.5 Pro, GLM 5.2, Kimi K2.6, DeepSeek V4 Pro y mas
- Modelos alojados en EE.UU., UE y Singapur para acceso global estable
- Politica de cero retencion — los proveedores no usan tus datos para entrenamiento

### Limites de uso

OpenCode Go limita el uso a $12 por 5 horas, $30 por semana y $60 por mes. Los modelos mas baratos como MiniMax M2.7 te permiten hacer mas solicitudes dentro de esos limites. Las cantidades estimadas de solicitudes:

| Modelo | Solicitudes por 5 horas | Solicitudes por semana | Solicitudes por mes |
|--------|------------------------|----------------------|-------------------|
| MiniMax M2.7 | 3,400 | 8,500 | 17,000 |
| DeepSeek V4 Pro | 3,450 | 8,550 | 17,150 |
| Kimi K2.6 | 1,150 | 2,880 | 5,750 |
| MiMo V2.5 Pro | 1,290 | 3,225 | 6,450 |
| GLM 5.2 | 620 | 1,550 | 3,100 |

A $10/mes, OpenCode Go cuesta menos que la mayoria de los planes individuales de proveedores y te da la flexibilidad de cambiar entre modelos segun la tarea. Para Hermes Agent, puedes configurar el endpoint de OpenCode Go como proveedor personalizado y elegir el modelo que se ajuste al trabajo.

### Configurar OpenCode Go en Hermes

Anade el endpoint de OpenCode Go a `~/.hermes/.env`:

```bash
echo &quot;OPENAI_BASE_URL=https://opencode.ai/zen/go/v1/chat/completions&quot; &gt;&gt; ~/.hermes/.env
echo &quot;OPENAI_API_KEY=your-opencode-go-key&quot; &gt;&gt; ~/.hermes/.env
```

Luego configura el modelo:

```bash
hermes config set model opencode-go/minimax-m2.7
```

Cambia de modelo en cualquier momento:

```bash
hermes model
```

## Comparacion directa

| Caracteristica | MiniMax M2.7 | DeepSeek V4 Pro | Kimi K2.6 | MiMo V2.5 Pro | GLM 5.1 |
|---------------|-------------|-----------------|-----------|---------------|---------|
| **Entrada $/M** | $0.30 | $0.435 | $0.75 | $1.00 | $1.05 |
| **Salida $/M** | $1.20 | $0.87 | $3.50 | $3.00 | $3.50 |
| **Contexto** | 196K | 1M | 262K | 1M | 200K |
| **AA Intelligence** | 49.6 | 51.5 | 53.9 | 53.8 | — |
| **AA Agentic** | 61.5 | 67.2 | 66.0 | 67.4 | — |
| **Alucinacion** | 65.6% | 6.0% | 60.7% | 75.5% | Cero |
| **SWE-Bench Pro** | 56.2% | — | — | — | 58.4% |
| **Licencia** | Open weights | MIT | Open weights | Open source | Open source |
| **Estimado mensual** | $7-15 | $10-20 | $15-30 | $15-35 | $15-40 |

### Cual deberias elegir?

**Con presupuesto ajustado:** MiniMax M2.7. A $0.30/M de entrada, puedes ejecutar Hermes todo el mes por el precio de un cafe. El rendimiento es suficiente para la mayoria de tareas diarias — recordatorios, preguntas rapidas, gestion de archivos, investigacion simple.

**Necesitas largo contexto:** DeepSeek V4 Pro. La ventana de 1M de tokens a $0.30/M de entrada es dificil de superar. Si tus conversaciones de Hermes se alargan o procesas archivos grandes, este es el indicado.

**Quieres el agente mas potente:** MiMo V2.5 Pro o GLM 5.2. Ambos igualan a Claude Opus 4.8 en benchmarks de agentes. MiMo V2.5 Pro es algo mejor en tareas sostenidas de largo alcance con su eficiencia de tokens. GLM 5.2 tiene la ventaja en codigo puro con su 62.1% en SWE-Bench Pro.

**No quieres elegir:** OpenCode Go a $10/mes te da los cinco modelos. Cambia entre ellos segun la tarea.

&lt;Notice type=&quot;warning&quot; title=&quot;Aviso de riesgo de suscripcion&quot;&gt;
Usar los tokens OAuth de tu suscripcion de Claude Code, Gemini CLI o Codex con Hermes Agent puede hacer que te suspendan la cuenta. Estos proveedores monitorean patrones de uso automatizado. Usa API keys de los proveedores listados arriba en su lugar. Consulta nuestra [guia de modelos para OpenClaw](/es/mejores-modelos-opensource-openclaw/) para el desglose completo de por que el acceso API es la ruta segura.
&lt;/Notice&gt;

## Lo que yo uso en realidad

Mi configuracion de Hermes usa MiniMax M3 como modelo por defecto para chat diario y tareas rapidas. Para trabajos complejos de codificacion e investigacion, cambio a GLM 5.2 o MiMo V2.5 Pro. DeepSeek V4 Pro se encarga de cualquier cosa que necesite una ventana de contexto larga.

La configuracion de respaldo se ve asi:

```bash
hermes config set model minimax/minimax-m2.7
```

Cuando necesito mas potencia para una tarea especifica:

```bash
hermes model
# Seleccionar GLM 5.2 o MiMo V2.5 Pro
```

Para la mayoria de usuarios de Hermes, empezar con MiniMax M2.7 y subir cuando sea necesario mantiene los costos bajos sin sacrificar capacidad.

## Preguntas frecuentes

&lt;Accordion label=&quot;Cual es el modelo mas barato para Hermes Agent?&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;
MiniMax M2.7 a $0.30/M de entrada y $1.20/M de salida. Ejecutar Hermes 24/7 con uso moderado cuesta $7-15/mes. DeepSeek V4 Pro es el segundo mas barato a $0.435/M de entrada y $0.87/M de salida.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Cual es el modelo mas potente para codigo?&quot; group=&quot;faq&quot;&gt;
GLM 5.1 saca 58.4% en SWE-Bench Pro, por delante de GPT-5.4 y Claude Opus 4.6. Ocupa el primer lugar entre modelos open source en LMArena Code. MiMo V2.5 Pro es un segundo cercano con sus capacidades de agente.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Puedo usar OpenCode Go con Hermes Agent?&quot; group=&quot;faq&quot;&gt;
Si. OpenCode Go proporciona un endpoint compatible con OpenAI. Configura la URL base como `https://opencode.ai/zen/go/v1/chat/completions` en tu configuracion de Hermes y usa tu API key de OpenCode Go. A $10/mes, incluye los cinco modelos listados aqui.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Estos modelos funcionan a traves de OpenRouter?&quot; group=&quot;faq&quot;&gt;
Si. MiniMax M2.7, MiMo V2.5 Pro, GLM 5.1, Kimi K2.6 y DeepSeek V4 Pro estan todos disponibles en OpenRouter. Si ya tienes Hermes configurado con una API key de OpenRouter, puedes cambiar entre ellos sin anadir nuevos proveedores.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Es seguro usar mi suscripcion de Claude con Hermes?&quot; group=&quot;faq&quot;&gt;
No. Anthropic monitorea el uso automatizado a traves de tokens OAuth y ha suspendido cuentas por ello. Usa API keys de los proveedores listados arriba. La [guia de modelos de OpenClaw](/es/mejores-modelos-opensource-openclaw/) explica los riesgos en detalle.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Cual modelo tiene la menor tasa de alucinacion?&quot; group=&quot;faq&quot;&gt;
DeepSeek V4 Pro con un 6.0% en el benchmark AA-Omniscience. GLM 5.1 reporta alucinaciones cercanas a cero. Para ejecutar comandos en un servidor en produccion a traves de Hermes, menor alucinacion significa menos errores.
&lt;/Accordion&gt;

Para toda la cadena de configuracion de Hermes: empieza con el [instalador](/es/guia-configuracion-hermes-agent/), configura un [dashboard](/best-hermes-dashboards/) para acceso desde el navegador, y si quieres modelos gratuitos, la [guia del Portal Nous](/hermes-agent-mimo-v2-pro/) cubre las promociones gratuitas que rotan a traves de las asociaciones de Hermes. Para gestion de tareas estructurada con flujos de trabajo multi-agente, la [guia de Kanban Hermes](/es/guia-kanban-hermes/) cubre tableros de tareas, dependencias y patrones de coordinacion. Si prefieres un agente de codificacion en terminal mas minimalista con un sistema de extensiones en TypeScript, nuestra [guia de configuracion de Pi coding agent](/es/guia-configuracion-pi-agent/) cubre instalacion, configuracion de modelos y las mejores extensiones incluyendo LazyPi.</content:encoded><category>ai</category><category>ai-tools</category><category>hermes</category><category>llm</category></item><item><title>OpenCode vs Pi Agent: ¿Cuál Agente de Codificación en Terminal Deberías Usar?</title><link>https://www.bitdoze.com/es/opencode-vs-pi-agent/</link><guid isPermaLink="true">https://www.bitdoze.com/es/opencode-vs-pi-agent/</guid><description>Comparación práctica de los agentes de codificación en terminal OpenCode y Pi. Cubre instalación, soporte de modelos, extensiones, diferencias de flujo de trabajo, precios y cuál se adapta a tu estilo.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;

He estado usando [OpenCode](/es/guia-configuracion-opencode/) y [Pi](/es/guia-configuracion-pi-agent/) en paralelo durante las últimas semanas. Ambos son agentes de codificación en terminal open source, ambos se conectan a modelos baratos, y ambos corren en un VPS de $6/mes. Pero funcionan de manera suficientemente diferente como para que elegir uno u otro importe.

OpenCode te da todo desde el principio. Lo instalas, conectas un modelo, y ya tienes modo plan, soporte de imágenes, servidores MCP, deshacer/rehacer, y una TUI rica. Pi te da cuatro herramientas y un sistema de extensiones en TypeScript. Añades memoria, planificación, soporte MCP y sub-agentes a través de extensiones que tú eliges.

Terminé usando ambos para cosas diferentes. Esto es lo que encontré.

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre esta comparación&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Cómo difieren los dos agentes en filosofía y comportamiento por defecto&lt;/li&gt;
&lt;li&gt;Instalación y configuración de modelos lado a lado&lt;/li&gt;
&lt;li&gt;Diferencias de flujo de trabajo: modo plan, extensiones, memoria, sesiones&lt;/li&gt;
&lt;li&gt;Precios con modelos baratos a través de OpenRouter y OpenCode Go&lt;/li&gt;
&lt;li&gt;Cuándo elegir uno sobre el otro (o ambos)&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

Para instrucciones completas de configuración, consulta la [guía de OpenCode](/es/guia-configuracion-opencode/) y la [guía de Pi coding agent](/es/guia-configuracion-pi-agent/). Si quieres comparar estos agentes con Claude Code también, ambas guías incluyen tablas comparativas.

## Filosofía: todo incluido vs construye lo tuyo

Esta es la diferencia central y todo lo demás se deriva de ella.

OpenCode es todo incluido. Obtienes una TUI pulida con modo plan, modo construcción, arrastrar y soltar imágenes, soporte de servidores MCP, deshacer/rehacer, compartir conversaciones, y un comando `/init` que inicializa tu proyecto. En el momento en que terminas de instalar, tienes un agente de codificación totalmente funcional. Eliges un modelo y empiezas a trabajar.

Pi empieza con cuatro herramientas: lectura, escritura, edición y bash. Sin modo plan. Sin MCP. Sin memoria. Sin sub-agentes. Añades lo que necesitas a través de extensiones en TypeScript. Eso suena como una desventaja hasta que te das cuenta de que puedes construir exactamente el agente que quieres, sin que ninguna función que no vayas a usar se interponga.

Ningún enfoque es mejor. Depende de cómo trabajes. Si quieres sentarte y empezar a programar de inmediato, OpenCode te lleva ahí más rápido. Si quieres diseñar un flujo de trabajo específico y estás dispuesto a dedicar una hora a configurar extensiones, Pi te da más control sobre lo que el agente puede hacer.

## Instalación

Ambos se instalan en menos de un minuto en cualquier VPS Linux con Node.js 18+.

### OpenCode

```bash
curl -fsSL https://opencode.ai/install | bash
```

También disponible a través de npm (`npm install -g opencode-ai`), Bun, Homebrew, y Docker.

### Pi

```bash
npm install -g @mariozechner/pi-coding-agent
```

Ejecútalo con `pi` en cualquier directorio de proyecto.

OpenCode tiene su propio script de instalación y distribución binaria. Pi es un paquete npm estándar. Para Docker, ambos funcionan bien:

```bash
# OpenCode
docker run -it --rm ghcr.io/anomalyco/opencode

# Pi
docker run -it --rm -v $(pwd):/workspace -w /workspace node:22 \
  npx @mariozechner/pi-coding-agent
```

## Soporte de modelos

Ambos agentes se conectan a los mismos modelos baratos. La diferencia está en cómo los configuras.

### OpenCode

OpenCode tiene más de 75 proveedores integrados. Configuras variables de entorno o usas el comando `/connect` en la TUI. OpenRouter, Anthropic, OpenAI, Google, MiniMax, DeepSeek, ZAI (GLM), Xiaomi MiMo, Moonshot (Kimi), y docenas más están listos para usar.

### Pi

Pi tiene más de 20 proveedores integrados con el mismo enfoque de variables de entorno. Para cualquier cosa que no esté integrada, creas `~/.pi/agent/models.json` para añadir proveedores personalizados, Ollama, o cualquier API compatible con OpenAI. El archivo `models.json` se recarga al abrir `/model`, así que puedes editarlo en medio de una sesión.

Ambos soportan OpenRouter, que es la forma más fácil de acceder a todos los modelos baratos con una sola clave:

```bash
export OPENROUTER_API_KEY=sk-or-...
```

Ambos también soportan [OpenCode Go](https://go.bitdoze.com/opencode-go) como proveedor integrado. A $10/mes, la [suscripción OpenCode Go](/opencode-go-plan/) incluye 16 modelos: Grok 4.5, Kimi K3, GLM-5.2, DeepSeek V4 Pro, MiniMax M3 y más. Para límites y uso real, consulta la [reseña de OpenCode Go](/opencode-go-plan/). Para benchmarks de modelos baratos, consulta la [guía de mejores modelos baratos](/es/mejores-modelos-baratos-hermes-agent/).

### Modelos que uso con ambos agentes

| Tarea | Modelo | Coste |
|-------|--------|-------|
| Ediciones diarias | MiniMax M2.7 | $0.30/M entrada |
| Trabajo frontend / UI | Qwen 3.6 Plus | $0.33/M entrada |
| Refactorización multi-archivo | GLM 5.1 | $1.05/M entrada |
| Repos grandes, largo contexto | DeepSeek V4 Pro | $0.435/M entrada |

## Comparación de flujos de trabajo

### Modo plan

OpenCode tiene modo plan integrado. Presiona Tab para cambiar entre modo plan (solo lectura, el agente describe lo que haría) y modo construcción (el agente hace cambios). Este es el patrón de flujo de trabajo al que siempre vuelvo en OpenCode.

Pi tiene modo plan a través de la extensión `pi-plan`. La instalas, y Pi obtiene la misma planificación de solo lectura con ejecución basada en aprobación. Funciona de la misma manera conceptualmente, pero tienes que instalarla primero.

### Soporte MCP

OpenCode soporta servidores MCP desde el inicio. Los configuras en la configuración de OpenCode y están disponibles inmediatamente.

Pi necesita la extensión `pi-mcp-adapter`. Una vez instalada, se conecta a cualquier servidor de herramientas compatible con MCP — GitHub, Playwright, Brave Search, Postgres, Notion, Slack. Si ya tienes servidores MCP configurados para otros agentes como [Hermes Agent](/es/guia-configuracion-hermes-agent/), puedes reutilizarlos.

### Memoria

OpenCode no tiene memoria persistente. Cada sesión empieza desde cero.

Pi obtiene memoria a través de la extensión `pi-memory-md`. El agente almacena lo que aprende sobre tu proyecto en archivos Markdown y los carga en la siguiente sesión. Esta es la primera extensión que instalo al configurar Pi. Después de unas sesiones, el agente ya conoce la estructura de tu proyecto, convenciones y peculiaridades.

### Sub-agentes

OpenCode no soporta sub-agentes.

Pi tiene `pi-subagents`. Cuando una tarea tiene partes independientes, los sub-agentes las abordan en paralelo. Esto importa para refactorizaciones complejas o cambios multi-archivo donde diferentes partes del trabajo no dependen unas de otras.

### Soporte de imágenes

OpenCode soporta arrastrar y soltar imágenes en terminales que lo soporten (WezTerm, Ghostty, Kitty, Alacritty). Sobre SSH con tmux, puedes pegar imágenes en su lugar.

Pi soporta tanto pegar como arrastrar. La experiencia es similar a través de SSH.

### Inicialización del proyecto

OpenCode tiene `/init`. Lee tu base de código y crea un archivo `AGENTS.md` con convenciones del proyecto, estructura y patrones de codificación. Puedes editarlo manualmente.

Pi no tiene un comando init integrado. Creas `AGENTS.md` tú mismo. Pi lo carga desde `~/.pi/agent/AGENTS.md` (global) y desde la raíz de tu proyecto. Con el repositorio comunitario pi-config, puedes copiar configuraciones curadas de extensiones y habilidades para empezar más rápido.

### Sesiones

Ambos agentes guardan sesiones automáticamente.

OpenCode: `/undo`, `/redo`, `/share`, e historial de conversaciones.

Pi: `/resume`, `/new`, `/tree`, `/fork`, `/clone`. Pi también soporta modo no interactivo con `pi -p &quot;prompt&quot;` para comandos de una sola vez en scripts o CI. Los flags `--mode json` y `--mode rpc` te dan salida estructurada para integración con procesos.

## Extensiones y personalización

Aquí es donde los dos agentes más divergen.

### OpenCode

OpenCode se configura a través de archivos y variables de entorno. Configuras proveedores de modelos en `.env`, configuras servidores MCP en la configuración, y usas `AGENTS.md` para instrucciones del proyecto. No hay sistema de plugins ni API de extensiones. Lo que ves es lo que obtienes.

### Pi

Pi tiene un sistema completo de extensiones en TypeScript. Las extensiones son archivos `.ts` que dejas en `~/.pi/agent/extensions/`. Pueden:

- Registrar herramientas personalizadas que el LLM puede llamar
- Intercept llamadas a herramientas antes de la ejecución (para bloquear comandos peligrosos, por ejemplo)
- Añadir comandos slash
- Modificar el prompt del sistema
- Construir componentes de TUI personalizados
- Recargar en caliente con `/reload` sin reiniciar

La comunidad alrededor de este sistema de extensiones está creciendo. [LazyPi](https://lazypi.org/) incluye más de 60 habilidades, 76 temas, soporte MCP, sub-agentes, memoria, y modo plan en un solo comando. El repositorio [pi-config](https://github.com/amosblomqvist/pi-config) tiene extensiones curadas para búsqueda web, guardias de bash, Reddit, lectura de PDF, y más.

Si quieres construir un flujo de trabajo específico, el sistema de extensiones te da control que OpenCode no ofrece. Pero lleva tiempo configurarlo, y necesitas estar cómodo escribiendo o al menos configurando TypeScript.

## Precios

Ambos agentes son gratuitos y open source. Pagas por el uso de la API del LLM.

| Escenario | Coste |
|-----------|-------|
| MiniMax M2.7 vía OpenRouter | $3-10/mes uso típico de codificación |
| Qwen 3.6 Plus vía OpenRouter | $5-15/mes |
| Suscripción OpenCode Go | $5 primer mes, $10/mes después |
| Claude Sonnet vía Anthropic | $15-50/mes según el uso |

OpenCode Go funciona con ambos agentes. Suscríbete una vez y usa la clave en OpenCode y Pi. Los límites de uso se comparten: $12 por 5 horas, $30 por semana, $60 por mes.

Para el desglose completo de precios, consulta la guía de [mejores modelos baratos para Hermes Agent](/es/mejores-modelos-baratos-hermes-agent/).

## Resumen lado a lado

| Característica | OpenCode | Pi |
|----------------|----------|-----|
| Instalación | Binario/npm/Homebrew/Docker | Paquete npm |
| Herramientas por defecto | Juego completo | 4 (read, write, edit, bash) |
| Modo plan | Integrado (tecla Tab) | Vía extensión |
| Soporte MCP | Integrado | Vía extensión |
| Memoria | No | Vía extensión |
| Sub-agentes | No | Vía extensión |
| Soporte de imágenes | Arrastrar y soltar + pegar | Pegar + arrastrar |
| Proveedores de modelos | 75+ integrados | 20+ integrados + models.json |
| Inicialización /init | Sí | No (AGENTS.md manual) |
| Sistema de extensiones | Ninguno | Extensiones TypeScript |
| Temas | Integrados | 2 integrados + 76 comunitarios |
| Características de sesión | Deshacer, rehacer, compartir | Árbol, bifurcar, clonar, modo no interactivo |
| Precio | Gratis (pagas API) | Gratis (pagas API) |
| Soporte OpenCode Go | Sí | Sí |

## Cuándo elegir OpenCode

- Quieres un agente que funcione inmediatamente después de instalar, sin necesidad de configuración
- El modo plan y modo construcción son centrales en tu flujo de trabajo
- Quieres más de 75 proveedores de modelos sin tocar archivos de configuración
- El arrastrar y soltar imágenes importa (maquetas, capturas, feedback de UI)
- Quieres `/init` para inicializar convenciones del proyecto
- Te gusta una TUI pulida con atajos de teclado

## Cuándo elegir Pi

- Quieres construir un flujo de trabajo de agente personalizado desde partes
- La memoria persistente entre sesiones te importa
- Necesitas sub-agentes para trabajo paralelo en tareas complejas
- Quieres escribir extensiones TypeScript para herramientas personalizadas
- Te importan los 76 temas de terminal
- Quieres modo no interactivo (`pi -p`) para CI o scripting
- Quieres que LazyPi configure más de 60 habilidades en un solo comando

## Cuándo usar ambos

Esto es lo que yo hago. OpenCode para sesiones de codificación rápidas donde sé lo que quiero y solo necesito hacerlo. Pi para proyectos más largos donde la memoria, sub-agentes y un flujo de trabajo a la medida compensan a lo largo del tiempo. Ambos agentes se conectan a la misma clave de OpenRouter, así que el coste es el mismo de cualquier forma.

Ejecútalos en el mismo VPS si quieres. No entran en conflicto. Usa tmux o mosh para conectarte desde tu portátil.

&lt;Accordion label=&quot;¿Puedo usar la misma API key para ambos?&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;
Sí. Ambos agentes leen `OPENROUTER_API_KEY` de las variables de entorno. Si usas OpenCode Go, configura `OPENCODE_API_KEY` y ambos agentes pueden acceder a la misma suscripción. Los límites de uso se comparten.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo ejecutar ambos en el mismo VPS?&quot; group=&quot;faq&quot;&gt;
Sí. Son binarios separados que trabajan en directorios separados. Sin conflictos de puertos, sin estado compartido. Usa diferentes sesiones de tmux: `tmux new -s opencode` y `tmux new -s pi`.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Cuál es mejor para Ollama / modelos locales?&quot; group=&quot;faq&quot;&gt;
Ambos soportan Ollama. OpenCode usa variables de entorno (`OPENAI_BASE_URL`). Pi usa `models.json` con flags de compatibilidad para modelos que no soportan el rol developer. El enfoque de Pi te da más control sobre configuraciones de compatibilidad para modelos de razonamiento. Consulta nuestra [guía de Ollama con Docker](/es/ollama-docker-instalacion/) para la configuración.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Cuál tiene mejores extensiones comunitarias?&quot; group=&quot;faq&quot;&gt;
Pi, por bastante margen. El sistema de extensiones en TypeScript, LazyPi (más de 60 habilidades), pi-config (extensiones comunitarias curadas), y 76 temas dan a Pi un ecosistema mucho más grande de complementos. OpenCode no tiene sistema de extensiones.
&lt;/Accordion&gt;

Para más guías de agentes, consulta la [guía de Hermes Agent](/es/guia-configuracion-hermes-agent/), el artículo de [alternativas a GitHub Copilot](/es/alternativas-github-copilot-2026/), y la guía de [Qwen 3.6 para agentes de codificación IA](/es/qwen36-agentes-codificacion-ia/).</content:encoded><category>ai</category><category>ai-tools</category><category>self-hosted</category><category>llm</category></item><item><title>Modelos Qwen 3.6 para Agentes de Codificacion con IA: Configuracion, Precios y Benchmarks</title><link>https://www.bitdoze.com/es/qwen36-agentes-codificacion-ia/</link><guid isPermaLink="true">https://www.bitdoze.com/es/qwen36-agentes-codificacion-ia/</guid><description>La serie Qwen 3.6 de Alibaba incluye Plus, 27B, 35B-A3B y Max Preview. Precios desde $0.33/M tokens de entrada, contexto de 1M, y fuertes benchmarks de codificacion. Como configurarlos con Hermes, OpenClaw y OpenCode.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

Alibaba lanzo la serie Qwen 3.6 en abril de 2026 y la comunidad de desarrollo lo noto rapido. El hilo de r/LocalLLaMA sobre Qwen 3.6 alcanzo 760 votos con comentarios como &quot;el salto de rendimiento es real&quot; y gente reportando que manejo tareas que normalmente solo confian a Opus y Codex. He estado probando Qwen 3.6 Plus y Qwen 3.6-27B con [Hermes Agent](/es/guia-configuracion-hermes-agent/), [OpenCode](/es/guia-configuracion-opencode/) y OpenClaw durante las ultimas dos semanas.

Lo que llamo mi atencion: Qwen 3.6 Plus saca 78.8 en SWE-bench Verified, cuesta $0.33/M de tokens de entrada, y tiene una ventana de contexto de 1M de tokens. Para referencia, eso lo pone en el mismo rango de rendimiento que modelos que cuestan entre tres y diez veces mas.

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre esta guia&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Cuatro modelos Qwen 3.6: Plus, 27B, 35B-A3B y Max Preview&lt;/li&gt;
&lt;li&gt;Precios a traves de Alibaba directo, OpenRouter y OpenCode Go&lt;/li&gt;
&lt;li&gt;Benchmarks: SWE-bench, Terminal-Bench, GPQA y pruebas de agentes&lt;/li&gt;
&lt;li&gt;Configuracion con Hermes Agent, OpenClaw, OpenCode y Ollama&lt;/li&gt;
&lt;li&gt;Cual modelo Qwen 3.6 elegir para diferentes tareas&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

Si aun estas decidiendo entre agentes de codificacion con IA, nuestra [guia de configuracion de OpenCode](/es/guia-configuracion-opencode/) cubre la alternativa open source a Claude Code, y el articulo de [alternativas a GitHub Copilot](/es/alternativas-github-copilot-2026/) desglosa las opciones despues del cambio de precios del 1 de junio.

## La linea Qwen 3.6

Alibaba lanzo cuatro modelos en la serie 3.6. Cada uno apunta a un caso de uso diferente.

| Modelo | Parametros | Contexto | Entrada $/M | Salida $/M | Licencia | Mejor para |
|--------|-----------|---------|-------------|------------|---------|------------|
| **Qwen 3.6 Plus** | MoE propietario | 1M | $0.33 | $1.95 | Cerrada | Codificacion diaria, agentes |
| **Qwen 3.6 27B** | 27B denso | 262K | ~$0.15 | ~$0.60 | Apache 2.0 | Codificacion autoalojada |
| **Qwen 3.6 35B-A3B** | 35B total, 3B activos | 262K | ~$0.08 | ~$0.30 | Apache 2.0 | Autoalojamiento economico |
| **Qwen 3.6 Max Preview** | ~1T MoE | 262K | Varia | Varia | Cerrada | Maximo rendimiento |

### Qwen 3.6 Plus — El que mas uso

Este es el caballo de batalla. $0.33/M de tokens de entrada con una ventana de contexto de 1M. Alibaba lo optimizo especificamente para codificacion agente y desarrollo frontend.

En SWE-bench Verified saca 78.8. En el benchmark Design Arena para trabajo frontend, entra en el top 11% para escenas 3D, top 14% para juegos y top 16% para componentes de UI.

La ventana de 1M de tokens importa para el trabajo de agente. Cuando Hermes u OpenCode esta procesando un repo grande, el modelo necesita mantener la estructura completa del archivo, multiples archivos relacionados y el historial de la conversacion sin perder piezas.

&lt;Button text=&quot;Qwen 3.6 Plus en OpenRouter&quot; link=&quot;https://openrouter.ai/qwen/qwen3.6-plus&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

### Qwen 3.6 27B — Codificacion autoalojada

Un modelo denso de 27 mil millones de parametros bajo Apache 2.0. Si tienes una GPU con 24GB+ de VRAM (o 64GB+ de RAM para inferencia en CPU), puedes ejecutarlo localmente a traves de Ollama y pagar cero por token.

Acepta entrada de texto, imagen y video, tiene una ventana de contexto de 262K e incluye un modo de pensamiento integrado para razonamiento extendido.

### Qwen 3.6 35B-A3B — La opcion economica autoalojada

Un modelo MoE con 35B parametros totales pero solo 3B activos por token. Eso significa que funciona rapido con mucho menos hardware que el modelo denso de 27B. Licencia Apache 2.0, contexto nativo de 262K (extensible a 1M via YaRN).

Si quieres autoalojar un modelo de codificacion en un VPS sin GPU, este es el que debes probar. Un modelo con 3B parametros activos puede ejecutarse en hardware solo con CPU a velocidades utilizables.

### Qwen 3.6 Max Preview — Maximo rendimiento

El modelo frontera propietario de Alibaba. Alcanzo el numero uno en seis benchmarks de codificacion el 20 de abril de 2026. Aproximadamente 1 billon de parametros totales, 262K de contexto.

Es de pesos cerrados y solo disponible a traves de las APIs de Alibaba Cloud y Qwen Studio. Es el modelo Qwen mas potente pero cuesta mas que la variante Plus. Para la mayoria de casos de uso de agentes de codificacion, Plus es mejor valor.

## Comparacion de precios

### A traves de OpenRouter

| Modelo | Entrada $/M | Salida $/M | Cache Read |
|--------|-------------|------------|------------|
| Qwen 3.6 Plus | $0.33 | $1.95 | $0.033 |
| Qwen 3.6 35B-A3B | ~$0.08 | ~$0.30 | Varia |
| Qwen 3.6 27B | ~$0.15 | ~$0.60 | Varia |

El precio efectivo promedio ponderado en OpenRouter para Qwen 3.6 Plus es de unos $0.40/M de entrada y $2.05/M de salida. El precio de lectura de cache de $0.033/M es muy bajo, lo que beneficia los flujos de trabajo de agentes donde el modelo lee repetidamente los mismos archivos del proyecto.

### A traves de OpenCode Go

Qwen 3.6 Plus y Qwen 3.5 Plus estan incluidos en [OpenCode Go](https://go.bitdoze.com/opencode-go) a $10/mes. A ese precio, Qwen 3.6 Plus te da un estimado de 3,300 solicitudes por 5 horas y 16,300 solicitudes por mes.

## Benchmarks

### Rendimiento de codificacion

| Benchmark | Qwen 3.6 Plus | Qwen 3.6 Max Preview |
|-----------|--------------|---------------------|
| SWE-bench Verified | 78.8% | #1 (multiples benchmarks) |
| SWE-bench Pro | — | #1 |
| Terminal-Bench 2.0 | — | #1 |

### Design Arena (frontend)

| Categoria | Qwen 3.6 Plus Elo | Ranking |
|-----------|-------------------|---------|
| 3D | 1321 | Top 11% |
| Categorias de Codigo | 1292 | Top 14% |
| Desarrollo de Juegos | 1293 | Top 14% |
| Componente UI | 1301 | Top 16% |
| Sitio Web | 1274 | Top 19% |
| SVG | 1249 | Top 16% |
| Visualizacion de Datos | 1270 | Top 18% |

## Configurar Qwen 3.6 con tus agentes

### Hermes Agent

```bash
# Via OpenRouter (recomendado)
hermes config set model qwen/qwen3.6-plus
echo &quot;OPENROUTER_API_KEY=your-key&quot; &gt;&gt; ~/.hermes/.env
```

### OpenCode

```
/connect
# Seleccionar OpenRouter o OpenCode Go
```

Luego `/models` para elegir Qwen 3.6 Plus.

### OpenClaw

Edita tu configuracion:

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: {
        &quot;primary&quot;: &quot;qwen/qwen3.6-plus&quot;,
        &quot;fallback&quot;: [&quot;minimax/minimax-m2.7&quot;]
      }
    }
  }
}
```

### Ollama (para autoalojar 27B o 35B-A3B)

```bash
ollama pull qwen3.6:27b
# O la variante MoE
ollama pull qwen3.6:35b-a3b
```

Luego configura tu agente para usar el endpoint local de Ollama. Consulta nuestra [guia de Ollama con Docker](/ollama-docker-install/) para la configuracion.

## Cual modelo Qwen 3.6 deberias elegir?

**Codificacion diaria con agente:** Qwen 3.6 Plus. El precio de $0.33/M de entrada, contexto de 1M y fuerte puntuacion en SWE-bench lo convierten en la opcion por defecto.

**Autoalojamiento con GPU:** Qwen 3.6 27B. Licencia Apache 2.0, 262K de contexto, fuerte rendimiento.

**Autoalojamiento economico:** Qwen 3.6 35B-A3B. Solo 3B parametros activos significa que funciona en hardware modesto.

**Maxima precision sin importar el costo:** Qwen 3.6 Max Preview. Numero uno en seis benchmarks de codificacion.

**No quieres elegir:** [OpenCode Go](https://go.bitdoze.com/opencode-go) incluye Qwen 3.6 Plus y Qwen 3.5 Plus a $10/mes. Consulta la [guía de OpenCode Go](/opencode-go-plan/) para limites y benchmarks.

## Qwen 3.6 vs la competencia

| Caracteristica | Qwen 3.6 Plus | MiniMax M2.7 | GLM 5.1 | DeepSeek V4 Pro |
|---------------|--------------|-------------|---------|----------------|
| **Entrada $/M** | $0.33 | $0.30 | $1.05 | $0.435 |
| **Salida $/M** | $1.95 | $1.20 | $3.50 | $0.87 |
| **Contexto** | 1M | 196K | 200K | 1M |
| **SWE-bench Verified** | 78.8% | — | — | — |
| **Diseno/frontend** | Fuerte | Promedio | Promedio | Promedio |

Qwen 3.6 Plus se situa entre MiniMax M2.7 y GLM 5.1 en precio. Su contexto de 1M iguala a DeepSeek V4 Pro. Donde destaca es en trabajo de frontend y UI — los rankings de Design Arena son significativamente mas fuertes que cualquier otro modelo a este precio.

Para codificacion de backend y sistemas, GLM 5.1 sigue teniendo la ventaja. Para la opcion mas barata, MiniMax M2.7 a $0.30/M de entrada es dificil de superar.

&lt;Notice type=&quot;info&quot; title=&quot;Guias relacionadas&quot;&gt;
- [Mejores modelos baratos para Hermes Agent](/es/mejores-modelos-baratos-hermes-agent/) — comparacion completa de precios entre los cinco principales modelos open source
- [Guia de configuracion de OpenCode](/es/guia-configuracion-opencode/) — agente de codificacion en terminal compatible con cualquier modelo Qwen
- [Mejores modelos open source para OpenClaw](/es/mejores-modelos-opensource-openclaw/) — recomendaciones de modelos para agentes de IA autoalojados
&lt;/Notice&gt;

## Preguntas frecuentes

&lt;Accordion label=&quot;Qwen 3.6 Plus es gratis en algun lugar?&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;
OpenRouter ofrece un tier gratuito para Qwen 3.6 Plus con limites de tasa. OpenCode Go ($10/mes) lo incluye sin cargos por token hasta el limite mensual de uso. Directamente de Alibaba, no hay tier gratuito pero el precio por token es competitivo.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Puedo ejecutar Qwen 3.6 localmente?&quot; group=&quot;faq&quot;&gt;
Si. Qwen 3.6 27B y Qwen 3.6 35B-A3B son modelos de pesos abiertos bajo Apache 2.0. El modelo denso de 27B necesita una GPU de 24GB o 64GB+ de RAM. El modelo MoE de 35B-A3B tiene solo 3B parametros activos y funciona con mucho menos. Descargalos con Ollama: `ollama pull qwen3.6:27b` o `ollama pull qwen3.6:35b-a3b`.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Como se compara Qwen 3.6 Plus con Claude Sonnet?&quot; group=&quot;faq&quot;&gt;
Qwen 3.6 Plus cuesta $0.33/M de entrada frente a Claude Sonnet a unos $3/M de entrada. Eso es unas 9 veces mas barato. En benchmarks de codificacion, Qwen 3.6 Plus saca 78.8% en SWE-bench Verified. Claude Sonnet saca mas en algunos benchmarks, pero por la diferencia de precio, Qwen 3.6 Plus es mejor valor para la mayoria de tareas de codificacion.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Que hay de Qwen 3.6 Max Preview?&quot; group=&quot;faq&quot;&gt;
Qwen 3.6 Max Preview es el modelo mas potente de Alibaba, alcanzando el numero uno en seis benchmarks de codificacion. Es de pesos cerrados y solo disponible a traves de APIs de Alibaba Cloud y Qwen Studio. Para la mayoria de desarrolladores, Plus es mejor para uso diario. Usa Max Preview cuando necesites maxima precision en un problema dificil especifico.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Qwen 3.6 funciona con servidores MCP?&quot; group=&quot;faq&quot;&gt;
Si. Qwen 3.6 Plus soporta llamadas a funciones y salida estructurada, que es lo que los servidores MCP usan bajo el capo. Cuando conectas servidores MCP a traves de OpenCode, Hermes Agent u OpenClaw, Qwen 3.6 Plus maneja las llamadas a herramientas como cualquier otro modelo compatible.
&lt;/Accordion&gt;

Para mas comparaciones de modelos y guias de configuracion de agentes de IA, consulta nuestra [categoria de herramientas de IA](/category/ai/) y el resumen de [alternativas a OpenClaw](/es/alternativas-openclaw/).</content:encoded><category>ai</category><category>ai-tools</category><category>hermes</category><category>llm</category></item><item><title>Reseña iVANKY FusionDock Ultra: Dos semanas con una bestia Thunderbolt 5</title><link>https://www.bitdoze.com/es/resena-ivanky-fusiondock-ultra/</link><guid isPermaLink="true">https://www.bitdoze.com/es/resena-ivanky-fusiondock-ultra/</guid><description>Tras dos semanas de uso diario con un MacBook M1 Pro y un Mac Mini M4 Pro, aquí va mi opinión honesta sobre el iVANKY FusionDock Ultra — 26 puertos, Ethernet 10Gb, soporte para cuatro pantallas y arquitectura Thunderbolt 5 de doble chip.</description><pubDate>Tue, 28 Apr 2026 00:00:00 GMT</pubDate><content:encoded>import YouTubeEmbed from &quot;@components/widgets/YouTubeEmbed.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;
import AmazonProduct from &quot;@components/widgets/AmazonProduct.astro&quot;;

El [iVANKY FusionDock Ultra](https://ivanky.com/products/fusiondock-ultra) es un dock Thunderbolt 5 con 26 puertos, Ethernet 10Gb y una arquitectura de doble chip capaz de manejar hasta cuatro pantallas externas. Lo he usado a diario durante dos semanas con un MacBook M1 Pro y un Mac Mini M4 Pro, y esta reseña cubre cómo ha sido esa experiencia.

&lt;Button text=&quot;Ver FusionDock Ultra&quot; link=&quot;https://ivanky.com/products/fusiondock-ultra&quot; size=&quot;lg&quot; color=&quot;blue&quot; variant=&quot;solid&quot; /&gt;

## Reseña en vídeo del iVANKY FusionDock Ultra

&lt;YouTubeEmbed
  url=&quot;https://www.youtube.com/embed/ypA4gBUj_6w&quot;
  label=&quot;Reseña iVANKY FusionDock Ultra - Dos semanas después&quot;
/&gt;

## Qué incluye la caja

El FusionDock Ultra viene con todo lo necesario para empezar:

- El dock propiamente dicho
- Un cable magnético dual USB-C (1,2 m) que se une para MacBook Pro o se separa para Mac Mini/Studio
- Un cable Thunderbolt 5 / USB-C 80Gbps independiente (1,2 m)
- Un adaptador de corriente de 240W con cable de alimentación
- Guía de inicio rápido y folleto de preguntas frecuentes

El cable magnético es un detalle excelente. En un MacBook Pro, los dos conectores se acoplan magnéticamente para conectarlos como una sola pieza. En un Mac Mini o Mac Studio, se separan para alcanzar los puertos Thunderbolt más distanciados. Sencillo y funciona bien.

## Diseño y construcción

El dock tiene un chasis de aluminio macizo. iVANKY afirma que utilizan una prensa de extrusión de 2.000 toneladas para formar la carcasa, y se nota — es denso y no se desliza por el escritorio. Hay un bastidor interior de aleación de cobre que ayuda a disipar el calor de los chips, y el chasis queda ligeramente elevado para permitir el paso de aire.

En la parte frontal: dos puertos USB-A, siete puertos USB-C (uno entrega 45W PD), un jack de audio combo de 3,5mm, y ranuras para tarjetas SD y microSD UHS-II. También hay un pequeño logo de iVANKY que se ilumina cuando el dock está encendido. No tiene botón de encendido, lo que significa que se enciende y apaga con tu Mac.

En la parte posterior: dos puertos USB-C host (80/120Gbps) para conectar al Mac, cuatro puertos USB-C downstream (80/120Gbps), un DisplayPort 2.1, un HDMI 2.0, un Ethernet 10Gb, audio óptico de entrada/salida, dos puertos USB-A más y una ranura para bloqueo Kensington.

&lt;Notice type=&quot;info&quot; title=&quot;Solo Apple Silicon&quot;&gt;
El FusionDock Ultra está diseñado exclusivamente para Macs con Apple Silicon. No funciona con Macs Intel, PCs con Windows ni Chromebooks. Necesitas macOS 15.1 o posterior.
&lt;/Notice&gt;

## Uso con un cable vs. dos

Una cosa que me confundió al principio: el dock tiene dos puertos host, y puedes usarlo con solo uno si no necesitas los 26 puertos. Cuando conectas solo al puerto host inferior, accedes a los puertos del chip inferior, que incluye dos salidas USB-C para monitores, el puerto Ethernet, los puertos USB-A y todo lo de la parte frontal. Así es como lo he usado la mayoría de los días — un cable a mi Mac Mini M4 Pro, dos monitores, un SSD y Ethernet. Sin problemas.

Si quieres el ancho de banda completo y todas las salidas de pantalla, conecta ambos puertos host con el cable magnético incluido. Eso activa el segundo chip y desbloquea la fila superior de puertos compatibles con pantalla para soporte de cuatro monitores.

## Arquitectura de doble chip: por qué importa

La mayoría de docks Thunderbolt usan un solo chip para manejar todo — pantallas, puertos, entrega de energía y datos. Cuando exprimes ese chip (cuatro monitores más un SSD más Ethernet), las cosas pueden ralentizarse o volverse inestables.

El FusionDock Ultra tiene dos chips internos. Cada uno gestiona su propio conjunto de puertos y salidas de pantalla, repartiéndose la carga. En la práctica, no noté ninguna caída de velocidad al usar dos monitores 4K (uno OLED, otro a 144Hz) mientras también estaba conectado a un SSD externo por los puertos de 10Gbps. Las velocidades de lectura y escritura del SSD rondaban los 6 GB/s, que es aproximadamente lo que espero de la unidad. Los monitores no causaron ninguna reducción de ancho de banda.

## Soporte de pantallas

Aquí es donde tu Mac específica importa. El dock puede emitir a cuatro pantallas, pero no puede sobrepasar los límites integrados de Apple. Lo que realmente obtienes depende de tu chip:

&lt;Tabs&gt;
&lt;Tab name=&quot;MacBook Pro Max&quot;&gt;

| Chip | Pantallas externas |
|------|---------------------|
| M5 Max | Hasta 4 pantallas (cualquiera de los 6 puertos) |
| M4 Max | Hasta 4 pantallas (repartidas: 2 fila superior, 2 fila inferior) |
| M3 Max | Hasta 4 pantallas (repartidas: 2 fila superior, 2 fila inferior) |
| M2 Max | Hasta 4 pantallas (repartidas: 2 fila superior, 2 fila inferior) |
| M1 Max | Hasta 4 pantallas (repartidas: 2 fila superior, 2 fila inferior) |

&lt;/Tab&gt;
&lt;Tab name=&quot;MacBook Pro&quot;&gt;

| Chip | Pantallas externas |
|------|---------------------|
| M5 Pro | Hasta 3 pantallas |
| M4 Pro | Hasta 3 pantallas |
| M3 Pro | Hasta 2-3 pantallas (depende de la configuración) |
| M2 Pro | Hasta 2 pantallas |
| M1 Pro | Hasta 2 pantallas |

&lt;/Tab&gt;
&lt;Tab name=&quot;Mac Escritorio&quot;&gt;

| Modelo | Pantallas externas |
|--------|---------------------|
| Mac Studio (Max) | Hasta 4-5 pantallas |
| Mac Studio (Ultra) | Hasta 5 pantallas |
| Mac Mini (M4 Pro) | Hasta 3 pantallas |
| Mac Mini (M4) | Hasta 2-3 pantallas |
| Mac Mini (M2 Pro) | Hasta 2-3 pantallas |

&lt;/Tab&gt;
&lt;/Tabs&gt;

Probé con dos monitores 4K — uno OLED y otro a 144Hz — conectados a un M1 Pro y por separado a un Mac Mini M4 Pro. Ambos funcionaron sin parpadeos ni problemas de handshake. Conectar y listo, sin necesidad de drivers DisplayLink.

&lt;Notice type=&quot;warning&quot; title=&quot;Nota sobre monitores 5K&quot;&gt;
Si usas un LG UltraFine 5K o un Samsung ViewFinity S9 5K, estos monitores consumen un bus Thunderbolt completo cada uno. Puedes conectar hasta dos, pero deben repartirse entre las filas superior e inferior de puertos. Consulta la guía de compatibilidad de iVANKY para tu configuración específica de monitor.
&lt;/Notice&gt;

## Ethernet 10Gb: un verdadero diferenciador

La mayoría de docks Thunderbolt se quedan en Ethernet de 1Gb o 2,5Gb. El FusionDock Ultra tiene un puerto Ethernet 10Gb. No tengo una conexión de 10Gb en casa para exprimirlo al máximo, pero el puerto integrado significa que no estás sacrificando uno de tus puertos Thunderbolt para un adaptador Ethernet aparte — ya lo tienes. Para cualquiera que trabaje con NAS, transferencias de archivos grandes por red o cualquier cosa intensiva en ancho de banda, esto solo ya justifica considerar el dock.

## Refrigeración y ruido

El dock tiene dos ventiladores activos: uno aspira aire y el otro lo expulsa a través del chasis de aluminio. He estado sentado junto a él durante dos semanas y puedo decir con certeza que es silencioso. Es notablemente más silencioso que mi dock Thunderbolt anterior de ASUS, que sonaba como un pequeño motor de avión cuando lo exigía. El ruido del ventilador del FusionDock Ultra es comparable al de mi Mac Mini M4 Pro — a veces el Mini es más ruidoso bajo carga.

En uso ligero, los ventiladores pueden apagarse completamente. Bajo cargas sostenidas (transferencias SSD más dos monitores), suben de revoluciones pero se mantienen por debajo de lo que considero molesto en una oficina en casa. El chasis se tibio al tacto pero nunca llega a caliente.

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Dos ventiladores activos con diseño de flujo push-pull&lt;/li&gt;
&lt;li&gt;El chasis de aluminio actúa como dispersor de calor&lt;/li&gt;
&lt;li&gt;Nivel de ruido comparable a un Mac Mini M4&lt;/li&gt;
&lt;li&gt;Más silencioso que la mayoría de docks Thunderbolt 5 competidores&lt;/li&gt;
&lt;li&gt;Los ventiladores se apagan bajo cargas de trabajo ligeras&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

## Entrega de energía

El adaptador de corriente de 240W es considerable. Proporciona:

- **140W** a tu Mac vía el puerto upstream (suficiente para un MacBook Pro de 16 pulgadas a velocidad de carga completa)
- **45W** desde el puerto USB-C PD frontal para un iPad, teléfono u otro dispositivo
- **15W** por cada puerto USB-C downstream
- **7,5W** para los puertos USB-C y USB-A restantes

En el uso diario, mi Mac Mini se mantuvo alimentado sin problemas, y pude cargar mi teléfono desde el puerto frontal mientras todo lo demás estaba conectado. Sin caídas de energía.

## Lo que me gusta tras dos semanas

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;La configuración de doble chip maneja múltiples monitores y periféricos sin limitación de ancho de banda&lt;/li&gt;
&lt;li&gt;Ethernet 10Gb integrado — no necesitas sacrificar un puerto para un dongle&lt;/li&gt;
&lt;li&gt;Refrigeración muy silenciosa, especialmente comparada con otros docks Thunderbolt 5 que he usado&lt;/li&gt;
&lt;li&gt;El conector magnético de doble cable está bien diseñado para alternar entre MacBook y Mac Mini&lt;/li&gt;
&lt;li&gt;Calidad de construcción sólida — pesado como para quedarse en su sitio, sin flexión&lt;/li&gt;
&lt;li&gt;Puede funcionar con un solo cable si no necesitas todos los puertos activos&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

## Lo que podría mejora

Ningún producto es perfecto. Algunas cosas que noté:

- **Sin ranura NVMe SSD integrada.** Puedes conectar una caja externa, pero algunos docks competidores tienen una ranura directamente en la placa. Si quieres almacenamiento interno, necesitas una caja externa.
- **Solo Apple Silicon.** Si tienes un portátil Windows del trabajo o un Mac Intel antiguo, este dock no te funcionará. El diseño de doble chip está específicamente creado para la arquitectura de pantalla de Apple.
- **Sin botón de encendido.** El dock se enciende cuando tu Mac despierta y se apaga cuando entra en reposo. Algunas personas prefieren control manual.
- **El precio.** A 649,99€ (oferta actual desde 749,99€), no es una compra casual. Necesitas usar realmente la mayoría de estos puertos para justificarlo.

&lt;AmazonProduct
  productName=&quot;iVANKY FusionDock Ultra&quot;
  productDescription=&quot;Dock Thunderbolt 5 con arquitectura de doble chip, 26 puertos, Ethernet 10Gb, soporte para cuatro pantallas, carga PD de 140W y refrigeración de doble ventilador para Macs con Apple Silicon.&quot;
  productFeatures={[&quot;Arquitectura Thunderbolt 5 de doble chip&quot;, &quot;26 puertos profesionales incluyendo Ethernet 10Gb&quot;, &quot;Soporte para cuatro pantallas 6K (según Mac)&quot;, &quot;Entrega de energía 140W + 45W PD frontal&quot;, &quot;Refrigeración inteligente de doble ventilador&quot;, &quot;Cable magnético dual USB-C incluido&quot;]}
  productLink=&quot;https://ivanky.com/products/fusiondock-ultra&quot;
  productImage=&quot;https://cdn.shopify.com/s/files/1/0576/6833/7827/files/2x-ecomstack_e08f58c0-cdf3-4150-91d6-364eb9f13b67_1024x1024.webp?v=1770113902&quot;
  productRating={4.5}
  importantConsiderations={[&quot;Solo para Macs con Apple Silicon — no compatible con Macs Intel, Windows o ChromeOS&quot;, &quot;La cantidad de pantallas depende de tu chip Mac (modelos base M1/M2/M3 limitados a 1 pantalla externa)&quot;, &quot;Sin ranura NVMe SSD integrada&quot;, &quot;Sin botón de encendido — se enciende/apaga con tu Mac&quot;]}
  pros={[&quot;Excelente rendimiento de doble chip sin limitación de ancho de banda&quot;, &quot;Ethernet 10Gb integrado&quot;, &quot;Refrigeración de doble ventilador muy silenciosa&quot;, &quot;26 puertos cubren casi cualquier configuración&quot;, &quot;Calidad de construcción sólida con chasis de aluminio&quot;, &quot;Funciona con un solo cable para configuraciones básicas&quot;]}
  cons={[&quot;Caro al precio de venta completo&quot;, &quot;Solo Apple Silicon — sin soporte para Windows o Mac Intel&quot;, &quot;Sin ranura SSD integrada&quot;, &quot;Sin botón de encendido&quot;]}
/&gt;

## Referencia de distribución de puertos

Para referencia rápida, aquí está el desglose completo de puertos:

### Panel frontal
| Puerto | Especificación |
|-------|----------------|
| USB-C (PD) | 10Gbps, 45W Power Delivery |
| USB-C x6 | 10Gbps, 7,5W cada uno |
| USB-A x2 | 10Gbps |
| SD 4.0 | UHS-II |
| microSD 4.0 | UHS-II |
| Audio 3,5mm | Combo entrada/salida |

### Panel posterior
| Puerto | Especificación |
|-------|----------------|
| USB-C Host x2 | 80/120Gbps (conectar al Mac) |
| USB-C Downstream x4 | 80/120Gbps |
| USB-C | 10Gbps |
| USB-A x2 | 10Gbps |
| DisplayPort 2.1 | — |
| HDMI 2.0 | — |
| Ethernet 10Gb | RJ45 |
| Audio óptico | Toslink entrada/salida |
| Audio 3,5mm | Entrada y salida |
| DC In | Adaptador 240W |

## Para quién es este dock

El FusionDock Ultra está diseñado para personas que usan configuraciones de múltiples monitores con Macs Apple Silicon y quieren todo conectado a través de un solo dock. Si tienes tres o cuatro pantallas externas, un NAS en 10Gb y un montón de periféricos, este dock lo maneja todo sin asfixiarse.

Si eres un usuario de un solo monitor con solo un teclado y un ratón para conectar, esto es excesivo. Hay docks más baratos que cumplirán esa función perfectamente.

Para desarrolladores con múltiples pantallas, editores de vídeo que trabajan con SSDs externos y tarjetas de captura, o cualquiera que haya sido frustrado por docks que limitan el rendimiento bajo carga — este aguanta.

&lt;Button text=&quot;Ver FusionDock Ultra&quot; link=&quot;https://ivanky.com/products/fusiondock-ultra&quot; size=&quot;lg&quot; color=&quot;blue&quot; variant=&quot;solid&quot; /&gt;

## Preguntas frecuentes

&lt;Accordion label=&quot;¿Es el FusionDock Ultra compatible con PCs Windows?&quot; group=&quot;fusiondock-faq&quot;&gt;
No. El FusionDock Ultra está diseñado exclusivamente para Macs con Apple Silicon (M1 y posteriores). No funcionará con PCs Windows, Chromebooks ni Macs basados en Intel. La arquitectura de doble chip depende de la señalización de pantalla USB-C de Apple.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo usar el dock con un solo cable?&quot; group=&quot;fusiondock-faq&quot;&gt;
Sí. Conectarse al puerto host inferior da acceso a los puertos del chip inferior, que incluye dos salidas USB-C para monitores, Ethernet, USB-A y todos los puertos frontales. Solo necesitas el segundo cable si quieres más pantallas o el ancho de banda completo para cuatro monitores.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Funciona el dock con Mac Mini y Mac Studio?&quot; group=&quot;fusiondock-faq&quot;&gt;
Sí. El cable magnético incluido se puede separar para alcanzar los puertos Thunderbolt más distanciados en Mac Mini y Mac Studio. Para el Mac Mini M4 (tres puertos Thunderbolt), usa cualquiera dos. Para Mac Studio (cuatro puertos Thunderbolt traseros), usa cualquiera dos.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Qué ruido hacen los ventiladores?&quot; group=&quot;fusiondock-faq&quot;&gt;
En mis pruebas, los ventiladores son comparables a un Mac Mini M4 bajo carga. En uso ligero, se apagan. Bajo carga pesada (múltiples monitores, transferencias SSD), suben de revoluciones pero siguen siendo más silenciosos que docks competidores como el dock Thunderbolt 5 de ASUS. El chasis de aluminio ayuda a disipar el calor pasivamente.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo usar un SSD NVMe con este dock?&quot; group=&quot;fusiondock-faq&quot;&gt;
El dock no tiene una ranura NVMe integrada. Puedes conectar una caja externa NVMe por USB-C y obtener velocidades de lectura/escritura de unos 6 GB/s, lo cual confirmé durante las pruebas. No es tan limpio como una ranura interna, pero el rendimiento está ahí.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Qué viene en la caja?&quot; group=&quot;fusiondock-faq&quot;&gt;
Recibes el dock FusionDock Ultra, un cable magnético dual USB-C (1,2 m), un cable USB-C Thunderbolt 5 (1,2 m), un adaptador de corriente de 240W con cable de alimentación, un manual de usuario y una guía de inicio rápido. No se incluyen cables DisplayPort ni HDMI.
&lt;/Accordion&gt;</content:encoded><category>gadgets</category><category>thunderbolt-dock</category><category>mac</category></item><item><title>Cómo Vender Productos Digitales Online Con Payhip (Paso a Paso)</title><link>https://www.bitdoze.com/es/vender-productos-digitales-payhip/</link><guid isPermaLink="true">https://www.bitdoze.com/es/vender-productos-digitales-payhip/</guid><description>Una guía práctica paso a paso para lanzar tu negocio de productos digitales con Payhip. Desde la configuración de la cuenta hasta tu primera venta, todo lo que necesitas para empezar.</description><pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate><content:encoded>import { Picture } from &quot;astro:assets&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import YouTubeEmbed from &quot;@components/widgets/YouTubeEmbed.astro&quot;;

import imgAccount from &quot;@assets/images/26/04/payhip-account.webp&quot;;
import imgDash from &quot;@assets/images/26/04/payhip-dash.webp&quot;;
import imgAddProduct from &quot;@assets/images/26/04/payhip-add-product.webp&quot;;
import imgStore from &quot;@assets/images/26/04/payhip-store.webp&quot;;
import imgMarketing from &quot;@assets/images/26/04/payhip-marketing.webp&quot;;
import imgAnalytics from &quot;@assets/images/26/04/payhip-analytics.webp&quot;;

Pasé demasiado tiempo pensando en el lanzamiento de mi primer producto digital. Semanas comparando plataformas, leyendo listas de funciones, viendo reseñas en YouTube. Cuando finalmente elegí [Payhip](https://go.bitdoze.com/payhip) y subí mi primer ebook, todo el proceso tardó unos 20 minutos. Quería recuperar esas semanas.

Si tienes conocimientos que podrían convertirse en un ebook, un curso, un pack de plantillas o cualquier otro archivo descargable, esta guía te lleva paso a paso por todo el proceso. Sin relleno, sin secciones teóricas de &quot;mentalidad&quot;. Solo lo práctico.

## ¿Qué es Payhip?

&lt;YouTubeEmbed
  url=&quot;https://www.youtube.com/embed/lZopf8HZyOc&quot;
  label=&quot;Cómo Vender Productos Digitales Online GRATIS (Tutorial Payhip)&quot;
/&gt;

Payhip es una plataforma de ecommerce construida específicamente para creadores que venden productos digitales. Tiene sede en Londres y lleva más de 10 años funcionando, con más de 130.000 vendedores usándola. La versión corta: subes tu producto, conectas un método de pago y empiezas a vender. Payhip se encarga del checkout, la entrega de archivos, el cumplimiento fiscal y la gestión de clientes.

Lo que me hizo elegirla sobre las alternativas fue el modelo de precios. Todas las funciones están disponibles en todos los planes, incluido el gratuito. Nada de &quot;actualiza para desbloquear afiliados&quot; o &quot;paga $99/mes para eliminar la marca de agua&quot;. El plan gratuito cobra un 5% por venta, y ese es el único coste hasta que decidas actualizar.

Payhip no es solo para ebooks. Puedes vender cursos online, sesiones de coaching, membresías, productos físicos y prácticamente cualquier tipo de archivo que se te ocurra. Entraré en detalle sobre cada uno más abajo.

## ¿Por qué productos digitales?

Los productos físicos necesitan inventario, etiquetas de envío y gestión de devoluciones. Los productos digitales necesitan un archivo y una forma de cobrar. Eso es básicamente todo.

Los márgenes son difíciles de ignorar. Creas el producto una vez y lo vendes indefinidamente. Sin coste de fabricación por unidad, sin almacén, sin números de seguimiento. Un ebook de $15 te cuesta lo mismo tanto si vendes 10 copias como 10.000.

Algunos de los productos digitales más comunes que la gente vende:

- Ebooks y guías en PDF
- Cursos online y videotutoriales
- Plantillas de diseño (Canva, Figma, Photoshop)
- Presets de Lightroom y LUTs
- Herramientas de software y plugins
- Planificadores imprimibles, hojas de trabajo y checklists
- Música, efectos de sonido, fotos de stock

No necesitas una audiencia masiva para empezar. Muchos vendedores hacen sus primeras ventas con una pequeña lista de email o un seguimiento en redes sociales de menos de 1.000 personas.

## Paso a paso: lanzar tu negocio de productos digitales con Payhip

Este es el proceso que seguí, desde el registro hasta mi primera venta.

### Paso 1: Decide qué vas a vender

Antes de tocar ninguna plataforma, averigua qué vas a vender realmente. Los mejores productos digitales resuelven un problema específico o le ahorran tiempo a alguien.

Pregúntate: ¿Sobre qué me pide la gente ayuda? ¿Qué sé yo que me llevó años aprender? ¿Hay algún atajo que pueda empaquetar?

Si eres fotógrafo, pueden ser presets. Si eres desarrollador, quizás snippets de código o boilerplates. Si eres profesor, un curso tiene todo el sentido. No le des demasiadas vueltas. Tu primer producto no tiene que ser perfecto. Tiene que existir.

### Paso 2: Crea tu cuenta en Payhip

Ve a [Payhip](https://go.bitdoze.com/payhip) y regístrate. El plan gratuito te da acceso a todas las funciones sin límites de productos ni de ingresos. El único coste es una comisión del 5% por venta, lo cual es bastante razonable cuando estás empezando y no tienes costes iniciales.

&lt;Picture src={imgAccount} alt=&quot;Página de registro de cuenta en Payhip&quot; /&gt;

El registro tarda unos dos minutos. Email, contraseña, nombre de la tienda. Eso es todo.

### Paso 3: Conecta Stripe y PayPal

Esta parte importa porque determina cómo te pagan y qué pueden usar tus clientes en el checkout.

**Stripe** es por donde llegarán la mayoría de tus ventas. Una vez conectado, tu tienda acepta Visa, MasterCard, American Express, JCB, Discover, Diners Club y varios otros tipos de tarjetas. Stripe también habilita Apple Pay y Google Pay automáticamente, lo que acelera los pagos desde móvil. Stripe opera en más de 40 países, así que aunque no estés en EE.UU., probablemente puedas usarlo. Su comisión estándar es de aproximadamente 2,9% + $0,30 por transacción.

**PayPal** es la otra opción, y recomendaría conectar ambos. Algunos compradores tienen saldos en PayPal que prefieren gastar, y otros simplemente confían más en el flujo de pago de PayPal que en introducir datos de tarjeta en un sitio donde nunca han comprado. Las comisiones de PayPal son similares a las de Stripe.

Conectas ambos desde tu panel de Payhip en unos pocos clics. Una vez vinculados, los clientes eligen su método de pago preferido en el checkout.

Payhip deposita el dinero en tu cuenta conectada justo después de cada transacción. Sin esperar pagos semanales o mensuales.

&lt;Picture src={imgDash} alt=&quot;Vista general del panel de Payhip&quot; /&gt;

Esta es la parte que me convenció. Payhip no retiene tu dinero ni agrupa los pagos. Los fondos llegan a tu cuenta de Stripe o PayPal en cuanto se confirma la transacción. Si has tratado con plataformas que retienen tu dinero 7 o 14 días, sabes por qué esto importa, especialmente cuando estás reinvirtiendo en anuncios o nuevos productos.

### Paso 4: Añade tu primer producto

Haz clic en &quot;Add Product&quot; y elige el tipo de producto. Payhip te permite vender cinco tipos diferentes de productos, y todos funcionan bajo la misma cuenta:

**Descargas digitales** son el pan de cada día. Ebooks, plantillas, presets, software, música, fuentes, fotos de stock, cualquier cosa que sea un archivo. Lo subes, estableces un precio y Payhip se encarga de la entrega tras la compra. Los compradores obtienen acceso instantáneo a una página de descarga, más un email con el enlace. Hay un límite de 5GB por archivo, pero sin tope de almacenamiento total ni de ancho de banda.

**Cursos online** es donde la cosa se pone interesante si eres profesor o experto en algo. Payhip aloja cursos completos con lecciones en video, contenido de texto, cuestionarios, tareas, encuestas y archivos descargables. Puedes programar el contenido por goteo (para que los estudiantes desbloqueen nuevas lecciones según un calendario) y emitir certificados de finalización. Los estudiantes tienen sus propias cuentas para seguir su progreso. Puedes alojar videos tú mismo mediante embeds de YouTube/Vimeo gratis, o usar el hosting de video propio de Payhip por $5/mes.

**Coaching** te permite vender sesiones individuales. Conectas una herramienta de calendario (Zoom, Calendly, Skype, Google Meet) y Payhip se encarga de la reserva y el pago. Los clientes compran una sesión, eligen un horario y se presentan. Si eres consultor, terapeuta, tutor o cualquier tipo de freelancer que vende su tiempo, esto elimina el dolor de cabeza de coordinar agendas.

**Membresías** te permiten cobrar a los clientes de forma recurrente, ya sea mensual o anual. Los miembros obtienen acceso a archivos exclusivos, contenido o un grupo de membresía que tú gestionas. Son ingresos recurrentes sin construir un sitio de membresía separado. Tú controlas lo que ven los miembros y puedes añadir o eliminar contenido con el tiempo.

**Productos físicos** también están soportados si quieres mezclar bienes digitales y tangibles. Payhip gestiona el seguimiento de inventario, el cumplimiento de pedidos y la información de envío. Personalmente me quedo con lo digital, pero algunos vendedores combinan un artículo físico (como un cuaderno impreso) junto con su curso digital.

&lt;Picture src={imgAddProduct} alt=&quot;Añadiendo un nuevo producto en Payhip&quot; /&gt;

Para descargas digitales específicamente, puedes configurar precios de &quot;paga lo que quieras&quot; con un monto mínimo. Esto funciona bien para packs de recursos donde los compradores se sienten bien pagando más. Payhip también genera claves de licencia de software automáticamente si vendes software. Y para archivos PDF, hay una función de estampado de PDF que imprime los datos de compra del comprador en cada página, desalentando la distribución no autorizada.

También puedes limitar los intentos de descarga. Por defecto, los compradores tienen 3 intentos de descarga por archivo, lo cual puedes ajustar.

### Paso 5: Personaliza tu tienda y conecta tu dominio

Tu tienda de Payhip viene con un constructor drag-and-drop, y puedes elegir entre temas prediseñados para empezar rápidamente. Puedes personalizar colores, fuentes, secciones de diseño y tu logo sin escribir una sola línea de código. También hay un CMS de blog integrado si quieres publicar contenido junto a tus productos.

&lt;Picture src={imgStore} alt=&quot;Interfaz del constructor de tienda de Payhip&quot; /&gt;

Algo que me sorprendió: puedes conectar tu propio dominio personalizado a tu tienda de Payhip gratis en cualquier plan. Así que en lugar de enviar clientes a `payhip.com/TuTienda`, apuntas tu dominio (como `tienda.tudominio.com` o incluso tu dominio raíz) a Payhip y tu tienda funciona bajo tu propia marca. Para cualquiera que se preocupe por verse profesional, y deberías, esto es una gran ventaja. La mayoría de plataformas competidoras cobran extra por dominios personalizados o lo bloquean detrás de un plan de pago.

Si ya tienes un sitio web en WordPress, Squarespace o cualquier otro, hay otra opción. Puedes incrustar los botones de checkout y las tarjetas de producto de Payhip directamente en tu sitio existente usando un pequeño fragmento de código. Los clientes ven el botón de compra en tu sitio, hacen clic y el overlay de checkout de Payhip se encarga del resto. Sin redirecciones, sin integraciones torpes.

El constructor de tienda es donde Payhip se adelanta a plataformas más simples. Puedes construir páginas de aterrizaje de productos reales dentro de la plataforma en lugar de necesitar un constructor de sitios web separado. Para personas que quieren [vender productos digitales](https://payhip.com/features/sell-digital-downloads) sin lidiar con WordPress o Shopify, es una preocupación menos.

### Paso 6: Configura tus herramientas de marketing

Payhip incluye herramientas de marketing integradas que te costarían $50-100/mes si las compraras por separado.

&lt;Picture src={imgMarketing} alt=&quot;Herramientas de marketing de Payhip&quot; /&gt;

Esto es lo que puedes usar directamente desde el panel:

- **Códigos de cupón** con límites de uso y fechas de vencimiento, geniales para promociones de lanzamiento
- **Programa de afiliados** donde otros promocionan tus productos por una comisión que tú estableces
- **Descuentos por referidos** que recompensan a los clientes por compartir con amigos
- **Email marketing** para enviar actualizaciones, anuncios de nuevos productos y promociones a tu lista de compradores
- **Cross-selling y upselling** para sugerir productos relacionados durante el checkout
- **Integraciones con listas de correo** con MailChimp, ConvertKit y otros

El programa de afiliados por sí solo merece mención especial. Estableces un porcentaje de comisión y cualquiera puede registrarse para promocionar tus productos. Cuando generan una venta a través de su enlace único, se les paga automáticamente. Es marketing que solo te cuesta cuando realmente produce una venta. He visto vendedores aumentar sus ingresos un 30-40% solo activando afiliados y dejando que bloggers de nicho hagan la promoción.

La herramienta de email marketing también merece mención. Puedes enviar comunicaciones a todos tus compradores anteriores directamente desde Payhip. Sin necesidad de Mailchimp o ConvertKit a menos que quieras automatización más avanzada. Para la mayoría de vendedores individuales, la opción integrada cubre lo que necesitas.

### Paso 7: Lanza y sigue los resultados

Una vez que tu tienda esté activa, comparte la URL de tu tienda en todas partes: perfiles de redes sociales, firmas de email, publicaciones de blog, descripciones de YouTube, donde sea que tu audiencia pase tiempo.

&lt;Picture src={imgAnalytics} alt=&quot;Panel de analíticas de Payhip&quot; /&gt;

Las analíticas de Payhip muestran tus ventas, ingresos y tráfico. Puedes ver qué productos se venden mejor, de dónde viene tu tráfico y cómo rinden los cupones y afiliados. No reemplazará a Google Analytics para análisis profundo de tráfico, pero para rastrear qué te está generando dinero, cumple su función.

## Precios de Payhip

Los precios de Payhip son refrescantemente simples. Cada plan incluye todas las funciones. Sin bloqueo de funciones, sin herramientas &quot;solo premium&quot;. La única variable es la comisión por transacción:

| Plan | Coste mensual | Comisión por transacción |
|------|--------------|--------------------------|
| Free Forever | $0/mes | 5% por venta |
| Plus | $29/mes | 2% por venta |
| Pro | $99/mes | 0% por venta |

Todos los planes incluyen productos ilimitados, ingresos ilimitados, almacenamiento ilimitado, soporte de dominio personalizado, el constructor de tienda completo, herramientas de marketing, sistema de afiliados y email marketing. Todo.

Ten en cuenta que PayPal y Stripe cobran sus propias comisiones de procesamiento (aproximadamente 2,9% + $0,30 por transacción) independientemente del plan de Payhip que tengas. Eso es estándar en todas las plataformas y no es algo que Payhip controle.

El plan gratuito es el punto de partida obvio. No pagas nada hasta que realmente haces una venta, y el 5% es una comisión muy razonable. Una vez que tengas ingresos constantes, aquí tienes un punto de referencia aproximado: si vendes más de unos $970/mes, el plan Plus ($29/mes al 2%) te ahorra dinero sobre el plan gratuito. Y con unas ventas de $3.300/mes, el plan Pro a $99/mes sin comisiones se convierte en la mejor opción.

&lt;Notice type=&quot;info&quot; title=&quot;Vendedores de la UE y Reino Unido&quot;&gt;
  Payhip calcula, cobra y remite automáticamente el IVA de la UE y Reino Unido en productos digitales. No necesitas registrarte para el IVA en cada país de la UE ni presentar declaraciones tú mismo. Solo esto ahorra horas de dolores de cabeza con el cumplimiento normativo y posibles multas si vendes internacionalmente.
&lt;/Notice&gt;

## Consejos de mi propia experiencia

**Empieza con un producto.** He visto gente pasar meses construyendo un catálogo de 10 artículos antes de lanzar. Lanza un producto, aprende qué se vende y después amplía.

**Pon un precio más alto de lo que crees.** Los vendedores primerizos casi siempre ponen precios demasiado bajos. Un ebook bien hecho que le ahorra a alguien 20 horas de trabajo vale más que $5. Prueba $19 o $29 y mira qué pasa.

**Usa el programa de afiliados desde el principio.** Incluso con una audiencia pequeña, darle a bloggers y creadores de contenido una razón para hablar de tu producto genera ventas que no conseguirías por tu cuenta.

**Envía emails a tus compradores.** La herramienta de email integrada de Payhip te permite mantener el contacto con clientes anteriores. Cuando lances el producto dos, esos compradores son tus leads más calientes.

&lt;Button text=&quot;Empieza a Vender en Payhip Gratis&quot; link=&quot;https://go.bitdoze.com/payhip&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;lg&quot; /&gt;

## Preguntas frecuentes

&lt;Accordion label=&quot;¿Puedo usar Payhip sin un sitio web?&quot; group=&quot;faq&quot;&gt;
Sí. Payhip te da una tienda alojada con su propia URL. También puedes conectar un dominio personalizado gratis si quieres tenerla bajo tu propia marca.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Payhip gestiona los impuestos?&quot; group=&quot;faq&quot;&gt;
Payhip gestiona automáticamente el IVA de la UE y Reino Unido para productos digitales. Calcula la tasa correcta, cobra al cliente y remite el impuesto en tu nombre. También puedes configurar reglas fiscales adicionales para otras regiones.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Qué métodos de pago pueden usar mis clientes?&quot; group=&quot;faq&quot;&gt;
Los clientes pueden pagar con PayPal o tarjetas de crédito/débito incluyendo Visa, MasterCard, American Express, JCB, Discover y Diners Club a través de Stripe.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Hay un límite de tamaño de archivo?&quot; group=&quot;faq&quot;&gt;
Los archivos individuales pueden ser de hasta 5GB. No hay límite general de almacenamiento ni de ancho de banda.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo vender cursos en Payhip?&quot; group=&quot;faq&quot;&gt;
Sí. Payhip soporta cursos online completos con lecciones en video, cuestionarios, tareas, contenido por goteo, cuentas de estudiantes y certificados de finalización. Puedes usar su hosting de video ($5/mes) o incrustar desde YouTube, Vimeo o Wistia.
&lt;/Accordion&gt;</content:encoded><category>web-development</category><category>ecommerce</category><category>digital-products</category></item><item><title>Bunny Storage vs S3 vs Backblaze: ¿El Almacenamiento en la Nube Más Barato en 2026?</title><link>https://www.bitdoze.com/es/bunny-storage-vs-s3-vs-backblaze/</link><guid isPermaLink="true">https://www.bitdoze.com/es/bunny-storage-vs-s3-vs-backblaze/</guid><description>Desgloses reales de precios de Bunny Storage, AWS S3 y Backblaze B2. Comparo costes de almacenamiento, tarifas de egress y cargos ocultos para que elijas la opción más barata según tu carga de trabajo.</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;
import { Image } from &quot;astro:assets&quot;;
import bunnyStorageInterface from &quot;@assets/images/26/04/bunny-storage-interface.webp&quot;;

Los precios del almacenamiento en la nube deberían ser simples. Guardas archivos, pagas por gigabyte, listo. Pero así no funcionan la mayoría de proveedores. AWS S3 tiene clases de almacenamiento, tarifas por solicitud, lifecycle policies y cargos de egress que necesitan una hoja de cálculo para calcularlos. Incluso los proveedores &quot;simples&quot; esconden costes en tarifas de llamadas API o recargos de ancho de banda.

Llevo un tiempo ejecutando sitios y servicios a través de [Bunny.net](https://go.bitdoze.com/bunny) (puedes leer mi [reseña completa de Bunny.net aquí](/es/resena-bunny-net/)), y su almacenamiento es una de las piezas que me parece más interesante. Pero, ¿es realmente más barato que S3 o Backblaze B2? Eso depende de qué almacenas, con qué frecuencia accedes a ello y dónde están tus usuarios.

Revisé las páginas de precios de los tres, hice los cálculos para escenarios comunes y armé esta comparativa. Sin trucos de afiliados donde convenientemente ignoro las tarifas de egress para que una opción se vea mejor.

&lt;Notice type=&quot;success&quot; title=&quot;Prueba Bunny.net gratis 14 días&quot;&gt;
  Puedes probar Bunny Storage tú mismo sin tarjeta de crédito. [Regístrate en Bunny.net](https://go.bitdoze.com/bunny) y obtén una prueba completa de 14 días con $1 de crédito gratis.
&lt;/Notice&gt;

## La comparación rápida

Antes de entrar en detalles, esto es lo que tienes delante:

| | **Bunny Storage** | **AWS S3** | **Backblaze B2** |
|---|---|---|---|
| **Coste de almacenamiento** | $0.01/GB (región única) | $0.023/GB (Standard) | $0.006/GB |
| **Coste de egress** | Gratis hacia Bunny CDN | $0.09/GB (primeros 10 TB) | Gratis hasta 3x almacenamiento |
| **Tarifas de solicitudes API** | Ninguna | $0.005/1K PUT, $0.0004/1K GET | $0.004/10K descargas |
| **Nivel gratuito** | Prueba de 14 días | 5 GB por 12 meses | 10 GB gratis para siempre |
| **Replicación global** | Hasta 15 regiones | Copia entre regiones (coste extra) | 2 regiones |
| **Compatible con S3** | Sí | Sí (ES S3) | Sí |
| **Integración CDN** | Incluida (Bunny CDN) | CloudFront (configuración aparte) | CDNs asociados (egress gratis) |
| **Duración mínima de almacenamiento** | Ninguna | Varía según clase | Ninguna |
| **Complejidad de precios** | Baja | Alta | Baja |

Backblaze B2 tiene el almacenamiento bruto más barato. Bunny Storage tiene los precios más simples y CDN integrado. S3 tiene más funcionalidades pero cuesta más después de sumar egress y tarifas de solicitudes.

## Bunny Storage: qué obtienes

[Bunny Storage](https://go.bitdoze.com/bunny) está integrado en la plataforma Bunny.net, lo que significa que se conecta directamente a su CDN sin configuración extra. Los archivos que almacenas se sirven automáticamente a través de más de 119 ubicaciones edge.

&lt;Image src={bunnyStorageInterface} alt=&quot;Interfaz del gestor de archivos de Bunny Storage&quot; /&gt;

### Desglose de precios

- **Región única**: $0.01/GB/mes
- **Dos regiones**: $0.02/GB/mes
- **Tres regiones**: $0.025/GB/mes
- **Cada región adicional**: +$0.005/GB/mes
- **Solicitudes API**: Gratis
- **Egress hacia Bunny CDN**: Gratis
- **Egress a internet**: Se factura a través de precios CDN ($0.01/GB EU/NA)

El modelo de precios es plano. Eliges a cuántas regiones quieres replicar tus datos y pagas esa tarifa. No hay clases de almacenamiento entre las que elegir, ni tarifas por solicitud, ni duraciones mínimas de almacenamiento.

### Lo que me gusta

&lt;ListCheck&gt;
  &lt;ul&gt;
    &lt;li&gt;Cero tarifas por llamadas API (S3 cobra por PUT, GET, LIST, todo)&lt;/li&gt;
    &lt;li&gt;Egress gratis hacia Bunny CDN, sin costes de transferencia separados&lt;/li&gt;
    &lt;li&gt;CDN integrado con más de 119 PoPs, sin necesidad de configurar un servicio aparte&lt;/li&gt;
    &lt;li&gt;Replicación global en hasta 15 regiones con un solo clic&lt;/li&gt;
    &lt;li&gt;API compatible con S3, así que herramientas como rclone y s3cmd funcionan directamente&lt;/li&gt;
    &lt;li&gt;Panel simple, puedes navegar archivos a través de la interfaz web&lt;/li&gt;
  &lt;/ul&gt;
&lt;/ListCheck&gt;

### Dónde se queda corto

El coste bruto por GB ($0.01) es más alto que Backblaze ($0.006) y comparable con S3 Standard ($0.023 parece más alto, pero S3 tiene niveles más baratos como Glacier a fracciones de centavo). Si estás almacenando terabytes de datos de archivo a los que rara vez accedes, Bunny Storage no es el bucket más barato donde tirar archivos.

Tampoco hay un sistema de lifecycle policies. S3 te permite trasladar automáticamente objetos de Standard a Infrequent Access a Glacier después de períodos de tiempo establecidos. Bunny Storage mantiene todo en caliente, siempre. Eso es una ventaja o una limitación dependiendo de lo que necesites.

Si ya estás usando Bunny CDN para servir tus sitios (como hago yo), el almacenamiento se integra perfectamente. Cubrí el lado del CDN en profundidad en mi [reseña de Bunny.net](/es/resena-bunny-net/) y la [configuración de streaming de vídeo en esta guía](/es/guia-bunny-stream/).

## AWS S3: el rey de las funcionalidades con precios complejos

S3 es la opción por defecto para la mayoría de empresas. Lleva funcionando desde 2006, está más que probado e integra con cada servicio de AWS y casi cualquier herramienta de terceros. Pero los precios son un laberinto.

### Desglose de precios

**Almacenamiento (US East, por GB/mes):**
- S3 Standard: $0.023 (primeros 50 TB), $0.022 (siguientes 450 TB), $0.021 (más de 500 TB)
- S3 Infrequent Access: $0.0125
- S3 Glacier Instant: $0.004
- S3 Glacier Flexible: $0.0036
- S3 Glacier Deep Archive: $0.00099

**Solicitudes:**
- PUT/COPY/POST/LIST: $0.005 por cada 1.000 solicitudes
- GET/SELECT: $0.0004 por cada 1.000 solicitudes

**Transferencia de datos saliente:**
- Primeros 10 TB/mes: $0.09/GB
- Siguientes 40 TB: $0.085/GB
- Siguientes 100 TB: $0.07/GB
- Más de 150 TB: $0.05/GB

Ahí es donde S3 se pone caro rápidamente con el egress. ¿Almacenas 1 TB y lo sirves una vez? Estás pagando $0.023 por almacenamiento más $90 por egress. El coste de almacenamiento es casi un error de redondeo comparado con la factura de ancho de banda.

### Cuándo S3 tiene sentido

S3 gana cuando necesitas funcionalidades específicas que nadie más tiene:

- Reglas de lifecycle que mueven automáticamente datos fríos a clases de almacenamiento más baratas
- Versioning de objetos, bloqueo y retención de cumplimiento
- Disparadores de eventos a través de Lambda para procesar subidas
- Controles de acceso IAM granulares
- Replicación entre regiones con reglas detalladas
- Integración con cientos de servicios AWS

Si tu infraestructura ya vive en AWS, añadir S3 es el camino de menor resistencia. Los precios mejoran con descuentos de AWS Data Transfer Out o si estás usando CloudFront (que tiene su propio modelo de precios que puede reducir los costes de egress).

Para todos los demás, la complejidad de S3 es difícil de justificar. He hablado con gente que se sorprendió con su factura de S3 porque no sabían que las solicitudes GET cuestan dinero, o que listar el contenido de un bucket es una operación facturable.

## Backblaze B2: el almacenamiento bruto más barato

Backblaze empezó como una empresa de backup para consumidores y eventualmente lanzó B2, su almacenamiento de objetos compatible con S3. Su propuesta es simple: almacenamiento muy barato con políticas de egress razonables.

### Desglose de precios

- **Almacenamiento**: $0.006/GB/mes ($6/TB)
- **Descargas**: Gratis hasta 3x tu almacenamiento mensual promedio
- **Descargas por encima de 3x**: $0.01/GB
- **Egress a CDN asociado**: Gratis (Cloudflare, Bunny.net, Fastly, Vultr y otros)
- **Transacciones Clase B** (descargas, metadata): 2.500 gratis/día, luego $0.004/10K
- **Transacciones Clase C** (subidas, listado, eliminación): 2.500 gratis/día, luego $0.004/1K
- **Tamaño mínimo de archivo**: Ninguno
- **Duración mínima de almacenamiento**: Ninguna

La regla de egress gratis 3x es generosa. Si almacenas 1 TB, puedes descargar hasta 3 TB al mes gratis. Y si estás sirviendo archivos a través de un CDN asociado como Bunny.net o Cloudflare, el egress es completamente gratis sin importar el volumen.

### El combo Backblaze + Bunny

Una configuración que me parece particularmente interesante: almacena archivos en Backblaze B2 a $0.006/GB, luego sírvelos a través de Bunny CDN. Backblaze no cobra egress hacia CDNs asociados, y obtienes los más de 119 PoPs de Bunny para la entrega. Coste total por GB almacenado y servido: $0.006 por almacenamiento + tarifas de entrega de Bunny CDN ($0.01/GB EU/NA por ancho de banda usado).

Este combo sale más barato que tanto Bunny Storage puro ($0.01/GB) como S3 + CloudFront por un amplio margen para cargas de trabajo con muchas lecturas.

¿La contrapartida? Dos cuentas que gestionar, dos paneles de control y algo de configuración para enlazarlos. Si estás configurando [backups de Dokploy con almacenamiento compatible con S3](/dokploy-backups-cloudflare-r2/) o ejecutando un [gestor de archivos self-hosted como Cloudreve](/cloudreve-docker-setup/), Backblaze B2 funciona como alternativa directa a S3.

### Dónde se queda corto B2

Backblaze solo tiene dos regiones de centros de datos (US West y EU Central). Si necesitas datos almacenados físicamente en Asia-Pacífico o Sudamérica, B2 no es una opción. S3 tiene más de 30 regiones y Bunny tiene 15 ubicaciones de almacenamiento.

La API es compatible con S3 pero no idéntica. Algunas funcionalidades de S3 como lifecycle policies de objetos, versioning y controles de acceso granulares están limitadas o ausentes. Para cargas de trabajo de backup y archivo esto no importa. Para almacenamiento de aplicaciones complejas, podría importar.

## Comparaciones de costes reales

Los números en una página de precios no significan nada sin contexto. Esto es lo que pagarías realmente en tres escenarios comunes:

&lt;Tabs&gt;
  &lt;Tab name=&quot;1 TB sitio estático&quot;&gt;
    **Escenario: 1 TB de activos estáticos (imágenes, CSS, JS) servidos globalmente, 5 TB de egress/mes**

    | Proveedor | Almacenamiento | Egress | Solicitudes (est.) | Total/mes |
    |----------|---------|--------|-----------------|-------------|
    | **Bunny Storage** | $10 | $0 (CDN incluido) | $0 | **~$60** (entrega CDN) |
    | **S3 + CloudFront** | $23 | ~$425 (varía) | ~$5 | **~$453** |
    | **S3 directo** | $23 | $450 | ~$5 | **~$478** |
    | **Backblaze B2** | $6 | $20 (2 TB sobre 3x) | ~$2 | **~$28** |
    | **B2 + Bunny CDN** | $6 | $0 (asociado) | ~$2 | **~$58** (entrega CDN) |

    Para servir activos estáticos, Backblaze B2 solo es el más barato si tus usuarios pueden tolerar obtener archivos desde dos centros de datos. Añade Bunny CDN encima y obtienes entrega global a un precio similar al de Bunny Storage puro. S3 es la opción más cara con diferencia, principalmente por el egress.

    Nota: Los $60 de Bunny Storage incluyen la entrega CDN de los 5 TB. El combo B2 + Bunny CDN es similar porque pagas las tarifas de CDN de Bunny por el ancho de banda real de entrega.
  &lt;/Tab&gt;
  &lt;Tab name=&quot;10 TB archivo de backups&quot;&gt;
    **Escenario: 10 TB de backups, egress mínimo (restauración una vez al trimestre, ~500 GB)**

    | Proveedor | Almacenamiento | Egress | Solicitudes | Total/mes |
    |----------|---------|--------|----------|-------------|
    | **Bunny Storage** | $100 | ~$5 (ocasional) | $0 | **~$105** |
    | **S3 Standard** | $230 | ~$11 (prom.) | ~$2 | **~$243** |
    | **S3 Glacier Instant** | $40 | ~$11 + recuperación | ~$2 | **~$55** |
    | **S3 Glacier Deep** | $9.90 | ~$11 + recuperación | ~$2 | **~$25+** |
    | **Backblaze B2** | $60 | $0 (dentro de 3x) | ~$1 | **~$61** |

    Para archivado puro, S3 Glacier Deep Archive gana en coste de almacenamiento ($0.00099/GB). Pero pagas tarifas de recuperación y esperas horas para el acceso. Backblaze a $60/mes con egress gratis hasta 30 TB es la mejor opción sin sorpresas. Bunny Storage cuesta más porque mantiene todo en caliente y replicado.

    Si estás configurando [backups de WordPress](/best-free-wordpress-backup-plugins/) o [backups remotos de CloudPanel](/cloudpanel-remote-backups/), B2 es el punto óptimo entre barato y accesible.
  &lt;/Tab&gt;
  &lt;Tab name=&quot;500 GB alojamiento de vídeo&quot;&gt;
    **Escenario: 500 GB de archivos de vídeo, 3 TB de entrega/mes**

    | Proveedor | Almacenamiento | Egress | Solicitudes | Total/mes |
    |----------|---------|--------|----------|-------------|
    | **Bunny Storage + CDN** | $5 | $30 (CDN) | $0 | **~$35** |
    | **Bunny Stream** | $5 | $30 (entrega) | $0 | **~$35** |
    | **S3 + CloudFront** | $11.50 | ~$255 | ~$3 | **~$270** |
    | **B2 + Bunny CDN** | $3 | $30 (CDN) | ~$1 | **~$34** |

    Para entrega de vídeo, la ruta S3 + CloudFront es dolorosa. El combo B2 + Bunny CDN gana en coste puro, pero si quieres transcodificación, bitrate adaptativo y un reproductor integrado, [Bunny Stream](/es/guia-bunny-stream/) maneja todo eso sin configuración extra. Yo uso Bunny Stream para los cursos en vídeo de [bitbuddies.me](https://bitbuddies.me) y simplemente funciona.
  &lt;/Tab&gt;
&lt;/Tabs&gt;

## Comparación de rendimiento

El precio no lo es todo. Si tus archivos tardan el doble en entregarse, los usuarios se van.

| Métrica | **Bunny Storage** | **AWS S3** | **Backblaze B2** |
|--------|-------------------|-----------|-----------------|
| **Latencia global prom.** | 41ms | 131ms | ~80ms (2 regiones) |
| **Regiones de almacenamiento** | 15 | 30+ | 2 |
| **CDN integrado** | Sí (119+ PoPs) | No (necesita CloudFront) | No (necesita CDN asociado) |
| **Latencia CDN prom.** | 24ms | ~30ms (CloudFront) | Depende del CDN usado |
| **Velocidad de subida** | Rápida (ingesta edge) | Rápida (regional) | Moderada (2 ubicaciones) |

La latencia promedio de 41ms de Bunny Storage viene de su replicación multi-región. Cuando replicas en 5+ regiones, la copia más cercana suele estar cerca de cualquier usuario en el mundo. S3 almacena en una región por defecto (la replicación entre regiones cuesta extra y necesita configuración). Backblaze con solo dos centros de datos depende completamente del caché CDN para rendimiento global.

Para la mayoría de aplicaciones web, los tres son suficientemente rápidos una vez que pones un CDN delante. La diferencia se nota en solicitudes no cacheadas o cargas de trabajo intensivas en API donde estás accediendo al almacenamiento de origen directamente.

## Comparación de funcionalidades

&lt;Tabs&gt;
  &lt;Tab name=&quot;Funcionalidades de almacenamiento&quot;&gt;
    | Funcionalidad | **Bunny** | **S3** | **B2** |
    |---------|----------|--------|--------|
    | API compatible con S3 | Sí | Sí | Sí |
    | Navegador de archivos web | Sí | Sí (consola) | Sí |
    | Versioning de objetos | No | Sí | Sí (limitado) |
    | Lifecycle policies | No | Sí (extensas) | Sí (básicas) |
    | Bloqueo/retención de objetos | No | Sí | Sí |
    | Cifrado del lado del servidor | Sí | Sí (múltiples opciones) | Sí |
    | Metadata personalizada | Sí | Sí | Sí (limitada) |
    | Subidas multipart | Sí | Sí | Sí |
    | URLs pre-firmadas | Sí | Sí | Sí |
    | Notificaciones de eventos | No | Sí (Lambda, SNS, SQS) | Sí (webhooks) |
    | Registro de accesos | Sí | Sí | Sí |
  &lt;/Tab&gt;
  &lt;Tab name=&quot;Experiencia de desarrollador&quot;&gt;
    | Funcionalidad | **Bunny** | **S3** | **B2** |
    |---------|----------|--------|--------|
    | SDKs oficiales | Limitados | Todos los lenguajes | Python, Java, CLI |
    | Documentación API | Buena | Extensa | Buena |
    | Herramienta CLI | No (usar s3cmd/rclone) | aws-cli | b2-cli |
    | Proveedor Terraform | Limitado | Completo | Comunidad |
    | UX del panel | Simple, limpio | Complejo pero potente | Simple |
    | Tiempo de configuración | Minutos | Minutos a horas | Minutos |
    | Claridad de facturación | Muy clara | Confusa | Clara |
  &lt;/Tab&gt;
&lt;/Tabs&gt;

S3 tiene funcionalidades que Bunny Storage y B2 simplemente no ofrecen. Si necesitas transiciones de lifecycle de objetos, disparadores Lambda al subir archivos o bloqueos de retención a nivel de cumplimiento, S3 sigue siendo la única opción real entre estos tres.

Pero la mayoría de gente que almacena activos de sitios web, backups o archivos multimedia no necesita nada de eso. Necesitan un bucket, una clave API y precios predecibles.

## Cuándo usar cada uno

&lt;Accordion label=&quot;Bunny Storage: mejor para sitios web y contenido entregado por CDN&quot; group=&quot;when&quot; expanded=&quot;true&quot;&gt;
  Elige Bunny Storage cuando:

  - Ya estás usando o planeas usar Bunny CDN
  - Quieres almacenamiento y entrega en una sola factura sin sorpresas
  - Necesitas replicación multi-región sin gestionar la sincronización entre regiones tú mismo
  - Estás alojando un sitio estático o sirviendo activos que necesitan entrega global
  - Quieres compatibilidad S3 con precios más simples

  Si estás [desplegando un sitio Astro](/deploy-astro-on-vps/) o cualquier sitio estático, Bunny Storage + CDN te da alojamiento y entrega sin tocar un servidor web.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;AWS S3: mejor para aplicaciones complejas y el ecosistema AWS&quot; group=&quot;when&quot;&gt;
  Elige S3 cuando:

  - Tu infraestructura ya corre sobre AWS
  - Necesitas lifecycle policies para archivar automáticamente datos antiguos
  - Necesitas procesamiento basado en eventos (disparadores Lambda al subir)
  - Requisitos de cumplimiento exigen bloqueo de objetos o políticas de retención
  - Estás almacenando datos que deben permanecer en una región geográfica específica por razones legales
  - Necesitas el ecosistema de integración más profundo disponible

  S3 es excesivo para alojamiento de archivos simple, pero nada más iguala su profundidad de funcionalidades. El coste extra es el precio de esa flexibilidad.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Backblaze B2: mejor para backups y almacenamiento de archivo&quot; group=&quot;when&quot;&gt;
  Elige Backblaze B2 cuando:

  - El coste por GB almacenado es tu principal preocupación
  - Estás haciendo backups desde [WordPress](/best-free-wordpress-backup-plugins/), [CloudPanel](/cloudpanel-remote-backups/) o [Dokploy](/dokploy-backups-cloudflare-r2/)
  - Quieres egress gratuito generoso (3x almacenamiento o ilimitado hacia CDNs asociados)
  - No necesitas más de dos regiones de almacenamiento
  - Planeas servir archivos a través de un CDN como Bunny.net o Cloudflare de todos modos

  El combo B2 + CDN asociado es difícil de superar en precio para cargas de trabajo con muchas lecturas.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;B2 + Bunny CDN: el combo económico&quot; group=&quot;when&quot;&gt;
  Esto merece mención aparte. Almacena en B2 a $0.006/GB, sirve a través de Bunny CDN con egress gratis desde B2 más entrega global rápida. Gestionas dos servicios en vez de uno, pero el ahorro se acumula rápido a escala.

  Ideal para: sitios de medios, distribución de archivos, cualquier carga de trabajo donde almacenas mucho y sirves mucho.
&lt;/Accordion&gt;

## Preguntas frecuentes

&lt;Accordion label=&quot;¿Bunny Storage es compatible con S3?&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;
  Sí. Puedes usar cualquier herramienta compatible con S3 (rclone, s3cmd, Cyberduck, plugins de backup) con Bunny Storage. El endpoint de la API y la autenticación funcionan de la misma manera. No todas las funcionalidades de S3 están soportadas (no hay lifecycle policies, no hay bloqueo de objetos), pero las operaciones estándar de subida/descarga/listado funcionan bien.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo usar Backblaze B2 con Bunny CDN?&quot; group=&quot;faq&quot;&gt;
  Sí, y es una combinación popular. Backblaze tiene un programa de alianza CDN que incluye a Bunny.net, así que el egress de B2 hacia Bunny CDN es completamente gratis. Configuras una pull zone de Bunny apuntando a tu bucket B2 y los archivos se cachean y sirven globalmente.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Por qué el egress de S3 es tan caro?&quot; group=&quot;faq&quot;&gt;
  AWS obtiene la mayor parte de su margen en transferencia de datos. Quieren que traigas datos a AWS (ingress gratis) pero cobran un precio premium para sacarlos. Esta es una estrategia bien documentada llamada &quot;data gravity.&quot; Una vez que tus datos están en S3, el coste de egress crea fricción para irse. Otros proveedores como Bunny y Backblaze usan egress gratis o barato como ventaja competitiva.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Y qué pasa con Cloudflare R2?&quot; group=&quot;faq&quot;&gt;
  R2 es otra opción fuerte con cero tarifas de egress. Cubrí una configuración relacionada en la [guía de backups de Dokploy con Cloudflare R2](/dokploy-backups-cloudflare-r2/). Los precios de R2 son $0.015/GB/mes por almacenamiento, que se sitúa entre Bunny ($0.01) y S3 ($0.023). La principal ventaja es egress gratis a todas partes, no solo hacia un CDN específico. Vale la pena considerarlo si ya estás en el ecosistema de Cloudflare.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Cuál es la opción más barata para almacenar 1 TB?&quot; group=&quot;faq&quot;&gt;
  Solo almacenamiento con acceso mínimo: Backblaze B2 a $6/mes. Almacenamiento más entrega CDN global: Backblaze B2 + Bunny CDN a $6/mes más ancho de banda CDN. Almacenamiento con la configuración más simple: Bunny Storage a $10/mes con CDN incluido. S3 Standard a $23/mes es el más caro para almacenamiento simple.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Bunny Storage sirve para backups?&quot; group=&quot;faq&quot;&gt;
  Puede, pero no es la opción más barata para almacenamiento de backup puro. A $0.01/GB, un backup de 5 TB cuesta $50/mes vs $30 en B2 o menos de $5 en S3 Glacier Deep Archive. Bunny Storage tiene más sentido cuando también necesitas recuperación rápida y entrega global a través de su CDN. Para backups fríos, B2 o Glacier es más barato.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo montar algo self-hosted en su lugar?&quot; group=&quot;faq&quot;&gt;
  Puedes ejecutar MinIO o SeaweedFS en tus propios servidores para almacenamiento compatible con S3 sin tarifas por GB. Pagas por el hardware y el ancho de banda en su lugar. Si te interesa la gestión de archivos self-hosted, mira la [guía de configuración de Cloudreve con Docker](/cloudreve-docker-setup/) para una interfaz tipo Google Drive que soporta backends S3. La contrapartida es mantenimiento y fiabilidad: los proveedores de almacenamiento en la nube se encargan de la replicación, los backups y el uptime por ti.
&lt;/Accordion&gt;

## El veredicto

No hay una única opción más barata porque depende de tus patrones de acceso:

- **Backblaze B2** gana en coste de almacenamiento bruto. A $0.006/GB con egress gratuito generoso, es la opción por defecto para backups y archivos.
- **Bunny Storage** gana en simplicidad y entrega integrada. Una plataforma para almacenamiento y CDN sin cargos ocultos. Lo mejor cuando necesitas entrega global rápida y quieres una sola factura.
- **AWS S3** gana en funcionalidades. Lifecycle policies, disparadores de eventos, herramientas de cumplimiento y el ecosistema más profundo. Pagas por esa amplitud.

Para mis propios proyectos, uso Bunny.net porque el CDN y el almacenamiento funcionan juntos sin código de pegamento ni cuentas extra. El combo B2 + Bunny CDN es algo que recomendaría si el coste es tu máxima prioridad y no te importa gestionar dos servicios.

Si quieres la imagen completa de lo que ofrece Bunny.net más allá del almacenamiento, lee mi [reseña completa de Bunny.net](/es/resena-bunny-net/) o la [guía de Bunny Stream](/es/guia-bunny-stream/) si estás buscando alojamiento de vídeo.

&lt;Button text=&quot;Prueba Bunny.net Storage Gratis&quot; link=&quot;https://go.bitdoze.com/bunny&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;lg&quot; /&gt;</content:encoded><category>hosting</category><category>cdn</category><category>self-hosted</category></item><item><title>Bunny Stream: Cómo Alojar y Distribuir Videos Sin Vimeo ni YouTube</title><link>https://www.bitdoze.com/es/guia-bunny-stream/</link><guid isPermaLink="true">https://www.bitdoze.com/es/guia-bunny-stream/</guid><description>Una guía paso a paso para alojar tus propios videos con Bunny Stream. Lo uso para mis cursos gratuitos en bitbuddies.me y cuesta una fracción de lo que cobra Vimeo.</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;
import { Image } from &quot;astro:assets&quot;;
import bunnyStreamInterface from &quot;@assets/images/26/04/bunny-stream-interface.webp&quot;;

Si estás alojando contenido de video en tu sitio web, ya sean cursos, tutoriales, demos de productos o material de marketing, probablemente hayas considerado YouTube y Vimeo como tus dos opciones principales. YouTube es gratis pero llena tu contenido de anuncios y no te permite controlar quién mira. Vimeo te da control pero cobra un precio premium por ello, especialmente cuando tu biblioteca crece.

Me encontré con exactamente este problema con [BitBuddies](https://bitbuddies.me/), donde alojo cursos gratuitos sobre temas como la configuración de Dokploy y CloudPanel. Necesitaba una plataforma de video que me permitiera incrustar videos limpios, sin anuncios, en mis páginas de cursos sin pagar las suscripciones de Vimeo. Bunny Stream resultó ser la respuesta, y desde entonces todos mis videos de cursos pasan por ahí.

Esta guía cubre la configuración completa: crear una biblioteca, subir videos, incrustar el reproductor, personalizarlo y asegurar todo con funciones de seguridad. También cubriré la API por si quieres automatizar las subidas.

Si quieres una visión más amplia de la plataforma Bunny.net más allá del video, echa un vistazo a mi [reseña de Bunny.net](/es/resena-bunny-net/) donde cubro CDN, almacenamiento, DNS y todos los demás servicios.

&lt;Notice type=&quot;success&quot; title=&quot;Prueba Bunny Stream gratis durante 14 días&quot;&gt;
  [Regístrate en Bunny.net](https://go.bitdoze.com/bunny) sin necesidad de tarjeta de crédito. Tienes acceso completo a Stream y a todos los demás servicios durante la prueba.
&lt;/Notice&gt;

## ¿Por qué no usar simplemente YouTube?

YouTube es gratis y la opción obvia para videos públicos. Pero viene con inconvenientes que importan si estás incrustando videos en tu propio sitio:

- **Anuncios en tu contenido**: A menos que los espectadores paguen YouTube Premium, ven anuncios antes o durante tus videos. En una página de curso, eso significa que tus alumnos ven un anuncio de algo irrelevante antes de cada lección.
- **Las recomendaciones se llevan a los espectadores**: Las sugerencias del panel lateral y la pantalla final de YouTube intentan activamente enviar a tus espectadores a otro lado. Estás compitiendo con videos de gatos por la atención.
- **Sin control de acceso real**: Puedes hacer los videos ocultos, pero cualquiera con el enlace puede compartirlo. No hay token de autenticación ni DRM.
- **YouTube controla la relación**: Tus espectadores son usuarios de YouTube primero, tuyos después. Las analíticas son limitadas y no puedes personalizar el reproductor para que coincida con tu marca.
- **Fuga de SEO**: Los videos incrustados de YouTube envían autoridad a youtube.com, no a tu dominio.

YouTube tiene sentido para contenido público de marketing donde quieres máximo alcance. Pero para contenido de cursos, sitios de membresía o cualquier cosa donde quieras controlar la experiencia, se queda corto.

## ¿Por qué no Vimeo?

Vimeo soluciona los problemas de anuncios y branding, pero los precios es donde duele:

| Característica | Vimeo Starter | Vimeo Standard | Vimeo Advanced |
|----------------|---------------|----------------|----------------|
| Precio | $12/mes | $33/mes | $65/mes |
| Almacenamiento | 100 GB | 5 TB | 5 TB |
| Ancho de banda | Limitado | Mayor | Máximo |
| Controles de privacidad | Básicos | Sí | Sí |
| Personalización del reproductor | Limitada | Sí | Sí |

Esos precios son por usuario, facturados anualmente. Y cuando llegas al límite de ancho de banda, o mejoras tu plan o tus videos dejan de cargar. Para una plataforma de cursos con una biblioteca creciente, los costos escalan de una forma que no tiene mucho sentido.

## Lo que Bunny Stream te ofrece en su lugar

Bunny Stream es pago por uso. Sin suscripciones mensuales escalonadas, sin límites por video, sin topes de ancho de banda. Pagas por almacenamiento y distribución, nada más.

&lt;Image src={bunnyStreamInterface} alt=&quot;Interfaz de la biblioteca de videos de Bunny Stream&quot; /&gt;

Esto es lo que incluye sin costo adicional:

&lt;ListCheck&gt;
- **Transcoding gratuito**: Sube una vez, Bunny crea versiones desde 240p hasta 1080p automáticamente
- **Reproductor integrado**: Personalizable, responsive, sin necesidad de embed de terceros
- **Protección DRM**: Bloquea descargas, grabación de pantalla y capturas
- **Token de autenticación**: Controla exactamente quién puede ver cada video
- **Protección hotlink**: Evita incrustaciones no autorizadas en otros dominios
- **Adaptive bitrate streaming**: La entrega HLS ajusta la calidad según la conexión del espectador
- **Subidas resumibles con TUS**: Las subidas de archivos grandes sobreviven a interrupciones de conexión
- **Soporte de webhooks**: Recibe notificaciones cuando termina el transcoding, se reproducen videos, etc.
- **Etiquetado de contenido con IA**: Categorización automática de tu biblioteca de videos
- **Marcas de agua**: Añade tu logo o texto superpuesto a los videos
&lt;/ListCheck&gt;

Para lo que tengo en [BitBuddies](https://bitbuddies.me/), mi factura mensual de Bunny Stream se mantiene por debajo de $5. Eso es por todos los videos de cursos almacenados y distribuidos. En Vimeo, la misma configuración me costaría $33/mes como mínimo, probablemente más.

## Configuración de Bunny Stream paso a paso

Aquí tienes el recorrido completo desde cero hasta videos incrustados en tu sitio.

### 1. Crear una cuenta en Bunny.net

Ve a [bunny.net](https://go.bitdoze.com/bunny) y regístrate. No necesitas tarjeta de crédito para la prueba de 14 días. Llegarás al panel de control después de confirmar tu email.

### 2. Crear una biblioteca de videos

En el panel de Bunny, ve a **Stream** en el menú lateral izquierdo y haz clic en **Add Video Library**.

Tendrás que elegir:

- **Nombre de la biblioteca**: Algo descriptivo. Yo uso &quot;bitbuddies-courses&quot; para mi contenido de cursos.
- **Región de almacenamiento principal**: Elige la más cercana a donde están la mayoría de tus espectadores. Para una audiencia global, Frankfurt o Nueva York son buenas opciones predeterminadas.
- **Regiones de replicación** (opcional): Añade más regiones si quieres una entrega más rápida a nivel mundial. Cada región adicional añade $0.005/GB a los costos de almacenamiento, pero la entrega se vuelve más rápida para los espectadores en esas zonas.

Dale a crear y tu biblioteca estará lista.

### 3. Subir tus videos

Tienes tres opciones para meter videos en Bunny Stream:

&lt;Tabs&gt;
&lt;Tab name=&quot;Subida por panel&quot;&gt;

El método más sencillo. Ve a tu biblioteca de videos, haz clic en **Upload** y arrastra tus archivos. Bunny se encarga del resto.

El panel usa subidas resumibles TUS por debajo, así que si tu conexión se corta a mitad de un archivo de 2 GB, retoma donde lo dejó. Verás una barra de progreso y el estado del transcoding para cada video.

Yo uso esto para subidas puntuales cuando estoy añadiendo una nueva lección a un curso. Rápido y sin complicaciones.

&lt;/Tab&gt;
&lt;Tab name=&quot;Subida por API&quot;&gt;

Para flujos de trabajo automatizados, la API de Bunny te permite crear objetos de video y subir mediante el protocolo TUS. Este es el flujo básico:

```bash
# Paso 1: Crear un objeto de video
curl -X POST &quot;https://video.bunnycdn.com/library/{libraryId}/videos&quot; \
  -H &quot;AccessKey: {your-api-key}&quot; \
  -H &quot;Content-Type: application/json&quot; \
  -d &apos;{&quot;title&quot;: &quot;Lesson 1 - Getting Started&quot;}&apos;
```

Esto devuelve un GUID del video. Luego sube el archivo:

```bash
# Paso 2: Subir el archivo de video mediante PUT
curl -X PUT &quot;https://video.bunnycdn.com/library/{libraryId}/videos/{videoId}&quot; \
  -H &quot;AccessKey: {your-api-key}&quot; \
  -H &quot;Content-Type: application/octet-stream&quot; \
  --data-binary @lesson-1.mp4
```

Para archivos más grandes, usa el endpoint del protocolo TUS en vez del método PUT. Librerías como `tus-js-client` manejan subidas por fragmentos con reanudación automática.

&lt;/Tab&gt;
&lt;Tab name=&quot;Descarga desde URL&quot;&gt;

Si tus videos ya están alojados en algún lugar (S3, otro CDN, una URL directa), Bunny puede descargarlos por ti:

```bash
curl -X POST &quot;https://video.bunnycdn.com/library/{libraryId}/videos/fetch&quot; \
  -H &quot;AccessKey: {your-api-key}&quot; \
  -H &quot;Content-Type: application/json&quot; \
  -d &apos;{&quot;url&quot;: &quot;https://example.com/video.mp4&quot;, &quot;title&quot;: &quot;Lesson 1&quot;}&apos;
```

Esto es muy útil cuando migras desde otra plataforma. Apuntas a Bunny a tus URLs de video existentes y los descarga, los transcodifica y los replica en tus regiones de almacenamiento.

&lt;/Tab&gt;
&lt;/Tabs&gt;

Después de la subida, Bunny transcodifica automáticamente cada video en múltiples resoluciones. Puedes ver el progreso en el panel. El tiempo de transcoding depende de la duración y resolución del video, pero un video de 10 minutos en 1080p suele terminar en un par de minutos.

### 4. Incrustar videos en tu sitio

Una vez que un video está transcodificado, haz clic en él en el panel y encontrarás el código embed. Se ve así:

```html
&lt;iframe
  src=&quot;https://iframe.mediadelivery.net/embed/{libraryId}/{videoId}&quot;
  loading=&quot;lazy&quot;
  style=&quot;border:none;position:absolute;top:0;height:100%;width:100%;&quot;
  allow=&quot;accelerometer;gyroscope;autoplay;encrypted-media;picture-in-picture;&quot;
  allowfullscreen=&quot;true&quot;
&gt;&lt;/iframe&gt;
```

Envuélvelo en un contenedor responsive para el tamaño correcto:

```html
&lt;div style=&quot;position:relative;padding-top:56.25%;&quot;&gt;
  &lt;iframe
    src=&quot;https://iframe.mediadelivery.net/embed/{libraryId}/{videoId}&quot;
    loading=&quot;lazy&quot;
    style=&quot;border:none;position:absolute;top:0;height:100%;width:100%;&quot;
    allow=&quot;accelerometer;gyroscope;autoplay;encrypted-media;picture-in-picture;&quot;
    allowfullscreen=&quot;true&quot;
  &gt;&lt;/iframe&gt;
&lt;/div&gt;
```

El `padding-top: 56.25%` te da una proporción de aspecto 16:9. Ajústalo para otras proporciones si es necesario.

En [BitBuddies](https://bitbuddies.me/), cada página de lección del curso tiene uno de estos embeds. El reproductor carga rápido, no hay anuncios y los estudiantes pueden elegir su nivel de calidad. Esa es exactamente la experiencia que quería.

### 5. Personalizar el reproductor

Ve a los ajustes de tu biblioteca de videos para configurar la apariencia del reproductor:

- **Color del reproductor**: Que coincida con tu marca. Yo uso el color de acento de BitBuddies para que el reproductor se sienta nativo del sitio.
- **Controles**: Muestra u oculta botones específicos (control de velocidad, selector de calidad, PiP, pantalla completa).
- **Subtítulos**: Sube archivos SRT/VTT para subtítulos. Compatible con varios idiomas.
- **Miniatura**: Bunny genera una automáticamente, o puedes subir la tuya.
- **Marca de agua**: Superpón tu logo en el video. Posición, tamaño y opacidad son ajustables.
- **Velocidad de reproducción**: Activa los controles de velocidad para que los espectadores puedan ver a 1.5x o 2x (los estudiantes de cursos adoran esto).

También puedes prescindir del reproductor integrado y usar la URL del manifiesto HLS con tu propio reproductor (Video.js, Plyr, o el que prefieras). La URL HLS está disponible en los ajustes de cada video.

### 6. Configurar la seguridad

Aquí es donde Bunny Stream marca la diferencia frente a YouTube para contenido de cursos.

&lt;Accordion label=&quot;Token de autenticación&quot; group=&quot;security&quot;&gt;

El token de autenticación asegura que solo tu sitio web pueda generar URLs de reproducción válidas. Actívalo en los ajustes de seguridad de tu biblioteca, establece una clave de token, y luego firma tus URLs embed desde el servidor.

Así funciona la URL firmada:

```javascript
const crypto = require(&apos;crypto&apos;);

function signBunnyUrl(libraryId, videoId, tokenKey, expirationTime) {
  const expires = Math.floor(Date.now() / 1000) + expirationTime;
  const hashableBase = tokenKey + videoId + expires;
  const token = crypto
    .createHash(&apos;sha256&apos;)
    .update(hashableBase)
    .digest(&apos;hex&apos;);
  return `https://iframe.mediadelivery.net/embed/${libraryId}/${videoId}?token=${token}&amp;expires=${expires}`;
}
```

La URL expira después del tiempo que configures, así que aunque alguien comparta el enlace, deja de funcionar. Yo pongo las mías para que expiren después de 4 horas, lo que da a los estudiantes tiempo de sobra para ver una lección sin que el enlace sea permanentemente compartible.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Protección DRM&quot; group=&quot;security&quot;&gt;

Si estás vendiendo contenido de video y las descargas te preocupan, la integración DRM de Bunny bloquea:

- Descargas de video (clic derecho para guardar, extensiones de navegador)
- Grabación de pantalla en plataformas compatibles
- Capturas de pantalla en dispositivos compatibles

DRM usa Widevine (Chrome, Android) y FairPlay (Safari, iOS) por debajo. Lo activas por biblioteca en los ajustes. Sin costo adicional.

Vale la pena mencionar: DRM no es infalible. Alguien siempre puede apuntar una cámara a su pantalla. Pero detiene el 95% de la piratería casual, que suele ser suficiente.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Protección hotlink y dominios permitidos&quot; group=&quot;security&quot;&gt;

Restringe qué dominios pueden incrustar tus videos. En los ajustes de tu biblioteca, añade tus dominios permitidos (por ejemplo, `bitbuddies.me`, `www.bitbuddies.me`) y activa la protección hotlink. Cualquiera que intente incrustar tu video en un dominio no autorizado no verá nada.

Esto evita que la gente copie tu código embed en su propio sitio y sirva tu contenido a tu costa.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Bloqueo geográfico&quot; group=&quot;security&quot;&gt;

Bloquea o permite que países específicos accedan a tus videos. Útil para restricciones de licencias o si tu contenido es específico de una región.

&lt;/Accordion&gt;

## Trabajar con la API

Si estás construyendo una plataforma de cursos o cualquier aplicación que gestione video de forma programática, la API de Bunny Stream cubre todo lo que necesitas.

### Operaciones comunes de la API

```bash
# Listar todos los videos en una biblioteca
curl &quot;https://video.bunnycdn.com/library/{libraryId}/videos?page=1&amp;itemsPerPage=100&quot; \
  -H &quot;AccessKey: {your-api-key}&quot;

# Obtener detalles de un video (incluyendo estado de transcoding)
curl &quot;https://video.bunnycdn.com/library/{libraryId}/videos/{videoId}&quot; \
  -H &quot;AccessKey: {your-api-key}&quot;

# Actualizar metadatos del video
curl -X POST &quot;https://video.bunnycdn.com/library/{libraryId}/videos/{videoId}&quot; \
  -H &quot;AccessKey: {your-api-key}&quot; \
  -H &quot;Content-Type: application/json&quot; \
  -d &apos;{&quot;title&quot;: &quot;Updated Title&quot;, &quot;chapters&quot;: [{&quot;title&quot;: &quot;Intro&quot;, &quot;start&quot;: 0, &quot;end&quot;: 60}]}&apos;

# Eliminar un video
curl -X DELETE &quot;https://video.bunnycdn.com/library/{libraryId}/videos/{videoId}&quot; \
  -H &quot;AccessKey: {your-api-key}&quot;
```

### Webhooks

Configura URLs de webhook en los ajustes de tu biblioteca para recibir notificaciones cuando:

- Un video termina de transcodificarse (`video_encoded`)
- Se genera un subtítulo para un video (`caption_generated`)

Esto es útil si quieres publicar automáticamente una lección de curso una vez que su video esté listo, o enviar una notificación a los estudiantes.

## Cuánto cuesta realmente

Esta es la parte que me convenció. Los precios de Bunny Stream se dividen en dos componentes:

| Componente | Costo |
|------------|-------|
| Almacenamiento | $0.01/GB al mes |
| Distribución (red estándar) | $0.01/GB (EU/NA) |
| Distribución (red de volumen) | $0.005/GB |
| Transcoding | Gratis |
| Reproductor | Gratis |
| DRM | Gratis |
| Acceso a la API | Gratis |

### Ejemplos de costos reales

&lt;Tabs&gt;
&lt;Tab name=&quot;Curso pequeño (mi configuración)&quot;&gt;

Lo que tengo en BitBuddies:

| Concepto | Cantidad | Costo mensual |
|----------|----------|---------------|
| Video almacenado | ~50 GB | $0.50 |
| Distribución mensual | ~100 GB (EU/NA) | $1.00 |
| Replicación | 2 regiones | $0.50 |
| **Total** | | **~$2.00/mes** |

Para comparar, Vimeo Starter cuesta $12/mes con menos almacenamiento y ancho de banda limitado.

&lt;/Tab&gt;
&lt;Tab name=&quot;Plataforma de cursos mediana&quot;&gt;

Una plataforma con una biblioteca más grande:

| Concepto | Cantidad | Costo mensual |
|----------|----------|---------------|
| Video almacenado | 500 GB | $5.00 |
| Distribución mensual | 1 TB (EU/NA) | $10.00 |
| Replicación | 3 regiones | $3.75 |
| **Total** | | **~$18.75/mes** |

La misma configuración en Vimeo Standard costaría $33/mes, y aun así llegarías a los topes de ancho de banda.

&lt;/Tab&gt;
&lt;Tab name=&quot;Biblioteca de videos grande&quot;&gt;

Una plataforma de video en producción:

| Concepto | Cantidad | Costo mensual |
|----------|----------|---------------|
| Video almacenado | 5 TB | $50.00 |
| Distribución mensual | 20 TB (red de volumen) | $100.00 |
| Replicación | 5 regiones | $50.00 |
| **Total** | | **~$200/mes** |

A esta escala, el video en la nube tradicional (AWS MediaConvert + S3 + CloudFront) costaría significativamente más. Solo el transcoding en AWS sale a unos $0.02/minuto.

&lt;/Tab&gt;
&lt;/Tabs&gt;

## Mi configuración en BitBuddies

Así es como realmente uso Bunny Stream para [BitBuddies](https://bitbuddies.me/) en la práctica:

Tengo una biblioteca de videos llamada &quot;bitbuddies-courses&quot; con Frankfurt como región de almacenamiento principal y un segundo punto de replicación en Nueva York. La mayoría de mis estudiantes están en Europa y Norteamérica, así que esto cubre la gran mayoría de espectadores con baja latencia.

Cada curso (como los cursos de [Configuración de Dokploy](https://bitbuddies.me/courses/dokploy-setup) y [Configuración de CloudPanel](https://bitbuddies.me/courses/cloudpanel-setup)) tiene su propia colección dentro de la biblioteca. Cuando grabo una nueva lección, la subo a través del panel, espero unos minutos a que se transcodifique y pego el código embed en la página del curso.

He activado el token de autenticación para que las URLs de los videos expiren después de unas horas. Los cursos son gratuitos, así que no intento bloquear todo agresivamente, pero evita que la gente haga hotlink a los videos en otro sitio y me suba la factura del ancho de banda.

El reproductor lleva los colores de la marca BitBuddies, y tengo los controles de velocidad de reproducción activados porque los estudiantes que ven tutoriales de configuración suelen querer saltar las partes que ya conocen.

Costo mensual total de todo esto: unos $2. Me gasto más en café en un día.

## Cuándo deberías seguir usando YouTube o Vimeo

Bunny Stream no es la opción correcta para cada situación. Sé honesto con tu caso de uso:

**Quédate con YouTube cuando:**

- Quieras máxima visibilidad orgánica (búsqueda, recomendaciones, algoritmo)
- Tu contenido sea público y te beneficies de la audiencia integrada de YouTube
- No te importen los anuncios en tus videos
- Necesites alojamiento gratuito con almacenamiento ilimitado

**Considera Vimeo cuando:**

- Necesites streaming en vivo OTT con monetización
- Tu flujo de trabajo dependa de integraciones específicas de Vimeo (ciertas plataformas LMS, herramientas de marketing)
- Necesites las herramientas de creación y edición de video de Vimeo

**Usa Bunny Stream cuando:**

- Estés incrustando videos en tu propio sitio y quieras una experiencia limpia y con tu marca
- Estés construyendo una plataforma de cursos, sitio de membresía o base de conocimiento
- La previsibilidad de costos sea importante y no quieras precios de suscripción por niveles
- Necesites DRM, token de autenticación o protección hotlink
- Quieras control por API de tu biblioteca de videos

## Preguntas frecuentes

&lt;Accordion label=&quot;¿Puedo migrar mis videos existentes de Vimeo a Bunny Stream?&quot; group=&quot;faq&quot;&gt;

Sí. Si puedes obtener URLs de descarga directa de tus videos de Vimeo (disponible en planes de pago), puedes usar la API de descarga por URL de Bunny para importarlos directamente. Bunny los descarga, transcodifica y almacena. Tendrás que actualizar tus códigos embed después, pero la migración en sí es directa.

Si no puedes obtener URLs directas de Vimeo, descarga los archivos localmente primero y vuelve a subirlos a Bunny a través del panel o la API.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Bunny Stream soporta streaming en vivo?&quot; group=&quot;faq&quot;&gt;

Actualmente no. Bunny Stream es para video bajo demanda (contenido pregrabado). Si necesitas streaming en vivo, tendrías que combinarlo con un servicio separado como OBS + una plataforma de streaming, y luego subir las grabaciones a Bunny después.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Qué formatos de video puedo subir?&quot; group=&quot;faq&quot;&gt;

Bunny acepta la mayoría de formatos comunes: MP4, MKV, MOV, AVI, WEBM y otros. El formato recomendado de subida es MP4 con codificación H.264, ya que ofrece los tiempos de transcoding más rápidos. Pero puedes lanzarle prácticamente cualquier formato y Bunny se las arregla.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Cuánto tarda el transcoding?&quot; group=&quot;faq&quot;&gt;

Depende de la duración y resolución del video. Un video de 10 minutos en 1080p normalmente se transcodifica en 2-3 minutos. Videos más largos o de mayor resolución tardan proporcionalmente más. El contenido en 4K tarda notablemente más. Puedes monitorear el progreso en el panel o mediante webhooks.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo usar mi propio reproductor de video en lugar del de Bunny?&quot; group=&quot;faq&quot;&gt;

Sí. Cada video obtiene una URL de manifiesto HLS que puedes pasar a cualquier reproductor compatible con HLS: Video.js, Plyr, hls.js, o el que prefieras. El reproductor integrado es cómodo pero completamente opcional.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Es Bunny Stream suficiente para cursos de pago?&quot; group=&quot;faq&quot;&gt;

Para la mayoría de creadores de cursos, sí. Con DRM activado, token de autenticación y protección hotlink, tienes suficiente seguridad para prevenir la piratería casual. Ninguna plataforma de video es a prueba de piratería (la grabación de pantalla siempre existe), pero las protecciones de Bunny están a la par de lo que Vimeo y Wistia ofrecen a precios más altos.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Cómo maneja Bunny Stream la reproducción en móviles?&quot; group=&quot;faq&quot;&gt;

El reproductor integrado es responsive y funciona bien en navegadores móviles. El adaptive bitrate streaming con HLS ajusta automáticamente la calidad según la velocidad de conexión del espectador, así que los usuarios móviles con datos celulares reciben una resolución más baja que carga rápido, mientras que los usuarios con wifi obtienen calidad completa.

&lt;/Accordion&gt;

## Conclusión

Bunny Stream llena un hueco que YouTube y Vimeo dejan abierto. YouTube es gratis pero te quita el control. Vimeo te devuelve el control pero cobra una suscripción que escala de forma extraña. Bunny cobra por lo que realmente usas, incluye funciones que cuestan extra en otros servicios, y no se mete en tu camino.

He estado ejecutando los videos de mis cursos de [BitBuddies](https://bitbuddies.me/) en Bunny Stream desde hace tiempo y no tengo planes de cambiar. La configuración me llevó menos de 30 minutos, el reproductor se ve limpio en cualquier dispositivo y mi factura mensual es calderilla.

Si quieres saber más sobre la plataforma completa de Bunny.net (CDN, almacenamiento, DNS, seguridad y más), escribí una [reseña detallada de Bunny.net](/es/resena-bunny-net/) que cubre todo. Y si estás evaluando opciones de almacenamiento para tus archivos de video u otros recursos, echa un vistazo a mi [comparativa Bunny Storage vs S3 vs Backblaze](/es/bunny-storage-vs-s3-vs-backblaze/).

&lt;Button text=&quot;Prueba Bunny Stream Gratis por 14 Días&quot; link=&quot;https://go.bitdoze.com/bunny&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;lg&quot; /&gt;</content:encoded><category>hosting</category><category>video-streaming</category><category>cdn</category></item><item><title>Guia de Configuracion de Hermes Agent: Asistente de IA Auto-mejorante en tu Propio Servidor</title><link>https://www.bitdoze.com/es/guia-configuracion-hermes-agent/</link><guid isPermaLink="true">https://www.bitdoze.com/es/guia-configuracion-hermes-agent/</guid><description>Guia paso a paso para instalar Hermes Agent en un VPS Linux con modelos gratuitos de OpenRouter. Cubre configuracion, integracion con Telegram y Discord, memoria, habilidades, modo de voz y comparacion con OpenClaw.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><content:encoded>import YouTubeEmbed from &quot;@components/widgets/YouTubeEmbed.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

He estado probando [Hermes Agent](https://github.com/NousResearch/hermes-agent) de Nous Research junto con mi [configuración de OpenClaw](/es/guia-configuracion-openclaw/) y mi [instancia de OpenFang](/es/guia-configuracion-openfang/) durante aproximadamente una semana. Lo que me enganchó es el ciclo de aprendizaje. Hermes crea habilidades a partir de las tareas que completa, mejora esas habilidades durante el uso posterior y recuerda quién eres entre sesiones. También migra tu configuración existente de OpenClaw, memorias y habilidades con un solo comando.

&lt;Button text=&quot;Hermes Agent GitHub&quot; link=&quot;https://github.com/NousResearch/hermes-agent&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre esta guia&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Instalar Hermes Agent en un VPS Linux con el instalador de una sola línea&lt;/li&gt;
&lt;li&gt;Configurar OpenRouter con modelos gratuitos (cero coste de API)&lt;/li&gt;
&lt;li&gt;Configurar Telegram, Discord y otras plataformas de mensajería&lt;/li&gt;
&lt;li&gt;Sistema de memoria con MEMORY.md, USER.md y búsqueda de sesiones&lt;/li&gt;
&lt;li&gt;Habilidades que el agente crea y mejora por su cuenta&lt;/li&gt;
&lt;li&gt;Modo de voz para CLI y plataformas de mensajería&lt;/li&gt;
&lt;li&gt;Tareas programadas con cron jobs en lenguaje natural&lt;/li&gt;
&lt;li&gt;Cómo se diferencia Hermes Agent de OpenClaw, nanobot y el resto&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

Si estás comparando opciones de asistentes de IA auto-alojados, nuestro resumen de [alternativas a OpenClaw](/es/alternativas-openclaw/) cubre varios proyectos incluyendo NanoClaw, nanobot, PicoClaw, ZeroClaw, NullClaw y OpenFang. Para consideraciones de seguridad al ejecutar cualquiera de estos, consulta la [guía de seguridad de OpenClaw](/es/guia-seguridad-openclaw/).

## Que es realmente Hermes Agent

Nous Research creó Hermes Agent como lo que ellos llaman un asistente de IA &quot;auto-mejorante&quot;. Esa etiqueta realmente significa algo aquí: el agente observa lo que hace, extrae habilidades reutilizables de tareas complejas y refina esas habilidades la próxima vez que las ejecuta. La mayoría de los otros asistentes en esta categoría olvidan todo entre sesiones. Hermes lleva adelante lo que aprendió.

La arquitectura:

```
Tú (CLI / Telegram / Discord / Slack / WhatsApp / Signal / Email)
    ↓
Hermes Gateway (un solo proceso en segundo plano)
    ↓
AI Agent (almacén de sesiones, memoria, habilidades, herramientas)
    ↓
Proveedor LLM (OpenRouter, Nous Portal, OpenAI, Anthropic, Ollama, personalizado)
    ↓
40+ Herramientas (terminal, búsqueda web, navegador, edición de archivos, ejecución de código, TTS)
```

Los mensajes llegan desde cualquier plataforma que uses. El gateway los enruta a través de un almacén de sesiones por chat, el agente los procesa con acceso a más de 40 herramientas integradas, y todo se ejecuta desde un solo proceso. Sin microservicios, sin servidor de base de datos.

### Como se compara con OpenClaw y otros

| Característica | Hermes Agent | OpenClaw | nanobot | OpenFang |
|---|---|---|---|---|
| **Creado por** | Nous Research | Comunidad | HKUDS | RightNow AI |
| **Lenguaje** | Python | TypeScript | Python | Rust |
| **Instalación** | `curl` una línea | `curl` una línea | pip | `curl` una línea |
| **Ciclo de aprendizaje** | Sí (creación + mejora de habilidades) | No | No | No |
| **Canales** | 12 (Telegram, Discord, Slack, WhatsApp, Signal, SMS, Email, Home Assistant, Mattermost, Matrix, DingTalk, CLI) | Telegram, WhatsApp, Slack, Discord | Telegram, Discord, WhatsApp, Slack, Feishu, DingTalk, Email, QQ | 40 adaptadores |
| **Memoria** | MEMORY.md + USER.md + búsqueda de sesiones FTS5 + modelado de usuario Honcho | Basada en archivos + búsqueda semántica | Integrada | SQLite + vectores |
| **Habilidades** | Auto-creadas desde experiencia, auto-mejorantes, Skills Hub | Habilidades de la comunidad | Integradas | Plantillas de agentes |
| **Modo de voz** | Micrófono CLI + TTS en mensajería + canales de voz Discord | No | No | No |
| **Backends de terminal** | Local, Docker, SSH, Daytona, Singularity, Modal | Local | Local | Local, Docker |
| **Tareas programadas** | Cron en lenguaje natural con entrega en plataforma | Cron | Cron | Cron + Hands autónomos |
| **Migración desde OpenClaw** | Integrada (`hermes claw migrate`) | N/A | No | No |
| **Sistema de personalidad** | SOUL.md + 14 presets integrados + personalizado | System prompt | System prompt | System prompt |
| **Licencia** | MIT | MIT | MIT | MIT |

El ciclo de aprendizaje es el verdadero diferenciador. Después de pedirle a Hermes que haga algo complejo (por ejemplo, desplegar un servicio Docker), extrae ese flujo de trabajo en una habilidad. La próxima vez que pidas algo similar, usa y refina esa habilidad. La búsqueda de sesiones FTS5 significa que puede recordar detalles de conversaciones de hace semanas. Y el modo de voz en canales de voz de Discord es algo que ninguno de los otros proyectos ofrece.

OpenClaw todavía tiene la comunidad más grande, más dashboards de terceros y un historial más largo. Si OpenClaw ya te funciona, el comando de migración hace que cambiar sea indoloro cuando estés listo.

## Instalacion

El instalador de una línea se encarga de Python, Node.js, dependencias y el comando `hermes`. Funciona en Linux, macOS y WSL2.

&lt;Tabs&gt;
&lt;Tab name=&quot;One-line install&quot;&gt;

El método recomendado. No necesitas más que git como prerequisito.

```bash
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
```

Después de que termine, recarga tu shell:

```bash
source ~/.bashrc   # o source ~/.zshrc
```

Verifica la instalación:

```bash
hermes --version
```

&lt;/Tab&gt;
&lt;Tab name=&quot;Manual (pip)&quot;&gt;

Si prefieres gestionar Python tú mismo:

```bash
# Make sure you have Python 3.11+
python3 --version

# Create a virtual environment (recommended)
python3 -m venv ~/.hermes-venv
source ~/.hermes-venv/bin/activate

# Install
pip install hermes-agent

# For voice mode support
pip install hermes-agent[voice]

# For all optional features
pip install hermes-agent[all]
```

&lt;/Tab&gt;
&lt;Tab name=&quot;From source&quot;&gt;

Para contribuidores o si quieres la última versión de desarrollo:

```bash
git clone https://github.com/NousResearch/hermes-agent.git
cd hermes-agent
git submodule update --init mini-swe-agent

curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv venv --python 3.11
source venv/bin/activate
uv pip install -e &quot;.[all,dev]&quot;
uv pip install -e &quot;./mini-swe-agent&quot;
```

&lt;/Tab&gt;
&lt;/Tabs&gt;

### Instalar en un VPS de Hetzner

Si quieres Hermes funcionando 24/7, un VPS barato hace el trabajo. Yo uso un [Hetzner CX22](https://www.bitdoze.com/hetzner-cloud-review/) (2 vCPU, 4GB RAM) por €3.99/mes.

&lt;Notice type=&quot;success&quot; title=&quot;Empieza con Hetzner&quot;&gt;
[Obtén €20 de crédito](https://go.bitdoze.com/hetzner), [Hostinger VPS](https://go.bitdoze.com/hostinger-vps) cuando te registres a través de nuestro enlace de referido. Eso cubre aproximadamente 5 meses de ejecución de Hermes Agent.
&lt;/Notice&gt;

Conéctate por SSH a tu servidor y ejecuta:

```bash
ssh root@YOUR_SERVER_IP
apt update &amp;&amp; apt upgrade -y
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
source ~/.bashrc
```

## Configurar OpenRouter con modelos gratuitos

OpenRouter enruta a más de 200 modelos a través de una sola API key. También tienen un [tier gratuito](https://openrouter.ai/openrouter/free) con varios modelos a coste cero, que es la forma más barata de empezar.

### Obtener tu API key

1. Ve a [openrouter.ai](https://openrouter.ai) y crea una cuenta
2. Navega a **Keys** en tu dashboard
3. Haz clic en **Create Key** y copia la clave

### Configurar Hermes Agent

Puedes configurar de forma interactiva o editando los archivos de configuración directamente.

**Configuración interactiva (recomendada):**

```bash
hermes setup
```

Esto te guía a través del proveedor de modelo, API key, herramientas y configuración de plataformas. Cuando te pregunte por un proveedor, selecciona **OpenRouter** y pega tu clave.

**Configuración manual:**

Añade tu API key a `~/.hermes/.env`:

```bash
echo &quot;OPENROUTER_API_KEY=sk-or-v1-your-key-here&quot; &gt;&gt; ~/.hermes/.env
```

Establece el modelo en `~/.hermes/config.yaml`:

```yaml
model:
  provider: &quot;openrouter&quot;
  default: &quot;openrouter/free&quot;
```

El modelo `openrouter/free` enruta al mejor modelo gratuito disponible. También puedes especificar un modelo directamente:

```bash
hermes config set model openrouter/free
```

### Cambiar de modelo sobre la marcha

No necesitas reiniciar nada para cambiar de modelo. Usa el selector interactivo:

```bash
hermes model
```

O cambia a mitad de conversación con un comando slash:

```
/model openrouter/free
```

### Usar modelos de pago mas adelante

Cuando estés listo para ir más allá de los modelos gratuitos, simplemente cambia el nombre del modelo:

```bash
hermes config set model anthropic/claude-sonnet-4.6
# o
hermes config set model openai/gpt-5.4
```

OpenRouter se encarga del enrutamiento. Tu API key sigue siendo la misma.

## Primera conversacion

Empieza a chatear:

```bash
hermes
```

Verás un banner de bienvenida mostrando tu modelo, herramientas disponibles y habilidades. Escribe un mensaje y pulsa Enter:

```
❯ What can you help me with?
```

Algunas cosas para probar de inmediato:

```
❯ What&apos;s my disk usage? Show the top 5 largest directories.
❯ Search the web for the latest Docker release and summarize it.
❯ Create a Python script that monitors CPU usage and alerts me above 80%.
```

El agente ejecuta comandos de terminal, busca en la web, lee y edita archivos, y ejecuta código. No se necesita configuración adicional.

### Comandos slash utiles

Escribe `/` para ver un menú desplegable de autocompletado. Los que más usarás:

| Comando | Que hace |
|---|---|
| `/help` | Muestra todos los comandos disponibles |
| `/model` | Cambia de modelo interactivamente |
| `/tools` | Lista las herramientas disponibles |
| `/personality pirate` | Prueba una personalidad divertida |
| `/new` | Inicia una conversación nueva |
| `/save` | Guarda la conversación |
| `/compress` | Comprime el contexto cuando se hace largo |
| `/usage` | Muestra el uso de tokens de esta sesión |
| `/skills` | Navega por las habilidades instaladas |
| `/voice on` | Activa el modo de voz |

### Entrada multi-linea e interrupciones

Pulsa `Alt+Enter` o `Ctrl+J` para añadir una nueva línea. Útil para pegar bloques de código o escribir prompts detallados.

Si el agente está tardando demasiado, escribe un nuevo mensaje y pulsa Enter — interrumpe la tarea actual y cambia a tus nuevas instrucciones. `Ctrl+C` también funciona.

### Reanudar una sesion

Cuando sales, Hermes imprime un comando para reanudar:

```bash
hermes --continue    # Reanudar la sesión más reciente
hermes -c            # Forma corta
```

## Sistema de memoria

Hermes tiene tres capas de memoria que funcionan juntas.

### MEMORY.md — Notas personales del agente

El agente escribe sus propias notas sobre tu entorno, convenciones y cosas que aprendió. Se almacena en `~/.hermes/memories/MEMORY.md`. Limitado a 2,200 caracteres (~800 tokens) para mantener acotado el system prompt.

El agente gestiona esto automáticamente. Cuando descubre que tu servidor ejecuta Ubuntu 22.04 con Docker instalado, lo guarda. Cuando aprende que prefieres respuestas concisas, también lo guarda. No necesitas decirle que recuerde — observa datos útiles y los almacena.

### USER.md — Tu perfil

Información sobre ti: nombre, preferencias, estilo de comunicación, zona horaria. Se almacena en `~/.hermes/memories/USER.md`. Limitado a 1,375 caracteres (~500 tokens).

### Busqueda de sesiones

Más allá de los dos archivos markdown, Hermes almacena todas las conversaciones pasadas en SQLite con búsqueda de texto completo FTS5. Puede buscar entre semanas de conversaciones antiguas para encontrar algo que discutiste antes:

```
❯ What did we discuss about the Nginx configuration last week?
```

El agente busca en su historial de sesiones, resume las partes relevantes y te da la respuesta. Ningún otro asistente de la familia OpenClaw hace esto.

### Configurar la memoria

En `~/.hermes/config.yaml`:

```yaml
memory:
  memory_enabled: true
  user_profile_enabled: true
  memory_char_limit: 2200
  user_char_limit: 1375
```

## Sistema de habilidades

Esta es la funcionalidad a la que sigo volviendo. Las habilidades no son plugins preconstruidos que instalas desde un hub. El agente las crea a partir de tareas que completa.

### Como funciona la creacion de habilidades

1. Le pides a Hermes que haga algo complejo (desplegar un servicio, configurar un pipeline de CI, configurar Nginx)
2. Hermes completa la tarea usando sus herramientas
3. Después de terminar, extrae el flujo de trabajo en una habilidad reutilizable
4. La próxima vez que pidas algo similar, usa y refina esa habilidad

Las habilidades también se auto-mejoran. Cada vez que una se ejecuta, el agente verifica si los pasos podrían ser mejores y actualiza la habilidad si es así.

### Buscar e instalar habilidades de la comunidad

```bash
hermes skills search kubernetes
hermes skills search react --source skills-sh
hermes skills install openai/skills/k8s
```

O usa el comando slash `/skills` dentro del chat.

### Skills Hub

Las habilidades contribuidas por la comunidad están en [agentskills.io](https://agentskills.io). Puedes navegar e instalarlas, o publicar las tuyas.

## Configurar plataformas de mensajeria

Hermes se comunica con Telegram, Discord, Slack, WhatsApp, Signal, SMS, Email, Home Assistant, Mattermost, Matrix y DingTalk a través de un solo proceso gateway.

### Configuracion rapida

```bash
hermes gateway setup
```

El asistente interactivo te guía a través de cada plataforma. Muestra lo que ya está configurado y ofrece iniciar el gateway cuando termina.

&lt;Tabs&gt;
&lt;Tab name=&quot;Telegram&quot;&gt;

1. Habla con [@BotFather](https://t.me/BotFather) en Telegram y crea un nuevo bot
2. Copia el token del bot
3. Añádelo a `~/.hermes/.env`:

```bash
TELEGRAM_BOT_TOKEN=your-bot-token-here
TELEGRAM_ALLOWED_USERS=your-telegram-user-id
```

Para encontrar tu ID de usuario, habla con [@userinfobot](https://t.me/userinfobot) en Telegram.

4. Inicia el gateway:

```bash
hermes gateway start
```

&lt;/Tab&gt;
&lt;Tab name=&quot;Discord&quot;&gt;

1. Ve al [Discord Developer Portal](https://discord.com/developers/applications)
2. Crea una nueva aplicación y añade un Bot
3. En **Privileged Gateway Intents**, habilita Message Content Intent
4. Copia el token del bot y añádelo a `~/.hermes/.env`:

```bash
DISCORD_BOT_TOKEN=your-bot-token-here
DISCORD_ALLOWED_USERS=your-discord-user-id
```

5. Invita al bot a tu servidor con esta URL (reemplaza `YOUR_APP_ID`):

```
https://discord.com/oauth2/authorize?client_id=YOUR_APP_ID&amp;scope=bot+applications.commands&amp;permissions=274878286912
```

6. Inicia el gateway:

```bash
hermes gateway start
```

&lt;/Tab&gt;
&lt;Tab name=&quot;WhatsApp / Signal&quot;&gt;

WhatsApp y Signal funcionan a través del gateway. Ejecuta el asistente de configuración:

```bash
hermes gateway setup
```

Selecciona la plataforma que quieras y sigue las indicaciones. WhatsApp usa la librería Baileys para emparejamiento de cliente web. Signal requiere el Signal CLI.

&lt;/Tab&gt;
&lt;/Tabs&gt;

### Ejecutar el gateway como servicio

En un VPS, quieres que el gateway se ejecute al arrancar:

```bash
# Install as a systemd service
hermes gateway install

# Start it
hermes gateway start

# Check status
hermes gateway status

# View logs
journalctl --user -u hermes-gateway -f

# Enable lingering so it survives logout
sudo loginctl enable-linger $USER
```

En un VPS sin interfaz gráfica, usa el servicio del sistema en su lugar:

```bash
sudo hermes gateway install --system
sudo hermes gateway start --system
```

### Seguridad

El gateway deniega a todos los usuarios por defecto. Solo los usuarios en la lista de permitidos pueden interactuar:

```bash
# In ~/.hermes/.env
TELEGRAM_ALLOWED_USERS=123456789
DISCORD_ALLOWED_USERS=123456789012345678
```

Como alternativa a las listas de permitidos, puedes usar emparejamiento por DM. Los usuarios desconocidos reciben un código de emparejamiento único cuando envían un mensaje al bot:

```bash
hermes pairing approve telegram XKGH5N7P
hermes pairing list
hermes pairing revoke telegram 123456789
```

## Backends de terminal

Por defecto, Hermes ejecuta comandos directamente en tu máquina. Por seguridad, puedes aislar la ejecución de comandos en un contenedor o enviarla a un servidor remoto.

```yaml
# In ~/.hermes/config.yaml
terminal:
  backend: local    # or: docker, ssh, singularity, modal, daytona
  timeout: 180
```

| Backend | Que hace | Ideal para |
|---|---|---|
| `local` | Ejecuta en tu máquina (por defecto) | Desarrollo, tareas confiables |
| `docker` | Contenedores aislados | Seguridad, reproducibilidad |
| `ssh` | Servidor remoto | Mantener al agente lejos de su propio código |
| `daytona` | Workspace sandbox en la nube | Entornos de desarrollo remotos persistentes |
| `singularity` | Contenedores HPC | Computación en clúster |
| `modal` | Serverless en la nube | Escalar a cero, pago por uso |

### Aislamiento con Docker

```yaml
terminal:
  backend: docker
  docker_image: python:3.11-slim
  container_cpu: 1
  container_memory: 5120
  container_disk: 51200
  container_persistent: true
```

Los contenedores se ejecutan con un sistema de archivos raíz de solo lectura, todas las capacidades de Linux eliminadas, sin escalación de privilegios, límites de PID y aislamiento de namespaces.

### Backend SSH

Ejecuta comandos en una máquina completamente separada:

```yaml
terminal:
  backend: ssh
```

```bash
# In ~/.hermes/.env
TERMINAL_SSH_HOST=my-server.example.com
TERMINAL_SSH_USER=myuser
TERMINAL_SSH_KEY=~/.ssh/id_rsa
```

## Modo de voz

Hermes tiene soporte de voz en CLI y mensajería. Puedes hablarle con tu micrófono en la terminal, obtener respuestas habladas en Telegram y Discord, y tener conversaciones de voz en vivo en canales de voz de Discord.

### Prerequisitos

```bash
# Install voice dependencies
pip install hermes-agent[voice]

# Optional: free local speech-to-text (recommended)
pip install faster-whisper

# System dependencies (Ubuntu/Debian)
sudo apt install portaudio19-dev ffmpeg libopus0
```

### Modo de voz en CLI

Inicia el CLI y activa la voz:

```bash
hermes
/voice on
```

Pulsa `Ctrl+B` para grabar. Habla, y cuando pares, detecta automáticamente el silencio después de 3 segundos y transcribe tu audio. Si TTS está habilitado (`/voice tts`), el agente pronuncia su respuesta.

### Respuestas de voz en mensajeria

En Telegram o Discord, envía:

```
/voice tts
```

El agente ahora envía audio hablado junto con texto en cada respuesta.

### Canales de voz de Discord

El agente puede unirse a un canal de voz de Discord, escucharte hablar y responder con audio hablado:

```
/voice join
```

Esto requiere permisos adicionales del bot de Discord (Connect, Speak, Use Voice Activity) y el códec Opus en tu servidor.

### Proveedores de TTS

| Proveedor | Coste | Calidad | Configuración |
|---|---|---|---|
| Edge TTS | Gratis | Buena | Funciona de serie |
| NeuTTS | Gratis | Buena | `pip install neutts[all]` |
| ElevenLabs | De pago | Premium | Establecer `ELEVENLABS_API_KEY` |
| OpenAI TTS | De pago | Buena | Establecer `VOICE_TOOLS_OPENAI_KEY` |

Configura en `~/.hermes/config.yaml`:

```yaml
tts:
  provider: &quot;edge&quot;
  edge:
    voice: &quot;en-US-AriaNeural&quot;

stt:
  provider: &quot;local&quot;
  local:
    model: &quot;base&quot;
```

## Personalidad y SOUL.md

Hermes usa un archivo llamado `SOUL.md` como su identidad. Va en el system prompt primero, antes que nada, y da forma a cómo habla y piensa el agente.

Edítalo en `~/.hermes/SOUL.md`:

```markdown
# Personality
You are a pragmatic senior engineer with strong taste.
You optimize for truth, clarity, and usefulness over politeness theater.

## Style
- Be direct without being cold
- Prefer substance over filler
- Push back when something is a bad idea
- Keep explanations compact unless depth is useful

## What to avoid
- Sycophancy
- Hype language
- Overexplaining obvious things
```

### Personalidades integradas

Cambia de personalidad sobre la marcha con `/personality`:

| Nombre | Descripción |
|---|---|
| `helpful` | Asistente amigable de propósito general |
| `concise` | Respuestas breves y al grano |
| `technical` | Experto técnico detallado |
| `creative` | Pensamiento innovador |
| `teacher` | Educador paciente con ejemplos |
| `pirate` | Bucanero experto en tecnología |
| `noir` | Narración de detective hard-boiled |

```
/personality concise
/personality pirate
```

`SOUL.md` es tu base. `/personality` es una capa a nivel de sesión.

## Tareas programadas

Hermes tiene un programador cron integrado. Solo dile lo que quieres en español (o inglés) normal:

```
❯ Every morning at 9am, check Hacker News for AI news and send me a summary on Telegram.
❯ Every Friday at 5pm, back up the PostgreSQL database and report the size.
❯ Every hour, check if nginx is running and restart it if not.
```

El agente crea cron jobs que se ejecutan a través del gateway. Los resultados llegan a la plataforma que hayas configurado.

## Migrar desde OpenClaw

Si vienes de OpenClaw, Hermes puede importar tus configuraciones, memorias, habilidades y API keys.

**Durante la primera configuración:** El asistente de configuración (`hermes setup`) auto-detecta `~/.openclaw` y ofrece migrar.

**En cualquier momento después de instalar:**

```bash
hermes claw migrate              # Interactive migration
hermes claw migrate --dry-run    # Preview what would be migrated
hermes claw migrate --preset user-data   # Migrate without secrets
hermes claw migrate --overwrite  # Overwrite existing conflicts
```

Lo que se importa:
- **SOUL.md** — archivo de personalidad
- **Memorias** — entradas de MEMORY.md y USER.md
- **Habilidades** — las habilidades creadas por el usuario van a `~/.hermes/skills/openclaw-imports/`
- **Lista de comandos permitidos** — patrones de aprobación
- **Configuración de mensajería** — configuraciones de plataforma, usuarios permitidos, directorio de trabajo
- **API keys** — tokens de Telegram, OpenRouter, OpenAI, Anthropic, ElevenLabs
- **Activos de TTS** — archivos de audio del workspace

## Como se diferencia Hermes Agent de OpenClaw

He usado ambos extensamente. Estas son las diferencias que realmente importan en el día a día:

**El ciclo de aprendizaje cambia tu forma de trabajar con él.** En OpenClaw, cada tarea compleja empieza desde cero. En Hermes, una vez que has guiado al agente a través del despliegue de un servicio Docker, crea una habilidad para ese flujo de trabajo. La próxima vez que digas &quot;despliega la API de staging&quot;, ya conoce los pasos.

**La búsqueda de sesiones le da memoria a largo plazo.** La memoria de OpenClaw está limitada a lo que cabe en sus archivos de contexto. Hermes almacena cada conversación en SQLite con búsqueda de texto completo. Pregunta &quot;¿en qué puerto configuramos Redis el mes pasado?&quot; y encuentra la respuesta en sesiones antiguas.

**El sistema de personalidad es más estructurado.** OpenClaw usa un system prompt que editas a mano. Hermes tiene SOUL.md como archivo de identidad duradero, capas de `/personality` a nivel de sesión y 14 presets integrados.

**El modo de voz realmente funciona.** Entrada de micrófono en el CLI, respuestas TTS en mensajería y conversaciones en vivo en canales de voz de Discord. Nada más en la familia OpenClaw hace esto.

**Aislamiento de backend de terminal.** OpenClaw ejecuta comandos en tu máquina local. Hermes puede ejecutarlos en contenedores Docker, en servidores remotos vía SSH o en entornos serverless como Modal y Daytona. Si el agente rompe algo, rompe el sandbox, no tu servidor.

**La migración es indolora.** `hermes claw migrate` importa todo desde OpenClaw — memorias, habilidades, API keys, configuraciones de plataforma. No empiezas de cero.

**Donde OpenClaw todavía gana:** comunidad más grande, más dashboards y skins de terceros, historial más largo. Si quieres la opción más probada en batalla, OpenClaw sigue siendo la elegida.

## Referencia de comandos CLI

| Comando | Descripción |
|---|---|
| `hermes` | Empezar a chatear |
| `hermes model` | Elegir tu proveedor LLM y modelo |
| `hermes tools` | Configurar qué herramientas están habilitadas |
| `hermes setup` | Asistente de configuración completo |
| `hermes config set KEY VAL` | Establecer un valor de configuración |
| `hermes config edit` | Abrir config.yaml en tu editor |
| `hermes gateway setup` | Configurar plataformas de mensajería |
| `hermes gateway install` | Instalar como servicio del sistema |
| `hermes gateway start` | Iniciar el gateway de mensajería |
| `hermes gateway status` | Verificar el estado del gateway |
| `hermes skills search QUERY` | Buscar habilidades |
| `hermes skills install SKILL` | Instalar una habilidad |
| `hermes claw migrate` | Migrar desde OpenClaw |
| `hermes update` | Actualizar a la última versión |
| `hermes doctor` | Diagnosticar problemas |
| `hermes --continue` | Reanudar la última sesión |

## Referencia de configuracion

La estructura completa del directorio:

```
~/.hermes/
├── config.yaml     # Settings (model, terminal, TTS, compression, etc.)
├── .env            # API keys and secrets
├── auth.json       # OAuth provider credentials
├── SOUL.md         # Agent identity
├── memories/       # MEMORY.md, USER.md
├── skills/         # Agent-created skills
├── cron/           # Scheduled jobs
├── sessions/       # Gateway sessions
└── logs/           # Logs (secrets auto-redacted)
```

Opciones clave de configuración en `config.yaml`:

```yaml
model:
  provider: &quot;openrouter&quot;
  default: &quot;openrouter/auto&quot;

terminal:
  backend: local
  timeout: 180

memory:
  memory_enabled: true
  user_profile_enabled: true

tts:
  provider: &quot;edge&quot;

stt:
  provider: &quot;local&quot;

display:
  tool_progress: all
```

&lt;Accordion label=&quot;Preguntas frecuentes&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

**¿Necesito una GPU para ejecutar Hermes Agent?**

No. Hermes Agent es el cliente — envía peticiones a un proveedor LLM como OpenRouter. El proveedor ejecuta el modelo en su hardware. Tu servidor solo necesita suficiente RAM para el proceso de Python (alrededor de 200MB).

**¿Puedo usar Hermes Agent con Ollama para inferencia completamente local?**

Sí. Establece `OPENAI_BASE_URL=http://localhost:11434/v1` y `OPENAI_API_KEY=ollama` en `~/.hermes/.env`. O usa `hermes model` y selecciona &quot;Custom endpoint.&quot; Consulta nuestra [guía de Ollama con Docker](/ollama-docker-install/) para configurar Ollama.

**¿Como funciona el tier gratuito de OpenRouter?**

OpenRouter ofrece varios modelos a coste cero con limitación de velocidad. Tienes una generosa asignación diaria. Para un uso más intenso, añade créditos a tu cuenta de OpenRouter y cambia a modelos de pago. No se necesitan cambios en el lado de Hermes — misma API key, diferente nombre de modelo.

**¿Puedo migrar desde OpenClaw?**

Sí. Ejecuta `hermes claw migrate` e importa tu personalidad, memorias, habilidades, API keys y configuraciones de plataforma. Usa `--dry-run` primero para previsualizar lo que se migrará.

**¿Hermes funciona en Windows?**

No de forma nativa. Instala [WSL2](https://learn.microsoft.com/en-us/windows/wsl/install) y ejecuta el instalador dentro de WSL2.

**¿Pueden varias personas usar una instancia de Hermes?**

Sí, a través del gateway de mensajería. Cada chat de plataforma tiene su propia sesión. Múltiples usuarios de Telegram o canales de Discord pueden hablar con la misma instancia con historiales de conversación separados. Usa listas de permitidos para controlar quién tiene acceso.

**¿Como se compara Hermes Agent con OpenFang?**

OpenFang se centra en agentes autónomos (Hands) que trabajan en programaciones sin necesidad de prompts, y tiene 40 adaptadores de canales con 16 capas de seguridad. Hermes se centra en el ciclo de aprendizaje, modo de voz y un sistema de memoria más profundo. Diferentes fortalezas. Consulta nuestra [guía de configuración de OpenFang](/es/guia-configuracion-openfang/) para la comparación completa.

**¿Como se compara con CoPaw?**

CoPaw tiene una consola web integrada y mejor soporte para aplicaciones de mensajería chinas (DingTalk, Feishu, QQ). Hermes tiene el ciclo de aprendizaje, modo de voz y más opciones de backend de terminal. Consulta nuestra [guía de configuración de CoPaw](/es/guia-configuracion-copaw/) para más detalles.

**¿Mis datos son privados?**

Todos los datos permanecen en tu servidor. Las únicas llamadas externas van a tu proveedor LLM configurado. Si ejecutas modelos locales vía Ollama, nada sale de tu máquina. Los logs auto-redactan secretos.

&lt;/Accordion&gt;

Si quieres un asistente que realmente mejore cuanto más lo uses, Hermes Agent es el que debes probar. El ciclo de creación de habilidades y la búsqueda de sesiones son cosas que no he visto en ningún otro proyecto en este espacio. Y si ya estás en OpenClaw, el comando de migración significa que puedes probarlo sin perder nada.

Para otras opciones de asistentes auto-alojados, consulta nuestro resumen de [alternativas a OpenClaw](/es/alternativas-openclaw/). Si quieres agentes autónomos ejecutándose en programaciones, la [guía de configuración de OpenFang](/es/guia-configuracion-openfang/) cubre eso. Para un solo binario Go en hardware mínimo, consulta la [guía de configuración de PicoClaw](/es/guia-configuracion-picoclaw/). Y para el enfoque de consola web multi-canal, la [guía de configuración de CoPaw](/es/guia-configuracion-copaw/) tiene los detalles. Para recomendaciones de modelos asequibles incluyendo MiniMax M2.7, MiMo V2.5 Pro y GLM 5.1, consulta la guía de los [mejores modelos baratos para Hermes Agent](/es/mejores-modelos-baratos-hermes-agent/). Si buscas un agente de codificación mínimo para combinar con Hermes, nuestra [guía de configuración de Pi coding agent](/es/guia-configuracion-pi-agent/) cubre instalación, configuración de modelos y las mejores extensiones. Para gestión de tareas estructurada con flujos de trabajo multi-agente, la [guía de Kanban Hermes](/es/guia-kanban-hermes/) cubre tableros de tareas, dependencias y patrones de coordinación.</content:encoded><category>ai</category><category>ai-tools</category><category>self-hosted</category><category>vps</category></item><item><title>Guía de Configuración de CoPaw: Asistente de IA Multicanal que Puedes Autoalojar</title><link>https://www.bitdoze.com/es/guia-configuracion-copaw/</link><guid isPermaLink="true">https://www.bitdoze.com/es/guia-configuracion-copaw/</guid><description>Guía paso a paso para instalar CoPaw en un VPS o localmente. Cubre la instalación con pip, Docker, proveedores de modelos, canales como DingTalk, Discord y Telegram, habilidades, memoria y tareas programadas.</description><pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate><content:encoded>import YouTubeEmbed from &quot;@components/widgets/YouTubeEmbed.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

CoPaw es un asistente de IA personal de código abierto del equipo AgentScope de Alibaba. Se ejecuta en tu propia máquina o servidor y se conecta a DingTalk, Feishu, QQ, Discord, Telegram e iMessage. Lo he estado configurando junto a mis instancias de [OpenClaw](/es/guia-configuracion-openclaw/) y [nanobot](/es/guia-configuracion-nanobot/). Lo que llamó mi atención fue la consola web integrada para la configuración y el hecho de que incluye tres backends de modelos locales de fábrica.

&lt;Button text=&quot;CoPaw GitHub&quot; link=&quot;https://github.com/agentscope-ai/CoPaw&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Qué cubre esta guía&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Instalar CoPaw mediante pip, script de una línea o Docker&lt;/li&gt;
&lt;li&gt;Configurar proveedores de LLM en la nube (DashScope, OpenAI, Azure OpenAI)&lt;/li&gt;
&lt;li&gt;Ejecutar modelos locales con llama.cpp, MLX y Ollama&lt;/li&gt;
&lt;li&gt;Configurar canales — DingTalk, Feishu, QQ, Discord, Telegram, iMessage&lt;/li&gt;
&lt;li&gt;Habilidades integradas, habilidades personalizadas e importación desde hubs&lt;/li&gt;
&lt;li&gt;Sistema de memoria con búsqueda híbrida semántica + texto completo&lt;/li&gt;
&lt;li&gt;Tareas programadas y check-ins por heartbeat&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

Si estás comparando opciones de asistentes de IA autoalojados, nuestro resumen de [alternativas a OpenClaw](/es/alternativas-openclaw/) cubre varios proyectos incluyendo nanobot, NanoClaw, PicoClaw y más. Para una opción más ligera basada en Go, consulta la [guía de configuración de PicoClaw](/es/guia-configuracion-picoclaw/).

## Qué hace realmente CoPaw

CoPaw significa &quot;Co Personal Agent Workstation.&quot; El equipo AgentScope lo construyó sobre [AgentScope](https://github.com/agentscope-ai/agentscope) y [ReMe](https://github.com/agentscope-ai/ReMe) para la gestión de memoria. La propuesta: un asistente que se conecta a tus aplicaciones de mensajería y ejecuta tareas según un horario sin que tengas que pedirlo.

La arquitectura:

```
Tú (DingTalk / Feishu / QQ / Discord / Telegram / iMessage)
    ↓
CoPaw Server (ejecutándose en tu máquina o VPS)
    ↓
LLM Provider (DashScope, OpenAI, Azure, Ollama, llama.cpp, MLX)
    ↓
Skills (cron, PDF, Word/Excel/PPT, news, file reader, browser, custom)
```

Los mensajes llegan desde la aplicación de chat que uses, CoPaw los enruta al LLM que hayas elegido, y el modelo puede usar habilidades integradas para manejar archivos, ejecutar trabajos programados, navegar por la web o trabajar con documentos. Hay una consola web en `http://127.0.0.1:8088/` donde configuras todo en lugar de editar archivos de configuración a mano.

### Cómo se compara con OpenClaw y nanobot

| Característica | CoPaw | OpenClaw | nanobot |
|---|---|---|---|
| **Lenguaje** | Python | TypeScript | Python |
| **Creado por** | AgentScope (Alibaba) | Community | HKUDS |
| **Instalación** | pip / one-liner / Docker | curl one-liner | pip |
| **Consola web** | Sí (integrada en :8088) | No (dashboards de terceros) | No |
| **Canales** | DingTalk, Feishu, QQ, Discord, Telegram, iMessage | Telegram, WhatsApp, Slack, Discord | Telegram, Discord, WhatsApp, Slack, Feishu, DingTalk, Email, QQ |
| **Modelos locales** | llama.cpp, MLX, Ollama | Ollama | vLLM |
| **Memoria** | Basada en archivos + búsqueda híbrida vector/BM25 | Basada en archivos + búsqueda semántica | Basada en archivos |
| **Habilidades** | Integradas + importables desde hubs | Habilidades de la comunidad | Integradas |
| **Tareas programadas** | Cron + heartbeat | Cron | Cron |
| **Licencia** | Apache 2.0 | MIT | MIT |

Donde CoPaw destaca: la consola web integrada significa que no necesitas dashboards de terceros, y el soporte para DingTalk/Feishu/QQ es de primera clase en lugar de añadido a posteriori. Si esas son tus aplicaciones de chat diarias, CoPaw te ahorra muchos dolores de cabeza de configuración.

## Instalación

CoPaw te ofrece cinco formas de empezar. Cubriré las tres más prácticas.

&lt;Tabs&gt;
&lt;Tab name=&quot;pip install&quot;&gt;

El enfoque más limpio si ya tienes Python:

```bash
pip install copaw
copaw init --defaults
copaw app
```

Abre `http://127.0.0.1:8088/` y verás la Consola. Eso es todo para una configuración básica.

Para una configuración interactiva donde eliges tu proveedor de LLM y canales desde el principio:

```bash
copaw init
```

Esto te guía a través del intervalo de heartbeat, canal de destino, horas activas y configuración opcional de habilidades.

&lt;/Tab&gt;
&lt;Tab name=&quot;One-line install&quot;&gt;

No necesitas Python. El instalador maneja todo usando [uv](https://docs.astral.sh/uv/).

**macOS / Linux:**

```bash
curl -fsSL https://copaw.agentscope.io/install.sh | bash
```

**Windows (PowerShell):**

```powershell
irm https://copaw.agentscope.io/install.ps1 | iex
```

Abre una nueva terminal después de instalar, luego:

```bash
copaw init --defaults
copaw app
```

Para instalar con soporte de modelos locales:

```bash
# llama.cpp (multiplataforma)
curl -fsSL https://copaw.agentscope.io/install.sh | bash -s -- --extras llamacpp

# MLX (solo Apple Silicon)
curl -fsSL https://copaw.agentscope.io/install.sh | bash -s -- --extras mlx

# Ollama
curl -fsSL https://copaw.agentscope.io/install.sh | bash -s -- --extras ollama
```

&lt;/Tab&gt;
&lt;Tab name=&quot;Docker&quot;&gt;

Las imágenes están en Docker Hub (`agentscope/copaw`). Etiquetas: `latest` (estable), `pre` (pre-release).

```bash
docker pull agentscope/copaw:latest
docker run -p 127.0.0.1:8088:8088 -v copaw-data:/app/working agentscope/copaw:latest
```

La configuración, la memoria y las habilidades se almacenan en el volumen `copaw-data`. Para pasar claves de API:

```bash
docker run -p 127.0.0.1:8088:8088 \
  -e DASHSCOPE_API_KEY=your_key_here \
  -v copaw-data:/app/working \
  agentscope/copaw:latest
```

Si necesitas que CoPaw en Docker alcance Ollama en el host:

```bash
docker run -p 127.0.0.1:8088:8088 \
  --add-host=host.docker.internal:host-gateway \
  -v copaw-data:/app/working agentscope/copaw:latest
```

Luego en la configuración de CoPaw, cambia la URL Base de Ollama a `http://host.docker.internal:11434/v1`.

&lt;/Tab&gt;
&lt;/Tabs&gt;

### Instalar en un VPS de Hetzner

Si quieres que CoPaw funcione 24/7 en un servidor, un VPS económico hace el trabajo. Yo uso un [Hetzner CX22](https://www.bitdoze.com/hetzner-cloud-review/) (2 vCPU, 4 GB de RAM) por €3,99/mes.

&lt;Notice type=&quot;success&quot; title=&quot;Empieza con Hetzner&quot;&gt;
[Obtén €20 de crédito](https://go.bitdoze.com/hetzner), [Hostinger VPS](https://go.bitdoze.com/hostinger-vps) cuando te registres a través de nuestro enlace de referido. Eso cubre aproximadamente 5 meses ejecutando CoPaw.
&lt;/Notice&gt;

Conéctate por SSH a tu servidor y ejecuta:

```bash
ssh root@YOUR_SERVER_IP
apt update &amp;&amp; apt upgrade -y
curl -fsSL https://copaw.agentscope.io/install.sh | bash
```

Abre una nueva sesión de shell, luego:

```bash
copaw init --defaults
copaw app
```

Para mantenerlo en ejecución después de cerrar la sesión SSH, usa un gestor de procesos como systemd o ejecútalo en una sesión de tmux/screen.

### Desinstalar

```bash
copaw uninstall          # conserva la configuración y los datos
copaw uninstall --purge  # elimina todo
```

## Configuración de Modelos

Antes de que CoPaw pueda hacer algo útil, necesitas configurar un LLM. Abre la Consola en `http://127.0.0.1:8088/` y ve a **Settings → Models**.

### Proveedores en la nube

CoPaw funciona con DashScope, ModelScope, OpenAI, Azure OpenAI y Aliyun Coding Plan. Para cualquiera de ellos:

1. Ve a **Settings → Models** en la Consola
2. Encuentra la tarjeta del proveedor y haz clic en **Settings**
3. Introduce tu clave de API y haz clic en **Save**
4. El estado de la tarjeta cambia a **Available**
5. En la sección **LLM Configuration** de la parte superior, selecciona el proveedor y el modelo, luego haz clic en **Save**

También puedes establecer las claves de API como variables de entorno. Para DashScope:

```bash
export DASHSCOPE_API_KEY=your_key_here
```

O ponlo en un archivo `.env` en el directorio de trabajo (por defecto `~/.copaw/`).

### Usar OpenAI o Azure OpenAI

Estos funcionan a través del sistema de proveedores personalizados:

1. Haz clic en **Add provider** en la página de Models
2. Introduce un Provider ID (p. ej. `openai`) y un nombre para mostrar
3. Haz clic en **Settings**, introduce la URL Base (`https://api.openai.com/v1` para OpenAI) y la clave de API
4. Haz clic en **Models**, añade el ID del modelo (p. ej. `gpt-4o`)
5. Selecciónalo en el desplegable de LLM Configuration

### Modelos locales

CoPaw admite tres backends de modelos locales. No se necesitan claves de API.

| Backend | Ideal para | Comando de instalación |
|---|---|---|
| **llama.cpp** | Multiplataforma (macOS, Linux, Windows) | `pip install &apos;copaw[llamacpp]&apos;` |
| **MLX** | Macs con Apple Silicon (M1–M4) | `pip install &apos;copaw[mlx]&apos;` |
| **Ollama** | Cualquiera que ya use Ollama | `pip install &apos;copaw[ollama]&apos;` |

Para descargar y usar un modelo local desde la línea de comandos:

```bash
copaw models download Qwen/Qwen3-4B-GGUF
copaw models    # selecciona el modelo descargado
copaw app       # inicia el servidor
```

También puedes descargar y gestionar modelos desde la interfaz de la Consola en **Settings → Models**. Haz clic en **Models** en la tarjeta de llama.cpp o MLX, luego en **Download model** e introduce el ID del repositorio de Hugging Face.

Para Ollama, asegúrate de que el daemon de Ollama esté en ejecución primero y luego descarga modelos a través de Ollama como de costumbre:

```bash
ollama pull qwen3:4b
```

CoPaw se sincroniza con los modelos que tenga disponibles Ollama.

Si eres nuevo en la ejecución de modelos locales, nuestra [guía de instalación de Ollama con Docker](https://www.bitdoze.com/ollama-docker-install/) cubre los conceptos básicos.

### Comparativa de costes

| Proveedor | Modelo de ejemplo | Coste mensual típico |
|---|---|---|
| DashScope | Qwen 3.5 Plus | $5–20 |
| OpenAI | GPT-4o | $20–70 |
| Azure OpenAI | GPT-4o | $20–70 |
| Local (llama.cpp) | Qwen3 4B | $0 (solo cómputo) |
| Local (Ollama) | Qwen3 4B | $0 (solo cómputo) |

Los modelos de DashScope son más baratos que OpenAI con una calidad comparable. Si quieres evitar las facturas de API por completo, llama.cpp u Ollama con un modelo local no te cuesta nada más allá de la electricidad.

## Configuración de Canales

Los canales son la forma en que te comunicas con CoPaw desde tus aplicaciones de mensajería. Puedes configurarlos a través de la Consola (**Control → Channels**) o editando directamente `config.json`.

### Discord

1. Crea una aplicación de Discord en [discord.com/developers](https://discord.com/developers/applications)
2. Ve a la pestaña **Bot**, haz clic en **Reset Token** y copia el token del bot
3. En **Privileged Gateway Intents**, activa **Message Content Intent**
4. Genera una URL de invitación OAuth2 con el alcance `bot` y los permisos `Send Messages` + `Read Message History`
5. Invita el bot a tu servidor
6. En la Consola de CoPaw, ve a **Control → Channels**, haz clic en **Discord**, actívalo y pega el token

En `config.json`, tiene este aspecto:

```json
{
  &quot;channels&quot;: {
    &quot;discord&quot;: {
      &quot;enabled&quot;: true,
      &quot;token&quot;: &quot;YOUR_DISCORD_BOT_TOKEN&quot;
    }
  }
}
```

### Telegram

1. Abre Telegram, busca **@BotFather**, envía `/newbot`
2. Elige un nombre y nombre de usuario, copia el token
3. En la Consola, activa Telegram y pega el token

```json
{
  &quot;channels&quot;: {
    &quot;telegram&quot;: {
      &quot;enabled&quot;: true,
      &quot;token&quot;: &quot;YOUR_TELEGRAM_BOT_TOKEN&quot;
    }
  }
}
```

### DingTalk

La configuración de DingTalk implica crear una aplicación personalizada en la consola de desarrolladores de DingTalk. CoPaw tiene una habilidad integrada llamada `dingtalk_channel_connect` que te guía en la búsqueda de credenciales, la configuración de Client ID/Secret y los pasos manuales. Activa el canal DingTalk en la Consola y sigue las indicaciones guiadas.

### Feishu (Lark)

Misma idea que DingTalk. Crea una aplicación en la Plataforma Abierta de Feishu, obtén el App ID y el App Secret, e introdúcelos en la Consola. CoPaw también admite proxy SOCKS para Feishu si estás detrás de un firewall corporativo.

### iMessage (solo macOS)

Si estás ejecutando CoPaw en un Mac, iMessage funciona como canal. Este es uno de los pocos asistentes autoalojados que admite iMessage de forma nativa.

### Varios canales a la vez

CoPaw puede conectarse a varios canales simultáneamente. Los mensajes van al canal en el que hablaste por última vez, o puedes dirigir mensajes programados a canales específicos.

## Habilidades

Las habilidades son la forma en que CoPaw hace más que simplemente chatear. Varias vienen integradas y puedes escribir las tuyas propias o importarlas desde hubs de la comunidad.

### Habilidades integradas

| Habilidad | Qué hace |
|---|---|
| **cron** | Trabajos programados — crear, listar, pausar, reanudar, eliminar |
| **file_reader** | Leer y resumir archivos de texto (.txt, .md, .json, .csv, .py, etc.) |
| **pdf** | Leer, extraer, combinar, dividir, rotar, añadir marca de agua, OCR en PDFs |
| **docx** | Crear, leer y editar documentos Word |
| **xlsx** | Leer, editar y crear hojas de cálculo |
| **pptx** | Crear, leer y editar archivos PowerPoint |
| **news** | Obtener y resumir las últimas noticias de fuentes configuradas |
| **browser_visible** | Lanzar un navegador con interfaz para demostraciones o escenarios con CAPTCHA |

### Gestionar habilidades en la Consola

Ve a **Agent → Skills** en la Consola para ver todas las habilidades cargadas, activarlas o desactivarlas, crear habilidades personalizadas o editar las existentes.

### Importar habilidades desde hubs

CoPaw puede importar habilidades desde estas fuentes:

- `https://skills.sh/`
- `https://clawhub.ai/`
- `https://skillsmp.com/`
- Repositorios de GitHub (cualquier repositorio con un archivo `SKILL.md`)

En la Consola, ve a **Agent → Skills**, haz clic en **Import Skills**, pega la URL y confirma.

### Crear habilidades personalizadas

Coloca una carpeta con un archivo `SKILL.md` en `~/.copaw/customized_skills/`:

```
~/.copaw/
  customized_skills/
    my_research_skill/
      SKILL.md
```

El archivo `SKILL.md` es Markdown simple que describe lo que hace la habilidad:

```markdown
---
name: my_research_skill
description: Research a topic and summarize findings
---

# Research Skill

When asked to research something:
1. Search the web for current information
2. Summarize key findings in bullet points
3. List sources
```

CoPaw detecta las nuevas habilidades al reiniciar. Las habilidades personalizadas tienen prioridad sobre las integradas cuando los nombres coinciden.

## Sistema de Memoria

El sistema de memoria de CoPaw usa [ReMe](https://github.com/agentscope-ai/ReMe) y almacena todo en archivos Markdown simples. Tiene dos partes: la gestión de contexto que comprime conversaciones largas antes de alcanzar los límites de tokens, y la memoria a largo plazo que escribe hechos en archivos y los indexa para que CoPaw pueda encontrarlos más tarde.

### Estructura de archivos de memoria

```
~/.copaw/
  MEMORY.md                    # Hechos persistentes, preferencias, decisiones
  memory/
    2026-03-05.md              # Registro diario de hoy
    2026-03-04.md              # Registro de ayer
    ...
```

`MEMORY.md` contiene información persistente — cosas como &quot;Prefiero Python 3.12&quot; o &quot;Mi equipo usa Slack para los standups.&quot; Los registros diarios capturan lo que ocurrió en cada conversación, y el sistema resume automáticamente las conversaciones cuando se vuelven demasiado largas.

### Búsqueda híbrida

CoPaw usa búsqueda semántica vectorial y búsqueda de texto completo BM25 juntas. Los pesos de fusión por defecto son 70% vectorial, 30% BM25.

| Tipo de búsqueda | Buena en | Débil en |
|---|---|---|
| **Semántica vectorial** | Encontrar conceptos relacionados con diferente redacción | Coincidencia exacta de tokens (nombres de funciones, códigos de error) |
| **BM25 texto completo** | Coincidencias exactas en términos específicos | Sinónimos y paráfrasis |
| **Híbrida (ambas)** | Mejor recuperación general | Requiere configuración de API de embedding |

Para habilitar la búsqueda vectorial, configura el servicio de embedding:

```bash
export EMBEDDING_API_KEY=your_key
export EMBEDDING_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
export EMBEDDING_MODEL_NAME=text-embedding-v4
```

Sin una clave de API de embedding, CoPaw recurre únicamente a la búsqueda de texto completo BM25.

### Hacer que las cosas persistan

Dile a CoPaw directamente:

&gt; &quot;Recuerda: siempre despliego en staging antes que en producción.&quot;

Esto se escribe en `MEMORY.md`. También puedes editar los archivos de memoria directamente:

```bash
nano ~/.copaw/MEMORY.md
```

## Tareas Programadas y Heartbeat

CoPaw puede ejecutar cosas según un horario de dos formas: trabajos cron para comandos específicos y heartbeat para check-ins periódicos.

### Trabajos cron

Crea tareas programadas a través de la CLI o la Consola:

```bash
# Crear un trabajo que se ejecute a las 9am cada día
copaw cron create --type agent --name &quot;morning-digest&quot; --cron &quot;0 9 * * *&quot; --message &quot;Summarize my pending tasks and calendar for today&quot;

# Listar todos los trabajos
copaw cron list

# Comprobar el estado de un trabajo
copaw cron state &lt;job_id&gt;
```

También puedes gestionar trabajos cron desde la Consola en **Control → Cron Jobs**.

### Heartbeat

Heartbeat es la versión de CoPaw de un check-in programado. Escribes un bloque de preguntas en un archivo Markdown, y CoPaw las recorre según un temporizador y envía las respuestas a tu último canal usado. Configúralo durante `copaw init` o edita `HEARTBEAT.md` en el directorio de trabajo.

Ejemplo de `HEARTBEAT.md`:

```markdown
Check the following and report back:
- Any new emails from clients?
- What meetings do I have today?
- Summarize overnight GitHub notifications
```

Establece el intervalo y el destino en `config.json`:

```json
{
  &quot;heartbeat&quot;: {
    &quot;enabled&quot;: true,
    &quot;interval&quot;: &quot;2h&quot;,
    &quot;active_hours&quot;: &quot;08:00-22:00&quot;
  }
}
```

## Referencia de CLI

| Comando | Descripción |
|---|---|
| `copaw init` | Asistente de configuración interactivo |
| `copaw init --defaults` | Configuración rápida con valores predeterminados |
| `copaw app` | Iniciar el servidor |
| `copaw models` | Gestionar modelos locales |
| `copaw models download &lt;repo&gt;` | Descargar un modelo desde Hugging Face |
| `copaw cron list` | Listar trabajos programados |
| `copaw cron create` | Crear un nuevo trabajo programado |
| `copaw uninstall` | Eliminar CoPaw (conserva los datos) |
| `copaw uninstall --purge` | Eliminar CoPaw y todos los datos |

## Solución de Problemas

### CoPaw no responde

Comprueba que el servidor esté en ejecución y el modelo esté configurado:

1. Abre `http://127.0.0.1:8088/` — si no carga, el servidor no está en ejecución
2. Ve a **Settings → Models** y verifica que un proveedor esté **Available** y haya un modelo seleccionado
3. Revisa la salida del terminal en busca de mensajes de error

### Problemas con la clave de API

Si ves errores de autenticación:

- Vuelve a verificar la clave de API en **Settings → Models**
- Para DashScope, verifica la clave en [dashscope.console.aliyun.com](https://dashscope.console.aliyun.com/)
- Intenta establecer la clave como variable de entorno: `export DASHSCOPE_API_KEY=xxx`

### Docker no puede alcanzar Ollama

Dentro de un contenedor Docker, `localhost` apunta al contenedor, no al host. Usa `--add-host=host.docker.internal:host-gateway` y establece la URL Base de Ollama a `http://host.docker.internal:11434/v1`.

En Linux, también puedes usar `--network=host`:

```bash
docker run --network=host -v copaw-data:/app/working agentscope/copaw:latest
```

### El canal no recibe mensajes

- Verifica que el canal esté habilitado en **Control → Channels**
- Comprueba que los tokens y las credenciales sean correctos
- Para Discord, asegúrate de que **Message Content Intent** esté habilitado en el portal de desarrolladores
- Reinicia CoPaw después de cambiar la configuración del canal

&lt;Accordion label=&quot;Preguntas Frecuentes&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

**¿Necesito saber Python para usar CoPaw?**

No. El instalador de una línea y las opciones de Docker no requieren ningún conocimiento de Python. La interfaz de la Consola maneja la mayor parte de la configuración. Solo necesitas conocimientos de Python si quieres crear habilidades personalizadas o instalar desde el código fuente.

**¿Con qué proveedor en la nube debería empezar?**

DashScope es la opción predeterminada y más económica. Si ya tienes una clave de API de OpenAI, añádela como proveedor personalizado. Para ejecutar sin ningún coste de API, usa llama.cpp u Ollama con un modelo local.

**¿Puedo ejecutar CoPaw en una Raspberry Pi?**

Técnicamente sí si tienes una Pi 4/5 con 4 GB+ de RAM, pero el rendimiento será limitado. Un VPS económico a €3,99/mes te da una experiencia mejor.

**¿CoPaw funciona en Windows?**

Sí. Usa el instalador de PowerShell (`irm https://copaw.agentscope.io/install.ps1 | iex`) o Docker. La instalación con pip también funciona si tienes Python 3.10+.

**¿Pueden varias personas usar una misma instancia de CoPaw?**

CoPaw responde en el canal donde hablaste por última vez. Varios usuarios pueden interactuar a través de canales de grupo en DingTalk, Feishu o Discord. Para conversaciones separadas, cada persona debe usar un canal o sesión diferente.

**¿Cómo se compara CoPaw con OpenClaw?**

OpenClaw tiene un soporte más amplio para aplicaciones de mensajería occidentales (WhatsApp, Slack). CoPaw tiene mejor soporte para aplicaciones chinas (DingTalk, Feishu, QQ), una consola web integrada y más opciones de modelos locales. Ambos son de código abierto y autoalojados. Consulta nuestra [guía de configuración de OpenClaw](/es/guia-configuracion-openclaw/) para la comparación completa.

**¿Son privados mis datos?**

Todos los datos permanecen en tu máquina. Las únicas llamadas externas van a tu proveedor de LLM configurado. Si ejecutas modelos locales, nada sale de tu servidor en absoluto.

&lt;/Accordion&gt;

CoPaw vale la pena probarlo si quieres un asistente autoalojado con una interfaz web adecuada en lugar de editar archivos JSON a ciegas. Los tres backends de modelos locales significan que puedes ejecutarlo sin ningún coste de API, y si DingTalk o Feishu es donde vive tu equipo, es la opción más pulida que he encontrado para esas plataformas.

Para otras opciones de asistentes autoalojados, consulta nuestro resumen de [alternativas a OpenClaw](/es/alternativas-openclaw/). Si quieres algo que compile a un único binario y funcione en una placa de $10, la [guía de configuración de PicoClaw](/es/guia-configuracion-picoclaw/) lo cubre. Para un asistente auto-mejorante con modo de voz y búsqueda de sesiones, ve la [guía de configuración de Hermes Agent](/es/guia-configuracion-hermes-agent/). Y para ejecutar modelos locales detrás de cualquiera de estos asistentes, nuestra [guía de Ollama con Docker](https://www.bitdoze.com/ollama-docker-install/) tiene los detalles de configuración.</content:encoded><category>ai</category><category>ai-tools</category><category>self-hosted</category><category>vps</category></item><item><title>Cómo Desplegar la Plataforma de Agentes IA Memoh con Docker Compose</title><link>https://www.bitdoze.com/es/despliegue-agente-ia-memoh/</link><guid isPermaLink="true">https://www.bitdoze.com/es/despliegue-agente-ia-memoh/</guid><description>Despliega Memoh, un sistema de agentes IA multi-bot de código abierto, usando Dokploy o Docker Compose. Ejecuta bots IA aislados con memoria persistente, soporte MCP y canales multiplataforma.</description><pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate><content:encoded>import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;

Si quieres agentes IA que se ejecuten en tu propio hardware sin enviar datos a ningún SaaS externo, Memoh merece la pena. Te permite crear múltiples bots IA, cada uno dentro de su propio contenedor, con memoria integrada y uso de herramientas. A continuación explico dos formas de desplegarlo: mediante Dokploy y con una configuración estándar de Docker Compose.

## ¿Qué es Memoh?

[Memoh](https://github.com/memohai/Memoh) es un sistema de agentes IA de código abierto y basado en contenedores, construido con Go y Vue 3. Puedes crear bots, cada uno ejecutándose en su propio contenedor containerd aislado con memoria persistente y acceso a herramientas externas a través de MCP (Model Context Protocol). Los bots pueden chatear en Telegram, Discord, Lark, Email o la interfaz web integrada, y recuerdan las conversaciones entre sesiones.

### Qué hace Memoh

| Característica | Descripción |
| --- | --- |
| Aislamiento de contenedores | Cada bot se ejecuta dentro de su propio sandbox containerd con sistema de archivos, red y árbol de procesos independientes |
| Memoria persistente | Recuperación híbrida usando búsqueda vectorial (Qdrant) y búsqueda por palabras clave, más extracción de hechos impulsada por LLM |
| Canales multiplataforma | Telegram, Discord, Lark (Feishu), Email, Web, CLI |
| Soporte MCP | Los bots pueden navegar por la web, ejecutar comandos, editar archivos y llamar a herramientas externas |
| Conciencia multiusuario | Los bots reconocen a usuarios individuales en chats de grupo y rastrean el contexto por persona |
| Interfaz web | Panel de control Vue 3 con streaming en tiempo real, gestor de archivos del contenedor y configuración visual |

### Características principales

&lt;ListCheck&gt;
- Crea y gestiona múltiples bots IA desde un único panel de control
- Aislamiento a nivel de contenedor por bot usando containerd
- Motor de memoria híbrido con búsqueda vectorial densa y búsqueda por palabras clave BM25
- Soporte MCP para conectar herramientas externas (HTTP, SSE, Stdio)
- Tareas programadas y acciones autónomas basadas en heartbeat
- Compatible con cualquier proveedor OpenAI-compatible, Anthropic o Google AI
- Control de acceso basado en roles con transferencia de propiedad
- Vinculación de identidad entre plataformas en todos los canales
&lt;/ListCheck&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Contenedor privilegiado&quot;&gt;
El contenedor del servidor Memoh se ejecuta en modo privilegiado porque incorpora containerd para gestionar los contenedores de los bots. Despliega esto únicamente en servidores en los que confíes y que controles.
&lt;/Notice&gt;

## Visión general de la arquitectura

Memoh tiene seis servicios gestionados por Docker Compose:

| Servicio | Imagen | Función |
| --- | --- | --- |
| `postgres` | `postgres:18-alpine` | Base de datos principal para usuarios, bots, canales y configuración |
| `qdrant` | `qdrant/qdrant:latest` | Base de datos vectorial para búsqueda semántica en memoria |
| `migrate` | `memohai/server:latest` | Servicio de una sola ejecución que aplica las migraciones de la base de datos y termina |
| `server` | `memohai/server:latest` | Backend en Go con containerd integrado (privilegiado) |
| `agent` | `memohai/agent:latest` | Agent Gateway (Bun/Elysia) para chat IA, ejecución de herramientas y streaming SSE |
| `web` | `memohai/web:latest` | Interfaz web Vue 3 servida por Nginx |

Orden de arranque: PostgreSQL y Qdrant arrancan primero. Una vez que ambos superan sus comprobaciones de salud, el servicio migrate aplica las migraciones de la base de datos. El servidor arranca tras finalizar la migración, y luego el agent gateway y la interfaz web se levantan al final.

## Requisitos previos

&lt;ListCheck&gt;
- Un VPS Linux o servidor dedicado con Docker y Docker Compose v2 instalados
- Al menos 4 GB de RAM (el servidor ejecuta containerd además de PostgreSQL y Qdrant)
- Acceso root o sudo (necesario para el modo de contenedor privilegiado)
- Una clave API de un proveedor compatible con OpenAI, Anthropic o Google AI
&lt;/ListCheck&gt;

&lt;Button text=&quot;Prueba Hetzner Cloud Ahora&quot; link=&quot;https://go.bitdoze.com/hetzner&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;lg&quot; external={true} icon=&quot;rocket-launch&quot; /&gt;
&lt;Button text=&quot;Try Hostinger VPS&quot; link=&quot;https://go.bitdoze.com/hostinger-vps&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;lg&quot; external={true} icon=&quot;rocket-launch&quot; /&gt;

## Opción 1: Despliegue con Dokploy

Dokploy se encarga de los dominios y SSL por ti. Si aún no lo tienes configurado, sigue primero la [guía de instalación de Dokploy](https://www.bitdoze.com/dokploy-install/).

### Paso 1: Crear el archivo de configuración

Antes de desplegar, necesitas un archivo `config.toml` en tu servidor. Conéctate por SSH a tu máquina y créalo:

```bash
mkdir -p /opt/memoh
cat &gt; /opt/memoh/config.toml &lt;&lt; &apos;EOF&apos;
[log]
level = &quot;info&quot;
format = &quot;text&quot;

[server]
addr = &quot;server:8080&quot;

[admin]
username = &quot;admin&quot;
password = &quot;CHANGE_THIS_PASSWORD&quot;
email = &quot;admin@yourdomain.com&quot;

[auth]
jwt_secret = &quot;GENERATE_WITH_openssl_rand_-base64_32&quot;
jwt_expires_in = &quot;168h&quot;

[containerd]
socket_path = &quot;/run/containerd/containerd.sock&quot;
namespace = &quot;default&quot;

[mcp]
image = &quot;memohai/mcp:latest&quot;
snapshotter = &quot;overlayfs&quot;
data_root = &quot;/opt/memoh/data&quot;

[postgres]
host = &quot;postgres&quot;
port = 5432
user = &quot;memoh&quot;
password = &quot;YOUR_DB_PASSWORD&quot;
database = &quot;memoh&quot;
sslmode = &quot;disable&quot;

[qdrant]
base_url = &quot;http://qdrant:6334&quot;
api_key = &quot;&quot;
timeout_seconds = 10

[agent_gateway]
host = &quot;agent&quot;
port = 8081
server_addr = &quot;server:8080&quot;

[web]
host = &quot;127.0.0.1&quot;
port = 8082
EOF
```

Genera un secreto JWT adecuado:

```bash
openssl rand -base64 32
```

Sustituye `GENERATE_WITH_openssl_rand_-base64_32` y `YOUR_DB_PASSWORD` por valores reales.

### Paso 2: Crear el servicio en Dokploy

1. Abre tu proyecto en Dokploy
2. Haz clic en **Add Service** y elige **Compose**
3. Nómbralo `memoh`

### Paso 3: Pegar el archivo compose

```yaml
name: &quot;memoh&quot;
services:
  postgres:
    image: postgres:18-alpine
    container_name: memoh-postgres
    environment:
      POSTGRES_DB: memoh
      POSTGRES_USER: memoh
      POSTGRES_PASSWORD: YOUR_DB_PASSWORD
    volumes:
      - postgres_data:/var/lib/postgresql
      - /etc/localtime:/etc/localtime:ro
    expose:
      - &quot;5432&quot;
    healthcheck:
      test: [&quot;CMD-SHELL&quot;, &quot;pg_isready -U memoh&quot;]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped
    networks:
      - dokploy-network

  qdrant:
    image: qdrant/qdrant:latest
    container_name: memoh-qdrant
    volumes:
      - qdrant_data:/qdrant/storage
    expose:
      - &quot;6333&quot;
      - &quot;6334&quot;
    healthcheck:
      test: [&quot;CMD-SHELL&quot;, &quot;timeout 10s bash -c &apos;:&gt; /dev/tcp/127.0.0.1/6333&apos; || exit 1&quot;]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped
    networks:
      - dokploy-network

  migrate:
    image: memohai/server:latest
    container_name: memoh-migrate
    entrypoint: [&quot;/app/memoh-server&quot;, &quot;migrate&quot;, &quot;up&quot;]
    volumes:
      - /opt/memoh/config.toml:/app/config.toml:ro
    depends_on:
      postgres:
        condition: service_healthy
    restart: &quot;no&quot;
    networks:
      - dokploy-network

  server:
    image: memohai/server:latest
    container_name: memoh-server
    privileged: true
    pid: host
    volumes:
      - /opt/memoh/config.toml:/app/config.toml:ro
      - containerd_data:/var/lib/containerd
      - server_cni_state:/var/lib/cni
      - memoh_data:/opt/memoh/data
      - /etc/localtime:/etc/localtime:ro
    expose:
      - &quot;8080&quot;
    depends_on:
      migrate:
        condition: service_completed_successfully
      qdrant:
        condition: service_healthy
    restart: unless-stopped
    networks:
      - dokploy-network

  agent:
    image: memohai/agent:latest
    container_name: memoh-agent
    volumes:
      - /opt/memoh/config.toml:/config.toml:ro
      - /etc/localtime:/etc/localtime:ro
    expose:
      - &quot;8081&quot;
    depends_on:
      - server
    restart: unless-stopped
    networks:
      - dokploy-network

  web:
    image: memohai/web:latest
    container_name: memoh-web
    expose:
      - &quot;8082&quot;
    depends_on:
      - server
      - agent
    restart: unless-stopped
    networks:
      - dokploy-network

networks:
  dokploy-network:
    external: true

volumes:
  postgres_data:
  qdrant_data:
  containerd_data:
  memoh_data:
  server_cni_state:
```

### Paso 4: Dominio y puerto

Crea un dominio en Dokploy y asígnalo al servicio `web` en el puerto **8082**. Tras el despliegue, abre `https://tu-dominio.com` para acceder al panel de control.

**Notas sobre la configuración de Dokploy**

- Todos los servicios usan `expose` en lugar de `ports` ya que Dokploy gestiona el enrutamiento externo a través de su proxy.
- El `config.toml` se monta desde `/opt/memoh/config.toml` en el host. Asegúrate de que la contraseña de la base de datos coincida tanto en el archivo de configuración como en la variable de entorno `POSTGRES_PASSWORD`.
- El contenedor del servidor necesita `privileged: true` y `pid: host` para que containerd pueda gestionar los contenedores de los bots.

&lt;Notice type=&quot;warning&quot; title=&quot;Seguridad&quot;&gt;
Cambia todas las contraseñas predeterminadas en `config.toml` antes de desplegar. La contraseña de administrador predeterminada es `admin123`, así que reemplázala por una segura.
&lt;/Notice&gt;

## Opción 2: Docker Compose (independiente)

Esta es la forma estándar de ejecutar Memoh en cualquier servidor Linux con Docker.

### Paso 1: Crear un directorio de proyecto

```bash
mkdir -p /opt/memoh &amp;&amp; cd /opt/memoh
```

### Paso 2: Crear el archivo de configuración

```bash
cat &gt; config.toml &lt;&lt; &apos;EOF&apos;
[log]
level = &quot;info&quot;
format = &quot;text&quot;

[server]
addr = &quot;server:8080&quot;

[admin]
username = &quot;admin&quot;
password = &quot;CHANGE_THIS_PASSWORD&quot;
email = &quot;admin@yourdomain.com&quot;

[auth]
jwt_secret = &quot;GENERATE_WITH_openssl_rand_-base64_32&quot;
jwt_expires_in = &quot;168h&quot;

[containerd]
socket_path = &quot;/run/containerd/containerd.sock&quot;
namespace = &quot;default&quot;

[mcp]
image = &quot;memohai/mcp:latest&quot;
snapshotter = &quot;overlayfs&quot;
data_root = &quot;/opt/memoh/data&quot;

[postgres]
host = &quot;postgres&quot;
port = 5432
user = &quot;memoh&quot;
password = &quot;YOUR_DB_PASSWORD&quot;
database = &quot;memoh&quot;
sslmode = &quot;disable&quot;

[qdrant]
base_url = &quot;http://qdrant:6334&quot;
api_key = &quot;&quot;
timeout_seconds = 10

[agent_gateway]
host = &quot;agent&quot;
port = 8081
server_addr = &quot;server:8080&quot;

[web]
host = &quot;127.0.0.1&quot;
port = 8082
EOF
```

Genera valores reales para los secretos:

```bash
# Generar secreto JWT
openssl rand -base64 32

# Generar contraseña de la base de datos
openssl rand -base64 16
```

Actualiza `config.toml` con los valores generados.

### Paso 3: Crear el archivo de entorno

```bash
cat &gt; .env &lt;&lt; &apos;EOF&apos;
POSTGRES_PASSWORD=YOUR_DB_PASSWORD
MEMOH_CONFIG=./config.toml
EOF
```

Asegúrate de que `POSTGRES_PASSWORD` coincida con lo que has puesto en `config.toml` bajo `[postgres] password`.

### Paso 4: Crear el archivo compose

```yaml
name: &quot;memoh&quot;
services:
  postgres:
    image: postgres:18-alpine
    container_name: memoh-postgres
    environment:
      POSTGRES_DB: memoh
      POSTGRES_USER: memoh
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-memoh123}
    volumes:
      - postgres_data:/var/lib/postgresql
      - /etc/localtime:/etc/localtime:ro
    expose:
      - &quot;5432&quot;
    healthcheck:
      test: [&quot;CMD-SHELL&quot;, &quot;pg_isready -U memoh&quot;]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped
    networks:
      - memoh-network

  qdrant:
    image: qdrant/qdrant:latest
    container_name: memoh-qdrant
    volumes:
      - qdrant_data:/qdrant/storage
    expose:
      - &quot;6333&quot;
      - &quot;6334&quot;
    healthcheck:
      test: [&quot;CMD-SHELL&quot;, &quot;timeout 10s bash -c &apos;:&gt; /dev/tcp/127.0.0.1/6333&apos; || exit 1&quot;]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped
    networks:
      - memoh-network

  migrate:
    image: memohai/server:latest
    container_name: memoh-migrate
    entrypoint: [&quot;/app/memoh-server&quot;, &quot;migrate&quot;, &quot;up&quot;]
    volumes:
      - ${MEMOH_CONFIG:-./config.toml}:/app/config.toml:ro
    depends_on:
      postgres:
        condition: service_healthy
    restart: &quot;no&quot;
    networks:
      - memoh-network

  server:
    image: memohai/server:latest
    container_name: memoh-server
    privileged: true
    pid: host
    volumes:
      - ${MEMOH_CONFIG:-./config.toml}:/app/config.toml:ro
      - containerd_data:/var/lib/containerd
      - server_cni_state:/var/lib/cni
      - memoh_data:/opt/memoh/data
      - /etc/localtime:/etc/localtime:ro
    ports:
      - &quot;8080:8080&quot;
    depends_on:
      migrate:
        condition: service_completed_successfully
      qdrant:
        condition: service_healthy
    restart: unless-stopped
    networks:
      - memoh-network

  agent:
    image: memohai/agent:latest
    container_name: memoh-agent
    volumes:
      - ${MEMOH_CONFIG:-./config.toml}:/config.toml:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - &quot;8081:8081&quot;
    depends_on:
      - server
    restart: unless-stopped
    networks:
      - memoh-network

  web:
    image: memohai/web:latest
    container_name: memoh-web
    ports:
      - &quot;8082:8082&quot;
    depends_on:
      - server
      - agent
    restart: unless-stopped
    networks:
      - memoh-network

volumes:
  postgres_data:
    driver: local
  qdrant_data:
    driver: local
  containerd_data:
    driver: local
  memoh_data:
    driver: local
  server_cni_state:
    driver: local

networks:
  memoh-network:
    driver: bridge
```

### Paso 5: Iniciar el stack

```bash
sudo docker compose up -d
```

El primer arranque tarda un par de minutos mientras se descargan las imágenes y se inicializan los servicios. Comprueba el progreso con:

```bash
sudo docker compose logs -f
```

Una vez que todo esté en marcha, abre `http://ip-de-tu-servidor:8082` en tu navegador. Inicia sesión con las credenciales de administrador que configuraste en `config.toml`.

## Después del despliegue

### Iniciar sesión y añadir un proveedor

Después de iniciar sesión, ve a **Settings &gt; Providers** y añade tu clave API para OpenAI, Anthropic, Google o cualquier endpoint compatible. Los bots no harán nada útil sin un proveedor configurado.

### Crear tu primer bot

1. Haz clic en **Bots** en la barra lateral
2. Haz clic en **Create Bot**
3. Dale un nombre y selecciona un modelo de tu proveedor configurado
4. El bot obtiene su propio contenedor containerd automáticamente

Ahora puedes chatear con el bot desde la interfaz web, o conectar canales externos como Telegram o Discord.

### Conectar canales de mensajería

Memoh soporta varios canales externos:

| Canal | Lo que necesitas |
| --- | --- |
| Telegram | Un token de bot de @BotFather |
| Discord | Un token de aplicación de bot del Portal de Desarrolladores de Discord |
| Lark (Feishu) | App ID y App Secret |
| Email | Credenciales SMTP o una clave API de Mailgun |

Configura los canales desde **Settings &gt; Channels** en la interfaz web.

### Memoria de los bots

Los bots recuerdan las conversaciones por sí solos. Memoh combina Qdrant para búsqueda semántica basada en vectores con PostgreSQL para datos estructurados y búsqueda por palabras clave BM25. Las últimas 24 horas de contexto se cargan por defecto. Puedes activar la compactación y reconstrucción de memoria desde la configuración del bot.

## Gestión de datos

Todos los datos persistentes se almacenan en volúmenes Docker con nombre:

| Volumen | Contenido |
| --- | --- |
| `postgres_data` | Archivos de la base de datos PostgreSQL |
| `qdrant_data` | Almacenamiento vectorial de Qdrant |
| `containerd_data` | Imágenes y snapshots de los contenedores de bots |
| `memoh_data` | Datos de los contenedores de bots |
| `server_cni_state` | Estado de red CNI para la red de contenedores |

Estos volúmenes sobreviven a `docker compose down`. Para borrar todo y empezar desde cero:

```bash
sudo docker compose down -v
```

### Comandos útiles

```bash
# Comprobar el estado de los servicios
sudo docker compose ps

# Ver logs de un servicio específico
sudo docker compose logs -f server

# Reiniciar el stack
sudo docker compose restart

# Actualizar a las últimas imágenes
sudo docker compose pull &amp;&amp; sudo docker compose up -d
```

El servicio `migrate` se ejecuta en cada arranque, por lo que las actualizaciones del esquema de la base de datos se aplican automáticamente cuando descargas nuevas imágenes.

## Lista de verificación para producción

&lt;ListCheck&gt;
- Reemplaza todas las contraseñas predeterminadas en `config.toml` (admin, secreto JWT, PostgreSQL)
- Configura HTTPS a través de un proxy inverso (Dokploy lo gestiona, o usa Nginx/Caddy)
- Restringe las reglas del firewall para exponer solo los puertos que necesites
- Establece límites de memoria y CPU en los contenedores para mayor estabilidad
- Realiza copias de seguridad de los volúmenes de PostgreSQL y Qdrant regularmente
- Monitoriza el uso del disco, porque los contenedores de bots y los datos vectoriales crecen con el tiempo
&lt;/ListCheck&gt;

&lt;Notice type=&quot;warning&quot; title=&quot;Modo privilegiado&quot;&gt;
El contenedor del servidor se ejecuta con `privileged: true` y `pid: host` porque incorpora containerd. Esto le da amplio acceso al sistema host. Mantén el servidor detrás de un firewall y limita el acceso SSH.
&lt;/Notice&gt;

## Preguntas frecuentes

&lt;Accordion label=&quot;¿Por qué el contenedor del servidor necesita modo privilegiado?&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;
Memoh incorpora containerd dentro del contenedor del servidor para dar a cada bot su propio sandbox. Containerd necesita acceso a características del kernel de Linux (namespaces, cgroups) que requieren privilegios elevados. No hay forma de evitarlo si quieres aislamiento de contenedores por bot.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo usar Memoh sin una clave API de proveedor IA?&quot; group=&quot;faq&quot;&gt;
Puedes desplegarlo y explorar la interfaz, pero los bots no generarán ninguna respuesta hasta que añadas al menos un proveedor. Funciona cualquier endpoint compatible con OpenAI, Anthropic o Google.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Cuánta RAM necesita Memoh?&quot; group=&quot;faq&quot;&gt;
El stack base (PostgreSQL, Qdrant, server, agent, web) ocupa alrededor de 2-3 GB en reposo. Cada contenedor de bot añade sobrecarga dependiendo de las herramientas y modelos que utilice. 4 GB es el mínimo recomendado; aumenta si planeas ejecutar varios bots a la vez.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo exponer solo la interfaz web y mantener la API interna?&quot; group=&quot;faq&quot;&gt;
Sí. En el archivo compose independiente, elimina el mapeo de `ports` para los servicios `server` y `agent`. El contenedor de la interfaz web se comunica con ellos internamente a través de la red Docker. Solo expone el puerto 8082 (o enruta a través de un proxy inverso).
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Cómo actualizo Memoh?&quot; group=&quot;faq&quot;&gt;
Descarga las últimas imágenes y reinicia. El servicio migrate se ejecuta automáticamente al arrancar para aplicar los cambios de esquema:

```bash
sudo docker compose pull &amp;&amp; sudo docker compose up -d
```
&lt;/Accordion&gt;

## Conclusión

Memoh es uno de esos proyectos que incluye mucho en un único stack de Docker Compose. Obtienes aislamiento de contenedores por bot, memoria persistente y mensajería multiplataforma sin tener que ensamblar media docena de herramientas independientes. La opción con Dokploy es la más rápida si ya lo usas; de lo contrario, el archivo compose independiente funciona en cualquier máquina Linux con Docker. A partir de ahí, todo lo demás ocurre en el navegador.

&lt;Button text=&quot;Ver Memoh en GitHub&quot; link=&quot;https://github.com/memohai/Memoh&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;</content:encoded><category>ai</category><category>self-hosted</category><category>ai-agents</category><category>docker</category></item><item><title>Como Construir un Dashboard Moderno de Administracion de Productos WooCommerce</title><link>https://www.bitdoze.com/es/dashboard-admin-woocommerce/</link><guid isPermaLink="true">https://www.bitdoze.com/es/dashboard-admin-woocommerce/</guid><description>El editor de productos predeterminado de WooCommerce es lento y pesado. Aprende como construi un dashboard React open source para gestionar productos WooCommerce y como desplegarlo con Docker.</description><pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate><content:encoded>import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;

Un cliente mío ejecuta [bigsales.ro](https://bigsales.ro/), una tienda WooCommerce con un catalogo de productos grande. Seguian diciendome lo mismo: gestionar productos en el admin de WooCommerce predeterminado es doloroso. Cargas de pagina lentas, demasiados clics para cambiar un precio, ninguna vista movil apropiada, y el editor masivo apenas califica como &quot;masivo&quot;.

Mire las opciones existentes, no encontre ninguna genial para lo que necesitabamos, y termine construyendo un dashboard personalizado desde cero. Ahora es de codigo abierto y puedes usarlo para tu propia tienda.

&lt;Button text=&quot;Woo Admin en GitHub&quot; link=&quot;https://github.com/bitdoze/woo-admin&quot; variant=&quot;solid&quot; color=&quot;purple&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

## El problema con la gestion de productos en WooCommerce

Si has gestionado mas de un punado de productos en WooCommerce, ya sabes. El admin de WordPress fue disenado para posts de blog, y WooCommerce agrego gestion de productos encima de eso. Funciona, pero no funciona bien.

Puntos de dolor especificos que mi cliente seguia encontrando:

- Editar un solo producto significa cargar el editor completo de WordPress, esperar todos esos metaboxes, guardar y esperar de nuevo. En un plan de hosting compartido, eso puede tomar 5-10 segundos por carga de pagina.
- La funcion de edicion masiva te permite cambiar algunos campos a la vez, pero esta enterrada en un dropdown, la UI es estrecha y se ahoga en selecciones grandes.
- Ninguna interfaz movil utilizable. Si necesitas actualizar stock desde tu telefono mientras estas en un almacen, buena suerte con el admin de WP en una pantalla pequena.
- Buscar y filtrar productos es basico. No puedes ordenar por estado de stock o encontrar rapidamente productos que faltan imagenes.
- Cada plugin que agregas para mejorar el admin agrega mas carga a una pagina ya pesada.

## Que existe ya

Antes de construir algo personalizado, pase por las opciones existentes. Hay algunas categorias:

### Plugins de WordPress para edicion masiva

Plugins como **Smart Manager by StoreApps**, **WooCommerce Bulk Edit by iThemeland** y **YITH Bulk Product Editing** agregan edicion estilo hoja de calculo dentro del admin de WordPress. Funcionan, y para actualizaciones simples de precio o stock pueden ser suficientes.

Las desventajas: todavia se ejecutan dentro de WordPress, asi que heredas toda la hinchazon. Agregan mas procesamiento PHP a paginas de admin ya pesadas. Algunos son gratuitos para funciones basicas pero bloquean cosas utiles (como ediciones programadas o gestion de variaciones) detras de niveles de pago. Y todavia no te dan una interfaz independiente y rapida.

### Plataformas alojadas

Shopify, BigCommerce y plataformas similares tienen mejores dashboards de admin listos para usar. Pero si ya estas en WooCommerce, cambiar toda tu plataforma de comercio electronico no es una solucion rapida. Elegiste WooCommerce por una razon (flexibilidad, sin cuotas mensuales, ecosistema WordPress), y esas razones probablemente todavia aplican.

### Paneles de admin personalizados

Unos pocos desarrolladores han construido frontends personalizados React o Vue que hablan a la API REST de WooCommerce. La mayoria estan abandonados o a medio terminar, y los que funcionan son propietarios. No pude encontrar una opcion open source mantenida que hiciera bien lo basico.

Eso es lo que me empujo a construir [Woo Admin](https://github.com/bitdoze/woo-admin).

## Que hace Woo Admin

Woo Admin es una app React independiente que se conecta a tu tienda WooCommerce a traves de la API REST. Se ejecuta en su propio contenedor Docker, completamente separado de WordPress, asi que tu tienda no se vuelve mas pesada.

El conjunto de funciones actual:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Navegar productos con paginacion y busqueda del lado del servidor&lt;/li&gt;
&lt;li&gt;Vista de tabla en escritorio con ordenamiento, mas un diseno de tarjetas en movil&lt;/li&gt;
&lt;li&gt;Crear, editar y eliminar productos&lt;/li&gt;
&lt;li&gt;Gestion de precios (regular y de oferta) con entrada decimal flexible&lt;/li&gt;
&lt;li&gt;Gestion de stock: alternar seguimiento, establecer cantidad, actualizar estado&lt;/li&gt;
&lt;li&gt;Soporte de tipo de producto: simple, variable y productos externos&lt;/li&gt;
&lt;li&gt;Subida de imagenes a WordPress y gestion de imagenes basada en URL&lt;/li&gt;
&lt;li&gt;Asignacion de categorias con visualizacion jerarquica&lt;/li&gt;
&lt;li&gt;Gestion de atributos globales y creacion de terminos&lt;/li&gt;
&lt;li&gt;CRUD completo de variaciones para productos variables&lt;/li&gt;
&lt;li&gt;Control de estado del producto (publicado, borrador, pendiente, privado)&lt;/li&gt;
&lt;li&gt;Interfaz amigable para moviles que realmente funciona en un telefono&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

## El stack tecnologico

El frontend es React 18 con TypeScript y Vite. Use Ant Design para los componentes UI porque tiene componentes solidos de tabla, formulario y diseno que no queria construir yo mismo. Encima de eso, use Refine (`@refinedev/core` + `@refinedev/antd`), que es un framework especificamente para paneles de admin. Te da patrones de proveedor de datos y hooks CRUD, asi que pase mi tiempo en logica especifica de WooCommerce en lugar de cablear paginacion y estado de formularios por centesima vez.

Para solicitudes HTTP use Axios. En produccion, la app compila a archivos estaticos servidos por Nginx, que tambien maneja el proxy inverso a la API de WooCommerce. Todo se envia como una imagen Docker con una construccion multi-etapa: Node compila el TypeScript, luego la salida se copia en una pequena imagen Nginx Alpine.

## Como se conecta a WooCommerce

La app habla con la API REST de WooCommerce (v3) y la API REST de WordPress (para subidas de medios). Hay dos modos de conexion:

### Modo proxy (recomendado)

En modo proxy, el frontend hace solicitudes a rutas relativas como `/api/wc` y `/api/wp`. El contenedor Nginx sentado frente a la app hace proxy de esas a tu sitio WooCommerce e inyecta encabezados de autenticacion.

Esta es la configuracion que recomiendo porque:

- Tus credenciales de API de WooCommerce nunca aparecen en solicitudes del navegador
- No necesitas configurar CORS en tu sitio WordPress
- Funciona detras de cualquier proxy inverso (Traefik, Caddy, otro Nginx)

Las rutas del proxy se ven asi:

```
/api/wc/*  →  https://tu-tienda.com/wp-json/wc/v3/*
/api/wp/*  →  https://tu-tienda.com/wp-json/wp/v2/*
```

### Modo API directa

Si no quieres usar el proxy integrado, el frontend puede llamar a la API de WooCommerce directamente. Configura `VITE_WC_API_BASE` a la URL API completa de tu tienda y proporciona la clave y secreto del consumidor. Esto requiere que CORS este configurado apropiadamente en tu instalacion WordPress.

## Estructura del proyecto

El codigo es pequeno y enfocado:

```
src/
├── components/
│   ├── ProductAttributesInput.tsx    # Selector de atributo global
│   ├── ProductCategoriesInput.tsx    # Selector de categoria jerarquico
│   ├── ProductImagesInput.tsx        # Gestor de imagenes subida + URL
│   ├── ProductVariationsManager.tsx  # CRUD de variaciones
│   └── ProductVariationsTable.tsx    # Visualizacion de variaciones
├── pages/products/
│   ├── list.tsx     # Listado de productos con vistas tabla/tarjeta
│   ├── create.tsx   # Formulario de nuevo producto
│   ├── edit.tsx     # Formulario de edicion con soporte de variaciones
│   └── show.tsx     # Vista de detalle del producto
├── providers/
│   └── wooDataProvider.ts   # Proveedor de datos Refine personalizado
├── App.tsx          # Enrutamiento y configuracion Refine
└── main.tsx         # Punto de entrada React
```

El proveedor de datos personalizado (`wooDataProvider.ts`) es donde vive la logica especifica de WooCommerce: normalizar payloads, formatear precios, limpiar objetos de imagen y mapear entre como Refine espera datos y como la API de WooCommerce realmente funciona.

### Normalizacion de precios

Una cosa que me tropee al principio: WooCommerce es exigente con los formatos de precio en la API, y los usuarios escriben precios de todo tipo de formas. El proveedor de datos normaliza precios antes de enviarlos:

- Acepta tanto `.` como `,` como separadores decimales
- Elimina simbolos de moneda y espacios en blanco
- Redondea a dos lugares decimales
- Si alguien llena solo el precio de oferta, se promueve al precio regular (un error comun)

## Como desplegarlo

### Requisitos previos

Necesitas:

- Una tienda WooCommerce con la API REST habilitada
- Claves API de WooCommerce (ve a WooCommerce → Settings → Advanced → REST API)
- Docker y Docker Compose en tu servidor
- Opcionalmente, una contrasena de aplicacion WordPress para subidas de medios

### Paso 1: Clonar el repositorio

```bash
git clone https://github.com/bitdoze/woo-admin.git
cd woo-admin
```

### Paso 2: Crear tu archivo .env

```env
VITE_WC_API_BASE=/api/wc
VITE_WC_URL=https://tu-tienda.com
VITE_WC_CONSUMER_KEY=ck_tu_clave_aqui
VITE_WC_CONSUMER_SECRET=cs_tu_secreto_aqui
VITE_WP_USERNAME=tu_usuario_wp
VITE_WP_APP_PASSWORD=tu_contrasena_aplicacion
ACCESS_PASS=elige_una_contrasena_fuerte
```

&lt;Notice type=&quot;warning&quot; title=&quot;Protege tu dashboard&quot;&gt;
  Siempre configura `ACCESS_PASS`. Sin ella, cualquiera que encuentre la URL puede gestionar tus productos. El dashboard usa HTTP Basic Auth con usuario `admin` y cualquier contrasena que configures aqui.
&lt;/Notice&gt;

### Paso 3: Crear la red Docker e iniciar el contenedor

```bash
docker network create web
docker compose up -d --build
```

Eso construye el frontend, lo empaqueta en un contenedor Nginx y empieza a servir. El script de punto de entrada genera la configuracion en tiempo de ejecucion y la configuracion de proxy Nginx automaticamente desde tus variables de entorno.

### Paso 4: Configurar un proxy inverso

El contenedor expone el puerto 80 internamente. Ponlo detras de tu proxy inverso existente (Traefik, Caddy, Nginx) con terminacion SSL. Si estas ejecutando apps Docker con un panel, puedes revisar mi guia sobre [desplegar apps Docker Compose con Dokploy](https://www.bitdoze.com/dokploy-docker-compose-app/).

Si tienes WordPress ejecutandose en Docker tambien, revisa mi [guia de instalacion de WordPress con Docker](https://www.bitdoze.com/install-wordpress-docker/) para la configuracion completa.

## Desarrollo local

Si quieres contribuir o personalizarlo para tu tienda:

```bash
npm ci
npm run dev
```

El servidor de desarrollo inicia en el puerto 3000. Crea un archivo `.env` con las credenciales de tu tienda y la app se conecta directamente a tu API de WooCommerce. Asegurate de que tu tienda tenga encabezados CORS configurados para `localhost:3000`, o usa modo proxy.

```bash
npm run build      # Construccion de produccion
npm run preview    # Previsualizar la construccion de produccion localmente
```

## Como se ve el dashboard en la practica


![woo-admin](@assets/images/26/03/woo-admin-dash.webp)


La queja principal de mi cliente era &quot;solo quiero ver mis productos y cambiar un precio sin esperar 10 segundos.&quot; Asi que la lista de productos es lo primero que ves. En escritorio es una tabla ordenable con miniaturas de imagen, insignias de stock y botones de accion. En un telefono cambia a tarjetas, que era la parte que mi cliente realmente usa mas ya que revisan stock desde su almacen.

El formulario de edicion agrupa campos relacionados en lugar de dispersarlos a traves de metaboxes como hace WooCommerce. Precios estan cerca de la parte superior, luego stock, luego categorias y atributos, luego imagenes, luego variaciones. Cada seccion obtiene datos bajo demanda, asi que el formulario no se ahoga incluso con miles de productos en el catalogo.

Un detalle con el que estoy feliz: la asignacion de categorias muestra la ruta completa (como &quot;Electronicos &gt; Telefonos &gt; Smartphones&quot;) asi que inmediatamente sabes donde se ubica un producto. En el editor predeterminado de WooCommerce, las categorias anidadas son solo casillas de verificacion indentadas que se confunden pasado dos niveles.

## Preguntas frecuentes

&lt;Accordion label=&quot;¿Esto reemplaza el admin de WordPress completamente?&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;
  No. Woo Admin se enfoca solo en gestion de productos. Todavia necesitas el admin de WordPress para pedidos, clientes, configuracion, envio, impuestos y todo lo demas que hace WooCommerce. Piensa en ello como una herramienta dedicada para la unica tarea que el admin predeterminado maneja mal.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Pueden multiples personas usar el dashboard al mismo tiempo?&quot; group=&quot;faq&quot;&gt;
  Si. Cada sesion de usuario habla con la API de WooCommerce independientemente. No hay estado de sesion del lado del servidor. Solo ten en cuenta que si dos personas editan el mismo producto simultaneamente, el ultimo guardado gana.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Esto relentecera mi tienda WooCommerce?&quot; group=&quot;faq&quot;&gt;
  No. El dashboard se ejecuta en su propio contenedor y solo habla con la API REST de WooCommerce. No agrega ningun codigo PHP, plugins o consultas de base de datos a tu tienda. Las llamadas a la API REST son las mismas que cualquier integracion externa haria.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo ejecutar esto sin Docker?&quot; group=&quot;faq&quot;&gt;
  Puedes construir los archivos estaticos con `npm run build` y servir la carpeta `dist/` desde cualquier servidor web. Necesitaras configurar el proxy tu mismo (o usar modo API directa). Docker solo hace que el despliegue y la configuracion del proxy sean llave en mano.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Es seguro?&quot; group=&quot;faq&quot;&gt;
  En modo proxy, las credenciales de API de WooCommerce se quedan en el servidor. Nunca llegan al navegador. La `ACCESS_PASS` opcional agrega HTTP Basic Auth al dashboard mismo, asi que personas aleatorias no pueden tropezar con el. Para produccion, siempre ejecutalo detras de HTTPS.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Que pasa con pedidos y clientes?&quot; group=&quot;faq&quot;&gt;
  Todavia no. La version actual esta enfocada en productos. Gestion de pedidos y clientes podria venir despues, pero la prioridad fue resolver el punto de dolor de edicion de productos primero. Si quieres contribuir, el repositorio esta abierto.
&lt;/Accordion&gt;

## Que sigue

El repositorio esta en [github.com/bitdoze/woo-admin](https://github.com/bitdoze/woo-admin) bajo licencia MIT. Lo estoy ejecutando en produccion para [bigsales.ro](https://bigsales.ro/) y mi cliente dejo de quejarse sobre gestion de productos, lo que considero un exito. Seguire agregando funciones a medida que surjan necesidades reales en lugar de adivinar que podria querer la gente.

Si tu experiencia con el admin de WooCommerce es tan frustrante como la mia fue, clona el repositorio y pruebalo. Toma como cinco minutos ponerlo en funcionamiento con Docker. Issues y pull requests son bienvenidos.</content:encoded><category>wordpress</category><category>woocommerce</category><category>docker</category></item><item><title>Guia de Configuracion de OpenFang: GLM-5, MiniMax M2.5, Hands y Discord en tu VPS</title><link>https://www.bitdoze.com/es/guia-configuracion-openfang/</link><guid isPermaLink="true">https://www.bitdoze.com/es/guia-configuracion-openfang/</guid><description>Guia paso a paso para instalar OpenFang en un VPS Linux con GLM-5, MiniMax M2.5, integracion Discord, Hands autonomos y 16 capas de seguridad. Cubre config.toml, proveedores, canales y despliegue Docker.</description><pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate><content:encoded>import YouTubeEmbed from &quot;@components/widgets/YouTubeEmbed.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

He estado ejecutando [OpenFang](https://github.com/RightNow-AI/openfang) durante unas dos semanas ahora, junto con mi [configuracion de OpenClaw](/es/guia-configuracion-openclaw/) y mi instancia de [nanobot](/es/guia-configuracion-nanobot/). OpenFang es diferente de todo lo demas que he probado. Se llama a si mismo un &quot;Sistema Operativo de Agentes&quot;, y despues de usarlo creo que esa etiqueta encaja. Trae agentes autonomos llamados Hands que se ejecutan en horarios sin que tengas que preguntarles, respaldados por 16 capas de seguridad y 40 adaptadores de canales de chat, todo en un unico binario Rust.

Esta guia te lleva a traves de como poner OpenFang en funcionamiento en un VPS con GLM-5 y MiniMax M2.5 como tus proveedores LLM, Discord como canal de chat, y el Hand Researcher activado.

&lt;Button text=&quot;OpenFang GitHub&quot; link=&quot;https://github.com/RightNow-AI/openfang&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre esta guia&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Instalar OpenFang via el script de instalacion o desde el codigo fuente&lt;/li&gt;
&lt;li&gt;Configurar GLM-5 (Zhipu) y MiniMax M2.5 como proveedores LLM&lt;/li&gt;
&lt;li&gt;Configurar Discord como canal de chat&lt;/li&gt;
&lt;li&gt;Activar el Hand Researcher para tareas autonomas&lt;/li&gt;
&lt;li&gt;Configuracion de seguridad, soporte MCP y el sistema Hands&lt;/li&gt;
&lt;li&gt;Despliegue Docker y configuracion del servicio systemd&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

Si quieres comparar OpenFang contra otros bots autoalojados, nuestro resumen de [alternativas a OpenClaw](/es/alternativas-openclaw/) cubre NanoClaw, nanobot, PicoClaw, ZeroClaw, NullClaw y ahora OpenFang. Para lo basico de MCP, revisa la [introduccion a MCP para principiantes](/mcp-introduction-beginners/).

## Que es realmente OpenFang


&lt;YouTubeEmbed
  url=&quot;https://www.youtube.com/embed/JX-MbP0qMCk&quot;
  label=&quot;Conoce OpenFang: Mejor Alternativa Open-Source a OpenClaw&quot;
/&gt;

OpenFang es un proyecto de codigo abierto de [RightNow AI](https://www.rightnowai.co/), construido completamente en Rust. Esta estructurado como un workspace de 14 crates con un total de aproximadamente 137,000 lineas de codigo con 1,767+ pruebas y cero advertencias de clippy. Todo compila en un unico binario de ~32MB.

La arquitectura se ve asi:

```
Tu (Discord / Telegram / Slack / WhatsApp / 36 mas)
    ↓
OpenFang Daemon (ejecutandose en tu VPS)
    ↓
┌─────────────────────────────────┐
│  Kernel: orquestacion, RBAC,   │
│  programacion, seguimiento de  │
│  presupuesto                   │
├─────────────────────────────────┤
│  Runtime: loop de agente, 53   │
│  herramientas, sandbox WASM,   │
│  MCP, A2A                      │
├─────────────────────────────────┤
│  Proveedor LLM (27 soportados) │
│  MiniMax, Zhipu, Anthropic, etc│
└─────────────────────────────────┘
    ↓
Hands (agentes autonomos en horarios)
```

Los mensajes llegan desde tu app de chat y se enrutan hacia cualquier LLM que hayas configurado. Los agentes pueden usar 53 herramientas integradas, conectarse a servidores MCP y ejecutarse dentro de un sandbox WASM. La parte a la que siempre vuelvo es Hands. Estos son agentes autonomos que se activan en un horario, hacen su trabajo y reportan a tu dashboard sin que nunca envies un mensaje.

## Por que GLM-5 y MiniMax M2.5

Ambos modelos funcionan bien con el sistema de proveedores de OpenFang y mantienen los costos bajos para configuraciones de agentes siempre activos.

### GLM-5

GLM-5 de Zhipu AI es un modelo MoE de 744B con aproximadamente 40-44B parametros activos. Ocupa el primer lugar entre modelos de codigo abierto en BrowseComp, que mide tareas de busqueda e investigacion web — una buena combinacion para el Hand Researcher de OpenFang.

| Especificacion | Valor |
|------|-------|
| Arquitectura | 744B MoE, ~40B activos |
| Ventana de contexto | 200K tokens |
| SWE-Bench Verified | 77.8% |
| BrowseComp | #1 codigo abierto |
| Licencia | MIT |

La ventana de contexto de 200K maneja tareas de investigacion largas sin encontrarse con limites.

### MiniMax M2.5

MiniMax M2.5 es un modelo MoE de 230B con solo 10B parametros activos por pasada. Es mas rapido y economico que GLM-5, y la ventana de contexto de 1M tokens es dificil de ignorar:

| Especificacion | Valor |
|------|-------|
| Arquitectura | 230B MoE, 10B activos |
| Ventana de contexto | 1M tokens |
| Velocidad (Lightning) | 100 tokens/seg |
| Costo (Lightning) | $0.30/M entrada, $2.40/M salida |
| SWE-Bench Verified | 80.2% |
| Licencia | MIT modificado (codigo abierto) |

MiniMax M2.5 obtiene 80.2% en SWE-Bench Verified, lo que lo pone junto a Claude Opus 4.6 a una fraccion del precio. El contexto de 1M es excesivo para chat pero util cuando los Hands estan procesando grandes cantidades de datos de investigacion.

Ambos modelos estan disponibles a traves de sus APIs directas y a traves de OpenRouter.

## Instalacion

Tres caminos para poner OpenFang en funcionamiento.

&lt;Tabs&gt;
&lt;Tab name=&quot;Script de instalacion (recomendado)&quot;&gt;

La forma mas rapida. Funciona en macOS y Linux.

```bash
curl -fsSL https://openfang.sh/install | sh
```

Esto descarga el binario precompilado para tu plataforma y lo pone en tu PATH.

&lt;/Tab&gt;
&lt;Tab name=&quot;Desde el codigo fuente&quot;&gt;

Si quieres el codigo mas reciente o planeas contribuir:

```bash
# Instala Rust si no lo tienes
curl --proto &apos;=https&apos; --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env

# Clona y compila
git clone https://github.com/RightNow-AI/openfang.git
cd openfang
cargo build --workspace --release

# El binario esta en target/release/openfang
sudo cp target/release/openfang /usr/local/bin/
```

&lt;/Tab&gt;
&lt;Tab name=&quot;Windows&quot;&gt;

PowerShell:

```powershell
irm https://openfang.sh/install.ps1 | iex
```

&lt;/Tab&gt;
&lt;/Tabs&gt;

Despues de instalar, inicializa el workspace y configuracion:

```bash
openfang init
```

Esto crea el directorio `~/.openfang/` con un `config.toml` predeterminado, configura el workspace local y te guia para elegir un proveedor LLM.

Verifica que funciona:

```bash
openfang status
```

## Configurar GLM-5 (Zhipu)

OpenFang usa un archivo `config.toml` en `~/.openfang/config.toml`. En la practica, la configuracion mas limpia es definir el modelo seleccionado en `[default_model]`, luego mantener las credenciales y endpoints API especificos del proveedor en el bloque `[providers.&lt;nombre&gt;]` correspondiente.

### Obtener una clave API

1. Ve a [z.ai](https://z.ai/manage-apikey/apikey-list)
2. Registrate y crea una clave API

&lt;Notice type=&quot;success&quot; title=&quot;Plan de codificacion Z.AI GLM — 10% de descuento&quot;&gt;
Z.AI ofrece [planes de codificacion GLM](https://z.ai/subscribe?ic=NKNUNYDRZ) disenados para cargas de trabajo continuas de desarrolladores. Usa nuestro enlace para obtener 10% de descuento.
&lt;/Notice&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Endpoint del plan de codificacion Zhipu&quot;&gt;
Si estas en el plan de codificacion de Zhipu, configura `api_base = &quot;https://api.z.ai/api/coding/paas/v4&quot;` en tu configuracion del proveedor zhipu. Esto enruta a traves de su endpoint optimizado para codificacion.
&lt;/Notice&gt;

### Agregar a la configuracion

```toml
[default_model]
provider = &quot;openai&quot;
model = &quot;glm-5&quot;
api_key = &quot;tu-clave-api-zhipu&quot;
base_url = &quot;https://api.z.ai/api/coding/paas/v4&quot;
```

Zhipu se configura a traves del proveedor `openai` de OpenFang porque el endpoint GLM es compatible con OpenAI. La documentacion pone `provider`, `model`, `api_key` y cualquier `base_url` personalizado en el mismo bloque `[default_model]`.

### Probarlo

```bash
openfang chat
&gt; ¿Cuanto es 42 * 17?
```

Si obtienes una respuesta, GLM-5 esta configurado correctamente. Escribe `exit` para salir del chat.

## Configurar MiniMax M2.5

### Obtener una clave API

1. Ve a [platform.minimax.io](https://platform.minimax.io) (global) o [minimaxi.com](https://www.minimaxi.com) (China continental)
2. Crea una cuenta y genera una clave API
3. Anota en que plataforma estas ya que la URL base de la API difiere

&lt;Notice type=&quot;success&quot; title=&quot;Plan de codificacion MiniMax — 10% de descuento&quot;&gt;
MiniMax ofrece planes de codificacion con precios para cargas de trabajo de desarrolladores. [Obtén 10% de descuento con nuestro enlace de referido](https://go.bitdoze.com/minimax). Para detalles sobre como se comparan GLM-5 y MiniMax M2.5 para bots siempre activos, ve nuestro analisis de [mejores modelos open source para OpenClaw](/es/mejores-modelos-opensource-openclaw/).
&lt;/Notice&gt;

### Agregar a la configuracion

Para la plataforma global, usa el estilo de configuracion especifico del proveedor:

```toml
[default_model]
provider = &quot;minimax&quot;
model = &quot;MiniMax-M2.5&quot;

[memory]
decay_rate = 0.05

[providers.minimax]
api_key_env = &quot;MINIMAX_API_KEY&quot;
api_base = &quot;https://api.minimax.io/v1&quot;

[agents.defaults]
model = &quot;MiniMax-M2.5&quot;
```

Para la plataforma de China continental, agrega la sobreescritura de la base API:

```toml
[default_model]
provider = &quot;minimax&quot;
model = &quot;MiniMax-M2.5&quot;

[memory]
decay_rate = 0.05

[providers.minimax]
api_key_env = &quot;MINIMAX_API_KEY&quot;
api_base = &quot;https://api.minimaxi.com/v1&quot;

[agents.defaults]
model = &quot;MiniMax-M2.5&quot;
```

Esto mantiene la declaracion del proveedor explicita: `default_model` selecciona MiniMax, `[providers.minimax]` contiene la configuracion de la API, y `[agents.defaults]` mantiene el modelo de agente predeterminado alineado con el proveedor.

### Configurar ambos proveedores

Si quieres ambos proveedores disponibles en la misma configuracion, mantén cada uno en su propio bloque de proveedor y apunta tu modelo predeterminado al que quieres usar primero:

```toml
[default_model]
provider = &quot;zhipu&quot;
model = &quot;glm-5&quot;

[providers.zhipu]
api_key = &quot;tu-clave-zhipu&quot;
api_base = &quot;https://api.z.ai/api/coding/paas/v4&quot;

[providers.minimax]
api_key_env = &quot;MINIMAX_API_KEY&quot;
api_base = &quot;https://api.minimax.io/v1&quot;

[agents.defaults]
model = &quot;glm-5&quot;
```

Para cambiar a MiniMax, cambia `default_model.provider` a `&quot;minimax&quot;` y configura `agents.defaults.model` a `&quot;MiniMax-M2.5&quot;`.

## Configuracion de Discord

Discord es directo con OpenFang ya que es uno de los 40 adaptadores de canal soportados.

### Crear un bot de Discord

1. Ve a [discord.com/developers/applications](https://discord.com/developers/applications)
2. Haz clic en **New Application**, dale un nombre
3. Ve a **Bot** en la barra lateral izquierda, haz clic en **Add Bot**
4. Copia el token del bot

### Habilitar intents

Todavia en la pagina de configuracion del Bot:

1. Desplazate hacia abajo hasta **Privileged Gateway Intents**
2. Habilita **MESSAGE CONTENT INTENT** (requerido para que el bot lea mensajes)
3. Opcionalmente habilita **SERVER MEMBERS INTENT** si planeas usar listas de permitidos

### Obtener tu ID de usuario

1. Abre Configuracion de Discord → **Advanced** → habilita **Developer Mode**
2. Haz clic derecho en tu avatar en cualquier lugar de Discord
3. Haz clic en **Copy User ID**

### Configurar OpenFang

Luego usa el formato de canal de la documentacion:

```toml
[channels.discord]
enabled = true
token = &quot;TU_TOKEN_DEL_BOT_DISCORD&quot;
allowed_users = [&quot;TU_ID_DE_USUARIO&quot;]
```

`allowed_users` es la clave de lista de permitidos actual en la documentacion. Dejala vacia para permitir que cualquiera en el servidor use el bot, o agrega IDs de usuario especificos si quieres un bot privado.

### Invitar el bot a tu servidor

1. En el portal de desarrolladores de Discord, ve a **OAuth2** → **URL Generator**
2. En **Scopes**, marca `bot`
3. En **Bot Permissions**, marca `Send Messages` y `Read Message History`
4. Copia la URL generada y abrela en tu navegador
5. Selecciona el servidor al que quieres agregar el bot

### Iniciar el daemon

```bash
openfang start
```

Envia un mensaje en Discord. El bot deberia responder. El dashboard escucha en `127.0.0.1:5555` por defecto a menos que cambies `dashboard_listen`.

## Ejemplo de configuracion completa

Asi se ve un `~/.openfang/config.toml` completo con MiniMax M2.5, Discord y el servidor API expuesto externamente con una contrasena API mientras se mantienen los puertos predeterminados:

```toml
api_listen = &quot;0.0.0.0:50051&quot;
api_key = &quot;cambia-esta-contrasena-larga-y-aleatoria&quot;

[default_model]
provider = &quot;minimax&quot;
model = &quot;MiniMax-M2.5&quot;
max_tokens = 8192
temperature = 0.7

[memory]
decay_rate = 0.05

[providers.minimax]
api_key_env = &quot;MINIMAX_API_KEY&quot;
api_base = &quot;https://api.minimaxi.com/v1&quot;

[agents.defaults]
model = &quot;MiniMax-M2.5&quot;

[channels.discord]
enabled = true
token = &quot;TU_TOKEN_DEL_BOT_DISCORD&quot;
allowed_users = [&quot;TU_ID_DE_USUARIO&quot;]
```

### Configuracion explicada

| Configuracion | Predeterminado | Que hace |
|---------|---------|-------------|
| `default_model.provider` | — | Que proveedor usa OpenFang primero |
| `memory.decay_rate` | predeterminado de la app | Controla que tan rapido se desvanece la memoria almacenada |
| `providers.minimax.api_key_env` | — | Variable de entorno que almacena la clave MiniMax |
| `providers.minimax.api_base` | predeterminado del proveedor | Endpoint de API MiniMax para tu region |
| `agents.defaults.model` | — | Modelo predeterminado usado por agentes y hands generados |
| `api_listen` | `127.0.0.1:50051` | Direccion a la que se vincula el servidor API |
| `api_key` | none | Token Bearer requerido para acceso API |
| `channels.discord.allowed_users` | vacio | Restringe quien puede hablar con el bot |

### Ejemplo de API externa MiniMax M2.5

Si quieres ejecutar OpenFang solo con MiniMax M2.5 y permitir que clientes externos se conecten a traves de la API, este es el patron de configuracion mas limpio manteniendo los puertos predeterminados:

```toml
[default_model]
provider = &quot;minimax&quot;
model = &quot;MiniMax-M2.5&quot;

[memory]
decay_rate = 0.05

[providers.minimax]
api_key_env = &quot;MINIMAX_API_KEY&quot;
api_base = &quot;https://api.minimaxi.com/v1&quot;

[agents.defaults]
model = &quot;MiniMax-M2.5&quot;
temperature = 0.7
max_tokens = 8192

api_listen = &quot;0.0.0.0:50051&quot;
api_key = &quot;reemplaza-con-una-contrasena-api-larga-y-aleatoria&quot;

[channels.discord]
enabled = true
token = &quot;TU_TOKEN_DEL_BOT_DISCORD&quot;
allowed_users = [&quot;TU_ID_DE_USUARIO&quot;]
```

Esto mantiene el puerto API predeterminado (`50051`) y solo cambia la direccion de vinculacion para que sea accesible remotamente. Exporta `MINIMAX_API_KEY` en el shell o tu gestor de servicios antes de iniciar OpenFang, y mantén el puerto API bloqueado en tu firewall a IPs de confianza.

## El sistema de proveedores

OpenFang viene con 3 controladores LLM nativos (Anthropic, Gemini, compatible con OpenAI) que enrutan a 27 proveedores. Cuando configuras un nombre de modelo, OpenFang:

1. Coincide palabras clave en el nombre contra su registro de proveedores
2. Verifica que el proveedor coincidente tiene una clave API
3. Enruta a traves del controlador nativo correcto
4. Maneja autenticacion, limitacion de velocidad y seguimiento de costos

Aqui estan los proveedores soportados:

| Proveedor | Que cubre |
|----------|---------------|
| Anthropic | Modelos Claude (controlador nativo) |
| Gemini | Google Gemini (controlador nativo) |
| OpenAI | Modelos GPT (controlador nativo) |
| Groq | Inferencia rapida |
| DeepSeek | Modelos DeepSeek |
| OpenRouter | Gateway a cualquier modelo |
| Together | Hosting de modelos open source |
| Mistral | Modelos Mistral |
| Fireworks | Inferencia rapida |
| Cohere | Modelos Command |
| Perplexity | Modelos aumentados con busqueda |
| xAI | Modelos Grok |
| Ollama | Modelos locales |
| vLLM | Servir modelos locales |
| LM Studio | Modelos locales |
| MiniMax | MiniMax M2.5 y otros |
| Zhipu | GLM-5 y otros |
| Moonshot | Modelos Kimi |
| Qwen / DashScope | Modelos Qwen |
| Bedrock | Modelos alojados en AWS |

OpenFang enruta solicitudes basandose en puntuacion de complejidad de tarea, recurre a otro proveedor si uno falla, y rastrea costos por modelo en el dashboard.

## El sistema Hands

Hands son la razon por la que sigo ejecutando OpenFang junto con mis otros bots. Son agentes autonomos preconstruidos que se ejecutan en horarios sin que tu envies mensajes. Activas un Hand, va a trabajar, y revisas su progreso en el dashboard.

Cada Hand viene incluido en el binario con:
- **HAND.toml** — manifiesto que declara herramientas y configuraciones requeridas
- **Prompt de sistema** — un manual operativo multifase (500+ palabras, no una sola linea)
- **SKILL.md** — experiencia de dominio cargada en contexto en tiempo de ejecucion
- **Guardrails** — puertas de aprobacion para acciones sensibles

### Los 7 Hands incluidos

| Hand | Que hace |
|------|-------------|
| **Clip** | Toma URLs de YouTube, los corta en shorts verticales con subtitulos y miniaturas, publica en Telegram/WhatsApp |
| **Lead** | Generacion de leads diaria — descubre, enriquece, califica y deduplica prospectos calificados |
| **Collector** | Inteligencia OSINT — monitorea objetivos con deteccion de cambios, seguimiento de sentimiento, graficos de conocimiento |
| **Predictor** | Superforecasting — colecta senales, construye cadenas de razonamiento, rastrea precision con puntuaciones Brier |
| **Researcher** | Investigacion profunda — referencruzada de fuentes, verificacion de hechos CRAAP, informes citados en multiples idiomas |
| **Twitter** | Gestion de X/Twitter — 7 formatos de contenido, programacion, seguimiento de compromiso, cola de aprobacion |
| **Browser** | Automatizacion web — navega sitios, llena formularios, maneja flujos de trabajo (puerta de aprobacion de compra obligatoria) |

### Activar un Hand

```bash
# Activar el Hand Researcher
openfang hand activate researcher

# Revisar progreso
openfang hand status researcher

# Listar todos los Hands disponibles
openfang hand list

# Pausar sin perder estado
openfang hand pause researcher
```

Empezaria con el Hand Researcher. Se ejecuta por si solo, referencruza fuentes, evalua credibilidad usando criterios CRAAP y genera informes citados. Combinalo con GLM-5 (que ocupa el #1 en BrowseComp) y la salida de investigacion es genuinamente util sin ninguna supervision.

## Modelo de seguridad

OpenFang tiene 16 sistemas de seguridad, cada uno ejecutandose independientemente. Aqui estan los que importan para una configuracion personal:

### Sandbox WASM

Cada herramienta se ejecuta dentro de un sandbox WebAssembly con medicion de combustible. Si una herramienta intenta ejecutarse para siempre, el watchdog la mata.

Esto esta habilitado por defecto. A diferencia de las verificaciones de permisos a nivel de aplicacion, la herramienta fisicamente no puede escapar del sandbox.

### Rastro de auditoria

Cada accion se agrega a una cadena hash Merkle. Manipula una entrada y toda la cadena se rompe.

### Listas de permitidos de canal

Mismo concepto que nanobot — restringe quien puede interactuar con el bot:

```toml
[channels.discord]
allowed_users = [&quot;123456789&quot;]
```

### Zeroizacion de secretos

Las claves API se borran automaticamente de la memoria en el momento en que ya no se necesitan. OpenFang usa `Zeroizing&lt;String&gt;` en todo el codigo, por lo que los secretos no permanecen en RAM.

## Soporte MCP y A2A

OpenFang soporta tanto [Model Context Protocol](/mcp-introduction-beginners/) para servidores de herramientas como comunicacion Agent-to-Agent (A2A). Viene con 25 plantillas MCP y una bodega de credenciales AES-256-GCM para almacenar credenciales de servidores MCP.

### Agregar un servidor MCP

```toml
[[mcp_servers]]
name = &quot;filesystem&quot;
command = &quot;npx&quot;
args = [&quot;-y&quot;, &quot;@modelcontextprotocol/server-filesystem&quot;, &quot;/home/usuario/documentos&quot;]

[[mcp_servers]]
name = &quot;remote_server&quot;
url = &quot;https://mcp.ejemplo.com/sse&quot;
```

Las herramientas MCP se descubren automaticamente cuando OpenFang inicia. El LLM puede usarlas junto con las 53 herramientas integradas.

## Despliegue Docker

OpenFang publica imagenes de contenedor:

```bash
# Descargar la imagen
docker pull ghcr.io/rightnow-ai/openfang:latest

# Inicializar configuracion (primera vez)
docker run -v ~/.openfang:/root/.openfang --rm \
  ghcr.io/rightnow-ai/openfang:latest init

# Editar configuracion en el host
nano ~/.openfang/config.toml

# Ejecutar el daemon
docker run -d \
  -v ~/.openfang:/root/.openfang \
  -p 50051:50051 \
  -p 5555:5555 \
  --name openfang \
  ghcr.io/rightnow-ai/openfang:latest start
```

El dashboard es accesible en `http://ip-de-tu-servidor:5555` despues de iniciar si vinculas `dashboard_listen` externamente. Si mantienes el predeterminado mas seguro de `127.0.0.1:5555`, accede a el a traves de tunel SSH o un proxy inverso en su lugar.

## Hosting VPS

OpenFang usa aproximadamente 40MB de RAM en reposo, mucho menos que los 394MB de OpenClaw. Lo estoy ejecutando en un [Hetzner CX22](/hetzner-cloud-review/) (2 vCPU, 4GB RAM) a €4.35/mes junto con nanobot sin problemas.

&lt;Notice type=&quot;success&quot; title=&quot;Descuento Hetzner&quot;&gt;
[Obtén €20 de credito](https://go.bitdoze.com/hetzner), [Hostinger VPS](https://go.bitdoze.com/hostinger-vps) cuando te registras a traves de nuestro enlace de referido. Eso cubre aproximadamente 4 meses de un CX22.
&lt;/Notice&gt;

Configuracion rapida en un VPS Ubuntu 24.04 fresco:

```bash
ssh root@IP_DE_TU_SERVIDOR

# Actualizar sistema
apt update &amp;&amp; apt upgrade -y

# Instalar OpenFang
curl -fsSL https://openfang.sh/install | sh

# Inicializar
openfang init

# Editar configuracion
nano ~/.openfang/config.toml

# Iniciar daemon en segundo plano
openfang start
```

Para una configuracion de daemon apropiada, crea un servicio systemd:

```ini
[Unit]
Description=OpenFang Agent OS
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/openfang start
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
```

Guarda eso en `/etc/systemd/system/openfang.service`, luego:

```bash
systemctl daemon-reload
systemctl enable openfang
systemctl start openfang
```

El dashboard estara activo en `http://ip-de-tu-servidor:5555` si vinculas `dashboard_listen` externamente. Puedes agregar mas adaptadores de canal despues sin reiniciar.

## OpenFang vs nanobot vs OpenClaw

Ejecuto los tres, asi que aqui hay una comparacion directa:

| Aspecto | OpenFang | nanobot | OpenClaw |
|--------|----------|---------|----------|
| Lenguaje | Rust | Python | TypeScript |
| Codigo | 137K LOC | ~3,700 lineas | 430k+ lineas |
| Metodo de instalacion | `curl` una linea | `pip install` | Instalador personalizado |
| Tamano del binario | ~32MB | N/A (Python) | ~500MB |
| RAM (reposo) | ~40MB | ~100MB | &gt;394MB |
| Inicio en frio | menos de 200ms | &gt;30s | ~6s |
| Canales de chat | 40 | 9 | 13 |
| Proveedores LLM | 27 | 13+ | 10 |
| Capas de seguridad | 16 | Basico | 3 |
| Agentes autonomos | 7 Hands | No | No |
| Dashboard | Integrado (Tauri) | No | Comunidad |
| Soporte MCP | Si + A2A | Si | Todavia no |

OpenClaw tiene la comunidad mas grande y mas documentacion. nanobot instala mas rapido y cubre mas plataformas de chat por linea de codigo. OpenFang tiene el sistema Hands, mas capas de seguridad que cualquier otra cosa aqui, y 40 adaptadores de canal. La contrapartida es que OpenFang es mas nuevo (v0.1.0) y probablemente encontrares bordes asperos antes de v1.0. Fija a un commit especifico si lo estas usando para algo critico.

## Referencia CLI

| Comando | Que hace |
|---------|-------------|
| `openfang init` | Inicializar configuracion y workspace |
| `openfang start` | Iniciar el daemon (dashboard + canales) |
| `openfang stop` | Detener el daemon |
| `openfang status` | Mostrar estado actual |
| `openfang chat` | Modo de chat interactivo |
| `openfang chat researcher` | Chatear con un agente especifico |
| `openfang agent spawn coder` | Generar un agente preconstruido |
| `openfang hand list` | Listar Hands disponibles |
| `openfang hand activate &lt;nombre&gt;` | Activar un Hand |
| `openfang hand status &lt;nombre&gt;` | Revisar progreso de Hand |
| `openfang hand pause &lt;nombre&gt;` | Pausar un Hand |
| `openfang migrate --from openclaw` | Migrar desde OpenClaw |

## Migrar desde OpenClaw

Si ya estas ejecutando OpenClaw, OpenFang tiene una herramienta de migracion integrada:

```bash
# Ejecucion de prueba para ver que cambiaria
openfang migrate --from openclaw --dry-run

# Ejecutar la migracion
openfang migrate --from openclaw

# O especificar una ruta personalizada
openfang migrate --from openclaw --path ~/.openclaw
```

Esto importa tus agentes, historial de conversaciones, skills y configuracion. OpenFang lee SKILL.md nativamente y es compatible con skills de ClawHub.

&lt;Accordion label=&quot;Preguntas frecuentes&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

**¿Cuanto cuesta ejecutar OpenFang?**

VPS: ~$5/mes en Hetzner. GLM-5 a traves del plan de codificacion de Z.AI o MiniMax M2.5 Lightning a aproximadamente $0.30/M tokens de entrada. Espera $5-25/mes para uso personal dependiendo de que tan activos esten tus Hands y cuanto chatees.

**¿Puedo ejecutar OpenFang sin costos de API?**

Si. Configura el proveedor Ollama o vLLM y apuntalo a un servidor de modelo local. Necesitas hardware que pueda ejecutar inferencia, pero no hay facturas de API. La huella de 40MB en reposo de OpenFang deja mucho espacio para un modelo local en la misma maquina.

**¿Funciona OpenFang en una Raspberry Pi?**

El binario de ~32MB y los 40MB de RAM en reposo significan que funciona bien en una Pi 4 con 4GB RAM cuando se usan proveedores de API remotos. Ejecutar modelos locales en una Pi es una situacion diferente.

**¿Pueden multiples personas usar una instancia de OpenFang?**

Si. OpenFang tiene listas de permitidos por canal, politicas de DM/grupo y control de acceso basado en roles. Cada adaptador de canal soporta restricciones de usuario independientes.

**¿Que tan estable es OpenFang para uso en produccion?**

Es v0.1.0 — el primer lanzamiento publico. La arquitectura es solida y el conjunto de pruebas tiene 1,767+ pruebas, pero pueden ocurrir cambios importantes entre versiones menores. Fija a un commit especifico para produccion y vigila los lanzamientos de GitHub.

**¿Pueden los Hands trabajar con cualquier proveedor LLM?**

Si. Los Hands usan cualquier modelo que configures como predeterminado, o puedes configurar sobreescrituras de modelo por Hand. El Hand Researcher funciona bien con GLM-5 dado sus puntuaciones BrowseComp, mientras Clip y Lead funcionan bien con MiniMax M2.5.

&lt;/Accordion&gt;

Para otras opciones de bots autoalojados, revisa nuestro resumen de [alternativas a OpenClaw](/es/alternativas-openclaw/). Si quieres una opcion mas ligera, la [guia de configuracion de nanobot](/es/guia-configuracion-nanobot/) cubre una alternativa Python de 3,700 lineas. Para agentes aislados en contenedores, ve la [guia de despliegue de NanoClaw](/es/guia-despliegue-nanoclaw/). Para el binario mas pequeno posible, la [guia de despliegue de NullClaw](/es/guia-despliegue-nullclaw/) cubre una opcion Zig de 678KB. Y para un asistente auto-mejorante con modo de voz y migracion de OpenClaw, ve la [guia de configuracion de Hermes Agent](/es/guia-configuracion-hermes-agent/).</content:encoded><category>ai</category><category>ai-tools</category><category>self-hosted</category><category>vps</category></item><item><title>Como Migre Mi Sitio WordPress a Astro y MDX</title><link>https://www.bitdoze.com/es/migracion-wordpress-a-astro/</link><guid isPermaLink="true">https://www.bitdoze.com/es/migracion-wordpress-a-astro/</guid><description>Una guia practica sobre migrar de WordPress a Astro con MDX. Aprende como movi wpdoze.com a bitdoze.com usando wordpress-export-to-markdown, Codex CLI y optimizacion de imagenes.</description><pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate><content:encoded>import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;

Tenia un blog de WordPress en [wpdoze.com](https://www.wpdoze.com) con un monton de articulos antiguos que queria mover a [bitdoze.com](https://www.bitdoze.com), que se ejecuta en Astro con MDX. Segui posponiendolo porque supuse que seria doloroso. Resulta que no fue tan mal, y quiero compartir lo que hice para que te saltes la parte de prueba y error.

## Por que deje WordPress

Mira, WordPress funciona. Millones de sitios se ejecutan en el por buena razon. Pero mi sitio era solo articulos estaticos, y todavia estaba pagando por hosting, cuidando actualizaciones de plugins y viendo los tiempos de carga de pagina empeorar. Astro genera archivos HTML planos, asi que las paginas cargan instantaneamente sin base de datos o PHP involucrado. Alojar en Cloudflare Pages cuesta cero dolares. Y puedo escribir en archivos MDX en un repositorio Git en lugar de pelear con el editor de bloques. Eso fue suficiente para mi.

## Como fue la migracion

La version corta:

1. Exporte todo de WordPress (posts, paginas, imagenes)
2. Convierti la exportacion XML a archivos Markdown
3. Use Codex CLI de OpenAI para automatizar las partes aburridas: conversion de imagenes, formateo de frontmatter, arreglando referencias de imagen
4. Construi el proyecto Astro y arregle lo que se rompio
5. Redirigi el dominio antiguo al nuevo

Recorrere cada paso.

## Paso 1: Exportar tu contenido de WordPress

WordPress tiene una herramienta de exportacion integrada. Ve a **Tools → Export** en tu panel de admin y exporta **All content**. Obtienes un archivo XML con todos tus posts, paginas, categorias, etiquetas y referencias de imagen.

Algunas cosas que vale la pena saber:

- La exportacion tiene URLs de imagenes pero no los archivos reales. El conversor en el siguiente paso los descarga por ti.
- Tipos de posts personalizados o campos ACF podrian necesitar manejo extra. Para un blog regular, la exportacion predeterminada es suficiente.
- Respaldar tu sitio primero. Probablemente no necesitaras el respaldo, pero dormiras mejor.

&lt;Notice type=&quot;info&quot; title=&quot;Antes de Empezar&quot;&gt;
  Asegurate de que tu sitio WordPress todavia sea accesible durante la migracion. El conversor de markdown necesita descargar imagenes de tu sitio en vivo.
&lt;/Notice&gt;

## Paso 2: Convertir WordPress XML a Markdown

[wordpress-export-to-markdown](https://github.com/lonekorean/wordpress-export-to-markdown) es una herramienta Node.js que lee tu exportacion XML y escupe archivos Markdown con frontmatter. Tambien descarga todas las imagenes.

### Instalar y ejecutar

```bash
npx wordpress-export-to-markdown
```

La herramienta te guia a traves de una configuracion interactiva: donde esta el archivo XML, donde poner la salida, como manejar imagenes. Guarde imagenes, salte carpetas de ano/mes (queria una estructura plana para reorganizar despues) y exclui borradores.

Cuando termina, tienes una carpeta de archivos `.md` y un directorio con todas las imagenes.

### Como se ve la salida

Cada post se convierte en un archivo Markdown con frontmatter basico:

```markdown
---
title: &quot;Tu Titulo del Post&quot;
date: &quot;2023-05-15&quot;
---

Tu contenido del post aqui con imagenes referenciadas como:
![alt text](images/tu-imagen.png)
```

El frontmatter es basico. Todavia necesitas agregar campos que tu coleccion de contenido de Astro espera (description, categories, tags, canonical URL, etc.). Ahi es donde entro Codex CLI.

## Paso 3: Dejar que la IA maneje el trabajo pesado

Este paso me ahorro horas. Use [Codex CLI de OpenAI](https://github.com/openai/codex) para manejar los cambios repetitivos archivo por archivo que no iba a hacer a mano para mas de 50 articulos.

### Convertir imagenes a WebP

La exportacion de WordPress tenia una mezcla de archivos PNG y JPEG, muchos de ellos sobredimensionados. Tuve a Codex CLI convertir por lotes todo a WebP:

```bash
# Codex CLI manejo la conversion por lotes
# Convirtiendo todas las imagenes PNG/JPEG a formato WebP
for img in images/*.{png,jpg,jpeg}; do
  cwebp -q 80 &quot;$img&quot; -o &quot;${img%.*}.webp&quot;
done
```

Los archivos WebP corren aproximadamente 25-35% mas pequenos que JPEGs equivalentes a calidad similar. A traves de todo un blog, eso es mucho ancho de banda ahorrado.

### Actualizar referencias de imagen

Despues de convertir imagenes, todos los archivos Markdown todavia apuntaban a nombres de archivo `.png` y `.jpg`. Codex CLI paso por cada archivo y cambio las extensiones:

```markdown
&lt;!-- Antes --&gt;
![screenshot](images/dashboard-screenshot.png)

&lt;!-- Despues --&gt;
![screenshot](images/dashboard-screenshot.webp)
```

### Formatear frontmatter para Astro

Mi sitio Astro usa un esquema de frontmatter validado por Zod. Los archivos exportados tenian casi nada en el frontmatter, asi que Codex CLI reformateo cada uno para coincidir:

```yaml
---
date: 2023-05-15T00:00:00Z
title: &quot;Tu Titulo del Post&quot;
description: &quot;Una breve descripcion extraida del primer parrafo&quot;
image: &quot;../../assets/images/tu-post/featured.webp&quot;
categories: [&quot;cms&quot;]
authors: [&quot;Dragos&quot;]
tags: [&quot;wordpress&quot;, &quot;tutoriales&quot;]
canonical: &quot;https://www.bitdoze.com/tu-post-slug/&quot;
---
```

### Mover imagenes al lugar correcto

Astro optimiza imagenes mejor cuando viven en `src/assets/` en lugar de `public/`. Codex CLI movio las imagenes de cada post a la estructura de directorio correcta:

```
src/assets/images/
  └── post-slug/
      ├── featured.webp
      └── screenshot-1.webp
```

&lt;Notice type=&quot;success&quot; title=&quot;Codex CLI fue el verdadero ahorra-tiempo&quot;&gt;
  Sin el, habria pasado un dia completo solo en conversion de imagenes, actualizaciones de referencias y formateo de frontmatter. Codex manejo todo en minutos. Solo revise la salida y arregle el error ocasional.
&lt;/Notice&gt;

## Paso 4: Configurar tu coleccion de contenido de Astro

Si no tienes un sitio Astro aun, ve configura uno primero. Mi [guia de blog Astro gratuito](https://www.bitdoze.com/build-astro-blog-free/) cubre eso.

Tu configuracion de coleccion de contenido (`src/content/config.ts`) define que campos necesitan tus posts:

```typescript
import { defineCollection, z } from &quot;astro:content&quot;;

const posts = defineCollection({
  schema: ({ image }) =&gt;
    z.object({
      date: z.date(),
      title: z.string(),
      description: z.string().optional(),
      image: image().optional(),
      categories: z.array(z.string()).optional(),
      authors: z.array(z.string()).optional(),
      tags: z.array(z.string()).optional(),
      canonical: z.string().optional(),
    }),
});

export const collections = { posts };
```

Pon tus archivos MDX convertidos en `src/content/posts/` e imagenes en `src/assets/images/`.

## Paso 5: Construir y arreglar lo que se rompe

Ejecuta tu construccion de Astro para ver que esta roto:

```bash
bun run build
```

Cosas que me tropezaron:

- Rutas de imagen rotas donde la referencia en el archivo MDX no coincidia con la ubicacion real del archivo
- Frontmatter invalido que la validacion Zod de Astro rechazo (te dice exactamente que campo en que archivo, lo cual es bonito)
- HTML de WordPress que a MDX no le gusto, mayormente etiquetas sin cerrar y caracteres especiales sin escapar
- Imports de componentes faltantes en la parte superior de archivos MDX

Ejecute la construccion despues de cada lote de cambios, asi que cuando algo se rompia sabia lo que acababa de tocar. Codex CLI tambien ayudo aqui leyendo la salida de error de construccion y arreglando los problemas automaticamente.

## Paso 6: Desplegar y redirigir

Una vez que la construccion pasa, despliega. Yo uso Cloudflare Pages y escribi una [guia sobre desplegar Astro a Cloudflare](https://www.bitdoze.com/deploy-astrojs-cloudflare/) si esa es tu configuracion tambien. Tambien puedes [desplegar Astro en un VPS](https://www.bitdoze.com/deploy-astro-on-vps/) si prefieres gestionar tu propio servidor.

### Configurar redirecciones de dominio

La ultima pieza: redirigir tu dominio antiguo. Apunte `wpdoze.com` a `bitdoze.com`. Como haces esto depende de tu configuracion DNS:

- En Cloudflare, usa Page Rules o Bulk Redirects para hacer 301 del dominio antiguo al nuevo.
- Con otros proveedores, configura un 301 a nivel de servidor o usa el reenvio de URL de tu registrador.

```
# Ejemplo de Cloudflare Page Rule
wpdoze.com/* → https://www.bitdoze.com/$1 (redireccion 301)
```

&lt;Notice type=&quot;warning&quot; title=&quot;No Saltes las Redirecciones&quot;&gt;
  Las redirecciones 301 dicen a los motores de busqueda que tu contenido se ha movido permanentemente. Sin ellas, pierdes cualquier valor SEO que tu dominio antiguo habia acumulado, y los visitantes que llegan a marcadores antiguos o resultados de busqueda obtienen una pagina muerta.
&lt;/Notice&gt;

## Cosas que desearia haber sabido antes

Algunas cosas que aprendi en el camino:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Ejecuta la construccion despues de cada cambio importante, no solo al final. Es mucho mas facil encontrar el problema cuando sabes lo que acabas de cambiar.&lt;/li&gt;
&lt;li&gt;Usa WebP para todas las imagenes. Los ahorros de tamano son reales y Astro las maneja bien.&lt;/li&gt;
&lt;li&gt;No intentes editar manualmente cientos de archivos. Usa herramientas de IA como Codex CLI o scripts para manejar cambios masivos.&lt;/li&gt;
&lt;li&gt;Mantén tu sitio WordPress antiguo ejecutandose hasta que hayas verificado que todo funciona en el nuevo sitio. No te apresures a desactivarlo.&lt;/li&gt;
&lt;li&gt;Revisa tus analiticas despues de la migracion. Asegurate de que tus paginas se estan indexando y el trafico esta fluyendo a traves de las redirecciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

## Despues de la migracion

Una vez que tu contenido este arriba, algunas cosas valen la pena hacer:

- Escribi una guia sobre [optimizacion de construccion SSG de Astro](https://www.bitdoze.com/astro-ssg-build-optimization/) porque sitios grandes pueden volverse lentos de construir. Vale la pena leerlo si tienes mas de un punado de posts.
- Si estas en Node.js, [cambiar a Bun](https://www.bitdoze.com/migrate-astro-bun/) redujo mis tiempos de construccion notablemente.
- Probablemente queras un [formulario de contacto](https://www.bitdoze.com/add-contact-form-astro/) en algun momento.
- Para analiticas, uso Plausible enmascarado a traves de Cloudflare Workers. Escribi [como configurar eso](https://www.bitdoze.com/astro-plausible-cloudflare-workers/).

## Preguntas frecuentes

&lt;Accordion label=&quot;¿Cuanto tiempo toma toda la migracion?&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;
  Depende de cuantos posts tengas. Mi sitio tenia alrededor de 50 articulos y todo tomo aproximadamente un dia. La mayor parte de ese tiempo fue revisar lo que Codex CLI produjo y arreglar casos borde. La exportacion y conversion real fue tal vez una hora.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Necesito saber TypeScript para usar Astro?&quot; group=&quot;faq&quot;&gt;
  No. JavaScript plano funciona bien en componentes Astro. TypeScript es opcional, aunque lo recomiendo para esquemas de coleccion de contenido porque atrapa errores de frontmatter en tiempo de construccion. Las definiciones de esquema Zod son legibles incluso si TypeScript es nuevo para ti.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Que pasa con los comentarios de WordPress?&quot; group=&quot;faq&quot;&gt;
  Astro es un generador de sitios estaticos, asi que no hay sistema de comentarios integrado. Puedes agregar Giscus (usa GitHub Discussions), Disqus o Hyvor Talk. Personalmente, elimine los comentarios por completo. La mayoria de los mios eran spam.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Perdere mis rankings SEO?&quot; group=&quot;faq&quot;&gt;
  Con redirecciones 301 apropiadas, los rankings deberian transferirse. Vi una pequena caida durante unas dos semanas mientras Google reprocesaba cosas, luego se recupero. Las cargas de pagina mas rapidas de Astro realmente ayudaron mis rankings despues.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Puedo usar este proceso para un sitio WooCommerce?&quot; group=&quot;faq&quot;&gt;
  Para las partes de contenido (posts de blog, paginas), si. Pero si tienes una tienda WooCommerce con productos, carrito y checkout, Astro solo no reemplazara eso. Necesitarias una capa de comercio headless como Snipcart o la Storefront API de Shopify junto con Astro.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;¿Que si mis posts usan shortcodes de WordPress?&quot; group=&quot;faq&quot;&gt;
  Los shortcodes no se convierten. El exportador de markdown los vuelca como texto plano. Necesitaras reemplazarlos con componentes MDX o simplemente eliminarlos. Use Codex CLI para encontrar todos los shortcodes a traves de mis archivos y convertir los comunes en equivalentes MDX.
&lt;/Accordion&gt;

## Concluyendo

Mover de WordPress a Astro tomo un dia de trabajo enfocado, y me alegro de haberlo hecho. Mi sitio carga mas rapido, los costos de hosting pasaron de $X/mes a cero, y escribir en archivos MDX supera al editor de WordPress para mi flujo de trabajo.

Las herramientas que lo hicieron practico: [wordpress-export-to-markdown](https://github.com/lonekorean/wordpress-export-to-markdown) para la conversion inicial, y Codex CLI para todo el reformateo archivo por archivo que no iba a hacer a mano. Las colecciones de contenido de Astro loataron todo junto con validacion con seguridad de tipos que atrapo errores en tiempo de construccion.

Si has estado posponiendo esto como yo lo hacia, solo empieza con un punado de posts y ve como va. El proceso es mas mecanico que creativo, y las herramientas manejan la mayor parte.</content:encoded><category>wordpress</category><category>astro</category></item><item><title>Guía de Resaltado de Sintaxis en Fish Shell</title><link>https://www.bitdoze.com/es/fish-shell-resaltado-sintaxis/</link><guid isPermaLink="true">https://www.bitdoze.com/es/fish-shell-resaltado-sintaxis/</guid><description>Cómo funciona el resaltado de sintaxis integrado en Fish Shell, cómo personalizar los colores para comandos, errores, rutas y cadenas, además de gestión de temas.</description><pubDate>Tue, 24 Feb 2026 01:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;

Una de las razones por las que me pasé de [Zsh a Fish](/es/fish-shell-vs-zsh-comparacion/) fue el resaltado de sintaxis. En Zsh, necesitas el [plugin zsh-syntax-highlighting](/enable-syntax-highlighting-zsh/) y algo de configuración para que los comandos se coloreen mientras escribes. En Fish, viene integrado y funciona desde la primera vez que abres el shell.

Fish resalta tu línea de comandos en tiempo real. Los comandos válidos aparecen en un color, los inválidos en rojo, las cadenas tienen su propio color, las rutas de archivos que existen aparecen subrayadas. Detectas errores tipográficos antes de pulsar Enter. Sin plugins, sin configuración.

Esta guía cubre cómo funciona y cómo personalizar los colores.

## Qué resalta Fish

Fish colorea diferentes partes de la línea de comandos según su significado:

| Elemento | Aspecto (por defecto) | Variable |
|---|---|---|
| Comandos válidos | Azul | `fish_color_command` |
| Comandos inválidos | Rojo | `fish_color_error` |
| Parámetros/argumentos | Cian | `fish_color_param` |
| Opciones (flags que empiezan con -) | Cian | `fish_color_option` |
| Cadenas entre comillas | Amarillo | `fish_color_quote` |
| Redirecciones (&gt;, &gt;&gt;, \|) | Cian | `fish_color_redirection` |
| Rutas de archivo válidas | Subrayado | `fish_color_valid_path` |
| Comentarios (# ...) | Gris | `fish_color_comment` |
| Secuencias de escape (\n, \t) | Cian | `fish_color_escape` |
| Autosugerencias | Gris | `fish_color_autosuggestion` |
| Selección (modo visual de vi) | Blanco sobre azul | `fish_color_selection` |
| Coincidencias de búsqueda | Fondo amarillo | `fish_color_search_match` |

La parte más útil: la validación de comandos ocurre mientras escribes. Escribe `gti` en lugar de `git` y se pone rojo al instante. No necesitas ejecutar el comando para saber que algo está mal.

## Personalizar colores

### Usando la interfaz web

La forma más rápida:

```fish
fish_config
```

Esto abre una herramienta en el navegador donde puedes hacer clic en los colores y ver una vista previa en vivo. En la pestaña &quot;Colors&quot;, puedes modificar cada elemento de sintaxis individualmente. Cuando estés satisfecho, haz clic en &quot;Set Theme&quot; y los cambios se aplican de inmediato.

### Usando variables de set_color

Para configuración desde la línea de comandos:

```fish
# Hacer los comandos verdes en lugar de azules
set -U fish_color_command green

# Hacer los errores en rojo negrita
set -U fish_color_error red --bold

# Hacer las cadenas naranjas
set -U fish_color_quote bryellow

# Hacer las autosugerencias más tenues
set -U fish_color_autosuggestion 555 --dim

# Subrayar rutas válidas con un color específico
set -U fish_color_valid_path --underline cyan
```

Usar `set -U` (universal) guarda la configuración permanentemente en todas las sesiones de Fish. Usar `set -g` (global) solo dura la sesión actual.

### Colores disponibles

Fish soporta colores con nombre y códigos hexadecimales:

**Colores con nombre:** `black`, `red`, `green`, `yellow`, `blue`, `magenta`, `cyan`, `white`, y sus versiones brillantes (`brred`, `brgreen`, etc.)

**Colores hexadecimales:** Códigos hex de tres o seis dígitos como `f60` o `ff6600`

**Modificadores:** `--bold`, `--dim`, `--italics`, `--underline`, `--reverse`, `--strikethrough`

**Fondo:** `--background=color` establece el color de fondo

Ejemplos:

```fish
set -U fish_color_command 5fd700           # verde brillante (hex)
set -U fish_color_error ff0000 --bold      # rojo negrita
set -U fish_color_quote ff8700 --italics   # naranja cursiva
set -U fish_color_comment 6c7086 --dim     # gris tenue
```

## Temas integrados

Fish viene con varios temas de colores. Para listarlos:

```fish
fish_config theme show
```

Para aplicar uno:

```fish
fish_config theme choose dracula
```

Temas integrados populares:
- **default** — los colores estándar de Fish
- **dracula** — tema oscuro con tonos morados/rosas
- **catppuccin-mocha** — tema oscuro pastel
- **catppuccin-latte** — tema claro pastel
- **nord** — tonos azules fríos
- **solarized-dark** y **solarized-light**
- **tomorrow** y **tomorrow-night**
- **base16-**** — varias variantes Base16

Desde Fish 4.4, los temas Catppuccin también están incluidos.

Para guardar el tema permanentemente:

```fish
fish_config theme choose dracula
fish_config theme save
```

### Aplicar temas en todas las sesiones

Si tienes varias sesiones de Fish abiertas y quieres que todas se actualicen:

```fish
# Añade esto a config.fish primero:
function apply-my-theme --on-variable=my_theme
    fish_config theme choose $my_theme
end

# Luego establece la variable universal desde cualquier sesión:
set -U my_theme dracula
```

Todas las sesiones en ejecución recogen el cambio automáticamente.

## Tema personalizado desde cero

Si quieres control total, establece cada variable explícitamente. Aquí tienes un ejemplo de tema oscuro minimalista:

```fish
# ~/.config/fish/conf.d/my-theme.fish
set -U fish_color_normal normal
set -U fish_color_command 5fd700          # green
set -U fish_color_keyword 5fd700
set -U fish_color_quote ff8700            # orange
set -U fish_color_redirection 87d7ff      # light blue
set -U fish_color_end 87d7ff
set -U fish_color_error ff5f5f --bold     # bold red
set -U fish_color_param 87d7ff
set -U fish_color_option 87d7ff
set -U fish_color_comment 6c7086          # grey
set -U fish_color_selection --background=3a3a5c
set -U fish_color_operator ff87d7         # pink
set -U fish_color_escape ff87d7
set -U fish_color_autosuggestion 555555
set -U fish_color_valid_path --underline
set -U fish_color_cwd 5fd7ff
set -U fish_color_cwd_root red
set -U fish_color_user 87d7ff
set -U fish_color_host normal
set -U fish_color_host_remote ff8700
set -U fish_color_status red
set -U fish_color_cancel -r
set -U fish_color_search_match --background=555555
```

## Colores del pager (menú de completado)

El pager de completado con Tab tiene su propio conjunto de colores:

```fish
set -U fish_pager_color_completion normal           # texto de completado
set -U fish_pager_color_description grey             # texto de descripción
set -U fish_pager_color_prefix cyan --underline      # prefijo coincidente
set -U fish_pager_color_progress white --background=cyan  # barra de progreso
set -U fish_pager_color_selected_background --background=3a3a5c
```

Estos son independientes de los colores de sintaxis de la línea de comandos. Los colores del pager controlan lo que ves cuando pulsas Tab y navegas por las opciones de completado.

## Diferencias del resaltado de sintaxis con Zsh y Bash

**Bash** no tiene resaltado de sintaxis en absoluto. Lo que escribes es texto plano hasta que lo ejecutas.

**Zsh** necesita el plugin [zsh-syntax-highlighting](/enable-syntax-highlighting-zsh/). Funciona bien una vez instalado, pero es una dependencia externa que tienes que gestionar. zsh-syntax-highlighting soporta patrones de resaltado personalizados, que Fish no necesita porque su sistema integrado cubre más terreno.

**Fish** lo hace de forma nativa. El resaltado forma parte del propio shell, se ejecuta en cada pulsación de tecla y valida comandos contra tu PATH en tiempo real. No hay nada que instalar y nada que pueda quedar desactualizado.

Este es uno de los argumentos centrales a favor de [Fish sobre Zsh](/es/fish-shell-vs-zsh-comparacion/) — funciones como esta funcionan directamente sin configuración.

## Solución de problemas

**Los colores se ven mal** — puede que tu terminal no soporte 256 colores o true color. Compruébalo con:

```fish
set_color ff8700; echo &quot;This should be orange&quot;; set_color normal
```

Si no se ve naranja, tu terminal necesita una configuración de modo de color diferente. La mayoría de terminales modernos (Ghostty, iTerm2, WezTerm, Alacritty) soportan true color por defecto.

**Los colores se reinician después de reiniciar** — probablemente estás usando `set -g` en lugar de `set -U`. Las variables globales no persisten. Usa universal (`-U`) para configuraciones de color permanentes.

**El tema no se aplica a todas las sesiones** — `fish_config theme save` solo guarda para sesiones nuevas. Usa el patrón `--on-variable` descrito arriba para actualizar sesiones en ejecución.

## Guías relacionadas

- [Temas y prompts de Fish Shell](/es/fish-shell-temas-prompts/) — temas de prompt Tide, Starship, Pure
- [Guía de autocompletado en Fish Shell](/es/fish-shell-autocompletado-sugerencias/) — los colores del pager afectan al completado
- [Fish Shell vs Zsh](/es/fish-shell-vs-zsh-comparacion/) — resaltado integrado vs plugin zsh-syntax-highlighting
- [Activar resaltado de sintaxis en Zsh](/enable-syntax-highlighting-zsh/) — si también usas Zsh
- [Instalar Fish Shell en Ubuntu](/es/instalar-fish-shell-ubuntu/) — primeros pasos
- [Fish Shell en macOS](/es/fish-shell-macos-configuracion/) — guía de configuración en Mac</content:encoded><category>linux</category><category>fish-shell</category></item><item><title>Temas de Fish Shell - Mejores Prompts (Tide, Starship, Pure)</title><link>https://www.bitdoze.com/es/fish-shell-temas-prompts/</link><guid isPermaLink="true">https://www.bitdoze.com/es/fish-shell-temas-prompts/</guid><description>Comparación de temas de prompt para Fish Shell incluyendo Tide, Starship, Pure y Hydro. Cómo instalar cada uno y elegir el prompt adecuado para tu flujo de trabajo.</description><pubDate>Tue, 24 Feb 2026 01:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;

Fish viene con un prompt por defecto funcional, pero la mayoría de la gente lo reemplaza por algo con más información — rama de git, duración de comandos, versiones de lenguaje, ese tipo de cosas. Probé casi todas las opciones populares y ya tengo mi favorito, pero la elección correcta depende de lo que valores.

Esta guía cubre las cuatro principales opciones de prompt para Fish, incluyendo los temas integrados, y cómo instalar cada uno.

## Temas integrados de Fish

Antes de instalar nada, Fish tiene su propio sistema de temas. Ejecuta:

```fish
fish_config theme show
```

Esto muestra los temas de color disponibles directamente en tu terminal. Para aplicar uno:

```fish
fish_config theme choose dracula
fish_config theme save
```

Para prompts específicamente:

```fish
fish_config prompt show
fish_config prompt choose informative
fish_config prompt save
```

Fish incluye alrededor de una docena de estilos de prompt: `default`, `informative`, `classic`, `disco`, `simple` y otros. Son ligeros en funcionalidades (sin renderizado asíncrono, sin detección de lenguaje), pero cargan al instante y no necesitan dependencias externas.

También puedes ejecutar `fish_config` sin argumentos para abrir una herramienta de configuración en el navegador donde puedes previsualizar todo de forma visual.

## Tide

[Tide](https://github.com/IlanCosman/tide) es el prompt nativo de Fish con más funcionalidades. Es para Fish lo que Powerlevel10k es para Zsh — renderizado asíncrono, un asistente de configuración y una integración profunda con git.

### Instalar Tide

Necesitas [Fisher](/es/mejores-plugins-fish-shell/) primero:

```fish
fisher install IlanCosman/tide@v6
```

Luego ejecuta el asistente de configuración:

```fish
tide configure
```

El asistente te guía a través de:
- Estilo Powerline vs. texto plano
- Prompt de una o dos líneas
- Estilo de iconos (requiere Nerd Font para iconos)
- Colores y espaciado

Toma unos 30 segundos y te da un prompt con buen aspecto sin edición manual.

### Qué muestra Tide

Por defecto, Tide muestra:
- Directorio actual (truncado inteligente al prefijo único más corto)
- Rama y estado de git (sin seguimiento, modificados, en staging, adelante/atrás)
- Duración de comandos (para comandos lentos)
- Versiones de lenguaje (Node, Python, Rust, Go, etc.) cuando estás en un proyecto relevante
- Hora, jobs y código de salida en el prompt derecho

### Por qué Tide destaca

**Renderizado asíncrono.** Tide ejecuta git status y otras operaciones lentas en segundo plano. Tu prompt aparece al instante, y la información de git se completa un momento después. En repositorios grandes, esto marca una diferencia real.

**Truncado inteligente de directorios.** En lugar de mostrar `~/D/w/p/myapp`, Tide trunca al prefijo único más corto: `~/Doc/w/p/myapp` (porque `D` podría ser Downloads o Documents). El completado con Tab de la ruta truncada restaura el nombre completo.

**Nerd Font recomendada.** Instala MesloLGS NF para el mejor soporte de iconos. Sin una Nerd Font, Tide recurre al modo de solo texto, que también se ve bien.

### Personalizar Tide

Después del asistente, ajusta configuraciones individuales:

```fish
# Change which items appear on the left and right
set --universal tide_left_prompt_items pwd git newline character
set --universal tide_right_prompt_items status cmd_duration context jobs node

# Change git status symbols
set --universal tide_git_icon &quot;&quot;
```

Ejecuta `set --universal | grep tide` para ver todas las variables de Tide.

## Starship

[Starship](https://starship.rs) es un prompt cross-shell escrito en Rust. Funciona con Fish, Zsh, Bash, PowerShell y más. Si usas múltiples shells o quieres compartir la configuración del prompt con compañeros de equipo en distintos shells, Starship es la opción práctica.

### Instalar Starship

```bash
curl -sS https://starship.rs/install.sh | sh
```

Añade a tu configuración de Fish:

```fish
# ~/.config/fish/config.fish
starship init fish | source
```

Tengo una guía dedicada sobre [configurar Starship con Fish Shell](/es/fish-shell-configurar-starship/) con ejemplos de configuración y selección de presets. Si ya lo configuraste con Zsh (quizás siguiendo mi [guía de Starship y Ghostty](/starship-ghostty-terminal/)), el archivo de configuración TOML se transfiere directamente.

### Cómo se compara Starship con Tide

Starship no tiene renderizado asíncrono, pero es lo suficientemente rápido como para que rara vez importe en repositorios de tamaño normal. La configuración es un único archivo TOML (`~/.config/starship.toml`) en lugar de variables universales, lo que algunas personas encuentran más fácil de versionar.

Starship también tiene presets: Tokyo Night, Catppuccin, Nerd Font Symbols y otros. Aplica uno con:

```bash
starship preset tokyo-night -o ~/.config/starship.toml
```

## Pure

[Pure](https://github.com/pure-fish/pure) es un port del popular prompt Pure de Zsh. Es minimalista — solo tu directorio, rama de git y un carácter `❯` que se vuelve rojo después de un comando fallido.

### Instalar Pure

```fish
fisher install pure-fish/pure
```

Sin asistente de configuración. Funciona inmediatamente con valores por defecto razonables.

### Qué muestra Pure

- Directorio actual
- Rama de git y estado dirty/clean
- Duración de comandos (para comandos largos)
- Nombre de usuario y hostname por SSH
- Nombre de virtualenv de Python cuando está activo
- El carácter de prompt `❯`

### Cuándo elegir Pure

Si te gusta un prompt limpio y silencioso que no estorbe. Pure no muestra versiones de lenguaje ni información en el lado derecho a menos que lo habilites. Es para quienes quieren menos en pantalla, no más.

### Personalizar Pure

Pure usa variables de Fish para la configuración:

```fish
set --universal pure_show_system_time true
set --universal pure_enable_single_line_prompt true
set --universal pure_show_jobs true
```

## Hydro

[Hydro](https://github.com/jorgebucaran/hydro) es todavía más minimalista que Pure. Está hecho por el autor de Fisher y muestra rama de git, duración de comandos y código de salida. Poco más.

### Instalar Hydro

```fish
fisher install jorgebucaran/hydro
```

El atractivo de Hydro es cero configuración y prácticamente cero overhead. Si solo quieres una rama de git en tu prompt sin complicarte, Hydro hace exactamente eso.

## Tabla comparativa

| | Tide | Starship | Pure | Hydro | Integrado |
|---|---|---|---|---|---|
| Renderizado asíncrono | Sí | No | Parcial | No | No |
| Asistente de configuración | Sí | No | No | No | Interfaz web |
| Cross-shell | No (solo Fish) | Sí | No (solo Fish) | No (solo Fish) | No |
| Formato de configuración | Variables universales | Archivo TOML | Variables universales | Mínimo | Interfaz web / vars |
| Requiere Nerd Font | Recomendado | Recomendado | No | No | No |
| Versiones de lenguaje | Sí | Sí | No | No | No |
| Integración con git | Profunda | Buena | Básica | Básica | Ninguna |
| Tiempo de configuración | 1 minuto | 2-3 minutos | 30 segundos | 10 segundos | 30 segundos |

## Mi recomendación

**Tide** si Fish es tu único shell y quieres el prompt más vistoso e informativo sin lag. El asistente hace que la configuración sea fácil.

**Starship** si usas múltiples shells o quieres un archivo de configuración TOML que puedas versionar. Lo cubrí en profundidad en mi [guía de Starship + Fish](/es/fish-shell-configurar-starship/).

**Pure** si prefieres el minimalismo y un diseño probado (lleva años siendo popular en el mundo Zsh).

**Hydro** si quieres el prompt mínimo viable absoluto.

**Integrado** si no quieres instalar nada extra y los prompts por defecto te son suficientes.

Personalmente uso Starship porque alterno entre Fish y Zsh en distintas máquinas. Si solo usara Fish, probablemente elegiría Tide.

## Guías relacionadas

- [Configurar Starship con Fish Shell](/es/fish-shell-configurar-starship/) — configuración completa de Starship
- [Mejores plugins de Fish Shell](/es/mejores-plugins-fish-shell/) — Tide, Fisher y otras herramientas
- [Temas y plugins de Oh My Fish](/es/oh-my-fish-instalar-temas-plugins/) — temas específicos de OMF
- [Resaltado de sintaxis en Fish Shell](/es/fish-shell-resaltado-sintaxis/) — personaliza colores más allá del prompt
- [Instalar Fish Shell en Ubuntu](/es/instalar-fish-shell-ubuntu/) — primeros pasos
- [Fish Shell en macOS](/es/fish-shell-macos-configuracion/) — configuración para Mac</content:encoded><category>linux</category><category>fish-shell</category></item><item><title>Fish Shell vs Bash vs Zsh - Comparación Completa 2026</title><link>https://www.bitdoze.com/es/fish-shell-vs-bash-vs-zsh-comparacion/</link><guid isPermaLink="true">https://www.bitdoze.com/es/fish-shell-vs-bash-vs-zsh-comparacion/</guid><description>Una comparación honesta de Fish, Bash y Zsh que cubre sintaxis, rendimiento, plugins, scripting y usabilidad diaria para que puedas elegir el shell adecuado.</description><pubDate>Tue, 24 Feb 2026 01:00:00 GMT</pubDate><content:encoded>import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;

He usado los tres shells para trabajo real. Bash fue mi opción predeterminada durante años porque simplemente estaba ahí. Me pasé a Zsh cuando Oh My Zsh se hizo popular, y lo usé durante bastante tiempo. Después probé Fish por curiosidad, y se convirtió en mi shell de uso diario. Cada shell tiene su personalidad, y el &quot;correcto&quot; depende de lo que te importa.

Esta no es una comparación teórica. Voy a repasar lo que realmente importa cuando te sientas y escribes comandos todos los días.

## Resumen rápido

| Característica | Fish | Bash | Zsh |
|---|---|---|---|
| Autosugerencias | Integradas | No (necesita plugin) | Plugin (zsh-autosuggestions) |
| Resaltado de sintaxis | Integrado | No | Plugin (zsh-syntax-highlighting) |
| Completado con Tab | Completo, listo para usar | Básico | Bueno con plugins |
| Compatible con POSIX | No | Sí | Mayormente sí |
| Sintaxis de scripting | Propia | POSIX sh | Mayormente POSIX + extensiones |
| Archivo de configuración | `~/.config/fish/config.fish` | `~/.bashrc` | `~/.zshrc` |
| Predeterminado en Linux | No | Generalmente sí | No (predeterminado en macOS) |
| Escrito en | Rust (desde 4.0) | C | C |
| Configuración web | Sí (`fish_config`) | No | No |
| Gestores de plugins | Fisher, Oh My Fish | Ninguno integrado | Oh My Zsh, Antigen, etc. |

## Autosugerencias y completados

Aquí es donde Fish toma ventaja de inmediato. Abre una instalación nueva de Fish, empieza a escribir, y obtienes sugerencias en gris de tu historial de comandos. Presiona la flecha derecha para aceptar. Sin configuración, sin plugins, nada que instalar. Escribí una guía completa sobre [autocompletado y sugerencias de Fish Shell](/es/fish-shell-autocompletado-sugerencias/) que cubre todo lo que este sistema puede hacer.

Bash no tiene nada parecido de serie. Puedes instalar `ble.sh` o usar `fzf` para búsqueda difusa en el historial, pero requiere esfuerzo.

Zsh lo consigue con `zsh-autosuggestions`, pero tienes que instalarlo tú mismo. Escribí una guía sobre [cómo habilitar autocompletado de comandos en Zsh](/enable-command-autocomplete-in-zsh/) si prefieres esa ruta.

Fish también analiza las páginas man para generar completados automáticamente. Escribe `git` y presiona tab, y obtienes completados para subcomandos, flags y nombres de ramas sin ninguna configuración adicional. Zsh puede igualar esto con la configuración adecuada (compinit más plugins), pero requiere trabajo. El completado con tab de Bash es muy básico en comparación.

## Resaltado de sintaxis

Fish resalta tus comandos mientras los escribes. Los comandos válidos tienen un color, los inválidos aparecen en rojo, y las cadenas de texto tienen su propio color. Puedes detectar errores tipográficos antes de presionar enter. Tengo una guía detallada sobre el [resaltado de sintaxis de Fish Shell](/es/fish-shell-resaltado-sintaxis/) si quieres ver cómo funciona internamente.

Zsh necesita `zsh-syntax-highlighting` para el mismo comportamiento. Escribí sobre [habilitar resaltado de sintaxis en Zsh](/enable-syntax-highlighting-zsh/) si lo quieres.

Bash no tiene resaltado de sintaxis integrado en absoluto.

## Scripting y compatibilidad con POSIX

Aquí está el compromiso. Fish tiene su propia sintaxis de scripting que intencionalmente no es compatible con POSIX. Los desarrolladores de Fish tomaron esta decisión para obtener un lenguaje más limpio, y honestamente la sintaxis es más fácil de leer:

```fish
# Fish - sintaxis más limpia
if test -f ~/.config/fish/local.fish
    source ~/.config/fish/local.fish
end

for file in *.txt
    echo $file
end

# Variables
set greeting &quot;hello&quot;
echo $greeting
```

Compara eso con Bash:

```bash
# Bash - estilo POSIX
if [ -f ~/.bashrc_local ]; then
    source ~/.bashrc_local
fi

for file in *.txt; do
    echo &quot;$file&quot;
done

# Variables
greeting=&quot;hello&quot;
echo &quot;$greeting&quot;
```

La versión de Fish es más legible. Pero aquí viene el inconveniente: no puedes copiar y pegar comandos de Bash de Stack Overflow y esperar que funcionen en Fish. Cualquier cosa que use `&amp;&amp;` entre comandos, `$(...)` para sustitución de comandos (Fish usa `(...)` sin el signo de dólar), o pruebas `[[ ]]` específicas de Bash no funcionará directamente.

En la práctica, esto importa menos de lo que pensarías. La mayor parte del tiempo estás ejecutando comandos, no escribiendo scripts de shell. Y cuando necesitas un script, siempre puedes poner `#!/bin/bash` al principio y ejecutarlo como un script de Bash desde Fish. Para comandos personalizados específicos de Fish, revisa mi guía sobre [funciones de Fish Shell](/es/fish-shell-funciones-comandos-personalizados/).

&lt;Notice type=&quot;info&quot; title=&quot;Consejo de compatibilidad POSIX&quot;&gt;
Puedes ejecutar cualquier script de Bash desde Fish. Solo usa `bash script.sh` o haz el script ejecutable con un shebang `#!/bin/bash`. La sintaxis no-POSIX de Fish solo afecta lo que escribes interactivamente y los scripts específicos de Fish.
&lt;/Notice&gt;

## Configuración

Fish almacena su configuración en `~/.config/fish/config.fish` y soporta un directorio `conf.d/` para archivos de configuración modulares. También tiene una herramienta de configuración web: ejecuta `fish_config` y se abre un navegador donde puedes cambiar colores, ver funciones y establecer variables. Suena superfluo, pero es genuinamente útil para previsualizar temas de colores rápidamente.

Bash usa `~/.bashrc` (y a veces `~/.bash_profile`). Todo es edición manual.

Zsh usa `~/.zshrc`. Con Oh My Zsh instalado, obtienes un framework que gestiona plugins y temas, pero el archivo de configuración puede volverse largo. Cubrí algunos de los [mejores plugins de Oh My Zsh](/best-oh-my-zsh-plugins/) si estás en el equipo Zsh.

## Rendimiento

Fish 4.0 fue reescrito de C++ a Rust, lanzado en febrero de 2025. La última versión es 4.5.0 (febrero de 2026). El inicio se siente instantáneo en mis máquinas. Es ligeramente más pesado que un shell Bash básico, pero la diferencia se mide en milisegundos y no lo vas a notar.

Zsh con Oh My Zsh cargado y varios plugins puede ser notablemente lento al iniciar, a veces tardando más de un segundo. Hay soluciones (carga diferida, gestores de plugins más ligeros como zinit), pero es algo que tienes que gestionar activamente.

Bash puro arranca más rápido porque es el más minimalista. Pero también obtienes menos funcionalidades de serie.

Para uso interactivo, Fish se siente el más ágil porque las autosugerencias y los completados funcionan al instante. El &quot;rendimiento&quot; que más importa para un shell es lo rápido que responde mientras escribes, y Fish gana aquí.

## Ecosistemas de plugins

Fish tiene dos gestores de plugins principales:

- **[Fisher](https://github.com/jorgebucaran/fisher)** - ligero, rápido, sin configuración. Es lo que la mayoría usa ahora. Ejecuta `fisher install author/plugin` y listo.
- **[Oh My Fish](https://github.com/oh-my-fish/oh-my-fish)** - un framework similar a Oh My Zsh. Lleva un tiempo sin mantenimiento y la página de GitHub incluye una advertencia al respecto. Yo recomendaría Fisher para instalaciones nuevas, pero si tienes curiosidad, tengo una guía sobre [instalación y uso de Oh My Fish](/es/oh-my-fish-instalar-temas-plugins/).

Profundizo mucho más en esto en [Mejores plugins y herramientas para Fish Shell](/es/mejores-plugins-fish-shell/).

Zsh tiene el ecosistema de plugins más grande gracias a Oh My Zsh, que tiene más de 300 plugins y más de 150 temas. Antigen, zinit y zplug son gestores de plugins alternativos con diferentes perfiles de rendimiento.

Bash no tiene un ecosistema de plugins real. Existen frameworks de dotfiles como bash-it, pero la adopción es mucho menor.

## Curva de aprendizaje

Bash: probablemente ya lo conoces. Está en todas partes, y la mayoría de tutoriales de Linux asumen que lo estás usando.

Zsh: casi sin curva de aprendizaje viniendo de Bash. La sintaxis es casi idéntica, y Oh My Zsh proporciona una experiencia guiada. Es esencialmente Bash con extras.

Fish: hay un pequeño periodo de adaptación. Las diferencias de sintaxis te confunden durante el primer día o dos, especialmente en torno a la asignación de variables (`set` en lugar de `=`) y la sustitución de comandos. Después de eso, las funcionalidades integradas significan que en realidad tienes menos que aprender en general porque no necesitas configurar tanto.

## Cuándo usar cuál

**Elige Fish si** quieres un shell que funcione bien desde el primer momento, no escribes scripts POSIX con frecuencia, y valoras las autosugerencias y el resaltado de sintaxis sin configuración. Si esto te describe, revisa [cómo instalar Fish Shell en Ubuntu](/es/instalar-fish-shell-ubuntu/) para empezar.

**Elige Zsh si** quieres lo mejor de ambos mundos: compatibilidad con Bash con funcionalidades modernas mediante plugins. Te sientes cómodo configurando cosas. Oh My Zsh te da una gran comunidad y montones de temas.

**Elige Bash si** escribes scripts de shell que necesitan ejecutarse en cualquier lugar, trabajas en servidores donde Bash es el único shell disponible, o prefieres la máxima compatibilidad POSIX.

## Mi opinión

Me pasé a Fish hace aproximadamente un año y no he mirado atrás. La experiencia de uso desde el primer momento es simplemente mejor que cualquier cosa que logré construir con plugins de Zsh. Las autosugerencias, el resaltado de sintaxis, los completados de páginas man y la sintaxis de scripting limpia hacen el trabajo diario más rápido.

La incompatibilidad con POSIX me molestó durante una semana aproximadamente. Aprendí a usar `bash -c &apos;command&apos;` para los comandos ocasionales, y mantengo mis scripts de automatización como scripts de Bash. No es un problema.

Si quieres una comparación más profunda entre solo Fish y Zsh, escribí un artículo enfocado sobre [Fish Shell vs Zsh](/es/fish-shell-vs-zsh-comparacion/). Y si quieres personalizar tu prompt de Fish, mira [cómo configurar Starship con Fish Shell](/es/fish-shell-configurar-starship/) o mi [comparación de temas y prompts de Fish Shell](/es/fish-shell-temas-prompts/) que cubre Tide, Starship, Pure y Hydro.

## Guías relacionadas de Fish Shell

- [Autocompletado y sugerencias de Fish Shell](/es/fish-shell-autocompletado-sugerencias/) - domina el sistema de completado de Fish
- [Resaltado de sintaxis de Fish Shell](/es/fish-shell-resaltado-sintaxis/) - cómo funciona el resaltado en Fish
- [Funciones y comandos personalizados de Fish Shell](/es/fish-shell-funciones-comandos-personalizados/) - escribe tus propias funciones de Fish
- [Historial y persistencia de Fish Shell](/es/fish-shell-historial-persistencia/) - gestiona y persiste tu historial de comandos
- [Temas y prompts de Fish Shell](/es/fish-shell-temas-prompts/) - compara Tide, Starship, Pure y Hydro
- [Guía de Oh My Fish](/es/oh-my-fish-instalar-temas-plugins/) - instala temas y plugins con OMF
- [NVM con Fish Shell](/es/nvm-fish-shell/) - gestiona versiones de Node.js en Fish
- [Fish Shell en macOS](/es/fish-shell-macos-configuracion/) - configura Fish en Mac</content:encoded><category>linux</category><category>fish-shell</category></item><item><title>Cómo Instalar Fish Shell en Ubuntu (Última Versión 4)</title><link>https://www.bitdoze.com/es/instalar-fish-shell-ubuntu/</link><guid isPermaLink="true">https://www.bitdoze.com/es/instalar-fish-shell-ubuntu/</guid><description>Guía paso a paso para instalar la última versión de Fish Shell 4.x en Ubuntu desde el PPA oficial, con configuración inicial y consejos para empezar.</description><pubDate>Tue, 24 Feb 2026 01:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;

Ubuntu viene con Bash por defecto, y la versión de Fish en los repositorios de Ubuntu suele estar desactualizada. Al momento de escribir esto, la última versión de Fish es **4.5.0** (lanzada el 17 de febrero de 2026) mientras que los repos de Ubuntu pueden seguir teniendo una versión 3.x. El PPA oficial de Fish te da la versión actual.

Aquí te explico cómo instalar y ejecutar Fish 4.x en Ubuntu. Si estás en Mac, mira mi [guía de configuración de Fish Shell en macOS](/es/fish-shell-macos-configuracion/) en su lugar.

## Instalar Fish desde el PPA oficial

El equipo de Fish mantiene un PPA que sigue la última versión estable. Tres comandos y listo:

```bash
sudo apt-add-repository ppa:fish-shell/release-4
sudo apt update
sudo apt install fish
```

Verifica que se instaló correctamente:

```bash
fish --version
```

Deberías ver algo como `fish, version 4.5.0`.

&lt;Notice type=&quot;info&quot; title=&quot;Soporte de versiones de Ubuntu&quot;&gt;
El PPA de Fish soporta Ubuntu 22.04, 23.04, 23.10, 24.04 y versiones más nuevas. Si estás en una versión anterior de Ubuntu, puede que necesites compilar desde el código fuente o usar el binario independiente de la página de releases en GitHub.
&lt;/Notice&gt;

## Probar Fish sin cambiar tu shell predeterminado

No tienes que comprometerte de inmediato. Solo escribe:

```bash
fish
```

Esto te pone en una sesión de Fish. Obtienes [autosugerencias](/es/fish-shell-autocompletado-sugerencias/), [resaltado de sintaxis](/es/fish-shell-resaltado-sintaxis/) y completado con tab de inmediato. Pruébalo. Escribe algunos comandos. Si no te gusta, escribe `exit` y vuelves a Bash.

## Establecer Fish como tu shell predeterminado

Cuando estés listo para dar el paso:

```bash
which fish
```

Esto debería devolver `/usr/bin/fish`. Ahora establécelo como tu shell de inicio de sesión:

```bash
chsh -s /usr/bin/fish
```

Cierra sesión y vuelve a iniciarla (o abre una nueva terminal). Fish es ahora tu shell predeterminado.

Para volver a Bash después:

```bash
chsh -s /usr/bin/bash
```

&lt;Notice type=&quot;warning&quot; title=&quot;Mantén Bash instalado&quot;&gt;
No elimines Bash. Muchos scripts del sistema dependen de él, y lo vas a necesitar para ejecutar scripts de shell POSIX. Fish reemplaza tu shell interactivo, no el intérprete de scripts del sistema.
&lt;/Notice&gt;

## Configuración inicial

El archivo de configuración de Fish se encuentra en `~/.config/fish/config.fish`. Si no existe, Fish lo crea en la primera ejecución. Aquí tienes una configuración inicial básica:

```fish
# ~/.config/fish/config.fish

# Agregar rutas personalizadas
fish_add_path ~/bin
fish_add_path ~/.local/bin

# Desactivar el mensaje de bienvenida
set -g fish_greeting

# Establecer tu editor preferido
set -gx EDITOR vim
```

Algunas cosas a tener en cuenta:

- `fish_add_path` es la forma de Fish para agregar directorios a tu `$PATH`. No intentes usar `export PATH=...` como en Bash.
- `set -g` establece una variable global para la sesión actual. `set -gx` además la exporta a los procesos hijos.
- `set -g fish_greeting` sin valor suprime el mensaje predeterminado &quot;Welcome to fish&quot;.

### Configuración modular con conf.d

Fish carga cada archivo `.fish` en `~/.config/fish/conf.d/` al iniciar. Esto es más limpio que meter todo en un solo archivo. Por ejemplo, podrías crear:

```fish
# ~/.config/fish/conf.d/aliases.fish
abbr -a gst git status
abbr -a gco git checkout
abbr -a gp git push
```

Cubro las abreviaturas frente a los alias en detalle en [abreviaturas vs alias de Fish Shell](/es/fish-shell-abreviaturas-vs-alias/). En resumen: las abreviaturas de Fish se expanden al comando completo antes de ejecutarse, lo cual es mejor que los alias en la mayoría de casos.

## Instalar un gestor de plugins

Fish funciona perfectamente sin plugins, pero un gestor de plugins te permite agregar cosas como mejor integración con git, búsqueda con fzf, y [gestión de versiones de Node](/es/nvm-fish-shell/).

**Fisher** es la opción más popular:

```fish
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source &amp;&amp; fisher install jorgebucaran/fisher
```

Ahora puedes instalar plugins con `fisher install`. Por ejemplo:

```fish
fisher install PatrickF1/fzf.fish
fisher install jorgebucaran/nvm.fish
```

Tengo una guía completa sobre [los mejores plugins y herramientas para Fish Shell](/es/mejores-plugins-fish-shell/) si quieres recomendaciones.

## Configurar tu prompt

Fish viene con un prompt predeterminado decente, pero tienes varias opciones para personalizarlo:

**Opción 1: Temas integrados.** Ejecuta `fish_config` y se abre una ventana del navegador donde puedes elegir entre varios estilos de prompt y esquemas de colores integrados.

**Opción 2: Tide.** Es un prompt popular nativo de Fish con un asistente de configuración. Instálalo a través de Fisher:

```fish
fisher install IlanCosman/tide@v6
```

Luego ejecuta `tide configure` para pasar por la configuración.

**Opción 3: Starship.** Un prompt cross-shell escrito en Rust que funciona con Fish, Zsh, Bash y otros. Tengo una guía dedicada sobre [cómo configurar Starship con Fish Shell](/es/fish-shell-configurar-starship/). Si has usado Starship con Zsh antes (como en mi [guía de Starship y Ghostty](/starship-ghostty-terminal/)), la configuración con Fish es casi idéntica. Para una comparación completa de todas las opciones de prompt de Fish, mira mi [guía de temas y prompts de Fish Shell](/es/fish-shell-temas-prompts/).

## Cosas útiles que conviene saber de entrada

**Búsqueda en el historial de comandos.** Presiona `Ctrl+R` para buscar en tu historial. Fish usa sintaxis glob por defecto, así que `git*commit` coincide con cualquier entrada del historial que contenga &quot;git&quot; seguido después de &quot;commit&quot;. Cubro la gestión del historial en profundidad en mi [guía de historial y persistencia de Fish Shell](/es/fish-shell-historial-persistencia/).

**Autosugerencias.** Mientras escribes, Fish muestra sugerencias en gris basadas en tu historial y los completados disponibles. Presiona la tecla de flecha derecha para aceptar, o `Alt+Right` para aceptar una palabra a la vez.

**Completado con tab.** Fish genera completados a partir de las páginas man automáticamente. Prueba a escribir `git checkout` y presionar tab. Verás nombres de ramas, flags y más sin instalar nada adicional.

**Configuración web.** Ejecuta `fish_config` para abrir una herramienta basada en el navegador para cambiar tus colores, prompt y ver funciones definidas. Es genuinamente útil para explorar lo que está disponible.

## Problemas comunes

&lt;Accordion label=&quot;Fish no aparece en /etc/shells&quot; group=&quot;issues&quot; expanded=&quot;true&quot;&gt;
Si `chsh` se queja, puede que necesites agregar Fish a los shells permitidos manualmente:

```bash
echo /usr/bin/fish | sudo tee -a /etc/shells
chsh -s /usr/bin/fish
```
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Los scripts de Bash no funcionan en Fish&quot; group=&quot;issues&quot;&gt;
Eso es esperado. Fish tiene su propia sintaxis. Ejecuta scripts de Bash con `bash script.sh` o agrega `#!/bin/bash` al principio y hazlos ejecutables. Tus scripts existentes no necesitan cambiar, solo ejecútalos explícitamente con Bash.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Faltan variables de entorno de .bashrc&quot; group=&quot;issues&quot;&gt;
Fish no lee `.bashrc` ni `.bash_profile`. Necesitas establecer tus variables de entorno en `~/.config/fish/config.fish` usando `set -gx`:

```fish
set -gx JAVA_HOME /usr/lib/jvm/java-21
set -gx GOPATH ~/go
fish_add_path $GOPATH/bin
```
&lt;/Accordion&gt;

## Qué hacer a continuación

- [Fish Shell vs Bash vs Zsh](/es/fish-shell-vs-bash-vs-zsh-comparacion/) - mira cómo Fish se compara con los otros shells populares
- [Fish Shell vs Zsh](/es/fish-shell-vs-zsh-comparacion/) - una comparación enfocada si estás eligiendo entre estos dos
- [Mejores plugins y herramientas de Fish Shell](/es/mejores-plugins-fish-shell/) - Fisher, Tide, fzf.fish y más
- [Abreviaturas vs alias de Fish Shell](/es/fish-shell-abreviaturas-vs-alias/) - por qué las abreviaturas suelen ser la mejor opción
- [Configurar el prompt Starship con Fish Shell](/es/fish-shell-configurar-starship/) - prompt cross-shell con gran aspecto
- [Autocompletado y sugerencias de Fish Shell](/es/fish-shell-autocompletado-sugerencias/) - saca el máximo provecho del sistema de completado de Fish
- [Resaltado de sintaxis de Fish Shell](/es/fish-shell-resaltado-sintaxis/) - entiende cómo Fish resalta tus comandos
- [Funciones y comandos personalizados de Fish Shell](/es/fish-shell-funciones-comandos-personalizados/) - escribe tus propias funciones de Fish
- [Historial y persistencia de Fish Shell](/es/fish-shell-historial-persistencia/) - gestiona y personaliza tu historial de comandos
- [Temas y prompts de Fish Shell](/es/fish-shell-temas-prompts/) - compara Tide, Starship, Pure y Hydro
- [NVM con Fish Shell](/es/nvm-fish-shell/) - gestiona versiones de Node.js en Fish
- [Guía de Oh My Fish](/es/oh-my-fish-instalar-temas-plugins/) - framework alternativo de plugins para Fish
- [Fish Shell en macOS](/es/fish-shell-macos-configuracion/) - instala y configura Fish en Mac
- [Zoxide: navegación más inteligente en la terminal](/zoxide/) - funciona genial con Fish también</content:encoded><category>linux</category><category>fish-shell</category></item><item><title>Oh My Fish (OMF) - Instalar Temas y Plugins</title><link>https://www.bitdoze.com/es/oh-my-fish-instalar-temas-plugins/</link><guid isPermaLink="true">https://www.bitdoze.com/es/oh-my-fish-instalar-temas-plugins/</guid><description>Cómo instalar y usar el framework Oh My Fish para Fish Shell, incluyendo temas, plugins y cuándo considerar Fisher como alternativa.</description><pubDate>Tue, 24 Feb 2026 01:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;

Oh My Fish (OMF) es un framework para Fish Shell, similar a lo que Oh My Zsh es para Zsh. Te da una herramienta de línea de comandos (`omf`) para instalar temas y plugins desde un repositorio curado. Lo usé brevemente antes de pasarme a Fisher, y voy a ser directo sobre por qué.

&lt;Notice type=&quot;warning&quot; title=&quot;Estado de mantenimiento de OMF&quot;&gt;
La página de GitHub de Oh My Fish tiene un aviso de que el proyecto lleva años sin mantenimiento y algunos paquetes están rotos. Sigue funcionando para muchos casos de uso, pero si empiezas desde cero, [Fisher](/es/mejores-plugins-fish-shell/) es la opción con mantenimiento más activo. Cubro OMF aquí porque todavía se referencia mucho en guías y foros.
&lt;/Notice&gt;

## Instalar Oh My Fish

Asegúrate de tener [Fish Shell instalado](/es/instalar-fish-shell-ubuntu/) primero. Después:

```fish
curl https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install | fish
```

El instalador descarga OMF y lo configura en `~/.local/share/omf/` con la configuración en `~/.config/omf/`.

Para verificar:

```fish
omf version
```

### Instalación sin conexión

Si necesitas instalar sin acceso a internet (servidores, entornos aislados):

```bash
git clone https://github.com/oh-my-fish/oh-my-fish
cd oh-my-fish
bin/install --offline
```

## Conceptos básicos de OMF

Toda la gestión se hace a través del comando `omf`.

### Instalar un paquete o tema

```fish
omf install bobthefish
omf install z
omf install bass
```

### Listar paquetes instalados

```fish
omf list
```

### Aplicar un tema

```fish
omf theme bobthefish
```

Para ver los temas disponibles:

```fish
omf theme
```

### Actualizar todo

```fish
omf update
```

### Eliminar un paquete

```fish
omf remove z
```

### Desinstalar OMF completamente

```fish
omf destroy
```

## Temas populares de OMF

Estos son temas que siguen funcionando bien a pesar de los vacíos de mantenimiento de OMF.

### bobthefish

El tema más popular de OMF. Es un prompt estilo Powerline que muestra el estado de git, entornos virtuales, versión de Node y más. Necesita una Nerd Font o fuente Powerline.

```fish
omf install bobthefish
```

Configúralo mediante variables de entorno:

```fish
set -g theme_display_git yes
set -g theme_display_git_dirty yes
set -g theme_display_docker_machine yes
set -g theme_color_scheme dracula
set -g theme_nerd_fonts yes
```

### agnoster

Un port del tema Agnoster de Zsh. Prompt de dos líneas con caracteres Powerline, información de git y soporte para virtualenv.

```fish
omf install agnoster
```

### clearance

Un tema limpio y minimalista. No necesita fuentes especiales.

```fish
omf install clearance
```

### lambda

Tema minimalista con un carácter λ en el prompt.

```fish
omf install lambda
```

Puedes ver los temas de OMF (con capturas de pantalla) en la [documentación de temas de Oh My Fish](https://github.com/oh-my-fish/oh-my-fish/blob/master/docs/Themes.md).

## Plugins útiles de OMF

### bass

Ejecuta scripts de Bash y captura los cambios en variables de entorno. Útil para herramientas que solo soportan configuración en Bash:

```fish
omf install bass
bass source ~/.nvm/nvm.sh
```

Este es uno de los paquetes más genuinamente útiles de OMF. Cubre la brecha entre la [sintaxis no POSIX de Fish](/es/fish-shell-vs-bash-vs-zsh-comparacion/) y las herramientas exclusivas de Bash.

### z

Salto entre directorios similar a [zoxide](/zoxide/). Registra los directorios que visitas y te permite saltar a ellos con nombres parciales:

```fish
omf install z
z projects
```

Yo recomendaría zoxide sobre este — es más rápido, funciona en varios shells y tiene mantenimiento activo. Pero si quieres todo a través de OMF, el plugin z funciona.

### fish-spec

Un framework de testing para funciones de Fish. Útil si escribes plugins de Fish o funciones complejas:

```fish
omf install fish-spec
```

### extract

Una herramienta universal de extracción de archivos. `extract file.tar.gz` en lugar de recordar los flags de tar:

```fish
omf install extract
```

## Archivos de configuración de OMF

OMF usa dos archivos de configuración:

**`~/.config/omf/bundle`** — lista los paquetes instalados:

```
package bass
package z
theme bobthefish
```

**`~/.config/omf/init.fish`** — se ejecuta al inicio. Añade aquí tu configuración específica de OMF:

```fish
# ~/.config/omf/init.fish
set -g theme_nerd_fonts yes
set -g theme_color_scheme dracula
```

Compartir tu directorio `~/.config/omf/` entre máquinas te permite replicar tu configuración con `omf install`.

## OMF vs Fisher

Esta es la pregunta real. Así se comparan:

| | Oh My Fish | Fisher |
|---|---|---|
| Estado | Sin mantenimiento | Mantenimiento activo |
| Enfoque | Framework (tiene su propio init) | Solo gestor de plugins |
| Impacto en el arranque | Añade algo de sobrecarga | Cero sobrecarga |
| Formato de plugins | Paquetes específicos de OMF | Plugins estándar de Fish |
| Compatibilidad | Solo paquetes OMF | Paquetes OMF + cualquier plugin de Fish |
| Configuración | Comandos `omf` + archivos de config | Comandos `fisher` + archivo fish_plugins |
| Temas | Sistema de temas integrado | Instalar plugins de prompt directamente |

Fisher es más rápido, tiene mantenimiento y puede instalar paquetes compatibles con OMF. La razón principal para usar OMF hoy es si ya tienes una configuración de OMF funcionando y no quieres migrar.

### Migrar de OMF a Fisher

Si quieres cambiar:

1. Anota tus paquetes instalados: `omf list`
2. Instala Fisher:
   ```fish
   curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source &amp;&amp; fisher install jorgebucaran/fisher
   ```
3. Instala los equivalentes a través de Fisher. La mayoría de paquetes OMF se pueden instalar directamente:
   ```fish
   fisher install oh-my-fish/theme-bobthefish
   ```
4. Desinstala OMF: `omf destroy`

Fisher puede instalar paquetes del repositorio de OMF usando el prefijo `oh-my-fish/`. No todos los paquetes funcionan, pero los populares sí.

## Crear paquetes de OMF

Si quieres crear tu propio paquete o tema:

```fish
omf new plugin my-plugin
omf new theme my-theme
```

Esto crea una estructura en `~/.config/omf/pkg/my-plugin/` o `~/.config/omf/themes/my-theme/`.

Estructura de un plugin:

```
my-plugin/
├── completions/
│   └── my-plugin.fish
├── functions/
│   └── my-plugin.fish
├── init.fish
└── uninstall.fish
```

`init.fish` se ejecuta cuando se carga el plugin. `uninstall.fish` se ejecuta cuando se elimina.

## Solución de problemas

**Comandos de OMF no encontrados** — reinicia tu shell después de la instalación, o ejecuta `source ~/.config/fish/conf.d/omf.fish`.

**El tema no cambia** — algunos temas necesitan una Nerd Font. Instala MesloLGS NF y configúrala en tu terminal.

**Errores en plugins después de actualizar** — el estado sin mantenimiento de OMF significa que algunos plugins pueden romperse. Revisa la página de GitHub del plugin buscando parches, o encuentra una alternativa compatible con Fisher.

## Guías relacionadas

- [Mejores plugins para Fish Shell (Fisher)](/es/mejores-plugins-fish-shell/) — el gestor de plugins recomendado
- [Temas y prompts de Fish Shell](/es/fish-shell-temas-prompts/) — Tide, Starship, Pure, Hydro
- [Fish Shell vs Zsh](/es/fish-shell-vs-zsh-comparacion/) — si estás comparando OMF con Oh My Zsh
- [Mejores plugins de Oh My Zsh](/best-oh-my-zsh-plugins/) — el equivalente para Zsh
- [Instalar Fish Shell en Ubuntu](/es/instalar-fish-shell-ubuntu/) — primeros pasos
- [Fish Shell en macOS](/es/fish-shell-macos-configuracion/) — configuración en Mac</content:encoded><category>linux</category><category>fish-shell</category></item><item><title>Guía de Seguridad de OpenClaw: CVE-2026-25253, Skills Maliciosos y Más de 40 Correcciones</title><link>https://www.bitdoze.com/es/guia-seguridad-openclaw/</link><guid isPermaLink="true">https://www.bitdoze.com/es/guia-seguridad-openclaw/</guid><description>Una guía práctica de hardening de seguridad para OpenClaw que cubre CVE-2026-25253 (el ataque a la cadena de suministro de ClawHub), las más de 40 correcciones de vulnerabilidades incluidas en versiones recientes, los fundamentos del modelo de confianza y los procedimientos de bloqueo paso a paso.</description><pubDate>Tue, 24 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;

OpenClaw funciona 24/7 en tu servidor con acceso completo al shell, claves API en su configuración y la capacidad de instalar y ejecutar skills desde un marketplace comunitario. La seguridad no es algo que puedas dejar para después. En febrero de 2026, investigadores descubrieron que el 12% de los skills en ClawHub estaban infectados con malware. El CHANGELOG del proyecto lista más de 40 correcciones de seguridad en las versiones recientes. Si estás usando OpenClaw, deberías conocer ambos problemas.

He revisado el CVE, las vulnerabilidades parcheadas, el modelo de confianza y las opciones de hardening. Esto es lo que realmente importa.

&lt;Notice type=&quot;error&quot; title=&quot;Acción Requerida Si Instalaste Skills de ClawHub&quot;&gt;
Si instalaste algún skill de ClawHub (openclawdir.com) antes de mediados de febrero de 2026, ejecuta `openclaw security audit --deep` inmediatamente y revisa los indicadores de skills maliciosos que se listan a continuación. El ataque a la cadena de suministro afectó a 341 de los 2,857 skills auditados (tasa de infección del 12%).
&lt;/Notice&gt;

## CVE-2026-25253: El Ataque a la Cadena de Suministro de ClawHub

El 13 de febrero de 2026, investigadores de seguridad reportaron ([GitHub issue #16052](https://github.com/openclaw/openclaw/issues/16052)) que 341 skills en ClawHub, el marketplace comunitario de skills, fueron comprometidos en un ataque coordinado a la cadena de suministro. El CVE recibió una puntuación CVSS de 8.8 (ALTO).

### Cómo Funcionó el Ataque

Los skills maliciosos parecían herramientas normales. El ejemplo más documentado, `deeps-agnw6h`, se hacía pasar por una herramienta de investigación &quot;Deep-Agent/Deep-Search&quot;. Los skills infectados contenían hasta tres vectores de ataque:

**1. Dropper para macOS (Shell Codificado en Base64)**

Un payload en base64 se decodificaba en un comando curl que descargaba y ejecutaba código arbitrario desde un servidor controlado por el atacante en `91.92.242.30` (rango de hosting búlgaro, vinculado a infraestructura de robo de información).

**2. Instalador Falso para Windows**

Un repositorio de GitHub (`toolitletolate/openclaw_windriver`) alojaba un instalador MSI malicioso disfrazado de paquete de drivers.

**3. Backdoor MCP**

Un endpoint oculto de servidor MCP enrutado a través de tunneling `bore.pub` hacia la infraestructura del atacante, dando acceso remoto a cualquier máquina que ejecutara el skill infectado.

### Indicadores de Compromiso

Si sospechas que tu instancia pudo verse afectada, busca lo siguiente:

| Tipo | Valor | Notas |
|------|-------|-------|
| **Dirección IP** | `91.92.242.30` | Servidor de entrega del payload para macOS |
| **Ruta URL** | `http://91.92.242.30/6wioz8285kcbax6v` | Payload del dropper |
| **Dominio de túnel** | `bore.pub` | Tunneling reverso para backdoor MCP |
| **Puerto de túnel** | `44876` | Endpoint del backdoor MCP |
| **Repositorio GitHub** | `toolitletolate/openclaw_windriver` | Instalador falso para Windows |

Revisa tus logs de red en busca de conexiones a estas direcciones. Si encuentras coincidencias, asume que hubo compromiso y rota todas las claves API y credenciales almacenadas en tu configuración de OpenClaw.

### Qué Hacer Ahora Mismo

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Actualiza OpenClaw a la última versión (`npm update -g openclaw`)&lt;/li&gt;
&lt;li&gt;Ejecuta `openclaw security audit --deep` y revisa cada hallazgo&lt;/li&gt;
&lt;li&gt;Verifica los skills instalados: `openclaw skills list` — elimina cualquier cosa que no reconozcas&lt;/li&gt;
&lt;li&gt;Busca en tus logs de red `91.92.242.30` y `bore.pub`&lt;/li&gt;
&lt;li&gt;Si hubo compromiso: rota todas las claves API, tokens de gateway y credenciales de canales&lt;/li&gt;
&lt;li&gt;Revisa las conexiones abiertas: `ss -tlnp | grep openclaw` en Linux para verificar listeners inesperados&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

---

## El Hook soul-evil: Un Riesgo Incorporado

Independientemente del ataque a ClawHub, investigadores señalaron otro problema en el [issue #8776](https://github.com/openclaw/openclaw/issues/8776): OpenClaw venía con un hook incluido llamado `soul-evil` que podía intercambiar silenciosamente el prompt de sistema principal del agente (`SOUL.md`) por un archivo alternativo (`SOUL_EVIL.md`). Deshabilitado por defecto, pero el código estaba ahí en cada instalación.

Lo que lo hacía peligroso: un atacante con acceso a inyección de prompts podía encadenar la herramienta `write` para crear `SOUL_EVIL.md` y luego usar `config.patch` para habilitar el hook. El agente entonces funcionaría bajo instrucciones controladas por el atacante sin ninguna notificación. Peor aún cuando se combinaba con CVE-2026-25253, ya que un token de gateway exfiltrado podía habilitar este hook de forma remota.

El problema se cerró en la versión 2026.2.1. Verifica que estás ejecutando al menos esa versión:

```bash
openclaw --version
```

---

## Más de 40 Correcciones de Seguridad en Versiones Recientes

Conté más de 40 correcciones de seguridad en el CHANGELOG de OpenClaw a lo largo de las versiones 2026.2.x. Esto es lo que se parcheó, agrupado por categoría.

### Bypasses de Aprobación de Ejecución (7 Correcciones)

El sistema de aprobación de ejecución, la capa que pregunta &quot;¿debería OpenClaw ejecutar este comando?&quot;, tenía múltiples rutas de bypass:

| Corrección | Qué Estaba Mal |
|------------|----------------|
| Replay entre nodos | Las solicitudes `system.run` aprobadas podían replicarse entre diferentes nodos |
| Aprobaciones huérfanas | El registro de aprobación en dos fases tenía una condición de carrera que permitía a las aprobaciones saltarse el paso de espera |
| Bypass `env -S` | La interpretación incorrecta del wrapper `env --split-string` permitía a los comandos evadir las verificaciones de la allowlist |
| Applets `busybox`/`toybox` | Los binarios multiplexores no eran reconocidos en el análisis de wrappers, permitiendo bypasses de allow-always |
| Colisión de rutas en `autoAllowSkills` | Las colisiones de basename en rutas absolutas podían satisfacer las verificaciones de auto-allow de skills |
| Brechas en la denylist de flags safe-bin | Las abreviaciones desconocidas de opciones largas GNU y los flags de `sort` dependientes del sistema de archivos no estaban bloqueados |
| Detección de comandos ofuscados | Los comandos ofuscados no se verificaban antes de las decisiones de la exec allowlist |

### Escapes de Sandbox y Path Traversal (4 Correcciones)

| Corrección | Qué Estaba Mal |
|------------|----------------|
| Escape de workspace en `apply_patch` | Las rutas montadas en sandbox como `/agent` permitían escrituras/eliminaciones fuera del límite del workspace |
| Path traversal en herramienta de imagen | `tools.fs.workspaceOnly` no se aplicaba para la resolución de rutas de `image` en sandbox |
| Fallback de shell en env | El fallback de ruta de shell con prefijo de confianza permitía shells no confiables; ahora solo se confía en las entradas de `/etc/shells` |
| Path traversal en config | Los segmentos de claves prototype y el traversal de propiedades heredadas no se rechazaban en las rutas de `config get/set/unset` |

### XSS e Inyección (5 Correcciones)

| Corrección | Qué Estaba Mal |
|------------|----------------|
| Inyección HTML en exportación de sesión | Los tokens de markdown HTML sin procesar en el visor de sesión exportado no estaban escapados |
| Inyección de data-URL en imágenes exportadas | Los campos MIME/base64 de imágenes en el HTML exportado no estaban validados |
| XSS en galería HTML de skills | El skill `openai-image-gen` no escapaba los valores controlados por el usuario en el HTML generado |
| Escape de symlinks en empaquetado de skills | `skill-creator` no omitía los symlinks ni rechazaba las rutas que escapaban de la raíz del skill |
| Exfiltración por deep link en iOS | Las solicitudes `openclaw://agent` se reenviaban al gateway sin confirmación local |

### Prototype Pollution y Seguridad de Configuración (3 Correcciones)

| Corrección | Qué Estaba Mal |
|------------|----------------|
| Normalización de Account-ID | Las claves prototype reservadas no estaban bloqueadas en la normalización de account-id |
| Mutaciones en escritura de config | `unsetPaths` podía mutar los objetos proporcionados por el llamador |
| Filtración de credenciales en CLI config | La salida de `openclaw config get` no estaba redactada antes de imprimirse |

### Control de Canales y Acceso (5 Correcciones)

| Corrección | Qué Estaba Mal |
|------------|----------------|
| Suplantación de remitente de comandos | `commands.allowFrom` coincidía con identidades `From` con forma de conversación (canales, grupos, hilos) |
| Coincidencia de nombres mutables | `allowFrom` coincidía con nombres/tags/emails mutables en lugar de IDs estables |
| Inconsistencia en política de coincidencia de nombres | Las verificaciones de `dangerouslyAllowNameMatching` variaban entre el core y los canales de extensión |
| Alcance de auto-aprobación ACP | Los nombres de herramientas desconocidos y las lecturas de archivos fuera de alcance se auto-aprobaban |
| Bypass de `selfChatMode` | El control de acceso de entrada de WhatsApp no respetaba la configuración de `selfChatMode` |

### SSRF y Red (2 Correcciones)

| Corrección | Qué Estaba Mal |
|------------|----------------|
| SSRF en media de Telegram | El rango de benchmark RFC2544 (`198.18.0.0/15`) no estaba bloqueado por defecto para descargas de media |
| Política SSRF del navegador | El acceso a red privada estaba permitido por defecto sin configuración explícita |

### Voz, Webhooks y Otros (4+ Correcciones)

| Corrección | Qué Estaba Mal |
|------------|----------------|
| Replay de webhook de Twilio | Los IDs de eventos del proveedor no se preservaban a través de la normalización, permitiendo ataques de replay |
| Filtración de credenciales OTEL | Las claves API y tokens se incluían en los diagnósticos de exportación OTLP |
| Filtración de razonamiento/thinking | Los bloques internos de razonamiento se filtraban como respuestas visibles para el usuario en WhatsApp, Discord, Web |
| Filtración de credenciales en reset de sesión | Los mensajes de confirmación de `/new` y `/reset` exponían prefijos de claves API |

&lt;Notice type=&quot;warning&quot; title=&quot;Esta Lista No Está Completa&quot;&gt;
Estas son las correcciones de seguridad documentadas en el CHANGELOG para las versiones 2026.2.22 y 2026.2.23 más parches no publicados. Las versiones anteriores contienen correcciones adicionales. Siempre ejecuta la última versión.
&lt;/Notice&gt;

---

## Entendiendo el Modelo de Confianza de OpenClaw

Antes de cambiar cualquier configuración, conoce lo que OpenClaw considera dentro y fuera del alcance de seguridad. Malinterpretar esto lleva a falsa confianza o esfuerzo desperdiciado.

### Principios fundamentales

&lt;Tabs&gt;
&lt;Tab name=&quot;Qué Es De Confianza&quot;&gt;

- **Los llamadores autenticados del gateway** se tratan como operadores de confianza
- **Los identificadores de sesión** (sessionKey, IDs de sesión, etiquetas) son controles de enrutamiento, no límites de autorización
- **Los plugins/extensiones** se ejecutan en proceso con privilegios completos del SO
- **Los archivos de memoria del workspace** (MEMORY.md, memory/*.md) se tratan como estado local de operador de confianza
- **Las aprobaciones de ejecución** son guardarraíles del operador, no un límite de autorización multi-tenant

&lt;/Tab&gt;
&lt;Tab name=&quot;Qué NO Es un Límite&quot;&gt;

- Un gateway NO es un límite de usuarios adversarios multi-tenant
- Si un operador puede ver datos de otro en el mismo gateway, eso es esperado
- Que la búsqueda de memoria devuelva contenido escrito por otro proceso es comportamiento esperado
- Que los plugins tengan los mismos privilegios del SO que el proceso de OpenClaw es por diseño

&lt;/Tab&gt;
&lt;Tab name=&quot;Configuración Recomendada&quot;&gt;

- **Un usuario por máquina/host** (o VPS)
- **Un gateway por usuario** con uno o más agentes dentro
- Para múltiples usuarios: usa instancias VPS separadas o límites de usuario del SO
- Para acceso remoto: túnel SSH o Tailscale, no exposición a internet público

&lt;/Tab&gt;
&lt;/Tabs&gt;

### Qué significa esto en la práctica

Si alguien comparte un gateway contigo, puede ver tus conversaciones, tus claves API y tus archivos de memoria. Eso es por diseño. El límite de seguridad de OpenClaw está a nivel de máquina/usuario del SO, no a nivel de gateway. Los dominios de confianza separados necesitan instancias separadas.

---

## Guía de hardening

En orden de importancia, esto es lo que debes configurar.

### 1. Mantén OpenClaw Actualizado

La mayoría de las más de 40 correcciones mencionadas se incluyen en la versión de npm. Verifica tu versión y actualiza:

```bash
openclaw --version
npm update -g openclaw
```

### 2. Ejecuta la Auditoría de Seguridad Integrada

OpenClaw tiene un escáner de seguridad integrado:

```bash
openclaw security audit --deep
```

Verifica patrones de configuración riesgosos, allowlists mutables, credenciales expuestas y problemas conocidos. Agrega `--fix` para auto-remediar lo que pueda:

```bash
openclaw security audit --deep --fix
```

### 3. Vincula el Gateway a Loopback

La superficie HTTP del gateway (Control UI, canvas, endpoints de API) no está endurecida para internet público. Mantenla en localhost:

```json
{
  &quot;gateway&quot;: {
    &quot;bind&quot;: &quot;loopback&quot;
  }
}
```

Para acceso remoto, usa túnel SSH o Tailscale:

```bash
# SSH tunnel
ssh -L 3000:localhost:3000 root@your-server

# Or Tailscale serve
tailscale serve --https=443 http://localhost:3000
```

### 4. Habilita el Modo Sandbox

Por defecto, `agents.defaults.sandbox.mode` está en `off`. Actívalo:

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;sandbox&quot;: {
        &quot;mode&quot;: &quot;on&quot;
      }
    }
  }
}
```

### 5. Restringe el Acceso al Sistema de Archivos

Mantén las herramientas dentro del directorio del workspace:

```json
{
  &quot;tools&quot;: {
    &quot;fs&quot;: {
      &quot;workspaceOnly&quot;: true
    },
    &quot;exec&quot;: {
      &quot;applyPatch&quot;: {
        &quot;workspaceOnly&quot;: true
      }
    }
  }
}
```

### 6. Cambia las Allowlists de Canales a IDs Estables

Después del cambio importante en la versión no publicada, la coincidencia de `allowFrom` es solo por ID por defecto. Si estás en una versión anterior, migra tus allowlists de nombres a IDs:

```json
{
  &quot;channels&quot;: {
    &quot;telegram&quot;: {
      &quot;allowFrom&quot;: [&quot;123456789&quot;]
    }
  }
}
```

Los nombres mutables (nombres de usuario, nombres para mostrar, direcciones de email) en las allowlists son peligrosos. Cualquiera puede cambiar su nombre para mostrar en cualquier momento. Usa IDs numéricos estables.

### 7. Establece Orígenes Explícitos para la Control UI

Para despliegues fuera de loopback, especifica los orígenes permitidos:

```json
{
  &quot;gateway&quot;: {
    &quot;controlUi&quot;: {
      &quot;allowedOrigins&quot;: [&quot;https://your-tailscale-domain.ts.net&quot;]
    }
  }
}
```

Sin esto, el gateway se negará a iniciar (comportamiento fail-closed).

### 8. Revisa los Skills Antes de Instalarlos

Después de CVE-2026-25253, trata cada skill de ClawHub como potencialmente hostil hasta verificarlo:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Lee el código fuente del skill antes de instalarlo&lt;/li&gt;
&lt;li&gt;Busca payloads codificados en base64 o comandos ofuscados&lt;/li&gt;
&lt;li&gt;Busca conexiones de red salientes a hosts desconocidos&lt;/li&gt;
&lt;li&gt;Verifica la identidad e historial del autor del skill&lt;/li&gt;
&lt;li&gt;Prefiere skills con uso significativo de la comunidad y reseñas&lt;/li&gt;
&lt;li&gt;Considera ejecutar los skills en un entorno sandboxed primero&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

### 9. Hardening con Docker

Si ejecutas OpenClaw en Docker, usa configuraciones restrictivas:

```bash
docker run --read-only --cap-drop=ALL \
  -v openclaw-data:/app/data \
  openclaw/openclaw:latest
```

La imagen oficial se ejecuta como un usuario `node` sin privilegios de root. `--read-only` previene escrituras en el sistema de archivos fuera de los volúmenes montados, y `--cap-drop=ALL` elimina las capabilities de Linux.

### 10. Versión de Node.js

OpenClaw requiere Node.js 22.12.0 o posterior. Las versiones anteriores tienen vulnerabilidades conocidas:

```bash
node --version  # Should be v22.12.0 or later
```

---

## Lista de Verificación de Auditoría de Seguridad

Usa esto como una lista de verificación periódica:

| Verificación | Comando / Acción | Esperado |
|--------------|-----------------|----------|
| Versión de OpenClaw | `openclaw --version` | Última versión |
| Versión de Node.js | `node --version` | v22.12.0+ |
| Auditoría de seguridad | `openclaw security audit --deep` | Sin hallazgos críticos |
| Vinculación del gateway | Verificar config `gateway.bind` | `loopback` |
| Modo sandbox | Verificar config `agents.defaults.sandbox.mode` | `on` |
| FS solo workspace | Verificar config `tools.fs.workspaceOnly` | `true` |
| Allowlists de canales | Verificar entradas basadas en nombres | Solo IDs |
| Skills instalados | `openclaw skills list` | Solo skills reconocidos |
| Conexiones de red | `ss -tlnp \| grep openclaw` | Solo listeners esperados |
| Rotación de claves API | Revisar antigüedad de las claves | Rotadas en los últimos 90 días |

---

## Guías relacionadas

El resto del stack de OpenClaw:

- La [Guía de Configuración de OpenClaw](/es/guia-configuracion-openclaw/) cubre la instalación completa en Hetzner VPS o Mac Mini, incluyendo la configuración del token de gateway
- [Los Mejores Modelos Open Source para OpenClaw](/es/mejores-modelos-opensource-openclaw/) cubre la configuración de GLM-5 y MiniMax M2.5, comparación de costos, y por qué enrutar suscripciones a través de OpenClaw puede banearte
- [Búsqueda DuckDuckGo para OpenClaw](/es/busqueda-duckduckgo-openclaw/) explica cómo agregar búsqueda web gratuita sin claves API
- [Alternativas a OpenClaw](/es/alternativas-openclaw/) cubre NanoClaw, IronClaw, NullClaw y otros con sus propios enfoques de seguridad
- [Los Mejores Dashboards de OpenClaw](/es/mejores-dashboards-openclaw/) clasifica nueve dashboards, incluyendo el OpenClaw Dashboard con hardening de seguridad y TOTP MFA

---

&lt;Accordion label=&quot;Preguntas Frecuentes&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

**¿Fueron robados mis datos en el ataque CVE-2026-25253?**

Si instalaste uno de los 341 skills infectados, el malware tuvo acceso a todo lo que OpenClaw podía acceder — tus claves API, historial de conversaciones, archivos en el workspace y potencialmente toda la máquina si el modo sandbox estaba desactivado. Asume compromiso total y rota todas las credenciales.

**¿Cómo sé si instalé un skill malicioso?**

Ejecuta `openclaw skills list` y verifica cada skill contra los resultados de la auditoría de ClawHub. Busca en tus logs del sistema y tráfico de red las direcciones IoC listadas arriba (`91.92.242.30`, `bore.pub:44876`). El comando `openclaw security audit --deep` también verifica patrones maliciosos conocidos.

**¿Es seguro ejecutar OpenClaw en internet público?**

No. La superficie HTTP del gateway no está endurecida para exposición pública. Vincúlalo a loopback y usa túnel SSH o Tailscale para acceso remoto. Múltiples entradas del CHANGELOG señalan correcciones de problemas que solo importan con exposición de red.

**¿Debería habilitar `dangerouslyAllowNameMatching`?**

No, a menos que no tengas otra opción. Las allowlists basadas en nombres son vulnerables porque los usuarios pueden cambiar sus nombres para mostrar, nombres de usuario o direcciones de email en cualquier momento. Migra a IDs estables.

**¿Cuál es la diferencia entre `sandbox.mode` y `workspaceOnly`?**

`sandbox.mode` controla si el agente se ejecuta en un contenedor aislado (Docker/Apple Container). `workspaceOnly` restringe las operaciones de archivos al directorio del workspace incluso sin un runtime de sandbox. Ambos deberían estar habilitados para máxima protección. Se complementan mutuamente.

**¿Con qué frecuencia debería ejecutar `openclaw security audit`?**

Después de cada actualización de OpenClaw, después de instalar cualquier skill nuevo, y al menos semanalmente para instancias en uso activo. Agrega `--deep` para el escaneo exhaustivo que verifica exposición de red y patrones de credenciales.

**¿El modelo de confianza significa que OpenClaw es inseguro?**

No, significa que el límite de seguridad está a nivel de máquina/usuario del SO en lugar del nivel de gateway. Esto es común para herramientas auto-alojadas. La clave es entender que todos los que tienen acceso al gateway tienen privilegios completos de operador — planifica tu despliegue en consecuencia.

**¿Puede la inyección de prompts comprometer mi instancia de OpenClaw?**

La inyección de prompts está listada como fuera del alcance en el modelo de seguridad de OpenClaw cuando no viola un límite. Pero el hook `soul-evil` demostró cómo la inyección de prompts puede encadenarse con otras funcionalidades para lograr un compromiso persistente. Mantén la superficie de ataque pequeña: sandbox activado, sistema de archivos solo workspace, skills auditados.

&lt;/Accordion&gt;

Las versiones 2026.2.x corrigieron mucho. Pero el ataque a ClawHub demostró que el ecosistema de skills es una amenaza real, y muchas de las vulnerabilidades parcheadas habían estado ahí desde las primeras versiones. Espero que lleguen más correcciones de seguridad a lo largo de 2026.

Mantén OpenClaw actualizado y ejecuta `openclaw security audit --deep` regularmente. Esa es la acción de mayor valor que puedes hacer. El resto de esta guía es defensa en profundidad sobre esa base.

Para todo lo demás: [guía de configuración](/es/guia-configuracion-openclaw/), [recomendaciones de modelos](/es/mejores-modelos-opensource-openclaw/), [búsqueda web gratuita](/es/busqueda-duckduckgo-openclaw/), [dashboards](/es/mejores-dashboards-openclaw/), [modelos locales con Ollama](/es/openclaw-ollama-modelos-locales/) y [plataformas alternativas](/es/alternativas-openclaw/).</content:encoded><category>ai</category><category>ai-tools</category><category>openclaw</category><category>security</category></item><item><title>Ejecutar OpenClaw con Ollama: Guía de Modelos Locales</title><link>https://www.bitdoze.com/es/openclaw-ollama-modelos-locales/</link><guid isPermaLink="true">https://www.bitdoze.com/es/openclaw-ollama-modelos-locales/</guid><description>Cómo ejecutar OpenClaw con Ollama gratis, con privacidad e inferencia LLM local. Cubre requisitos de hardware, modelos recomendados por nivel de GPU/RAM, Nanbeige4.1-3B para máquinas modestas, configuración completa y estrategias de fallback.</description><pubDate>Tue, 24 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;

Llevo un tiempo usando OpenClaw con proveedores de API, y las facturas se acumulan. Incluso modelos baratos como GLM-5 y MiniMax M2.5 cuestan algo, y cada mensaje pasa por el servidor de otra persona. Así que configuré Ollama en la misma máquina y apunté OpenClaw hacia él. Cero coste por token, privacidad total, y la latencia es bastante decente si eliges el modelo adecuado para tu hardware.

Esta guía cubre cómo hacer que OpenClaw se comunique con Ollama, qué modelos funcionan bien para diferentes niveles de hardware, y qué hacer cuando tu máquina no puede con los modelos más grandes. Respuesta corta a esto último: Nanbeige4.1-3B es sorprendentemente bueno para ser un modelo de 3B.

&lt;Notice type=&quot;info&quot; title=&quot;Lo Que Necesitarás&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;OpenClaw instalado y funcionando ([guía de configuración aquí](/es/guia-configuracion-openclaw/))&lt;/li&gt;
&lt;li&gt;Una máquina con al menos 8GB de RAM (16GB+ recomendado para buenos modelos)&lt;/li&gt;
&lt;li&gt;Ollama instalado (un solo comando en Linux/macOS)&lt;/li&gt;
&lt;li&gt;No se necesitan API keys — todo se ejecuta localmente&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

## Por Qué Ejecutar Modelos Locales con OpenClaw

Tres razones para molestarse con esto en lugar de simplemente usar una API:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;**$0 por token** — Ollama es gratis. Sin facturas de API, sin límites de velocidad, sin topes de uso&lt;/li&gt;
&lt;li&gt;**Privacidad** — las conversaciones nunca salen de tu máquina. Sin logging de terceros, sin políticas de retención de datos que leer&lt;/li&gt;
&lt;li&gt;**Sin dependencia de internet** — funciona en una red aislada, durante cortes, en un avión&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

La contrapartida es real: los modelos locales son más lentos y menos capaces que Claude Opus o GPT-5. Pero para las tareas cotidianas de OpenClaw como responder mensajes y ejecutar trabajos programados, un modelo local decente lo maneja bien.

## Requisitos de Hardware

Esta es la parte que la mayoría de guías se equivocan. Te dicen el tamaño del modelo y se olvidan de la experiencia real. Esto es lo que he encontrado ejecutando diferentes niveles.

### La VRAM Es Lo Que Importa

Los modelos se ejecutan en la VRAM de la GPU cuando está disponible. Si el modelo no cabe en la VRAM, se desborda a la RAM del sistema y se vuelve mucho más lento. La inferencia solo con CPU funciona, pero espera respuestas 5-10x más lentas.

| Nivel de Hardware | VRAM / RAM | Mejor Tamaño de Modelo | Velocidad de Respuesta |
|---|---|---|---|
| **Gama baja** (sin GPU, 8GB RAM) | 8GB sistema | Modelos 1B-3B | Lenta (5-15 tok/s) |
| **Gama media** (sin GPU, 16-32GB RAM) | 16-32GB sistema | Modelos 7B-8B | Moderada (10-25 tok/s) |
| **GPU básica** (RTX 3060 12GB / M1 16GB) | 12-16GB | Modelos 7B-14B | Buena (30-60 tok/s) |
| **GPU media** (RTX 4070 Ti 16GB / M2 Pro 32GB) | 16-32GB | Modelos 14B-32B | Buena (40-80 tok/s) |
| **GPU alta** (RTX 4090 24GB / M4 Max 128GB) | 24-128GB | Modelos 32B-70B | Rápida (50-100+ tok/s) |

&lt;Notice type=&quot;warning&quot; title=&quot;Nota sobre Apple Silicon&quot;&gt;
Los Mac con M1/M2/M3/M4 comparten memoria unificada entre CPU y GPU, así que Ollama puede usar toda la RAM del sistema como VRAM. Un Mac Mini M4 con 32GB de RAM puede ejecutar cómodamente modelos de 14B-32B. Por eso los Mac Mini son populares para configuraciones de OpenClaw.
&lt;/Notice&gt;

### Configuraciones Recomendadas

&lt;Tabs&gt;
&lt;Tab name=&quot;Económico ($50-100/mes VPS)&quot;&gt;

**Hetzner CAX31 o similar**
- 8 vCPU (ARM), 32GB RAM, sin GPU
- Ejecuta modelos 7B-8B a velocidades usables
- Mejor modelo: `qwen3:8b` o `gpt-oss:20b`
- Coste: ~€15/mes en Hetzner

Suficiente para un asistente personal que gestione mensajes y tareas simples. No esperes respuestas rápidas en problemas complejos de programación.

&lt;/Tab&gt;
&lt;Tab name=&quot;Gama media (Mac Mini)&quot;&gt;

**Mac Mini M4 con 32GB RAM**
- La memoria unificada actúa como VRAM
- Ejecuta modelos 14B-32B cómodamente
- Mejor modelo: `qwen2.5-coder:32b` o `qwen3:32b`
- Coste: ~$800 único

El punto ideal para la mayoría de personas. Los modelos de 32B manejan bien programación, escritura y tool calls. Esto es lo que compraría si empezara de cero.

&lt;/Tab&gt;
&lt;Tab name=&quot;Gama alta (Servidor GPU)&quot;&gt;

**RTX 4090 24GB o configuración dual GPU**
- 24GB de VRAM para un solo modelo 70B cuantizado
- Mejor modelo: `llama3.3:70b` o `deepseek-r1:70b`
- Coste: ~$2000+ único por la GPU

Los modelos de 70B se acercan a la calidad de respuesta de las API. Merece la pena si estás reemplazando un gasto de $100+/mes en API.

&lt;/Tab&gt;
&lt;Tab name=&quot;Mínimo (8GB RAM)&quot;&gt;

**Cualquier máquina con 8GB RAM**
- Inferencia solo CPU, lenta pero funciona
- Mejor modelo: `nanbeige4.1-3b` (ver sección más abajo)
- Alternativa: `qwen3:1.7b` o `llama3.2:3b`

Sorprendentemente usable para conversaciones simples y tareas básicas. No es ideal para programación.

&lt;/Tab&gt;
&lt;/Tabs&gt;

---

## Instalar Ollama

Un solo comando:

```bash
curl -fsSL https://ollama.ai/install.sh | sh
```

En macOS, descarga desde [ollama.ai](https://ollama.ai) o usa Homebrew:

```bash
brew install ollama
```

Verifica que está funcionando:

```bash
ollama --version
ollama list
```

Si `ollama list` funciona, estás listo.

---

## Elegir el Modelo Correcto

No todos los modelos funcionan bien con OpenClaw. Necesitas **soporte de tool calling** (para que el agente pueda usar sus herramientas) e idealmente **buen seguimiento de instrucciones**. Aquí están los modelos que he probado, ordenados por nivel de hardware.

### Mejores Modelos por Nivel

| Modelo | Tamaño | VRAM Necesaria | Tool Calling | Mejor Para |
|---|---|---|---|---|
| `qwen2.5-coder:32b` | 32B | ~20GB | Sí | Programación, tareas complejas |
| `qwen3:32b` | 32B | ~20GB | Sí | General + razonamiento |
| `gpt-oss:20b` | 20B | ~14GB | Sí | General, uso de herramientas |
| `qwen3:8b` | 8B | ~6GB | Sí | Propósito general |
| `llama3.3:70b` | 70B | ~42GB | Sí | Mejor calidad local |
| `qwen2.5-coder:14b` | 14B | ~10GB | Sí | Programación en gama media |
| `deepseek-r1:14b` | 14B | ~10GB | Sí | Tareas de razonamiento |
| `mistral-small3.2:24b` | 24B | ~16GB | Sí | Visión + herramientas |
| `qwen3:4b` | 4B | ~3GB | Sí | General económico |
| `nanbeige4.1-3b`* | 3B | ~2.5GB | Sí | Económico, ver abajo |

\* Subida comunitaria en Ollama — ver sección de Nanbeige más abajo.

### Mis Recomendaciones

- **Mac Mini 32GB o GPU de 16GB+**: `qwen2.5-coder:32b` como principal, `qwen3:8b` como fallback
- **16GB RAM, sin GPU**: `qwen3:8b` como principal, `qwen3:4b` como fallback
- **8GB RAM**: `nanbeige4.1-3b` o `qwen3:4b`

Descarga tu modelo elegido:

```bash
ollama pull qwen2.5-coder:32b
# o para hardware más modesto:
ollama pull qwen3:8b
# o para hardware mínimo:
ollama pull tomng/nanbeige4.1
```

---

## Nanbeige4.1-3B: La Sorpresa Económica

Este modelo me pilló desprevenido. Nanbeige4.1-3B es un modelo de 3B parámetros de Nanbeige Lab (un equipo de Kanzhun/BOSS Zhipin) que rinde muy por encima de su categoría. Mira estos números:

| Benchmark | Nanbeige4.1-3B | Qwen3-4B | Qwen3-8B | Qwen3-32B |
|---|---|---|---|---|
| **LiveCodeBench-V6** | **76.9** | 57.4 | 49.4 | 55.7 |
| **AIME 2026 I** (matemáticas) | **87.4** | 81.5 | 70.4 | 75.8 |
| **GPQA** (ciencia) | **83.8** | 65.8 | 62.0 | 68.4 |
| **Arena-Hard-v2** (alineación) | **73.2** | 34.9 | 26.3 | 56.0 |
| **BFCL-V4** (uso de herramientas) | **56.5** | 44.9 | 42.2 | 47.9 |

Un modelo de 3B superando a Qwen3-32B en benchmarks de programación. Obtiene 56.5 en BFCL-V4 (uso de herramientas), lo cual importa porque OpenClaw depende del tool calling. También puede manejar más de 500 rondas de invocaciones de herramientas para tareas de búsqueda profunda. No conozco otro modelo de menos de 4B que pueda hacer eso.

### Cuándo Usarlo

- Tu máquina tiene 8GB de RAM y no tiene GPU
- Quieres un modelo de respaldo que use recursos mínimos
- Estás ejecutándolo en un Raspberry Pi 5 o placa ARM similar
- Necesitas un fallback de emergencia cuando tu modelo principal es demasiado lento

### Cuándo NO Usarlo

- Tienes hardware para modelos más grandes — los de 8B+ seguirán dando mejores resultados en tareas complejas
- Necesitas escritura creativa extensa o conversación con matices
- Estás haciendo refactorización pesada de código en múltiples archivos

### Instalar Nanbeige4.1-3B

El modelo está disponible a través de subidas comunitarias en Ollama. La versión más popular con soporte de herramientas:

```bash
ollama pull tomng/nanbeige4.1
```

También puedes importar el GGUF desde HuggingFace si quieres una cuantización específica:

```bash
# Download the Q4_K_M quantization (smallest useful size, ~2.3GB)
# From: huggingface.co/Edge-Quant/Nanbeige4.1-3B-Q4_K_M-GGUF

# Create a Modelfile
cat &gt; Modelfile &lt;&lt; &apos;EOF&apos;
FROM ./Nanbeige4.1-3B-Q4_K_M.gguf
PARAMETER temperature 0.6
PARAMETER top_p 0.95
PARAMETER repeat_penalty 1.0
TEMPLATE &quot;&quot;&quot;{{- if .System }}{{ .System }}{{ end }}
{{- range .Messages }}
{{- if eq .Role &quot;user&quot; }}
{{ .Content }}
{{- else if eq .Role &quot;assistant&quot; }}
{{ .Content }}
{{- end }}
{{- end }}&quot;&quot;&quot;
EOF

ollama create nanbeige4.1-3b -f Modelfile
```

---

## Configurar OpenClaw para Ollama

### Paso 1: Habilitar Ollama

Establece la variable de entorno que le dice a OpenClaw que busque Ollama:

```bash
export OLLAMA_API_KEY=&quot;ollama-local&quot;
```

O añádelo permanentemente a tu entorno de OpenClaw:

```bash
# Add to ~/.openclaw/.env
echo &apos;OLLAMA_API_KEY=ollama-local&apos; &gt;&gt; ~/.openclaw/.env
```

El valor no importa (Ollama no lo verifica), pero OpenClaw lo necesita configurado para habilitar el proveedor de Ollama.

### Paso 2: Verificar el Descubrimiento

OpenClaw descubre automáticamente los modelos de Ollama con soporte de herramientas. Comprueba lo que encontró:

```bash
openclaw models list --local
```

Deberías ver tus modelos descargados listados. Si un modelo no aparece, puede que no reporte soporte de herramientas. Aún puedes usarlo añadiendo configuración explícita (ver Paso 3).

### Paso 3: Establecer Tu Modelo

Para una configuración sencilla con un solo modelo:

```bash
openclaw models set ollama/qwen2.5-coder:32b
```

O edita tu archivo de configuración (`~/.openclaw/openclaw.json`):

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: {
        &quot;primary&quot;: &quot;ollama/qwen2.5-coder:32b&quot;
      }
    }
  }
}
```

### Paso 4: Configurar Fallbacks

Los fallbacks importan más con modelos locales porque un solo modelo puede ser demasiado lento o quedarse sin contexto. Configura una cadena:

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: {
        &quot;primary&quot;: &quot;ollama/qwen2.5-coder:32b&quot;,
        &quot;fallbacks&quot;: [
          &quot;ollama/qwen3:8b&quot;,
          &quot;ollama/tomng/nanbeige4.1&quot;
        ]
      }
    }
  }
}
```

Si el modelo de 32B se atasca con un contexto largo, OpenClaw pasa al de 8B, y luego a Nanbeige.

### Ejemplo de Configuración Completa (Hardware de Gama Media)

Aquí tienes una configuración completa para un Mac Mini de 32GB:

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: {
        &quot;primary&quot;: &quot;ollama/qwen2.5-coder:32b&quot;,
        &quot;fallbacks&quot;: [&quot;ollama/qwen3:8b&quot;]
      },
      &quot;imageModel&quot;: {
        &quot;primary&quot;: &quot;ollama/mistral-small3.2:24b&quot;
      }
    }
  }
}
```

### Ejemplo de Configuración Completa (Hardware de Gama Baja)

Para una máquina con 8GB de RAM o Raspberry Pi:

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: {
        &quot;primary&quot;: &quot;ollama/tomng/nanbeige4.1&quot;,
        &quot;fallbacks&quot;: [&quot;ollama/qwen3:1.7b&quot;]
      }
    }
  }
}
```

---

## Configuración Explícita del Proveedor (Ollama Remoto)

Si Ollama se ejecuta en una máquina diferente (por ejemplo, un servidor GPU en tu LAN), necesitas configuración explícita en lugar del descubrimiento automático:

```json
{
  &quot;models&quot;: {
    &quot;providers&quot;: {
      &quot;ollama&quot;: {
        &quot;baseUrl&quot;: &quot;http://192.168.1.50:11434&quot;,
        &quot;apiKey&quot;: &quot;ollama-local&quot;,
        &quot;api&quot;: &quot;ollama&quot;,
        &quot;models&quot;: [
          {
            &quot;id&quot;: &quot;qwen2.5-coder:32b&quot;,
            &quot;name&quot;: &quot;Qwen 2.5 Coder 32B&quot;,
            &quot;reasoning&quot;: false,
            &quot;input&quot;: [&quot;text&quot;],
            &quot;cost&quot;: { &quot;input&quot;: 0, &quot;output&quot;: 0, &quot;cacheRead&quot;: 0, &quot;cacheWrite&quot;: 0 },
            &quot;contextWindow&quot;: 32768,
            &quot;maxTokens&quot;: 8192
          }
        ]
      }
    }
  },
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: {
        &quot;primary&quot;: &quot;ollama/qwen2.5-coder:32b&quot;
      }
    }
  }
}
```

&lt;Notice type=&quot;warning&quot; title=&quot;Recordatorio de Seguridad&quot;&gt;
Si estás exponiendo Ollama a través de la red, asegúrate de que sea en una red de confianza (Tailscale, LAN detrás de firewall). Ollama no tiene autenticación integrada. Consulta la [guía de seguridad de OpenClaw](/es/guia-seguridad-openclaw/) para proteger tu configuración.
&lt;/Notice&gt;

---

## Configuración Híbrida: Local + API como Fallback

La configuración que realmente recomiendo es híbrida. Modelo local como principal, API económica como fallback para cuando el modelo local no da abasto. Obtienes privacidad y coste cero para el 90% de los mensajes, y la calidad de la API está ahí cuando la necesitas.

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: {
        &quot;primary&quot;: &quot;ollama/qwen2.5-coder:32b&quot;,
        &quot;fallbacks&quot;: [
          &quot;ollama/qwen3:8b&quot;,
          &quot;zai/glm-5&quot;
        ]
      }
    }
  }
}
```

Con esta configuración, OpenClaw prueba primero el modelo local de 32B. Si el contexto es demasiado largo o el modelo da error, pasa al de 8B local. Si ese también falla, recurre a la API de GLM-5 (que es barata). Puedes configurar GLM-5 o MiniMax M2.5 como tu fallback de API siguiendo la [guía de mejores modelos open source](/es/mejores-modelos-opensource-openclaw/).

---

## Cambiar de Modelo Sobre la Marcha

No tienes que reiniciar OpenClaw para cambiar de modelo. Usa el comando `/model` en el chat:

```
/model                        # Show available models
/model list                   # Full list with providers
/model ollama/qwen3:8b        # Switch to a different model
/model status                 # Check current model + auth
```

Útil para probar: descarga un nuevo modelo con `ollama pull`, y aparece automáticamente en `/model list` (con el descubrimiento automático habilitado).

---

## Ajuste de Rendimiento

### Ventana de Contexto

Ollama reporta la ventana de contexto desde los metadatos del modelo. Puedes sobreescribirla en la configuración explícita:

```json
{
  &quot;models&quot;: {
    &quot;providers&quot;: {
      &quot;ollama&quot;: {
        &quot;models&quot;: [{
          &quot;id&quot;: &quot;qwen2.5-coder:32b&quot;,
          &quot;contextWindow&quot;: 65536,
          &quot;maxTokens&quot;: 16384
        }]
      }
    }
  }
}
```

Las ventanas de contexto más grandes usan más VRAM. Si estás alcanzando los límites de memoria, reduce `contextWindow`.

### Ejecutar Múltiples Modelos

Ollama puede mantener múltiples modelos cargados si tienes suficiente VRAM. Configura `OLLAMA_NUM_PARALLEL` para controlar la concurrencia:

```bash
OLLAMA_NUM_PARALLEL=2 ollama serve
```

Con suficiente VRAM, puedes ejecutar un modelo de programación y uno general simultáneamente, alternando entre ellos con `/model` en OpenClaw.

### Capas de GPU

Si tienes una GPU pero no suficiente VRAM para el modelo completo, Ollama descarga automáticamente algunas capas a la CPU. Puedes controlar esto:

```bash
OLLAMA_GPU_LAYERS=35 ollama serve
```

Más capas en GPU = más rápido pero más VRAM. Experimenta para encontrar tu punto ideal.

---

## Solución de Problemas

&lt;Accordion label=&quot;Problemas Comunes&quot; group=&quot;troubleshooting&quot; expanded=&quot;true&quot;&gt;

**El modelo no aparece en `openclaw models list`**

El descubrimiento automático de OpenClaw solo muestra modelos con soporte de herramientas. Descarga un modelo compatible con herramientas o defínelo explícitamente en `models.providers.ollama`. Verifica con:
```bash
ollama list
curl http://localhost:11434/api/tags
```

**Las respuestas son extremadamente lentas**

Tu modelo probablemente se está ejecutando en CPU. Comprueba si el modelo cabe en tu VRAM/RAM disponible. Soluciones:
- Cambia a un modelo más pequeño (`qwen3:8b` en lugar de `qwen3:32b`)
- En Mac: cierra otras aplicaciones para liberar memoria unificada
- En Linux con GPU: comprueba `nvidia-smi` para ver el uso de VRAM

**Errores de &quot;Connection refused&quot;**

Ollama no está ejecutándose. Inícialo:
```bash
ollama serve
```
O en macOS, abre la aplicación Ollama. Verifica que la API es accesible:
```bash
curl http://localhost:11434/api/tags
```

**Las tool calls fallan o son ignoradas**

Puede que el modelo no soporte bien el tool calling. Cambia a un modelo que maneje bien las herramientas: `qwen2.5-coder`, `qwen3`, `gpt-oss`, o `llama3.3`. Evita modelos antiguos como `llama2` o `codellama` para OpenClaw.

**Crashes por falta de memoria**

El modelo es demasiado grande. Opciones:
- Descarga una cuantización más pequeña: `ollama pull qwen3:8b-q4_0`
- Cambia a un modelo más pequeño
- Añade más RAM/swap (no es ideal pero funciona)

**Nanbeige4.1-3B no encontrado**

Es una subida comunitaria, no está en la biblioteca oficial. Descárgalo con el namespace:
```bash
ollama pull tomng/nanbeige4.1
```

&lt;/Accordion&gt;

---

## Consideraciones de Seguridad

Ejecutar modelos localmente es inherentemente más privado que las llamadas a API, pero no te saltes lo básico:

- **Ollama no tiene autenticación**: cualquiera en tu red que pueda alcanzar el puerto 11434 puede usar tus modelos. Vincúlalo a localhost o usa un firewall.
- **Descargas de modelos**: Ollama descarga modelos desde ollama.com. Si te preocupa la seguridad, verifica los checksums de los modelos o usa instalaciones sin conexión.
- **Seguridad de OpenClaw**: los modelos locales no cambian el modelo de amenazas de OpenClaw. Sigue la [guía de hardening de seguridad](/es/guia-seguridad-openclaw/) para la configuración del gateway, modo sandbox y revisión de skills.

---

## Guías Relacionadas

- [Guía de Configuración de OpenClaw](/es/guia-configuracion-openclaw/) — instalación completa en VPS de Hetzner o Mac Mini
- [Mejores Modelos Open Source para OpenClaw](/es/mejores-modelos-opensource-openclaw/) — modelos basados en API (GLM-5, MiniMax M2.5) para cuando lo local no es suficiente
- [Búsqueda DuckDuckGo para OpenClaw](/es/busqueda-duckduckgo-openclaw/) — búsqueda web gratuita que combina bien con modelos locales
- [Guía de Seguridad de OpenClaw](/es/guia-seguridad-openclaw/) — proteger tu instancia, especialmente relevante cuando se ejecuta en una LAN
- [Mejores Dashboards de OpenClaw](/es/mejores-dashboards-openclaw/) — dashboards que muestran uso de modelos y coste (útil para rastrear el uso local a $0 vs gasto en fallback de API)
- [Alternativas a OpenClaw](/es/alternativas-openclaw/) — otras plataformas con su propio soporte de modelos locales

---

&lt;Accordion label=&quot;Preguntas Frecuentes&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

**¿Puedo ejecutar OpenClaw completamente offline con Ollama?**

Sí, una vez que los modelos estén descargados y OpenClaw esté instalado. No se necesita internet para la inferencia. No tendrás búsqueda web ni integraciones de canales (Telegram, WhatsApp), pero la CLI y las sesiones locales funcionan perfectamente.

**¿Qué modelo ofrece la mejor calidad por dólar?**

No hay dólares involucrados — Ollama es gratis. La pregunta es calidad por hardware. En un Mac Mini de 32GB, `qwen2.5-coder:32b` da los mejores resultados que he visto. Con 8GB de RAM, `nanbeige4.1-3b` es el mejor equilibrio entre velocidad y capacidad.

**¿Cómo se compara Nanbeige4.1-3B con modelos de API como GLM-5?**

GLM-5 sigue siendo mejor para tareas complejas, especialmente programación en múltiples pasos. Nanbeige4.1-3B es competitivo en benchmarks, pero el uso real de OpenClaw implica contextos largos y conversaciones de múltiples turnos donde los modelos más grandes tienen ventaja. Usa Nanbeige para tareas rápidas y mensajes, modelos de API para lo pesado.

**¿Puedo usar Ollama y proveedores de API al mismo tiempo?**

Sí, y lo recomiendo. Configura un modelo de Ollama como principal y un modelo de API económico como fallback. OpenClaw gestiona el cambio automáticamente cuando un modelo falla o no puede manejar el contexto.

**¿Funciona el tool calling con todos los modelos de Ollama?**

No. El descubrimiento automático de OpenClaw solo muestra modelos que reportan soporte de herramientas. Los modelos más antiguos y algunos más pequeños no lo soportan. Los modelos listados en esta guía todos soportan tool calling. Puedes verificarlo con `ollama show &lt;modelo&gt;` y buscar `tools` en las capacidades.

**¿Qué hay de ejecutar Ollama en un Raspberry Pi?**

Un Raspberry Pi 5 con 8GB de RAM puede ejecutar modelos de 1B-3B. Nanbeige4.1-3B o `qwen3:1.7b` son tus mejores opciones. Las respuestas serán lentas (2-5 tokens/segundo) pero funcionales para tareas simples. No esperes que maneje preguntas de programación.

**¿Es vLLM mejor que Ollama para OpenClaw?**

vLLM ofrece mejor throughput en configuraciones multi-GPU y cargas de trabajo en producción. Ollama es más sencillo de configurar y mejor para escenarios de un solo usuario. Para una instancia personal de OpenClaw, Ollama es la elección correcta. Si estás ejecutando múltiples agentes o necesitas inferencia concurrente, considera vLLM.

**¿Cuánta RAM necesito realmente para el modelo X?**

Fórmula aproximada: parámetros del modelo × 0.6GB para cuantización Q4. Así que un modelo de 7B necesita ~4.2GB, uno de 14B necesita ~8.4GB, uno de 32B necesita ~19.2GB. Añade 2-4GB de margen para el sistema y la sobrecarga de Ollama. Estos son mínimos — más RAM significa ventanas de contexto más grandes.

&lt;/Accordion&gt;

Los modelos locales con Ollama no van a reemplazar a Claude Opus para trabajo complejo. Pero cubren el 80-90% de lo que uso OpenClaw: responder mensajes, ejecutar cron jobs, búsquedas, automatizaciones. La configuración híbrida (local como principal + API como fallback) significa privacidad y coste cero la mayor parte del tiempo, con calidad de API cuando realmente la necesitas.

Empieza con el modelo que se ajuste a tu hardware. Si tienes un Mac Mini, ve directo a `qwen2.5-coder:32b`. Si estás en un VPS económico con 8GB de RAM, descarga Nanbeige4.1-3B y sorpréndete.

Para el resto del stack de OpenClaw: [guía de configuración](/es/guia-configuracion-openclaw/), [recomendaciones de modelos de API](/es/mejores-modelos-opensource-openclaw/), [búsqueda web gratuita](/es/busqueda-duckduckgo-openclaw/), [hardening de seguridad](/es/guia-seguridad-openclaw/), [dashboards](/es/mejores-dashboards-openclaw/) y [plataformas alternativas](/es/alternativas-openclaw/).</content:encoded><category>ai</category><category>ai-tools</category><category>openclaw</category><category>self-hosted</category></item><item><title>Funciones y Comandos Personalizados en Fish Shell</title><link>https://www.bitdoze.com/es/fish-shell-funciones-comandos-personalizados/</link><guid isPermaLink="true">https://www.bitdoze.com/es/fish-shell-funciones-comandos-personalizados/</guid><description>Cómo crear, editar, guardar y autocargar funciones en Fish Shell. Cubre event handlers, parseo de argumentos, scope y ejemplos prácticos.</description><pubDate>Mon, 23 Feb 2026 01:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;

Las funciones en Fish son la forma de construir comandos reutilizables. Si ya usaste funciones en Bash, la idea es la misma, pero la implementación de Fish es más limpia — sin llaves, manejo explícito de argumentos a través de `$argv`, y un sistema de carga diferida (lazy-loading) que mantiene el arranque rápido.

Uso funciones para todo, desde atajos rápidos hasta herramientas específicas de proyecto. Esta guía cubre cómo crearlas, guardarlas permanentemente y las características propias de Fish que las hacen más útiles que las funciones de Bash.

## Crear una función básica

```fish
function greet
    echo &quot;Hello, $argv&quot;
end
```

Ejecuta `greet World` e imprime `Hello, World`. La variable `$argv` contiene todos los argumentos pasados a la función. Puedes acceder a argumentos individuales con `$argv[1]`, `$argv[2]`, etc.

Esa función solo dura la sesión actual del shell. Cierra la terminal y desaparece. Enseguida explico cómo hacer funciones permanentes.

### Funciones con argumentos con nombre

Fish no tiene parámetros con nombre como Python, pero `--argument-names` ofrece algo parecido:

```fish
function mkcd --argument-names dir
    mkdir -p $dir
    cd $dir
end
```

Ahora `mkcd projects/new-app` crea el directorio y te mueve a él. El primer argumento se asigna a `$dir`. Los argumentos extra siguen disponibles a través de `$argv`.

Puedes listar múltiples nombres de argumento:

```fish
function connect --argument-names host port
    ssh -p $port $host
end
```

### Agregar una descripción

```fish
function ll --description &quot;List files in long format&quot;
    ls -la $argv
end
```

La descripción aparece cuando ejecutas `functions` o `type ll`. Es documentación para tu yo del futuro.

## Guardar funciones permanentemente

Fish tiene tres formas de conservar funciones entre sesiones.

### Método 1: funcsave (la forma Fish)

Crea una función interactivamente y luego guárdala:

```fish
function weather --argument-names city
    curl &quot;wttr.in/$city?format=3&quot;
end

funcsave weather
```

Esto guarda la función en `~/.config/fish/functions/weather.fish`. Fish la carga automáticamente cuando usas el comando en cualquier sesión futura — no al arrancar, sino bajo demanda. Esta carga diferida es la razón por la que Fish se mantiene rápido sin importar cuántas funciones guardadas tengas.

### Método 2: Crear el archivo directamente

Escribe el archivo de la función tú mismo:

```fish
# ~/.config/fish/functions/weather.fish
function weather --argument-names city
    curl &quot;wttr.in/$city?format=3&quot;
end
```

Mismo resultado que `funcsave`. Prefiero este método para funciones que quiero versionar con mis dotfiles.

### Método 3: Ponerla en config.fish

```fish
# ~/.config/fish/config.fish
function weather --argument-names city
    curl &quot;wttr.in/$city?format=3&quot;
end
```

Funciona, pero tiene dos desventajas: la función se carga en cada arranque del shell (no de forma diferida), y tu config.fish se hace más largo. Usa archivos de autocarga para cualquier función que no sea trivial.

&lt;Notice type=&quot;info&quot; title=&quot;Reglas de autocarga&quot;&gt;
Para que la autocarga funcione, el nombre del archivo debe coincidir con el nombre de la función. Una función llamada `weather` debe estar en `weather.fish`. Si el archivo contiene múltiples funciones, solo la que coincida con el nombre del archivo se autocargará.
&lt;/Notice&gt;

## Editar funciones

Fish tiene un editor de funciones integrado:

```fish
funced weather
```

Esto abre la función en `$EDITOR` (o `$VISUAL`). Cuando guardas y cierras el editor, Fish carga la función actualizada en tu sesión actual. Luego puedes hacerla permanente con `funcsave weather`.

Para ver la definición actual de una función sin editarla:

```fish
functions weather
# o
type weather
```

## Ejemplos prácticos de funciones

### Atajo de Git con valores por defecto

```fish
function gc --description &quot;Git commit with message&quot;
    if test (count $argv) -eq 0
        echo &quot;Usage: gc &lt;message&gt;&quot;
        return 1
    end
    git add --all
    git commit -m &quot;$argv&quot;
end
```

Uso: `gc &quot;fix login redirect&quot;` añade todo al staging y hace commit con ese mensaje.

### Cambio rápido de proyecto

```fish
function proj --argument-names name
    set -l base ~/projects
    if test -z &quot;$name&quot;
        ls $base
        return
    end
    if test -d $base/$name
        cd $base/$name
    else
        echo &quot;Project &apos;$name&apos; not found in $base&quot;
        return 1
    end
end
```

Ejecuta `proj` para listar proyectos, o `proj myapp` para saltar a `~/projects/myapp`. También puedes agregar completado con Tab:

```fish
# ~/.config/fish/completions/proj.fish
complete -c proj -f -a &quot;(ls ~/projects)&quot;
```

Ahora `proj` seguido de Tab lista tus directorios de proyecto. Consulta mi [guía de autocompletado](/es/fish-shell-autocompletado-sugerencias/) para más detalles sobre cómo escribir completions.

### Backup con marca de tiempo

```fish
function bak --argument-names file
    if test -z &quot;$file&quot;
        echo &quot;Usage: bak &lt;file&gt;&quot;
        return 1
    end
    cp $file $file.bak.(date +%Y%m%d-%H%M%S)
end
```

`bak config.yaml` crea `config.yaml.bak.20260224-141500`.

### Limpieza de Docker

```fish
function docker-clean --description &quot;Remove stopped containers, dangling images, unused volumes&quot;
    echo &quot;Removing stopped containers...&quot;
    docker container prune -f
    echo &quot;Removing dangling images...&quot;
    docker image prune -f
    echo &quot;Removing unused volumes...&quot;
    docker volume prune -f
end
```

## Event handlers

Las funciones pueden responder a eventos. Esto es útil para ejecutar código cuando cambian variables, cuando un comando termina o cuando Fish se cierra.

### Ejecutar código cuando cambia una variable

```fish
function __on_pwd_change --on-variable PWD
    if test -f .node-version
        echo &quot;Node version: &quot;(cat .node-version)
    end
end
```

Cada vez que cambias de directorio, esto verifica si existe un archivo `.node-version`. El flag `--on-variable PWD` dispara la función cada vez que `$PWD` cambia.

### Ejecutar código al salir de Fish

```fish
function __on_exit --on-event fish_exit
    echo &quot;Goodbye!&quot;
end
```

### Ejecutar código después de que un comando termina

```fish
function __notify_long_command --on-event fish_postexec
    if test $CMD_DURATION -gt 10000
        echo &quot;Command took &quot;(math $CMD_DURATION / 1000)&quot; seconds&quot;
    end
end
```

Esto imprime un aviso cuando cualquier comando tarda más de 10 segundos. `$CMD_DURATION` es una variable especial de Fish que contiene el tiempo de ejecución del último comando en milisegundos.

&lt;Notice type=&quot;warning&quot; title=&quot;Nombres de event handlers&quot;&gt;
Las funciones de event handler deberían empezar con doble guion bajo o un prefijo único para evitar colisiones de nombres. Además, los event handlers en archivos de autocarga no se dispararán hasta que la función se haya cargado una vez. Para handlers que necesiten funcionar desde el inicio, ponlos en `config.fish` o `conf.d/`.
&lt;/Notice&gt;

## Scope y visibilidad de variables

Las funciones tienen su propio scope local por defecto. Las variables definidas con `set -l` dentro de una función no son visibles fuera de ella:

```fish
function test_scope
    set -l secret &quot;hidden&quot;
    echo $secret
end
test_scope  # prints &quot;hidden&quot;
echo $secret  # prints nothing
```

Usa `set -g` para variables globales (visibles en toda la sesión) o `set -U` para variables universales (persisten en todas las sesiones de Fish):

```fish
set -g session_var &quot;I last until you close this terminal&quot;
set -U persistent_var &quot;I survive restarts&quot;
```

## Funciones vs abreviaturas vs alias

Fish tiene tres formas de crear atajos. Aquí cuándo usar cada una:

| | Funciones | Abreviaturas | Alias |
|---|---|---|---|
| Mejor para | Lógica compleja, comandos multilínea | Atajos de comandos simples | Wrapping simple de comandos |
| Expansión | Sin expansión, se ejecuta tal cual | Se expande en la línea de comandos antes de ejecutar | Se envuelve como función internamente |
| El historial muestra | Nombre de la función | Comando expandido | Nombre del alias |
| Argumentos | Manejo completo con `$argv` | Limitado (basado en posición/regex) | Pass-through con `$argv` |

Uso abreviaturas para atajos simples (`gs` → `git status`), y funciones para cualquier cosa que necesite lógica. Cubrí las abreviaturas vs alias en detalle en [Fish Shell abreviaturas vs alias](/es/fish-shell-abreviaturas-vs-alias/).

## Gestión de funciones

```fish
functions                    # list all defined functions
functions -n                 # list function names only
functions weather            # show a function&apos;s definition
functions -e weather         # erase a function
funcsave weather             # save to autoload file
funced weather               # edit in $EDITOR
```

Para eliminar una función guardada permanentemente:

```fish
functions -e weather
funcsave weather
```

El segundo comando escribe el estado &quot;borrado&quot;, eliminando el archivo de `~/.config/fish/functions/`.

## Guías relacionadas

- [Autocompletado y sugerencias en Fish Shell](/es/fish-shell-autocompletado-sugerencias/) — escribir completions personalizados para tus funciones
- [Fish Shell abreviaturas vs alias](/es/fish-shell-abreviaturas-vs-alias/) — cuándo usar cada uno
- [Mejores plugins de Fish Shell](/es/mejores-plugins-fish-shell/) — amplía Fish con Fisher y plugins de la comunidad
- [Fish Shell en macOS](/es/fish-shell-macos-configuracion/) — si estás configurando Fish en un Mac
- [Instalar Fish Shell en Ubuntu](/es/instalar-fish-shell-ubuntu/) — primeros pasos en Linux</content:encoded><category>linux</category><category>fish-shell</category></item><item><title>Abreviaturas vs Alias en Fish Shell - ¿Cuál es la Diferencia?</title><link>https://www.bitdoze.com/es/fish-shell-abreviaturas-vs-alias/</link><guid isPermaLink="true">https://www.bitdoze.com/es/fish-shell-abreviaturas-vs-alias/</guid><description>Fish Shell tiene abreviaturas y alias. Esta guía explica cómo funciona cada uno, cuándo usar cuál, y por qué las abreviaturas suelen ser la mejor opción.</description><pubDate>Sun, 22 Feb 2026 01:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;

Si vienes a Fish desde Bash o Zsh, probablemente configuraste alias para los comandos que usas con frecuencia. Fish también tiene alias, pero además tiene algo llamado abreviaturas, y funcionan de una manera diferente que importa.

Yo cambié todos mis alias por abreviaturas después de usar Fish durante una semana, y creo que la mayoría debería hacer lo mismo. Te explico por qué.

## ¿Qué son los alias en Fish?

Un alias en Fish funciona igual que en otros shells. Defines un atajo que se expande a un comando más largo:

```fish
alias gs=&quot;git status&quot;
alias ll=&quot;ls -la&quot;
alias dc=&quot;docker compose&quot;
```

Cuando escribes `gs` y presionas enter, Fish ejecuta `git status`. En tu historial de comandos, guarda `gs`, no `git status`.

Fish implementa los alias como funciones envolventes. Cuando ejecutas `alias gs=&quot;git status&quot;`, Fish crea una función llamada `gs` que ejecuta `git status`. Puedes verificarlo con:

```fish
type gs
# Output: gs is a function with definition
# function gs --wraps=&apos;git status&apos; --description &apos;alias gs=git status&apos;
#   git status $argv
# end
```

Para hacer los alias persistentes, agrégalos a `~/.config/fish/config.fish` o a un archivo en `~/.config/fish/conf.d/`.

## ¿Qué son las abreviaturas?

Las abreviaturas se ven similares cuando las defines:

```fish
abbr -a gs git status
abbr -a ll ls -la
abbr -a dc docker compose
```

La diferencia está en lo que pasa cuando las usas. Escribe `gs` y presiona espacio o enter, y Fish reemplaza `gs` con `git status` *en la línea de comandos* antes de ejecutarlo. Ves el texto completo `git status`, y eso es lo que queda en tu historial.

Es un sistema de expansión de texto, no un envoltorio de comandos. Tu abreviatura se activa, el texto en la línea de comandos cambia, y luego se ejecuta lo que quedó en la línea.

## Por qué las abreviaturas suelen ser mejores

### Tu historial se mantiene legible

Con alias, tu historial está lleno de códigos cortos. Alguien que mire `gs` en tu [historial](/es/fish-shell-historial-persistencia/) (o tú mismo, seis meses después) tiene que recordar qué significa `gs`. Con abreviaturas, el historial muestra `git status` porque eso es lo que realmente se ejecutó.

Esto también significa que la búsqueda en el historial con `Ctrl+R` funciona con los comandos reales. Busca &quot;git status&quot; y lo encontrarás, aunque hayas escrito `gs`.

### Otras personas pueden leer tu pantalla

Si compartes tu terminal (programación en pareja, grabaciones de pantalla, tutoriales), las abreviaturas muestran los comandos reales. Nadie tiene que descifrar tus atajos personales.

### Puedes editar antes de ejecutar

Después de que una abreviatura se expande, el texto completo está en tu línea de comandos y puedes modificarlo. Escribe `gs`, presiona espacio (se expande a `git status`), y luego agrega ` --short` al final. Con alias, no puedes insertar flags fácilmente en medio del comando aliasado.

### Sin sobrecarga de funciones

Los alias crean funciones envolventes. Las abreviaturas no — son puro reemplazo de texto. La diferencia es mínima en la práctica, pero las abreviaturas son conceptualmente más simples.

## Cuándo usar alias en su lugar

Los alias siguen siendo útiles en algunos casos:

**Cuando necesitas manipular argumentos del comando.** Si tu atajo necesita manipular argumentos de formas que van más allá del reemplazo de texto, una [función](/es/fish-shell-funciones-comandos-personalizados/) tiene más sentido:

```fish
# Esto necesita ser una función, no una abreviatura
function mkcd
    mkdir -p $argv[1] &amp;&amp; cd $argv[1]
end
```

**Cuando necesitas flags por defecto en comandos existentes.** Si quieres que `ls` siempre use `--color=auto`, un alias funciona:

```fish
alias ls=&quot;ls --color=auto&quot;
```

Podrías hacerlo con una abreviatura, pero la expansión sería visible cada vez, lo cual resulta molesto para comandos que ejecutas constantemente.

**Cuando quieres un nombre de comando completamente diferente** que no necesite mostrar su expansión. Algunas personas prefieren mantener sus atajos opacos.

## Funcionalidades de las abreviaturas

Las abreviaturas en Fish se han vuelto más potentes con el tiempo, especialmente en Fish 4.x. Estas son las opciones que vale la pena conocer.

### Posición: command vs. anywhere

Por defecto, las abreviaturas solo se expanden cuando están en posición de comando (la primera palabra en la línea):

```fish
abbr -a gs git status        # solo se expande como comando
abbr -a -p anywhere L &quot;| less&quot;   # se expande en cualquier parte de la línea
```

La abreviatura `L` te permite escribir `cat file.txt L` y se expande a `cat file.txt | less`.

### Abreviaturas específicas por comando

Desde Fish 4.0, las abreviaturas pueden restringirse a comandos específicos:

```fish
abbr -a --command git co checkout
abbr -a --command git br branch
abbr -a --command docker ps &quot;ps --format &apos;table {{.Names}}\t{{.Status}}&apos;&quot;
```

Ahora `co` solo se expande a `checkout` cuando el comando en la línea es `git`. Escribe `co` por sí solo y no pasa nada.

Esto es genial para flujos de trabajo con git. Puedes escribir `git co` y que se expanda a `git checkout` sin contaminar el espacio global de abreviaturas.

### Abreviaturas con regex

Puedes usar expresiones regulares para definir los disparadores de abreviaturas:

```fish
abbr -a --regex &apos;.+\.txt&apos; --position command --function vim_edit
```

Esto coincidiría con cualquier palabra que termine en `.txt` y la pasaría a través de una función personalizada. La documentación de Fish tiene más ejemplos de esto.

### Posición del cursor con --set-cursor

Puedes controlar dónde queda el cursor después de la expansión:

```fish
abbr -a gcm --set-cursor &quot;git commit -m &apos;%&apos;&quot;
```

Escribe `gcm`, presiona espacio, y se expande a `git commit -m &apos;&apos;` con tu cursor entre las comillas. El marcador `%` (el valor por defecto) se elimina y el cursor aterriza ahí.

### Abreviaturas basadas en funciones

Para expansiones dinámicas, puedes apuntar una abreviatura a una función:

```fish
function last_history_item
    echo $history[1]
end
abbr -a !! --position anywhere --function last_history_item
```

Esto recrea la funcionalidad `!!` de Bash (último comando). Escribe `sudo !!` y se expande a `sudo &lt;tu-último-comando&gt;`.

## Gestión de abreviaturas

```fish
abbr                   # listar todas las abreviaturas (la salida se puede reutilizar como comandos)
abbr --list            # listar solo los nombres de abreviaturas
abbr --erase gs        # eliminar una abreviatura
abbr --rename gs gst   # renombrar una abreviatura
```

### Guardar abreviaturas

La forma recomendada es poner tus comandos `abbr -a` en un archivo de configuración:

```fish
# ~/.config/fish/conf.d/abbreviations.fish
abbr -a gs git status
abbr -a ga git add
abbr -a gc git commit
abbr -a gp git push
abbr -a gd git diff
abbr -a gl git log --oneline
abbr -a dc docker compose
abbr -a dcu docker compose up -d
abbr -a dcd docker compose down
abbr -a k kubectl
```

También puedes exportar tus abreviaturas actuales a un archivo:

```fish
abbr &gt; ~/.config/fish/conf.d/abbreviations.fish
```

Esto las guarda en un formato que Fish puede cargar directamente.

## Mi configuración de abreviaturas

Esto es lo que uso realmente:

```fish
# Git
abbr -a gs git status
abbr -a ga git add
abbr -a gaa git add --all
abbr -a gc git commit
abbr -a gcm --set-cursor &quot;git commit -m &apos;%&apos;&quot;
abbr -a gp git push
abbr -a gl git log --oneline
abbr -a gco git checkout
abbr -a gd git diff
abbr -a gb git branch

# Docker
abbr -a dc docker compose
abbr -a dcu docker compose up -d
abbr -a dcd docker compose down
abbr -a dcl docker compose logs -f
abbr -a dps docker ps

# Navegación
abbr -a -p anywhere L &quot;| less&quot;
abbr -a -p anywhere G &quot;| grep&quot;

# Sistema
abbr -a sa sudo apt
abbr -a sai sudo apt install
```

Si estás configurando Fish por primera vez, revisa mi [guía de instalación de Fish Shell](/es/instalar-fish-shell-ubuntu/). Para plugins que complementan las abreviaturas, mira [los mejores plugins y herramientas para Fish Shell](/es/mejores-plugins-fish-shell/). Y para una visión más amplia de Fish comparado con otros shells, lee [Fish Shell vs Bash vs Zsh](/es/fish-shell-vs-bash-vs-zsh-comparacion/) o la comparación enfocada [Fish vs Zsh](/es/fish-shell-vs-zsh-comparacion/). También te puede interesar explorar [el autocompletado y sugerencias de Fish](/es/fish-shell-autocompletado-sugerencias/), que combinan muy bien con las abreviaturas.</content:encoded><category>linux</category><category>fish-shell</category></item><item><title>Guía de Autocompletado y Sugerencias en Fish Shell</title><link>https://www.bitdoze.com/es/fish-shell-autocompletado-sugerencias/</link><guid isPermaLink="true">https://www.bitdoze.com/es/fish-shell-autocompletado-sugerencias/</guid><description>Cómo funcionan las autosugerencias y el autocompletado con Tab en Fish Shell, cómo configurarlos y cómo escribir tus propias completaciones personalizadas.</description><pubDate>Sun, 22 Feb 2026 01:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;

Lo primero que la gente nota al abrir Fish son las autosugerencias. Empiezas a escribir y aparece texto gris después del cursor, prediciendo lo que quieres. Se siente como si el shell pudiera leer tu mente. Comparado con [Bash o Zsh](/es/fish-shell-vs-bash-vs-zsh-comparacion/), donde necesitas plugins para lograr algo parecido, Fish lo hace desde una instalación limpia.

Esta guía cubre cómo funcionan ambos sistemas — las autosugerencias (las predicciones grises en línea) y las completaciones con Tab (el menú que aparece al presionar Tab) — y cómo configurarlos y extenderlos.

## Autosugerencias

Las autosugerencias son el texto gris que aparece mientras escribes. Fish las obtiene de dos fuentes: tu historial de comandos y las completaciones disponibles (rutas de archivos, nombres de comandos, etc.). Las coincidencias del historial tienen prioridad, así que cuanto más uses un comando, más rápido aparece como sugerencia.

### Cómo aceptar sugerencias

- **Flecha derecha** — aceptar la sugerencia completa
- **Alt+Flecha derecha** (o `Alt+F`) — aceptar una palabra a la vez
- **Ctrl+F** — igual que flecha derecha, aceptar la sugerencia completa
- Seguir escribiendo — ignorar la sugerencia por completo

Aceptar palabra por palabra es útil cuando la sugerencia está cerca pero no es exactamente lo que quieres. Si Fish sugiere `git commit -m &quot;fix auth bug&quot;` y quieres `git commit -m &quot;fix login flow&quot;`, presiona `Alt+Right` tres veces para aceptar `git commit -m` y luego escribe tu propio mensaje.

### Cómo Fish clasifica las sugerencias

Fish elige sugerencias basándose en:

1. Comandos de tu historial que coinciden con lo que has escrito hasta ahora, los más recientes primero
2. Rutas de archivos y completaciones que coinciden con el contexto actual

Si ejecutaste `docker compose up -d` veinte veces esta semana, escribir `do` casi seguro te sugerirá ese comando completo.

### Desactivar autosugerencias

A algunas personas les resultan molestas. Desactívalas así:

```fish
set -g fish_autosuggestion_enabled 0
```

Agrega eso a `~/.config/fish/config.fish` para hacerlo permanente.

## Completaciones con Tab

Presiona Tab y Fish muestra las completaciones posibles en un menú tipo paginador debajo de tu línea de comandos. Cada completación viene con una descripción, así que no tienes que adivinar qué hace `-v` para un comando en particular.

### Cómo navegar el menú de completaciones

- **Tab** — abrir completaciones, o avanzar entre ellas
- **Shift+Tab** — retroceder
- **Teclas de flecha** — navegar la lista de completaciones
- **Enter** — seleccionar la completación resaltada
- **Ctrl+S** — abrir una búsqueda dentro del menú de completaciones (útil cuando hay muchos resultados)

### De dónde vienen las completaciones

Fish obtiene completaciones de varias fuentes:

**Páginas man.** Fish analiza las páginas man en segundo plano y genera completaciones para flags y opciones de comandos. Por eso `rsync --` seguido de Tab te muestra cada flag de `rsync` con descripciones, directamente sin configurar nada.

**Completaciones integradas.** Fish incluye scripts de completación escritos a mano para cientos de comandos: `git`, `docker`, `ssh`, `systemctl`, `apt`, `brew`, `npm`, y muchos más. Se almacenan en el directorio de datos de Fish (normalmente `/usr/share/fish/completions/`).

**Completaciones personalizadas.** Puedes escribir las tuyas propias. Más sobre esto más adelante.

**Rutas de archivos.** Fish completa nombres de archivos y directorios por defecto cuando no hay otras completaciones que coincidan.

### Forzar completación de archivos

A veces las completaciones inteligentes de Fish ocultan rutas de archivos. Presiona `Alt+E` (o `Alt+O` en algunos sistemas) para completar explícitamente una ruta de archivo, saltando las completaciones programadas.

## Escribir completaciones personalizadas

Aquí es donde el sistema de completaciones de Fish se pone interesante. Puedes agregar completaciones para tus propios scripts, herramientas internas, o comandos que no tienen buenas completaciones todavía.

Los archivos de completación van en `~/.config/fish/completions/` y se nombran según el comando: `mycommand.fish` para el comando `mycommand`.

### Ejemplo básico

Digamos que tienes un script llamado `deploy` que acepta los subcomandos `staging`, `production` y `rollback`:

```fish
# ~/.config/fish/completions/deploy.fish

# Desactivar completación de archivos (deploy no usa nombres de archivo)
complete -c deploy -f

# Agregar subcomandos
complete -c deploy -a &quot;staging production rollback&quot; -d &quot;Deployment target&quot;

# Agregar flags
complete -c deploy -s v -l verbose -d &quot;Verbose output&quot;
complete -c deploy -s d -l dry-run -d &quot;Show what would happen without doing it&quot;
```

Ahora `deploy` seguido de Tab muestra tus tres subcomandos, y `deploy --` muestra los dos flags.

### Completaciones según el contexto

Las completaciones pueden ser condicionales. Usa `-n` (condición) para mostrar ciertas completaciones solo en ciertos contextos:

```fish
# Solo mostrar estas cuando no se ha dado un subcomando todavía
complete -c deploy -n &quot;not __fish_seen_subcommand_from staging production rollback&quot; \
    -a &quot;staging production rollback&quot;

# Solo mostrar nombres de rama después de &quot;deploy staging&quot;
complete -c deploy -n &quot;__fish_seen_subcommand_from staging&quot; \
    -a &quot;(git branch --format=&apos;%(refname:short)&apos;)&quot; -d &quot;Git branch&quot;
```

La función auxiliar `__fish_seen_subcommand_from` verifica si alguna de las palabras dadas ha aparecido en la línea de comandos. Fish incluye varias funciones auxiliares como esta — revisa `/usr/share/fish/completions/git.fish` para un ejemplo real.

### Completaciones con datos dinámicos

El flag `-a` acepta sustituciones de comandos:

```fish
# Completar nombres de contenedores Docker en ejecución
complete -c myapp -l container \
    -a &quot;(docker ps --format &apos;{{.Names}}&apos;)&quot; \
    -d &quot;Container name&quot;

# Completar desde un archivo de configuración
complete -c myapp -l profile \
    -a &quot;(cat ~/.myapp/profiles | string split \\n)&quot; \
    -d &quot;Config profile&quot;
```

El comando dentro de `()` se ejecuta cada vez que presionas Tab, así que las completaciones se mantienen actualizadas.

## Ajustar el comportamiento de completación

### Colores de completación

Fish colorea el paginador de completaciones según estas variables:

```fish
set fish_color_search_match --background=yellow  # coincidencia resaltada
set fish_pager_color_completion normal             # texto de completación normal
set fish_pager_color_description grey              # texto de descripción
set fish_pager_color_prefix cyan --underline       # prefijo coincidente
```

También puedes configurarlos a través de `fish_config` en la interfaz del navegador.

### Rendimiento de completaciones

El análisis de páginas man ocurre en segundo plano cuando Fish arranca. Si instalas nuevos programas y sus completaciones no aparecen, ejecuta:

```fish
fish_update_completions
```

Esto regenera las completaciones desde las páginas man. Tarda unos pocos segundos.

### Sensibilidad a mayúsculas

La completación con Tab en Fish no distingue mayúsculas por defecto. Escribe `doc` y coincide tanto con `Documents/` como con `docker`. Si escribes una letra mayúscula, Fish cambia a coincidencia sensible a mayúsculas para esa completación.

## Autosugerencias vs completaciones con Tab

Estas son dos funcionalidades separadas que a veces se confunden:

| | Autosugerencias | Completaciones con Tab |
|---|---|---|
| Disparador | Automático mientras escribes | Presionar Tab |
| Visualización | Texto gris después del cursor | Menú debajo de la línea de comandos |
| Fuente | Historial + completaciones | Solo completaciones |
| Aceptar | Flecha derecha / Ctrl+F | Enter / Tab |
| Muestra opciones | Una sugerencia a la vez | Todas las opciones que coinciden |

Trabajan juntas. Las autosugerencias te dan recuperación rápida del historial sin detenerte. Las completaciones con Tab te dan una lista navegable cuando necesitas explorar opciones.

## Comparación con Zsh y Bash

En [Zsh](/es/fish-shell-vs-zsh-comparacion/), obtienes autosugerencias similares con el plugin `zsh-autosuggestions`. El sistema de completaciones `compinit` de Zsh es potente pero necesita configuración. La ventaja de Fish es que todo esto funciona sin configurar nada.

Bash tiene completación básica con Tab a través de `readline` y `bash-completion`. Funciona para casos simples pero no genera completaciones desde páginas man y no muestra descripciones.

Si quieres configurar Fish desde cero, consulta mi [guía de instalación en Ubuntu](/es/instalar-fish-shell-ubuntu/) o la [guía de configuración en macOS](/es/fish-shell-macos-configuracion/). Para plugins que mejoran aún más las completaciones de Fish, como fzf.fish para búsqueda difusa, revisa [los mejores plugins de Fish Shell](/es/mejores-plugins-fish-shell/).</content:encoded><category>linux</category><category>fish-shell</category></item><item><title>Guia de Despliegue de NanoClaw: Agente Claude Aislado en Contenedor en Tu VPS</title><link>https://www.bitdoze.com/es/guia-despliegue-nanoclaw/</link><guid isPermaLink="true">https://www.bitdoze.com/es/guia-despliegue-nanoclaw/</guid><description>Guia paso a paso para desplegar NanoClaw en un VPS Linux con integracion de WhatsApp, agent swarms y aislamiento en contenedores. Cubre configuracion de Docker, skills, tareas programadas y seguridad.</description><pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import YouTubeEmbed from &quot;@components/widgets/YouTubeEmbed.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

[NanoClaw](https://github.com/qwibitai/nanoclaw) me llamo la atencion porque maneja la seguridad de forma diferente a cualquier otro bot auto-alojado que he probado. En lugar de verificaciones de permisos a nivel de aplicacion, ejecuta cada agente en un contenedor Linux real. El agente solo puede ver lo que se monta explicitamente. Los comandos Bash se ejecutan dentro del contenedor, no en tu host. Tambien soporta [Agent Swarms](https://code.claude.com/docs/en/agent-teams), donde multiples agentes trabajan juntos en la misma tarea.

Esta guia te lleva paso a paso para desplegar NanoClaw en un VPS con integracion de WhatsApp, tareas programadas y aislamiento adecuado en contenedores.

&lt;Button text=&quot;NanoClaw en GitHub&quot; link=&quot;https://github.com/qwibitai/nanoclaw&quot; variant=&quot;solid&quot; color=&quot;purple&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre esta guia&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Instalar NanoClaw via el comando /setup de Claude Code&lt;/li&gt;
&lt;li&gt;Configuracion de contenedores Docker para aislamiento de agentes&lt;/li&gt;
&lt;li&gt;Configuracion del canal de WhatsApp con Baileys&lt;/li&gt;
&lt;li&gt;Configurar agent swarms para tareas multi-agente&lt;/li&gt;
&lt;li&gt;Sistema de skills y personalizacion&lt;/li&gt;
&lt;li&gt;Tareas programadas y aislamiento de contexto por grupo&lt;/li&gt;
&lt;li&gt;Modelo de seguridad y mejores practicas&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

Si estas comparando opciones de bots auto-alojados, nuestro articulo de [alternativas a OpenClaw](/es/alternativas-openclaw/) incluye NanoClaw junto con ZeroClaw, nanobot, memU y PicoClaw.


## Que es NanoClaw realmente

NanoClaw es una alternativa ligera a OpenClaw que se ejecuta sobre el Agent SDK de Claude. La diferencia clave con otros bots es el modelo de aislamiento. Los agentes se ejecutan en contenedores Linux (Docker en Linux/macOS, Apple Container en macOS) con directorios montados explicitamente. El agente no puede escapar del contenedor, y solo puede acceder a lo que tu permitas.

La arquitectura se ve asi:

```
WhatsApp (Baileys) --&gt; SQLite --&gt; Polling loop --&gt; Container (Claude Agent SDK) --&gt; Response
```

Un unico proceso Node.js. Colas de mensajes por grupo. IPC via sistema de archivos. Sin microservicios, sin colas de mensajes, sin capas de abstraccion. El codebase completo es lo suficientemente pequeño como para leerlo de una sentada.

### Como se compara

| | OpenClaw | nanobot | NanoClaw 🐾 |
|---|---|---|---|
| **Lenguaje** | TypeScript | Python | **TypeScript** |
| **Aislamiento** | Nivel de app | Nivel de app | **Nivel de contenedor** |
| **Agent SDK** | Personalizado | LiteLLM | **Claude Agent SDK** |
| **Agent Swarms** | No | No | **Si (primero)** |
| **Canales** | 4 plataformas | 9 plataformas | **6+ (via skills)** |
| **Instalacion** | Script personalizado | `pip install` | **Claude Code /setup** |
| **Personalizacion** | Archivos de config | Config + archivos | **Skills + codigo** |

## Filosofia: Por que existe NanoClaw

OpenClaw tiene 52+ modulos, 8 archivos de gestion de configuracion, 45+ dependencias, y abstracciones para 15 proveedores de canales. Todo se ejecuta en un proceso Node con memoria compartida. La seguridad es a nivel de aplicacion — listas de permitidos y codigos de emparejamiento, no aislamiento a nivel de SO.

NanoClaw toma un enfoque diferente:

**Lo suficientemente pequeño para entender.** Un proceso, unos pocos archivos fuente. El codebase es lo suficientemente pequeño como para que Claude Code te lo explique y lo modifique de forma segura.

**Seguro por aislamiento.** Los agentes se ejecutan en contenedores Linux. Solo pueden ver lo que se monta explicitamente. El acceso a Bash es seguro porque los comandos se ejecutan dentro del contenedor, no en tu host.

**Construido para un usuario.** Esto no es un framework. Es software funcional que forkeas y haces que Claude Code personalice para tus necesidades exactas.

**Nativo de IA.** Sin asistente de instalacion. Claude Code guia la configuracion. Sin panel de monitoreo. Preguntale a Claude que esta pasando. Sin herramientas de depuracion. Describe el problema, Claude lo arregla.

**Skills en lugar de funcionalidades.** Los contribuidores no agregan funcionalidades al codebase. Contribuyen skills de Claude Code como `/add-telegram` que transforman tu fork. Terminas con codigo limpio que hace exactamente lo que necesitas.

## Requisitos

Antes de empezar, asegurate de tener:

| Requisito | Por que |
|-----------|---------|
| macOS o Linux | NanoClaw se ejecuta en sistemas tipo Unix |
| Node.js 20+ | Entorno de ejecucion |
| [Claude Code](https://claude.ai/download) | Asistente de configuracion y orquestacion de agentes |
| Docker o Apple Container | Runtime de contenedores para aislamiento de agentes |
| Clave API de Anthropic | Acceso a Claude via Agent SDK |

Para esta guia de despliegue en VPS, asumo Ubuntu 24.04 con Docker.

## Instalacion

NanoClaw usa Claude Code para la configuracion. No hay un `npm install` o `pip install` como asistente. Clonas el repo y dejas que Claude se encargue de todo.

```bash
git clone https://github.com/qwibitai/NanoClaw.git
cd NanoClaw
claude
```

Luego ejecuta `/setup`. Claude Code se encarga de:

1. Instalar dependencias de Node.js
2. Autenticacion de WhatsApp
3. Deteccion y configuracion del runtime de contenedores
4. Configuracion del servicio
5. Configuracion inicial de skills

El proceso de configuracion es interactivo. Claude te hara preguntas y configurara todo basandose en tus respuestas.

&lt;Notice type=&quot;info&quot; title=&quot;Configuracion con Claude Code&quot;&gt;
NanoClaw esta diseñado alrededor de Claude Code como interfaz de configuracion. Si no has usado Claude Code antes, es la herramienta CLI de Anthropic que puede ejecutar comandos y modificar archivos. El comando `/setup` es un skill que guia toda la instalacion.
&lt;/Notice&gt;

## Aislamiento en contenedores

Esta es la principal caracteristica que diferencia a NanoClaw. Los agentes se ejecutan en contenedores, no en el proceso principal.

### Como funciona

Cuando envias un mensaje a NanoClaw:

1. El mensaje llega via WhatsApp (libreria Baileys)
2. El mensaje se almacena en SQLite con contexto de grupo
3. El bucle de polling recoge el mensaje
4. El container runner genera un contenedor aislado
5. El Claude Agent SDK procesa el mensaje dentro del contenedor
6. La respuesta se escribe en el sistema de archivos IPC
7. El proceso principal envia la respuesta de vuelta a WhatsApp

El contenedor no tiene acceso a red por defecto. Solo puede ver los directorios que montes explicitamente. Los comandos shell se ejecutan dentro del contenedor, asi que incluso si el agente intenta algo peligroso, esta contenido.

### Configuracion de Docker

En Linux, NanoClaw usa Docker para el aislamiento en contenedores. El container runner genera un nuevo contenedor para cada invocacion del agente:

```typescript
// src/container-runner.ts (simplified)
const container = await docker.createContainer({
  Image: &apos;nanoclaw-agent&apos;,
  Cmd: [&apos;node&apos;, &apos;agent-entrypoint.js&apos;],
  HostConfig: {
    Binds: [`${groupDir}:/workspace:rw`],
    NetworkMode: &apos;none&apos;, // No network by default
  },
});
```

Cada grupo tiene su propio directorio montado. El contenedor solo puede ver los archivos de ese grupo.

### Apple Container (macOS)

En macOS, puedes opcionalmente cambiar a Apple Container para un runtime nativo mas ligero:

```
/convert-to-apple-container
```

Esto modifica la configuracion para usar el runtime de contenedores de Apple en lugar de Docker. El modelo de aislamiento es el mismo, pero la sobrecarga es menor en macOS.

## Configuracion de WhatsApp

NanoClaw soporta WhatsApp, Telegram, Discord, Slack, Signal y operacion headless. WhatsApp via la libreria Baileys es el canal por defecto, con otros disponibles a traves de skills.

### Autenticacion

Ejecuta el comando de configuracion en Claude Code:

```
/setup
```

Claude te guiara a traves de la autenticacion de WhatsApp. El proceso genera un codigo QR que escaneas con tu telefono:

1. Abre WhatsApp en tu telefono
2. Ve a Configuracion → Dispositivos vinculados
3. Toca &quot;Vincular un dispositivo&quot;
4. Escanea el codigo QR mostrado por NanoClaw

La sesion de autenticacion se almacena localmente. Permaneceras conectado hasta que cierres sesion explicitamente o la sesion expire.

### Aislamiento de grupos

Cada grupo de WhatsApp tiene su propio contexto:

| Aislamiento | Que significa |
|-------------|---------------|
| `CLAUDE.md` | Cada grupo tiene su propio archivo de memoria |
| Sistema de archivos | Los archivos de cada grupo estan en directorios separados |
| Contenedor | Cada grupo se ejecuta en su propio sandbox de contenedor |
| Historial | Las conversaciones no se comparten entre grupos |

El canal principal (tu chat contigo mismo) es especial. Desde ahi puedes gestionar grupos y tareas:

```
@Andy list all scheduled tasks across groups
@Andy pause the Monday briefing task
@Andy join the Family Chat group
```

### Palabra de activacion

Por defecto, el bot responde a `@Andy`. Cambiala diciendole a Claude Code:

```
Change the trigger word to @Bob
```

O ejecuta `/customize` para cambios guiados.

## Agent Swarms

NanoClaw soporta [Agent Swarms](https://code.claude.com/docs/en/agent-teams), donde multiples agentes se reparten el trabajo en una sola solicitud.

### Que son los Agent Swarms

En lugar de que un agente maneje todo, puedes crear un equipo:

```
@Andy research the latest React patterns and have the code reviewer check if our codebase follows them
```

Esto podria generar:
- **Agente investigador**: Busca los ultimos patrones de React
- **Agente revisor de codigo**: Analiza tu codebase contra los patrones
- **Coordinador**: Sintetiza los hallazgos en una respuesta

Cada agente se ejecuta en su propio contenedor con acceso a las herramientas y archivos relevantes.

### Configurar swarms

Los agent swarms se configuran a traves de skills. Dile a Claude Code que tipo de equipo quieres:

```
Create a swarm for daily news briefing with separate agents for:
- Tech news fetching
- AI news fetching  
- Summary writing
```

Claude creara los archivos de skill y la configuracion necesarios.

## Sistema de skills

NanoClaw no usa archivos de configuracion para la personalizacion. Usa skills.

### Que son los skills

Los skills son instrucciones que le enseñan a Claude Code como transformar tu instalacion de NanoClaw. Son archivos Markdown en `.claude/skills/`:

```
.claude/skills/
├── add-telegram/SKILL.md
├── customize/SKILL.md
├── setup/SKILL.md
└── ...
```

### Skills incluidos

| Skill | Que hace |
|-------|----------|
| `/setup` | Instalacion y configuracion inicial |
| `/customize` | Personalizacion guiada del comportamiento |
| `/add-gmail` | Agregar integracion con Gmail |
| `/add-telegram` | Agregar Telegram como canal (contribuido) |
| `/add-slack` | Agregar integracion con Slack (contribuido) |
| `/create-skill` | Meta-skill para crear nuevos skills |

### Personalizar comportamiento

No hay archivos de configuracion que aprender. Solo dile a Claude Code lo que quieres:

```
Change the trigger word to @Bob
Remember to make responses shorter and more direct
Add a custom greeting when I say good morning
Store conversation summaries weekly
```

El codebase es lo suficientemente pequeño como para que Claude pueda modificarlo de forma segura. Cada personalizacion se convierte en parte de tu fork.

### Contribuir skills

**No agregues funcionalidades. Agrega skills.**

Si quieres agregar soporte para Telegram, no crees un PR que agregue Telegram junto a WhatsApp. En cambio, contribuye un archivo de skill que le enseñe a Claude Code como transformar una instalacion de NanoClaw para usar Telegram.

Los usuarios luego ejecutan `/add-telegram` en su fork y obtienen codigo limpio que hace exactamente lo que necesitan.

## Tareas programadas

NanoClaw tiene un planificador de tareas integrado para trabajos recurrentes.

### Crear tareas programadas

Dile al bot lo que quieres programar:

```
@Andy send an overview of the sales pipeline every weekday morning at 9am
@Andy review the git history for the past week each Friday and update the README if there&apos;s drift
@Andy every Monday at 8am, compile news on AI developments from Hacker News and TechCrunch and message me a briefing
```

El bot crea tareas programadas que ejecutan Claude y te pueden enviar mensajes de vuelta.

### Gestionar tareas

Desde el canal principal (tu chat contigo mismo):

```
@Andy list all scheduled tasks across groups
@Andy pause the Monday briefing task
@Andy resume the Friday git review
```

Las tareas se almacenan en SQLite y persisten entre reinicios.

## Sistema de memoria

Cada grupo tiene su propio archivo `CLAUDE.md` para memoria:

```
groups/
├── main/
│   └── CLAUDE.md
├── family-chat/
│   └── CLAUDE.md
└── work-team/
    └── CLAUDE.md
```

El agente lee este archivo al inicio de cada conversacion y puede actualizarlo. Dile que recuerde algo y lo escribe en el archivo.

### Archivos de contexto

Como otros bots en este espacio, NanoClaw usa archivos de workspace para dar forma al comportamiento:

| Archivo | Proposito |
|---------|-----------|
| `CLAUDE.md` | Memoria y contexto por grupo |
| `IDENTITY.md` | Quien es el agente |
| `SOUL.md` | Personalidad y valores centrales |

Estos son archivos Markdown simples que puedes editar directamente o hacer que Claude los modifique.

## Modelo de seguridad

La seguridad de NanoClaw se basa en aislamiento a nivel de SO, no en verificaciones a nivel de aplicacion.

### Sandboxing en contenedores

| Capa | Proteccion |
|------|------------|
| Red | Los contenedores no tienen red por defecto |
| Sistema de archivos | Solo los directorios montados explicitamente son visibles |
| Proceso | El proceso del contenedor no puede acceder a procesos del host |
| Usuario | El contenedor se ejecuta como usuario no-root |

Incluso si el agente intenta ejecutar comandos peligrosos, esta contenido. El sistema host esta protegido.

### Lo que aun deberias revisar

El aislamiento en contenedores es fuerte, pero aun deberias revisar:

1. **Que directorios montas** — Solo monta directorios que el agente realmente necesita
2. **Que skills instalas** — Los skills pueden modificar el codebase
3. **Tareas programadas** — Las tareas se ejecutan automaticamente con los permisos que tenga el agente

Ve `docs/SECURITY.md` en el repositorio para el modelo de seguridad completo.

## Despliegue en VPS

Para uso en produccion en un VPS, aqui tienes una configuracion de despliegue completa.

### Requisitos del servidor

| Especificacion | Minimo | Recomendado |
|----------------|--------|-------------|
| CPU | 1 nucleo | 2+ nucleos |
| RAM | 1GB | 2GB+ |
| Almacenamiento | 10GB | 20GB+ |
| SO | Ubuntu 22.04 | Ubuntu 24.04 |

NanoClaw en si es ligero. El principal consumidor de recursos es Docker para el aislamiento en contenedores.

### Despliegue rapido

```bash
ssh root@YOUR_SERVER_IP

# Update system
apt update &amp;&amp; apt upgrade -y

# Install Docker
curl -fsSL https://get.docker.com | sh
usermod -aG docker $USER

# Install Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs

# Install Claude Code
npm install -g @anthropic-ai/claude-code

# Clone NanoClaw
git clone https://github.com/qwibitai/NanoClaw.git
cd NanoClaw

# Run setup
claude
# Then type: /setup
```

### Servicio systemd

Crea un servicio systemd para inicio automatico:

```bash
cat &gt; /etc/systemd/system/nanoclaw.service &lt;&lt; &apos;EOF&apos;
[Unit]
Description=NanoClaw AI Assistant
After=docker.service network.target

[Service]
Type=simple
User=dragos
WorkingDirectory=/home/dragos/nanoclaw
ExecStart=/usr/bin/node dist/index.js
Restart=always
RestartSec=10
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable nanoclaw
systemctl start nanoclaw
```

### Variables de entorno

Crea un archivo `.env` con tus claves API:

```bash
ANTHROPIC_API_KEY=sk-ant-...
```

El proceso de configuracion te pedira esto, pero tambien puedes configurarlo manualmente.

## Solucion de problemas

NanoClaw esta diseñado para depurarse a traves de Claude Code. Sin visores de logs ni paneles de depuracion.

### Usando /debug

Si algo no funciona:

```
/debug
```

Claude Code analizara los logs, verificara la configuracion y sugerira soluciones. Si encuentra un problema que probablemente afecte a otros usuarios, puedes abrir un PR para modificar el skill de setup.

### Problemas comunes

&lt;Accordion label=&quot;Problemas comunes&quot; group=&quot;troubleshooting&quot; expanded=&quot;false&quot;&gt;

**WhatsApp no conecta**

Ejecuta `/debug` y Claude verificara:
- Validez del archivo de sesion
- Conectividad de red
- Estado de la libreria Baileys

Puede que necesites re-escanear el codigo QR si la sesion expiro.

**El contenedor no inicia**

Verifica que Docker este ejecutandose:
```bash
docker ps
```

Si Docker esta ejecutandose pero los contenedores no se generan, revisa los logs:
```bash
journalctl -u nanoclaw -f
```

**Las tareas programadas no se ejecutan**

Desde el canal principal:
```
@Andy why isn&apos;t the scheduler running?
```

El agente puede diagnosticar sus propios problemas del planificador.

**Las respuestas del agente son lentas**

El inicio del contenedor agrega latencia. Para respuestas mas rapidas:
- Usa una imagen base mas pequeña
- Habilita la reutilizacion de contenedores (avanzado)
- Verifica los limites de recursos de Docker

&lt;/Accordion&gt;

## Analisis profundo de la arquitectura

Para quienes quieran entender el codebase:

```
src/
├── index.ts           # Orchestrator: state, message loop, agent invocation
├── channels/
│   └── whatsapp.ts    # WhatsApp connection, auth, send/receive
├── ipc.ts             # IPC watcher and task processing
├── router.ts          # Message formatting and outbound routing
├── group-queue.ts     # Per-group queue with global concurrency limit
├── container-runner.ts # Spawns streaming agent containers
├── task-scheduler.ts  # Runs scheduled tasks
└── db.ts              # SQLite operations (messages, groups, sessions, state)
```

Patrones clave:

- **Proceso unico**: Todo se ejecuta en un unico proceso Node.js
- **Colas por grupo**: Cada grupo tiene su propia cola de mensajes con control de concurrencia
- **IPC via sistema de archivos**: La comunicacion entre el proceso principal y los contenedores usa archivos
- **Respuestas en streaming**: La salida del contenedor se transmite de vuelta a WhatsApp en tiempo real

## NanoClaw vs ZeroClaw vs nanobot

Uso los tres, asi que aqui va una comparacion directa:

| Aspecto | NanoClaw 🐾 | ZeroClaw 🦀 | nanobot 🐍 |
|---------|------------|------------|-----------|
| Lenguaje | TypeScript | Rust | Python |
| Aislamiento | Contenedores | Nivel de app | Nivel de app |
| Agent SDK | Claude Agent | Personalizado | LiteLLM |
| Agent Swarms | Si | No | No |
| Canales | 6+ (via skills) | 8+ | 9 |
| Metodo de instalacion | Claude Code | `cargo install` | `pip install` |
| Personalizacion | Skills | Config + codigo | Config + archivos |
| Uso de RAM | ~200MB | &lt; 5MB | ~100MB |

NanoClaw gana en aislamiento y capacidades de agente. ZeroClaw es mas eficiente en recursos. nanobot tiene soporte mas amplio de canales y la configuracion mas facil.

&lt;Accordion label=&quot;Preguntas frecuentes&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

**¿Por que solo WhatsApp?**

El autor usa WhatsApp. La idea es que forkees el proyecto y ejecutes un skill para cambiarlo si quieres otra cosa. Esa es la filosofia de diseño.

**¿Puedo ejecutar esto sin Docker?**

No. El aislamiento en contenedores es fundamental para el modelo de seguridad. El agente se ejecuta dentro de contenedores, no como parte del proceso principal.

**¿En que se diferencia de simplemente ejecutar Claude Code?**

Claude Code es un CLI interactivo. NanoClaw es un asistente siempre activo al que le envias mensajes desde tu telefono. Tiene memoria, tareas programadas y contexto de grupo que persiste entre conversaciones.

**¿Pueden varias personas usar una instancia de NanoClaw?**

Si, pero cada persona deberia estar en un grupo diferente. Los grupos estan aislados entre si. El canal principal (chat contigo mismo) es para control de administracion.

**¿Cuanto cuesta ejecutar NanoClaw?**

VPS: ~$5/mes en [Hetzner](https://go.bitdoze.com/hetzner) o [Hostinger](https://go.bitdoze.com/hostinger-vps). API de Claude: depende del uso. El Agent SDK usa tokens de Claude, asi que espera $10-50/mes para uso personal dependiendo de cuanto interactues con el.

**¿Puedo usar un LLM diferente?**

NanoClaw esta construido para el Agent SDK de Claude. No soporta otros LLMs de fabrica. Si quieres soporte multi-modelo con proveedores como [MiniMax M2.5 o GLM-5](/es/mejores-modelos-opensource-openclaw/), mira [nanobot](/es/guia-configuracion-nanobot/), [NullClaw](/es/guia-despliegue-nullclaw/) o [ZeroClaw](/es/guia-configuracion-zeroclaw/) en su lugar.

**¿Como agrego Telegram/Discord/Slack?**

Ejecuta el skill correspondiente:
```
/add-telegram
/add-slack
/add-discord
```

Estos son skills contribuidos que le enseñan a Claude Code como transformar tu instalacion.

&lt;/Accordion&gt;

Si quieres una alternativa basada en Zig que se ejecuta en hardware de $5 con 22+ proveedores, ve nuestra [guia de despliegue de NullClaw](/es/guia-despliegue-nullclaw/). Para una opcion basada en Python con soporte para MiniMax M2.5 y GLM-5, revisa la [guia de configuracion de nanobot](/es/guia-configuracion-nanobot/). Para un asistente auto-mejorante con modo de voz y migracion de OpenClaw, ve la [guia de configuracion de Hermes Agent](/es/guia-configuracion-hermes-agent/). Para recomendaciones de modelos que funcionan en estas plataformas, ve [mejores modelos open source para OpenClaw](/es/mejores-modelos-opensource-openclaw/).

Si quieres explorar otras herramientas de codificacion con IA, nuestra [comparacion de herramientas de codificacion con IA](/ai-coading-tools/) cubre el panorama actual. Para conceptos basicos de MCP que funcionan en todos estos asistentes, revisa la [introduccion a MCP para principiantes](/mcp-introduction-beginners/).

Este articulo tambien esta disponible en ingles: [NanoClaw Deploy Guide](/nanoclaw-deploy-guide/)</content:encoded><category>ai</category><category>ai-tools</category><category>self-hosted</category><category>vps</category></item><item><title>Guia de Despliegue de NullClaw: La Infraestructura de Asistente IA Mas Pequeña en Zig</title><link>https://www.bitdoze.com/es/guia-despliegue-nullclaw/</link><guid isPermaLink="true">https://www.bitdoze.com/es/guia-despliegue-nullclaw/</guid><description>Guia paso a paso para desplegar NullClaw en un VPS Linux. Cubre binario Zig, 22+ proveedores LLM, 17 canales de chat, memoria hibrida, sandboxing y ejecucion en hardware de $5.</description><pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import YouTubeEmbed from &quot;@components/widgets/YouTubeEmbed.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

[NullClaw](https://github.com/nullclaw/nullclaw) es el asistente de IA mas pequeño que he encontrado que todavia hace todo. Un unico binario estatico de 678 KB escrito en Zig, aproximadamente 1 MB de RAM en ejecucion. Sin runtime, sin VM, sin overhead de framework. Arranca en menos de 2 milisegundos y corre en cualquier cosa que tenga CPU, incluyendo placas ARM de $5.

Esta guia te lleva paso a paso para desplegar NullClaw en un VPS con tu eleccion de proveedor LLM, canales de chat, memoria hibrida y sandboxing adecuado.

&lt;Button text=&quot;NullClaw en GitHub&quot; link=&quot;https://github.com/nullclaw/nullclaw&quot; variant=&quot;solid&quot; color=&quot;purple&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre esta guia&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Compilar NullClaw desde el codigo fuente o usando Docker&lt;/li&gt;
&lt;li&gt;Configurar 22+ proveedores LLM via endpoints compatibles con OpenAI&lt;/li&gt;
&lt;li&gt;Configurar Telegram, Discord, Slack u otros 10 canales&lt;/li&gt;
&lt;li&gt;Sistema de memoria hibrida con SQLite FTS5 + busqueda vectorial&lt;/li&gt;
&lt;li&gt;Sandboxing multi-capa (Landlock, Firejail, Bubblewrap, Docker)&lt;/li&gt;
&lt;li&gt;Integracion con servidores MCP&lt;/li&gt;
&lt;li&gt;Ejecucion en hardware edge y placas de $5&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

Si estas comparando opciones de bots auto-alojados, nuestro articulo de [alternativas a OpenClaw](/es/alternativas-openclaw/) incluye NullClaw junto con ZeroClaw, nanobot, [NanoClaw](/es/guia-despliegue-nanoclaw/) y PicoClaw.


## Que es NullClaw realmente

NullClaw es un asistente de IA escrito completamente en Zig. El eslogan es &quot;null overhead, null compromise&quot; — un binario estatico con cero dependencias de runtime que corre en el hardware mas barato que puedas encontrar.

La arquitectura usa interfaces vtable para cada subsistema. ¿Quieres cambiar tu proveedor LLM? Cambia una linea de configuracion. Lo mismo para canales, backends de memoria, herramientas, tuneles, sandboxes y perifericos.

```
678 KB binary · &lt;2 ms startup · 3,230+ tests · 22+ providers · 17 channels · Pluggable everything
```

### Como se compara

| | [OpenClaw](https://github.com/openclaw/openclaw) | [nanobot](https://github.com/HKUDS/nanobot) | [ZeroClaw](https://github.com/zeroclaw-labs/zeroclaw) | **[NullClaw](https://github.com/nullclaw/nullclaw)** |
|---|---|---|---|---|
| **Lenguaje** | TypeScript | Python | Rust | **Zig** |
| **RAM** | &gt; 1 GB | &gt; 100 MB | &lt; 5 MB | **~1 MB** |
| **Arranque** | &gt; 500 s | &gt; 30 s | &lt; 10 ms | **&lt; 2 ms** |
| **Binario** | ~28 MB | N/A | 3.4 MB | **678 KB** |
| **Tests** | — | — | 1,017 | **3,230+** |
| **Canales** | 4 | 9 | 8+ | **17** |
| **Proveedores** | Varios | 13+ | 22+ | **22+** |
| **Hardware minimo** | Mac Mini $599 | Linux SBC ~$50 | Cualquier hardware de $10 | **Cualquier hardware de $5** |

Los numeros de benchmark se miden en hardware edge de 0.8 GHz. NullClaw arranca en menos de 8 milisegundos incluso en los targets mas lentos.

## Por que Zig

Zig es un lenguaje de programacion de sistemas que compila a rendimiento tipo C con cero overhead de runtime:

| Propiedad | Que significa para NullClaw |
|----------|---------------------------|
| Sin recolector de basura | Memoria deterministica, sin pausas |
| Sin asignaciones ocultas | Tu controlas cada byte |
| Binario estatico | Sin dependencias, soltar y ejecutar |
| Ejecucion en tiempo de compilacion | Validacion de config en tiempo de build |
| Compilacion cruzada | Compilar para ARM desde x86 |

Ese binario de 678 KB cubre el mismo conjunto de funciones que alternativas que pesan multiples gigabytes.

## Instalacion

Dos formas principales de instalar NullClaw.

&lt;Tabs&gt;
&lt;Tab name=&quot;Desde el codigo fuente (recomendado)&quot;&gt;

Necesitas Zig 0.15.2 (version exacta requerida):

```bash
# Install Zig (Linux)
curl -L https://ziglang.org/download/0.15.2/zig-linux-x86_64-0.15.2.tar.xz | tar -xJ
sudo mv zig-linux-x86_64-0.15.2 /usr/local/zig
sudo ln -s /usr/local/zig/zig /usr/local/bin/zig

# Clone and build
git clone https://github.com/nullclaw/nullclaw.git
cd nullclaw

# Release build (678 KB)
zig build -Doptimize=ReleaseSmall

# The binary is at zig-out/bin/nullclaw
ls -lh zig-out/bin/nullclaw
```

&lt;/Tab&gt;
&lt;Tab name=&quot;Docker&quot;&gt;

Si prefieres contenedores:

```bash
# Build the image
docker build -t nullclaw .

# Run
docker run -d \
  -v ~/.nullclaw:/root/.nullclaw \
  -p 3000:3000 \
  --name nullclaw \
  nullclaw
```

&lt;/Tab&gt;
&lt;/Tabs&gt;

Despues de compilar, ejecuta el asistente de configuracion:

```bash
# Quick setup (non-interactive)
nullclaw onboard --api-key sk-... --provider openrouter

# Or interactive wizard
nullclaw onboard --interactive
```

Esto crea `~/.nullclaw/` con un `config.json` y una carpeta de workspace.

Verifica que todo funciona:

```bash
nullclaw status
```

## Configurar proveedores LLM

NullClaw soporta 22+ proveedores de fabrica. Cada proveedor usa la interfaz compatible con OpenAI, asi que cambiar es solo un cambio de configuracion.

### Proveedores soportados

| Proveedor | Caso de uso |
|----------|----------|
| OpenRouter | Gateway a cualquier modelo |
| Anthropic | Modelos Claude |
| OpenAI | Modelos GPT |
| Ollama | Modelos locales |
| Venice | Enfocado en privacidad |
| Groq | Inferencia rapida |
| Mistral | Modelos Mistral |
| xAI | Modelos Grok |
| DeepSeek | Modelos DeepSeek |
| Together | Modelos open-source |
| Fireworks | Open-source rapido |
| Perplexity | Aumentado con busqueda |
| Cohere | Modelos Command |
| Bedrock | Modelos hosteados en AWS |
| Gemini | Google Gemini |
| Custom | Cualquier endpoint compatible con OpenAI |

### Obtener una clave API

Para OpenRouter (recomendado por flexibilidad):

1. Ve a [openrouter.ai](https://openrouter.ai)
2. Crea una cuenta y genera una clave API
3. La clave empieza con `sk-or-`

&lt;Notice type=&quot;success&quot; title=&quot;Plan de codificacion MiniMax — 10% de descuento&quot;&gt;
Si quieres usar MiniMax M2.5 o GLM-5 a traves de OpenRouter, revisa nuestros [enlaces de referido](/es/mejores-modelos-opensource-openclaw/) para descuentos en planes de codificacion.
&lt;/Notice&gt;

### Agregar a la configuracion

Edita `~/.nullclaw/config.json`:

```json
{
  &quot;default_provider&quot;: &quot;openrouter&quot;,
  &quot;default_temperature&quot;: 0.7,
  &quot;models&quot;: {
    &quot;providers&quot;: {
      &quot;openrouter&quot;: {
        &quot;api_key&quot;: &quot;sk-or-your-key&quot;
      }
    }
  },
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: {
        &quot;primary&quot;: &quot;anthropic/claude-sonnet-4&quot;
      }
    }
  }
}
```

### Usar proveedores personalizados

Cualquier endpoint compatible con OpenAI funciona:

```json
{
  &quot;models&quot;: {
    &quot;providers&quot;: {
      &quot;minimax&quot;: {
        &quot;api_key&quot;: &quot;your-minimax-key&quot;,
        &quot;base_url&quot;: &quot;https://api.minimax.chat/v1&quot;
      }
    }
  }
}
```

Luego configura `&quot;default_provider&quot;: &quot;minimax&quot;`.

### Modelos recomendados

Si buscas modelos rentables para emparejar con NullClaw, dos opciones open-source funcionan bien:

**[MiniMax M2.5](/es/mejores-modelos-opensource-openclaw/)** — Un modelo MoE de 230B con 10B parametros activos. Obtiene 80.2% en SWE-Bench Verified a una fraccion del costo de Claude ($0.15/M tokens de entrada). La variante Lightning corre a 100 tokens/seg. Disponible a traves de OpenRouter o directamente via la [API de MiniMax](https://go.bitdoze.com/minimax).

**[GLM-5](/es/mejores-modelos-opensource-openclaw/)** — Un modelo MoE de 744B de Z.AI con 40B parametros activos. 95.8% en SWE-bench Verified y casi cero alucinaciones. Disponible a traves de OpenRouter o [planes de codificacion Z.AI](https://z.ai/subscribe?ic=NKNUNYDRZT).

Ambos se cubren en detalle en nuestra [guia de configuracion de nanobot](/es/guia-configuracion-nanobot/), que explica la configuracion de claves API y proveedores. Los mismos modelos funcionan con NullClaw a traves de OpenRouter o endpoints directos del proveedor.

### Probar

```bash
nullclaw agent -m &quot;What&apos;s 42 * 17?&quot;
```

## Configuracion de canales

NullClaw soporta 17 canales de chat. Elige el que uses.

### Telegram

1. Crea un bot via [@BotFather](https://t.me/BotFather)
2. Copia el token del bot
3. Obtén tu ID de usuario de Telegram (envia mensaje a [@userinfobot](https://t.me/userinfobot))

Configuracion:

```json
{
  &quot;channels&quot;: {
    &quot;telegram&quot;: {
      &quot;accounts&quot;: {
        &quot;main&quot;: {
          &quot;bot_token&quot;: &quot;123456789:ABCdefGHIjklMNOpqrSTUvwxYZ&quot;,
          &quot;allow_from&quot;: [&quot;your_telegram_user_id&quot;],
          &quot;reply_in_private&quot;: true
        }
      }
    }
  }
}
```

&lt;Notice type=&quot;warning&quot; title=&quot;Comportamiento de la lista de permitidos&quot;&gt;
`allow_from` vacio significa **denegar todos**. Usa `[&quot;*&quot;]` para permitir a todos, o agrega IDs de usuario especificos para restringir el acceso.
&lt;/Notice&gt;

### Discord

1. Ve a [discord.com/developers/applications](https://discord.com/developers/applications)
2. Crea un bot y copia el token
3. Habilita **MESSAGE CONTENT INTENT** en la configuracion del Bot

Configuracion:

```json
{
  &quot;channels&quot;: {
    &quot;discord&quot;: {
      &quot;accounts&quot;: {
        &quot;main&quot;: {
          &quot;token&quot;: &quot;your-discord-bot-token&quot;,
          &quot;guild_id&quot;: &quot;your-server-id&quot;,
          &quot;allow_from&quot;: [&quot;your_user_id&quot;],
          &quot;allow_bots&quot;: false
        }
      }
    }
  }
}
```

### Slack

Configuracion:

```json
{
  &quot;channels&quot;: {
    &quot;slack&quot;: {
      &quot;accounts&quot;: {
        &quot;main&quot;: {
          &quot;bot_token&quot;: &quot;xoxb-your-bot-token&quot;,
          &quot;app_token&quot;: &quot;xapp-your-app-token&quot;,
          &quot;allow_from&quot;: [&quot;U1234567890&quot;]
        }
      }
    }
  }
}
```

### Otros canales

| Canal | Clave de config | Notas |
|---------|-----------|-------|
| iMessage | `imessage` | Solo macOS |
| Matrix | `matrix` | Requiere homeserver |
| WhatsApp | `whatsapp` | Via webhook de Meta |
| Signal | `signal` | Requiere Signal-cli |
| Line | `line` | LINE Messaging API |
| Webhook | `webhook` | Endpoint HTTP personalizado |
| IRC | `irc` | Libera, OFTC, etc. |
| Lark/Feishu | `lark` | Espacio de trabajo ByteDance |
| DingTalk | `dingtalk` | Espacio de trabajo Alibaba |
| QQ | `qq` | Via go-cqhttp |
| OneBot | `onebot` | Protocolo universal de bots |
| Email | `email` | IMAP/SMTP |
| MaixCam | `maixcam` | Hardware Sipeed |

## Ejemplo de configuracion completa

Aqui tienes un `~/.nullclaw/config.json` completo con OpenRouter, Telegram, memoria hibrida y sandboxing:

```json
{
  &quot;default_provider&quot;: &quot;openrouter&quot;,
  &quot;default_temperature&quot;: 0.7,

  &quot;models&quot;: {
    &quot;providers&quot;: {
      &quot;openrouter&quot;: { &quot;api_key&quot;: &quot;sk-or-...&quot; }
    }
  },

  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: { &quot;primary&quot;: &quot;anthropic/claude-sonnet-4&quot; },
      &quot;heartbeat&quot;: { &quot;every&quot;: &quot;30m&quot; }
    }
  },

  &quot;channels&quot;: {
    &quot;telegram&quot;: {
      &quot;accounts&quot;: {
        &quot;main&quot;: {
          &quot;bot_token&quot;: &quot;123:ABC&quot;,
          &quot;allow_from&quot;: [&quot;your_user_id&quot;]
        }
      }
    }
  },

  &quot;memory&quot;: {
    &quot;backend&quot;: &quot;sqlite&quot;,
    &quot;auto_save&quot;: true,
    &quot;embedding_provider&quot;: &quot;openai&quot;,
    &quot;vector_weight&quot;: 0.7,
    &quot;keyword_weight&quot;: 0.3,
    &quot;hygiene_enabled&quot;: true
  },

  &quot;gateway&quot;: {
    &quot;port&quot;: 3000,
    &quot;require_pairing&quot;: true,
    &quot;allow_public_bind&quot;: false
  },

  &quot;autonomy&quot;: {
    &quot;level&quot;: &quot;supervised&quot;,
    &quot;workspace_only&quot;: true,
    &quot;max_actions_per_hour&quot;: 20
  },

  &quot;runtime&quot;: {
    &quot;kind&quot;: &quot;native&quot;,
    &quot;docker&quot;: {
      &quot;image&quot;: &quot;alpine:3.20&quot;,
      &quot;network&quot;: &quot;none&quot;,
      &quot;memory_limit_mb&quot;: 512,
      &quot;read_only_rootfs&quot;: true
    }
  },

  &quot;security&quot;: {
    &quot;sandbox&quot;: { &quot;backend&quot;: &quot;auto&quot; },
    &quot;resources&quot;: { &quot;max_memory_mb&quot;: 512, &quot;max_cpu_percent&quot;: 80 },
    &quot;audit&quot;: { &quot;enabled&quot;: true, &quot;retention_days&quot;: 90 }
  },

  &quot;tunnel&quot;: { &quot;provider&quot;: &quot;none&quot; },
  &quot;secrets&quot;: { &quot;encrypt&quot;: true },
  &quot;identity&quot;: { &quot;format&quot;: &quot;openclaw&quot; }
}
```

## Sistema de memoria

La memoria de NullClaw esta construida sobre SQLite sin dependencias externas:

| Capa | Implementacion |
|-------|---------------|
| **Vector DB** | Embeddings almacenados como BLOB, busqueda por similitud coseno |
| **Busqueda por palabras clave** | Tablas virtuales FTS5 con puntuacion BM25 |
| **Fusion hibrida** | Pesos configurables vector/palabras clave |
| **Embeddings** | OpenAI, URL personalizada, o noop |
| **Higiene** | Archivado automatico + purga de memorias obsoletas |
| **Snapshots** | Exportar/importar para migracion |

Configuracion:

```json
{
  &quot;memory&quot;: {
    &quot;backend&quot;: &quot;sqlite&quot;,
    &quot;auto_save&quot;: true,
    &quot;embedding_provider&quot;: &quot;openai&quot;,
    &quot;vector_weight&quot;: 0.7,
    &quot;keyword_weight&quot;: 0.3,
    &quot;hygiene_enabled&quot;: true
  }
}
```

Configura `embedding_provider` a `noop` si no quieres pagar por embeddings. La busqueda por palabras clave FTS5 sigue funcionando.

### Archivos de identidad

NullClaw soporta dos formatos de identidad:

| Formato | Archivos | Caso de uso |
|--------|-------|----------|
| `openclaw` | `IDENTITY.md`, `SOUL.md`, `USER.md` | Basado en Markdown |
| `aieos` | Un solo archivo JSON | Personas de IA portables |

Edita estos en `~/.nullclaw/workspace/` para personalizar la personalidad del bot y su conocimiento sobre ti.

## Modelo de seguridad

NullClaw bloquea las cosas en multiples niveles, no solo listas de permitidos a nivel de aplicacion.

### Seguridad del gateway

| Capa | Por defecto | Que hace |
|-------|---------|-------------|
| Vinculacion a localhost | `127.0.0.1` | Rechaza exposicion publica |
| Emparejamiento requerido | `true` | Intercambio de codigo de 6 digitos por bearer token |
| Tunel requerido | `false` | Rechaza `0.0.0.0` sin tunel |

Para exponer el gateway, configura un tunel:

```json
{
  &quot;tunnel&quot;: {
    &quot;provider&quot;: &quot;cloudflare&quot;
  }
}
```

Tuneles soportados: Cloudflare, Tailscale, ngrok o binario personalizado.

### Aislamiento con sandbox

NullClaw auto-detecta el mejor backend de sandbox:

| Backend | Plataforma | Nivel de seguridad |
|---------|----------|---------------|
| Landlock | Linux 5.13+ | Nivel de kernel |
| Firejail | Linux | Namespaces |
| Bubblewrap | Linux | Contenedores ligeros |
| Docker | Cualquiera | Aislamiento completo por contenedor |

Configuracion:

```json
{
  &quot;security&quot;: {
    &quot;sandbox&quot;: { &quot;backend&quot;: &quot;auto&quot; }
  }
}
```

Configura `&quot;backend&quot;: &quot;docker&quot;` para maximo aislamiento.

### Secretos encriptados

Las claves API se encriptan con ChaCha20-Poly1305:

```json
{
  &quot;secrets&quot;: { &quot;encrypt&quot;: true }
}
```

La clave de encriptacion se almacena localmente en `~/.nullclaw/`.

### Alcance del workspace

Con `workspace_only = true`, el bot solo puede acceder a archivos dentro de su workspace. Los intentos de escape via symlink se bloquean mediante canonicalizacion de rutas.

## Soporte MCP

NullClaw soporta servidores de Model Context Protocol:

```json
{
  &quot;mcp_servers&quot;: {
    &quot;filesystem&quot;: {
      &quot;command&quot;: &quot;npx&quot;,
      &quot;args&quot;: [&quot;-y&quot;, &quot;@modelcontextprotocol/server-filesystem&quot;, &quot;/home/user/documents&quot;]
    }
  }
}
```

Las herramientas MCP se descubren y registran automaticamente. El bot puede usarlas junto con las herramientas integradas.

## Tareas programadas

NullClaw tiene un programador cron integrado:

```bash
# List scheduled tasks
nullclaw cron list

# Add a recurring task
nullclaw cron add --name &quot;morning&quot; --message &quot;What&apos;s on my calendar today?&quot; --cron &quot;0 9 * * *&quot;

# Run a task once
nullclaw cron run &lt;task_id&gt;

# Pause/resume
nullclaw cron pause &lt;task_id&gt;
nullclaw cron resume &lt;task_id&gt;
```

Las tareas se persisten en JSON y sobreviven a reinicios.

## Referencia del CLI

| Comando | Descripcion |
|---------|-------------|
| `nullclaw onboard --api-key sk-...` | Configuracion rapida |
| `nullclaw onboard --interactive` | Asistente completo |
| `nullclaw agent -m &quot;...&quot;` | Mensaje unico |
| `nullclaw agent` | Chat interactivo |
| `nullclaw gateway` | Iniciar servidor webhook |
| `nullclaw daemon` | Runtime autonomo completo |
| `nullclaw status` | Estado del sistema |
| `nullclaw doctor` | Diagnosticos |
| `nullclaw channel doctor` | Salud del canal |
| `nullclaw service install` | Instalar como servicio del sistema |
| `nullclaw cron list/add/remove` | Gestionar tareas programadas |
| `nullclaw skills list/install` | Gestionar packs de habilidades |
| `nullclaw hardware scan` | Detectar perifericos |
| `nullclaw migrate openclaw` | Importar desde OpenClaw |

## Despliegue en VPS

Para uso en produccion, aqui tienes una configuracion completa de VPS.

### Requisitos del servidor

| Especificacion | Minimo | Funciona con |
|------|---------|------------|
| CPU | Cualquiera | Core edge de 0.8 GHz |
| RAM | 256 MB | 1 GB+ recomendado |
| Almacenamiento | 1 GB | 10 GB para logs |
| OS | Linux | Ubuntu 22.04+ |

NullClaw corre en placas de $5. Lo probe en una Raspberry Pi Zero 2 W y funciono sin problemas.

### Despliegue rapido

```bash
ssh root@YOUR_SERVER_IP

# Update system
apt update &amp;&amp; apt upgrade -y

# Install Zig
curl -L https://ziglang.org/download/0.15.2/zig-linux-x86_64-0.15.2.tar.xz | tar -xJ
sudo mv zig-linux-x86_64-0.15.2 /usr/local/zig
sudo ln -s /usr/local/zig/zig /usr/local/bin/zig

# Clone and build
git clone https://github.com/nullclaw/nullclaw.git
cd nullclaw
zig build -Doptimize=ReleaseSmall

# Install binary
sudo cp zig-out/bin/nullclaw /usr/local/bin/

# Initialize
nullclaw onboard --interactive

# Edit config
nano ~/.nullclaw/config.json

# Start daemon
nullclaw daemon
```

### Servicio systemd

Para inicio automatico:

```bash
nullclaw service install
nullclaw service start
nullclaw service status
```

O crealo manualmente:

```ini
[Unit]
Description=NullClaw AI Assistant
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/nullclaw daemon
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
```

Guarda en `/etc/systemd/system/nullclaw.service`, luego:

```bash
systemctl daemon-reload
systemctl enable nullclaw
systemctl start nullclaw
```

### Ejecucion en hardware edge

El bajo consumo de recursos de NullClaw lo hace ideal para despliegue edge:

| Hardware | RAM | Estado |
|----------|-----|--------|
| Raspberry Pi Zero 2 W | 512 MB | ✅ Funciona |
| Raspberry Pi 4 | 2-8 GB | ✅ Funciona |
| Orange Pi Zero | 256 MB | ✅ Funciona |
| SBC de $5 en AliExpress | 256 MB | ✅ Funciona |
| MaixCam (RISC-V) | 256 MB | ✅ Soportado |

Compilar para ARM desde x86:

```bash
zig build -Dtarget=aarch64-linux -Doptimize=ReleaseSmall
```

## API del Gateway

| Endpoint | Metodo | Auth | Descripcion |
|----------|--------|------|-------------|
| `/health` | GET | Ninguna | Chequeo de salud |
| `/pair` | POST | `X-Pairing-Code` | Intercambiar codigo por token |
| `/webhook` | POST | Bearer token | Enviar mensaje |
| `/whatsapp` | GET | Parametros de query | Verificacion de webhook de Meta |
| `/whatsapp` | POST | Firma de Meta | WhatsApp entrante |

Flujo de emparejamiento:

```bash
# Start gateway (shows pairing code)
nullclaw gateway

# Exchange code for token
curl -X POST http://127.0.0.1:3000/pair \
  -H &quot;X-Pairing-Code: 123456&quot;

# Use token for requests
curl -X POST http://127.0.0.1:3000/webhook \
  -H &quot;Authorization: Bearer YOUR_TOKEN&quot; \
  -H &quot;Content-Type: application/json&quot; \
  -d &apos;{&quot;message&quot;: &quot;Hello, nullclaw!&quot;}&apos;
```

## NullClaw vs ZeroClaw vs nanobot

Uso los tres, asi que aqui va una comparacion directa:

| Aspecto | NullClaw 🟠 | ZeroClaw 🦀 | nanobot 🐍 |
|--------|------------|------------|-----------|
| Lenguaje | Zig | Rust | Python |
| Uso de RAM | ~1 MB | &lt; 5 MB | ~100 MB |
| Arranque | &lt; 2 ms | &lt; 10 ms | &gt; 2 s |
| Tamaño del binario | 678 KB | 3.4 MB | N/A |
| Cantidad de canales | 17 | 8+ | 9 |
| Cantidad de proveedores | 22+ | 22+ | 13+ |
| Memoria | Hibrida SQLite | Hibrida SQLite | Basada en archivos |
| Seguridad | Sandbox + emparejamiento | Emparejamiento + sandbox | Listas de permitidos |
| Hardware minimo | Placa de $5 | Placa de $10 | SBC de $50 |
| Metodo de instalacion | `zig build` | `cargo install` | `pip install` |

NullClaw es la opcion mas ligera aqui. ZeroClaw es mas facil de configurar si ya estas en el ecosistema Rust. nanobot tiene el soporte de canales mas amplio.

&lt;Accordion label=&quot;Preguntas frecuentes&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

**¿Cuanto cuesta ejecutar NullClaw?**

Hardware: $5 por una placa ARM barata, o $0 si ya tienes un VPS de [Hetzner](https://go.bitdoze.com/hetzner) o [Hostinger](https://go.bitdoze.com/hostinger-vps). Los costos de API dependen de tu proveedor — espera $5-50/mes para uso personal.

**¿Puedo ejecutar NullClaw sin costos de API?**

Si. Configura Ollama como tu proveedor y apuntalo a un modelo local. Necesitas hardware que pueda ejecutar inferencia, pero no hay facturas de API.

**¿NullClaw funciona en una Raspberry Pi Zero?**

Si. La Pi Zero 2 W de 512 MB ejecuta NullClaw sin problemas. La Pi Zero original (un solo nucleo) podria tener dificultades con la inferencia pero el asistente en si funciona.

**¿Pueden varias personas usar una instancia de NullClaw?**

Si. Agrega multiples IDs de usuario a `allow_from`. Cada persona obtiene su propio contexto de conversacion.

**¿Cual es la diferencia entre gateway y daemon?**

`nullclaw gateway` inicia solo el servidor webhook. `nullclaw daemon` inicia el runtime autonomo completo incluyendo todos los canales, tareas de heartbeat y el programador.

**¿Puedo migrar de OpenClaw a NullClaw?**

Si. NullClaw tiene un comando de migracion integrado:

```bash
nullclaw migrate openclaw --dry-run
nullclaw migrate openclaw
```

**¿Como agrego un nuevo canal que no esta soportado?**

Implementa la interfaz vtable `Channel` en `src/channels/` y envia un PR. La arquitectura esta diseñada para extensiones.

&lt;/Accordion&gt;

Si estas comparando aislamiento basado en contenedores, revisa nuestra [guia de despliegue de NanoClaw](/es/guia-despliegue-nanoclaw/) — usa contenedores Docker con el Agent SDK de Claude. Para una alternativa basada en Python con guias de configuracion de MiniMax y GLM-5, revisa la [guia de configuracion de nanobot](/es/guia-configuracion-nanobot/).

Si quieres explorar otras herramientas de codificacion con IA, nuestra [comparacion de herramientas de codificacion con IA](/ai-coading-tools/) cubre el panorama actual. Para conceptos basicos de MCP que funcionan en todos los asistentes, revisa la [introduccion a MCP para principiantes](/mcp-introduction-beginners/).

Este articulo tambien esta disponible en ingles: [NullClaw Deploy Guide](/nullclaw-deploy-guide/)</content:encoded><category>ai</category><category>ai-tools</category><category>self-hosted</category><category>vps</category></item><item><title>Mejores Plugins y Herramientas de Fish Shell (Oh My Fish, Fisher)</title><link>https://www.bitdoze.com/es/mejores-plugins-fish-shell/</link><guid isPermaLink="true">https://www.bitdoze.com/es/mejores-plugins-fish-shell/</guid><description>Una guía de los plugins, gestores de plugins y herramientas más útiles de Fish Shell, incluyendo Fisher, Tide, fzf.fish y otras extensiones que vale la pena instalar.</description><pubDate>Sat, 21 Feb 2026 01:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;

Fish ya hace bastante sin plugins. [Autosugerencias](/es/fish-shell-autocompletado-sugerencias/), [resaltado de sintaxis](/es/fish-shell-resaltado-sintaxis/) y completados de páginas man vienen integrados. Eso significa que el ecosistema de plugins es más pequeño que el de Zsh, pero más enfocado. Estás añadiendo herramientas específicas en lugar de parchear funcionalidades que faltan.

Llevo usando Fish a diario y he probado bastantes plugins. Aquí está lo que realmente mantengo instalado y recomiendo.

Si eres nuevo en Fish, empieza con mi [guía de instalación para Ubuntu](/es/instalar-fish-shell-ubuntu/) primero.

## Gestores de plugins: Fisher vs Oh My Fish

Necesitas un gestor de plugins antes de poder instalar cualquier cosa. Hay dos opciones, pero la elección es sencilla.

### Fisher (recomendado)

[Fisher](https://github.com/jorgebucaran/fisher) es un gestor de plugins ligero escrito completamente en Fish. Instala los plugins copiando funciones y completados directamente en tu directorio de configuración de Fish. Sin framework, sin sobrecarga al iniciar.

Instálalo:

```fish
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source &amp;&amp; fisher install jorgebucaran/fisher
```

Uso básico:

```fish
fisher install author/plugin    # instalar un plugin
fisher update                   # actualizar todos los plugins
fisher remove author/plugin     # eliminar un plugin
fisher list                     # listar plugins instalados
```

Fisher registra los plugins instalados en `~/.config/fish/fish_plugins`. Puedes poner este archivo bajo control de versiones y ejecutar `fisher update` en una máquina nueva para recrear tu configuración.

### Oh My Fish

[Oh My Fish](https://github.com/oh-my-fish/oh-my-fish) (OMF) es un framework similar a Oh My Zsh. Tiene su propio repositorio de paquetes con temas y plugins, y proporciona una herramienta de línea de comandos (`omf`) para gestionarlos.

Instálalo:

```fish
curl https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install | fish
```

Uso:

```fish
omf install plugin-name    # instalar un plugin
omf theme theme-name       # aplicar un tema
omf update                 # actualizar todo
omf list                   # listar paquetes instalados
```

**La opinión honesta:** Oh My Fish lleva un tiempo sin mantenimiento. El repositorio de GitHub tiene una advertencia al respecto. Algunos paquetes funcionan bien, otros están rotos. Yo no empezaría una instalación nueva de Fish con OMF hoy. Fisher tiene mantenimiento activo, es más rápido y puede incluso instalar plugins compatibles con OMF. Si aún quieres probarlo, tengo una [guía completa de Oh My Fish](/es/oh-my-fish-instalar-temas-plugins/).

&lt;Notice type=&quot;warning&quot; title=&quot;Estado de Oh My Fish&quot;&gt;
La página de GitHub de Oh My Fish indica que lleva años sin mantenimiento y algunos paquetes están rotos. Para instalaciones nuevas, usa Fisher.
&lt;/Notice&gt;

## Plugins de prompt

### Tide

[Tide](https://github.com/IlanCosman/tide) es el prompt nativo de Fish más popular. Renderiza de forma asíncrona (así que tu prompt nunca se ralentiza), tiene un asistente de configuración y muestra el estado de git, directorio actual, versiones de runtime y duración de comandos.

```fish
fisher install IlanCosman/tide@v6
tide configure
```

El asistente te guía por las opciones de estilo: powerline vs. plano, iconos vs. texto, una línea vs. dos líneas. El resultado se ve pulido sin ninguna configuración manual.

Tide necesita una [Nerd Font](https://www.nerdfonts.com/) para los iconos. Recomiendo MesloLGS NF, que es la que sugiere la documentación de Tide. Instala la fuente, configúrala en tu emulador de terminal, y listo.

Si quieres un prompt que funcione en Fish, Zsh y Bash, mira [Starship con Fish Shell](/es/fish-shell-configurar-starship/) en su lugar. Tide es solo para Fish pero está más profundamente integrado con las funcionalidades de Fish.

### Hydro

[Hydro](https://github.com/jorgebucaran/hydro) es un prompt minimalista hecho por el autor de Fisher. Muestra rama de git, duración de comandos y estado de salida con casi cero sobrecarga. Bueno si prefieres algo limpio y rápido antes que lleno de funcionalidades.

```fish
fisher install jorgebucaran/hydro
```

No necesita configuración. Simplemente funciona con valores predeterminados razonables.

Para una comparación completa de opciones de prompt de Fish incluyendo Tide, Hydro, Starship y Pure, revisa mi [guía de temas y prompts de Fish Shell](/es/fish-shell-temas-prompts/).

## Plugins de búsqueda y navegación

### fzf.fish

[fzf.fish](https://github.com/PatrickF1/fzf.fish) agrega búsqueda difusa a tu Fish shell usando [fzf](https://github.com/junegunn/fzf). Obtienes búsqueda interactiva para historial de comandos, rutas de archivos, git log, git status y procesos.

Instala fzf primero, luego el plugin:

```fish
# Instalar fzf (Ubuntu)
sudo apt install fzf

# O en macOS
brew install fzf

# Instalar el plugin de Fish
fisher install PatrickF1/fzf.fish
```

Atajos de teclado predeterminados:
- `Ctrl+R` - buscar en el historial de comandos (reemplaza la búsqueda integrada de Fish con una mejor)
- `Ctrl+Alt+F` - buscar rutas de archivos
- `Ctrl+Alt+L` - buscar en git log
- `Ctrl+Alt+S` - buscar en git status
- `Ctrl+Alt+P` - buscar procesos en ejecución

Este es probablemente el plugin de Fish más útil que existe. Si no instalas nada más, instala este.

### zoxide

[Zoxide](https://github.com/ajeetdsouza/zoxide) no es un plugin de Fish, es una herramienta independiente que reemplaza `cd` con una alternativa más inteligente. Aprende qué directorios visitas y te permite saltar a ellos con nombres parciales. Escribe `z proj` en lugar de `cd ~/Documents/work/projects`.

```fish
# Instalar
sudo apt install zoxide  # o: brew install zoxide

# Agregar a tu configuración de Fish
# En ~/.config/fish/config.fish:
zoxide init fish | source
```

Tengo una guía completa sobre [zoxide](/zoxide/) que cubre la configuración y el uso. Funciona con Fish, Zsh y Bash.

## Plugins de Git

### fish-git-util

Si usas Tide o Hydro, la información de git ya está en tu prompt. Pero si quieres abreviaturas y helpers de git independientes, hay algunas opciones.

El enfoque más simple es definir tus propias abreviaturas:

```fish
# Agregar a ~/.config/fish/conf.d/git.fish
abbr -a gs git status
abbr -a ga git add
abbr -a gc git commit
abbr -a gp git push
abbr -a gl git log --oneline
abbr -a gco git checkout
abbr -a gb git branch
abbr -a gd git diff
```

Las abreviaturas se expanden cuando presionas espacio o enter, así que ves el comando completo en tu historial. Explico por qué esto importa en [abreviaturas vs alias de Fish Shell](/es/fish-shell-abreviaturas-vs-alias/).

## Gestión de Node y versiones

### nvm.fish

[nvm.fish](https://github.com/jorgebucaran/nvm.fish) es un gestor de versiones de Node.js creado para Fish. Es más ligero que el nvm basado en Bash e inicia más rápido porque se carga de forma diferida. Tengo una [guía detallada de NVM con Fish Shell](/es/nvm-fish-shell/) que cubre la configuración y el uso.

```fish
fisher install jorgebucaran/nvm.fish
```

Uso:

```fish
nvm install 22       # instalar Node 22
nvm use 22          # cambiar a Node 22
nvm list            # listar versiones instaladas
nvm current         # mostrar versión activa
```

También lee archivos `.nvmrc` y `.node-version` automáticamente cuando entras en un directorio.

## Otros plugins útiles

### autopair.fish

[autopair.fish](https://github.com/jorgebucaran/autopair.fish) cierra automáticamente corchetes, comillas y paréntesis mientras escribes. Presiona `(` e inserta `()` con el cursor entre medias.

```fish
fisher install jorgebucaran/autopair.fish
```

Una pequeña mejora de calidad de vida.

### sponge

[sponge](https://github.com/meaningful-ooo/sponge) elimina automáticamente los comandos fallidos de tu historial de Fish. Si un comando sale con error, no contamina tu [historial y autosugerencias](/es/fish-shell-historial-persistencia/).

```fish
fisher install meaningful-ooo/sponge
```

### puffer-fish

[puffer-fish](https://github.com/nickeb96/puffer-fish) expande `..` a `../..` y `...` a `../../..` mientras escribes. Presiona `.` dos veces y sigue añadiendo referencias al directorio padre.

```fish
fisher install nickeb96/puffer-fish
```

## Mi configuración recomendada

Si estoy configurando Fish en una máquina nueva, esto es lo que instalo:

```fish
# Gestor de plugins
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source &amp;&amp; fisher install jorgebucaran/fisher

# Prompt (elige uno)
fisher install IlanCosman/tide@v6
# O para cross-shell: instala Starship por separado

# Plugins imprescindibles
fisher install PatrickF1/fzf.fish
fisher install jorgebucaran/autopair.fish
fisher install meaningful-ooo/sponge
fisher install nickeb96/puffer-fish
```

Más zoxide instalado por separado. Eso me da un shell rápido y funcional con búsqueda difusa, navegación inteligente de directorios y un buen prompt. Toda la configuración lleva unos cinco minutos.

## Comparación con plugins de Zsh

Si vienes de Zsh y te preguntas cuáles son los equivalentes:

| Plugin/herramienta de Zsh | Equivalente en Fish |
|---|---|
| Oh My Zsh | Fisher (gestor de plugins) |
| Powerlevel10k | Tide |
| zsh-autosuggestions | Integrado en Fish |
| zsh-syntax-highlighting | Integrado en Fish |
| zsh-completions | Integrado en Fish (análisis de páginas man) |
| fzf (integración Zsh) | fzf.fish |
| zoxide (Zsh) | zoxide (misma herramienta, init para Fish) |
| nvm | nvm.fish |

Tengo una [comparación detallada de Fish vs Zsh](/es/fish-shell-vs-zsh-comparacion/) y un artículo más amplio de [Fish vs Bash vs Zsh](/es/fish-shell-vs-bash-vs-zsh-comparacion/) si quieres más contexto sobre las diferencias. Para usuarios de Zsh, también tengo una lista de los [mejores plugins de Oh My Zsh](/best-oh-my-zsh-plugins/) para comparar.</content:encoded><category>linux</category><category>fish-shell</category></item><item><title>Guía de Historial y Persistencia en Fish Shell</title><link>https://www.bitdoze.com/es/fish-shell-historial-persistencia/</link><guid isPermaLink="true">https://www.bitdoze.com/es/fish-shell-historial-persistencia/</guid><description>Cómo Fish Shell gestiona el historial de comandos, incluyendo búsqueda, eliminación, fusión entre sesiones, el archivo de historial y consejos para mantener un historial limpio.</description><pubDate>Fri, 20 Feb 2026 01:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;

El historial de Fish es una de esas funciones que trabaja tan bien que rara vez piensas en ella. Los comandos se guardan automáticamente, se comparten entre sesiones (con algunas salvedades) y se pueden buscar de varias formas. Pero hay cosas que vale la pena saber sobre cómo funciona internamente, sobre todo si te importa mantener un historial limpio o sincronizarlo entre máquinas.

## Dónde se almacena el archivo de historial

Fish guarda el historial en:

```
~/.local/share/fish/fish_history
```

Es un archivo de texto plano con marcas de tiempo. Cada entrada tiene este aspecto:

```
- cmd: git commit -m &quot;fix auth&quot;
  when: 1708784400
```

El archivo crece con el tiempo. Fish no tiene un límite estricto de tamaño como Bash (`HISTSIZE`). Por defecto, Fish conserva 256.000 entradas (o unos 16 MB de historial). En la práctica, nunca llegarás a ese límite a menos que añadas historial mediante scripts.

## Buscar en el historial

### Teclas de flechas

El método más sencillo. Pulsa la **flecha arriba** para recorrer los comandos anteriores. Si has escrito algo primero, la flecha arriba solo muestra comandos que empiezan con lo que escribiste.

Escribe `git` y luego pulsa la flecha arriba — Fish recorre solo tus comandos de git. Es una búsqueda de historial basada en prefijo.

### Ctrl+R (búsqueda inversa)

Pulsa `Ctrl+R` y empieza a escribir. Fish busca en tu historial comandos que contengan lo que escribiste, usando sintaxis glob. Escribe `git*fix` y coincide con comandos que contienen &quot;git&quot; seguido más adelante de &quot;fix&quot;.

Navega por los resultados con las teclas de flechas o sigue escribiendo para acotar la búsqueda. Pulsa Enter para ejecutar el comando seleccionado, o Escape para cancelar.

Si tienes [fzf.fish](/es/mejores-plugins-fish-shell/) instalado, `Ctrl+R` abre una búsqueda interactiva con fzf, que es aún mejor.

### El comando history

Para búsquedas más precisas:

```fish
# Buscar comandos que contengan &quot;docker&quot;
history search docker

# Buscar por prefijo
history search --prefix &quot;git commit&quot;

# Coincidencia exacta
history search --exact &quot;git push origin main&quot;

# Mostrar marcas de tiempo
history search --show-time docker

# Limitar resultados
history search --max 10 docker

# Búsqueda sensible a mayúsculas
history search --case-sensitive Docker
```

Por defecto, `history search` no distingue mayúsculas y ordena del más reciente al más antiguo. Añade `--reverse` para invertir el orden.

## Eliminar entradas del historial

A veces ejecutas un comando con un error tipográfico, o accidentalmente pones datos sensibles en la línea de comandos. Fish te permite limpiar eso.

### Eliminación interactiva

```fish
history delete docker
```

Esto busca comandos que coincidan con &quot;docker&quot; y te muestra las coincidencias. Puedes introducir números de entradas específicas para eliminar, un rango, o `all` para quitar todas las coincidencias.

### Eliminación exacta

```fish
history delete --exact --case-sensitive &quot;docker login -p my_secret_password&quot;
```

Esto elimina ese comando específico sin preguntar.

### Eliminar con el plugin sponge

El [plugin sponge](/es/mejores-plugins-fish-shell/) elimina automáticamente del historial los comandos que fallan (código de salida distinto de cero). Instálalo con:

```fish
fisher install meaningful-ooo/sponge
```

Me resulta útil porque mantiene los comandos mal escritos y los experimentos fallidos fuera de mis autosugerencias.

## Controlar qué se guarda en el historial

### La función fish_should_add_to_history

Fish 4.0 añadió un hook que te permite controlar qué comandos se guardan. Define esta función para filtrar entradas del historial:

```fish
# ~/.config/fish/functions/fish_should_add_to_history.fish
function fish_should_add_to_history
    # No guardar comandos que empiezan con un espacio
    string match -qr &apos;^\s&apos; -- $argv[1]; and return 1

    # No guardar comandos cortos
    test (string length -- $argv[1]) -lt 3; and return 1

    # No guardar comandos con patrones sensibles
    string match -qr &apos;password|secret|token|api.key&apos; -- $argv[1]; and return 1

    return 0
end
```

Devuelve 0 para guardar el comando, 1 para omitirlo.

### Espacio inicial para omitir el historial

La función anterior demuestra un patrón común: añadir un espacio antes del comando para que no se registre en el historial. Esto imita el comportamiento de `HISTCONTROL=ignorespace` en Bash. Fish no hace esto por defecto — necesitas la función `fish_should_add_to_history`.

## Historial entre múltiples sesiones

Fish gestiona el historial de múltiples sesiones de forma diferente a Bash. Cada sesión de Fish mantiene su propio historial en memoria y escribe en el archivo de historial compartido. Así funciona:

- Cuando ejecutas un comando, se añade al historial de la sesión actual y se escribe en disco.
- Otras sesiones en ejecución no ven el nuevo comando inmediatamente.
- Las sesiones nuevas que se inicien después de guardar el comando sí lo verán.
- `history merge` fuerza a la sesión actual a cargar comandos de todas las demás sesiones.

### Fusionar historial

```fish
history merge
```

Esto importa el historial de otras sesiones de Fish a la actual. Útil si ejecutaste algo en otra pestaña del terminal y quieres acceder a ello con Ctrl+R o la búsqueda con flechas.

Algunas personas lo añaden a un atajo de teclado:

```fish
bind \em &apos;history merge; commandline -f repaint&apos;
```

Ahora `Alt+M` fusiona y redibuja el prompt.

### Limpiar historial

```fish
# Limpiar todo (con confirmación)
history clear

# Limpiar solo el historial de la sesión actual
history clear-session
```

`clear-session` es útil cuando has estado experimentando y no quieres que esos comandos contaminen tu historial, pero quieres conservar todo lo anterior.

## Guardar historial manualmente

```fish
history save
```

Esto fuerza una escritura inmediata en disco. Fish guarda automáticamente de forma periódica, pero esto asegura que nada se pierda si el shell se cierra inesperadamente.

### Añadir comandos sin ejecutarlos

```fish
history append &quot;some command I want to remember&quot;
```

Esto añade el comando al historial sin ejecutarlo. Útil para guardar comandos que quieras encontrar después con `Ctrl+R`.

## Formato del archivo de historial y respaldo

El archivo de historial es fácil de respaldar y portable entre máquinas:

```fish
cp ~/.local/share/fish/fish_history ~/fish_history_backup
```

Para restaurar:

```fish
cp ~/fish_history_backup ~/.local/share/fish/fish_history
history merge
```

Si gestionas dotfiles entre máquinas, puedes crear un enlace simbólico o sincronizar el archivo de historial. Ten en cuenta que las escrituras concurrentes desde varias máquinas podrían causar conflictos — fusiona manualmente si es necesario.

## Consejos útiles sobre el historial

**Usa abreviaturas en lugar de depender del historial.** Si usas un comando cada día, añádelo como [abreviatura](/es/fish-shell-abreviaturas-vs-alias/) en lugar de buscarlo en el historial cada vez.

**Busca dentro de los resultados.** Cuando la búsqueda con Ctrl+R muestra demasiados resultados, añade más caracteres o usa patrones glob. `git*main` filtra mejor que solo `git`.

**Combina con fzf.** El [plugin fzf.fish](/es/mejores-plugins-fish-shell/) reemplaza el Ctrl+R integrado con una búsqueda difusa mucho más rápida de navegar. Muestra una vista previa y permite selección múltiple.

**Elimina patrones.** Si cambiaste una contraseña y accidentalmente escribiste la antigua en un comando, `history delete --prefix &quot;mysql -p&quot;` lo limpia rápido.

## Guías relacionadas

- [Autocompletado y sugerencias en Fish Shell](/es/fish-shell-autocompletado-sugerencias/) — el historial alimenta las autosugerencias
- [Mejores plugins para Fish Shell](/es/mejores-plugins-fish-shell/) — fzf.fish y sponge para mejor historial
- [Guía de funciones en Fish Shell](/es/fish-shell-funciones-comandos-personalizados/) — crear fish_should_add_to_history
- [Instalar Fish Shell en Ubuntu](/es/instalar-fish-shell-ubuntu/) — primeros pasos
- [Fish Shell en macOS](/es/fish-shell-macos-configuracion/) — guía de configuración en Mac</content:encoded><category>linux</category><category>fish-shell</category></item><item><title>Cómo Configurar Starship Prompt con Fish Shell</title><link>https://www.bitdoze.com/es/fish-shell-configurar-starship/</link><guid isPermaLink="true">https://www.bitdoze.com/es/fish-shell-configurar-starship/</guid><description>Guía paso a paso para instalar y configurar Starship prompt en Fish Shell, con temas preconfigurados, módulos personalizados y configuración de Nerd Fonts.</description><pubDate>Thu, 19 Feb 2026 01:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;

Starship es un prompt multi-shell escrito en Rust. Funciona con Fish, Zsh, Bash, PowerShell y otros, así que puedes usar la misma configuración de prompt sin importar en qué shell estés. Lo he estado usando con Fish Shell y se complementan bien. Starship es rápido, la configuración es un solo archivo TOML, y te muestra la información que realmente necesitas (rama de git, versiones de lenguajes, duración del comando) sin saturar el prompt.

Anteriormente escribí una guía sobre [Starship con Ghostty y Zsh](/starship-ghostty-terminal/). La configuración con Fish sigue los mismos principios, pero la línea de inicialización va en un archivo de configuración diferente.

## Requisitos previos

Necesitas tener Fish Shell instalado. Si aún no lo tienes, sigue mi [guía de instalación de Fish Shell para Ubuntu](/es/instalar-fish-shell-ubuntu/).

También necesitas una Nerd Font. Starship usa glifos especiales para los iconos, y sin una Nerd Font aparecen como cuadros rotos.

### Instalar una Nerd Font

Recomiendo **MesloLGS Nerd Font**. En Ubuntu:

```bash
# Descargar e instalar
mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts
curl -fLO https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Meslo.tar.xz
tar -xf Meslo.tar.xz
fc-cache -fv
```

En macOS con Homebrew:

```bash
brew install font-meslo-lg-nerd-font
```

Después de instalarla, configura la fuente en los ajustes de tu emulador de terminal. En Ghostty, agrega esto a tu configuración:

```
font-family = MesloLGS Nerd Font
```

Para otros terminales ([WezTerm](/install-wezterm-mac/), Alacritty, kitty, etc.), consulta su documentación para la opción de configuración de fuentes.

## Instalar Starship

El método de instalación recomendado:

```bash
curl -sS https://starship.rs/install.sh | sh
```

O usa un gestor de paquetes:

```bash
# Ubuntu/Debian (via snap)
snap install starship

# macOS
brew install starship

# Cargo
cargo install starship --locked
```

Verificar:

```bash
starship --version
```

## Agregar Starship a Fish

Agrega una línea a tu configuración de Fish:

```fish
# ~/.config/fish/config.fish
starship init fish | source
```

Eso es todo. Abre una nueva terminal o ejecuta `source ~/.config/fish/config.fish` y deberías ver el prompt de Starship.

&lt;Notice type=&quot;info&quot; title=&quot;El orden importa&quot;&gt;
Coloca la línea `starship init fish | source` al final de tu `config.fish`, después de cualquier otra configuración. Esto asegura que Starship cargue de último y pueda configurar el prompt correctamente.
&lt;/Notice&gt;

## Elegir un preset

Starship incluye varios presets que cambian la apariencia de tu prompt. Puedes verlos en [starship.rs/presets](https://starship.rs/presets/).

Aplicar un preset:

```bash
starship preset tokyo-night -o ~/.config/starship.toml
```

Presets populares:

- **Tokyo Night** — tema oscuro con tonos púrpura/azul
- **Catppuccin** — tema con colores pastel, varias variantes (Mocha, Macchiato, Latte)
- **Nerd Font Symbols** — reemplaza etiquetas de texto con iconos de Nerd Font
- **Bracketed Segments** — envuelve cada módulo entre corchetes
- **Plain Text** — sin caracteres especiales, funciona sin Nerd Fonts

Prueba varios. El comando de preset sobrescribe tu `starship.toml`, así que haz una copia de seguridad de cualquier configuración personalizada antes.

## Configurar Starship

Starship lee su configuración de `~/.config/starship.toml`. Si el archivo no existe, Starship usa valores por defecto razonables.

Esta es una configuración práctica que muestra información relevante sin saturar:

```toml
# ~/.config/starship.toml

# Configuración general
format = &quot;&quot;&quot;
$directory\
$git_branch\
$git_status\
$nodejs\
$python\
$rust\
$golang\
$docker_context\
$cmd_duration\
$line_break\
$character&quot;&quot;&quot;

# No agregar línea en blanco entre prompts
add_newline = false

[directory]
truncation_length = 3
truncate_to_repo = true

[git_branch]
format = &quot;[$symbol$branch]($style) &quot;
symbol = &quot; &quot;

[git_status]
format = &apos;([$all_status$ahead_behind]($style) )&apos;

[nodejs]
format = &quot;[$symbol($version)]($style) &quot;
symbol = &quot; &quot;

[python]
format = &quot;[$symbol($version)]($style) &quot;
symbol = &quot; &quot;

[rust]
format = &quot;[$symbol($version)]($style) &quot;
symbol = &quot; &quot;

[golang]
format = &quot;[$symbol($version)]($style) &quot;
symbol = &quot; &quot;

[docker_context]
format = &quot;[$symbol$context]($style) &quot;
symbol = &quot; &quot;

[cmd_duration]
min_time = 2_000
format = &quot;[$duration]($style) &quot;

[character]
success_symbol = &quot;[❯](green)&quot;
error_symbol = &quot;[❯](red)&quot;
```

### Qué hace cada sección

**format** controla qué módulos aparecen y en qué orden. Solo se muestran los módulos listados aquí.

**directory** muestra la ruta actual. `truncation_length = 3` significa que ves como máximo 3 directorios padre. `truncate_to_repo = true` muestra la ruta completa desde la raíz del repositorio git.

**git_branch** y **git_status** muestran el nombre de tu rama y si tienes cambios sin confirmar, conteos de adelante/atrás, etc.

**Módulos de lenguajes** (nodejs, python, rust, golang) solo aparecen cuando estás en un proyecto que usa ese lenguaje. Lo detectan buscando archivos como `package.json`, `pyproject.toml`, `Cargo.toml` y similares.

**cmd_duration** muestra cuánto tardó el último comando, pero solo si tardó más de 2 segundos. Útil para detectar comandos lentos.

**character** muestra un `❯` verde en caso de éxito y un `❯` rojo después de un comando fallido.

## Starship vs Tide

Si usas Fish, tienes dos buenas opciones de prompt:

| | Starship | Tide |
|---|---|---|
| Funciona con | Fish, Zsh, Bash, etc. | Solo Fish |
| Configuración | Archivo TOML | Asistente interactivo |
| Renderizado asíncrono | No (pero lo suficientemente rápido) | Sí |
| Instalación | Binario separado | Plugin de Fisher |
| Necesita Nerd Font | Sí (para la mayoría de presets) | Sí |
| Personalización | Editar `starship.toml` | `tide configure` + variables |

**Elige Starship si** usas múltiples shells y quieres una sola configuración de prompt, o si prefieres editar un archivo de configuración directamente.

**Elige Tide si** solo usas Fish y quieres renderizado asíncrono con una configuración basada en asistente. Instala Tide con Fisher:

```fish
fisher install IlanCosman/tide@v6
tide configure
```

Hablo de Tide y otras herramientas de Fish en [los mejores plugins y herramientas para Fish Shell](/es/mejores-plugins-fish-shell/). Para una comparación completa de todas las opciones de prompt para Fish incluyendo Tide, Pure e Hydro, consulta mi [guía de temas y prompts de Fish Shell](/es/fish-shell-temas-prompts/).

Ambas son buenas opciones. Yo uso Starship porque a veces trabajo con Zsh o Bash en otras máquinas y quiero el mismo prompt en todas partes.

## Configuración avanzada

&lt;Accordion label=&quot;Prompt del lado derecho&quot; group=&quot;advanced&quot; expanded=&quot;true&quot;&gt;
Starship soporta un prompt derecho que aparece en el borde derecho de tu terminal:

```toml
# En starship.toml
right_format = &quot;&quot;&quot;$time&quot;&quot;&quot;

[time]
disabled = false
format = &quot;[$time]($style)&quot;
time_format = &quot;%H:%M&quot;
```

Esto muestra la hora actual en el lado derecho. El soporte de prompt derecho de Fish funciona bien con esto.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Módulos personalizados&quot; group=&quot;advanced&quot;&gt;
Puedes definir módulos personalizados que ejecutan comandos de shell:

```toml
[custom.fish_version]
command = &quot;fish --version | string split &apos; &apos; | tail -1&quot;
when = &quot;true&quot;
format = &quot;[fish $output]($style) &quot;
style = &quot;cyan&quot;
```

Esto mostraría tu versión de Fish en el prompt. Útil para depuración o para mostrar información específica del proyecto.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Configuración por directorio&quot; group=&quot;advanced&quot;&gt;
Starship no tiene configuración por directorio, pero puedes lograr algo similar con el sistema `conf.d` de Fish. Crea una función que establezca `STARSHIP_CONFIG` según el directorio actual:

```fish
# ~/.config/fish/conf.d/starship-dir.fish
function __check_starship_config --on-variable PWD
    if test -f .starship.toml
        set -gx STARSHIP_CONFIG (pwd)/.starship.toml
    else
        set -e STARSHIP_CONFIG
    end
end
```

Ahora cualquier directorio con un archivo `.starship.toml` usará esa configuración en lugar de la global.
&lt;/Accordion&gt;

## Solución de problemas

**Los iconos aparecen como cuadros o signos de interrogación.** Necesitas una Nerd Font instalada y seleccionada en tu terminal. Revisa la sección de requisitos previos más arriba.

**El prompt va lento.** Starship generalmente es rápido, pero algunos módulos (particularmente git status en repositorios muy grandes) pueden ser lentos. Desactívalos:

```toml
[git_status]
disabled = true
```

**Starship no carga.** Asegúrate de que `starship init fish | source` esté en tu `config.fish` y que `starship` esté en tu `$PATH`. Ejecuta `which starship` para verificar.

## Lectura adicional

- [Fish Shell vs Bash vs Zsh](/es/fish-shell-vs-bash-vs-zsh-comparacion/) — comparación completa de shells
- [Fish Shell vs Zsh](/es/fish-shell-vs-zsh-comparacion/) — comparación enfocada
- [Instalar Fish Shell en Ubuntu](/es/instalar-fish-shell-ubuntu/) — cómo instalar Fish
- [Fish Shell en macOS](/es/fish-shell-macos-configuracion/) — instalar y configurar Fish en Mac
- [Mejores plugins y herramientas para Fish Shell](/es/mejores-plugins-fish-shell/) — Fisher, Tide, fzf.fish y más
- [Abreviaturas vs alias en Fish Shell](/es/fish-shell-abreviaturas-vs-alias/) — expansión de texto en Fish
- [Temas y prompts de Fish Shell](/es/fish-shell-temas-prompts/) — comparación de Tide, Starship, Pure e Hydro
- [Resaltado de sintaxis en Fish Shell](/es/fish-shell-resaltado-sintaxis/) — cómo Fish resalta tus comandos
- [Autocompletado y sugerencias en Fish Shell](/es/fish-shell-autocompletado-sugerencias/) — el sistema de completado de Fish
- [Guía de configuración de Starship y Ghostty](/starship-ghostty-terminal/) — si también quieres un emulador de terminal moderno
- [Guía de Ghostty Terminal](/ghostty-terminal/) — configuración completa de Ghostty</content:encoded><category>linux</category><category>fish-shell</category></item><item><title>Fish Shell en macOS - Guía Completa de Configuración</title><link>https://www.bitdoze.com/es/fish-shell-macos-configuracion/</link><guid isPermaLink="true">https://www.bitdoze.com/es/fish-shell-macos-configuracion/</guid><description>Cómo instalar y configurar Fish Shell en macOS con Homebrew, establecerlo como shell por defecto, configurar iTerm2 o Ghostty, e instalar herramientas esenciales.</description><pubDate>Thu, 19 Feb 2026 01:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;

macOS viene con Zsh como shell por defecto (Apple cambió de Bash en 2019). Fish no está incluido, pero está a un solo comando de Homebrew. Uso Fish tanto en mi Mac como en mis máquinas Linux, y la experiencia es casi idéntica en ambos — que es una de las cosas que me gustan.

Esta guía cubre la configuración completa en macOS: instalación, hacer de Fish tu shell por defecto, configuración del emulador de terminal y las herramientas esenciales que instalo junto a él.

## Instalar Fish con Homebrew

Si todavía no tienes Homebrew:

```bash
/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;
```

Instalar Fish:

```bash
brew install fish
```

Verificar la versión:

```bash
fish --version
```

Deberías ver `fish, version 4.5.0` o más reciente. Homebrew mantiene Fish actualizado — ejecuta `brew upgrade fish` periódicamente.

## Probar Fish sin cambiar de shell

Escribe `fish` en tu terminal actual para iniciar una sesión de Fish. Juega con las autosugerencias (empieza a escribir y observa las sugerencias grises que aparecen), el completado con Tab y el resaltado de sintaxis. Escribe `exit` para volver a Zsh.

## Establecer Fish como shell por defecto

macOS requiere que el shell esté listado en `/etc/shells` antes de poder configurarlo como predeterminado. Homebrew instala Fish en `/opt/homebrew/bin/fish` (Apple Silicon) o `/usr/local/bin/fish` (Intel).

```bash
# Find your Fish path
which fish

# Add it to allowed shells
echo (which fish) | sudo tee -a /etc/shells

# Set as default
chsh -s (which fish)
```

Abre una nueva ventana de terminal. Deberías estar en Fish.

Para volver a Zsh después: `chsh -s /bin/zsh`.

&lt;Notice type=&quot;info&quot; title=&quot;Conserva Zsh&quot;&gt;
Los scripts del sistema de macOS a veces esperan Zsh o Bash. No los elimines. Fish reemplaza tu shell interactivo, no la capa de scripting del sistema.
&lt;/Notice&gt;

## Configuración del emulador de terminal

Fish funciona en cualquier terminal, pero la fuente importa. El paginador de completado de Fish y muchos temas de prompt usan caracteres especiales que necesitan una Nerd Font.

### Instalar una Nerd Font

```bash
brew install font-meslo-lg-nerd-font
```

Luego configúrala como la fuente de tu terminal. Así se hace en las opciones populares:

&lt;Accordion label=&quot;Ghostty&quot; group=&quot;terminals&quot; expanded=&quot;true&quot;&gt;
Añade a `~/.config/ghostty/config`:

```
font-family = MesloLGS Nerd Font
font-size = 14
```

Ghostty es un terminal rápido con aceleración GPU. Tengo una [guía completa de configuración de Ghostty](/ghostty-terminal/) si quieres explorar sus funcionalidades.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;iTerm2&quot; group=&quot;terminals&quot;&gt;
Ve a **Preferences → Profiles → Text → Font** y selecciona &quot;MesloLGS NF&quot;. Ajusta el tamaño a tu preferencia (yo uso 14).

También vale la pena habilitar en iTerm2:
- **Preferences → Profiles → Terminal → Shell Integration** — permite hacer clic para seleccionar la salida de comandos
- **Preferences → General → Selection → Applications in terminal may access clipboard** — para que las operaciones de copiado de Fish funcionen
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Alacritty&quot; group=&quot;terminals&quot;&gt;
En `~/.config/alacritty/alacritty.toml`:

```toml
[font]
size = 14

[font.normal]
family = &quot;MesloLGS Nerd Font&quot;
```
&lt;/Accordion&gt;

&lt;Accordion label=&quot;WezTerm&quot; group=&quot;terminals&quot;&gt;
En `~/.wezterm.lua`:

```lua
config.font = wezterm.font(&quot;MesloLGS Nerd Font&quot;)
config.font_size = 14.0
```

Tengo una [guía de configuración de WezTerm](/install-wezterm-mac/) que cubre la integración con zoxide y tmux.
&lt;/Accordion&gt;

## Configuración básica de Fish

Crea tu archivo de configuración:

```fish
mkdir -p ~/.config/fish
nano ~/.config/fish/config.fish
```

Una configuración inicial práctica para macOS:

```fish
# ~/.config/fish/config.fish

# Homebrew (Apple Silicon)
fish_add_path /opt/homebrew/bin
fish_add_path /opt/homebrew/sbin

# Common paths
fish_add_path ~/bin
fish_add_path ~/.local/bin

# Suppress the greeting
set -g fish_greeting

# Editor
set -gx EDITOR &quot;code --wait&quot;  # or vim, nvim, etc.

# Homebrew completions
if test -d (brew --prefix)&quot;/share/fish/completions&quot;
    set -p fish_complete_path (brew --prefix)/share/fish/completions
end
if test -d (brew --prefix)&quot;/share/fish/vendor_completions.d&quot;
    set -p fish_complete_path (brew --prefix)/share/fish/vendor_completions.d
end
```

El bloque de completions de Homebrew es importante — sin él, te pierdes el completado con Tab para los comandos instalados con Homebrew.

## Instalar herramientas esenciales

Este es mi conjunto estándar de herramientas complementarias para Fish en macOS:

```bash
brew install fisher      # plugin manager (or install via curl)
brew install starship    # cross-shell prompt
brew install zoxide      # smarter cd
brew install eza         # modern ls replacement
brew install fzf         # fuzzy finder
brew install bat         # better cat with syntax highlighting
brew install fd          # better find
brew install ripgrep     # better grep
```

### Configurar Fisher

Si instalaste Fisher vía Homebrew, está listo. De lo contrario:

```fish
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source &amp;&amp; fisher install jorgebucaran/fisher
```

### Instalar plugins de Fish

```fish
fisher install PatrickF1/fzf.fish     # fuzzy search integration
fisher install jorgebucaran/autopair.fish  # auto-close brackets
fisher install meaningful-ooo/sponge  # remove failed commands from history
```

Consulta mi [guía de los mejores plugins de Fish Shell](/es/mejores-plugins-fish-shell/) para la lista completa.

### Configurar Starship (o Tide)

Para Starship, añade a `config.fish`:

```fish
starship init fish | source
```

Para Tide en su lugar:

```fish
fisher install IlanCosman/tide@v6
tide configure
```

Comparé estas y otras opciones de prompt en [Temas de Fish Shell — mejores prompts](/es/fish-shell-temas-prompts/). También tengo una [guía dedicada de Starship + Fish](/es/fish-shell-configurar-starship/).

### Configurar zoxide

Añade a `config.fish`:

```fish
zoxide init fish | source
```

Ahora usa `z` en lugar de `cd`: `z projects` te lleva a tu directorio de proyectos. Guía completa en mi [artículo sobre zoxide](/zoxide/).

### Configurar alias de eza

```fish
# ~/.config/fish/conf.d/eza.fish
abbr -a ls eza
abbr -a ll &quot;eza -la --icons --git&quot;
abbr -a lt &quot;eza -la --icons --tree --level=2&quot;
```

## Abreviaturas específicas de macOS

```fish
# ~/.config/fish/conf.d/macos.fish

# Quick Look from terminal
abbr -a ql &quot;qlmanage -p&quot;

# Open current directory in Finder
abbr -a finder &quot;open .&quot;

# Flush DNS
abbr -a flushdns &quot;sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder&quot;

# Show/hide hidden files in Finder
abbr -a showhidden &quot;defaults write com.apple.finder AppleShowAllFiles -bool true &amp;&amp; killall Finder&quot;
abbr -a hidehidden &quot;defaults write com.apple.finder AppleShowAllFiles -bool false &amp;&amp; killall Finder&quot;
```

Cubro las abreviaturas vs alias en detalle en [Fish Shell abreviaturas vs alias](/es/fish-shell-abreviaturas-vs-alias/).

## Gestión de versiones de Node.js

El nvm basado en Bash no funciona en Fish. Usa nvm.fish en su lugar:

```fish
fisher install jorgebucaran/nvm.fish
nvm install lts
set --universal nvm_default_version lts
```

Guía completa paso a paso en mi [guía de NVM con Fish Shell](/es/nvm-fish-shell/).

## Problemas comunes en macOS

&lt;Accordion label=&quot;El PATH de Homebrew no funciona&quot; group=&quot;issues&quot; expanded=&quot;true&quot;&gt;
En los Mac con Apple Silicon, Homebrew se instala en `/opt/homebrew/` en lugar de `/usr/local/`. Asegúrate de que tu `config.fish` tenga:

```fish
fish_add_path /opt/homebrew/bin
fish_add_path /opt/homebrew/sbin
```

Pon estas líneas al principio de tu archivo de configuración.
&lt;/Accordion&gt;

&lt;Accordion label=&quot;Variables de entorno de .zshrc ausentes&quot; group=&quot;issues&quot;&gt;
Fish no lee `.zshrc` ni `.bash_profile`. Mueve tus variables de entorno a `config.fish` usando `set -gx`:

```fish
set -gx JAVA_HOME (/usr/libexec/java_home)
set -gx ANDROID_HOME ~/Library/Android/sdk
fish_add_path $ANDROID_HOME/platform-tools
```
&lt;/Accordion&gt;

&lt;Accordion label=&quot;El agente SSH no reenvía&quot; group=&quot;issues&quot;&gt;
El agente SSH de macOS funciona con Fish, pero puede que necesites cargar tus claves:

```fish
# ~/.config/fish/conf.d/ssh.fish
if status is-interactive
    ssh-add --apple-use-keychain ~/.ssh/id_ed25519 2&gt;/dev/null
end
```
&lt;/Accordion&gt;

## Guías relacionadas

- [Fish Shell vs Bash vs Zsh](/es/fish-shell-vs-bash-vs-zsh-comparacion/) — comparación de los tres shells
- [Fish Shell vs Zsh](/es/fish-shell-vs-zsh-comparacion/) — ya que probablemente vienes de Zsh en Mac
- [Instalar Fish en Ubuntu](/es/instalar-fish-shell-ubuntu/) — si también usas Linux
- [Guía de historial de Fish Shell](/es/fish-shell-historial-persistencia/) — gestiona y busca tu historial de comandos
- [Configuración de Starship y Ghostty](/starship-ghostty-terminal/) — combinación moderna de terminal + prompt
- [Guía de Ghostty Terminal](/ghostty-terminal/) — configuración completa de Ghostty para Mac</content:encoded><category>linux</category><category>fish-shell</category></item><item><title>Fish Shell vs Zsh - ¿Cuál Deberías Elegir?</title><link>https://www.bitdoze.com/es/fish-shell-vs-zsh-comparacion/</link><guid isPermaLink="true">https://www.bitdoze.com/es/fish-shell-vs-zsh-comparacion/</guid><description>Una comparación práctica de Fish Shell y Zsh para uso diario en la terminal, cubriendo autocompletado, plugins, scripting, configuración y cuál shell se adapta mejor a tu flujo de trabajo.</description><pubDate>Thu, 19 Feb 2026 01:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;

Usé Zsh con Oh My Zsh durante unos tres años antes de pasarme a Fish. Los dos son una mejora grande frente a Bash, pero toman enfoques diferentes para llegar ahí. Zsh te da un shell compatible con POSIX que vas construyendo con plugins. Fish te da una experiencia pulida desde el primer arranque pero rompe con las convenciones POSIX.

Si quieres ver cómo se comparan los tres shells, revisa mi [comparación de Fish vs Bash vs Zsh](/es/fish-shell-vs-bash-vs-zsh-comparacion/). Este artículo profundiza solo en Fish y Zsh.

## Experiencia desde el primer momento

Aquí es donde Fish y Zsh más difieren.

**Fish** te da autosugerencias, [resaltado de sintaxis](/es/fish-shell-resaltado-sintaxis/), completado con tab enriquecido y análisis de páginas man desde una instalación nueva. Abres una terminal y todo funciona. Sin configuración, sin plugins, sin framework.

**Zsh** recién instalado es... básico. Está un paso por encima de Bash, con mejor globbing y algunas funcionalidades integradas, pero la experiencia que la mayoría asocia con Zsh viene de Oh My Zsh y sus plugins. Necesitas instalar [zsh-autosuggestions](/enable-command-autocomplete-in-zsh/) para sugerencias basadas en el historial y [zsh-syntax-highlighting](/enable-syntax-highlighting-zsh/) para coloreado de comandos.

Si te importa el tiempo hasta ser productivo, Fish gana por un margen amplio. Cambias flexibilidad de configuración por un shell que simplemente funciona.

## Autosugerencias

Los dos shells pueden mostrar sugerencias en línea de tu [historial de comandos](/es/fish-shell-historial-persistencia/) mientras escribes. La diferencia es que Fish lo hace por defecto y Zsh necesita un plugin.

En Fish, presiona la flecha derecha para aceptar la sugerencia completa o `Alt+Right` para aceptar una palabra a la vez. Fish también combina sugerencias del historial con completados de rutas de archivos y comandos. Entro en más detalle en mi [guía de autocompletado y sugerencias de Fish Shell](/es/fish-shell-autocompletado-sugerencias/).

En Zsh con `zsh-autosuggestions`, el comportamiento es similar pero puede sentirse un poco menos pulido. El plugin a veces entra en conflicto con otros completados o temas, y puede que necesites ajustar tu configuración para que funcione bien.

## Completado con tab

El sistema de completado con tab de Fish es más sofisticado de serie. Lee páginas man y genera completados automáticamente, así que comandos que nunca has configurado igualmente obtienen resultados útiles con tab. Escribe `rsync --` y presiona tab, y verás todos los flags disponibles con descripciones.

Fish también muestra los completados en una lista tipo paginador con descripciones junto a cada opción. Navegas con las teclas de flecha y presionas enter para seleccionar.

Zsh también tiene un sistema de completado potente (`compinit` más configuración `zstyle`), y puede igualar a Fish una vez configurado correctamente. Pero &quot;configurado correctamente&quot; es la frase clave. La mayoría de usuarios de Zsh dependen de Oh My Zsh o frameworks para manejar esto, e incluso así rara vez es tan completo como lo que Fish genera a partir de las páginas man.

## Sintaxis

Este es el punto de decisión real para mucha gente.

**Zsh** es mayormente compatible con POSIX. Los scripts de Bash se ejecutan en Zsh con cambios mínimos, y los scripts de Zsh se ven casi idénticos a los de Bash:

```zsh
# Zsh
export MY_VAR=&quot;hello&quot;
if [[ -f &quot;$HOME/.zshrc&quot; ]]; then
    source &quot;$HOME/.zshrc&quot;
fi
my_list=(&quot;one&quot; &quot;two&quot; &quot;three&quot;)
for item in &quot;${my_list[@]}&quot;; do
    echo &quot;$item&quot;
done
```

**Fish** tiene su propia sintaxis. Es posiblemente más limpia, pero es diferente:

```fish
# Fish
set -gx MY_VAR &quot;hello&quot;
if test -f ~/.config/fish/config.fish
    source ~/.config/fish/config.fish
end
set my_list one two three
for item in $my_list
    echo $item
end
```

La versión de Fish tiene menos puntuación. Sin `[[ ]]`, sin `do`/`done`, sin punto y coma, sin expansión de variables estilo `${}`. Las variables son simplemente `$name`, las listas no necesitan comillas alrededor de cada elemento, y los bloques terminan con `end` en lugar de `fi`/`done`/`esac`.

El compromiso: no puedes pegar comandos de Bash directamente. Cosas como `export VAR=value` (usa `set -gx VAR value`), `$(command)` para sustitución de comandos (usa `(command)`), y `&amp;&amp;` entre comandos (usa `; and` o `&amp;&amp;` desde que Fish 3.0 agregó soporte) necesitan ajustes.

&lt;Notice type=&quot;info&quot; title=&quot;Fish sí soporta &amp;&amp; ahora&quot;&gt;
Fish 3.0 agregó soporte para `&amp;&amp;` y `||`. Así que `command1 &amp;&amp; command2` funciona. Las guías antiguas que dicen lo contrario están desactualizadas.
&lt;/Notice&gt;

## Ecosistema de plugins

**Zsh** tiene el ecosistema más grande gracias a Oh My Zsh, que existe desde 2009. Hay más de 300 plugins incluidos, más de 150 temas y una comunidad masiva. Gestores alternativos como zinit, antigen y zplug ofrecen carga más rápida. Tengo una lista de los [mejores plugins de Oh My Zsh](/best-oh-my-zsh-plugins/) si te interesa.

**Fish** tiene un ecosistema más pequeño pero enfocado. [Fisher](https://github.com/jorgebucaran/fisher) es el gestor de plugins recomendado, es rápido y no se interpone en tu camino. Los plugins populares incluyen Tide (un prompt), fzf.fish (integración de búsqueda difusa) y [nvm.fish](/es/nvm-fish-shell/) (gestión de versiones de Node). Los cubro en [mejores plugins y herramientas de Fish Shell](/es/mejores-plugins-fish-shell/).

Oh My Fish existe como framework alternativo, pero lleva un tiempo sin mantenimiento. Fisher es la opción recomendada. Si aún tienes curiosidad sobre OMF, mira mi [guía de Oh My Fish](/es/oh-my-fish-instalar-temas-plugins/).

Algo que vale la pena mencionar: Fish necesita menos plugins para empezar. Las funcionalidades que requieren un plugin en Zsh (autosugerencias, resaltado de sintaxis, buenos completados) vienen integradas en Fish. Así que mientras Zsh tiene más plugins disponibles, los usuarios de Fish necesitan menos.

## Complejidad de configuración

**La configuración de Zsh** puede volverse elaborada. Un `.zshrc` típico con Oh My Zsh incluye selección de tema, listas de plugins, alias personalizados, configuración de rutas y opciones del framework. No es raro terminar con un `.zshrc` de 100 líneas. Oh My Zsh también añade un tiempo de inicio medible, especialmente con muchos plugins activados.

**La configuración de Fish** tiende a ser más corta. Tu `~/.config/fish/config.fish` puede tener solo adiciones de rutas y algunas abreviaturas. Fish también soporta `conf.d/` para dividir la configuración en archivos separados, y la interfaz web `fish_config` te permite cambiar colores y prompts sin editar archivos.

El [sistema de abreviaturas](/es/fish-shell-abreviaturas-vs-alias/) de Fish también reduce lo que pones en los archivos de configuración. En lugar de definir funciones de shell para comandos comunes, agregas abreviaturas que se expanden en línea.

## Personalización del prompt

Los **temas de Zsh** a través de Oh My Zsh te dan cambios rápidos de prompt. Powerlevel10k es la opción más popular, es rápido y tiene un asistente de configuración. También puedes usar Starship, que cubrí en mi [guía de Starship y Ghostty](/starship-ghostty-terminal/).

**Fish** tiene Tide como su opción de prompt nativa, con un asistente de configuración similar a Powerlevel10k. Starship también funciona con Fish. Escribí una guía sobre [cómo configurar Starship con Fish Shell](/es/fish-shell-configurar-starship/), y una [comparación más amplia de temas y prompts de Fish Shell](/es/fish-shell-temas-prompts/) que cubre Tide, Starship, Pure y Hydro.

Los dos shells funcionan bien con Starship si quieres un prompt consistente entre shells.

## Scripting

Si escribes scripts de automatización que necesitan ejecutarse en diferentes sistemas, Zsh (o Bash) es la opción más segura. Los scripts de Zsh se ejecutan en macOS (donde Zsh es el shell predeterminado) y en la mayoría de sistemas Linux con Zsh instalado. Los scripts de Bash se ejecutan en todas partes.

Los scripts de Fish solo se ejecutan en Fish. Para automatización, mantengo mis scripts como archivos Bash con shebangs `#!/bin/bash` y los ejecuto desde Fish. Esta es la recomendación estándar en la comunidad de Fish. Fish está pensado para ser tu shell interactivo, no necesariamente tu lenguaje de scripting para automatización portable.

Dicho esto, la sintaxis de scripting de Fish es agradable para cosas específicas de Fish como completados personalizados, funciones de prompt y manejadores de abreviaturas. Mira mi [guía de funciones de Fish Shell](/es/fish-shell-funciones-comandos-personalizados/) para ejemplos.

## Comparación de rendimiento

| Métrica | Fish 4.5 | Zsh (con Oh My Zsh) | Zsh (básico) |
|---|---|---|---|
| Tiempo de inicio | ~30ms | 200-800ms | ~40ms |
| Respuesta interactiva | Instantánea | Depende de plugins | Rápida |
| Uso de memoria | ~15MB | ~20-40MB | ~10MB |
| Escrito en | Rust | C | C |

Fish 4.0 fue reescrito en Rust (febrero de 2025), y la última versión es 4.5.0. El inicio es rápido y la respuesta interactiva es inmediata. Zsh con Oh My Zsh y varios plugins puede tener un retraso notable al iniciar, aunque esto varía mucho dependiendo de qué plugins tengas activados.

## Entonces, ¿cuál elegir?

**Elige Fish si:**
- Quieres que las cosas funcionen de inmediato sin configurarlas
- Pasas la mayor parte del tiempo ejecutando comandos de forma interactiva, no escribiendo scripts de shell
- Las diferencias con la sintaxis POSIX no te molestan
- Prefieres un ecosistema de plugins más pequeño y enfocado frente a uno enorme

**Elige Zsh si:**
- Quieres compatibilidad con Bash para poder pegar comandos de tutoriales sin cambios
- Te gusta tener un ecosistema de plugins masivo con muchos temas
- Escribes scripts de shell que necesitan ser portables
- Ya estás cómodo con tu configuración de Zsh y no te sientes limitado por ella

Si actualmente estás en Bash y buscas mejorar, te sugiero probar Fish primero. La barrera para probarlo es baja. Solo [instálalo en Ubuntu](/es/instalar-fish-shell-ubuntu/) (o [en macOS](/es/fish-shell-macos-configuracion/)), ejecuta `fish`, y úsalo un día. No tienes que establecerlo como tu shell predeterminado para probarlo. Si las diferencias de sintaxis te molestan demasiado, cámbiate a Zsh en su lugar.</content:encoded><category>linux</category><category>fish-shell</category></item><item><title>Cómo Usar NVM con Fish Shell</title><link>https://www.bitdoze.com/es/nvm-fish-shell/</link><guid isPermaLink="true">https://www.bitdoze.com/es/nvm-fish-shell/</guid><description>Instala y configura nvm.fish para gestionar múltiples versiones de Node.js en Fish Shell. Cubre instalación, cambio de versiones, soporte de .nvmrc y versiones por defecto.</description><pubDate>Thu, 19 Feb 2026 01:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;

El nvm original (Node Version Manager) es un script de Bash. No funciona en Fish. Si intentas cargarlo con source en Fish, obtienes errores de sintaxis porque nvm depende de características POSIX shell que [Fish deliberadamente no soporta](/es/fish-shell-vs-bash-vs-zsh-comparacion/).

La solución es **nvm.fish** — un gestor de versiones de Node separado, escrito completamente en Fish. Mismo concepto (instalar y cambiar entre versiones de Node), implementación diferente. Está hecho por la misma persona que creó [Fisher](/es/mejores-plugins-fish-shell/), y funciona muy bien.

## Instalar nvm.fish

Necesitas [Fisher](/es/mejores-plugins-fish-shell/) primero. Si no lo tienes:

```fish
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source &amp;&amp; fisher install jorgebucaran/fisher
```

Luego instala nvm.fish:

```fish
fisher install jorgebucaran/nvm.fish
```

Eso es todo. No se necesita configuración adicional. Reinicia tu shell o abre una nueva pestaña de terminal.

## Instalar versiones de Node

```fish
# Install the latest release
nvm install latest

# Install the latest LTS version
nvm install lts

# Install a specific version
nvm install 22
nvm install 20.11.0
nvm install v18.19.1

# Install an LTS line by codename
nvm install iron    # Node 20 LTS
```

nvm.fish descarga binarios precompilados de Node y los almacena en `~/.local/share/nvm/` (siguiendo la especificación XDG Base Directory). Cada versión tiene su propio directorio.

## Cambiar entre versiones

```fish
# Use a specific version (current session only)
nvm use 22
nvm use lts
nvm use latest

# Check which version is active
nvm current

# List installed versions
nvm list
```

`nvm use` cambia la versión activa de Node para tu sesión actual del shell. Abre una nueva terminal y vuelve a la versión por defecto (o a lo que especifique `.nvmrc` para ese directorio).

## Establecer una versión de Node por defecto

Sin una versión por defecto, las nuevas sesiones del shell no tendrán ningún Node gestionado por nvm en el PATH. Configúrala con una variable universal:

```fish
set --universal nvm_default_version v22
```

Ahora cada nueva sesión de Fish arranca con Node 22 activo. Puedes usar `lts`, `latest` o un número de versión específico.

## Cambio automático de versión con .nvmrc

Esta es la función que más uso. Crea un archivo `.nvmrc` en el directorio raíz de un proyecto:

```bash
echo &quot;20&quot; &gt; ~/projects/legacy-app/.nvmrc
echo &quot;22&quot; &gt; ~/projects/new-app/.nvmrc
```

Cuando haces `cd` a un directorio con un archivo `.nvmrc` (o `.node-version`), `nvm use` lo lee automáticamente. Funciona recorriendo el árbol de directorios hacia arriba hasta encontrar el archivo.

```fish
cd ~/projects/legacy-app
node --version  # v20.x.x

cd ~/projects/new-app
node --version  # v22.x.x
```

&lt;Notice type=&quot;info&quot; title=&quot;Formatos de .nvmrc&quot;&gt;
nvm.fish soporta los mismos formatos de `.nvmrc` que el nvm original: números de versión (`20`, `20.11`, `20.11.0`), `lts`, `latest` y nombres clave de LTS (`iron`, `hydrogen`). Los archivos llamados `.node-version` también funcionan.
&lt;/Notice&gt;

## Instalar paquetes globales por defecto

Si quieres que ciertos paquetes npm se instalen cada vez que instalas una nueva versión de Node:

```fish
set --universal nvm_default_packages yarn typescript tsx
```

Ahora `nvm install 22` también ejecutará `npm install -g yarn typescript tsx` después de descargar Node.

## Desinstalar versiones de Node

```fish
nvm uninstall v18
nvm uninstall 20.11.0
```

Esto elimina los binarios instalados del directorio de datos de nvm.

## Cambiar el mirror de descarga

Si necesitas usar un mirror (proxy corporativo, mirror de China, etc.):

```fish
set --universal nvm_mirror https://npmmirror.com/mirrors/node
```

El valor por defecto es `https://nodejs.org/dist`.

## Cambiar el directorio de datos

Por defecto, nvm.fish almacena todo en `~/.local/share/nvm/`. Cámbialo con:

```fish
set --global nvm_data ~/.nvm
```

Si antes usabas el nvm basado en Bash y tienes versiones de Node en `~/.nvm/`, esto permite que nvm.fish use ese mismo directorio. Las versiones instaladas por cualquiera de las dos herramientas deberían funcionar.

## nvm.fish vs nvm (la versión Bash)

| | nvm.fish | nvm (Bash) |
|---|---|---|
| Soporte de shell | Solo Fish | Bash, Zsh |
| Escrito en | Fish | Bash/POSIX sh |
| Instalación | Plugin de Fisher | Script con curl |
| Impacto en arranque | Mínimo (carga diferida) | Puede agregar 200-500ms |
| Soporte de `.nvmrc` | Sí | Sí |
| Completado con Tab | Sí (nativo de Fish) | Básico |
| Nombres clave LTS | Sí | Sí |

La diferencia de rendimiento merece mencionarse. El nvm basado en Bash es conocido por ralentizar el arranque del shell porque necesita cargarse con source en cada nueva sesión. nvm.fish carga de forma diferida — solo se activa cuando realmente ejecutas `nvm` o cambias a un directorio con `.nvmrc`. No lo notarás en tu tiempo de arranque.

## nvm.fish vs fnm vs Volta

Hay otros gestores de versiones de Node que funcionan con Fish:

**fnm** (Fast Node Manager) — escrito en Rust, funciona con cualquier shell. Es más rápido que nvm.fish para instalaciones porque usa descargas paralelas. Instálalo con `brew install fnm` o `cargo install fnm`, luego agrega `fnm env --use-on-cd --shell fish | source` a tu config.fish.

**Volta** — también basado en Rust, también cross-shell. Su principal diferenciador es la gestión de paquetes globales por proyecto. Instálalo con `curl https://get.volta.sh | bash`, luego agrega `set -gx VOLTA_HOME ~/.volta; fish_add_path $VOLTA_HOME/bin` a config.fish.

Yo uso nvm.fish porque es Fish puro, se integra con Fisher, y no necesito las funciones extra de fnm o Volta. Si usas múltiples shells, fnm o Volta son mejores opciones ya que funcionan en todos lados.

## Solución de problemas

**`nvm: command not found`** — Fisher no se instaló correctamente, o tu shell no se ha recargado. Ejecuta `fisher list` para verificar si aparece `jorgebucaran/nvm.fish`. Prueba abriendo una nueva terminal.

**Node no se encuentra después de instalar** — Asegúrate de haber ejecutado `nvm use &lt;version&gt;` después de instalar. O configura una versión por defecto: `set --universal nvm_default_version lts`.

**`.nvmrc` no se lee automáticamente** — nvm.fish lee `.nvmrc` cuando ejecutas `nvm install` o `nvm use` sin argumentos. Para el cambio automático al hacer `cd`, asegúrate de usar una versión reciente de nvm.fish (`fisher update jorgebucaran/nvm.fish`).

## Guías relacionadas

- [Instalar Fish Shell en Ubuntu](/es/instalar-fish-shell-ubuntu/) — configura Fish primero
- [Fish Shell en macOS](/es/fish-shell-macos-configuracion/) — configuración en Mac incluyendo Node con Homebrew
- [Mejores plugins de Fish Shell](/es/mejores-plugins-fish-shell/) — nvm.fish y otros plugins recomendados
- [Guía de funciones en Fish Shell](/es/fish-shell-funciones-comandos-personalizados/) — crea tus propias funciones auxiliares para Node</content:encoded><category>linux</category><category>fish-shell</category></item><item><title>Guia de Configuracion de PicoClaw: Asistente IA en Go para Hardware de $10</title><link>https://www.bitdoze.com/es/guia-configuracion-picoclaw/</link><guid isPermaLink="true">https://www.bitdoze.com/es/guia-configuracion-picoclaw/</guid><description>Guia paso a paso para instalar PicoClaw en un VPS Linux con MiniMax M2.5, GLM-5, integracion con Discord y Brave Search. Cubre configuracion, proveedores, memoria y despliegue con Docker.</description><pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import YouTubeEmbed from &quot;@components/widgets/YouTubeEmbed.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

[PicoClaw](https://github.com/sipeed/picoclaw) es una reescritura de nanobot en Go que compila a un unico binario, arranca en menos de un segundo, y usa menos de 10MB de RAM. Sipeed, la empresa de hardware RISC-V detras de NanoKVM y MaixCAM, lo construyo para ejecutarse en sus placas LicheeRV-Nano de $10. He estado ejecutandolo junto con mis configuraciones de [nanobot](/es/guia-configuracion-nanobot/) y [ZeroClaw](/es/guia-configuracion-zeroclaw/) durante la ultima semana, y los numeros de recursos son reales. Si quieres un asistente de IA en hardware donde Python se ahogaria, este es el que debes mirar.

Esta guia te lleva paso a paso para poner PicoClaw en funcionamiento en un VPS o SBC con MiniMax M2.5 y GLM-5 como modelos, Brave Search para acceso web, y Discord como canal de chat.

&lt;Button text=&quot;PicoClaw GitHub&quot; link=&quot;https://github.com/sipeed/picoclaw&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre esta guia&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Instalar PicoClaw desde el codigo fuente, binario precompilado, o Docker&lt;/li&gt;
&lt;li&gt;Configurar MiniMax M2.5 y Zhipu GLM-5 como proveedores LLM&lt;/li&gt;
&lt;li&gt;Configurar Brave Search y DuckDuckGo para acceso web&lt;/li&gt;
&lt;li&gt;Integracion con canal de Discord&lt;/li&gt;
&lt;li&gt;Sistema de memoria, archivos de workspace y tareas programadas&lt;/li&gt;
&lt;li&gt;Sandbox de seguridad y opciones de despliegue&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

Si estas comparando opciones de bots auto-alojados, nuestro resumen de [alternativas a OpenClaw](/es/alternativas-openclaw/) incluye PicoClaw junto con nanobot, NanoClaw, memU, IronClaw y ZeroClaw.

## Que es realmente PicoClaw

PicoClaw es un asistente de IA de codigo abierto de Sipeed. El proyecto comenzo como un port de nanobot a Go, y supuestamente el 95% de la migracion fue realizada por el propio agente de IA con revision humana. El resultado es un unico binario que se ejecuta en RISC-V, ARM y x86 sin ninguna dependencia de runtime.

La arquitectura sigue el mismo patron que nanobot:

```
Tu (Discord / Telegram / DingTalk / LINE / QQ / CLI)
    ↓
PicoClaw Gateway (ejecutandose en tu VPS o SBC)
    ↓
Proveedor LLM (OpenRouter, Zhipu, Anthropic, OpenAI, Gemini, Groq, DeepSeek)
    ↓
Herramientas (shell, acceso a archivos, busqueda web, memoria, tareas programadas)
```

Los mensajes llegan desde tu app de chat, PicoClaw los enruta al LLM que hayas configurado, y el modelo puede usar herramientas integradas para ejecutar comandos shell, leer y escribir archivos, y buscar en la web. Todo excepto las llamadas a la API del LLM se queda en tu maquina.

### Como se compara

| | OpenClaw | NanoBot | PicoClaw 🦐 |
|---|---|---|---|
| **Lenguaje** | TypeScript | Python | **Go** |
| **RAM** | &gt; 1GB | &gt; 100MB | **&lt; 10MB** |
| **Arranque (0.8GHz)** | &gt; 500s | &gt; 30s | **&lt; 1s** |
| **Binario** | ~28MB (dist) | N/A (scripts) | **Unico binario** |
| **Costo min hardware** | Mac Mini $599 | ~$50 SBC | **$10 placa** |
| **Canales** | 4 plataformas | 9 plataformas | **5+ plataformas** |
| **Proveedores** | Varios | 13+ | **8+** |
| **Memoria** | Archivo + semantica | Basada en archivos | **Workspace basado en archivos** |

## Por que MiniMax M2.5 y GLM-5

Ambos modelos salieron en febrero de 2026 y funcionan bien con un bot ligero como PicoClaw.

### MiniMax M2.5

MiniMax M2.5 es un modelo Mixture-of-Experts de 230B con solo 10B parametros activos por pasada. Es rapido y barato:

| Especificacion | Valor |
|------|-------|
| Arquitectura | 230B MoE, 10B activos |
| Ventana de contexto | 1M tokens |
| Velocidad (Lightning) | 100 tokens/seg |
| Costo (Lightning) | $0.30/M entrada, $2.40/M salida |
| SWE-Bench Verified | 80.2% |
| Licencia | MIT modificada (codigo abierto) |

Obtiene 80.2% en SWE-Bench Verified, igualando a Claude Opus 4.6 a aproximadamente 1/20 del costo. La ventana de contexto de 1M tokens significa que PicoClaw no alcanzara limites de contexto ni con conversaciones largas.

### GLM-5

GLM-5 de Zhipu AI es un modelo MoE de 744B con 40-44B parametros activos:

| Especificacion | Valor |
|------|-------|
| Arquitectura | 744B MoE, ~40B activos |
| Ventana de contexto | 200K tokens |
| SWE-Bench Verified | 77.8% |
| BrowseComp | #1 codigo abierto |
| Licencia | MIT |

GLM-5 ocupa el primer lugar entre modelos de codigo abierto en BrowseComp (tareas de agentes de busqueda web), asi que es una opcion solida para un bot que hace muchas consultas web. Ambos modelos estan disponibles a traves de sus propias APIs y a traves de OpenRouter.

## Instalacion

Tres formas de instalar PicoClaw. El binario precompilado es la ruta mas rapida.

&lt;Tabs&gt;
&lt;Tab name=&quot;Binario precompilado (mas rapido)&quot;&gt;

Descarga el binario para tu plataforma desde la [pagina de releases](https://github.com/sipeed/picoclaw/releases):

```bash
# Ejemplo para Linux amd64 — revisa releases para la ultima version
wget https://github.com/sipeed/picoclaw/releases/download/v0.1.1/picoclaw-linux-amd64
chmod +x picoclaw-linux-amd64
sudo mv picoclaw-linux-amd64 /usr/local/bin/picoclaw
```

Para ARM64 (Raspberry Pi, telefono via Termux):

```bash
wget https://github.com/sipeed/picoclaw/releases/download/v0.1.1/picoclaw-linux-arm64
chmod +x picoclaw-linux-arm64
sudo mv picoclaw-linux-arm64 /usr/local/bin/picoclaw
```

&lt;/Tab&gt;
&lt;Tab name=&quot;Desde el codigo fuente (recomendado para dev)&quot;&gt;

Necesitas Go 1.21+ instalado:

```bash
git clone https://github.com/sipeed/picoclaw.git
cd picoclaw
make deps
make build
```

O compila e instala en un solo paso:

```bash
make install
```

Para compilacion cruzada para multiples plataformas:

```bash
make build-all
```

&lt;/Tab&gt;
&lt;Tab name=&quot;Docker&quot;&gt;

```bash
git clone https://github.com/sipeed/picoclaw.git
cd picoclaw

# Configura tu config
cp config/config.example.json config/config.json
nano config/config.json

# Inicia el gateway
docker compose --profile gateway up -d

# Revisa los logs
docker compose logs -f picoclaw-gateway
```

Para una consulta puntual sin el gateway:

```bash
docker compose run --rm picoclaw-agent -m &quot;What is 2+2?&quot;
```

&lt;/Tab&gt;
&lt;/Tabs&gt;

Despues de instalar, inicializa el workspace y la configuracion:

```bash
picoclaw onboard
```

Esto crea el directorio `~/.picoclaw/` con un `config.json` por defecto y una carpeta `workspace/`.

Verifica que todo funciona:

```bash
picoclaw status
```

## Configurar MiniMax M2.5

PicoClaw usa un archivo de configuracion JSON en `~/.picoclaw/config.json`. El sistema de proveedores enruta modelos basandose en palabras clave en el nombre del modelo, similar a como lo hace nanobot.

### Obtener una clave API

1. Ve a [platform.minimax.io](https://platform.minimax.io) (global) o [minimaxi.com](https://www.minimaxi.com) (China continental)
2. Crea una cuenta y genera una clave API

&lt;Notice type=&quot;success&quot; title=&quot;Plan de codificacion MiniMax — 10% de descuento&quot;&gt;
MiniMax ofrece planes de codificacion con precios para cargas de trabajo de desarrolladores. [Obten 10% de descuento con nuestro enlace de referido](https://go.bitdoze.com/minimax). Para detalles sobre como se comparan GLM-5 y MiniMax M2.5 para bots siempre activos, ve nuestro desglose de [mejores modelos open source para OpenClaw](/best-opensource-models-for-openclaw/).
&lt;/Notice&gt;

### Agregar a la configuracion

La forma mas simple es a traves de OpenRouter, que te da acceso a MiniMax junto con cientos de otros modelos:

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: &quot;minimax/MiniMax-M2.5&quot;,
      &quot;max_tokens&quot;: 8192,
      &quot;temperature&quot;: 0.7
    }
  },
  &quot;providers&quot;: {
    &quot;openrouter&quot;: {
      &quot;api_key&quot;: &quot;sk-or-your-openrouter-key&quot;,
      &quot;api_base&quot;: &quot;https://openrouter.ai/api/v1&quot;
    }
  }
}
```

Para conectarte directamente a la API de MiniMax, configura un proveedor dedicado:

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: &quot;MiniMax-M2.5&quot;
    }
  },
  &quot;providers&quot;: {
    &quot;minimax&quot;: {
      &quot;api_key&quot;: &quot;your-minimax-api-key&quot;
    }
  }
}
```

Para el endpoint de China continental, agrega `&quot;api_base&quot;: &quot;https://api.minimaxi.com/v1&quot;` al proveedor minimax.

### Probar

```bash
picoclaw agent -m &quot;What&apos;s 42 * 17?&quot;
```

Si obtienes una respuesta, MiniMax esta funcionando.

## Configurar GLM-5 (Zhipu)

PicoClaw tiene soporte integrado para Zhipu. El proveedor enruta automaticamente cuando detecta `glm` en el nombre del modelo.

### Obtener una clave API

1. Ve a [bigmodel.cn](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys)
2. Registrate y crea una clave API

&lt;Notice type=&quot;success&quot; title=&quot;Plan de codificacion Z.AI GLM — 10% de descuento&quot;&gt;
Z.AI ofrece [planes de codificacion GLM](https://z.ai/subscribe?ic=NKNUNYDRZT) diseñados para cargas de trabajo continuas de desarrolladores. Usa nuestro enlace para obtener 10% de descuento.
&lt;/Notice&gt;

### Agregar a la configuracion

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: &quot;glm-4.7&quot;,
      &quot;max_tokens&quot;: 8192,
      &quot;temperature&quot;: 0.7,
      &quot;max_tool_iterations&quot;: 20
    }
  },
  &quot;providers&quot;: {
    &quot;zhipu&quot;: {
      &quot;api_key&quot;: &quot;your-zhipu-api-key&quot;,
      &quot;api_base&quot;: &quot;https://open.bigmodel.cn/api/paas/v4&quot;
    }
  }
}
```

### Cambiar entre modelos

Configura ambos proveedores y cambia el modelo por defecto cuando quieras. Cambia `&quot;model&quot;` a `&quot;MiniMax-M2.5&quot;` o `&quot;glm-4.7&quot;` y PicoClaw elige el proveedor correcto automaticamente. No se necesita reinicio para uso CLI. Para el gateway, reinicia con `picoclaw gateway`.

## Configurar busqueda web

PicoClaw soporta tanto Brave Search como DuckDuckGo. Brave da mejores resultados pero necesita una clave API. DuckDuckGo funciona de inmediato sin necesidad de clave.

### Brave Search

1. Ve a [brave.com/search/api](https://brave.com/search/api/)
2. Registrate para una cuenta
3. El tier gratuito te da 2,000 busquedas al mes
4. Genera una clave API desde el dashboard

### Agregar a la configuracion

```json
{
  &quot;tools&quot;: {
    &quot;web&quot;: {
      &quot;brave&quot;: {
        &quot;enabled&quot;: true,
        &quot;api_key&quot;: &quot;your-brave-search-api-key&quot;,
        &quot;max_results&quot;: 5
      },
      &quot;duckduckgo&quot;: {
        &quot;enabled&quot;: true,
        &quot;max_results&quot;: 5
      }
    }
  }
}
```

Mantén ambos habilitados. Si Brave alcanza un limite de velocidad o falla, PicoClaw hace fallback a DuckDuckGo automaticamente. La configuracion `max_results` controla cuantos resultados se obtienen por busqueda. Cinco es un valor razonable por defecto.

## Configuracion de Discord

Discord es uno de los canales que PicoClaw soporta junto con Telegram, QQ, DingTalk y LINE.

### Crear un bot de Discord

1. Ve a [discord.com/developers/applications](https://discord.com/developers/applications)
2. Haz clic en **New Application**, dale un nombre
3. Ve a **Bot** en la barra lateral izquierda, haz clic en **Add Bot**
4. Copia el token del bot

### Habilitar intents

Todavia en la pagina de configuracion del Bot:

1. Baja hasta **Privileged Gateway Intents**
2. Habilita **MESSAGE CONTENT INTENT** (obligatorio, si no el bot no puede leer mensajes)
3. Opcionalmente habilita **SERVER MEMBERS INTENT** si planeas usar listas de permitidos

### Obtener tu ID de usuario

1. Abre Configuracion de Discord → **Advanced** → habilita **Developer Mode**
2. Haz clic derecho en tu avatar en cualquier parte de Discord
3. Haz clic en **Copy User ID**

### Configurar PicoClaw

Agrega el canal de Discord a tu `~/.picoclaw/config.json`:

```json
{
  &quot;channels&quot;: {
    &quot;discord&quot;: {
      &quot;enabled&quot;: true,
      &quot;token&quot;: &quot;YOUR_DISCORD_BOT_TOKEN&quot;,
      &quot;allow_from&quot;: [&quot;YOUR_USER_ID&quot;]
    }
  }
}
```

El array `allow_from` restringe quien puede hablar con el bot. Dejalo vacio para permitir que cualquiera en tu servidor lo use. Para un bot personal, siempre bloquealo a tu ID de usuario.

### Invitar el bot a tu servidor

1. En el portal de desarrolladores de Discord, ve a **OAuth2** → **URL Generator**
2. En **Scopes**, marca `bot`
3. En **Bot Permissions**, marca `Send Messages` y `Read Message History`
4. Copia la URL generada y abrela en tu navegador
5. Selecciona el servidor al que quieres agregar el bot

### Iniciar el gateway

```bash
picoclaw gateway
```

Envia un mensaje en Discord. El bot deberia responder. Si no pasa nada, revisa `picoclaw status` y mira los logs del gateway.

## Ejemplo de configuracion completa

Asi se ve un `~/.picoclaw/config.json` completo con OpenRouter, Zhipu, Brave Search, DuckDuckGo y Discord:

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;workspace&quot;: &quot;~/.picoclaw/workspace&quot;,
      &quot;model&quot;: &quot;minimax/MiniMax-M2.5&quot;,
      &quot;max_tokens&quot;: 8192,
      &quot;temperature&quot;: 0.7,
      &quot;max_tool_iterations&quot;: 20
    }
  },
  &quot;providers&quot;: {
    &quot;openrouter&quot;: {
      &quot;api_key&quot;: &quot;sk-or-your-openrouter-key&quot;,
      &quot;api_base&quot;: &quot;https://openrouter.ai/api/v1&quot;
    },
    &quot;zhipu&quot;: {
      &quot;api_key&quot;: &quot;your-zhipu-api-key&quot;,
      &quot;api_base&quot;: &quot;https://open.bigmodel.cn/api/paas/v4&quot;
    },
    &quot;groq&quot;: {
      &quot;api_key&quot;: &quot;gsk_your-groq-key&quot;
    }
  },
  &quot;channels&quot;: {
    &quot;discord&quot;: {
      &quot;enabled&quot;: true,
      &quot;token&quot;: &quot;YOUR_DISCORD_BOT_TOKEN&quot;,
      &quot;allow_from&quot;: [&quot;YOUR_USER_ID&quot;]
    },
    &quot;telegram&quot;: {
      &quot;enabled&quot;: false,
      &quot;token&quot;: &quot;&quot;,
      &quot;allow_from&quot;: []
    }
  },
  &quot;tools&quot;: {
    &quot;web&quot;: {
      &quot;brave&quot;: {
        &quot;enabled&quot;: true,
        &quot;api_key&quot;: &quot;your-brave-search-api-key&quot;,
        &quot;max_results&quot;: 5
      },
      &quot;duckduckgo&quot;: {
        &quot;enabled&quot;: true,
        &quot;max_results&quot;: 5
      }
    },
    &quot;cron&quot;: {
      &quot;exec_timeout_minutes&quot;: 5
    }
  },
  &quot;heartbeat&quot;: {
    &quot;enabled&quot;: true,
    &quot;interval&quot;: 30
  }
}
```

### Explicacion de las configuraciones

| Configuracion | Por defecto | Que hace |
|---------|---------|-------------|
| `agents.defaults.model` | `anthropic/claude-opus-4-5` | Que modelo maneja tus mensajes |
| `agents.defaults.max_tokens` | `8192` | Tokens maximos por respuesta del LLM |
| `agents.defaults.temperature` | `0.7` | Aleatoriedad (menor = mas deterministico) |
| `agents.defaults.max_tool_iterations` | `20` | Cuantas llamadas de herramientas por turno antes de detenerse |
| `agents.defaults.restrict_to_workspace` | `true` | Limita todo acceso a archivos/shell al workspace |
| `heartbeat.interval` | `30` | Minutos entre verificaciones de tareas periodicas |
| `tools.cron.exec_timeout_minutes` | `5` | Timeout para ejecucion de tareas programadas |

## Sistema de proveedores

PicoClaw enruta proveedores por familia de protocolo. Los endpoints compatibles con OpenAI (OpenRouter, Groq, Zhipu) comparten una ruta de codigo. Anthropic tiene la suya propia. Agregar un nuevo proveedor compatible con OpenAI es principalmente una operacion de configuracion con `api_base` y `api_key`.

| Proveedor | Proposito | Obtener clave API |
|----------|---------|-------------|
| OpenRouter | Gateway a cualquier modelo | [openrouter.ai](https://openrouter.ai/keys) |
| Zhipu | Modelos GLM (directo) | [bigmodel.cn](https://open.bigmodel.cn/usercenter/proj-mgmt/apikeys) |
| Gemini | Google Gemini (directo) | [aistudio.google.com](https://aistudio.google.com/api-keys) |
| Anthropic | Claude (directo) | [console.anthropic.com](https://console.anthropic.com) |
| OpenAI | GPT (directo) | [platform.openai.com](https://platform.openai.com) |
| DeepSeek | DeepSeek (directo) | [platform.deepseek.com](https://platform.deepseek.com) |
| Groq | Inferencia rapida + Whisper voz | [console.groq.com](https://console.groq.com) |

&lt;Notice type=&quot;info&quot; title=&quot;Tiers gratuitos de API&quot;&gt;
OpenRouter da 200K tokens/mes gratis. Zhipu da 200K tokens/mes gratis. Brave Search da 2,000 consultas/mes gratis. Groq tiene un tier gratuito para inferencia rapida. Puedes empezar sin gastar nada.
&lt;/Notice&gt;

## Memoria y workspace

PicoClaw almacena la memoria y configuracion en el directorio de workspace:

```
~/.picoclaw/workspace/
├── sessions/          # Sesiones de conversacion e historial
├── memory/            # Memoria a largo plazo (MEMORY.md)
├── state/             # Estado persistente (ultimo canal, etc.)
├── cron/              # Base de datos de trabajos programados
├── skills/            # Skills personalizadas
├── AGENTS.md          # Guia de comportamiento del agente
├── HEARTBEAT.md       # Prompts de tareas periodicas
├── IDENTITY.md        # Identidad del agente
├── SOUL.md            # Alma del agente / personalidad
├── TOOLS.md           # Descripciones de herramientas
└── USER.md            # Tu informacion personal y preferencias
```

Dile al bot que recuerde algo y lo escribe en `memory/MEMORY.md`. Las sesiones se almacenan por conversacion. Los archivos de bootstrap (`SOUL.md`, `USER.md`, etc.) se cargan en el prompt del sistema cada vez que el bot procesa un mensaje.

```bash
nano ~/.picoclaw/workspace/USER.md
```

Agrega el contexto que quieras que el bot siempre tenga — detalles de proyectos, preferencias de comunicacion,背景 tecnico. Esto funciona igual que los [archivos de workspace de nanobot](/es/guia-configuracion-nanobot/).

## Heartbeat y tareas programadas

PicoClaw puede ejecutar tareas periodicas automaticamente. Crea un archivo `HEARTBEAT.md` en tu workspace:

```markdown
# Tareas Periodicas

- Revisar el pronostico del clima
- Buscar noticias de IA en la web y resumir
```

El agente lee este archivo cada 30 minutos (configurable) y ejecuta cada tarea usando las herramientas disponibles. Para tareas de larga duracion, PicoClaw genera un subagente que trabaja independientemente sin bloquear el loop principal de heartbeat.

Tambien puedes gestionar trabajos puntuales y recurrentes desde el CLI:

```bash
# Agregar un recordatorio
picoclaw cron add --name &quot;morning&quot; --message &quot;Good morning! What&apos;s in the news?&quot; --cron &quot;0 9 * * *&quot;

# Listar todos los trabajos
picoclaw cron list
```

Los trabajos se almacenan en `~/.picoclaw/workspace/cron/` y se procesan automaticamente.

## Sandbox de seguridad

PicoClaw se ejecuta en un entorno aislado por defecto. Con `restrict_to_workspace` establecido en `true`, el agente solo puede acceder a archivos y ejecutar comandos dentro del directorio de workspace.

### Herramientas protegidas

| Herramienta | Funcion | Restriccion |
|------|----------|-------------|
| `read_file` | Leer archivos | Solo workspace |
| `write_file` | Escribir archivos | Solo workspace |
| `list_dir` | Listar directorios | Solo workspace |
| `edit_file` | Editar archivos | Solo workspace |
| `append_file` | Agregar a archivos | Solo workspace |
| `exec` | Ejecutar comandos | Rutas deben estar dentro del workspace |

### Bloqueo de comandos peligrosos

Incluso con `restrict_to_workspace` en `false`, PicoClaw bloquea comandos destructivos:

- `rm -rf`, `del /f`, `rmdir /s` — eliminacion masiva
- `format`, `mkfs`, `diskpart` — formateo de disco
- `dd if=` — imagen de disco
- Escritura a `/dev/sd[a-z]` — escritura directa a disco
- `shutdown`, `reboot`, `poweroff` — apagado del sistema
- Fork bombs

El limite del sandbox se aplica consistentemente a traves del agente principal, subagentes y tareas de heartbeat. No hay forma de evadirlo a traves de subagentes o trabajos programados.

### Deshabilitar restricciones

Si necesitas que el agente acceda a rutas fuera del workspace:

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;restrict_to_workspace&quot;: false
    }
  }
}
```

&lt;Notice type=&quot;warning&quot; title=&quot;Riesgo de seguridad&quot;&gt;
Deshabilitar la restriccion de workspace permite al agente acceder a cualquier ruta en tu sistema. Solo hazlo en entornos controlados donde confias en la salida del modelo.
&lt;/Notice&gt;

## Despliegue con Docker

PicoClaw tiene una configuracion de Docker Compose con perfiles separados para modo agente y modo gateway.

### Usando Docker Compose

```bash
git clone https://github.com/sipeed/picoclaw.git
cd picoclaw

# Configurar
cp config/config.example.json config/config.json
nano config/config.json

# Iniciar gateway (ejecucion continua)
docker compose --profile gateway up -d

# Revisar logs
docker compose logs -f picoclaw-gateway

# Detener
docker compose --profile gateway down
```

### Modo agente (consultas puntuales)

```bash
# Hacer una pregunta
docker compose run --rm picoclaw-agent -m &quot;What is 2+2?&quot;

# Modo interactivo
docker compose run --rm picoclaw-agent
```

### Recompilar despues de actualizaciones

```bash
docker compose --profile gateway build --no-cache
docker compose --profile gateway up -d
```

El archivo compose monta `config.json` como solo lectura y usa un volumen con nombre para el workspace, asi que tus datos sobreviven a reinicios del contenedor.

## Referencia del CLI

| Comando | Que hace |
|---------|-------------|
| `picoclaw onboard` | Inicializar configuracion y workspace |
| `picoclaw agent -m &quot;...&quot;` | Enviar un solo mensaje |
| `picoclaw agent` | Modo de chat interactivo |
| `picoclaw gateway` | Iniciar el gateway (conecta a canales de chat) |
| `picoclaw status` | Mostrar estado actual |
| `picoclaw cron list` | Listar trabajos programados |
| `picoclaw cron add` | Agregar un trabajo programado |

En modo interactivo, escribe `exit`, `quit`, o presiona `Ctrl+D` para salir.

## Hosting en VPS

PicoClaw se ejecuta en practicamente cualquier cosa. El binario unico con menos de 10MB de RAM significa que puedes desplegarlo en placas tan baratas como $10. Para un VPS, un [Hetzner CX22](/hetzner-cloud-review/) (2 vCPU, 4GB RAM) a €4.35/mes es excesivo, pero deja espacio para otros servicios.

&lt;Notice type=&quot;success&quot; title=&quot;Descuento en Hetzner&quot;&gt;
[Obten €20 de credito](https://go.bitdoze.com/hetzner), [Hostinger VPS](https://go.bitdoze.com/hostinger-vps) cuando te registres a traves de nuestro enlace de referido. Eso cubre alrededor de 4 meses de un CX22.
&lt;/Notice&gt;

Configuracion rapida en un VPS Ubuntu 24.04 nuevo:

```bash
ssh root@YOUR_SERVER_IP

# Actualizar sistema
apt update &amp;&amp; apt upgrade -y

# Descargar binario (revisa releases para la ultima version)
wget https://github.com/sipeed/picoclaw/releases/download/v0.1.1/picoclaw-linux-amd64
chmod +x picoclaw-linux-amd64
mv picoclaw-linux-amd64 /usr/local/bin/picoclaw

# Inicializar
picoclaw onboard

# Editar config
nano ~/.picoclaw/config.json

# Iniciar gateway en segundo plano
nohup picoclaw gateway &gt; /var/log/picoclaw.log 2&gt;&amp;1 &amp;
```

Para una configuracion de daemon apropiada, crea un servicio systemd:

```ini
[Unit]
Description=PicoClaw gateway
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/picoclaw gateway
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
```

Guarda en `/etc/systemd/system/picoclaw.service`, luego:

```bash
systemctl daemon-reload
systemctl enable picoclaw
systemctl start picoclaw
```

### Ejecutar en hardware economico

PicoClaw fue diseñado para esto. Una LicheeRV-Nano de $10 con Ethernet o WiFi6 puede servir como asistente doméstico minimal. Un NanoKVM de $30-50 funciona para mantenimiento automatizado de servidores. Un MaixCAM maneja casos de uso de monitoreo inteligente.

Para telefonos Android antiguos, instala Termux y ejecuta el binario ARM64:

```bash
pkg install proot wget
wget https://github.com/sipeed/picoclaw/releases/download/v0.1.1/picoclaw-linux-arm64
chmod +x picoclaw-linux-arm64
termux-chroot ./picoclaw-linux-arm64 onboard
```

Si quieres ejecutar modelos locales junto con PicoClaw, revisa nuestra guia de [instalar Ollama con Docker](/ollama-docker-install/). PicoClaw funciona con cualquier endpoint compatible con OpenAI, asi que apuntarlo a un servidor Ollama local es un cambio de configuracion de una linea.

## PicoClaw vs nanobot vs ZeroClaw

Uso los tres en este punto, asi que aqui va una comparacion directa:

| Aspecto | PicoClaw 🦐 | nanobot | ZeroClaw 🦀 |
|--------|------------|---------|------------|
| Lenguaje | Go | Python | Rust |
| Uso de RAM | &lt; 10MB | ~100MB | &lt; 5MB |
| Arranque | &lt; 1s | &gt; 2s | &lt; 10ms |
| Binario | Binario Go unico | N/A (scripts) | 3.4MB binario Rust |
| Formato de config | JSON | JSON | TOML |
| Cantidad de canales | 5+ | 9 | 8+ |
| Cantidad de proveedores | 8+ | 13+ | 22+ |
| Memoria | Workspace basado en archivos | Basada en archivos | Busqueda hibrida SQLite |
| Seguridad | Sandbox de workspace + bloqueo de comandos | Listas de permitidos | Emparejamiento + sandbox + listas de permitidos |
| Metodo de instalacion | Descarga binaria / `make install` | `pip install` | `cargo install` |
| Tiempo de configuracion | ~2 minutos (binario) | ~5 minutos | ~10 minutos (incluye compilacion) |

PicoClaw es el mas facil de desplegar: descarga un binario, ejecutalo, listo. nanobot tiene mejor cobertura de canales y una comunidad mas grande. ZeroClaw tiene el sistema de memoria mas capaz y el soporte de proveedores mas amplio. Para la guia de configuracion de nanobot, ve nuestro [tutorial completo](/es/guia-configuracion-nanobot/). Para ZeroClaw, ve la [guia de configuracion](/es/guia-configuracion-zeroclaw/).

&lt;Accordion label=&quot;Preguntas frecuentes&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

**¿Cuanto cuesta ejecutar PicoClaw?**

VPS: ~$5/mes en Hetzner, aunque PicoClaw puede ejecutarse en hardware tan barato como $10 unica vez. La API Lightning de MiniMax M2.5 cuesta aproximadamente $1/hora de uso continuo, pero los costos reales son mucho menores ya que el bot solo llama a la API cuando le envias un mensaje. Espera $5-20/mes para uso personal. Tambien puedes empezar con los tiers gratuitos de OpenRouter y Zhipu.

**¿Puedo usar PicoClaw sin costos de API?**

Parcialmente. La busqueda web de DuckDuckGo funciona sin clave API. Para el LLM, necesitas una API de pago o un modelo local via un endpoint compatible con OpenAI. Apunta PicoClaw a un servidor Ollama local y no hay facturas de API.

**¿PicoClaw funciona en una Raspberry Pi?**

Si. Descarga el binario ARM64 y se ejecuta en cualquier Pi con red. El binario usa menos de 10MB de RAM en ejecucion, asi que incluso una Pi Zero 2W lo maneja. PicoClaw fue literalmente diseñado para computadoras de placa unica de $10.

**¿Pueden varias personas usar una instancia de PicoClaw?**

Si. Agrega multiples IDs de usuario a `allow_from` en tu configuracion de canal. Cada persona obtiene su propio contexto de conversacion a traves del sistema de sesiones.

**¿Cual es la diferencia entre agent y gateway?**

`picoclaw agent` es para chat directo por CLI. `picoclaw gateway` inicia el servicio en segundo plano que se conecta a Discord, Telegram y otras plataformas de chat. Para uso 24/7, quieres el gateway.

**¿Puedo agregar Telegram junto con Discord?**

Si. Configura ambos canales en el mismo archivo de configuracion y el gateway los maneja simultaneamente. Para Telegram, necesitas un token de bot de @BotFather — el proceso es el mismo que se describe en la guia de nanobot.

**¿PicoClaw soporta mensajes de voz?**

Si, a traves de la integracion Whisper de Groq. Configura una clave API de Groq y los mensajes de voz de Telegram se transcriben automaticamente.

&lt;/Accordion&gt;

Si quieres explorar otras herramientas de codificacion con IA, nuestra [comparacion de herramientas de codificacion con IA](/ai-coading-tools/) cubre el panorama actual. Para un asistente auto-mejorante con modo de voz y migracion de OpenClaw, ve la [guia de configuracion de Hermes Agent](/es/guia-configuracion-hermes-agent/). Para conceptos basicos de MCP que funcionan en todos estos asistentes, revisa la [introduccion a MCP para principiantes](/mcp-introduction-beginners/).

Este articulo tambien esta disponible en ingles: [PicoClaw Setup Guide](/picoclaw-setup-guide/).</content:encoded><category>ai</category><category>ai-tools</category><category>self-hosted</category><category>vps</category></item><item><title>Los Mejores Centros de Comando y Dashboards para OpenClaw en 2026</title><link>https://www.bitdoze.com/es/mejores-dashboards-openclaw/</link><guid isPermaLink="true">https://www.bitdoze.com/es/mejores-dashboards-openclaw/</guid><description>Un resumen de los mejores dashboards y centros de comando para OpenClaw — desde plataformas completas de orquestación multiagente hasta monitores ligeros de un solo archivo. Incluye Mission Control, LobsterBoard, AI Maestro, Clawe, Clawtrol, VidClaw, Clawd Control, OpenClaw Dashboard y Claw Dashboard.</description><pubDate>Wed, 18 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;

Una vez que tienes [OpenClaw ejecutándose en un VPS o Mac Mini](/es/guia-configuracion-openclaw/), la terminal se vuelve tediosa rápidamente. Empiezas a querer ver qué está haciendo realmente tu agente — qué sesiones están activas, en qué está gastando en llamadas de API, qué trabajos programados se ejecutaron anoche. Ahí es donde entran los dashboards.

Han aparecido varios en el último año. Algunos son plataformas completas de orquestación que te permiten crear tareas y despachar múltiples agentes. Otros son monitores de un solo archivo que colocas en el mismo servidor y olvidas. Revisé nueve de los más populares para que puedas elegir el adecuado sin pasar un día probando cada uno.

&lt;Notice type=&quot;info&quot; title=&quot;Qué Cubre Este Artículo&quot;&gt;
Nueve proyectos de dashboard y centro de comando para OpenClaw, ordenados por número de estrellas. Incluye configuración rápida, características principales y para qué caso de uso es mejor cada uno.
&lt;/Notice&gt;

## Comparación Rápida

| Proyecto | Estrellas | Lenguaje | Ideal Para |
|---------|-------|----------|----------|
| [Mission Control](https://github.com/crshdn/mission-control) | ⭐ 440 | TypeScript | Orquestación multiagente, planificación de tareas |
| [LobsterBoard](https://github.com/Curbob/LobsterBoard) | ⭐ 382 | JavaScript | Construir un dashboard personalizado con 50 widgets |
| [AI Maestro](https://github.com/23blocks-OS/ai-maestro) | ⭐ 324 | TypeScript | 80+ agentes en múltiples máquinas |
| [Clawe](https://github.com/getclawe/clawe) | ⭐ 261 | TypeScript | Equipo de agentes especializados, estilo Trello |
| [Clawd Control](https://github.com/Temaki-AI/clawd-control) | ⭐ 101 | HTML | Monitor de flota ligero, sin paso de compilación |
| [VidClaw](https://github.com/madrzak/vidclaw) | ⭐ 67 | JavaScript | Tablero de tareas, editor de alma, seguimiento de uso |
| [OpenClaw Dashboard](https://github.com/tugcantopaloglu/openclaw-dashboard) | ⭐ 60 | HTML | Reforzado en seguridad, MFA TOTP, sin dependencias |
| [Claw Dashboard](https://github.com/spleck/claw-dashboard) | ⭐ 49 | JavaScript | Monitor estilo terminal inspirado en btop/htop |
| [Clawtrol](https://github.com/nachoiacovino/clawtrol) | ⭐ 18 | TypeScript | Pantalla remota, terminal, explorador de archivos, kanban |

---

## 1. Mission Control — El Mejor en General

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/crshdn/mission-control&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; /&gt;

Mission Control es el dashboard de OpenClaw más popular por un amplio margen. Está construido alrededor de un tablero Kanban donde las tareas pasan por siete etapas: Planificación → Bandeja de entrada → Asignado → En Progreso → Pruebas → Revisión → Hecho. Cuando creas una tarea, un flujo de planificación de IA hace preguntas de aclaración antes de poner en marcha un agente especializado para ejecutarla.

El proyecto se conecta al gateway de OpenClaw a través de WebSocket, por lo que las tareas se despachan en tiempo real en lugar de usar sondeo. Los valores predeterminados de seguridad incluyen autenticación por token Bearer, validación con Zod y protección contra traversal de rutas. Hay una demo en vivo que puedes probar antes de instalar nada.

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;**Flujo de planificación de tareas**: La IA hace preguntas antes de comenzar el trabajo, para que los agentes reciban instrucciones precisas&lt;/li&gt;
&lt;li&gt;**Creación automática de agentes**: Genera agentes especializados por tarea en lugar de enviar todo a uno&lt;/li&gt;
&lt;li&gt;**Feed de eventos en vivo**: Flujo en tiempo real de actividad de agentes, cambios de estado de tareas y eventos del sistema&lt;/li&gt;
&lt;li&gt;**Soporte multi-máquina**: Ejecuta el dashboard en una máquina, los agentes en otra, a través de Tailscale&lt;/li&gt;
&lt;li&gt;**Almacenamiento SQLite**: No se necesita base de datos externa, se reinicia con un solo borrado de archivo&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

```bash
git clone https://github.com/crshdn/mission-control.git
cd mission-control
npm install
cp .env.example .env.local
# Añade OPENCLAW_GATEWAY_URL y OPENCLAW_GATEWAY_TOKEN a .env.local
npm run dev
```

Abre `http://localhost:4000`. El token del gateway se encuentra en `~/.openclaw/openclaw.json` bajo `gateway.token`.

**Lo que le falta**: Sin seguimiento de costos, sin visor de archivos de memoria. Está enfocado puramente en las tareas.

---

## 2. LobsterBoard — El Mejor Dashboard Personalizable

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/Curbob/LobsterBoard&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; /&gt;

LobsterBoard adopta un enfoque diferente a todo lo demás en esta lista. En lugar de un diseño fijo, es un constructor de dashboards con arrastrar y soltar con 50 widgets. Tú decides qué va dónde. Estadísticas del sistema, clima, feeds RSS, cotizaciones de acciones, seguimiento de costos de la API de Claude, monitores de sesión activa. Elige lo que importa y organízalos como quieras.

Se ejecuta como un único servidor Node.js sin framework y sin paso de compilación. Colócalo en un servidor, ejecuta `node server.cjs`, y tendrás un dashboard en tiempo real que se actualiza automáticamente a través de Server-Sent Events.

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;**50 widgets**: Monitoreo del sistema, seguimiento de costos de IA, hogar inteligente, finanzas, medios y más&lt;/li&gt;
&lt;li&gt;**Galería de plantillas**: Exporta tu diseño, importa los de otros, comparte configuraciones&lt;/li&gt;
&lt;li&gt;**Páginas personalizadas**: Añade páginas completas más allá de la cuadrícula de widgets: notas, tableros kanban, lo que quieras&lt;/li&gt;
&lt;li&gt;**Widgets específicos de OpenClaw**: Estado de autenticación, estado de trabajos cron, monitor de sesión activa, indicador de tokens&lt;/li&gt;
&lt;li&gt;**Sin nube**: Todo se ejecuta localmente, la configuración se guarda en un único archivo JSON&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

```bash
npm install lobsterboard
cd node_modules/lobsterboard
node server.cjs
```

Abre `http://localhost:8080`, presiona **Ctrl+E** para el modo de edición, arrastra widgets desde la barra lateral, guarda.

**Nota sobre la licencia**: LobsterBoard usa Business Source License 1.1. Gratuito para uso personal y no comercial, pero el uso comercial necesita una licencia separada del autor. Todo lo demás en esta lista es MIT.

---

## 3. AI Maestro — El Mejor para Equipos de Agentes Grandes

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/23blocks-OS/ai-maestro&quot; variant=&quot;solid&quot; color=&quot;purple&quot; size=&quot;md&quot; /&gt;

AI Maestro proviene de alguien que estaba ejecutando 35 agentes en múltiples terminales y se cansó de copiar contexto manualmente entre ellos. Es el proyecto más ambicioso aquí, construido como una red de malla peer donde múltiples máquinas se unen como nodos iguales con cada agente visible desde un dashboard.

La característica destacada es el Protocolo de Mensajería de Agentes (AMP), que permite a los agentes enviarse mensajes directamente en lugar de depender de ti para retransmitir el contexto. También incluye un grafo de código (visualización interactiva de la base de código), memoria persistente entre sesiones y coordinación de trabajo basada en Kanban.

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;**Malla multi-máquina**: Sin servidor central; las máquinas se conectan como pares y una nueva computadora se une automáticamente&lt;/li&gt;
&lt;li&gt;**Mensajería agente a agente**: Los agentes se coordinan directamente usando AMP, con niveles de prioridad y firmas criptográficas&lt;/li&gt;
&lt;li&gt;**Funciona con cualquier agente**: Claude Code, Aider, Cursor, Copilot — no está bloqueado a OpenClaw&lt;/li&gt;
&lt;li&gt;**Integraciones con gateways**: Enruta las interacciones de los agentes a través de Slack, Discord, Email, WhatsApp&lt;/li&gt;
&lt;li&gt;**Tres capas de memoria**: Memoria de conversación, grafo de código, documentación generada automáticamente&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

```bash
curl -fsSL https://raw.githubusercontent.com/23blocks-OS/ai-maestro/main/scripts/remote-install.sh | sh
```

El dashboard se abre en `http://localhost:23000`. Requiere Node.js 18+ y tmux.

**Cuándo usarlo**: Si estás ejecutando 10+ agentes y necesitas que se coordinen sin que tú actúes como intermediario. Excesivo para una configuración de un solo agente.

---

## 4. Clawe — La Mejor Coordinación Multiagente

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/getclawe/clawe&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; /&gt;

Clawe viene con un equipo preconfigurado de cuatro agentes: Clawe (Líder del Equipo), Inky (Editor de Contenido), Pixel (Diseñador) y Scout (SEO). Cada agente se activa en un programa cron de 15 minutos, verifica las tareas asignadas y reporta. Un backend Convex almacena tareas, notificaciones y actividad. El dashboard web te da el estado del equipo, el tablero de tareas y chat directo con cualquier agente.

Es más opinionado que los demás. Trabajas dentro de una estructura de equipo definida en lugar de construir la tuya propia. La configuración es más rápida, pero personalizar el equipo requiere más trabajo.

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;**Equipo preconfigurado**: Cuatro agentes con roles distintos, listos para trabajar de inmediato&lt;/li&gt;
&lt;li&gt;**Programación por latidos**: Los agentes se activan cada 15 minutos para verificar el trabajo, escalonados para evitar límites de tasa&lt;/li&gt;
&lt;li&gt;**Tablero de tareas Kanban**: Asigna tareas a agentes específicos, realiza seguimiento de subtareas y entregables&lt;/li&gt;
&lt;li&gt;**Notificaciones por @mención**: Etiqueta un agente en una tarea y recibe notificación en el próximo ciclo&lt;/li&gt;
&lt;li&gt;**Archivos de espacio de trabajo compartido**: Los agentes se coordinan a través de archivos de contexto compartidos&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

```bash
git clone https://github.com/getclawe/clawe.git
cd clawe
cp .env.example .env
# Añade ANTHROPIC_API_KEY, SQUADHUB_TOKEN, CONVEX_URL
pnpm install
cd packages/backend &amp;&amp; npx convex deploy
./scripts/start.sh
```

El dashboard se ejecuta en `http://localhost:3000`.

**Lo que requiere**: Una cuenta gratuita de Convex para el backend. Más componentes móviles que las otras opciones, pero el nivel gratuito de Convex cubre una configuración personal cómodamente.

---

## 5. Clawd Control — El Mejor Monitor de Flota Ligero

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/Temaki-AI/clawd-control&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; /&gt;

Clawd Control es deliberadamente minimalista. Servidor Node.js único, sin paso de compilación, sin framework, HTML/JS vanilla en todo. Autodescubre agentes OpenClaw locales, muestra métricas de salud en tiempo real vía SSE, y te permite profundizar en las sesiones, canales y configuración de cualquier agente. Autenticación por contraseña con una clave generada aleatoriamente en el primer arranque.

Si quieres algo funcionando en cinco minutos sin pensarlo, este es.

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;**Autodescubrimiento**: Encuentra agentes OpenClaw locales sin configuración manual&lt;/li&gt;
&lt;li&gt;**Asistente de creación de agentes**: Configuración guiada para lanzar nuevos agentes desde el dashboard&lt;/li&gt;
&lt;li&gt;**Métricas del host**: CPU, RAM, uso de disco para la máquina que ejecuta OpenClaw&lt;/li&gt;
&lt;li&gt;**Vista de flota**: Todos los agentes en una vista con indicadores de salud&lt;/li&gt;
&lt;li&gt;**Una dependencia**: Solo `ws` (cliente WebSocket), sin framework ni bundler&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

```bash
git clone https://github.com/Temaki-AI/clawd-control.git
cd clawd-control
npm install
npm start
```

Abre `http://localhost:3100` e inicia sesión con la contraseña generada que se imprime en la consola.

---

## 6. VidClaw — El Mejor para Gestión de Tareas y Alma

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/madrzak/vidclaw&quot; variant=&quot;solid&quot; color=&quot;purple&quot; size=&quot;md&quot; /&gt;

VidClaw se centra en lo que tu agente está trabajando en lugar de la infraestructura que lo rodea. Tiene un tablero Kanban donde las tareas se asignan a skills específicos de OpenClaw, un editor de alma para SOUL.md, IDENTITY.md y USER.md con historial de versiones, y seguimiento de uso analizado directamente desde los transcript de sesión.

El modelo de seguridad es simple: se vincula solo a localhost, y accedes a él a través de un túnel SSH. No se necesita capa de autenticación porque SSH es la capa de autenticación.

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;**Tablero Kanban**: Las tareas se ejecutan automáticamente vía cron (cada 2 min) o latido (cada 30 min)&lt;/li&gt;
&lt;li&gt;**Editor de alma**: Edita SOUL.md y otros archivos de identidad con plantillas de persona e historial de versiones&lt;/li&gt;
&lt;li&gt;**Cambio de modelo**: Cambia modelos de Claude directamente desde el dashboard, recarga en caliente vía observador de configuración&lt;/li&gt;
&lt;li&gt;**Seguimiento de uso**: Uso de tokens y estimaciones de costo analizados desde los transcript de sesión reales&lt;/li&gt;
&lt;li&gt;**Gestor de skills**: Ver, habilitar/deshabilitar y crear skills personalizados desde la UI&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

```bash
cd ~/.openclaw/workspace
git clone https://github.com/madrzak/vidclaw.git dashboard
cd dashboard
./setup.sh
```

Accede vía túnel SSH: `ssh -L 3333:localhost:3333 root@tu-servidor`, luego abre `http://localhost:3333`.

---

## 7. OpenClaw Dashboard — La Mejor Opción con Seguridad Reforzada

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/tugcantopaloglu/openclaw-dashboard&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; /&gt;

Este es el dashboard más consciente de la seguridad de la lista. Tiene hash de contraseñas PBKDF2 con 100,000 iteraciones, MFA TOTP opcional (compatible con Google Authenticator), limitación de tasa, HSTS, cabeceras CSP, protección contra traversal de rutas y un registro de auditoría completo. Todo eso con cero dependencias externas: Node.js puro, sin base de datos, sin framework.

Más allá de la seguridad, cubre mucho terreno: gestión de sesiones, análisis de costos, monitoreo de límites de tasa, visor de archivos de memoria, gestión de trabajos cron, integración con Tailscale y un feed en vivo de mensajes de agentes.

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;**MFA TOTP**: Autenticación de dos factores opcional compatible con Google Authenticator, Authy, 1Password&lt;/li&gt;
&lt;li&gt;**Cero dependencias**: Node.js puro sin paquetes npm requeridos&lt;/li&gt;
&lt;li&gt;**Análisis de costos**: Desglose de gastos por modelo, sesión y período de tiempo&lt;/li&gt;
&lt;li&gt;**Visor de memoria**: Navega por MEMORY.md, HEARTBEAT.md y notas de memoria diarias&lt;/li&gt;
&lt;li&gt;**Gestión de cron**: Ver, habilitar/deshabilitar y activar manualmente trabajos programados&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

```bash
git clone https://github.com/tugcantopaloglu/openclaw-dashboard.git
cd openclaw-dashboard
node server.js
```

Visita `http://localhost:7000` y registra una cuenta en el primer inicio.

&lt;Notice type=&quot;info&quot; title=&quot;Configuración de Seguridad&quot;&gt;
La primera vez que lo ejecutas, se imprime un token de recuperación en la consola. Guárdalo — lo necesitarás si olvidas tu contraseña. Para habilitar MFA, ve a Configuración → Seguridad → Habilitar MFA después de iniciar sesión.
&lt;/Notice&gt;

---

## 8. Claw Dashboard — El Mejor Monitor Estilo Terminal

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/spleck/claw-dashboard&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; /&gt;

Si vives en la terminal y quieres algo que parezca btop o htop en lugar de una aplicación web, Claw Dashboard es el indicado. Logo en ASCII art, colores degradados, gráficos de donut, barras de progreso, todo renderizado en tu terminal usando la biblioteca `blessed`. Se actualiza automáticamente cada dos segundos y muestra el uso de CPU por núcleo, indicadores de memoria, estadísticas de GPU (Apple Silicon), procesos principales y sesiones activas de OpenClaw.

```bash
npm install -g claw-dashboard
clawdash
```

Compatible con macOS de fábrica. Funciona en Linux. Controles de teclado: `q` para salir, `r` para actualizar, `s` para configuración.

**Ideal para**: Monitoreo rápido sin abrir un navegador. Excelente para configuraciones de Mac Mini donde de todas formas accederías por SSH.

---

## 9. Clawtrol — El Mejor Panel Todo en Uno

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/nachoiacovino/clawtrol&quot; variant=&quot;solid&quot; color=&quot;purple&quot; size=&quot;md&quot; /&gt;

Clawtrol empaqueta las más características en un solo dashboard: resumen del sistema, visor de pantalla remota con interacción por clic (útil para Mac Minis sin cabeza), terminal web completo vía ttyd, explorador de archivos, visor de sesiones con chat en vivo, tablero Kanban, navegador de memoria, gestor de cron y monitor de subagentes. Cada módulo es opcional; habilita solo lo que necesitas.

Cuatro temas de fábrica: Nova (cyberpunk), Midnight (dark minimalista), Catppuccin (pastel cálido), Solar (claro).

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;**Pantalla remota**: Ver y hacer clic en la pantalla de tu Mac sin cabeza desde una pestaña del navegador&lt;/li&gt;
&lt;li&gt;**Terminal web**: Acceso completo al shell vía ttyd, sin necesidad de cliente SSH&lt;/li&gt;
&lt;li&gt;**Modular**: Habilita solo los paneles que realmente usas; los módulos no utilizados no se cargan&lt;/li&gt;
&lt;li&gt;**Cuatro temas**: Tematización correcta con selección de fuentes, no solo un cambio de color&lt;/li&gt;
&lt;li&gt;**Integración con pm2**: Comandos `clawtrol start/stop/status` para gestión de demonios&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

```bash
npm install -g clawtrol
clawtrol init
cd clawtrol
clawtrol start
```

Se abre en `http://localhost:4781`.

&lt;Notice type=&quot;warning&quot; title=&quot;Sin Autenticación Integrada&quot;&gt;
Clawtrol no tiene autenticación. La suposición es que accederás a través de Tailscale o una red de confianza. No expongas el puerto 4781 a internet público.
&lt;/Notice&gt;

---

## Mejores Opciones por Caso de Uso

&lt;Tabs&gt;
&lt;Tab name=&quot;Control Total&quot;&gt;

**Mission Control** es la elección si quieres una orquestación multiagente adecuada con planificación de tareas. El flujo de aclaración de IA antes del despacho de tareas es genuinamente útil. Los agentes reciben instrucciones más claras y hacen menos suposiciones erróneas. Se mantiene activamente, tiene licencia MIT y está bien documentado.

**AI Maestro** es la elección si estás ejecutando muchos agentes en múltiples máquinas y necesitas que se comuniquen entre sí. El protocolo de mensajería AMP resuelve un problema real una vez que superas las configuraciones de un solo agente.

&lt;/Tab&gt;

&lt;Tab name=&quot;Diseño Personalizado&quot;&gt;

**LobsterBoard** si quieres construir exactamente el dashboard que necesitas. La biblioteca de 50 widgets cubre estadísticas del sistema, seguimiento de costos de IA, clima, sensores de hogar inteligente, finanzas y más. La galería de plantillas significa que puedes importar un diseño de la comunidad si no quieres empezar desde cero.

Ten en cuenta la licencia BSL-1.1 si esto es para algo comercial.

&lt;/Tab&gt;

&lt;Tab name=&quot;Despliegue Simple&quot;&gt;

**Clawd Control** — clona, `npm install`, `npm start`, listo. Autodescubre tus agentes locales, no se requiere configuración para una instalación estándar.

**OpenClaw Dashboard** — único comando `node server.js`, cero dependencias npm. MFA TOTP si necesitas exponerlo por la red. La opción más completa en seguridad con la menor fricción de configuración.

&lt;/Tab&gt;

&lt;Tab name=&quot;Solo Terminal&quot;&gt;

**Claw Dashboard** — instala con `npm install -g claw-dashboard`, ejecuta con `clawdash`. Parece btop. Funciona donde ya tienes SSH.

&lt;/Tab&gt;
&lt;/Tabs&gt;

---

## Combinar dashboards con la configuración correcta

Un dashboard solo es tan útil como lo que está monitoreando. Algunas cosas que vale la pena tener resueltas antes de instalar uno.

Si estás controlando costos, un modelo eficiente importa más que la UI del dashboard. La guía de [mejores modelos open source para OpenClaw](/es/mejores-modelos-opensource-openclaw/) cubre GLM-5 y MiniMax M2.5, que juntos cuestan una fracción de la API de Claude. La mayoría de los dashboards hacen obvia la diferencia una vez que cambias.

Varios dashboards muestran llamadas de herramientas activas en tiempo real, lo que hace que valga la pena configurar la integración de búsqueda. La [guía de búsqueda DuckDuckGo para OpenClaw](/es/busqueda-duckduckgo-openclaw/) explica cómo añadir búsqueda web gratuita sin clave de API.

Si estás evaluando dashboards como parte de decidir qué plataforma de agente usar, el resumen de [alternativas a OpenClaw](/es/alternativas-openclaw/) cubre NanoClaw, IronClaw y otros que traen sus propios enfoques de dashboard.

Si aún no has instalado OpenClaw, la [guía de configuración de OpenClaw](/es/guia-configuracion-openclaw/) cubre la instalación completa en Hetzner VPS o Mac Mini, incluyendo el token de gateway que la mayoría de estos dashboards necesitan.

---

&lt;Accordion label=&quot;Preguntas Frecuentes&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

**¿Necesito elegir solo un dashboard?**

No. Varias personas ejecutan Mission Control para la creación de tareas junto con algo más ligero como Claw Dashboard para verificaciones rápidas del sistema. Acceden a diferentes partes del gateway de OpenClaw de forma independiente.

**¿Qué dashboard funciona mejor en un Mac Mini?**

Clawtrol destaca aquí por el visor de pantalla remota. Puedes ver y hacer clic en la pantalla de tu Mac sin cabeza desde un navegador sin configurar VNC. LobsterBoard también es bueno en Mac Mini ya que se ejecuta como servicio en segundo plano y muestra estadísticas del sistema en una pestaña del navegador.

**¿Alguno de estos dashboards es un proyecto oficial de OpenClaw?**

No. Todos son construidos por la comunidad. Mission Control es el más utilizado y mantenido activamente, pero ninguno está respaldado ni mantenido por el equipo de OpenClaw.

**¿Cuál es la configuración mínima para solo monitorear costos?**

OpenClaw Dashboard (`tugcantopaloglu/openclaw-dashboard`) — un solo `node server.js`, sin dependencias, análisis de costos integrado. O LobsterBoard si quieres el seguimiento de costos junto con otros widgets.

**¿Puedo usar estos dashboards con plataformas de agentes alternativas?**

AI Maestro está diseñado explícitamente para trabajar con cualquier agente de IA basado en terminal, no solo OpenClaw. Mission Control y los demás están construidos específicamente para la API del gateway de OpenClaw. Si estás ejecutando algo de la lista de [alternativas a OpenClaw](/es/alternativas-openclaw/), verifica si el protocolo del gateway es compatible antes de instalar un dashboard.

**¿Es LobsterBoard gratuito para uso personal?**

Sí. Business Source License 1.1 permite el self-hosting personal y no comercial. Los despliegues comerciales necesitan una licencia separada del autor.

**¿Cuál debería probar primero?**

Si quieres probar uno hoy: Clawd Control. Clónalo, ejecuta `npm start`, encuentra tus agentes automáticamente. Si quieres la mejor opción a largo plazo para gestionar trabajo: Mission Control.

&lt;/Accordion&gt;

Nueve dashboards en aproximadamente dos años. La terminal sigue funcionando bien, pero tener visibilidad real de lo que tu agente está haciendo de noche es mejor una vez que lo tienes. Empiezas a notar cosas que de otra forma perderías.

Comienza con lo que se adapte a tu escala. La mayoría de estos pueden ejecutarse juntos sin conflictos, así que cambiar más tarde no es gran cosa.

Para todo lo demás en el ecosistema de OpenClaw: [guía de configuración](/es/guia-configuracion-openclaw/), [recomendaciones de modelos](/es/mejores-modelos-opensource-openclaw/), [búsqueda web gratuita](/es/busqueda-duckduckgo-openclaw/), y [plataformas alternativas](/es/alternativas-openclaw/).</content:encoded><category>ai</category><category>ai-tools</category><category>openclaw</category><category>self-hosted</category></item><item><title>Pinchtab: Control del Navegador vía HTTP para Agentes de IA</title><link>https://www.bitdoze.com/es/pinchtab-agentes-ia-navegador/</link><guid isPermaLink="true">https://www.bitdoze.com/es/pinchtab-agentes-ia-navegador/</guid><description>Pinchtab es un binario Go de 12MB que da a cualquier agente de IA control del navegador a través de una API HTTP simple usando árboles de accesibilidad. Sin configuración, agnóstico al framework, y mucho más barato que las capturas de pantalla.</description><pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;

Si has intentado darle a un agente de IA acceso al navegador, ya conoces el problema. Playwright MCP te ata a Node. Browser Use necesita Python. El backend de navegador de OpenClaw solo funciona dentro de su propio ecosistema. Cambia de agente, o intenta hacer una solicitud curl rápida para inspeccionar una página, y tendrás que reescribir la integración desde cero.

[Pinchtab](https://github.com/pinchtab/pinchtab) toma un enfoque diferente: es simplemente un servidor HTTP. Un binario Go de 12MB sin Node, sin Python, sin dependencias. Lanza su propio Chrome y expone todo—navegación, clics, relleno de formularios, capturas de pantalla, snapshots de accesibilidad—a través de una API REST simple. Cualquier agente que uses habla HTTP, y esa es toda la historia de integración.

## Por qué árboles de accesibilidad en lugar de capturas de pantalla

La mayoría de la gente recurre primero a las capturas de pantalla porque es obvio: toma una foto, envíala a un modelo de visión, listo. El problema es el costo. Una tarea de 10 pasos usando capturas de pantalla cuesta alrededor de $0.06. La misma tarea con árboles de accesibilidad cuesta aproximadamente $0.015.

La diferencia real aparece a escala. Ejecuta esa misma tarea 1,000 veces y las capturas de pantalla cuestan $60; los árboles de accesibilidad cuestan $15. Ejecuta un trabajo de monitoreo de 50 páginas:

| Método | ~Tokens | Costo est. |
|--------|---------|-----------|
| Capturas de pantalla (visión) | ~100,000 | $0.30 |
| Snapshot completo de a11y | ~525,000 | $0.16 |
| Pinchtab `?filter=interactive` | ~180,000 | $0.05 |
| Pinchtab `/text` | ~40,000 | $0.01 |

El endpoint `/text` de Pinchtab extrae contenido legible a aproximadamente 800 tokens por página usando la biblioteca Readability de Mozilla (lo mismo que hay detrás de Firefox Reader View). Eso es 5 veces más barato que un snapshot completo de accesibilidad y 13 veces más barato que las capturas de pantalla. Para trabajo intensivo de lectura, la diferencia se acumula rápidamente.

También hay un argumento de fiabilidad. Los modelos de visión adivinan coordenadas a partir de píxeles. Los árboles de accesibilidad te dan referencias de nodo estables (`e0`, `e1`, `e2`...) vinculadas a los elementos DOM reales. Haz clic en `e5` y acertarás en el botón correcto, independientemente de cómo se renderice la página.

## La API completa

Pinchtab cubre más que la navegación y los clics básicos:

| Método | Endpoint | Descripción |
|--------|----------|-------------|
| `GET` | `/health` | Verifica si el servidor y Chrome responden |
| `GET` | `/tabs` | Lista todas las pestañas abiertas con sus IDs |
| `GET` | `/snapshot` | Árbol de accesibilidad como JSON o texto |
| `GET` | `/screenshot` | Captura de pantalla JPEG con control de calidad |
| `GET` | `/text` | Texto legible de la página (Readability o innerText sin procesar) |
| `POST` | `/navigate` | Ir a una URL en una pestaña |
| `POST` | `/action` | Clic, escribir, rellenar, presionar, enfocar, hover, seleccionar, desplazar |
| `POST` | `/evaluate` | Ejecutar JavaScript arbitrario |
| `POST` | `/tab` | Abrir o cerrar pestañas |
| `POST` | `/tab/lock` | Bloquear una pestaña para acceso exclusivo del agente |
| `POST` | `/tab/unlock` | Liberar el bloqueo de una pestaña |
| `POST` | `/cookies` | Inyectar cookies de sesión programáticamente |

El endpoint `/tab/lock` vale la pena mencionar si ejecutas múltiples agentes a la vez. Un agente bloquea una pestaña, hace su trabajo, la desbloquea. Sin escrituras en competencia en el mismo contexto del navegador.

### Parámetros de consulta del snapshot

El endpoint de snapshot tiene varias opciones que reducen el uso de tokens significativamente:

```bash
# Solo elementos interactivos — ~75% menos nodos
curl &quot;localhost:9867/snapshot?filter=interactive&quot;

# Formato compacto de una línea por nodo — 56-64% menos tokens que JSON
curl &quot;localhost:9867/snapshot?format=compact&quot;

# Solo cambios desde el último snapshot
curl &quot;localhost:9867/snapshot?diff=true&quot;

# Limitar a una sección específica de la página
curl &quot;localhost:9867/snapshot?selector=main&quot;

# Limitar la salida a aproximadamente N tokens
curl &quot;localhost:9867/snapshot?maxTokens=2000&quot;
```

Combinar `filter=interactive` con `format=compact` te da el payload más pequeño posible para tareas orientadas a acciones. Usa `diff=true` para páginas que se actualizan incrementalmente—sondeando un dashboard en vivo, por ejemplo—para que solo envíes lo que realmente cambió.

### Acciones similares a las humanas

Más allá del clic y escritura estándar, Pinchtab tiene acciones `humanClick` y `humanType` que añaden retrasos realistas y patrones de movimiento. Útil cuando accedes a sitios con detección de bots de comportamiento que monitorea el tiempo de interacción.

```bash
curl -X POST localhost:9867/action \
  -d &apos;{&quot;kind&quot;:&quot;humanType&quot;,&quot;ref&quot;:&quot;e12&quot;,&quot;text&quot;:&quot;hola mundo&quot;}&apos;
```

## Configuración

Toda la configuración se realiza a través de variables de entorno:

| Variable | Por defecto | Descripción |
|----------|---------|-------------|
| `BRIDGE_PORT` | `9867` | Puerto HTTP |
| `BRIDGE_TOKEN` | *(ninguno)* | Token Bearer para autenticación |
| `BRIDGE_HEADLESS` | `false` | Ejecutar Chrome sin ventana |
| `BRIDGE_STEALTH` | `light` | `light` (parche de webdriver) o `full` (spoofing de canvas/WebGL/fuentes) |
| `BRIDGE_PROFILE` | `~/.pinchtab/chrome-profile` | Directorio del perfil de Chrome |
| `BRIDGE_STATE_DIR` | `~/.pinchtab` | Almacenamiento de estado y sesión |
| `BRIDGE_BLOCK_IMAGES` | `false` | Omitir descargas de imágenes |
| `BRIDGE_BLOCK_MEDIA` | `false` | Bloquear imágenes, fuentes, CSS, video |
| `BRIDGE_NO_ANIMATIONS` | `false` | Congelar animaciones CSS globalmente |
| `BRIDGE_TIMEOUT` | `15` | Tiempo de espera de acción en segundos |
| `BRIDGE_NAV_TIMEOUT` | `30` | Tiempo de espera de navegación en segundos |
| `BRIDGE_TIMEZONE` | *(sistema)* | Zona horaria de Chrome (p.ej. `America/New_York`) |
| `CDP_URL` | *(ninguno)* | Conectar a un Chrome existente en lugar de lanzar uno |
| `CHROME_BINARY` | *(auto)* | Ruta a Chrome o Chromium |
| `CHROME_FLAGS` | *(ninguno)* | Flags adicionales de lanzamiento de Chrome |

`BRIDGE_BLOCK_MEDIA` es la versión agresiva—omite todo excepto HTML y JavaScript. Útil para scraping masivo donde la fidelidad de la página no importa. `BRIDGE_NO_ANIMATIONS` ayuda si estás tomando snapshots de páginas en medio de una animación y obtienes resultados inconsistentes.

También puedes generar un archivo de configuración si prefieres JSON sobre variables de entorno:

```bash
pinchtab config init   # crea ~/.pinchtab/config.json
pinchtab config show   # muestra la configuración efectiva actual
```

Las variables de entorno anulan el archivo de configuración, por lo que funciona bien junto con secretos de Docker o archivos `.env`.

## Despliegue con Docker

La forma más sencilla de ejecutar Pinchtab en un servidor. Chrome necesita `seccomp=unconfined` en un contenedor, que es la razón principal por la que querrías aislarlo del resto de tu stack.

### Configuración básica de docker-compose

```yaml
# docker-compose.yml
services:
  pinchtab:
    image: pinchtab/pinchtab:latest
    container_name: pinchtab
    restart: unless-stopped
    security_opt:
      - seccomp:unconfined
    mem_limit: 2g
    cpus: &quot;2.0&quot;
    environment:
      - BRIDGE_PORT=9867
      - BRIDGE_HEADLESS=true
      - BRIDGE_STEALTH=full
      - BRIDGE_TOKEN=${PINCHTAB_TOKEN}
      - BRIDGE_BLOCK_IMAGES=true
      - BRIDGE_NO_ANIMATIONS=true
    volumes:
      - pinchtab-data:/data
    ports:
      - &quot;127.0.0.1:9867:9867&quot;

volumes:
  pinchtab-data:
```

Algunas cosas a tener en cuenta. El binding de puerto `127.0.0.1:9867:9867` solo expone el servicio en localhost, no a la red. El límite de memoria importa: Chrome con pocas pestañas abiertas fácilmente usa 1-1.5GB. Configurar `BRIDGE_BLOCK_IMAGES=true` ayuda a mantener el uso de memoria más bajo si realizas tareas solo de contenido.

### Detrás de un proxy inverso Caddy

Si quieres exponer Pinchtab sobre HTTPS con un dominio:

```yaml
# docker-compose.yml
services:
  pinchtab:
    image: pinchtab/pinchtab:latest
    container_name: pinchtab
    restart: unless-stopped
    security_opt:
      - seccomp:unconfined
    mem_limit: 2g
    cpus: &quot;2.0&quot;
    environment:
      - BRIDGE_PORT=9867
      - BRIDGE_HEADLESS=true
      - BRIDGE_STEALTH=full
      - BRIDGE_TOKEN=${PINCHTAB_TOKEN}
      - BRIDGE_BLOCK_IMAGES=true
    volumes:
      - pinchtab-data:/data
    networks:
      - proxy

  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    ports:
      - &quot;80:80&quot;
      - &quot;443:443&quot;
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy-data:/data
      - caddy-config:/config
    networks:
      - proxy

networks:
  proxy:
    driver: bridge

volumes:
  pinchtab-data:
  caddy-data:
  caddy-config:
```

```
# Caddyfile
pinchtab.tudominio.com {
    reverse_proxy pinchtab:9867
}
```

Caddy gestiona TLS automáticamente. Con `BRIDGE_TOKEN` configurado, las solicitudes necesitan un encabezado `Authorization: Bearer &lt;token&gt;`, por lo que la API no está abierta al público incluso con HTTPS.

```bash
curl -H &quot;Authorization: Bearer $PINCHTAB_TOKEN&quot; \
  https://pinchtab.tudominio.com/health
```

&lt;Notice type=&quot;info&quot; title=&quot;Compilar desde fuente vs imagen precompilada&quot;&gt;
El `docker-compose.yml` oficial en el repositorio usa `build: .` que compila desde fuente. Si quieres la imagen precompilada, usa `image: pinchtab/pinchtab:latest` en su lugar. Consulta la [página de lanzamientos](https://github.com/pinchtab/pinchtab/releases) para ver las etiquetas disponibles.
&lt;/Notice&gt;

## Consideraciones de seguridad y mitigaciones

Pinchtab le da a un agente de IA control total de un navegador Chrome real, incluyendo cualquier cuenta en la que hayas iniciado sesión a través de ese navegador. El README es directo al respecto: &quot;Piensa en Pinchtab como darle a alguien tu laptop desbloqueada.&quot; Esto es lo que eso significa en la práctica y cómo manejarlo.

### Sin autenticación por defecto

De fábrica, Pinchtab acepta solicitudes de cualquiera que pueda llegar al puerto 9867. En una red compartida o un servidor con IP pública, eso significa cualquiera.

**Mitigación:** Siempre configura `BRIDGE_TOKEN`. Una vez configurado, cada solicitud necesita `Authorization: Bearer &lt;token&gt;` o recibe un 401. Trata este token como una contraseña—genera algo largo y aleatorio, guárdalo en una variable de entorno o gestor de secretos, nunca lo hardcodees.

```bash
# Generar un token
openssl rand -hex 32
```

### Pinchtab se vincula a todas las interfaces

Por defecto, el servidor escucha en `0.0.0.0`, no solo en localhost. En un servidor en la nube, esto significa que el puerto 9867 es alcanzable desde cualquier lugar si tu firewall lo permite.

**Mitigación:** O vincula el puerto solo a localhost (como se muestra en el docker-compose anterior con `127.0.0.1:9867:9867`), o establece una regla de firewall que bloquee el acceso externo al puerto 9867. Usar un proxy inverso como Caddy o Nginx añade otra capa y te permite gestionar TLS correctamente.

### El perfil de Chrome contiene sesiones activas

Cuando inicias sesión en un sitio a través de la ventana Chrome de Pinchtab, esa sesión persiste en `~/.pinchtab/chrome-profile/`. Cookies, contraseñas guardadas, tokens de autenticación. Un agente con acceso a la API puede usar esas sesiones para actuar como tú en cualquier sitio en el que hayas iniciado sesión.

**Mitigación:**
- Usa un perfil de Chrome dedicado con solo las cuentas que tus agentes realmente necesitan
- No inicies sesión con cuentas personales (correo, banca, redes sociales) en el perfil de Pinchtab a menos que específicamente necesites automatizarlas
- Trata `~/.pinchtab/` como sensible y restringe los permisos de archivo: `chmod 700 ~/.pinchtab`
- En Docker, usa un volumen nombrado y evita montarlo como solo lectura (Pinchtab necesita escribir estado), pero no lo montes donde sea accesible para otros contenedores

### El requisito `seccomp=unconfined`

Chrome necesita un perfil seccomp relajado para ejecutarse en un contenedor. Este es un privilegio real: elimina una capa de filtrado de syscall del kernel.

**Mitigación:** Esto es más difícil de mitigar completamente sin construir un perfil seccomp personalizado para Chromium. El enfoque práctico es aislar el contenedor de Pinchtab—no lo ejecutes en la misma red que contenedores con acceso a bases de datos u otros servicios sensibles. Mantenlo en su propio segmento de red al que solo tu servicio de agente pueda llegar.

### Modelo de confianza del agente

Un agente con acceso a Pinchtab puede hacer cualquier cosa que un humano con ese navegador pueda hacer. Si tu agente toma instrucciones arbitrarias de usuarios o entradas externas, la inyección de prompts es una preocupación real: un sitio web malicioso podría incluir instrucciones en su contenido que engañen al agente para que tome acciones no deseadas.

**Mitigación:**
- Limita lo que tu agente puede hacer. Si solo necesita leer páginas, no le des capacidades de acción
- Registra todas las llamadas a `/action` y `/navigate` para que puedas auditar lo que ocurrió
- Considera ejecutar agentes contra un perfil aislado sin cuentas reales para entradas no confiables
- Limita la tasa de tu endpoint de Pinchtab—añade limitación de tasa en Caddy o Nginx si lo expones a agentes externos

&lt;Notice type=&quot;warning&quot; title=&quot;No omitas el token&quot;&gt;
Ejecutar Pinchtab sin `BRIDGE_TOKEN` en cualquier servidor conectado a internet es un riesgo serio. Cualquiera que encuentre el puerto tiene control total del navegador. Configura el token antes de cualquier otra cosa.
&lt;/Notice&gt;

## Un flujo de trabajo típico de agente

```python
import httpx

BASE = &quot;http://localhost:9867&quot;
HEADERS = {&quot;Authorization&quot;: &quot;Bearer tu-token&quot;}

# Navegar a una página
httpx.post(f&quot;{BASE}/navigate&quot;, json={&quot;url&quot;: &quot;https://example.com&quot;}, headers=HEADERS)

# Obtener solo elementos interactivos para mantener bajos los tokens
snapshot = httpx.get(f&quot;{BASE}/snapshot?filter=interactive&amp;format=compact&quot;, headers=HEADERS)
refs = snapshot.json()

# Hacer clic en un botón por su ref
httpx.post(f&quot;{BASE}/action&quot;, json={&quot;kind&quot;: &quot;click&quot;, &quot;ref&quot;: &quot;e5&quot;}, headers=HEADERS)

# Leer el resultado
text = httpx.get(f&quot;{BASE}/text&quot;, headers=HEADERS)
print(text.text)
```

Las refs de nodo son estables dentro de un snapshot. Después de un clic que carga una nueva página, toma un snapshot nuevo—las refs en la nueva página son independientes. Para páginas que se actualizan sin una carga completa (SPAs de React, Vue), usa `?diff=true` para ver qué cambió en lugar de volver a obtener todo el árbol.

Para configuraciones multiagente donde varios agentes comparten una instancia del navegador, usa el bloqueo de pestañas:

```bash
# Bloquear la pestaña 1 para uso exclusivo
curl -X POST localhost:9867/tab/lock -d &apos;{&quot;tabId&quot;: 1}&apos;

# ... haz tu trabajo ...

# Liberarla
curl -X POST localhost:9867/tab/unlock -d &apos;{&quot;tabId&quot;: 1}&apos;
```

## Cuándo encaja bien

Pinchtab es una buena opción para agentes que necesitan navegar por la web pero no necesitan estar estrechamente acoplados a un framework de pruebas de navegador. Específicamente:

- Scraping web y monitoreo de contenido a cualquier escala
- Automatización de formularios (registros, entrada de datos, flujos de trabajo de múltiples pasos)
- Scraping autenticado después de una configuración de inicio de sesión única
- Agentes ejecutándose en scripts bash, programas Go, o cualquier lenguaje con soporte HTTP
- Configuraciones donde quieres cambiar entre diferentes frameworks de agentes sin cambiar la integración del navegador

No es la herramienta adecuada para pruebas visuales de precisión de píxeles (Playwright es mejor ahí), ni para sitios donde el árbol de accesibilidad es escaso o poco fiable. Algunas aplicaciones de página única construidas con componentes personalizados no exponen muchos datos ARIA útiles, y una captura de pantalla completa se convierte en la opción más práctica.

## Primeros pasos

```bash
# Docker (más fácil, sin necesidad de instalar Chrome)
docker run -d \
  -p 127.0.0.1:9867:9867 \
  --security-opt seccomp=unconfined \
  -e BRIDGE_TOKEN=tu-token-secreto \
  -e BRIDGE_HEADLESS=true \
  pinchtab/pinchtab:latest

curl -H &quot;Authorization: Bearer tu-token-secreto&quot; http://localhost:9867/health

# Compilar desde fuente (requiere Go 1.25+ y Chrome instalado)
git clone https://github.com/pinchtab/pinchtab.git
cd pinchtab
go build -o pinchtab .
BRIDGE_HEADLESS=true BRIDGE_TOKEN=tu-token-secreto ./pinchtab
```

El repositorio de GitHub tiene un [skill de OpenClaw](https://github.com/pinchtab/pinchtab/tree/main/skill/pinchtab) que puede instalar y configurar Pinchtab automáticamente si estás usando un agente que soporta skills.

---

*Pinchtab tiene licencia MIT. Código fuente en [GitHub](https://github.com/pinchtab/pinchtab).*</content:encoded><category>ai</category><category>ai-agents</category><category>browser-automation</category><category>pinchtab</category></item><item><title>Guía de Configuración de NanoBot: MiniMax M2.5, GLM-5 y Brave Search en Tu VPS</title><link>https://www.bitdoze.com/es/guia-configuracion-nanobot/</link><guid isPermaLink="true">https://www.bitdoze.com/es/guia-configuracion-nanobot/</guid><description>Guía paso a paso para instalar nanobot en un VPS Linux con MiniMax M2.5, GLM-5 (Zhipu), integración con Discord y Brave Search. Cubre configuración, proveedores, memoria y despliegue con Docker.</description><pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import YouTubeEmbed from &quot;@components/widgets/YouTubeEmbed.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

He estado probando [nanobot](https://github.com/HKUDS/nanobot) durante la última semana junto con mi [configuración de OpenClaw](/es/guia-configuracion-openclaw/), [PicoClaw](/es/guia-configuracion-picoclaw/) y [ZeroClaw](/es/guia-configuracion-zeroclaw/). La idea es simple: un asistente personal de IA en unas 3,700 líneas de Python que se conecta a Telegram, Discord, WhatsApp, Slack y un montón de otras plataformas de chat. Lo que me llamó la atención fue lo rápido que es configurarlo comparado con OpenClaw, y lo bien que funciona con proveedores LLM más baratos como MiniMax y GLM-5 de Zhipu.

Esta guía te lleva paso a paso para poner nanobot en funcionamiento en un VPS con MiniMax M2.5 y GLM-5 como modelos, Brave Search para acceso web, y Discord como canal de chat.

&lt;Button text=&quot;NanoBot GitHub&quot; link=&quot;https://github.com/HKUDS/nanobot&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre esta guía&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Instalar nanobot via pip, uv o Docker&lt;/li&gt;
&lt;li&gt;Configurar MiniMax M2.5 y Zhipu GLM-5 como proveedores LLM&lt;/li&gt;
&lt;li&gt;Configurar Brave Search para acceso web&lt;/li&gt;
&lt;li&gt;Integración con canal de Discord&lt;/li&gt;
&lt;li&gt;Sistema de memoria, archivos de workspace y soporte MCP&lt;/li&gt;
&lt;li&gt;Configuración de seguridad y tareas programadas&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

Si estás evaluando varias opciones de bots autoalojados, nuestro resumen de [alternativas a OpenClaw](/es/alternativas-openclaw/) compara nanobot contra NanoClaw, memU, PicoClaw y otros. Para lo básico de MCP, revisa la [introducción a MCP para principiantes](/mcp-introduction-beginners/).

&lt;YouTubeEmbed
  url=&quot;https://www.youtube.com/embed/UaWygl82pwQ&quot;
  label=&quot;The OpenClaw Killer? Nanobot Full Setup &amp; Review
&quot;
/&gt;

## Qué es realmente nanobot

nanobot es un proyecto de código abierto de HKUDS (Universidad de Hong Kong). Es un asistente de IA que se ejecuta en tu servidor y te habla a través de la app de chat que prefieras. Todo el proyecto son unas 3,700 líneas de Python, comparado con las 430k+ de OpenClaw.

La arquitectura es sencilla:

```
Tú (Discord / Telegram / WhatsApp / Slack / etc.)
    ↓
nanobot Gateway (ejecutándose en tu VPS)
    ↓
Proveedor LLM (MiniMax, Zhipu, OpenRouter, Anthropic, etc.)
    ↓
Herramientas (acceso a archivos, comandos shell, búsqueda web, servidores MCP)
```

Los mensajes llegan desde tu app de chat, nanobot los envía al LLM que hayas configurado, y el modelo puede usar herramientas (ejecutar comandos shell, leer/escribir archivos, buscar en la web) para hacer las cosas. Todo excepto las llamadas a la API del LLM se queda en tu máquina.

## Por qué MiniMax M2.5 y GLM-5

Ambos modelos salieron en febrero de 2026 y vale la pena prestarles atención para configuraciones de bots autoalojados.

### MiniMax M2.5

MiniMax M2.5 es un modelo Mixture-of-Experts de 230B con solo 10B parámetros activos por pasada. En la práctica, eso significa que es rápido y barato:

| Especificación | Valor |
|------|-------|
| Arquitectura | 230B MoE, 10B activos |
| Ventana de contexto | 1M tokens |
| Velocidad (Lightning) | 100 tokens/seg |
| Costo (Lightning) | $0.30/M entrada, $2.40/M salida |
| SWE-Bench Verified | 80.2% |
| Licencia | MIT modificada (código abierto) |

Puntúa 80.2% en SWE-Bench Verified, igualando a Claude Opus 4.6 a aproximadamente 1/20 del costo. La ventana de contexto de 1M tokens es más que suficiente para la mayoría de interacciones de chat, pero significa que nanobot no se quedará sin contexto ni con conversaciones largas y archivos grandes.

MiniMax tiene dos plataformas API. La global en `platform.minimax.io` y una para China continental en `minimaxi.com`. nanobot soporta ambas.

### GLM-5

GLM-5 de Zhipu AI es un modelo MoE de 744B con 40-44B parámetros activos. Es más potente que MiniMax pero sigue siendo eficiente gracias a la arquitectura dispersa:

| Especificación | Valor |
|------|-------|
| Arquitectura | 744B MoE, ~40B activos |
| Ventana de contexto | 200K tokens |
| SWE-Bench Verified | 77.8% |
| BrowseComp | #1 código abierto |
| Licencia | MIT |

GLM-5 ocupa el primer lugar entre modelos de código abierto en BrowseComp (tareas de agentes de búsqueda web), lo que lo convierte en una opción sólida para un bot que necesita buscar cosas online. La ventana de contexto de 200K maneja la mayoría de cargas de trabajo sin problemas.

Ambos modelos están disponibles a través de sus respectivas APIs y a través de OpenRouter si quieres un único gateway.

## Instalación

Tres formas de instalar nanobot. Elige la que se adapte a tu flujo de trabajo.

&lt;Tabs&gt;
&lt;Tab name=&quot;pip&quot;&gt;

La ruta más simple. Requiere Python 3.11+.

```bash
pip install nanobot-ai
```

&lt;/Tab&gt;
&lt;Tab name=&quot;uv (recomendado)&quot;&gt;

Gestión de paquetes más rápida con [uv](/uv-get-start/). Es lo que yo uso.

```bash
uv tool install nanobot-ai
```

&lt;/Tab&gt;
&lt;Tab name=&quot;Desde el código fuente&quot;&gt;

Si quieres las últimas funciones o planeas modificar el código:

```bash
git clone https://github.com/HKUDS/nanobot.git
cd nanobot
pip install -e .
```

&lt;/Tab&gt;
&lt;/Tabs&gt;

Después de instalar, inicializa el workspace y la configuración:

```bash
nanobot onboard
```

Esto crea el directorio `~/.nanobot/` con un `config.json` por defecto y una carpeta `workspace/` para memoria, skills y archivos de bootstrap.

Verifica que todo funcione:

```bash
nanobot status
```

## Configurar MiniMax M2.5

La configuración vive en `~/.nanobot/config.json`. Todos los cambios van ahí. nanobot usa un sistema de registro de proveedores internamente, así que solo necesitas poner tu clave API y el nombre del modelo.

### Obtener una clave API

1. Ve a [platform.minimax.io](https://platform.minimax.io) (global) o [minimaxi.com](https://www.minimaxi.com) (China continental)
2. Crea una cuenta y genera una clave API
3. Fíjate en qué plataforma estás, porque la URL base de la API es diferente

&lt;Notice type=&quot;success&quot; title=&quot;Plan de codificación MiniMax — 10% de descuento&quot;&gt;
MiniMax ofrece planes de codificación con precios pensados para cargas de trabajo de desarrolladores. [Obtén 10% de descuento con nuestro enlace de referencia](https://go.bitdoze.com/minimax). Para detalles sobre cómo se comparan GLM-5 y MiniMax M2.5 para bots siempre activos, revisa nuestro desglose de [mejores modelos de código abierto para OpenClaw](/best-opensource-models-for-openclaw/).
&lt;/Notice&gt;

### Agregar a la configuración

Para la plataforma global:

```json
{
  &quot;providers&quot;: {
    &quot;minimax&quot;: {
      &quot;apiKey&quot;: &quot;your-minimax-api-key&quot;
    }
  },
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: &quot;MiniMax-M2.5&quot;
    }
  }
}
```

Para la plataforma de China continental, agrega el override de `apiBase`:

```json
{
  &quot;providers&quot;: {
    &quot;minimax&quot;: {
      &quot;apiKey&quot;: &quot;your-minimax-api-key&quot;,
      &quot;apiBase&quot;: &quot;https://api.minimaxi.com/v1&quot;
    }
  },
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: &quot;MiniMax-M2.5&quot;
    }
  }
}
```

nanobot automáticamente agrega el prefijo al nombre del modelo para el enrutamiento de LiteLLM. Cuando pones `&quot;model&quot;: &quot;MiniMax-M2.5&quot;`, internamente se convierte en `minimax/MiniMax-M2.5`. No necesitas agregar el prefijo tú mismo.

### Probarlo

```bash
nanobot agent -m &quot;What&apos;s 42 * 17?&quot;
```

Si obtienes una respuesta, MiniMax está conectado correctamente.

## Configurar GLM-5 (Zhipu)

GLM-5 funciona a través de la API de Zhipu. nanobot tiene soporte integrado para ello.

### Obtener una clave API

1. Ve a [z.ai](https://z.ai/manage-apikey/apikey-list)
2. Regístrate y crea una clave API

&lt;Notice type=&quot;success&quot; title=&quot;Plan de codificación Z.AI GLM — 10% de descuento&quot;&gt;
Z.AI ofrece [planes de codificación GLM](https://z.ai/subscribe?ic=NKNUNYDRZT) diseñados para cargas de trabajo continuas de desarrolladores. Usa nuestro enlace para obtener 10% de descuento.
&lt;/Notice&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Endpoint del plan de codificación Zhipu&quot;&gt;
Si estás en el plan de codificación de Zhipu, configura `&quot;apiBase&quot;: &quot;https://api.z.ai/api/coding/paas/v4&quot;` en la configuración de tu proveedor zhipu. Esto enruta a través de su endpoint optimizado para codificación.
&lt;/Notice&gt;

### Agregar a la configuración

```json
{
  &quot;providers&quot;: {
    &quot;zhipu&quot;: {
      &quot;apiKey&quot;: &quot;your-zhipu-api-key&quot;,
       &quot;apiBase&quot;: &quot;https://api.z.ai/api/coding/paas/v4&quot;
    }
  },
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: &quot;glm-5&quot;
    }
  }
}
```

nanobot detecta la palabra clave `glm` en el nombre del modelo y lo enruta a Zhipu automáticamente. Internamente agrega el prefijo `zai/` para LiteLLM, así que `glm-5` se convierte en `zai/glm-5`.

### Cambiar entre modelos

No tienes que elegir uno. Configura ambos proveedores y cambia el modelo por defecto cuando quieras:

```json
{
  &quot;providers&quot;: {
    &quot;minimax&quot;: {
      &quot;apiKey&quot;: &quot;your-minimax-key&quot;
    },
    &quot;zhipu&quot;: {
      &quot;apiKey&quot;: &quot;your-zhipu-key&quot;
    }
  },
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: &quot;glm-5&quot;
    }
  }
}
```

Cambia `&quot;model&quot;` a `&quot;MiniMax-M2.5&quot;` cuando quieras alternar. No necesitas reiniciar si estás usando el CLI. Para el gateway, reinicia con `nanobot gateway`.

## Configurar Brave Search

Sin búsqueda web, tu bot solo puede trabajar con lo que el modelo ya sabe y lo que hay en tu servidor. Brave Search le da acceso a la web en tiempo real.

### Obtener una clave API de Brave

1. Ve a [brave.com/search/api](https://brave.com/search/api/)
2. Regístrate para una cuenta
3. El plan gratuito te da unas 1,000 búsquedas por mes ($5 en créditos mensuales)
4. Genera una clave API desde el dashboard

### Agregar a la configuración

```json
{
  &quot;tools&quot;: {
    &quot;web&quot;: {
      &quot;search&quot;: {
        &quot;apiKey&quot;: &quot;your-brave-search-api-key&quot;,
        &quot;maxResults&quot;: 5
      }
    }
  }
}
```

La configuración `maxResults` controla cuántos resultados trae nanobot por búsqueda. Cinco es un valor razonable por defecto. Bájalo a 3 si quieres respuestas más rápidas, súbelo a 10 si necesitas investigaciones más completas.

### Cómo funciona

Una vez configurado, el LLM de nanobot puede llamar a la herramienta de búsqueda web cuando necesite información actual. Pregúntale a tu bot algo como &quot;qué pasó hoy en las noticias de tecnología&quot; y consultará la API de Brave, obtendrá resultados y los resumirá.

Las 1,000 consultas mensuales del plan gratuito son suficientes para uso casual. Si estás ejecutando el bot para un equipo o uso diario intenso, los planes de pago empiezan en $5/mes por 2,000 consultas.

## Configuración de Discord

Discord funciona bien para configuraciones de bots personales y de equipo. Así es como conectar nanobot.

### Crear un bot de Discord

1. Ve a [discord.com/developers/applications](https://discord.com/developers/applications)
2. Haz clic en **New Application**, dale un nombre
3. Ve a **Bot** en la barra lateral izquierda, haz clic en **Add Bot**
4. Copia el token del bot

### Habilitar intents

Todavía en la página de configuración del Bot:

1. Baja hasta **Privileged Gateway Intents**
2. Habilita **MESSAGE CONTENT INTENT** (obligatorio, o el bot no podrá leer mensajes)
3. Opcionalmente habilita **SERVER MEMBERS INTENT** si planeas usar listas de permitidos

### Obtener tu ID de usuario

1. Abre la Configuración de Discord, ve a **Advanced**, habilita **Developer Mode**
2. Haz clic derecho en tu avatar en cualquier lugar de Discord
3. Haz clic en **Copy User ID**

### Configurar nanobot

```json
{
  &quot;channels&quot;: {
    &quot;discord&quot;: {
      &quot;enabled&quot;: true,
      &quot;token&quot;: &quot;YOUR_DISCORD_BOT_TOKEN&quot;,
      &quot;allowFrom&quot;: [&quot;YOUR_USER_ID&quot;]
    }
  }
}
```

El array `allowFrom` restringe quién puede hablar con el bot. Déjalo vacío para permitir que cualquiera en tu servidor lo use, o agrega IDs de usuario específicos para limitarlo. Yo lo mantendría restringido a menos que quieras que todos los miembros del servidor chateen con tu bot.

### Invitar el bot a tu servidor

1. En el portal de desarrolladores de Discord, ve a **OAuth2** luego **URL Generator**
2. En **Scopes**, marca `bot`
3. En **Bot Permissions**, marca `Send Messages` y `Read Message History`
4. Copia la URL generada y ábrela en tu navegador
5. Selecciona el servidor donde quieres agregar el bot

### Iniciar el gateway

```bash
nanobot gateway
```

Envía un mensaje en Discord. El bot debería responder. Si no pasa nada, revisa `nanobot status` y mira los logs del gateway.

## Ejemplo de configuración completa

Así es como se ve un `~/.nanobot/config.json` completo con MiniMax M2.5, GLM-5 como segundo proveedor, Brave Search y Discord:

```json
{
  &quot;providers&quot;: {
    &quot;minimax&quot;: {
      &quot;apiKey&quot;: &quot;your-minimax-api-key&quot;
    },
    &quot;zhipu&quot;: {
      &quot;apiKey&quot;: &quot;your-zhipu-api-key&quot;
    }
  },
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: &quot;MiniMax-M2.5&quot;,
      &quot;workspace&quot;: &quot;~/.nanobot/workspace&quot;,
      &quot;maxTokens&quot;: 8192,
      &quot;temperature&quot;: 0.7,
      &quot;maxToolIterations&quot;: 20,
      &quot;memoryWindow&quot;: 50
    }
  },
  &quot;channels&quot;: {
    &quot;discord&quot;: {
      &quot;enabled&quot;: true,
      &quot;token&quot;: &quot;YOUR_DISCORD_BOT_TOKEN&quot;,
      &quot;allowFrom&quot;: [&quot;YOUR_USER_ID&quot;]
    }
  },
  &quot;tools&quot;: {
    &quot;web&quot;: {
      &quot;search&quot;: {
        &quot;apiKey&quot;: &quot;your-brave-search-api-key&quot;,
        &quot;maxResults&quot;: 5
      }
    },
    &quot;exec&quot;: {
      &quot;timeout&quot;: 60
    },
    &quot;restrictToWorkspace&quot;: false
  },
  &quot;gateway&quot;: {
    &quot;host&quot;: &quot;0.0.0.0&quot;,
    &quot;port&quot;: 18790
  }
}
```

### Explicación de las configuraciones

| Configuración | Por defecto | Qué hace |
|---------|---------|-------------|
| `agents.defaults.model` | `anthropic/claude-opus-4-5` | Qué modelo maneja tus mensajes |
| `agents.defaults.maxTokens` | `8192` | Tokens máximos por respuesta del LLM |
| `agents.defaults.temperature` | `0.7` | Aleatoriedad (más bajo = más determinista) |
| `agents.defaults.maxToolIterations` | `20` | Cuántas llamadas de herramientas por turno antes de detenerse |
| `agents.defaults.memoryWindow` | `50` | Número de mensajes pasados que se mantienen en contexto |
| `tools.exec.timeout` | `60` | Timeout de comandos shell en segundos |
| `tools.restrictToWorkspace` | `false` | Cuando es true, todo el acceso a archivos/shell se limita al workspace |
| `gateway.port` | `18790` | Puerto en el que escucha el gateway |

## Cómo funciona el sistema de proveedores

nanobot usa un registro de proveedores que automáticamente enruta el nombre de tu modelo a la API correcta. Cuando configuras un modelo como `glm-5`, nanobot:

1. Escanea el nombre del modelo buscando palabras clave (`glm` coincide con `zhipu`)
2. Verifica si el proveedor coincidente tiene una clave API configurada
3. Agrega el prefijo correcto para el enrutamiento de LiteLLM (`zai/glm-5`)
4. Establece las variables de entorno que espera la librería LLM

Si el nombre del modelo no coincide con ningún proveedor, nanobot usa como fallback el primer proveedor que tenga una clave API. Los gateways (como OpenRouter) tienen prioridad en el fallback ya que pueden enrutar cualquier modelo.

Estos son los proveedores que nanobot soporta de fábrica:

| Proveedor | Coincidencia de palabra clave | Caso de uso |
|----------|--------------|----------|
| `openrouter` | `openrouter` | Gateway a cualquier modelo |
| `anthropic` | `anthropic`, `claude` | Modelos Claude |
| `openai` | `openai`, `gpt` | Modelos GPT |
| `deepseek` | `deepseek` | Modelos DeepSeek |
| `gemini` | `gemini` | Google Gemini |
| `zhipu` | `zhipu`, `glm`, `zai` | Modelos GLM |
| `minimax` | `minimax` | Modelos MiniMax |
| `moonshot` | `moonshot`, `kimi` | Modelos Kimi |
| `dashscope` | `qwen`, `dashscope` | Modelos Qwen |
| `groq` | `groq` | Groq (también maneja transcripción de voz Whisper) |
| `vllm` | `vllm` | Modelos locales via vLLM |
| `openai_codex` | `openai-codex`, `codex` | Codex via OAuth |
| `custom` | — | Cualquier endpoint compatible con OpenAI |

Puedes configurar múltiples proveedores a la vez. nanobot elige el correcto basándose en el nombre del modelo que configures.

## Sistema de memoria

nanobot almacena la memoria en dos archivos dentro del workspace:

| Archivo | Propósito |
|------|---------|
| `~/.nanobot/workspace/memory/MEMORY.md` | Datos a largo plazo que el bot recuerda |
| `~/.nanobot/workspace/memory/HISTORY.md` | Log buscable de interacciones pasadas |

Dile al bot que recuerde algo y lo escribe en `MEMORY.md`. También puede buscar en `HISTORY.md` para encontrar conversaciones pasadas. Ambos archivos son Markdown plano, así que puedes editarlos directamente.

### Archivos de bootstrap del workspace

El workspace también tiene archivos de bootstrap que definen cómo se comporta el bot:

| Archivo | Propósito |
|------|---------|
| `AGENTS.md` | Configuración e instrucciones del agente |
| `SOUL.md` | Personalidad y reglas de comportamiento |
| `USER.md` | Tu información personal y preferencias |
| `TOOLS.md` | Instrucciones de uso de herramientas |
| `IDENTITY.md` | Overrides de identidad del bot |

Estos se cargan en el prompt del sistema cada vez que el bot procesa un mensaje. Edita `USER.md` para contarle sobre ti, tu trabajo, tus preferencias. Edita `SOUL.md` para cambiar cómo se comunica.

```bash
nano ~/.nanobot/workspace/USER.md
```

Agrega todo el contexto que quieras que el bot siempre tenga. En mi caso, son detalles de proyectos, estilo de comunicación preferido y algunas preferencias técnicas.

## Soporte MCP

nanobot soporta [Model Context Protocol](/mcp-introduction-beginners/) para conectar servidores de herramientas externos. El formato de configuración es el mismo que Claude Desktop y Cursor, así que puedes copiar configuraciones de servidores MCP desde el README de cualquier servidor MCP.

### Agregar un servidor MCP

```json
{
  &quot;tools&quot;: {
    &quot;mcpServers&quot;: {
      &quot;filesystem&quot;: {
        &quot;command&quot;: &quot;npx&quot;,
        &quot;args&quot;: [&quot;-y&quot;, &quot;@modelcontextprotocol/server-filesystem&quot;, &quot;/home/user/documents&quot;]
      }
    }
  }
}
```

Funcionan dos modos de transporte:

| Modo | Campos de configuración | Ejemplo |
|------|--------------|---------|
| Stdio | `command` + `args` | Proceso local via `npx` o `uvx` |
| HTTP | `url` | Endpoint remoto como `https://mcp.example.com/sse` |

Las herramientas MCP se descubren y registran automáticamente cuando nanobot arranca. El LLM puede usarlas junto con las herramientas integradas sin ninguna configuración adicional.

## Despliegue con Docker

Si prefieres contenedores, nanobot tiene un Dockerfile que incluye Python 3.12 y Node.js 20 (necesario para el bridge de WhatsApp).

```bash
# Build
docker build -t nanobot .

# Inicializar config (primera vez)
docker run -v ~/.nanobot:/root/.nanobot --rm nanobot onboard

# Editar config en el host
nano ~/.nanobot/config.json

# Ejecutar gateway
docker run -d \
  -v ~/.nanobot:/root/.nanobot \
  -p 18790:18790 \
  --name nanobot \
  nanobot gateway
```

El mount `-v ~/.nanobot:/root/.nanobot` mantiene tu configuración y datos del workspace en el host, así que sobrevive a reinicios del contenedor.

Para una prueba rápida sin el gateway:

```bash
docker run -v ~/.nanobot:/root/.nanobot --rm nanobot agent -m &quot;Hello!&quot;
```

## Tareas programadas

nanobot tiene un sistema cron para tareas recurrentes. Gestionas los trabajos desde el CLI:

```bash
# Agregar un trabajo que se ejecute cada mañana a las 9am
nanobot cron add --name &quot;morning&quot; --message &quot;Good morning! What&apos;s on my calendar today?&quot; --cron &quot;0 9 * * *&quot;

# Agregar un trabajo que se ejecute cada hora
nanobot cron add --name &quot;check&quot; --message &quot;Check server disk usage&quot; --every 3600

# Listar todos los trabajos
nanobot cron list

# Eliminar un trabajo
nanobot cron remove &lt;job_id&gt;
```

El bot procesa estos mensajes a través del mismo pipeline LLM que el chat normal. Si tienes Brave Search configurado, tu resumen matutino puede incluir noticias y clima en tiempo real.

## Configuración de seguridad

Dos configuraciones a las que prestar atención para uso en producción:

### Restricción de workspace

```json
{
  &quot;tools&quot;: {
    &quot;restrictToWorkspace&quot;: true
  }
}
```

Cuando está habilitado, el bot solo puede leer y escribir archivos dentro de `~/.nanobot/workspace/`, y los comandos shell se limitan a ese directorio. Esto previene que el LLM ande paseándose por tu servidor. Yo lo activaría si el bot es accesible para varias personas.

### Listas de permitidos de canal

Cada configuración de canal tiene un campo `allowFrom`:

```json
{
  &quot;channels&quot;: {
    &quot;discord&quot;: {
      &quot;enabled&quot;: true,
      &quot;token&quot;: &quot;...&quot;,
      &quot;allowFrom&quot;: [&quot;123456789&quot;]
    }
  }
}
```

Un `allowFrom` vacío significa que cualquiera puede interactuar. Agrega IDs de usuario para restringir el acceso. Para un bot personal, siempre configura esto.

## Referencia del CLI

| Comando | Qué hace |
|---------|-------------|
| `nanobot onboard` | Inicializar configuración y workspace |
| `nanobot agent -m &quot;...&quot;` | Enviar un solo mensaje |
| `nanobot agent` | Modo de chat interactivo |
| `nanobot agent --no-markdown` | Salida en texto plano |
| `nanobot agent --logs` | Mostrar logs en tiempo real durante el chat |
| `nanobot gateway` | Iniciar el gateway (conecta a canales de chat) |
| `nanobot status` | Mostrar estado actual |
| `nanobot provider login openai-codex` | Login OAuth para Codex |
| `nanobot channels login` | Vincular WhatsApp (escaneo QR) |
| `nanobot channels status` | Mostrar estado de conexión de canales |
| `nanobot cron list` | Listar trabajos programados |
| `nanobot cron add` | Agregar un trabajo programado |
| `nanobot cron remove &lt;id&gt;` | Eliminar un trabajo programado |

En modo interactivo, escribe `exit`, `quit`, `/exit`, `/quit`, `:q`, o presiona `Ctrl+D` para salir.

## Hosting en VPS

Un VPS pequeño maneja nanobot sin problemas. Yo lo estoy ejecutando en un [Hetzner CX22](/hetzner-cloud-review/) (2 vCPU, 4GB RAM) a €4.35/mes. El uso de memoria de Python es modesto comparado con el stack de Node.js de OpenClaw.

&lt;Notice type=&quot;success&quot; title=&quot;Descuento en Hetzner&quot;&gt;
[Obtén €20 de crédito](https://go.bitdoze.com/hetzner), [Hostinger VPS](https://go.bitdoze.com/hostinger-vps) cuando te registres a través de nuestro enlace de referencia. Eso cubre alrededor de 4 meses de un CX22.
&lt;/Notice&gt;

Configuración rápida en un VPS Ubuntu 24.04 limpio:

&lt;Tabs&gt;
&lt;Tab name=&quot;uv (recomendado)&quot;&gt;

```bash
ssh root@YOUR_SERVER_IP

# Update system
apt update &amp;&amp; apt upgrade -y

# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env

# Install nanobot
uv tool install nanobot-ai

# Initialize
nanobot onboard

# Edit config
nano ~/.nanobot/config.json

# Start gateway in background
nohup nanobot gateway &gt; /var/log/nanobot.log 2&gt;&amp;1 &amp;
```

&lt;/Tab&gt;
&lt;Tab name=&quot;pip&quot;&gt;

```bash
ssh root@YOUR_SERVER_IP

# Install Python 3.12 and pip
apt update &amp;&amp; apt upgrade -y
apt install -y python3 python3-pip python3-venv

# Install nanobot
pip install nanobot-ai

# Initialize
nanobot onboard

# Edit config
nano ~/.nanobot/config.json

# Start gateway in background
nohup nanobot gateway &gt; /var/log/nanobot.log 2&gt;&amp;1 &amp;
```

&lt;/Tab&gt;
&lt;/Tabs&gt;

Para una configuración de daemon apropiada, crea un servicio systemd:

```ini
[Unit]
Description=nanobot gateway
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/nanobot gateway
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
```

Guarda eso en `/etc/systemd/system/nanobot.service`, luego:

```bash
systemctl daemon-reload
systemctl enable nanobot
systemctl start nanobot
```

Si quieres ejecutar modelos locales junto con nanobot, revisa nuestra guía sobre [instalar Ollama con Docker](/ollama-docker-install/). El proveedor vLLM de nanobot funciona con cualquier endpoint compatible con OpenAI, así que puedes apuntarlo a un servidor local de Ollama o vLLM.

## nanobot vs OpenClaw

Yo uso ambos, así que aquí va una comparación honesta:

| Aspecto | nanobot | OpenClaw |
|--------|---------|----------|
| Tamaño del código | ~3,700 líneas | 430k+ líneas |
| Método de instalación | `pip install` | Script instalador personalizado |
| Tiempo de configuración | ~5 minutos | ~20 minutos |
| Soporte de canales | 9 plataformas | 4 plataformas |
| Sistema de memoria | Basado en archivos (MEMORY.md) | Basado en archivos + búsqueda semántica |
| Soporte de proveedores | 13+ integrados | Varios con opciones OAuth |
| Sistema de skills | Basado en Markdown, cargado desde workspace | Registro con compartición comunitaria |
| Soporte MCP | Sí | Todavía no |
| Uso de recursos | Menor (Python, ~100MB RAM) | Mayor (Node.js, &gt;1GB RAM) |

OpenClaw tiene un asistente de configuración más pulido y el flujo OAuth para usar suscripciones existentes de Claude/ChatGPT está bien. nanobot es más ligero, se instala más rápido y soporta más plataformas de chat. Para detalles sobre OpenClaw, revisa nuestra [guía completa de configuración](/es/guia-configuracion-openclaw/).

Para otras alternativas, revisa nuestro resumen de [alternativas a OpenClaw](/es/alternativas-openclaw/). Si quieres construir algo más personalizado con equipos multi-agente, mira nuestra [guía de bot de Discord con agente IA](/create-your-own-ai-agent/) usando el framework Agno.

&lt;Accordion label=&quot;Preguntas frecuentes&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

**¿Cuánto cuesta ejecutar nanobot?**

VPS: ~$5/mes en Hetzner. API de MiniMax M2.5 Lightning: aproximadamente $1/hora de uso continuo, pero los costos reales son mucho menores ya que el bot solo llama a la API cuando le envías un mensaje. Espera $5-20/mes para uso personal dependiendo de cuánto lo uses.

**¿Puedo usar nanobot sin costos de API?**

Sí. Configura el proveedor vLLM y apúntalo a un servidor de modelos local ejecutando Ollama o vLLM. Necesitarás hardware capaz de ejecutar inferencia, pero no hay facturas de API.

**¿Funciona nanobot en una Raspberry Pi?**

Funciona, pero el rendimiento depende de tu elección de modelo. Con un proveedor de API remoto (MiniMax, Zhipu), una Pi 4 con 4GB de RAM maneja el gateway sin problemas. Ejecutar modelos locales en una Pi es otra historia.

**¿Pueden varias personas usar una instancia de nanobot?**

Sí. Agrega múltiples IDs de usuario a `allowFrom` en tu configuración de canal. Cada persona obtiene su propio contexto de conversación a través del sistema de sesiones.

**¿Cuál es la diferencia entre los comandos agent y gateway?**

`nanobot agent` es para chat directo por CLI. `nanobot gateway` inicia el servicio en segundo plano que se conecta a Discord, Telegram y otras plataformas de chat. Para uso 24/7, quieres el gateway.

**¿Puedo agregar Telegram junto con Discord?**

Por supuesto. Configura ambos canales en el mismo archivo de configuración y el gateway los maneja simultáneamente. Revisa la [guía de configuración de OpenClaw](/es/guia-configuracion-openclaw/) para los pasos detallados de creación de bot de Telegram ya que el flujo de BotFather es idéntico.

&lt;/Accordion&gt;

Si quieres explorar otras herramientas de codificación con IA que van bien con bots autoalojados, nuestra [comparación de herramientas de codificación con IA](/ai-coading-tools/) cubre el panorama actual. Para ejecutar agentes con frameworks de Python, revisa la [guía de inicio con Agno](/agno-get-start/).

Este artículo también está disponible en inglés: [NanoBot Setup Guide](/nanobot-setup-guide/).</content:encoded><category>ai</category><category>ai-tools</category><category>self-hosted</category><category>vps</category></item><item><title>Guia de Configuracion de ZeroClaw: MiniMax M2.5, GLM-5, y Discord en Tu VPS</title><link>https://www.bitdoze.com/es/guia-configuracion-zeroclaw/</link><guid isPermaLink="true">https://www.bitdoze.com/es/guia-configuracion-zeroclaw/</guid><description>Guia paso a paso para instalar ZeroClaw en un VPS Linux con MiniMax M2.5, GLM-5, integracion con Discord y Brave Search. Cubre configuracion, proveedores, memoria y despliegue con Docker.</description><pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import YouTubeEmbed from &quot;@components/widgets/YouTubeEmbed.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

[ZeroClaw](https://github.com/zeroclaw-labs/zeroclaw) aparecio en mi radar la semana pasada y tuve que probarlo. Es un asistente de IA auto-alojado escrito completamente en Rust que compila a un binario de 3.4MB y usa menos de 5MB de RAM en ejecucion. Para ponerlo en contexto, eso es unas 200 veces menos memoria que OpenClaw y aproximadamente 20 veces menos que nanobot. Si has estado usando [nanobot](/es/guia-configuracion-nanobot/), [PicoClaw](/es/guia-configuracion-picoclaw/) u [OpenClaw](/es/guia-configuracion-openclaw/) y querias algo mas ligero, vale la pena echarle un vistazo.

Esta guia te lleva paso a paso para poner ZeroClaw en marcha en un VPS con MiniMax M2.5 y GLM-5 como modelos, Brave Search para acceso web, y Discord como canal de chat.

&lt;Button text=&quot;ZeroClaw en GitHub&quot; link=&quot;https://github.com/zeroclaw-labs/zeroclaw&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre esta guia&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Instalar ZeroClaw desde el codigo fuente o via Docker&lt;/li&gt;
&lt;li&gt;Configurar MiniMax M2.5 y Zhipu GLM-5 como proveedores LLM&lt;/li&gt;
&lt;li&gt;Configurar Brave Search para acceso web&lt;/li&gt;
&lt;li&gt;Integracion con canal de Discord&lt;/li&gt;
&lt;li&gt;Sistema de memoria con busqueda hibrida en SQLite&lt;/li&gt;
&lt;li&gt;Configuracion de seguridad, sandboxing y emparejamiento del gateway&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

Si estas comparando opciones de bots auto-alojados, nuestro articulo de [alternativas a OpenClaw](/es/alternativas-openclaw/) incluye ZeroClaw junto con nanobot, NanoClaw, memU y PicoClaw.

## Que es ZeroClaw realmente

ZeroClaw es un asistente de IA basado en Rust de zeroclaw-labs. Arranca en menos de 10ms, usa menos de 5MB de RAM, y el binario de release pesa unos 3.4MB. Todo esta construido alrededor de traits, que es la version de interfaces en Rust. ¿Quieres cambiar tu proveedor LLM? Cambia una linea en un archivo TOML. Lo mismo aplica para canales, backends de memoria y herramientas.

La arquitectura se ve asi:

```
Tu (Discord / Telegram / Slack / iMessage / Matrix / etc.)
    ↓
ZeroClaw Gateway (ejecutandose en tu VPS, 127.0.0.1:8080)
    ↓
Proveedor LLM (OpenRouter, Anthropic, OpenAI, Ollama, MiniMax, Zhipu, etc.)
    ↓
Herramientas (shell, acceso a archivos, busqueda web, memoria, integraciones Composio)
```

Los mensajes llegan desde tu app de chat, ZeroClaw los enruta al LLM que configuraste, y el modelo puede usar herramientas integradas para hacer el trabajo. El gateway se vincula a localhost por defecto y requiere un codigo de emparejamiento antes de aceptar cualquier solicitud webhook. Ese es un buen valor por defecto de seguridad que la mayoria de alternativas se saltan.

### Como se compara

| | OpenClaw | NanoBot | ZeroClaw 🦀 |
|---|---|---|---|
| **Lenguaje** | TypeScript | Python | **Rust** |
| **RAM** | &gt; 1GB | &gt; 100MB | **&lt; 5MB** |
| **Arranque** | &gt; 10s | &gt; 2s | **&lt; 10ms** |
| **Binario** | ~28MB (dist) | N/A (scripts) | **3.4MB** |
| **Canales** | 4 plataformas | 9 plataformas | **8+ plataformas** |
| **Proveedores** | Varios | 13+ | **22+** |
| **Memoria** | Archivo + semantica | Basada en archivos | **Busqueda hibrida SQLite** |

## Por que MiniMax M2.5 y GLM-5

Ambos modelos salieron en febrero de 2026 y combinan bien con un bot ligero como ZeroClaw.

### MiniMax M2.5

MiniMax M2.5 es un modelo Mixture-of-Experts de 230B con solo 10B parametros activos por pasada. Es rapido y barato:

| Especificacion | Valor |
|------|-------|
| Arquitectura | 230B MoE, 10B activos |
| Ventana de contexto | 1M tokens |
| Velocidad (Lightning) | 100 tokens/seg |
| Costo (Lightning) | $0.30/M entrada, $2.40/M salida |
| SWE-Bench Verified | 80.2% |
| Licencia | MIT modificada (codigo abierto) |

Obtiene 80.2% en SWE-Bench Verified, igualando a Claude Opus 4.6 a aproximadamente 1/20 del costo. La ventana de contexto de 1M tokens significa que ZeroClaw no alcanzara limites de contexto ni con conversaciones largas.

### GLM-5

GLM-5 de Zhipu AI es un modelo MoE de 744B con 40-44B parametros activos:

| Especificacion | Valor |
|------|-------|
| Arquitectura | 744B MoE, ~40B activos |
| Ventana de contexto | 200K tokens |
| SWE-Bench Verified | 77.8% |
| BrowseComp | #1 codigo abierto |
| Licencia | MIT |

GLM-5 ocupa el primer lugar entre modelos de codigo abierto en BrowseComp (tareas de agentes de busqueda web), asi que es una buena eleccion para un bot que hace muchas consultas web.

Ambos modelos estan disponibles a traves de sus propias APIs y a traves de OpenRouter si quieres un unico gateway.

## Instalacion

Dos formas principales de instalar ZeroClaw: desde el codigo fuente o via Docker.

&lt;Tabs&gt;
&lt;Tab name=&quot;Desde el codigo fuente (recomendado)&quot;&gt;

Necesitas tener Rust instalado. Si no lo tienes:

```bash
curl --proto &apos;=https&apos; --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
```

Luego compila e instala ZeroClaw:

```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
cargo build --release --locked
cargo install --path . --force --locked
```

El build de release produce un binario de ~3.4MB. En un VPS de 2 nucleos esto toma unos minutos. En una Raspberry Pi con 1GB de RAM, usa `CARGO_BUILD_JOBS=1 cargo build --release` para evitar que el kernel mate a rustc.

&lt;/Tab&gt;
&lt;Tab name=&quot;Docker&quot;&gt;

Descarga la imagen pre-compilada o compila localmente:

```bash
# Using docker-compose
curl -O https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/docker-compose.yml

# Set your API key
export API_KEY=&quot;sk-your-key-here&quot;

# Start
docker-compose up -d
```

O compila desde el repositorio:

```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
docker build -t zeroclaw .
```

&lt;/Tab&gt;
&lt;/Tabs&gt;

Despues de instalar, ejecuta el asistente de configuracion:

```bash
# Quick setup (non-interactive)
zeroclaw onboard --api-key sk-... --provider openrouter

# Or interactive wizard
zeroclaw onboard --interactive
```

Esto crea el directorio `~/.zeroclaw/` con un `config.toml` y una carpeta de workspace.

Verifica que todo funciona:

```bash
zeroclaw status
```

## Configurar MiniMax M2.5

ZeroClaw usa TOML para la configuracion en lugar de JSON. El archivo de configuracion esta en `~/.zeroclaw/config.toml`.

### Obtener una clave API

1. Ve a [platform.minimax.io](https://platform.minimax.io) (global) o [minimaxi.com](https://www.minimaxi.com) (China continental)
2. Crea una cuenta y genera una clave API

&lt;Notice type=&quot;success&quot; title=&quot;Plan de codificacion MiniMax — 10% de descuento&quot;&gt;
MiniMax ofrece planes de codificacion con precios para cargas de trabajo de desarrolladores. [Obtén 10% de descuento con nuestro enlace de referido](https://go.bitdoze.com/minimax). Para detalles sobre como se comparan GLM-5 y MiniMax M2.5 para bots siempre activos, ve nuestro desglose de [mejores modelos open source para OpenClaw](/best-opensource-models-for-openclaw/).
&lt;/Notice&gt;

### Agregar a la configuracion

ZeroClaw soporta MiniMax a traves de OpenRouter o como un endpoint personalizado compatible con OpenAI. La forma mas simple es via OpenRouter:

```toml
api_key = &quot;sk-or-your-openrouter-key&quot;
default_provider = &quot;openrouter&quot;
default_model = &quot;minimax/MiniMax-M2.5&quot;
default_temperature = 0.7
```

Si quieres conectar directamente con la API de MiniMax, usa un proveedor personalizado:

```toml
api_key = &quot;your-minimax-api-key&quot;
default_provider = &quot;custom:https://api.minimax.chat/v1&quot;
default_model = &quot;MiniMax-M2.5&quot;
default_temperature = 0.7
```

Para el endpoint de China continental, cambia la URL a `https://api.minimaxi.com/v1`.

### Probar

```bash
zeroclaw agent -m &quot;What&apos;s 42 * 17?&quot;
```

Si obtienes una respuesta, MiniMax esta funcionando.

## Configurar GLM-5 (Zhipu)

GLM-5 funciona a traves de OpenRouter o directamente via la API de Zhipu.

### Obtener una clave API

1. Ve a [z.ai](https://z.ai/manage-apikey/apikey-list)
2. Registrate y crea una clave API

&lt;Notice type=&quot;success&quot; title=&quot;Plan de codificacion Z.AI GLM — 10% de descuento&quot;&gt;
Z.AI ofrece [planes de codificacion GLM](https://z.ai/subscribe?ic=NKNUNYDRZT) diseñados para cargas de trabajo continuas de desarrolladores. Usa nuestro enlace para obtener 10% de descuento.
&lt;/Notice&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Endpoint del plan de codificacion Zhipu&quot;&gt;
Si estas en el plan de codificacion de Zhipu, usa `custom:https://api.z.ai/api/coding/paas/v4` como tu proveedor. Esto enruta a traves de su endpoint optimizado para codificacion.
&lt;/Notice&gt;

### Agregar a la configuracion

Via OpenRouter:

```toml
api_key = &quot;sk-or-your-openrouter-key&quot;
default_provider = &quot;openrouter&quot;
default_model = &quot;zhipu/glm-5&quot;
default_temperature = 0.7
```

O directamente via la API de Zhipu:

```toml
api_key = &quot;your-zhipu-api-key&quot;
default_provider = &quot;custom:https://api.z.ai/api/coding/paas/v4&quot;
default_model = &quot;glm-5&quot;
default_temperature = 0.7
```

### Cambiar entre modelos

ZeroClaw lee el modelo desde `config.toml`, asi que cambiar es solo editar una linea. No se necesita reinicio si usas el CLI. Para el gateway, reinicia con `zeroclaw gateway`.

## Configurar Brave Search

Sin busqueda web, tu bot esta limitado a los datos de entrenamiento del modelo y los archivos que esten en tu servidor. Brave Search le da acceso web en vivo.

### Obtener una clave API de Brave

1. Ve a [brave.com/search/api](https://brave.com/search/api/)
2. Registra una cuenta
3. El tier gratuito te da unas 1,000 busquedas al mes
4. Genera una clave API desde el dashboard

### Agregar a la configuracion

```toml
[browser]
enabled = true
allowed_domains = [&quot;*&quot;]
```

La herramienta de navegador de ZeroClaw soporta Brave Search a traves de la herramienta `browser_open`. Configura la clave API de Brave como variable de entorno:

```bash
export BRAVE_API_KEY=&quot;your-brave-search-api-key&quot;
```

O agregala a la configuracion si prefieres tener todo en un solo lugar. El array `allowed_domains` controla que dominios puede navegar el bot. Usa `[&quot;*&quot;]` durante la configuracion, luego restringe a dominios especificos despues.

## Configuracion de Discord

Discord es uno de los 8+ canales que ZeroClaw soporta. La integracion usa el WebSocket gateway de Discord directamente, asi que no necesitas una URL de webhook o un endpoint publico.

### Crear un bot de Discord

1. Ve a [discord.com/developers/applications](https://discord.com/developers/applications)
2. Haz clic en **New Application**, dale un nombre
3. Ve a **Bot** en la barra lateral izquierda, haz clic en **Add Bot**
4. Copia el token del bot

### Habilitar intents

Todavia en la pagina de configuracion del Bot:

1. Baja hasta **Privileged Gateway Intents**
2. Habilita **MESSAGE CONTENT INTENT** (obligatorio, si no el bot no puede leer mensajes)
3. Opcionalmente habilita **SERVER MEMBERS INTENT** si quieres usar listas de permitidos por nombre de usuario

### Obtener tu ID de usuario

1. Abre Configuracion de Discord → **Advanced** → habilita **Developer Mode**
2. Haz clic derecho en tu avatar en cualquier parte de Discord
3. Haz clic en **Copy User ID**

### Configurar ZeroClaw

Agrega la configuracion del canal de Discord a tu `~/.zeroclaw/config.toml`:

```toml
[channels_config.discord]
token = &quot;YOUR_DISCORD_BOT_TOKEN&quot;
allowed_users = [&quot;YOUR_USER_ID&quot;]
```

&lt;Notice type=&quot;warning&quot; title=&quot;Comportamiento de la lista de permitidos&quot;&gt;
En ZeroClaw, una lista de permitidos vacia significa **denegar todos los mensajes entrantes** por defecto. Esto es lo opuesto a la mayoria de otros bots. Agrega tu ID de usuario o usa `[&quot;*&quot;]` para acceso abierto. Si no estas seguro de como se ve tu identidad de remitente, inicia el bot, enviale un mensaje, y revisa el log de advertencias para ver el valor exacto.
&lt;/Notice&gt;

### Invitar el bot a tu servidor

1. En el portal de desarrolladores de Discord, ve a **OAuth2** → **URL Generator**
2. En **Scopes**, marca `bot`
3. En **Bot Permissions**, marca `Send Messages` y `Read Message History`
4. Copia la URL generada y abrela en tu navegador
5. Selecciona el servidor al que quieres agregar el bot

### Iniciar el daemon

```bash
zeroclaw daemon
```

Esto inicia el runtime autonomo completo incluyendo todos los canales configurados. Solo para el gateway:

```bash
zeroclaw gateway
```

Envia un mensaje en Discord. El bot deberia responder. Si no pasa nada, ejecuta `zeroclaw doctor` para diagnosticar problemas de canal, o `zeroclaw channel doctor` para chequeos de salud de canal especificos.

## Ejemplo de configuracion completa

Asi se ve un `~/.zeroclaw/config.toml` completo con OpenRouter (para MiniMax M2.5), Brave Search, Discord y memoria SQLite:

```toml
api_key = &quot;sk-or-your-openrouter-key&quot;
default_provider = &quot;openrouter&quot;
default_model = &quot;minimax/MiniMax-M2.5&quot;
default_temperature = 0.7

[memory]
backend = &quot;sqlite&quot;
auto_save = true
embedding_provider = &quot;openai&quot;
vector_weight = 0.7
keyword_weight = 0.3

[gateway]
require_pairing = true
allow_public_bind = false

[autonomy]
level = &quot;supervised&quot;
workspace_only = true
allowed_commands = [&quot;git&quot;, &quot;npm&quot;, &quot;cargo&quot;, &quot;ls&quot;, &quot;cat&quot;, &quot;grep&quot;]
forbidden_paths = [&quot;/etc&quot;, &quot;/root&quot;, &quot;/proc&quot;, &quot;/sys&quot;, &quot;~/.ssh&quot;, &quot;~/.gnupg&quot;, &quot;~/.aws&quot;]

[channels_config.discord]
token = &quot;YOUR_DISCORD_BOT_TOKEN&quot;
allowed_users = [&quot;YOUR_USER_ID&quot;]

[browser]
enabled = true
allowed_domains = [&quot;docs.rs&quot;, &quot;github.com&quot;, &quot;stackoverflow.com&quot;]

[heartbeat]
enabled = false
interval_minutes = 30

[tunnel]
provider = &quot;none&quot;

[secrets]
encrypt = true
```

### Explicacion de la configuracion

| Ajuste | Por defecto | Que hace |
|---------|---------|-------------|
| `default_model` | `anthropic/claude-sonnet-4-20250514` | Que modelo maneja tus mensajes |
| `default_temperature` | `0.7` | Aleatoriedad (menor = mas deterministico) |
| `autonomy.level` | `supervised` | `readonly`, `supervised`, o `full` |
| `autonomy.workspace_only` | `true` | Limita todo acceso a archivos/shell al workspace |
| `memory.backend` | `sqlite` | `sqlite`, `lucid`, `markdown`, o `none` |
| `gateway.require_pairing` | `true` | Requiere codigo de 6 digitos para conectar |
| `gateway.allow_public_bind` | `false` | Rechaza 0.0.0.0 sin un tunel |
| `secrets.encrypt` | `true` | Claves API encriptadas con ChaCha20-Poly1305 |

## Sistema de proveedores

ZeroClaw viene con 22+ proveedores integrados. Cada proveedor implementa el mismo trait `Provider`, asi que cambiar entre ellos es un cambio de configuracion.

| Proveedor | Endpoint API | Notas |
|----------|-------------|-------|
| OpenRouter | `https://openrouter.ai/api/v1` | Gateway a cualquier modelo |
| Anthropic | API directa | Modelos Claude |
| OpenAI | API directa | Modelos GPT |
| Ollama | Local | Modelos auto-alojados |
| Gemini | API directa | Google Gemini (nativo, no OpenAI-compat) |
| Venice | API directa | Enfocado en privacidad |
| Groq | API directa | Inferencia rapida |
| Mistral | API directa | Modelos Mistral |
| xAI | API directa | Modelos Grok |
| DeepSeek | API directa | Modelos DeepSeek |
| Together | API directa | Modelos open-source |
| Fireworks | API directa | Open-source rapido |
| Perplexity | API directa | Aumentado con busqueda |
| Cohere | API directa | Modelos Command |
| Bedrock | AWS API | Modelos hosteados en AWS |
| Custom | Cualquier URL | Cualquier API compatible con OpenAI |

Para MiniMax y Zhipu especificamente, usa OpenRouter o el proveedor `custom:` con sus URLs de API. El proveedor custom de ZeroClaw funciona con cualquier endpoint compatible con OpenAI, lo que cubre a ambos.

## Sistema de memoria

La memoria de ZeroClaw va mas alla de lo que ofrecen nanobot u OpenClaw. Es un motor de busqueda hibrido construido sobre SQLite sin dependencias externas:

| Capa | Que hace |
|-------|-------------|
| Vector DB | Embeddings almacenados como BLOB en SQLite, busqueda por similitud coseno |
| Busqueda por palabras clave | Tablas virtuales FTS5 con puntuacion BM25 |
| Fusion hibrida | Fusion ponderada de resultados vectoriales y por palabras clave |
| Embeddings | Embeddings de OpenAI por defecto, o noop para sin embeddings |
| Chunking | Chunker de markdown basado en lineas con preservacion de encabezados |
| Cache | Cache de embeddings en SQLite con eviccion LRU |

El bot automaticamente almacena, recupera y gestiona la memoria a traves de herramientas integradas. No se necesitan servicios externos. Ni Pinecone, ni Elasticsearch.

```toml
[memory]
backend = &quot;sqlite&quot;
auto_save = true
embedding_provider = &quot;openai&quot;
vector_weight = 0.7
keyword_weight = 0.3
```

Configura `embedding_provider = &quot;noop&quot;` si no quieres pagar por embeddings de OpenAI. Perderas la busqueda vectorial pero la busqueda por palabras clave (FTS5) sigue funcionando bien por si sola.

### Archivos de identidad

Como nanobot, ZeroClaw usa archivos de workspace para dar forma a la personalidad del bot:

| Archivo | Proposito |
|------|---------|
| `IDENTITY.md` | Quien es el agente |
| `SOUL.md` | Personalidad y valores centrales |
| `USER.md` | Tu informacion personal y preferencias |
| `AGENTS.md` | Pautas de comportamiento |
| `TOOLS.md` | Instrucciones de uso de herramientas |

Edita estos en `~/.zeroclaw/workspace/`. ZeroClaw tambien soporta AIEOS (AI Entity Object Specification) como formato alternativo de identidad si quieres personas de IA portables.

## Despliegue con Docker

Para Docker, ZeroClaw tiene un Dockerfile multi-stage con targets de desarrollo y produccion. La imagen de produccion usa la base distroless de Google, asi que es muy pequeña.

### Usando docker-compose

```bash
# Download the compose file
curl -O https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/docker-compose.yml

# Create .env file
cat &gt; .env &lt;&lt; &apos;EOF&apos;
API_KEY=sk-or-your-openrouter-key
PROVIDER=openrouter
ZEROCLAW_MODEL=minimax/MiniMax-M2.5
HOST_PORT=3000
EOF

# Start
docker-compose up -d
```

### Docker run manual

```bash
# Build
docker build -t zeroclaw --target release .

# Run
docker run -d \
  -e API_KEY=&quot;sk-or-your-openrouter-key&quot; \
  -e PROVIDER=&quot;openrouter&quot; \
  -e ZEROCLAW_MODEL=&quot;minimax/MiniMax-M2.5&quot; \
  -v zeroclaw-data:/zeroclaw-data \
  -p 3000:3000 \
  --name zeroclaw \
  zeroclaw
```

El contenedor se ejecuta como usuario no-root (UID 65534) por defecto.

### Chequeos de salud

El archivo compose incluye un chequeo de salud usando `zeroclaw doctor`:

```yaml
healthcheck:
  test: [&quot;CMD&quot;, &quot;zeroclaw&quot;, &quot;doctor&quot;]
  interval: 30s
  timeout: 10s
  retries: 3
```

## Configuracion de seguridad

Los valores por defecto de seguridad de ZeroClaw son mas estrictos que la mayoria de alternativas. Algunas cosas que vale la pena saber:

### Emparejamiento del gateway

Cuando inicias el gateway, ZeroClaw genera un codigo de emparejamiento de 6 digitos de un solo uso. Necesitas intercambiar este codigo por un bearer token antes de que el gateway acepte cualquier solicitud webhook:

```bash
# Start gateway (shows pairing code in logs)
zeroclaw gateway

# Exchange code for token
curl -X POST http://127.0.0.1:8080/pair \
  -H &quot;X-Pairing-Code: 123456&quot;
```

Todas las solicitudes `/webhook` posteriores necesitan el header `Authorization: Bearer &lt;token&gt;`.

### Sandboxing del workspace

```toml
[autonomy]
workspace_only = true
allowed_commands = [&quot;git&quot;, &quot;npm&quot;, &quot;cargo&quot;, &quot;ls&quot;, &quot;cat&quot;, &quot;grep&quot;]
forbidden_paths = [&quot;/etc&quot;, &quot;/root&quot;, &quot;/proc&quot;, &quot;/sys&quot;, &quot;~/.ssh&quot;, &quot;~/.gnupg&quot;, &quot;~/.aws&quot;]
```

Con `workspace_only = true`, el bot solo puede acceder a archivos dentro de su workspace. 14 directorios del sistema y 4 dotfiles sensibles estan bloqueados por defecto. Los intentos de escape via symlink se detectan a traves de la canonicalizacion de rutas.

### Vinculacion solo a localhost

El gateway se vincula a `127.0.0.1` por defecto y se niega a vincularse a `0.0.0.0` a menos que configures un tunel (Cloudflare, Tailscale, ngrok) o establezcas explicitamente `allow_public_bind = true`.

## Referencia del CLI

| Comando | Que hace |
|---------|-------------|
| `zeroclaw onboard` | Configuracion rapida |
| `zeroclaw onboard --interactive` | Asistente completo de 7 pasos |
| `zeroclaw onboard --channels-only` | Reconfigurar solo canales |
| `zeroclaw agent -m &quot;...&quot;` | Enviar un solo mensaje |
| `zeroclaw agent` | Modo de chat interactivo |
| `zeroclaw gateway` | Iniciar servidor webhook |
| `zeroclaw daemon` | Iniciar runtime autonomo completo |
| `zeroclaw status` | Mostrar estado del sistema |
| `zeroclaw doctor` | Ejecutar diagnosticos |
| `zeroclaw channel doctor` | Chequear salud del canal |
| `zeroclaw service install` | Instalar como servicio del sistema |
| `zeroclaw service status` | Verificar estado del servicio |
| `zeroclaw migrate openclaw` | Migrar memoria desde OpenClaw |

El comando `migrate openclaw` es util si estas migrando desde OpenClaw. Ejecuta `--dry-run` primero para previsualizar lo que se importa.

## Hosting en VPS

ZeroClaw se ejecuta en practicamente cualquier cosa. Lo probe en un [Hetzner CX22](/hetzner-cloud-review/) (2 vCPU, 4GB RAM) a €4.35/mes, pero honestamente funcionaria bien en hardware mucho mas barato. El proyecto dice que funciona en computadoras de placa unica de $10 y lo creo dado el consumo de memoria.

&lt;Notice type=&quot;success&quot; title=&quot;Descuento en Hetzner&quot;&gt;
[Obtén €20 de credito](https://go.bitdoze.com/hetzner), [Hostinger VPS](https://go.bitdoze.com/hostinger-vps) cuando te registres a traves de nuestro enlace de referido. Eso cubre alrededor de 4 meses de un CX22.
&lt;/Notice&gt;

Configuracion rapida en un VPS Ubuntu 24.04 nuevo:

```bash
ssh root@YOUR_SERVER_IP

# Update system
apt update &amp;&amp; apt upgrade -y

# Install Rust
curl --proto &apos;=https&apos; --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env

# Clone and build
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
cargo build --release --locked
cargo install --path . --force --locked

# Initialize
zeroclaw onboard --interactive

# Edit config
nano ~/.zeroclaw/config.toml

# Start
zeroclaw daemon
```

Para una configuracion de daemon adecuada, instala ZeroClaw como servicio del sistema:

```bash
zeroclaw service install
zeroclaw service start
zeroclaw service status
```

Esto crea un servicio de usuario systemd que arranca con el sistema y se reinicia en caso de fallo.

Si quieres ejecutar modelos locales junto con ZeroClaw, revisa nuestra guia de [instalar Ollama con Docker](/ollama-docker-install/). El proveedor Ollama de ZeroClaw se conecta a cualquier instancia local de Ollama sin configuracion extra.

## ZeroClaw vs nanobot vs OpenClaw

Uso los tres en este punto, asi que aqui va una comparacion directa:

| Aspecto | ZeroClaw 🦀 | nanobot | OpenClaw |
|--------|------------|---------|----------|
| Lenguaje | Rust | Python | TypeScript |
| Uso de RAM | &lt; 5MB | ~100MB | &gt; 1GB |
| Arranque | &lt; 10ms | &gt; 2s | &gt; 10s |
| Tamaño del binario | 3.4MB | N/A (scripts) | ~28MB |
| Formato de config | TOML | JSON | Custom |
| Cantidad de canales | 8+ | 9 | 4 |
| Cantidad de proveedores | 22+ | 13+ | Varios |
| Memoria | Busqueda hibrida SQLite | Basada en archivos | Archivo + semantica |
| Seguridad | Emparejamiento + sandbox + listas de permitidos | Listas de permitidos | Listas de permitidos |
| Metodo de instalacion | `cargo install` | `pip install` | Script personalizado |
| Tiempo de configuracion | ~10 minutos (incluye compilacion) | ~5 minutos | ~20 minutos |

ZeroClaw gana en uso de recursos y seguridad. nanobot gana en velocidad de configuracion y cantidad de canales. OpenClaw tiene la experiencia de onboarding mas pulida con su flujo OAuth para suscripciones existentes de Claude/ChatGPT.

Para la guia de configuracion de nanobot, ve nuestro [tutorial completo](/es/guia-configuracion-nanobot/). Para OpenClaw, ve la [guia de configuracion](/es/guia-configuracion-openclaw/).

&lt;Accordion label=&quot;Preguntas frecuentes&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

**¿Cuanto cuesta ejecutar ZeroClaw?**

VPS: ~$5/mes en Hetzner. API Lightning de MiniMax M2.5: aproximadamente $1/hora de uso continuo, pero los costos reales son mucho menores ya que el bot solo llama a la API cuando le envias un mensaje. Espera $5-20/mes para uso personal.

**¿Puedo usar ZeroClaw sin costos de API?**

Si. Configura `default_provider = &quot;ollama&quot;` y apuntalo a una instancia local de Ollama. Necesitas hardware que pueda ejecutar inferencia, pero no hay facturas de API.

**¿ZeroClaw funciona en una Raspberry Pi?**

Si. El proyecto soporta explicitamente targets ARM. En una Pi con 1GB de RAM, compila con `CARGO_BUILD_JOBS=1` para evitar quedarte sin memoria durante la compilacion. Una vez compilado, ZeroClaw usa menos de 5MB de RAM en ejecucion.

**¿Pueden varias personas usar una instancia de ZeroClaw?**

Si. Agrega multiples IDs de usuario a la lista de permitidos del canal. Cada persona obtiene su propio contexto de conversacion.

**¿Cual es la diferencia entre gateway y daemon?**

`zeroclaw gateway` inicia solo el servidor webhook. `zeroclaw daemon` inicia el runtime autonomo completo incluyendo todos los canales, tareas de heartbeat y el planificador. Para uso 24/7 con Discord, quieres el daemon.

**¿Puedo migrar de OpenClaw a ZeroClaw?**

Si. ZeroClaw tiene un comando de migracion integrado: `zeroclaw migrate openclaw`. Ejecuta `--dry-run` primero para previsualizar lo que se importa, luego ejecutalo de verdad.

**¿Puedo agregar Telegram junto con Discord?**

Si. Configura ambos canales en el mismo archivo de configuracion. ZeroClaw los maneja simultaneamente. Ve la seccion de Telegram en la guia de nanobot para el flujo de BotFather ya que es el mismo proceso.

&lt;/Accordion&gt;

Si quieres explorar otras herramientas de codificacion con IA, nuestra [comparacion de herramientas de codificacion con IA](/ai-coading-tools/) cubre el panorama actual. Para un asistente auto-mejorante con modo de voz y migracion de OpenClaw, ve la [guia de configuracion de Hermes Agent](/es/guia-configuracion-hermes-agent/). Para conceptos basicos de MCP que funcionan en todos estos asistentes, revisa la [introduccion a MCP para principiantes](/mcp-introduction-beginners/).

Este articulo tambien esta disponible en ingles: [ZeroClaw Setup Guide](/zeroclaw-setup-guide/)</content:encoded><category>ai</category><category>ai-tools</category><category>self-hosted</category><category>vps</category></item><item><title>Agregar Busqueda DuckDuckGo a OpenClaw: Busqueda Web Gratis Sin Claves API</title><link>https://www.bitdoze.com/es/busqueda-duckduckgo-openclaw/</link><guid isPermaLink="true">https://www.bitdoze.com/es/busqueda-duckduckgo-openclaw/</guid><description>Guia paso a paso para agregar busqueda DuckDuckGo a OpenClaw (anteriormente Clawdbot/Moltbot). Reemplaza Brave Search con una alternativa gratuita que no requiere clave API.</description><pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;

OpenClaw viene con Brave Search como el proveedor de busqueda web predeterminado. Funciona bien, pero necesitas una clave API. Si quieres una alternativa gratuita que simplemente funciona sin registros, DuckDuckGo es la respuesta.

&lt;Notice type=&quot;info&quot; title=&quot;Lo Que Necesitas&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;OpenClaw instalado en tu servidor&lt;/li&gt;
&lt;li&gt;Familiaridad basica con editar archivos TypeScript&lt;/li&gt;
&lt;li&gt;curl instalado (disponible por defecto en la mayoria de sistemas Linux)&lt;/li&gt;
&lt;li&gt;No se requiere clave API para DuckDuckGo!&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

Si eres nuevo en OpenClaw, primero revisa nuestra [Guia de Configuracion de OpenClaw](/es/guia-configuracion-openclaw/).

## Por Que DuckDuckGo Sobre Brave?

| Feature | Brave Search | DuckDuckGo |
|---------|--------------|------------|
| **Clave API** | Requerida (nivel gratuito disponible) | No necesaria |
| **Costo Mensual** | Nivel gratuito + planes pagos | $0 para siempre |
| **Limites de Tasa** | Limites por plan | Riesgo anti-bot |
| **Complejidad de Configuracion** | Baja | Media (modificacion de codigo) |
| **Filtros de Actualidad** | Si (pd, pw, pm, py) | No |
| **Confiabilidad** | Alta | Media (scraping HTML) |

DuckDuckGo usa scraping HTML, lo que significa que puede romperse si cambian la estructura de su pagina. Pero para uso personal en OpenClaw, es una opcion gratuita solida.

## Resumen de la Implementacion

El enfoque usa el endpoint de busqueda HTML de DuckDuckGo (`https://html.duckduckgo.com/html/`) y analiza los resultados del HTML crudo. Este es el mismo metodo usado por muchas herramientas de busqueda enfocadas en privacidad.

Esto es lo que haremos:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Agregar DuckDuckGo a la lista de proveedores de busqueda&lt;/li&gt;
&lt;li&gt;Crear una funcion para llamar la busqueda HTML de DuckDuckGo via curl&lt;/li&gt;
&lt;li&gt;Agregar un analizador HTML para extraer resultados&lt;/li&gt;
&lt;li&gt;Actualizar la logica de resolucion de proveedor&lt;/li&gt;
&lt;li&gt;Configurar OpenClaw para usar DuckDuckGo&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

## Paso 1: Agregar DuckDuckGo a los Proveedores de Busqueda

Abre el archivo de la herramienta de busqueda web:

```bash
nano ~/.openclaw/openclawd/src/agents/tools/web-search.ts
```

Encuentra el array `SEARCH_PROVIDERS` cerca del inicio y agrega `duckduckgo`:

```typescript
const SEARCH_PROVIDERS = [&quot;brave&quot;, &quot;perplexity&quot;, &quot;grok&quot;, &quot;duckduckgo&quot;] as const;
```

## Paso 2: Agregar el Endpoint de DuckDuckGo

Agrega la constante del endpoint de busqueda HTML despues del endpoint de Brave:

```typescript
const BRAVE_SEARCH_ENDPOINT = &quot;https://api.search.brave.com/res/v1/web/search&quot;;
const DUCKDUCKGO_HTML_ENDPOINT = &quot;https://html.duckduckgo.com/html/&quot;;
```

## Paso 3: Agregar Definiciones de Tipo

Agrega el tipo de resultado de DuckDuckGo antes de la funcion de analisis:

```typescript
type DuckDuckGoSearchResult = {
  title: string;
  url: string;
  description: string;
  siteName?: string;
};
```

## Paso 4: Crear el Analizador HTML

Agrega esta funcion para analizar la respuesta HTML de DuckDuckGo:

```typescript
function parseDuckDuckGoHtml(html: string): DuckDuckGoSearchResult[] {
  const results: DuckDuckGoSearchResult[] = [];
  const linkRegex = /&lt;a[^&gt;]*class=&quot;result__a&quot;[^&gt;]*href=&quot;([^&quot;]*)&quot;[^&gt;]*&gt;([^&lt;]*)&lt;\/a&gt;/gi;
  const snippetRegex = /&lt;a[^&gt;]*class=&quot;result__snippet&quot;[^&gt;]*&gt;([^&lt;]*(?:&lt;[^&gt;]*&gt;[^&lt;]*)*)&lt;\/a&gt;/gi;

  const links: { url: string; title: string }[] = [];
  let match;

  // Extract links and titles
  while ((match = linkRegex.exec(html)) !== null) {
    let url = match[1] ?? &quot;&quot;;
    const title = (match[2] ?? &quot;&quot;).trim();

    // DuckDuckGo redirects through their own URL - extract the real URL
    if (url.includes(&quot;uddg=&quot;)) {
      try {
        const parsed = new URL(url, &quot;https://duckduckgo.com&quot;);
        const realUrl = parsed.searchParams.get(&quot;uddg&quot;);
        if (realUrl) {
          url = decodeURIComponent(realUrl);
        }
      } catch {
        // Keep original URL if parsing fails
      }
    }

    if (url &amp;&amp; title &amp;&amp; url.startsWith(&quot;http&quot;)) {
      links.push({ url, title });
    }
  }

  // Extract snippets
  const snippets: string[] = [];
  while ((match = snippetRegex.exec(html)) !== null) {
    const snippet = (match[1] ?? &quot;&quot;).replace(/&lt;[^&gt;]*&gt;/g, &quot;&quot;).trim();
    snippets.push(snippet);
  }

  // Combine links with snippets
  for (let i = 0; i &lt; links.length; i++) {
    const link = links[i];
    if (!link) {
      continue;
    }
    results.push({
      title: link.title,
      url: link.url,
      description: snippets[i] ?? &quot;&quot;,
      siteName: resolveSiteName(link.url),
    });
  }

  return results;
}
```

## Paso 5: Crear la Funcion de Busqueda

Agrega una funcion que realice la busqueda de DuckDuckGo usando curl:

```typescript
async function runDuckDuckGoSearch(params: {
  query: string;
  count: number;
  timeoutSeconds: number;
}): Promise&lt;DuckDuckGoSearchResult[]&gt; {
  const { execFileSync } = await import(&quot;child_process&quot;);

  const curlArgs = [
    &quot;-s&quot;,
    &quot;--max-time&quot;,
    String(params.timeoutSeconds),
    &quot;-X&quot;,
    &quot;POST&quot;,
    &quot;-H&quot;,
    &quot;Content-Type: application/x-www-form-urlencoded&quot;,
    &quot;-H&quot;,
    &quot;User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36&quot;,
    &quot;-H&quot;,
    &quot;Accept: text/html&quot;,
    &quot;-d&quot;,
    `q=${encodeURIComponent(params.query)}`,
    DUCKDUCKGO_HTML_ENDPOINT,
  ];

  try {
    const html = execFileSync(&quot;curl&quot;, curlArgs, {
      encoding: &quot;utf-8&quot;,
      maxBuffer: 2 * 1024 * 1024,
      timeout: params.timeoutSeconds * 1000,
    });

    const allResults = parseDuckDuckGoHtml(html);

    // Check if we got results or just the homepage (anti-bot detection)
    if (allResults.length === 0 &amp;&amp; html.includes(&quot;&lt;title&gt;&quot;) &amp;&amp; !html.includes(&quot;at DuckDuckGo&quot;)) {
      throw new Error(
        &quot;DuckDuckGo returned homepage instead of search results (possible anti-bot detection)&quot;
      );
    }

    return allResults.slice(0, params.count);
  } catch (err) {
    const message = err instanceof Error ? err.message : String(err);
    throw new Error(`DuckDuckGo search failed: ${message}`, { cause: err });
  }
}
```

## Paso 6: Actualizar Resolucion de Proveedor

Encuentra la funcion `resolveSearchProvider` y agrega soporte para DuckDuckGo:

```typescript
function resolveSearchProvider(search?: WebSearchConfig): (typeof SEARCH_PROVIDERS)[number] {
  const raw =
    search &amp;&amp; &quot;provider&quot; in search &amp;&amp; typeof search.provider === &quot;string&quot;
      ? search.provider.trim().toLowerCase()
      : &quot;&quot;;
  if (raw === &quot;perplexity&quot;) {
    return &quot;perplexity&quot;;
  }
  if (raw === &quot;grok&quot;) {
    return &quot;grok&quot;;
  }
  if (raw === &quot;duckduckgo&quot; || raw === &quot;ddg&quot;) {
    return &quot;duckduckgo&quot;;
  }
  if (raw === &quot;brave&quot;) {
    return &quot;brave&quot;;
  }
  return &quot;brave&quot;; // Default
}
```

## Paso 7: Agregar DuckDuckGo a la Funcion Principal de Busqueda

En la funcion `runWebSearch`, agrega un caso para DuckDuckGo antes del fallback de Brave:

```typescript
async function runWebSearch(params: {
  // ... existing params
}): Promise&lt;Record&lt;string, unknown&gt;&gt; {
  // ... existing cache logic

  const start = Date.now();

  // ... existing Perplexity code...

  if (params.provider === &quot;duckduckgo&quot;) {
    const ddgResults = await runDuckDuckGoSearch({
      query: params.query,
      count: params.count,
      timeoutSeconds: params.timeoutSeconds,
    });
    const payload = {
      query: params.query,
      provider: params.provider,
      count: ddgResults.length,
      tookMs: Date.now() - start,
      results: ddgResults,
    };
    writeCache(SEARCH_CACHE, cacheKey, payload, params.cacheTtlMs);
    return payload;
  }

  // ... existing Brave code...
}
```

## Paso 8: Actualizar Descripcion de Herramienta

Modifica la funcion `createWebSearchTool` para incluir DuckDuckGo en la descripcion:

```typescript
const description =
  provider === &quot;perplexity&quot;
    ? &quot;Search the web using Perplexity Sonar (direct or via OpenRouter). Returns AI-synthesized answers with citations from real-time web search.&quot;
    : provider === &quot;grok&quot;
      ? &quot;Search the web using xAI Grok. Returns AI-synthesized answers with citations from real-time web search.&quot;
      : provider === &quot;duckduckgo&quot;
        ? &quot;Search the web using DuckDuckGo. Free search without API key requirements. Returns titles, URLs, and snippets.&quot;
        : &quot;Search the web using Brave Search API. Supports region-specific and localized search via country and language parameters. Returns titles, URLs, and snippets for fast research.&quot;;
```

## Paso 9: Saltar Verificacion de Clave API para DuckDuckGo

En la funcion execute, modifica la verificacion de clave API:

```typescript
execute: async (_toolCallId, args) =&gt; {
  // ... existing code...

  if (!apiKey &amp;&amp; provider !== &quot;duckduckgo&quot;) {
    return jsonResult(missingSearchKeyPayload(provider));
  }

  // ... rest of the code...
}
```

## Paso 10: Configurar OpenClaw

Edita tu configuracion de OpenClaw:

```bash
nano ~/.openclaw/config.json
```

Establece DuckDuckGo como tu proveedor de busqueda:

```json
{
  &quot;tools&quot;: {
    &quot;web&quot;: {
      &quot;search&quot;: {
        &quot;provider&quot;: &quot;duckduckgo&quot;
      }
    }
  }
}
```

O usa el CLI:

```bash
openclaw configure --section web
```

## Paso 11: Recompilar y Reiniciar

Despues de hacer todos los cambios de codigo, recompila OpenClaw:

```bash
cd ~/.openclaw/openclawd
npm run build
```

Reinicia el gateway:

```bash
openclaw gateway restart
```

## Probando Tu Configuracion

Envia una consulta de busqueda a OpenClaw a traves de tu canal de mensajeria:

&gt; &quot;Busca el ultimo release de Node.js&quot;

Deberias ver resultados de DuckDuckGo sin ninguna configuracion de clave API.

## Alternativa: Usar Parche de la Comunidad

Si no quieres modificar el codigo manualmente, hay un fork de la comunidad con DuckDuckGo ya implementado:

```bash
git clone https://github.com/jokelord/openclaw-local-model-tool-calling-patch.git
cd openclaw-local-model-tool-calling-patch
```

La implementacion de DuckDuckGo esta en `openclawd-2026.2.3/src/agents/tools/web-search.ts`.

&lt;Button text=&quot;Ver Parche de la Comunidad&quot; link=&quot;https://github.com/jokelord/openclaw-local-model-tool-calling-patch&quot; variant=&quot;solid&quot; color=&quot;purple&quot; size=&quot;md&quot; icon=&quot;arrow-right&quot; /&gt;

## Limitaciones a Conocer

&lt;Notice type=&quot;warning&quot; title=&quot;Limitaciones de DuckDuckGo&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;**Sin filtros de actualidad**: A diferencia de Brave, no puedes filtrar por ultimo dia/semana/mes&lt;/li&gt;
&lt;li&gt;**Deteccion anti-bot**: Uso pesado puede activar bloqueos&lt;/li&gt;
&lt;li&gt;**Analisis HTML**: Podria romperse si DuckDuckGo cambia la estructura de su pagina&lt;/li&gt;
&lt;li&gt;**Sin filtros de pais/idioma**: Menos control granular que la API de Brave&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

Para uso en produccion o cargas pesadas de busqueda, considera usar Brave Search con una clave API en su lugar. El nivel gratuito es generoso suficiente para uso personal de OpenClaw.

## Comparando Proveedores de Busqueda

&lt;Tabs&gt;
&lt;Tab name=&quot;Brave Search&quot;&gt;

**Pros:**
- API oficial con estabilidad garantizada
- Filtros de actualidad (ultimo dia, semana, mes, ano)
- Segmentacion por pais e idioma
- Limites de tasa mas altos en planes pagos

**Contras:**
- Requiere registro de clave API
- El nivel gratuito tiene limites
- Planes pagos para uso pesado

**Mejor para:** Uso en produccion, equipos, necesidades de busqueda intensiva
&lt;/Tab&gt;

&lt;Tab name=&quot;DuckDuckGo&quot;&gt;

**Pros:**
- No requiere clave API
- Gratis para siempre
- Enfocado en privacidad
- Configuracion facil (una vez modificado el codigo)

**Contras:**
- El scraping HTML puede romperse
- Riesgo de deteccion anti-bot
- Sin filtros de actualidad
- Menos confiable para uso pesado

**Mejor para:** Uso personal, pruebas, entusiastas de la privacidad
&lt;/Tab&gt;

&lt;Tab name=&quot;Perplexity&quot;&gt;

**Pros:**
- Respuestas sintetizadas por IA
- Citas integradas
- Acceso web en tiempo real
- Respuestas directas, no solo enlaces

**Contras:**
- Requiere clave API (mas costoso)
- Formato de salida diferente
- Puede ser excesivo para busquedas simples

**Mejor para:** Tareas de investigacion, respuestas completas
&lt;/Tab&gt;
&lt;/Tabs&gt;

## Solucion de Problemas

### &quot;DuckDuckGo devolvio la pagina principal en lugar de resultados de busqueda&quot;

Esto significa que la deteccion anti-bot se activo. Intenta:

1. Reducir la frecuencia de busqueda
2. Agregar retrasos entre busquedas
3. Considerar rotar user agents

### &quot;curl: command not found&quot;

Instala curl:

```bash
apt install curl -y  # Ubuntu/Debian
```

### Los Resultados Estan Vacios

Revisa la estructura HTML - DuckDuckGo puede haber cambiado el diseno de su pagina. El analizador busca:
- Enlaces con clase `result__a`
- Snippets con clase `result__snippet`

### Errores de Compilacion TypeScript

Asegurate de haber agregado todas las definiciones de tipo e importado `execFileSync` correctamente:

```typescript
const { execFileSync } = await import(&quot;child_process&quot;);
```

&lt;Accordion label=&quot;Preguntas Frecuentes&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

**Por que usar curl en lugar de fetch?**

El endpoint HTML de DuckDuckGo funciona mejor con los encabezados y comportamiento predeterminado de curl. El fetch de Node puede activar respuestas diferentes. Curl tambien es mas probable que este en cache y sea eficiente.

**Puedo usar tanto Brave como DuckDuckGo?**

Si! Cambia proveedores en tu configuracion en cualquier momento, o modifica el codigo para soportar proveedores de respaldo.

**Es esto contra los Terminos de Servicio de DuckDuckGo?**

Esto usa su busqueda HTML publica, que es accesible para cualquiera. Para uso comercial pesado, considera su API oficial o usa Brave Search en su lugar.

**Como vuelvo a Brave?**

Solo cambia el proveedor en tu configuracion:

```json
{
  &quot;tools&quot;: {
    &quot;web&quot;: {
      &quot;search&quot;: {
        &quot;provider&quot;: &quot;brave&quot;,
        &quot;apiKey&quot;: &quot;YOUR_BRAVE_API_KEY&quot;
      }
    }
  }
}
```

**Funcionara con futuras versiones de OpenClaw?**

La implementacion puede necesitar actualizaciones si OpenClaw cambia su arquitectura de busqueda web. Vigila el repositorio oficial por cambios en `web-search.ts`.

&lt;/Accordion&gt;

Agregar DuckDuckGo a OpenClaw te da una opcion de busqueda gratuita y enfocada en privacidad sin gestion de claves API. Es perfecto para uso personal y pruebas. Para despliegues de produccion o equipos, Brave Search con su API oficial sigue siendo la opcion recomendada.

Para mas consejos de OpenClaw, ve nuestra [Guia de Configuracion de OpenClaw](/es/guia-configuracion-openclaw/) completa y [alternativas a OpenClaw](/es/alternativas-openclaw/).</content:encoded><category>ai</category><category>ai-tools</category><category>self-hosted</category><category>openclaw</category></item><item><title>Los Mejores Modelos Open Source para OpenClaw</title><link>https://www.bitdoze.com/es/mejores-modelos-opensource-openclaw/</link><guid isPermaLink="true">https://www.bitdoze.com/es/mejores-modelos-opensource-openclaw/</guid><description>GLM-5 y MiniMax M2.5 son los mejores modelos open source para ejecutar OpenClaw. Esta guia cubre la configuracion, precios, riesgos de usar suscripciones de Claude Code o Gemini CLI, y por que estos dos modelos superan al resto.</description><pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate><content:encoded>He estado ejecutando [OpenClaw](/es/guia-configuracion-openclaw/) por un tiempo y he probado varios modelos diferentes con el. Despues de cambiar entre proveedores y observar mis facturas de API, dos modelos destacaron: **GLM-5** y **MiniMax M2.5**.

A continuacion explicare por que elegi estos dos, como configurarlos, y por que enrutar tu suscripcion de Claude Code o Gemini CLI a traves de OpenClaw es una mala idea.

&lt;Notice type=&quot;warning&quot; title=&quot;Advertencia de Riesgo de Suscripcion&quot;&gt;

Usar los tokens OAuth de tu suscripcion de Claude Code, Gemini CLI, o ChatGPT/Codex con OpenClaw puede hacer que tu cuenta sea baneada. Anthropic, Google y OpenAI monitorean patrones de uso automatizado que caen fuera del uso normal del CLI. Usa claves API en su lugar.

&lt;/Notice&gt;

## Por Que los Modelos Open Source Tienen Sentido para OpenClaw

OpenClaw funciona 24/7 en tu servidor. Maneja mensajes, ejecuta trabajos programados y ejecuta skills sin parar. Ese tipo de uso continuo se vuelve costoso con modelos propietarios.

Los modelos open source a traves de proveedores de API te dan:

&lt;ListCheck&gt;

- **Costos predecibles**: Pagas por token, sin sorpresas por exceso de suscripcion
- **Sin riesgo de baneo**: El acceso API esta disenado para uso automatizado
- **Flexibilidad de modelo**: Cambia modelos en cualquier momento a traves de cambios en la configuracion
- **Mejores limites de tasa**: Los niveles de API generalmente ofrecen mayor rendimiento que OAuth de suscripcion

&lt;/ListCheck&gt;

Si eres nuevo en OpenClaw, nuestra [guia de configuracion](/es/guia-configuracion-openclaw/) recorre el proceso completo de instalacion. Para una mirada mas amplia a las alternativas, consulta nuestro resumen de [alternativas a OpenClaw](/es/alternativas-openclaw/).

## Los Riesgos de Usar Suscripciones de Claude Code o Gemini CLI

Dejame decir esto primero porque veo gente preguntando sobre esto constantemente.

OpenClaw soporta tokens OAuth de Claude Code, Gemini CLI y OpenAI Codex. Esto significa que tecnicamente puedes usar tu suscripcion de Claude Pro de $20/mes o tu suscripcion de Google AI para alimentar OpenClaw en lugar de pagar por creditos de API. Funciona. Pero estas jugando con fuego.

### Por que puedes ser baneado

Anthropic, Google y OpenAI tienen terminos de servicio que restringen como se pueden usar sus tokens de suscripcion. Cuando enrutas un token OAuth de Claude Code a traves de OpenClaw, esto es lo que sucede:

&lt;ListCheck&gt;

- **Los patrones de uso cambian**: El uso normal de Claude Code parece un desarrollador escribiendo en una terminal. OpenClaw envia solicitudes automatizadas las 24 horas, a menudo en rafagas cuando se ejecutan trabajos programados
- **El volumen de tokens aumenta**: Un asistente siempre activo consume mas tokens que una sesion de codificacion humana
- **Abuso de limite de tasa**: OpenClaw puede reintentar solicitudes fallidas o enviar llamadas paralelas que parecen scraping
- **IP y huella digital**: Las solicitudes desde un centro de datos VPS se ven diferentes de una laptop en internet residencial

&lt;/ListCheck&gt;

### Que sucede cuando eres baneado

| Plataforma | Consecuencia | Recuperacion |
|----------|-------------|----------|
| **Claude Code** | Cuenta suspendida, suscripcion cancelada | Existe proceso de apelacion pero sin garantia |
| **Gemini CLI** | Cuenta de Google marcada, acceso API revocado | Podria afectar otros servicios de Google |
| **OpenAI Codex** | Cuenta baneada, suscripcion terminada | Opciones de apelacion limitadas |

&lt;Notice type=&quot;error&quot; title=&quot;Riesgo Real&quot;&gt;

Personas han tenido sus cuentas suspendidas dias despues de enrutar tokens de suscripcion a traves de herramientas automatizadas. La deteccion esta mejorando, no empeorando. Tu suscripcion Claude Max no vale la pena perderla por $15 ahorrados en costos de API.

&lt;/Notice&gt;

### Que hacer en su lugar

Usa claves API. Eso es todo. Cada proveedor ofrece acceso API de pago por uso que esta disenado para uso automatizado:

- **Anthropic API**: [console.anthropic.com](https://console.anthropic.com/) — obtén una clave API, paga por token
- **Google AI**: [aistudio.google.com](https://aistudio.google.com/) — API de Gemini con generoso nivel gratuito
- **OpenAI API**: [platform.openai.com](https://platform.openai.com/) — acceso API estandar

O mejor aun, usa modelos open source donde esto ni siquiera es una preocupacion. Lo que nos lleva a las recomendaciones reales.

## 1. GLM-5: El que uso para trabajo serio

[GLM-5](https://www.bitdoze.com/best-open-source-llms-claude-alternative/) de Z.AI es el modelo open source mas fuerte que he probado. Razona bien, casi no alucina, y puede manejar tareas de agente de multiples pasos sin desmoronarse a mitad de camino.

### Por que GLM-5 funciona para OpenClaw

OpenClaw no es solo un chatbot. Planifica tareas, llama herramientas, ejecuta scripts y mantiene contexto a traves de conversaciones largas. GLM-5 maneja ese tipo de trabajo de manera confiable.

&lt;ListCheck&gt;

- **95.8% SWE-bench Verified**: La puntuacion de codificacion mas alta entre modelos open source, lo cual importa cuando OpenClaw ejecuta codigo en tu servidor
- **Alucinaciones casi nulas**: Puntuacion de -1 en AA-Omniscience Index. Cuando tu asistente ejecuta comandos en un servidor en vivo, quieres que este en lo correcto
- **Manejo de tareas agenticas**: ELO 1,412 en GDPval-AA — solo Claude Opus 4.6 y GPT-5.2 puntuan mas alto
- **Ventana de contexto de 200K**: Suficiente para el historial de conversacion de OpenClaw mas las salidas de herramientas
- **Licencia MIT**: Sin restricciones de uso, totalmente compatible con flujos de trabajo automatizados

&lt;/ListCheck&gt;

### Especificaciones tecnicas

| Feature               | GLM-5                            |
| --------------------- | -------------------------------- |
| **Total Parameters**  | 744B (MoE)                       |
| **Active Parameters** | 40B                              |
| **Context Length**     | 200K tokens                      |
| **Architecture**       | MoE with Sparse Attention        |
| **Input Cost**         | $0.80/M tokens                   |
| **Output Cost**        | $2.56/M tokens                   |
| **License**            | MIT                              |

&lt;Button
  text=&quot;GLM-5 Coding Plans&quot;
  link=&quot;https://z.ai/subscribe?ic=NKNUNYDRZT&quot;
  size=&quot;lg&quot;
  color=&quot;blue&quot;
  variant=&quot;solid&quot;
/&gt;

### Configurando GLM-5 con OpenClaw

Edita tu configuracion de OpenClaw para usar GLM-5:

```bash
openclaw configure --section models
```

O edita el archivo de configuracion directamente:

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: {
        &quot;primary&quot;: &quot;z-ai/glm-5&quot;,
        &quot;fallback&quot;: [&quot;minimax/m2.5-lightning&quot;]
      }
    }
  }
}
```

Luego reinicia el gateway:

```bash
openclaw gateway restart
```

GLM-5 esta disponible a traves de OpenRouter y directamente a traves de la API de Z.AI. Para OpenClaw, recomiendo usar los planes de codificacion de Z.AI ya que tienen precios para cargas de trabajo de desarrolladores.

&lt;Notice type=&quot;info&quot; title=&quot;GLM Coding Plans&quot;&gt;

Z.AI ofrece [GLM Coding Plans](https://z.ai/subscribe?ic=NKNUNYDRZT) con precios disenados para desarrolladores que ejecutan cargas de trabajo continuas como OpenClaw.

&lt;/Notice&gt;

### Donde brilla GLM-5 en OpenClaw

- **Tareas programadas**: Resumenes matutinos, monitoreo de servidores, trabajos cron que necesitan funcionar realmente
- **Skills de codificacion**: Cuando le dices a OpenClaw que ejecute scripts o administre contenedores Docker, la precision de codificacion de GLM-5 importa
- **Tareas de investigacion**: Se combina bien con la [integracion de busqueda DuckDuckGo](/es/busqueda-duckduckgo-openclaw/) para obtener y resumir resultados web
- **Flujos de trabajo de multiples pasos**: Skills complejos que encadenan multiples llamadas de herramientas
- **Conversaciones largas**: Mantiene el contexto a traves de sesiones extendidas sin perder el hilo

## 2. MiniMax M2.5: El economico que es sorprendentemente bueno

[MiniMax M2.5](https://www.bitdoze.com/best-open-source-llms-claude-alternative/) cuesta una fraccion de GLM-5 y aun asi puntua 80.2% en SWE-bench Verified. Para un asistente siempre activo, esa diferencia de precio importa mucho durante un mes.

### Por que MiniMax M2.5 funciona para OpenClaw

La mayoria de las interacciones de OpenClaw no necesitan el mejor modelo absoluto. Preguntas rapidas, recordatorios, gestion de archivos, investigacion simple. Un modelo mas economico maneja esto bien. MiniMax M2.5 es tan economico que olvidas que esta costando algo.

&lt;ListCheck&gt;

- **80.2% SWE-bench Verified**: Supera a Claude Opus 4.6 en Droid scaffold, mas que suficiente para tareas de OpenClaw
- **$0.15/M tokens de entrada**: El modelo fronterizo mas economico disponible. Ejecutar OpenClaw por un mes podria costar unos pocos dolares
- **Dos niveles de velocidad**: M2.5 a 50 tokens/segundo y Lightning a 100 tokens/segundo
- **Mas de 10 lenguajes de programacion**: Go, C, C++, TypeScript, Rust, Python, Java y mas
- **Soporte de framework de agentes**: Funciona con Claude Code, Droid, Cline y herramientas de agente similares

&lt;/ListCheck&gt;

### Especificaciones tecnicas

| Feature                  | MiniMax M2.5                          |
| ------------------------ | ------------------------------------- |
| **Architecture**         | Mixture-of-Experts (MoE)              |
| **Context Length**        | 200K tokens                           |
| **M2.5 Input Cost**      | $0.15/M tokens (50 TPS)              |
| **M2.5 Output Cost**     | $1.20/M tokens (50 TPS)              |
| **Lightning Input Cost**  | $0.30/M tokens (100 TPS)             |
| **Lightning Output Cost** | $2.40/M tokens (100 TPS)             |

&lt;Button
  text=&quot;MiniMax Coding Plans (10% Off)&quot;
  link=&quot;https://go.bitdoze.com/minimax&quot;
  size=&quot;lg&quot;
  color=&quot;purple&quot;
  variant=&quot;solid&quot;
/&gt;

### Configurando MiniMax M2.5 con OpenClaw

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: {
        &quot;primary&quot;: &quot;minimax/m2.5&quot;,
        &quot;fallback&quot;: [&quot;minimax/m2.5-lightning&quot;]
      }
    }
  }
}
```

Para respuestas mas rapidas (bueno para chat interactivo), usa la variante Lightning:

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: {
        &quot;primary&quot;: &quot;minimax/m2.5-lightning&quot;
      }
    }
  }
}
```

&lt;Notice type=&quot;success&quot; title=&quot;Desglose de Costos&quot;&gt;

Ejecutar MiniMax M2.5 a 50 TPS continuamente por una hora cuesta aproximadamente $0.30. Eso significa ejecutar OpenClaw 24/7 por un mes completo en MiniMax M2.5 costaria aproximadamente $7-15 dependiendo del uso real. Compara eso con $50-150/mes con Claude API.

&lt;/Notice&gt;

### Donde brilla MiniMax M2.5 en OpenClaw

- **Chat siempre activo**: Lo suficientemente economico que no lo piensas dos veces antes de enviar mensajes
- **Tareas rapidas**: Recordatorios, gestion de archivos, busquedas simples
- **Asistencia de codificacion**: 80.2% SWE-bench significa que maneja la mayoria de skills de codificacion de manera confiable
- **Trabajos programados**: Resumenes matutinos, verificaciones de servidor, tareas cron
- **Modelo de respaldo**: Funciona bien como modelo secundario cuando tu primario alcanza limites de tasa

## GLM-5 vs MiniMax M2.5: cara a cara

Asi es como se comparan para uso con OpenClaw:

| Feature | GLM-5 | MiniMax M2.5 |
|---------|-------|--------------|
| **SWE-bench Verified** | 95.8% | 80.2% |
| **Input Cost** | $0.80/M tokens | $0.15/M tokens |
| **Output Cost** | $2.56/M tokens | $1.20/M tokens |
| **Context Length** | 200K | 200K |
| **Hallucination Rate** | Near-zero | Low |
| **Speed** | Standard | 50-100 TPS |
| **Best For** | Complex tasks, coding, research | Always-on chat, budget usage |
| **Monthly Cost (estimated)** | $30-60 | $7-15 |

### Lo que yo realmente ejecuto

Usa ambos. Configura GLM-5 como primario y MiniMax M2.5-Lightning como respaldo:

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: {
        &quot;primary&quot;: &quot;z-ai/glm-5&quot;,
        &quot;fallback&quot;: [&quot;minimax/m2.5-lightning&quot;]
      }
    }
  }
}
```

GLM-5 hace lo dificil, MiniMax atrapa cualquier cosa que falle o alcance limite de tasa. Para skills mas simples y tareas programadas, tambien puedes apuntar agentes especificos a MiniMax directamente para ahorrar dinero.

## Configurando busqueda DuckDuckGo con tus modelos

Tanto GLM-5 como MiniMax M2.5 funcionan con la busqueda web de OpenClaw. Si aun no lo has configurado, nuestra [guia de busqueda DuckDuckGo OpenClaw](/es/busqueda-duckduckgo-openclaw/) te guia.

La busqueda web importa mas de lo que pensarias para un asistente siempre activo. Sin ella, OpenClaw esta limitado a lo que el modelo aprendio durante el entrenamiento. Con ella, OpenClaw puede obtener informacion actualizada al responder preguntas o ejecutar tareas de investigacion.

## Comparacion de costos: open source vs suscripciones

Esto es lo que realmente gastarias por mes ejecutando OpenClaw con diferentes enfoques:

| Enfoque | Costo Mensual | Riesgo de Baneo | Notas |
|----------|-------------|----------|-------|
| **Claude Code OAuth** | $20-200 (suscripcion) | Alto | Violacion de terminos, riesgo de suspension de cuenta |
| **Gemini CLI OAuth** | $0-20 (suscripcion) | Alto | Podria afectar tu cuenta de Google |
| **Claude API (Sonnet 4.5)** | $50-150 | Ninguno | Costoso para uso 24/7 |
| **GLM-5 API** | $30-60 | Ninguno | Mejor rendimiento, costo razonable |
| **MiniMax M2.5 API** | $7-15 | Ninguno | Mejor valor, fuerte rendimiento |
| **GLM-5 + M2.5 combo** | $20-40 | Ninguno | Lo que yo ejecuto |

La ruta API cuesta menos que una suscripcion de Claude y no arriesgas perder tu cuenta. Para la mayoria de configuraciones de OpenClaw, la combinacion de GLM-5 y MiniMax M2.5 es la opcion obvia.

## Consejos de ejecutar esta configuracion

Algunas cosas que aprendi por las malas:

### Ajuste de prompts

GLM-5 y MiniMax M2.5 responden diferente al mismo prompt. GLM-5 funciona mejor con instrucciones claras y estructuradas. MiniMax M2.5 maneja solicitudes casuales bien pero necesita instrucciones de formato explicitas cuando quieres salida estructurada.

Edita tu `~/.openclaw/workspace/SOUL.md` para incluir guia especifica del modelo:

```markdown
When executing tasks:
- Break complex requests into clear steps
- Confirm before running destructive commands
- Use structured output for research results
```

### Gestion de contexto

Ambos modelos soportan 200K tokens, pero conversaciones mas cortas dan mejores resultados. Usa `/compact` cuando las cosas se vuelvan largas, o `/new` para empezar de nuevo.

### Monitoreo de costos

Observa tu uso de API durante la primera semana. Los trabajos programados y tareas en segundo plano de OpenClaw consumen mas tokens de lo que imaginas. Revisa tus dashboards de proveedor:

- **Z.AI**: [z.ai/dashboard](https://z.ai/dashboard)
- **MiniMax**: [platform.minimax.io](https://platform.minimax.io)

### Configuracion de respaldo

Siempre configura un modelo de respaldo. Los proveedores de API se caen. Si GLM-5 no esta disponible a las 3 AM y tienes un resumen matutino programado, MiniMax recoge la carga.

&lt;Accordion label=&quot;Preguntas Frecuentes&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

**Puedo usar tanto GLM-5 como MiniMax M2.5 al mismo tiempo?**

Si. Configura uno como primario y el otro como respaldo en tu configuracion de OpenClaw. Tambien puedes configurar diferentes modelos para diferentes agentes o skills.

**Usar mi suscripcion de Claude con OpenClaw definitivamente me baneara?**

No garantizado, pero el riesgo es real y creciente. Anthropic monitorea activamente el uso automatizado a traves de tokens OAuth. Varios usuarios han reportado suspensiones de cuenta. No vale la pena el riesgo cuando el acceso API esta disponible.

**Cuanto cuesta ejecutar OpenClaw con MiniMax M2.5 por un mes?**

Depende del uso, pero la mayoria de la gente gasta $7-15/mes. Usuarios intensivos con muchas tareas programadas y conversaciones largas podrian llegar a $20-25. Todavia mucho mas economico que Claude API.

**Puedo cambiar modelos sin reiniciar OpenClaw?**

Si. Usa el comando `/model` en tu chat para cambiar modelos al vuelo. Para cambios permanentes, edita la configuracion y ejecuta `openclaw gateway restart`.

**Estos modelos soportan busqueda DuckDuckGo en OpenClaw?**

Si. Tanto GLM-5 como MiniMax M2.5 funcionan con la [integracion de busqueda DuckDuckGo](/es/busqueda-duckduckgo-openclaw/) de OpenClaw. La herramienta de busqueda proporciona resultados web que el modelo puede usar para responder preguntas con informacion actualizada.

**Que pasa con usar modelos locales con Ollama?**

Los modelos locales son una opcion si tienes el hardware. Consulta nuestra [guia de configuracion de OpenClaw](/es/guia-configuracion-openclaw/) para configuracion de Ollama. Pero para la mayoria de configuraciones VPS, modelos basados en API como GLM-5 y MiniMax M2.5 funcionan mejor que lo que puedes ejecutar localmente.

&lt;/Accordion&gt;

En este punto, no hay buena razon para arriesgar tu suscripcion de Claude o Gemini en una herramienta automatizada. GLM-5 maneja lo complejo, MiniMax M2.5 mantiene la factura baja para uso cotidiano. Configuralos, configura tus respaldos, y deja de preocuparte por correos de baneo.

Para el desglose completo de modelos incluyendo Kimi K2.5, Qwen-Max y Devstral 2, consulta nuestra guia de [mejores LLMs open source para codificacion](https://www.bitdoze.com/best-open-source-llms-claude-alternative/). Y si todavia estas decidiendo entre plataformas de asistentes de IA, nuestro articulo de [alternativas a OpenClaw](/es/alternativas-openclaw/) cubre las otras opciones.</content:encoded><category>ai</category><category>ai-tools</category><category>openclaw</category><category>llm</category></item><item><title>Las Mejores Alternativas a Portainer en 2026</title><link>https://www.bitdoze.com/es/alternativas-portainer/</link><guid isPermaLink="true">https://www.bitdoze.com/es/alternativas-portainer/</guid><description>Cinco UIs de gestion de Docker que pueden reemplazar a Portainer en 2026. Mirada practica a Arcane, Dockhand, UsulNet, Dockge y Komodo con comparaciones de features y capturas de UI.</description><pubDate>Fri, 13 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import { Picture } from &quot;astro:assets&quot;;
import arcaneUi from &quot;@assets/images/26/02/arcane-ui.webp&quot;;
import dockhandUi from &quot;@assets/images/26/02/dockerhand-ui.webp&quot;;
import usulnetDashboard from &quot;@assets/images/26/02/usulnet-dashboard.png&quot;;
import dockgeUi from &quot;@assets/images/24/01/dockge-main.png&quot;;
import komodoUi from &quot;@assets/images/26/02/komodo-ui.png&quot;;

Portainer ha sido la GUI de Docker por excelencia durante anos. Cumplia con el trabajo, pero los cambios de licencia con el tiempo empujaron features utiles detras de niveles pagos. OIDC/SSO, RBAC y otras cosas que solian ser gratis ahora requieren una licencia de negocios. Ese cambio hizo que mucha gente buscara alternativas, incluyendome a mí.

Ejecuto Docker en multiples servidores, tanto VPS como homelab. Durante los ultimos meses, probe cinco herramientas que funcionan como reemplazos de Portainer. Instale todas estas, las ejecute por semanas, y tengo guias de instalacion individuales para cuatro de ellas.

## Comparacion rapida

| | Arcane | Dockhand | UsulNet | Dockge | Komodo |
|---|---|---|---|---|---|
| Licencia | BSD-3-Clause | BSL 1.1 | AGPL-3.0 | MIT | GPL-3.0 |
| Backend | Go | Bun + SvelteKit | Go | Node.js | Rust |
| Escaneo vuln | No | Grype/Trivy | Trivy | No | No |
| Multi-nodo | Si | Si (Hawser) | Si (NATS) | Si (agents) | Si (Periphery) |
| OIDC/SSO | Gratis | Gratis | Nivel Business | No | OAuth (GitHub/Google) |
| GitOps | Integrado | Webhooks | Auto-deploy on push | No | Auto-deploy on push |
| Auto-actualizaciones | No | Si + rollback | No | No | Si |
| RBAC | No | Enterprise | 44+ permisos | No | Granular |
| API | REST | REST | REST + WebSocket | No | REST + WebSocket |
| Precios | Gratis | Gratis / $499 SMB | Gratis CE / EUR79 Biz | Gratis | Gratis |

## 1. Arcane

[Arcane](/es/instalar-arcane/) esta escrito en Go y se ejecuta como un unico contenedor. Es la herramienta que alcanzo primero cuando configuro un nuevo servidor porque es rapida, tiene una huella de memoria pequena, y la integracion GitOps funciona sin dependencias externas.

&lt;Picture
  src={arcaneUi}
  alt=&quot;UI de Arcane Docker Manager mostrando lista de contenedores y editor compose&quot;
/&gt;

Arcane ha estado desde 2022 con mas de 4,400 estrellas en GitHub, 35 contribuidores y mas de 1,800 commits. Cuando algo se rompe a las 2am, ese conteo de contribuidores importa.

Lo que me gusta de el:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;GitOps que realmente funciona. Apuntalo a un repo, pushea cambios, los stacks se redespliegan automaticamente&lt;/li&gt;
&lt;li&gt;API REST contra la que puedes hacer scripts, mas una herramienta CLI para gestion basada en terminal&lt;/li&gt;
&lt;li&gt;Soporte OIDC/SSO incluido gratis&lt;/li&gt;
&lt;li&gt;Gestion de hosts remotos via el agente arcane-headless&lt;/li&gt;
&lt;li&gt;Licencia BSD-3-Clause. Sin niveles pagos, sin bloqueos de features&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

Lo que le falta: escaneo de vulnerabilidades y auto-actualizaciones programadas con rollback. Si eso importa, Dockhand llena ese hueco.

Para una comparacion entre estos dos, revisa mi articulo [Arcane vs Dockhand](/es/arcane-vs-dockhand/). Y para un recorrido completo de configuracion, aqui esta la [guia de instalacion de Arcane](/es/instalar-arcane/).

## 2. Dockhand

[Dockhand](/es/instalar-dockhand/) tiene mejores herramientas de seguridad que cualquier otra en esta lista, y es gratis. Lanzo su primer release en Diciembre 2025 y ha estado sacando actualizaciones a un ritmo inusual desde entonces.

&lt;Picture
  src={dockhandUi}
  alt=&quot;UI de Dockhand Docker Manager mostrando dashboard de contenedores con escaneo de seguridad&quot;
/&gt;

La mejor parte es la proteccion safe-pull. Cuando Dockhand auto-actualiza un contenedor, descarga la nueva imagen, la escanea por vulnerabilidades usando Grype o Trivy, y solo la intercambia si el escaneo pasa. Si la nueva imagen tiene problemas, tu contenedor en ejecucion permanece intacto. Esto me atrapo dos actualizaciones malas en tres semanas de pruebas.

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Escaneo de vulnerabilidades integrado en la UI, nivel gratuito&lt;/li&gt;
&lt;li&gt;Auto-actualizaciones programadas con rollback automatico en fallo&lt;/li&gt;
&lt;li&gt;OIDC/SSO incluido en el nivel gratuito (Portainer cobra por esto)&lt;/li&gt;
&lt;li&gt;Navegador de archivos de contenedor y terminal web&lt;/li&gt;
&lt;li&gt;Agente Hawser para hosts remotos con traversia NAT&lt;/li&gt;
&lt;li&gt;Zero telemetria&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

La licencia BSL 1.1 significa que puedes usarlo libremente para propositos personales y de negocios internos. No puedes revenderlo como servicio hosteado.

Dockhand es mas nuevo que Arcane, con menos commits y contribuidores. Esta pulido para ser un v1, pero habra casos extremos que aun no ha encontrado. Recorrido completo de configuracion: [guia de instalacion de Dockhand](/es/instalar-dockhand/).

## 3. UsulNet

[UsulNet](/es/instalar-usulnet/) intenta ser todo el stack de gestion en un binario. Gestion de contenedores, escaneo de seguridad, configuracion de proxy inverso, backups, monitoreo, orquestacion multi-nodo. Es ambicioso para un proyecto que recien lanzo su primer beta publica en Febrero 2026.

&lt;Picture
  src={usulnetDashboard}
  alt=&quot;Dashboard de UsulNet mostrando estado de contenedores, utilizacion de recursos y puntaje de seguridad&quot;
/&gt;

La lista de features es larga:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Escaneo Trivy con puntajes de seguridad por contenedor (0-100) y generacion de SBOM&lt;/li&gt;
&lt;li&gt;RBAC con mas de 44 permisos granulares y roles personalizados&lt;/li&gt;
&lt;li&gt;Backups programados a S3, Azure Blob, GCS, Backblaze B2, SFTP&lt;/li&gt;
&lt;li&gt;Integracion Caddy y Nginx Proxy Manager para proxy inverso&lt;/li&gt;
&lt;li&gt;Multi-nodo con mensajeria NATS y mTLS&lt;/li&gt;
&lt;li&gt;Editor de codigo Monaco y Neovim ejecutandose en el navegador&lt;/li&gt;
&lt;li&gt;Navegador de bases de datos para PostgreSQL, MySQL, MongoDB, Redis, SQLite&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

La compensacion es madurez. Un desarrollador, once commits, primer release. El stack de cuatro contenedores (PostgreSQL, Redis, NATS, mas la app) es mas pesado que el enfoque de contenedor unico de Arcane o Dockhand. En un VPS pequeno con 2 GB RAM, esa sobrecarga es notable.

La Community Edition de UsulNet esta limitada a 2 nodos y 3 usuarios. OIDC y LDAP requieren la licencia Business (EUR79/nodo/ano). Recorrido completo de configuracion: [guia de instalacion de UsulNet](/es/instalar-usulnet/).

## 4. Dockge

[Dockge](/es/instalar-dockge/) viene de Louis Lam, el mismo desarrollador detras de Uptime Kuma. Toma un enfoque fundamentalmente diferente de todo lo demas en esta lista. Dockge no esta intentando reemplazar a Portainer feature por feature. Es un gestor de archivos compose con una UI limpia.

&lt;Picture
  src={dockgeUi}
  alt=&quot;UI de Dockge mostrando gestion de stacks compose&quot;
/&gt;

Si todo lo que necesitas es una forma visual de gestionar stacks de docker-compose, desplegar nuevos, ver logs y usar una terminal web, Dockge hace eso bien sin la complejidad de las otras opciones. Almacena tus archivos compose en disco en formato estandar, asi que todavia puedes gestionarlos con comandos normales de Docker Compose. Nada queda bloqueado dentro de una base de datos propietaria.

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;UI limpia de pagina unica para gestion compose&lt;/li&gt;
&lt;li&gt;Editor compose interactivo con seguimiento de progreso en tiempo real&lt;/li&gt;
&lt;li&gt;Convierte comandos docker run a YAML compose&lt;/li&gt;
&lt;li&gt;Soporte multi-agente para gestionar stacks a traves de servidores&lt;/li&gt;
&lt;li&gt;Licencia MIT, totalmente open source&lt;/li&gt;
&lt;li&gt;Backend Node.js ligero&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

Dockge no tiene escaneo de vulnerabilidades, RBAC, OIDC o API REST. Y eso esta bien. No todo servidor necesita una plataforma de gestion con todas las funciones. A veces solo quieres ver tus stacks, reiniciar un contenedor y revisar los logs.

Con casi 15,000 estrellas en GitHub, Dockge tiene una de las comunidades mas grandes en este espacio. Recorrido completo de configuracion: [guia de instalacion de Dockge](/es/instalar-dockge/).

## 5. Komodo

[Komodo](https://github.com/moghtech/komodo) tiene la mayor ingenieria detras en esta lista. Escrito en Rust, tiene mas de 2,800 commits, mas de 10,200 estrellas en GitHub, y una arquitectura core/periphery disenada para gestionar Docker a traves de muchos servidores.

&lt;Picture
  src={komodoUi}
  alt=&quot;Dashboard de Komodo mostrando estado de servidores y resumen de despliegues&quot;
/&gt;

Komodo no es solo un gestor de contenedores, es un sistema de build y despliegue. Puedes construir imagenes Docker con versionado automatico desde repos Git, disparar builds en push, desplegar contenedores y stacks compose a traves de tus servidores, y gestionar variables de entorno y secretos con interpolacion compartida.

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Backend Rust con un agente Periphery en cada servidor&lt;/li&gt;
&lt;li&gt;Construye imagenes Docker desde repos Git con versionado automatico&lt;/li&gt;
&lt;li&gt;Despliega stacks compose desde UI o Git con auto-deploy en push&lt;/li&gt;
&lt;li&gt;Sistema de permisos granular para equipos multi-usuario&lt;/li&gt;
&lt;li&gt;API REST y WebSocket con librerias cliente Rust y npm&lt;/li&gt;
&lt;li&gt;OAuth sign-on con GitHub y Google&lt;/li&gt;
&lt;li&gt;Monitoreo de recursos de servidor con alertas de CPU, memoria y disco&lt;/li&gt;
&lt;li&gt;Licencia GPL-3.0, sin niveles pagos, sin limites en servidores&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

No hay limite en la cantidad de servidores que puedes conectar, y los desarrolladores han declarado que nunca lo habra. Sin edicion de negocios, sin gating de features. Todo es gratis.

Komodo usa MongoDB (o FerretDB con Postgres) como base de datos. El agente Periphery se ejecuta en cada servidor conectado y expone una API local que solo el Core puede llamar, con whitelist de direcciones por seguridad.

El proyecto tiene una comunidad Discord activa y un demo que puedes probar en [demo.komo.do](https://demo.komo.do). Si gestionas multiples servidores y necesitas pipelines de build junto con despliegue, Komodo encaja ese caso de uso mejor que cualquier otro aqui.

## Cual deberias elegir?

&lt;Accordion label=&quot;Quieres la opcion mas madura sin ataduras&quot; group=&quot;pick&quot; expanded=&quot;true&quot;&gt;

Ve con **Arcane**. Licencia BSD-3-Clause, desde 2022, comunidad activa, GitOps integrado. Hace gestion de contenedores bien y no intenta ser todo. [Instalar Arcane](/es/instalar-arcane/).

&lt;/Accordion&gt;

&lt;Accordion label=&quot;El escaneo de seguridad es un requisito&quot; group=&quot;pick&quot;&gt;

**Dockhand** es la opcion. Escaneo de vulnerabilidades con Grype/Trivy, proteccion safe-pull para auto-actualizaciones, OIDC gratis. La licencia BSL esta bien para self-hosting. [Instalar Dockhand](/es/instalar-dockhand/).

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Quieres todo en una herramienta&quot; group=&quot;pick&quot;&gt;

**UsulNet** agrupa la mayoria de features: escaneo, backups, proxy inverso, monitoreo, RBAC, multi-nodo. Es software beta de un desarrollador solo, asi que ajusta las expectativas. [Instalar UsulNet](/es/instalar-usulnet/).

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Solo necesitas una UI compose simple&quot; group=&quot;pick&quot;&gt;

**Dockge** es ligero, facil de instalar, y hace gestion compose sin complejidad. Sin escaneo, sin RBAC, sin OIDC. Solo una interfaz limpia para tus stacks. [Instalar Dockge](/es/instalar-dockge/).

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Gestionas muchos servidores y necesitas pipelines de build&quot; group=&quot;pick&quot;&gt;

**Komodo** esta construido para gestion de flota. Backend Rust, agentes Periphery, pipelines de build desde Git, permisos granulares, servidores ilimitados. [Ver la documentacion de Komodo](https://komo.do).

&lt;/Accordion&gt;

Yo ejecuto Arcane en mis servidores de produccion y Dockge en mi homelab. Arcane para el flujo de trabajo GitOps y acceso API, Dockge para gestion visual rapida cuando solo quiero levantar algo. Ambos han sido confiables.

## Articulos relacionados

- [Instalar Arcane](/es/instalar-arcane/) - guia completa con socket proxy y OIDC
- [Instalar Dockhand](/es/instalar-dockhand/) - gestor Docker enfocado en seguridad
- [Arcane vs Dockhand](/es/arcane-vs-dockhand/) - comparacion lado a lado
- [Instalar UsulNet](/es/instalar-usulnet/) - plataforma de gestion Docker todo en uno
- [Instalar Dockge](/es/instalar-dockge/) - UI ligera de gestion compose
- [Mejores contenedores Docker para servidor casero](/docker-containers-home-server/) - que ejecutar una vez configurado tu gestor
- [Mejores paneles self-hosted](/best-self-hosted-panels/) - paneles de gestion de servidor comparados
- [Proxy inverso Traefik para Docker](/traefik-proxy-docker/) - configuracion proper de proxy inverso</content:encoded><category>self-hosting</category><category>docker</category><category>self-hosted</category></item><item><title>Instalar Dockge - Gestor de Docker Compose para Self-Hosting</title><link>https://www.bitdoze.com/es/instalar-dockge/</link><guid isPermaLink="true">https://www.bitdoze.com/es/instalar-dockge/</guid><description>Como instalar Dockge con Docker Compose. Una interfaz web ligera para gestionar stacks de docker-compose, con soporte multi-agente, editor interactivo y terminal web.</description><pubDate>Fri, 13 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import { Picture } from &quot;astro:assets&quot;;
import imag1 from &quot;@assets/images/24/01/dockge-main.png&quot;;
import imag2 from &quot;@assets/images/24/01/dockge-container.png&quot;;
import imag3 from &quot;@assets/images/24/01/dockge-add.png&quot;;

Escribi por primera vez sobre Dockge en 2024, y dos anos despues sigue en cada servidor que ejecuto. Donde otras herramientas de gestion de Docker siguen agregando funciones y complejidad, Dockge se mantuvo enfocado en una cosa: hacer que los stacks de docker-compose sean faciles de gestionar desde un navegador.

[Dockge](https://github.com/louislam/dockge) fue creado por Louis Lam, el mismo desarrollador detras de [Uptime Kuma](https://www.bitdoze.com/uptime-kuma-tool/). Tiene casi 22,000 estrellas en GitHub y una comunidad que sigue creciendo. El proyecto alcanzo v1.5 con soporte multi-agente, y ahora puedes gestionar stacks en multiples hosts Docker desde una interfaz.

Si estas mirando UIs de gestion de Docker en general, escribi una [comparacion de alternativas a Portainer](/es/alternativas-portainer/) que cubre Dockge junto con Arcane, Dockhand, UsulNet y Komodo.

## Lo que Dockge hace (y no hace)

Dockge es un gestor de archivos compose. Escribes o pegas un YAML de docker-compose, haces clic en desplegar, y eso es todo. Todos tus archivos compose permanecen en disco en el directorio que elijas. Nada queda bloqueado en una base de datos. Todavia puedes ejecutar `docker compose up -d` desde la terminal y Dockge recoge los cambios.

&lt;Picture
  src={imag1}
  alt=&quot;Dockge UI mostrando lista de stacks compose&quot;
/&gt;

Esto es lo que obtienes:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Crear, editar, iniciar, detener, reiniciar y eliminar stacks compose desde una UI web&lt;/li&gt;
&lt;li&gt;Editor interactivo de compose.yaml con validacion en tiempo real&lt;/li&gt;
&lt;li&gt;Terminal web para hacer exec en contenedores en ejecucion&lt;/li&gt;
&lt;li&gt;Seguimiento de progreso en tiempo real para pulls de imagenes y operaciones de stack&lt;/li&gt;
&lt;li&gt;Convertir comandos docker run en YAML compose&lt;/li&gt;
&lt;li&gt;Soporte multi-agente para gestionar stacks en hosts Docker remotos&lt;/li&gt;
&lt;li&gt;Almacenamiento basado en archivos, tus archivos compose viven en disco en formato estandar&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

Lo que Dockge no tiene: escaneo de vulnerabilidades, RBAC, OIDC/SSO, API REST, GitOps o auto-actualizaciones. Si necesitas alguna de esas, revisa [Arcane](/es/instalar-arcane/) (GitOps + API), [Dockhand](/es/instalar-dockhand/) (escaneo de seguridad + auto-actualizaciones), o [UsulNet](/es/instalar-usulnet/) (todo en un binario). Mi comparacion [Arcane vs Dockhand](/es/arcane-vs-dockhand/) cubre las diferencias entre esos dos.

&lt;Picture
  src={imag2}
  alt=&quot;Vista de detalles de contenedor y logs en Dockge&quot;
/&gt;

Para monitorear los recursos de tu servidor junto con Dockge, dale un vistazo a [herramientas de monitoreo de servidor](https://www.bitdoze.com/sever-monitoring/).

&lt;YouTubeEmbed url=&quot;https://www.youtube.com/embed/ouyOyAqRDyI&quot; label=&quot;Instalar Dockge&quot; /&gt;

## Requisitos Previos

Antes de empezar:

- Un servidor Linux (VPS o local). Yo uso [Hetzner](https://go.bitdoze.com/hetzner), [Hostinger](https://go.bitdoze.com/hostinger-vps) para hosting VPS
- Docker 20+ y Docker Compose v2 instalados
- Funciona en amd64, arm64 y armv7 (Raspberry Pi incluido)

&lt;Button link=&quot;https://go.bitdoze.com/hetzner&quot; text=&quot;Hetzner VPS&quot; /&gt;
&lt;Button link=&quot;https://go.bitdoze.com/hostinger-vps&quot; text=&quot;Hostinger VPS&quot; /&gt;
&lt;Button link=&quot;https://go.bitdoze.com/do&quot; text=&quot;DigitalOcean $100 Gratis&quot; /&gt;
&lt;Button link=&quot;https://go.bitdoze.com/vultr&quot; text=&quot;Vultr $100 Gratis&quot; /&gt;

O usa un [Mini PC como servidor casero](https://www.bitdoze.com/best-mini-pc-home-server/).

### Instalar Docker

Si Docker aun no esta instalado:

```sh
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  &quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  jammy stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-compose
```

Guia completa: [Instalar Docker y Docker-compose para Ubuntu](https://www.bitdoze.com/install-docker-ubuntu-arm/).

## Instalar Dockge con Docker Compose

### Instalacion rapida

La forma mas rapida de tener Dockge funcionando:

```sh
mkdir -p /opt/stacks /opt/dockge
cd /opt/dockge

curl https://raw.githubusercontent.com/louislam/dockge/master/compose.yaml --output compose.yaml

docker compose up -d
```

Eso descarga el archivo compose, crea el directorio de stacks e inicia Dockge. Abre `http://ip-de-tu-servidor:5001` para configurar tu cuenta de administrador.

### Instalacion personalizada

Si quieres cambiar el puerto o el directorio de stacks, usa la URL generadora:

```sh
mkdir -p /opt/stacks /opt/dockge
cd /opt/dockge

curl &quot;https://dockge.kuma.pet/compose.yaml?port=5001&amp;stacksPath=/opt/stacks&quot; --output compose.yaml

docker compose up -d
```

Cambia `port` y `stacksPath` a lo que necesites. O simplemente crea el archivo compose manualmente:

```yaml
services:
  dockge:
    image: louislam/dockge:1
    restart: unless-stopped
    ports:
      - 5001:5001
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/app/data
      - /opt/stacks:/opt/stacks
    environment:
      - DOCKGE_STACKS_DIR=/opt/stacks
```

&lt;Notice type=&quot;warning&quot; title=&quot;La ruta de stacks debe coincidir&quot;&gt;
El lado izquierdo y derecho del montaje de volumen de stacks deben ser identicos. Si tus stacks viven en `/opt/stacks`, montalos como `/opt/stacks:/opt/stacks`, no como `/opt/stacks:/alguna/otra/ruta`. Los archivos compose usan rutas relativas, y se rompen si las rutas no coinciden dentro y fuera del contenedor.
&lt;/Notice&gt;

### Primer inicio de sesion

Abre `http://ip-de-tu-servidor:5001` en tu navegador. Dockge te pedira crear tu cuenta de administrador en la primera visita. Despues de eso, llegaras al dashboard principal donde puedes empezar a desplegar stacks compose.

&lt;Picture
  src={imag3}
  alt=&quot;Crear nuevo stack compose en Dockge&quot;
/&gt;

## Actualizando Dockge

Descarga la ultima imagen y reinicia:

```sh
cd /opt/dockge
docker compose pull &amp;&amp; docker compose up -d
```

Tus datos y stacks se conservan ya que viven en volumenes montados.

## Configuracion de proxy inverso

Para SSL y un dominio apropiado, pon un proxy inverso frente a Dockge. El soporte WebSocket es necesario para las actualizaciones en tiempo real y la terminal web.

&lt;Tabs&gt;
  &lt;Tab name=&quot;Nginx&quot;&gt;

```nginx
server {
    listen 443 ssl http2;
    server_name dockge.tudominio.com;

    ssl_certificate /ruta/a/cert.pem;
    ssl_certificate_key /ruta/a/key.pem;

    location / {
        proxy_pass http://127.0.0.1:5001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection &quot;upgrade&quot;;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
```

  &lt;/Tab&gt;

  &lt;Tab name=&quot;Traefik&quot;&gt;
    Agrega labels al servicio Dockge en tu archivo compose:

    ```yaml
    labels:
      - &quot;traefik.enable=true&quot;
      - &quot;traefik.http.routers.dockge.rule=Host(`dockge.tudominio.com`)&quot;
      - &quot;traefik.http.routers.dockge.entrypoints=websecure&quot;
      - &quot;traefik.http.routers.dockge.tls.certresolver=letsencrypt&quot;
      - &quot;traefik.http.services.dockge.loadbalancer.server.port=5001&quot;
    ```

    Configuracion completa de Traefik: [Como usar Traefik como proxy inverso en Docker](https://www.bitdoze.com/traefik-proxy-docker/). Para certificados SSL wildcard con Dockge y Traefik, ve [Configuracion de certificado wildcard Traefik](/traefik-wildcard-certificate/).
  &lt;/Tab&gt;

  &lt;Tab name=&quot;Cloudflare Tunnels&quot;&gt;
    Apunta un tunnel a `http://localhost:5001`. El manejo de SSL y WebSocket es automatico. No hay puertos que abrir en tu servidor. Esta es mi configuracion preferida para uso en homelab.
  &lt;/Tab&gt;
&lt;/Tabs&gt;

Tambien tengo una guia sobre [configurar Dockge con CloudPanel](/cloudpanel-setup-dockge/) si estas usando ese panel.

## Configuracion multi-agente

Desde v1.4, Dockge puede gestionar stacks en hosts Docker remotos. Ejecutas un agente Dockge en cada maquina remota, y todos aparecen en la UI principal de Dockge.

En la maquina remota, despliega el agente:

```yaml
services:
  dockge-agent:
    image: louislam/dockge:1
    restart: unless-stopped
    ports:
      - 5001:5001
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/app/data
      - /opt/stacks:/opt/stacks
    environment:
      - DOCKGE_STACKS_DIR=/opt/stacks
```

Luego en tu instancia principal de Dockge, ve a la pagina de agentes y agrega el host remoto por su direccion y puerto. Los stacks de ese host aparecen en tu dashboard junto con tus stacks locales.

## Dockge vs otros gestores de Docker

He probado muchas herramientas de gestion de Docker. Aqui es donde encaja Dockge:

| | Dockge | Arcane | Dockhand |
|---|---|---|---|
| Enfoque | UI Compose | Gestion Docker completa | Enfocado en seguridad |
| Complejidad | Minima | Media | Media |
| Escaneo vuln | No | No | Si |
| OIDC/SSO | No | Si | Si |
| GitOps | No | Si | Webhooks |
| Auto-actualizaciones | No | No | Si + rollback |
| API | No | REST | REST |
| Licencia | MIT | BSD-3-Clause | BSL 1.1 |

Dockge es la herramienta correcta cuando no necesitas todos los extras. Lo uso en mi homelab donde solo quiero ver mis stacks, revisar logs y reiniciar cosas cuando se rompen. En servidores de produccion donde necesito GitOps y acceso API, ejecuto [Arcane](/es/instalar-arcane/) en su lugar.

Para una comparacion completa de todas las opciones, ve mi articulo de [alternativas a Portainer](/es/alternativas-portainer/).

## Solucion de Problemas

&lt;Accordion label=&quot;Dockge no puede ver stacks compose existentes&quot; group=&quot;troubleshoot&quot; expanded=&quot;true&quot;&gt;

Tus stacks necesitan estar en el directorio que configuraste con `DOCKGE_STACKS_DIR`. Cada stack deberia estar en su propio subdirectorio con un archivo `compose.yaml`. La estructura de directorios deberia verse asi:

```
/opt/stacks/
├── miapp/
│   └── compose.yaml
├── otra-app/
│   └── compose.yaml
```

Tambien asegurate de que las rutas de montaje de volumen coincidan en ambos lados, como se menciona en la seccion de instalacion.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Errores WebSocket o UI no se actualiza&quot; group=&quot;troubleshoot&quot;&gt;

Tu proxy inverso no esta reenviando conexiones WebSocket. Para Nginx, necesitas:

```nginx
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection &quot;upgrade&quot;;
```

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Permission denied en socket Docker&quot; group=&quot;troubleshoot&quot;&gt;

El contenedor necesita acceso al socket Docker. Asegurate de que el usuario que ejecuta Docker tiene los permisos correctos:

```bash
sudo usermod -aG docker $USER
```

Luego cierra sesion y vuelve a entrar, o reinicia el daemon de Docker.

&lt;/Accordion&gt;

## Articulos relacionados

- [Mejores alternativas a Portainer en 2026](/es/alternativas-portainer/) - cinco UIs de gestion Docker comparadas
- [Instalar Arcane](/es/instalar-arcane/) - gestor Docker con GitOps y API REST
- [Instalar Dockhand](/es/instalar-dockhand/) - gestor Docker enfocado en seguridad con escaneo
- [Arcane vs Dockhand](/es/arcane-vs-dockhand/) - comparacion lado a lado
- [Instalar UsulNet](/es/instalar-usulnet/) - plataforma de gestion Docker todo en uno
- [Dockge con CloudPanel](/cloudpanel-setup-dockge/) - usando ambas herramientas juntas
- [Mejores contenedores Docker para servidor casero](/docker-containers-home-server/) - que ejecutar con Dockge
- [Mejores paneles self-hosted](/best-self-hosted-panels/) - paneles de gestion de servidor comparados
- [Proxy inverso Traefik para Docker](/traefik-proxy-docker/) - configuracion de proxy inverso
- [Certificado wildcard Traefik](/traefik-wildcard-certificate/) - SSL wildcard con Traefik y Dockge
- [Herramientas de monitoreo de servidor](/sever-monitoring/) - monitoreando tu host Docker</content:encoded><category>hosting</category><category>docker</category><category>self-hosted</category></item><item><title>Los Mejores LLMs Open Source para Reemplazar Sonnet 4.5 u Opus 4.6: Alternativas de IA para Codificacion Accesibles 2026</title><link>https://www.bitdoze.com/es/mejores-llms-opensource-alternativa-claude/</link><guid isPermaLink="true">https://www.bitdoze.com/es/mejores-llms-opensource-alternativa-claude/</guid><description>Descubre los 5 mejores modelos de lenguaje open source que pueden reemplazar a Claude Sonnet 4.5 u Opus 4.6 para tareas de codificacion a una fraccion del costo: GLM-5, Kimi K2.5, Qwen-Max, MiniMax M2.5 y Devstral 2.</description><pubDate>Thu, 12 Feb 2026 01:00:00 GMT</pubDate><content:encoded>Claude Sonnet 4.5 u Opus 4.6 funciona bien para codificar, pero es costoso. Muchos desarrolladores buscan alternativas que no cuesten tanto. El espacio de IA open source ha crecido mucho desde 2025, y ahora hay modelos que pueden hacer lo que hace Claude por mucho menos dinero.

Esta guia cubre cinco modelos open source que pueden reemplazar a Claude Sonnet 4.5 u Opus 4.6 para codificar: GLM-5, Kimi K2.5, Qwen-Max, MiniMax M2.5 y Devstral 2. Estos modelos manejan razonamiento, generacion de codigo y tareas de agentes bien, y cuestan significativamente menos que Claude.

&lt;Notice type=&quot;info&quot; title=&quot;Resumen de Comparacion de Costos&quot;&gt;

Mientras Claude Sonnet 4.5 cuesta $3-15 por millon de tokens, estas alternativas open source van desde $0.15 hasta $1.20 por millon de tokens de entrada, ofreciendo ahorros de hasta 95%.

&lt;/Notice&gt;

## Por Que Considerar Alternativas LLM Open Source?

Los modelos open source han mejorado mucho y pueden competir con opciones propietarias. Aqui por que vale la pena considerarlos:

&lt;ListCheck&gt;

- **Eficiencia de Costos**: Los costos de API son mucho menores que los modelos propietarios
- **Transparencia**: El codigo open source te permite entender y modificar el modelo
- **Paridad de Rendimiento**: Muchos modelos open source igualan o superan a Claude Sonnet 4.5 en varias tareas
- **Flexibilidad**: Puedes self-hostear o usar varios proveedores de API
- **Soporte de la Comunidad**: Equipos de desarrollo activos siguen mejorando los modelos

&lt;/ListCheck&gt;

### Areas Clave de Rendimiento a Considerar

Al evaluar alternativas LLM, varios factores importan:

- **Capacidades de Codificacion**: Que tan bien el modelo genera, depura y explica codigo
- **Rendimiento de Razonamiento**: Que tan bien maneja problemas complejos y pensamiento logico
- **Longitud de Contexto**: Cuanta informacion puede procesar el modelo de una vez
- **Tareas Agenticas**: Uso de herramientas, llamadas de funciones y ejecucion de tareas de multiples pasos
- **Relacion Costo-Rendimiento**: Cuanto valor obtienes por dolar gastado

## Que hay de Nuevo con Claude Sonnet 4.5?

Antes de mirar alternativas, ayuda entender que hace bien Claude Sonnet 4.5. Lanzado a principios de 2025, **[Claude Sonnet 4.5](https://www.anthropic.com/news/claude-sonnet-4-5)** es el modelo mas reciente de Anthropic:

&lt;ListCheck&gt;

- **Mejor Modelo de Codificacion**: Puntua 77.2% en SWE-bench Verified y se mantiene enfocado en tareas complejas por mas de 30 horas
- **Lider en Uso de Computadora**: 61.4% en benchmark OSWorld, arriba de 42.2% con Sonnet 4
- **Razonamiento Mejorado**: Mejores capacidades de razonamiento y matematicas
- **Alineacion Mejorada**: Menos comportamiento sicofante y enganoso que modelos anteriores
- **Precios Premium**: $3 por millon de tokens de entrada, $15 por millon de tokens de salida

&lt;/ListCheck&gt;

Claude Sonnet 4.5 y Opus 4.6 son poderosos, pero el precio hace dificil justificarlos para muchos desarrolladores y negocios. Las alternativas open source ofrecen rendimiento similar por mucho menos dinero.

## 1. GLM-5: Ingenieria agentica con alucinaciones record bajas

**[GLM-5](https://docs.z.ai/guides/llm/glm-5)** es el nuevo modelo estandarte de Z.AI, y el salto desde GLM-4.7 es significativo. Paso de 357B a 744B parametros totales mientras mantiene eficiencia MoE en 40B activos. Dos cosas destacan: DeepSeek Sparse Attention para manejar contextos largos sin disparar costos de inferencia, y una nueva infraestructura RL llamada &quot;slime&quot; que bajo las tasas de alucinacion a casi cero. En benchmarks de codificacion, se acerca al territorio de Claude Opus 4.5.

### Especificaciones Tecnicas

| Feature               | GLM-5                            |
| --------------------- | -------------------------------- |
| **Total Parameters**  | 744B (MoE)                       |
| **Active Parameters** | 40B                              |
| **Context Length**    | 200K tokens                      |
| **Architecture**      | MoE with Sparse Attention        |
| **Input Cost**        | $0.80/M tokens                   |
| **Output Cost**       | $2.56/M tokens                   |
| **License**           | MIT                              |
| **Release Date**      | February 2026                    |

&lt;Button
  text=&quot;GLM-5 Coding Plans&quot;
  link=&quot;https://z.ai/subscribe?ic=NKNUNYDRZT&quot;
  size=&quot;lg&quot;
  color=&quot;blue&quot;
  variant=&quot;solid&quot;
/&gt;

&lt;YouTubeEmbed
  url=&quot;https://www.youtube.com/embed/O5_iAvCgL1o&quot;
  label=&quot;GLM-5 Testing&quot;
/&gt;

### Fortalezas Clave

&lt;ListCheck&gt;

- **Ingenieria agentica**: Maneja ingenieria de sistemas complejos y tareas de agentes de largo horizonte con planificacion de multiples pasos
- **95.8% SWE-bench Verified**: La puntuacion de codificacion mas alta entre modelos open source ahora mismo
- **Alucinaciones casi cero**: Puntua -1 en AA-Omniscience Index, arriba del -36 de GLM-4.7
- **Razonamiento fuerte**: 92.7% en AIME 2026 y 86.0% en GPQA-Diamond
- **Sparse Attention**: DeepSeek Sparse Attention mantiene los costos de despliegue bajos incluso con contexto de 200K
- **Infraestructura RL &quot;Slime&quot;**: RL async con Active Partial Rollouts (APRIL) para refinamiento post-entrenamiento

&lt;/ListCheck&gt;

### Puntos Destacados de Rendimiento

Aqui es donde GLM-5 queda en los benchmarks que importan:

- **Codificacion**: 95.8% en SWE-bench Verified. Tambien es el primer modelo abierto en romper 50 en el Artificial Analysis Intelligence Index v4.0
- **Razonamiento/matematicas**: 93.6% precision general, 92.7% en AIME 2026, 86.0% en GPQA-Diamond
- **Trabajo agentico**: ELO 1,412 en GDPval-AA (solo Claude Opus 4.6 y GPT-5.2 puntuan mas alto). #1 en Vending Bench 2
- **Confiabilidad**: 97% tasa de exito a traves de benchmarks, con la tasa de alucinacion mas baja de cualquier modelo abierto probado

&lt;Button
  text=&quot;Try GLM-5&quot;
  url=&quot;https://z.ai/subscribe?ic=NKNUNYDRZT&quot;
  size=&quot;lg&quot;
  color=&quot;blue&quot;
  variant=&quot;solid&quot;
  icon=&quot;arrow-right&quot;
  iconPosition=&quot;right&quot;
/&gt;

&lt;Notice type=&quot;info&quot; title=&quot;GLM Coding Plans&quot;&gt;

Para codificar, Z.AI ofrece [GLM Coding Plans](https://z.ai/subscribe?ic=NKNUNYDRZT) con precios y features para desarrolladores.

&lt;/Notice&gt;

### Mejores Casos de Uso

GLM-5 funciona bien para:

- **Tareas de agentes de larga duracion**: Planificacion de multiples pasos a traves de sistemas complejos
- **Codificacion de produccion**: Desarrollo full-stack donde necesitas algo cerca de Claude Opus 4.5
- **Trabajo enterprise**: Licencia MIT y baja tasa de alucinacion importan cuando los errores son costosos
- **Generacion de documentos**: Puede producir documentos de negocios en formatos PDF, Word y Excel
- **Flujos de trabajo con muchas herramientas**: Razonamiento mas integracion de herramientas y busqueda

## 2. Kimi K2.5: Codificacion multimodal con agent swarms

**[Kimi K2.5](https://www.kimi.com/blog/kimi-k2-5.html)** es el modelo open-source mas fuerte de Moonshot AI. Es nativamente multimodal (pre-entrenado en ~15T tokens visuales y de texto mezclados), lo que significa que realmente puede mirar imagenes y videos, no solo texto. La feature destacada es su agent swarm: puede iniciar hasta 100 sub-agentes trabajando en paralelo.

### Especificaciones Tecnicas

| Feature                | Specification             |
| ---------------------- | ------------------------- |
| **Total Parameters**   | 1 Trillion                |
| **Active Parameters**  | 32 Billion                |
| **Context Length**     | 256K tokens               |
| **Architecture**       | Mixture-of-Experts (MoE)  |
| **Input Cost**         | $0.60/M tokens            |
| **Output Cost**        | $3.00/M tokens            |
| **Release Date**       | January 2026              |
| **Agent Swarm**        | Up to 100 sub-agents      |

&lt;YouTubeEmbed
  url=&quot;https://www.youtube.com/embed/ctfBKfwprNM&quot;
  label=&quot;Kimi K2.5 Testing&quot;
/&gt;

### Features Destacadas

&lt;ListCheck&gt;

- **Agent swarm**: Se auto-dirige hasta 100 sub-agentes con hasta 1,500 llamadas de herramientas coordinadas para flujos de trabajo paralelos
- **Codificacion desde visuales**: Genera codigo desde imagenes, videos y depuracion visual nativamente
- **256K contexto**: Suficiente para ajustar un codebase completo y salidas de formato largo
- **76.8% SWE-bench Verified**: Rendimiento solido de ingenieria de software del mundo real
- **Compatible con Claude Code**: Funciona con Claude Code, Cline y otros frameworks de agentes
- **$0.60/M tokens de entrada**: Buen precio por lo que obtienes
- **Kimi Code CLI**: Agente CLI open-source que toma imagenes y videos como inputs

&lt;/ListCheck&gt;

### Resultados de benchmarks

Kimi K2.5 puntua bien en tareas de codificacion y vision:

- **Codificacion**: 76.8% en SWE-bench Verified, 73.0% en SWE-bench Multilingual, 85.0% en LiveCodeBench v6
- **Vision**: 78.5% en MMMU-Pro, 84.2% en MathVision, 88.8% en OmniDocBench 1.5
- **Agentico**: 78.4% en BrowseComp con agent swarm, 50.2% en HLE-Full con herramientas
- **Contexto**: 256K tokens maneja repositorios medianos en una sesion
- **Video**: 86.6% en VideoMMMU, 79.8% en LongVideoBench

&lt;Notice type=&quot;success&quot; title=&quot;Mejor valor para multimodal&quot;&gt;

Kimi K2.5 es el unico modelo aqui con soporte de vision nativo, mas el agent swarm para ejecucion paralela, todo a $0.60 por millon de tokens de entrada.

&lt;/Notice&gt;

&lt;Button
  text=&quot;Access Kimi K2.5 on OpenRouter&quot;
  url=&quot;https://openrouter.ai/moonshotai/kimi-k2-5&quot;
  size=&quot;lg&quot;
  color=&quot;green&quot;
  variant=&quot;solid&quot;
  icon=&quot;arrow-right&quot;
  iconPosition=&quot;right&quot;
/&gt;

### Cuando usarlo

- **Codificacion visual**: Genera codigo desde mockups de UI, capturas de pantalla o demos de video
- **Flujos de trabajo de agentes paralelos**: Agent swarm reduce runtime hasta 4.5x
- **Codebases grandes**: 256K contexto ajusta repositorios enteros
- **Trabajo frontend**: Interfaces responsivas con graficos y elementos visuales
- **Procesamiento de documentos**: Maneja documentos de 10,000 palabras o 100 paginas con anotaciones
- **Presupuestos ajustados**: Obtienes mucha capacidad por dolar
- **Sesiones de codificacion largas**: Mantiene historial de conversacion a traves de flujos de trabajo extendidos

## 3. Qwen-Max: El modelo mas grande de Qwen3

**[Qwen-Max](https://qwen.ai/apiplatform)** es el modelo tope en la serie Qwen3. Maneja codificacion, razonamiento y tareas generales con una ventana de contexto de 256K y usa una API compatible con OpenAI, asi que la integracion es directa.

### Especificaciones Tecnicas

| Feature               | Specification        |
| --------------------- | -------------------- |
| **Model Family**      | Qwen3                |
| **Context Length**    | 256K tokens          |
| **Architecture**      | Advanced Transformer |
| **Input Cost**        | $1.20/M tokens       |
| **Output Cost**       | $6.00/M tokens       |
| **Release Date**      | September 2025       |
| **API Compatibility** | OpenAI format        |

&lt;YouTubeEmbed
  url=&quot;https://www.youtube.com/embed/RAPQd0nBg3g&quot;
  label=&quot;Qwen-Max Testing&quot;
/&gt;

### Lo que ofrece

&lt;ListCheck&gt;

- **Modelo tope de Qwen3**: El mas capaz en el lineup de Qwen
- **256K contexto**: Ajusta codebases grandes en una sola sesion
- **Solidos benchmarks**: Buenas puntuaciones en MMLU, MMMU y HellaSwag
- **Versatil**: Codificacion, razonamiento y tareas generales en un modelo
- **API compatible con OpenAI**: Cambia tu clave API y URL base, listo
- **Estable en produccion**: Confiable para cargas de trabajo de negocios

&lt;/ListCheck&gt;

### Rendimiento en benchmarks

Qwen-Max se mantiene en multiples evaluaciones:

- **General**: Puntuaciones fuertes en MMLU, MMMU y HellaSwag
- **Codificacion**: Competitivo en benchmarks especificos de codificacion
- **Contexto largo**: Maneja codebases grandes con 256K tokens
- **Uso en produccion**: Consistente y confiable en despliegues reales
- **Multi-tarea**: Rinde bien a traves de diferentes tipos de tareas

### Ecosistema de Desarrollo

&lt;Notice type=&quot;info&quot; title=&quot;Compatibilidad API&quot;&gt;

Qwen-Max usa una API compatible con OpenAI, asi que puedes integrarlo actualizando la clave API y URL base.

&lt;/Notice&gt;

&lt;Button
  text=&quot;Explore Qwen-Max on OpenRouter&quot;
  url=&quot;https://openrouter.ai/qwen/qwen-max&quot;
  size=&quot;lg&quot;
  color=&quot;purple&quot;
  variant=&quot;solid&quot;
  icon=&quot;arrow-right&quot;
  iconPosition=&quot;right&quot;
/&gt;

### Cuando usarlo

- **Trabajo enterprise**: IA de grado produccion para tareas criticas de negocio
- **Desarrollo full-stack**: Multiples lenguajes y frameworks
- **Operaciones a nivel de repositorio**: 256K contexto para analisis a gran escala
- **Cargas de trabajo mixtas**: Codificacion, razonamiento y consultas generales en un modelo
- **Configuraciones OpenAI existentes**: Reemplazo directo con cambio de clave API

## 4. MiniMax M2.5: Codificacion SOTA a una fraccion del costo


&lt;YouTubeEmbed
  url=&quot;https://www.youtube.com/embed/M7a-S1dOpIw&quot;
  label=&quot;MiniMax M2.5 Testing&quot;
/&gt;


**[MiniMax M2.5](https://www.minimax.io/news/minimax-m25)** es el mas reciente en la serie M2, y el salto desde M2.1 es sustancial. MiniMax lo entreno con reinforcement learning a traves de mas de 200,000 entornos del mundo real, llevando SWE-bench Verified a 80.2%, lo que supera a Claude Opus 4.6 en multiples scaffolds. Viene en dos niveles de velocidad: M2.5 a 50 tokens/segundo y M2.5-Lightning a 100 tokens/segundo, ambos con precios lo suficientemente bajos para ejecutar agentes continuamente sin preocuparse por el costo.

### Especificaciones Tecnicas

| Feature                  | MiniMax M2.5                          |
| ------------------------ | ------------------------------------- |
| **Architecture**         | Mixture-of-Experts (MoE)              |
| **Context Length**       | 200K tokens                           |
| **M2.5 Input Cost**     | $0.15/M tokens (50 TPS)              |
| **M2.5 Output Cost**    | $1.20/M tokens (50 TPS)              |
| **Lightning Input Cost** | $0.30/M tokens (100 TPS)             |
| **Lightning Output Cost**| $2.40/M tokens (100 TPS)             |
| **Release Date**         | February 12, 2026                     |

&lt;Button
  text=&quot;MiniMax Coding Plans (10% Off)&quot;
  link=&quot;https://go.bitdoze.com/minimax&quot;
  size=&quot;lg&quot;
  color=&quot;purple&quot;
  variant=&quot;solid&quot;
/&gt;

### Lo que hace bien

&lt;ListCheck&gt;

- **80.2% SWE-bench Verified**: Supera a Claude Opus 4.6 en el scaffold Droid (79.7 vs 78.9) y OpenCode (76.1 vs 75.9)
- **Enfoque de escritura de specs**: Planifica features, estructura y diseno de UI antes de escribir codigo, como un arquitecto de software experimentado
- **Mas de 10 lenguajes de programacion**: Go, C, C++, TypeScript, Rust, Kotlin, Python, Java, JavaScript, PHP, Lua, Dart, Ruby
- **37% mas rapido que M2.1**: Completa tareas SWE-bench en 22.8 minutos en promedio, igualando la velocidad de Opus 4.6
- **Mas alla de bug fixes**: Va de diseno 0-a-1 de sistema a traves de configuracion de entorno, iteracion de features, code review y testing
- **Dos niveles de velocidad**: M2.5 a 50 TPS y Lightning a 100 TPS (dos veces mas rapido que otros modelos fronterizos)
- **Automatizacion de oficina**: Formateo Word, edicion PowerPoint, modelado financiero Excel con Office Skills integrados
- **Soporte de framework de agentes**: Funciona con Claude Code, Droid, Cline, Roo Code, OpenCode

&lt;/ListCheck&gt;

### Resultados de benchmarks

- **SWE-bench Verified**: 80.2% (Droid: 79.7 vs 78.9 de Opus 4.6; OpenCode: 76.1 vs 75.9)
- **Multi-SWE-Bench**: 51.3%, particularmente bueno en lenguajes no-Python
- **BrowseComp**: 76.3% con gestion de contexto, usando ~20% menos rondas de busqueda que M2.1
- **VIBE Pro**: Iguala a Claude Opus 4.5 en el benchmark actualizado a traves de Web, Android, iOS y Windows
- **Velocidad**: 22.8 minutos promedio por tarea SWE-bench, abajo de 31.3 minutos en M2.1
- **Costo por tarea**: Aproximadamente 10% de lo que cobra Claude Opus 4.6 por el mismo trabajo

&lt;Notice type=&quot;success&quot; title=&quot;Modelo fronterizo mas economico&quot;&gt;

Ejecutar M2.5 continuamente por una hora a 100 tokens/segundo cuesta $1. A 50 TPS, baja a $0.30/hora. Cuatro instancias ejecutando 24/7 por un ano costarian aproximadamente $10,000.

&lt;/Notice&gt;

&lt;Button
  text=&quot;Try MiniMax M2.5&quot;
  url=&quot;https://agent.minimax.io&quot;
  size=&quot;lg&quot;
  color=&quot;purple&quot;
  variant=&quot;outline&quot;
  icon=&quot;arrow-right&quot;
  iconPosition=&quot;right&quot;
/&gt;

&lt;Button
  text=&quot;Access MiniMax M2.5 API&quot;
  url=&quot;https://platform.minimax.io/docs/api-reference/text-anthropic-api&quot;
  size=&quot;lg&quot;
  color=&quot;purple&quot;
  variant=&quot;outline&quot;
  icon=&quot;arrow-right&quot;
  iconPosition=&quot;right&quot;
/&gt;

### Mejores Casos de Uso

MiniMax M2.5 funciona bien para:

- **Agentes de codificacion siempre activos**: Economico suficiente para ejecutar continuamente sin ansiedad de presupuesto
- **Proyectos multi-lenguaje**: Entrenado en mas de 10 lenguajes a traves de mas de 200,000 entornos del mundo real
- **Trabajo full-stack**: Diseno de sistema, APIs, logica de negocio, bases de datos y frontend a traves de Web, Android, iOS y Windows
- **Automatizacion de oficina**: Modelado financiero en Excel, generacion de reportes en Word, presentaciones en PowerPoint
- **Asistentes de codificacion interactivos**: La variante Lightning de 100 TPS hace la integracion IDE responsiva
- **Self-Hosting**: Pesos open source para despliegue on-premise con vLLM o SGLang

## 5. Devstral 2: Arquitectura densa para trabajo a escala de repositorio

**[Devstral 2](https://mistral.ai/news/devstral-2-vibe-cli)** toma un enfoque diferente. Mientras los otros modelos aqui usan MoE, Devstral 2 es un transformer denso de 123B. Eso significa que todos los parametros estan activos en cada inferencia, lo que le da mejor coherencia en tareas de repositorio completo. Viene con Mistral Vibe, un agente CLI para automatizacion basada en terminal.

### Especificaciones Tecnicas

| Feature               | Devstral 2                        |
| --------------------- | --------------------------------- |
| **Total Parameters**  | 123B (Dense)                      |
| **Active Parameters** | 123B                              |
| **Context Length**    | 256K tokens                       |
| **Architecture**      | Dense Transformer                 |
| **Input Cost**        | $0.40/M tokens                    |
| **Output Cost**       | $2.00/M tokens                    |
| **Release Date**      | December 2025                     |

&lt;Button
  text=&quot;Devstral 2 Vibe CLI&quot;
  link=&quot;https://mistral.ai/news/devstral-2-vibe-cli&quot;
  size=&quot;lg&quot;
  color=&quot;blue&quot;
  variant=&quot;solid&quot;
/&gt;

### Lo que hace bien

&lt;ListCheck&gt;

- **Arquitectura densa**: Todos los 123B parametros activos, asi que el razonamiento se mantiene coherente a traves de repos grandes
- **Construido para agentes**: Sintonizado para Vibe CLI para manejar ediciones multi-archivo, operaciones git y loops de testing
- **Devstral Small 2**: Un modelo companero de 24B que corre en hardware de consumidor (licencia Apache 2.0)
- **72.2% SWE-bench Verified**: Supera muchos modelos MoE mas grandes
- **Mistral Vibe CLI**: Asistente de terminal open-source para codificacion autonoma

&lt;/ListCheck&gt;

### Resultados de benchmarks

- **SWE-bench Verified**: 72.2%, en la frontera para modelos de pesos abiertos
- **Evaluacion humana**: Preferido sobre DeepSeek V3.2 en tareas de codificacion basadas en Cline (42.8% tasa de victoria)
- **Modelo local**: Devstral Small 2 (24B) alcanza 68.0% SWE-bench, fuerte para un modelo que puedes ejecutar localmente
- **Costo**: Hasta 7x mas economico que Claude Sonnet en tareas del mundo real

&lt;Notice type=&quot;success&quot; title=&quot;Ejecutalo localmente&quot;&gt;

Devstral Small 2 (24B) corre en GPUs de consumidor de gama alta, asi que puedes tener un agente de codificacion completamente local sin enviar ningun codigo a servidores externos.

&lt;/Notice&gt;

&lt;Button
  text=&quot;Try Devstral 2&quot;
  url=&quot;https://console.mistral.ai/&quot;
  size=&quot;lg&quot;
  color=&quot;blue&quot;
  variant=&quot;outline&quot;
  icon=&quot;arrow-right&quot;
  iconPosition=&quot;right&quot;
/&gt;

### Mejores Casos de Uso

Devstral 2 funciona bien para:

- **Flujos de trabajo agenticos**: Usando Mistral Vibe CLI para codificacion autonoma basada en terminal
- **Refactorizacion de repositorio**: Arquitectura densa proporciona mejor coherencia para cambios a gran escala
- **Desarrollo local**: Devstral Small 2 te permite usar asistencia de codificacion poderosa en hardware local
- **Entornos seguros**: Pesos abiertos y opciones de despliegue local para privacidad de datos estricta

## Comparacion lado a lado

Aqui es como los cinco se comparan:

### Tabla de Comparacion de Rendimiento

| Benchmark                     | GLM-5     | Kimi K2.5 | Qwen-Max | MiniMax M2.5 | Devstral 2 | Claude Sonnet 4.5 |
| ----------------------------- | --------- | --------- | -------- | ------------ | ---------- | ----------------- |
| **SWE-bench Verified**        | 95.8%     | 76.8%     | Strong   | 80.2%        | 72.2%      | 77.2%             |
| **LiveCodeBench v6**          | Strong    | 85.0%     | Strong   | Strong       | Strong     | 84.5%             |
| **MMMU-Pro**                  | —         | 78.5%     | —        | —            | —          | 74.0%             |
| **Context Window**            | 200K      | 256K      | 256K     | 200K         | 256K       | 200K              |
| **Agent Swarm**               | No        | Yes       | No       | No           | No         | No                |
| **Vision Support**            | No        | Yes       | No       | No           | No         | No                |
| **Cost per 1M Input Tokens**  | $0.80     | $0.60     | $1.20    | $0.15        | $0.40      | $3.00             |
| **Cost per 1M Output Tokens** | $2.56     | $3.00     | $6.00    | $1.20        | $2.00      | $15.00            |

### Matriz de Comparacion de Features

![LLM Feature Comparison Matrix](@assets/images/25/07/feature-llm-comp.svg)

## Empezando

### Paso 1: Elige Tu Metodo de Acceso

Cada modelo ofrece multiples opciones de acceso:

&lt;ListCheck&gt;

- **OpenRouter**: Acceso API unificado a todos los modelos con precios competitivos
- **Acceso API Directo**: Endpoints especificos del proveedor para rendimiento optimizado
- **Self-Hosting**: Despliega modelos en tu propia infraestructura para maximo control
- **Herramientas de Desarrollo**: Integracion con asistentes de codificacion e IDEs

&lt;/ListCheck&gt;

### Paso 2: Configura Tu Entorno

Para acceso OpenRouter (recomendado para principiantes):

```bash
# Install OpenAI SDK
pip install openai

# Set environment variables
export OPENROUTER_API_KEY=&quot;tu_api_key_aqui&quot;
export OPENROUTER_BASE_URL=&quot;https://openrouter.ai/api/v1&quot;
```

### Paso 3: Ejemplo de Implementacion Basica

```python
import openai

client = openai.OpenAI(
    base_url=&quot;https://openrouter.ai/api/v1&quot;,
    api_key=&quot;tu_openrouter_api_key&quot;
)

# Usa GLM-5 para tareas agenticas
response = client.chat.completions.create(
    model=&quot;z-ai/glm-5&quot;,
    messages=[
        {&quot;role&quot;: &quot;system&quot;, &quot;content&quot;: &quot;You are a helpful coding assistant.&quot;},
        {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Create a Python web scraper for product prices&quot;}
    ]
)

print(response.choices[0].message.content)
```

### Paso 4: Optimiza para Tu Caso de Uso

&lt;Notice type=&quot;warning&quot; title=&quot;Consideraciones de Longitud de Contexto&quot;&gt;

Kimi K2.5, Qwen-Max y Devstral 2 lideran con 256K tokens, mientras GLM-5 y MiniMax M2.5 soportan 200K tokens—todos excelentes para tareas de codificacion complejas.

&lt;/Notice&gt;

## Desglose de costos

Esto es lo que realmente pagarias a 10M tokens/mes:

### Comparacion de Costo Mensual (Basado en uso de 10M tokens)

| Model                 | Input Cost | Output Cost | Total Monthly Cost | Savings vs Claude Sonnet 4.5 |
| --------------------- | ---------- | ----------- | ------------------ | ---------------------------- |
| **Claude Sonnet 4.5** | $30.00     | $150.00     | $180.00            | Baseline                     |
| **GLM-5**             | $8.00      | $25.60      | $33.60             | 81.3% savings                |
| **Kimi K2.5**         | $6.00      | $30.00      | $36.00             | 80.0% savings                |
| **Qwen-Max**          | $12.00     | $60.00      | $72.00             | 60.0% savings                |
| **MiniMax M2.5**      | $1.50      | $12.00      | $13.50             | 92.5% savings                |
| **Devstral 2**        | $4.00      | $20.00      | $24.00             | 86.7% savings                |

### Lo que los ahorros significan en la practica

- **Mas experimentacion**: Costos mas bajos te permiten probar e iterar mas libremente
- **Acceso para todo el equipo**: Ejecuta asistencia IA para todo tu equipo, no solo unos pocos desarrolladores
- **Integracion mas amplia**: Usa IA en mas partes de tu aplicacion
- **Envio mas rapido**: Mas ciclos de desarrollo asistido por IA sin ansiedad de presupuesto

## Tips y errores comunes

### Lo que funciona

&lt;ListCheck&gt;

- **Empareja modelo con tarea**: Usa modelos mas economicos para tareas simples, los mas grandes para razonamiento complejo
- **Gestiona contexto cuidadosamente**: Contexto mas largo cuesta mas tokens, asi que se deliberado
- **Invierte en prompts**: Cada modelo responde diferente al estilo de prompt
- **Batch requests**: Combina llamadas para reducir overhead
- **Monitorea outputs**: Rastrea calidad en tu dominio especifico

&lt;/ListCheck&gt;

### Que evitar

- **Over-Engineering**: No uses el modelo mas costoso para tareas simples
- **Testing inadecuado**: Siempre valida outputs del modelo en tu dominio especifico
- **Context overflow**: Monitorea uso de tokens para evitar costos inesperados
- **Dependencia de modelo unico**: Considera usar diferentes modelos para diferentes tareas

## Que viene para LLMs open source

Algunas tendencias a vigilar:

- **Modelos especificos de dominio**: Mas opciones especializadas como Qwen3 Coder
- **Mejor eficiencia**: Mas rendimiento por parametro y por dolar
- **Integracion de herramientas mas ajustada**: Mejor compatibilidad con IDEs y flujos de trabajo de codificacion
- **Multimodal por defecto**: Vision y audio volviendose estandar, no opcional
- **Inferencia mas rapida**: Latencia bajando lo suficiente para uso en tiempo real

## Cual deberias elegir?

Depende de que te importa mas:

### GLM-5 si necesitas:

- **Puntuaciones de codificacion top**: 95.8% SWE-bench Verified, el mas alto entre open source
- **Ingenieria agentica**: Planificacion de multiples pasos de largo horizonte
- **Bajas alucinaciones**: Tasa record baja, bueno para enterprise
- **Razonamiento fuerte**: 92.7% en AIME 2026, 86.0% en GPQA-Diamond
- **Licencia MIT**: Plena libertad comercial y de self-hosting

&lt;Button
  text=&quot;Try GLM-5&quot;
  url=&quot;https://z.ai/subscribe?ic=NKNUNYDRZT&quot;
  size=&quot;lg&quot;
  color=&quot;blue&quot;
  variant=&quot;solid&quot;
  icon=&quot;arrow-right&quot;
  iconPosition=&quot;right&quot;
/&gt;
### Kimi K2.5 si quieres:

- **Soporte de vision**: El unico modelo aqui que puede leer imagenes y video
- **Agent swarms**: Ejecucion paralela con hasta 100 sub-agentes
- **256K contexto**: Ajusta repositorios enteros
- **Compatibilidad con Claude Code**: Funciona con Claude Code y Kimi Code
- **Buen precio**: $0.60/M tokens de entrada por todo lo anterior

&lt;Button
  text=&quot;Try Kimi K2.5&quot;
  url=&quot;https://openrouter.ai/moonshotai/kimi-k2-5&quot;
  size=&quot;lg&quot;
  color=&quot;green&quot;
  variant=&quot;solid&quot;
  icon=&quot;arrow-right&quot;
  iconPosition=&quot;right&quot;
/&gt;

### Qwen-Max si te importa:

- **Capacidad general**: El modelo tope de Qwen3, solido en todo
- **Confiabilidad de produccion**: Estable para cargas de trabajo criticas de negocio
- **Compatibilidad OpenAI**: Reemplazo directo para configuraciones existentes
- **256K contexto**: Operaciones de codebase a gran escala

&lt;Button
  text=&quot;Explore Qwen-Max&quot;
  url=&quot;https://openrouter.ai/qwen/qwen-max&quot;
  size=&quot;lg&quot;
  color=&quot;purple&quot;
  variant=&quot;solid&quot;
  icon=&quot;arrow-right&quot;
  iconPosition=&quot;right&quot;
/&gt;

### MiniMax M2.5 si quieres:

- **Puntuaciones de codificacion fronterizas**: 80.2% SWE-bench Verified, superando a Claude Opus 4.6
- **Agentes siempre activos**: $1/hora a 100 TPS, $0.30/hora a 50 TPS
- **Codificacion end-to-end**: Diseno de sistema a traves de code review y testing, no solo bug fixes
- **Codificacion multi-lenguaje**: Mas de 10 lenguajes a traves de mas de 200,000 entornos del mundo real
- **Automatizacion de oficina**: Word, PowerPoint, Excel con Office Skills integrados
- **Inferencia rapida**: Variante Lightning corre a 100 tokens/segundo

&lt;Button
  text=&quot;MiniMax Coding Plans (10% Off)&quot;
  link=&quot;https://go.bitdoze.com/minimax&quot;
  size=&quot;lg&quot;
  color=&quot;purple&quot;
  variant=&quot;solid&quot;
  icon=&quot;arrow-right&quot;
  iconPosition=&quot;right&quot;
/&gt;

### Devstral 2 si necesitas:

- **Despliegue local**: Modelo pequeno de 24B corre en GPUs de consumidor
- **Razonamiento denso**: Todos los parametros activos para trabajo coherente de repo completo
- **Agente de terminal**: Integracion nativa con Mistral Vibe CLI
- **Privacidad de datos**: Pesos abiertos, ejecuta todo localmente

&lt;Button
  text=&quot;Try Devstral 2&quot;
  url=&quot;https://console.mistral.ai/&quot;
  size=&quot;lg&quot;
  color=&quot;blue&quot;
  variant=&quot;solid&quot;
  icon=&quot;arrow-right&quot;
  iconPosition=&quot;right&quot;
/&gt;

Cualquiera de estos cinco modelos te ahorrara dinero comparado con Claude Sonnet 4.5. GLM-5 lidera en benchmarks de codificacion, Kimi K2.5 es el unico con vision, MiniMax M2.5 es el mas economico con puntuaciones de nivel fronterizo, Qwen-Max es el mas versatil, y Devstral 2 es el mejor para uso local/privado. Elige el que se ajuste a tu flujo de trabajo y presupuesto.

&lt;Notice type=&quot;success&quot; title=&quot;Listo para empezar?&quot;&gt;

Los cinco modelos estan disponibles a traves de sus respectivos proveedores y OpenRouter. Elige uno, cambia tu clave API y empieza a codificar.

&lt;/Notice&gt;</content:encoded><category>ai</category><category>llm</category></item><item><title>Instalar UsulNet Docker: Plataforma de Gestion de Contenedores Todo en Uno</title><link>https://www.bitdoze.com/es/instalar-usulnet/</link><guid isPermaLink="true">https://www.bitdoze.com/es/instalar-usulnet/</guid><description>Guia paso a paso para instalar UsulNet con Docker Compose. Cubre configuracion de produccion con PostgreSQL, Redis, NATS, escaneo de seguridad, despliegue multi-nodo, proxy inverso y configuracion RBAC.</description><pubDate>Wed, 11 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import { Picture } from &quot;astro:assets&quot;;
import usulnetDashboard from &quot;@assets/images/26/02/usulnet-dashboard.png&quot;;
import usulnetContainers from &quot;@assets/images/26/02/usulnet-containers.png&quot;;
import usulnetSecurity from &quot;@assets/images/26/02/usulnet-security.png&quot;;
import usulnetStacks from &quot;@assets/images/26/02/usulnet-stacks.png&quot;;
import usulnetNodes from &quot;@assets/images/26/02/usulnet-nodes.png&quot;;

Me encontre con [UsulNet](https://usulnet.com/) mientras navegaba GitHub por herramientas de gestion Docker. Me llamo la atencion porque intenta ser todo en un binario: gestion de contenedores, escaneo de seguridad, configuracion de proxy inverso, backups, monitoreo, orquestacion multi-nodo. Esa es una lista larga de features para un proyecto que recien lanzo su primer beta publica (v26.2.0) en Febrero 2026.

He estado escribiendo sobre herramientas en este espacio recientemente, incluyendo [Arcane](/es/instalar-arcane/) y [Dockhand](/es/instalar-dockhand/). UsulNet toma un enfoque diferente de ambos. Donde Arcane se enfoca en ser una UI Docker limpia y open source con GitOps, y Dockhand se inclina por el escaneo de seguridad y auto-actualizaciones, UsulNet quiere reemplazar todo tu stack de herramientas de gestion. Si realmente logra eso es una pregunta justa, pero la ambicion es real.

## Lo que hace UsulNet

UsulNet es una plataforma de gestion Docker self-hosted escrita en Go. Compila a un unico binario de ~50 MB sin dependencias de runtime. Sin Node.js, sin Python, sin framework frontend pesado. La UI es HTML server-rendered usando plantillas Templ, Tailwind CSS, Alpine.js y HTMX.

&lt;Picture
  src={usulnetDashboard}
  alt=&quot;Dashboard de UsulNet mostrando estado de contenedores, utilizacion de recursos y puntaje de seguridad&quot;
/&gt;

Esto es lo que obtienes out of the box:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Gestion completa de ciclo de vida de contenedores con operaciones bulk, estadisticas, exec, navegador de filesystem&lt;/li&gt;
&lt;li&gt;Despliegue de stacks Docker Compose con catalogo de plantillas integrado&lt;/li&gt;
&lt;li&gt;Escaneo de vulnerabilidades Trivy con puntaje de seguridad (0-100 por contenedor)&lt;/li&gt;
&lt;li&gt;Generacion de SBOM en formatos CycloneDX y SPDX&lt;/li&gt;
&lt;li&gt;RBAC con mas de 44 permisos granulares y roles personalizados&lt;/li&gt;
&lt;li&gt;2FA/TOTP, autenticacion LDAP, OIDC&lt;/li&gt;
&lt;li&gt;Monitoreo con reglas de alerta y 11 canales de notificacion&lt;/li&gt;
&lt;li&gt;Backups programados a S3, local, Azure Blob, GCS, Backblaze B2, SFTP&lt;/li&gt;
&lt;li&gt;Integracion Caddy y Nginx Proxy Manager para proxy inverso&lt;/li&gt;
&lt;li&gt;Arquitectura multi-nodo master/agent con mensajeria NATS y mTLS&lt;/li&gt;
&lt;li&gt;Editor de codigo Monaco y Neovim ejecutandose en el navegador&lt;/li&gt;
&lt;li&gt;Conexiones SSH, RDP, navegador de bases de datos, navegador LDAP, integracion Git&lt;/li&gt;
&lt;li&gt;API REST con docs OpenAPI 3.0 y streams WebSocket&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

Esa lista es larga, y sere honesto, no he probado cada feature individual. La gestion de contenedores central, despliegue de stacks y escaneo de seguridad funcionan bien. Algunas de las features mas de nicho como el Neovim en navegador y conexiones RDP se sienten como items bonus que pueden o no importarte.

## Como se compara UsulNet con otros gestores Docker

Si vienes de [Arcane](/es/instalar-arcane/) o [Dockhand](/es/instalar-dockhand/), o mirando la [comparacion Arcane vs Dockhand](/es/arcane-vs-dockhand/), asi es como UsulNet encaja:

| | UsulNet | Arcane | Dockhand |
|---|---|---|---|
| Licencia | AGPL-3.0 | BSD-3-Clause | BSL 1.1 |
| Backend | Go (binario unico) | Go | Bun + SvelteKit |
| Frontend | Templ + HTMX + Alpine.js | SvelteKit | SvelteKit 2 / Svelte 5 |
| Escaneo vuln | Trivy (integrado) | No | Grype/Trivy |
| RBAC | Si (44+ permisos) | No | Solo nivel Enterprise |
| Multi-nodo | NATS + agentes mTLS | arcane-headless | Hawser |
| Proxy inverso | Integracion Caddy + NPM | No | No |
| Backups | S3, local, Azure, GCS, B2, SFTP | No | No |
| Monitoreo/alertas | Integrado con 11 canales | No | No |
| Navegador DB | PostgreSQL, MySQL, MongoDB, Redis, SQLite | No | No |
| Editor de codigo | Monaco + Neovim | No | No |
| GitOps | Auto-deploy en Git push | GitOps integrado | Git + webhooks |
| Docker Swarm | Si | No | No |
| Estado | Beta (v26.2.0, primer release) | Stable (desde 2022) | v1 (desde Dic 2025) |
| Precios | Gratis CE (2 nodos, 3 usuarios), Business desde EUR79/nodo/ano | Gratis | Gratis homelab, SMB $499/host/ano |

UsulNet tiene el conjunto de features mas amplio de los tres, pero tambien es el mas nuevo. Arcane ha estado desde 2022 con mas de 1,800 commits y 35 contribuidores. UsulNet tiene 11 commits y un desarrollador. Esa brecha importa cuando encuentras un caso extremo a las 2am.

&lt;Notice type=&quot;info&quot; title=&quot;Software beta&quot;&gt;
UsulNet esta en beta publica. Es funcional, pero espera bordes rugosos. El desarrollador esta enviando actualizaciones activamente, pero este es un proyecto solo por ahora. Si necesitas algo probado en batalla, mira [Arcane](/es/instalar-arcane/) primero.
&lt;/Notice&gt;

## Requisitos previos

Antes de empezar, necesitas:

- Un servidor Linux (VPS o maquina local). Recomiendo [Hetzner](https://go.bitdoze.com/hetzner), [Hostinger](https://go.bitdoze.com/hostinger-vps) para hosting VPS
- Docker y Docker Compose v2 instalados
- Al menos 2 GB RAM (4 GB recomendados)
- Puertos 8080 (HTTP) y 7443 (HTTPS) disponibles

&lt;Button link=&quot;https://go.bitdoze.com/hetzner&quot; text=&quot;Hetzner VPS&quot; /&gt;
&lt;Button link=&quot;https://go.bitdoze.com/hostinger-vps&quot; text=&quot;Hostinger VPS&quot; /&gt;
&lt;Button link=&quot;https://go.bitdoze.com/do&quot; text=&quot;DigitalOcean $100 Gratis&quot; /&gt;
&lt;Button link=&quot;https://go.bitdoze.com/vultr&quot; text=&quot;Vultr $100 Gratis&quot; /&gt;

O usa un [Mini PC como servidor casero](https://www.bitdoze.com/best-mini-pc-home-server/).

### Instalar Docker

Si no tienes Docker aun:

```sh
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  &quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  jammy stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-compose
```

Recorrido completo: [Instalar Docker y Docker-compose para Ubuntu](https://www.bitdoze.com/install-docker-ubuntu-arm/).

## Instalar UsulNet con Docker Compose

UsulNet necesita PostgreSQL, Redis y NATS junto a la aplicacion principal. Eso es mas partes moviles que Arcane (que corre como un unico contenedor) o Dockhand (contenedor unico con PostgreSQL opcional). La compensacion es que obtienes gestion de sesiones proper, caching y mensajeria inter-nodo integrados.

### Instalacion rapida (un comando)

La forma mas rapida de empezar:

```bash
curl -fsSL https://raw.githubusercontent.com/fr4nsys/usulnet/main/deploy/install.sh | bash
```

Esto descarga el archivo compose de produccion, genera todos los secretos automaticamente e inicia todo. Estaras listo en unos 60 segundos. Accede en `https://ip-de-tu-servidor:7443` con credenciales por defecto `admin` / `usulnet`.

Aun recomendare el metodo manual de abajo para que sepas que hay en el archivo compose y puedas personalizarlo.

### Instalacion manual con Docker Compose (recomendado)

Crea un directorio para UsulNet:

```bash
mkdir -p /opt/usulnet &amp;&amp; cd /opt/usulnet
```

Descarga el archivo compose de produccion y template de environment:

```bash
curl -fsSL https://raw.githubusercontent.com/fr4nsys/usulnet/main/deploy/docker-compose.prod.yml -o docker-compose.yml
curl -fsSL https://raw.githubusercontent.com/fr4nsys/usulnet/main/deploy/.env.example -o .env
```

Genera los secretos. Necesitas una contrasena de base de datos, un JWT secret y una clave de encripcion:

```bash
sed -i &quot;s|CHANGE_ME_GENERATE_RANDOM_PASSWORD|$(openssl rand -base64 24 | tr -dc &apos;a-zA-Z0-9&apos; | head -c 32)|&quot; .env
sed -i &quot;s|CHANGE_ME_GENERATE_WITH_OPENSSL_RAND_HEX_32|$(openssl rand -hex 32)|&quot; .env
sed -i &quot;s|CHANGE_ME_GENERATE_WITH_OPENSSL_RAND_HEX_32|$(openssl rand -hex 32)|&quot; .env
```

O abre el archivo `.env` y llena los valores manualmente. Tu eleccion.

Inicia todo:

```bash
docker compose up -d
```

Abre `https://ip-de-tu-servidor:7443` en tu navegador. UsulNet genera un certificado TLS self-signed en el primer inicio, asi que obtendras una advertencia del navegador. Inicia sesion con `admin` / `usulnet` y cambia la contrasena de inmediato.

&lt;Notice type=&quot;warning&quot; title=&quot;Cambia las credenciales por defecto&quot;&gt;
El login por defecto es `admin` / `usulnet`. Cambia la contrasena inmediatamente despues del primer login. Ve a la configuracion de tu perfil para actualizarla. Tambien habilita 2FA mientras estas ahi.
&lt;/Notice&gt;

### Que incluye el archivo compose

Esto es lo que se despliega:

```yaml
services:
  usulnet:
    image: ghcr.io/fr4nsys/usulnet:latest
    ports:
      - &quot;8080:8080&quot;    # HTTP
      - &quot;7443:7443&quot;    # HTTPS (auto-TLS)
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - usulnet-data:/var/lib/usulnet
    environment:
      - USULNET_DATABASE_URL=postgres://usulnet:secret@postgres:5432/usulnet?sslmode=disable
      - USULNET_REDIS_URL=redis://redis:6379/0
      - USULNET_NATS_URL=nats://nats:4222
      - USULNET_SECURITY_JWT_SECRET=tu-secret-key-min-32-chars-largo
      - USULNET_SECURITY_CONFIG_ENCRYPTION_KEY=tu-64-hex-char-aes-256-key-aqui
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_started
      nats:
        condition: service_started
    restart: unless-stopped

  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: usulnet
      POSTGRES_USER: usulnet
      POSTGRES_PASSWORD: secret
    volumes:
      - postgres-data:/var/lib/postgresql/data
    healthcheck:
      test: [&quot;CMD-SHELL&quot;, &quot;pg_isready -U usulnet&quot;]
      interval: 5s
      timeout: 5s
      retries: 5
    restart: unless-stopped

  redis:
    image: redis:7-alpine
    command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru
    volumes:
      - redis-data:/data
    restart: unless-stopped

  nats:
    image: nats:2.10-alpine
    command: [&quot;--jetstream&quot;, &quot;--store_dir&quot;, &quot;/data&quot;]
    volumes:
      - nats-data:/data
    restart: unless-stopped

volumes:
  usulnet-data:
  postgres-data:
  redis-data:
  nats-data:
```

Cuatro contenedores en total. PostgreSQL almacena todos los datos de la aplicacion, Redis maneja sesiones y caching, NATS proporciona la capa de mensajeria para comunicacion multi-nodo (incluso en modo standalone, UsulNet espera que este ahi).

&lt;Notice type=&quot;info&quot; title=&quot;El socket Docker es solo lectura&quot;&gt;
Nota que el socket Docker esta montado como `:ro` (solo lectura). UsulNet todavia funciona bien para gestion de contenedores con un montaje de socket solo lectura porque la API Docker maneja operaciones de escritura a traves del socket independientemente del flag de montaje. El flag `:ro` solo previene que UsulNet modifique el archivo socket mismo.
&lt;/Notice&gt;

## Gestion de contenedores y stacks

La gestion de contenedores funciona mas o menos como esperarias. Obtienes una lista de todos los contenedores en ejecucion con estadisticas de CPU y memoria en tiempo real, y puedes iniciar, detener, reiniciar, pausar, matar o removerlos individualmente o en bulk.

&lt;Picture
  src={usulnetContainers}
  alt=&quot;Interfaz de gestion de contenedores UsulNet mostrando lista con estadisticas en tiempo real&quot;
/&gt;

Lo que encontre mas interesante es el despliegue de stacks. Puedes desplegar stacks compose de tres formas:

&lt;Tabs&gt;
  &lt;Tab name=&quot;Desde YAML&quot;&gt;
    Pega o escribe un archivo compose directamente en el editor web. UsulNet valida el YAML antes de desplegar. El editor es Monaco (el mismo que usa VS Code), asi que obtienes syntax highlighting y autocomplete.
  &lt;/Tab&gt;

  &lt;Tab name=&quot;Desde Git&quot;&gt;
    Conecta un repositorio Git (Gitea, GitHub o GitLab) y despliega stacks desde archivos compose en el repo. Puedes configurar reglas de auto-deploy que redespliegan cuando pusheas cambios a una rama especifica.
  &lt;/Tab&gt;

  &lt;Tab name=&quot;Desde catalogo&quot;&gt;
    UsulNet tiene un catalogo de stacks integrado con plantillas pre-configuradas para aplicaciones comunes. Elige una, ajusta la configuracion y despliega. Bueno para levantar rapidamente algo que quieres probar.
  &lt;/Tab&gt;
&lt;/Tabs&gt;

&lt;Picture
  src={usulnetStacks}
  alt=&quot;Interfaz de despliegue de stacks UsulNet con editor compose y catalogo de plantillas&quot;
/&gt;

El navegador de filesystem de contenedor y terminal web ambos funcionan. Puedes navegar archivos dentro de contenedores en ejecucion, editarlos con el editor Monaco y abrir sesiones exec. La terminal usa xterm.js, la misma libreria que usan la mayoria de terminales web. Es suficientemente responsiva para trabajo interactivo.

## Escaneo de seguridad con Trivy

UsulNet integra Trivy para escaneo de vulnerabilidades. Esto corre localmente en tu servidor y no envia datos a servicios externos.

&lt;Picture
  src={usulnetSecurity}
  alt=&quot;Interfaz de escaneo de seguridad UsulNet mostrando resultados de vulnerabilidades y puntaje de seguridad&quot;
/&gt;

Para habilitarlo, asegurate de que Trivy este configurado en tu `config.yaml` o via variables de entorno:

```yaml
trivy:
  enabled: true
  cache_dir: /var/lib/usulnet/trivy
  timeout: 5m
  severity: CRITICAL,HIGH,MEDIUM
  ignore_unfixed: false
  update_db_on_start: true
```

O configura `USULNET_TRIVY_ENABLED=true` en tu environment.

Lo que distingue esto del escaneo de Dockhand es el puntaje de seguridad. Cada contenedor obtiene un puntaje 0-100 basado en los resultados del escaneo, y obtienes un puntaje agregado a traves de toda tu infraestructura. Tambien hay seguimiento de tendencias, asi que puedes ver si tu postura de seguridad esta mejorando o empeorando con el tiempo.

UsulNet tambien genera SBOMs (Software Bill of Materials) en formatos CycloneDX y SPDX. Si necesitas documentar que esta corriendo en tus contenedores para propositos de compliance, eso esta integrado.

&lt;Accordion label=&quot;El primer escaneo toma un rato&quot; group=&quot;scanning&quot; expanded=&quot;true&quot;&gt;

El primer escaneo de vulnerabilidades descarga la base de datos de Trivy, que son unos pocos cientos de MB. Escaneos subsecuentes son mas rapidos porque la base de datos esta cacheada localmente. Si el primer escaneo hace timeout, aumenta el valor `timeout` en la configuracion de Trivy.

&lt;/Accordion&gt;

## Configurar autenticacion

UsulNet soporta multiples metodos de autenticacion. La Community Edition gratuita incluye TOTP 2FA. OIDC y LDAP requieren licencia Business.

### 2FA/TOTP (gratis)

Cada usuario puede habilitar autenticacion de dos factores basada en TOTP desde la configuracion de su perfil. Funciona con cualquier app autenticadora (Google Authenticator, Authy, etc.). Se generan codigos de backup para que no quedes bloqueado.

### OIDC/OAuth2 (licencia Business)

Si ejecutas un proveedor de identidad como Authentik, Keycloak, o quieres usar login GitHub/Google/Microsoft, configura OIDC en los ajustes. Necesitaras:

- Client ID
- Client secret
- Issuer URL / Discovery endpoint

Los usuarios son aprovisionados automaticamente en el primer login OIDC. Puedes mapear grupos OIDC a roles UsulNet para asignacion automatica de permisos.

### LDAP/Active Directory (licencia Business)

Para entornos enterprise, UsulNet puede autenticar contra directorios LDAP. Configura el proveedor LDAP con tu bind DN, search base y mapeos de atributos. Tambien hay un navegador LDAP integrado para probar y depurar tu configuracion de directorio.

## Gestion multi-nodo

UsulNet usa una arquitectura master/agent para gestionar Docker a traves de multiples hosts. La capa de comunicacion es NATS con JetStream para persistencia, y todo el trafico agent-master esta encriptado con mTLS.

&lt;Picture
  src={usulnetNodes}
  alt=&quot;Gestion multi-nodo UsulNet mostrando nodos agente conectados&quot;
/&gt;

Hay tres modos:

- **standalone**: nodo unico, el por defecto
- **master**: plano de control que gestiona agentes
- **agent**: nodo worker que se conecta a un master

### Desplegando agentes

Puedes desplegar agentes a hosts remotos directamente desde la UI web. Ve a **Nodes &gt; Add Node**, ingresa las credenciales SSH para la maquina remota y haz clic en **Deploy Agent**. UsulNet hace SSH al host remoto, instala el contenedor agente y lo configura automaticamente.

O despliega manualmente en la maquina remota:

```yaml
# config.yaml en el agente
mode: agent
agent:
  master_url: nats://master-nats:4222
  name: worker-01
  token: tu-auth-token
  heartbeat_interval: 30s
  metrics_interval: 1m
```

El agente envia heartbeats y metricas a intervalos configurables. Si un agente se desconecta, el dashboard muestra el cambio de estado. Puedes cambiar entre hosts gestionados desde cualquier pagina en la UI.

Esto es diferente de como Arcane y Dockhand manejan multi-nodo. Arcane usa `arcane-headless`, un agente ligero que se conecta saliente. Dockhand usa Hawser, que tiene traversia NAT. El enfoque basado en NATS de UsulNet es mas involucrado de configurar pero te da mensajeria persistente y mejor confiabilidad para despliegues mas grandes.

## Integracion de proxy inverso

Esto es algo que ni Arcane ni Dockhand ofrecen. UsulNet puede configurar Caddy o Nginx Proxy Manager directamente desde su UI.

&lt;Tabs&gt;
  &lt;Tab name=&quot;Caddy&quot;&gt;
    Si ejecutas Caddy, habilita la integracion en tu config:

    ```yaml
    caddy:
      enabled: true
      admin_url: http://caddy:2019
      acme_email: admin@ejemplo.com
    ```

    Luego puedes crear hosts proxy, gestionar certificados y configurar rutas desde el dashboard de UsulNet. Caddy maneja HTTPS automatico con Let&apos;s Encrypt.
  &lt;/Tab&gt;

  &lt;Tab name=&quot;Nginx Proxy Manager&quot;&gt;
    Integracion completa de Nginx Proxy Manager tambien esta disponible. Gestiona hosts proxy, certificados SSL, redirecciones, streams TCP/UDP y listas de acceso, todo desde dentro de UsulNet.
  &lt;/Tab&gt;
&lt;/Tabs&gt;

Si quieres poner UsulNet mismo detras de un proxy inverso, sirve en puerto 8080 (HTTP) y 7443 (HTTPS) por defecto. El soporte WebSocket es requerido para logs en vivo, terminal y metricas en tiempo real.

&lt;Tabs&gt;
  &lt;Tab name=&quot;Nginx&quot;&gt;

```nginx
server {
    listen 443 ssl http2;
    server_name usulnet.tudominio.com;

    ssl_certificate /ruta/a/cert.pem;
    ssl_certificate_key /ruta/a/key.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection &quot;upgrade&quot;;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
```

  &lt;/Tab&gt;

  &lt;Tab name=&quot;Traefik&quot;&gt;
    Agrega labels al servicio UsulNet:

    ```yaml
    labels:
      - &quot;traefik.enable=true&quot;
      - &quot;traefik.http.routers.usulnet.rule=Host(`usulnet.tudominio.com`)&quot;
      - &quot;traefik.http.routers.usulnet.entrypoints=websecure&quot;
      - &quot;traefik.http.routers.usulnet.tls.certresolver=letsencrypt&quot;
      - &quot;traefik.http.services.usulnet.loadbalancer.server.port=8080&quot;
    ```

    Configuracion completa de Traefik: [Como usar Traefik como proxy inverso en Docker](https://www.bitdoze.com/traefik-proxy-docker/).
  &lt;/Tab&gt;

  &lt;Tab name=&quot;Cloudflare Tunnels&quot;&gt;
    Apunta un tunnel a `http://localhost:8080`. El manejo de SSL y WebSocket es automatico. Sin puertos que abrir.
  &lt;/Tab&gt;
&lt;/Tabs&gt;

## Configuracion de backups

UsulNet puede respaldar contenedores individuales, volumenes o stacks enteros en un horario. Los backends de almacenamiento incluyen filesystem local, AWS S3, MinIO, Azure Blob, Google Cloud Storage, Backblaze B2 y SFTP.

Configura el almacenamiento en tu `config.yaml`:

```yaml
storage:
  type: s3
  s3:
    endpoint: s3.amazonaws.com
    bucket: usulnet-backups
    region: us-east-1
    access_key: TU_KEY
    secret_key: TU_SECRET
  backup:
    compression: zstd
    compression_level: 3
    default_retention_days: 30
```

O usa almacenamiento local:

```yaml
storage:
  type: local
  path: /var/lib/usulnet/backups
```

Los backups se comprimen con gzip o zstd (tu eleccion) y pueden restaurarse con un clic desde la UI.

## Referencia de variables de entorno

Todos los valores de config pueden configurarse via variables de entorno con el prefijo `USULNET_`:

| Variable | Default | Que hace |
|---|---|---|
| `USULNET_SERVER_PORT` | `8080` | Puerto HTTP |
| `USULNET_SERVER_HTTPS_PORT` | `7443` | Puerto HTTPS |
| `USULNET_DATABASE_URL` | none | String de conexion PostgreSQL (requerido) |
| `USULNET_REDIS_URL` | none | String de conexion Redis (requerido) |
| `USULNET_NATS_URL` | none | String de conexion NATS (requerido) |
| `USULNET_SECURITY_JWT_SECRET` | none | Secreto de firma JWT, min 32 chars (requerido) |
| `USULNET_SECURITY_CONFIG_ENCRYPTION_KEY` | none | Clave AES-256, 64 hex chars (requerido) |
| `USULNET_TRIVY_ENABLED` | `false` | Habilitar escaneo de vulnerabilidades Trivy |
| `USULNET_MODE` | `standalone` | Modo de operacion: standalone, master, agent |
| `USULNET_SERVER_RATE_LIMIT_RPS` | `100` | Rate limit por segundo |

## Licenciamiento y precios

UsulNet tiene licencia AGPL-3.0. El codigo fuente esta en [GitHub](https://github.com/fr4nsys/usulnet) y puedes usarlo, modificarlo y distribuirlo libremente. El catch con AGPL es que si modificas UsulNet y lo haces disponible a traves de una red, tienes que liberar tus cambios bajo la misma licencia.

| Nivel | Costo | Que obtienes |
|---|---|---|
| Community (CE) | Gratis | Gestion Docker completa, escaneo, monitoreo, 2 nodos, 3 usuarios, 1 equipo |
| Business | EUR79/nodo/ano | Nodos ilimitados, OIDC, LDAP, roles personalizados, export log de auditoria, API keys |
| Enterprise | Custom | Todo ilimitado, SSO SAML, modo HA, white label, soporte dedicado |

La Community Edition esta limitada a 2 nodos, 3 usuarios y 1 equipo. La autenticacion OIDC y LDAP requiere licencia Business. Eso es mas restrictivo que Arcane (totalmente gratis, sin limites) o Dockhand (nivel gratuito con OIDC incluido), pero tambien obtienes muchas mas features en la CE que cualquiera de esos ofrecen.

## Solucion de problemas

&lt;Accordion label=&quot;UsulNet no inicia - errores de conexion PostgreSQL&quot; group=&quot;troubleshoot&quot; expanded=&quot;true&quot;&gt;

Asegurate de que el contenedor de base de datos esta healthy antes de que UsulNet intente conectarse. El `depends_on` con `condition: service_healthy` en el archivo compose deberia manejar esto, pero si estas iniciando servicios manualmente, PostgreSQL necesita estar completamente listo primero.

Verifica la salud de PostgreSQL:

```bash
docker exec usulnet-postgres pg_isready -U usulnet
```

Si retorna &quot;accepting connections&quot;, la base de datos esta bien y el problema probablemente esta en tu string de conexion.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Advertencias de certificado self-signed&quot; group=&quot;troubleshoot&quot;&gt;

UsulNet genera un certificado TLS self-signed en el primer inicio para HTTPS en el puerto 7443. Tu navegador mostrara una advertencia. Para produccion, pon un proxy inverso proper con certificados Let&apos;s Encrypt frente a el, o configura certificados TLS personalizados en el config:

```yaml
server:
  tls:
    enabled: true
    cert_file: /ruta/a/cert.pem
    key_file: /ruta/a/key.pem
```

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Escaneos Trivy fallan o timeout&quot; group=&quot;troubleshoot&quot;&gt;

El primer escaneo descarga la base de datos de vulnerabilidades, que puede ser grande. Aumenta el timeout:

```yaml
trivy:
  timeout: 10m
```

Tambien verifica que el contenedor tiene acceso a internet saliente para descargar la base de datos. Si estas detras de un proxy, configura las variables de entorno `HTTP_PROXY` y `HTTPS_PROXY` en el contenedor UsulNet.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Problemas de conexion NATS&quot; group=&quot;troubleshoot&quot;&gt;

Si ves errores de conexion NATS en los logs, asegurate de que el contenedor NATS esta ejecutandose y accesible. El directorio de datos de JetStream por defecto necesita permisos de escritura:

```bash
docker logs usulnet-nats
```

Si NATS esta ejecutandose pero UsulNet no puede conectarse, verifica que ambos contenedores esten en la misma red Docker.

&lt;/Accordion&gt;

## Mi opinion despues de probar

UsulNet es ambicioso. Un desarrollador, primer beta publica, y la lista de features parece un producto que ha estado en desarrollo por anos. La gestion de contenedores, despliegue de stacks y escaneo Trivy funcionan. La UI es limpia y responsiva, y el backend Go es rapido.

Lo que me preocupa es la madurez del proyecto. Once commits, un contribuidor, primer release. Compara eso con Arcane (mas de 1,800 commits, 35 contribuidores, stable desde 2022) y ves la brecha. La licencia AGPL tambien vale la pena pensar si planeas modificar el fuente, ya que estas obligado a compartir tus cambios.

El stack de cuatro contenedores (PostgreSQL, Redis, NATS, mas la app misma) es mas pesado que el contenedor unico de Arcane o el enfoque de contenedor unico de Dockhand. En un VPS pequeno con 2 GB RAM, esa sobrecarga es notable. En una maquina con 4+ GB, no es gran cosa.

Si quieres el conjunto de features mas amplio en una herramienta de gestion Docker y estas confortable ejecutando software beta, UsulNet vale la pena probar. Si quieres estabilidad y un historial probado, [Arcane](/es/instalar-arcane/) es la opcion mas segura. Si el escaneo de seguridad es tu prioridad y quieres algo mas ligero, revisa [Dockhand](/es/instalar-dockhand/).

## Articulos relacionados

- [Mejores alternativas a Portainer en 2026](/es/alternativas-portainer/) - cinco UIs de gestion Docker comparadas
- [Instalar Arcane](/es/instalar-arcane/) - gestor Docker open source con GitOps
- [Instalar Dockhand](/es/instalar-dockhand/) - gestor Docker enfocado en seguridad
- [Arcane vs Dockhand](/es/arcane-vs-dockhand/) - comparacion de otras dos UIs de gestion Docker
- [Instalar Dockge](/es/instalar-dockge/) - otra UI de gestion Docker
- [Mejores contenedores Docker para servidor casero](/docker-containers-home-server/) - que ejecutar una vez configurado tu gestor
- [Mejores paneles self-hosted](/best-self-hosted-panels/) - paneles de gestion de servidor comparados
- [Proxy inverso Traefik para Docker](/traefik-proxy-docker/) - configuracion proper de proxy inverso
- [Auto-actualizacion Docker con Tugtainer](/tugtainer-docker-autoupdate/) - mantener contenedores actualizados
- [Herramientas de monitoreo de servidor](/sever-monitoring/) - monitoreando tu host Docker</content:encoded><category>self-hosting</category><category>docker</category><category>self-hosted</category></item><item><title>Alternativas a OpenClaw Que Vale la Pena Probar en 2026</title><link>https://www.bitdoze.com/es/alternativas-openclaw/</link><guid isPermaLink="true">https://www.bitdoze.com/es/alternativas-openclaw/</guid><description>Una mirada a NanoClaw, nanobot, memU, bitdoze-bot, PicoClaw, IronClaw y ZeroClaw como alternativas self-hosted a OpenClaw para ejecutar tu propio asistente de IA 24/7.</description><pubDate>Tue, 10 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import Notice from &quot;@components/widgets/Notice.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import YouTubeEmbed from &quot;@components/widgets/YouTubeEmbed.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

OpenClaw (el proyecto que paso por los cambios de nombre de Clawdbot y Moltbot) hizo que mucha gente se diera cuenta de que podian ejecutar un asistente de IA en su propio servidor. Siempre encendido, siempre accesible a traves de Telegram o Slack, y no dependiente del SaaS de nadie. Lo he estado ejecutando yo mismo y escribi una [guia de configuracion completa](/es/guia-configuracion-openclaw/) si quieres probar el original.

Pero OpenClaw ya no es la unica opcion. Varios proyectos han aparecido con diferentes enfoques sobre la misma idea. Algunos son mas pequenos y enfocados. Algunos intentan hacer mas. He estado mirando cuatro de ellos, y cada uno hace compensaciones diferentes que vale la pena conocer.

&lt;Notice type=&quot;info&quot; title=&quot;Lo que cubre esto&quot;&gt;
Seis proyectos de bots de IA self-hosted que funcionan como alternativas a OpenClaw. Cada seccion incluye que hace el proyecto, en que es diferente, y como hacerlo funcionar.
&lt;/Notice&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Nueva adicion&quot;&gt;
ZeroClaw fue agregado a este resumen el 16 de febrero de 2026. Es un asistente basado en Rust con un binario de 3.4MB y menos de 5MB de uso de RAM. Ver seccion 7 o nuestra [guia completa de configuracion de ZeroClaw](/es/guia-configuracion-zeroclaw/).
&lt;/Notice&gt;

## Comparacion rapida

Antes de entrar en cada proyecto, aqui esta como se comparan:

| Feature | NanoClaw | nanobot | memU | bitdoze-bot | PicoClaw | IronClaw | ZeroClaw |
|---|---|---|---|---|---|---|---|
| **Estrellas GitHub** | ~10 | 15.4k | 8.7k | 7 | 1.1k | 368 | Nuevo |
| **Lenguaje** | Python | Python | Python + Rust | Python | Go | Rust | Rust |
| **Tamano del codigo** | ~3k lineas | ~3.5k lineas | Mas grande (framework) | Medio | Pequeno (binario unico) | Medio-grande | Medio (1,017 tests) |
| **Licencia** | MIT | MIT | Apache 2.0 | MIT | MIT | Apache 2.0 / MIT | MIT |
| **Canales de chat** | Telegram | Telegram, Discord, WhatsApp, Slack, Feishu, DingTalk, Email, QQ | Bot en memu.bot | Discord | Telegram, Discord | REPL, HTTP, Telegram, Slack (WASM) | CLI, Telegram, Discord, Slack, iMessage, Matrix, WhatsApp, Webhook |
| **Memoria** | SQLite | Integrada | Jerarquica (feature principal) | Memoria Agno + aprendizaje | Basada en archivos workspace | PostgreSQL + pgvector (busqueda hibrida) | SQLite hibrida (FTS5 + vector coseno) |
| **Metodo de instalacion** | Docker / manual | pip (`nanobot-ai`) | pip (`memu-py`) | UV + manual | Binario unico / source | cargo build | cargo build / Docker |
| **Modelos locales** | Via OpenRouter | Soporte vLLM | Via proveedores custom | Compatible OpenAI | Via OpenRouter | Via NEAR AI | Ollama + 22 proveedores |
| **Features de seguridad** | FileGuard, ShellSandbox, PromptGuard | Basico | N/A (framework) | Permisos de herramientas, auditoria | Basico | Sandbox WASM, proteccion de credenciales, defensa inyeccion de prompts | Pareo gateway, sandbox, allowlists, secretos encriptados |
| **Multi-agente** | No | No | No (capa de memoria) | Si (equipos Agno) | No | Trabajos paralelos con workers aislados | No |

## 1. NanoClaw

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/ysz/nanoClaw&quot; variant=&quot;solid&quot; color=&quot;green&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

NanoClaw es el proyecto mas pequeno en esta lista. Alrededor de 3,000 lineas de Python, licencia MIT, solo Telegram. El autor lo construyo como un OpenClaw reducido que realmente puedes leer en una tarde.

Lo que llamo mi atencion es la capa de seguridad. La mayoria de estos bots le dan a la IA alguna forma de acceso a archivos y shell, y NanoClaw es el unico que construyo protecciones explicitas desde el inicio.

### Lo que hace

- Bot de Telegram que responde a mensajes y puede usar herramientas (acceso a archivos, comandos shell, busqueda web)
- Memoria basada en SQLite que persiste entre reinicios
- Dashboard web para monitorear conversaciones y memoria
- Agnostico de modelo a traves de OpenRouter, asi que eliges cualquier LLM que quieras
- Soporte Docker para despliegue

### Enfoque de seguridad

NanoClaw tiene tres mecanismos de seguridad integrados:

- **FileGuard**: Restringe de que directorios la IA puede leer y escribir. Defines rutas permitidas en configuracion.
- **ShellSandbox**: Los comandos shell se ejecutan en un entorno restringido. Sin situaciones de `rm -rf /`.
- **PromptGuard**: Filtra intentos de inyeccion de prompts antes de que lleguen al modelo.

Ninguno de estos es a prueba de balas, pero tenerlos pone a NanoClaw adelante de proyectos que simplemente le dan un shell a la IA y esperan lo mejor.

### Como empezar

&lt;Tabs&gt;
&lt;Tab name=&quot;Docker&quot;&gt;

```bash
git clone https://github.com/ysz/nanoClaw.git
cd nanoClaw
cp .env.example .env
# Edita .env con tu token de bot de Telegram y clave API de OpenRouter
docker compose up -d
```

&lt;/Tab&gt;
&lt;Tab name=&quot;Manual&quot;&gt;

```bash
git clone https://github.com/ysz/nanoClaw.git
cd nanoClaw
pip install -r requirements.txt
cp .env.example .env
# Edita .env con tus tokens
python main.py
```

&lt;/Tab&gt;
&lt;/Tabs&gt;

### Para quien es

Si quieres algo lo suficientemente pequeno para entender completamente, y solo necesitas Telegram, NanoClaw es una opcion solida. Las features de seguridad hacen menos estresante darle acceso a herramientas a la IA. La desventaja es una comunidad minuscula (10 estrellas al momento de escribir) y soporte solo para Telegram.

## 2. nanobot

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/HKUDS/nanobot&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

nanobot viene de HKUDS (Universidad de Hong Kong) y ha crecido rapido. 15,400 estrellas, 2,200 forks. El pitch es similar a NanoClaw pero mucho mas ambicioso: un bot ligero (~3,500 lineas de codigo) que se conecta a basicamente todas las plataformas de chat. Tenemos una [guia completa de configuracion de nanobot](/es/guia-configuracion-nanobot/) con MiniMax M2.5, GLM-5 y Brave Search si quieres probarlo.

### Lo que hace

- Se conecta a Telegram, Discord, WhatsApp, Slack, Feishu, DingTalk, Email y QQ
- Instalable via pip: `pip install nanobot-ai`
- Sistema de memoria integrado
- Soporta modelos locales a traves de vLLM
- Funciona con OpenRouter, Anthropic, OpenAI, DeepSeek, Groq, Gemini y otros
- Despliegue Docker disponible

La cobertura de canales es lo que distingue a nanobot. Si necesitas tu bot en WhatsApp y Discord y Slack al mismo tiempo, la mayoria de alternativas no hacen eso sin trabajo extra significativo.

### Configuracion

```bash
pip install nanobot-ai
nanobot init
# Sigue el asistente para configurar canales y claves API
nanobot start
```

Eso es realmente todo para una configuracion basica. El asistente `init` te guia eligiendo una plataforma de chat y conectando un proveedor LLM. Puedes agregar mas canales despues.

### Soporte de modelos locales

nanobot puede conectarse a un servidor vLLM local, lo que significa que puedes ejecutar todo el stack sin costos de API despues de la inversion inicial de hardware. Si ya tienes una configuracion Ollama o vLLM, apuntar nanobot a el es directo.

```bash
# Ejemplo: usando un endpoint vLLM local
nanobot config set llm.base_url http://localhost:8000/v1
nanobot config set llm.model tu-modelo-local
```

### Para quien es

nanobot es la opcion pragmatica si necesitas soporte multi-canal o quieres algo que puedes instalar con pip y tener funcionando en cinco minutos. El respaldo universitario y la gran comunidad significan que los bugs se arreglan y las features se agregan regularmente. La compensacion es que con tantas integraciones, la configuracion puede volverse densa. Nuestra [guia de nanobot](/es/guia-configuracion-nanobot/) cubre la configuracion paso a paso con proveedores como MiniMax M2.5 y GLM-5.

## 3. memU

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/NevaMind-AI/MemU&quot; variant=&quot;solid&quot; color=&quot;purple&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

memU es diferente de los otros proyectos aqui. No es realmente un chatbot. Es un framework de memoria construido para agentes 24/7, y resulta que incluye un bot (en memu.bot) como implementacion de referencia.

La idea central: la mayoria de los chatbots olvidan todo entre sesiones, e incluso los que tienen memoria solo hacen recuperacion basica. memU trata la memoria como un sistema de archivos, con categorias, items y referencias cruzadas, y trata de predecir lo que estas a punto de necesitar antes de que lo pidas.

### Como funciona la memoria

memU organiza todo en tres capas:

| Capa | Que almacena | Proposito |
|---|---|---|
| Recursos | Conversaciones crudas, documentos, imagenes | Datos originales |
| Items | Hechos extraidos, preferencias, skills | Conocimiento buscable |
| Categorias | Topicos auto-organizados | Navegacion y contexto |

La metafora de &quot;sistema de archivos&quot; significa que la memoria de tu agente se ve asi:

```
memory/
├── preferences/
│   ├── communication_style.md
│   └── topic_interests.md
├── knowledge/
│   ├── domain_expertise/
│   └── learned_skills/
└── context/
    ├── recent_conversations/
    └── pending_tasks/
```

Las memorias nuevas se auto-categorizan. Las memorias relacionadas se enlazan entre si. El sistema afirma 92% de precision en el benchmark Locomo, que prueba que tan bien los sistemas de memoria retienen y recuperan informacion en conversaciones largas.

### Comportamiento proactivo

Aqui es donde memU se vuelve interesante. En lugar de solo responder cuando se le pregunta, monitorea conversaciones y trata de anticipar lo que necesitaras despues. El agente puede:

- Pre-cargar contexto relevante antes de que lo pidas explicitamente
- Notar patrones en lo que estas trabajando y mostrar memorias relacionadas
- Borradores de items de accion del flujo de conversacion
- Aprender tus preferencias con el tiempo y ajustar respuestas

Si esto es util o molesto probablemente depende de tu tolerancia para sugerencias no solicitadas. Puedo ver funcionando bien para alguien que usa un asistente de IA todo el dia, menos para uso ocasional.

### Configuracion

&lt;Tabs&gt;
&lt;Tab name=&quot;Cloud&quot;&gt;

La version hosteada en [memu.so](https://memu.so) corre continuamente. Si quieres probar un sistema de memoria sin self-hosting, este es el camino mas rapido.

&lt;/Tab&gt;
&lt;Tab name=&quot;Self-hosted&quot;&gt;

```bash
pip install memu-py

# Prueba en memoria (sin base de datos necesaria)
export OPENAI_API_KEY=tu_clave
cd tests
python test_inmemory.py

# Con PostgreSQL para almacenamiento persistente
docker run -d \
  --name memu-postgres \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=postgres \
  -e POSTGRES_DB=memu \
  -p 5432:5432 \
  pgvector/pgvector:pg16

python test_postgres.py
```

&lt;/Tab&gt;
&lt;/Tabs&gt;

memU tambien soporta OpenRouter, asi que puedes enrutar a traves del proveedor de modelo que prefieras:

```python
from memu import MemoryService

service = MemoryService(
    llm_profiles={
        &quot;default&quot;: {
            &quot;provider&quot;: &quot;openrouter&quot;,
            &quot;base_url&quot;: &quot;https://openrouter.ai&quot;,
            &quot;api_key&quot;: &quot;tu_clave_api_openrouter&quot;,
            &quot;chat_model&quot;: &quot;anthropic/claude-3.5-sonnet&quot;,
        },
    },
)
```

### Para quien es

memU tiene mas sentido si estas construyendo tu propio agente y quieres una capa de memoria apropiada debajo. Tambien vale la pena mirarlo si estas frustrado con que tan superficial es la memoria en otros bots. El proyecto tiene 8,700 estrellas y una comunidad activa. La desventaja es la complejidad. Este no es un bot de &quot;clona y ejecuta&quot; como NanoClaw. Es un framework, y necesitaras integrarlo en algo.

## 4. bitdoze-bot

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/bitdoze/bitdoze_bot&quot; variant=&quot;solid&quot; color=&quot;red&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

Este es mi proyecto. Lo construi porque queria un bot de Discord que pudiera manejar multiples agentes especializados trabajando juntos, no solo un modelo respondiendo preguntas.

bitdoze-bot usa el [framework Agno](/agno-get-start/) para orquestacion multi-agente. Defines &quot;equipos&quot; de agentes en carpetas de workspace, cada agente con sus propias herramientas y personalidad, y un coordinador enruta los mensajes entrantes al especialista correcto.

Escribi una guia de construccion detallada: [Construye tu propio bot de Discord con IA con equipos Agno](/create-your-own-ai-agent/).

&lt;YouTubeEmbed
  url=&quot;https://www.youtube.com/embed/yoWGFO7tvpc&quot;
  label=&quot;Construi un Asistente de IA Personal en 90 Minutos&quot;
/&gt;

### Lo que hace

- Discord primero (responde mencion)
- Equipos multi-agente: un coordinador + agentes especialistas (codificacion, investigacion, ops, lo que definas)
- Configuracion basada en workspace: cada agente obtiene su propia carpeta con instrucciones, herramientas y permisos
- Memoria y aprendizaje: almacena contexto entre conversaciones y aprende de correcciones
- Heartbeat + cron: verificaciones de salud programadas y tareas recurrentes
- Permisos de herramientas y logging de auditoria
- Observabilidad: logs estructurados para cada ejecucion de agente

### La configuracion de equipos

El enfoque multi-agente es la principal diferencia de todo lo demas en esta lista. En lugar de un modelo tratando de hacer todo, divides responsabilidades:

```
workspaces/
├── main/
│   └── agent.yaml          # Coordinador - enruta a especialistas
├── coding/
│   └── agent.yaml          # Especialista de codificacion
├── research/
│   └── agent.yaml          # Especialista de investigacion web
└── ops/
    └── agent.yaml          # Especialista de ops de servidor
```

Cuando entra un mensaje, el coordinador decide que especialista lo maneja. Puedes empezar con solo el agente `main` y agregar especialistas segun los necesites.

### Como empezar

```bash
git clone https://github.com/bitdoze/bitdoze_bot.git
cd bitdoze_bot
cp .env.example .env
# Edita .env con token de Discord y claves API

# Instala con UV
uv sync
uv run python main.py
```

Necesitas Python 3.12+, un token de bot de Discord, y una clave API para tu proveedor de modelo.

### Para quien es

Si quieres ir mas alla de un chatbot de agente unico y experimentar con coordinacion multi-agente, este es el proyecto a mirar. La configuracion basada en workspace hace facil agregar nuevos especialistas sin tocar el codigo central. La compensacion es que es solo Discord y el proyecto mas pequeno aqui por conteo de estrellas. Pero es uno que uso diariamente, y el enfoque multi-agente ha valido la configuracion extra.

## 5. PicoClaw

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/sipeed/picoclaw&quot; variant=&quot;solid&quot; color=&quot;gray&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

PicoClaw toma el enfoque opuesto de todo lo demas en esta lista. En lugar de agregar features, las elimina. El proyecto es una reescritura en Go de nanobot que compila a un binario unico, usa menos de 10MB de RAM, y arranca en menos de un segundo. Sipeed (la compania de hardware RISC-V) lo construyo para ejecutarse en sus placas LicheeRV-Nano de $10, lo que dice mucho sobre el presupuesto de recursos con el que trabajaban.

Todo supuestamente fue escrito en un solo dia, con el agente de IA mismo manejando la mayor parte de la migracion a Go. Eso suena como un truco, pero el resultado realmente funciona. El binario corre en RISC-V, ARM y x86 sin cambios.

### Lo que hace

- Asistente de IA de binario unico, sin dependencias de runtime
- Soporte Telegram y Discord
- Acceso a herramientas: comandos shell, operaciones de archivos, busqueda web (via Brave Search API)
- Funciona con OpenRouter, Zhipu, Anthropic, OpenAI, Gemini, Groq y DeepSeek
- Almacenamiento de archivos basado en workspace para memoria y logs
- Modo CLI para uso local, modo gateway para canales de chat
- Transcripcion de mensajes de voz a traves del Whisper de Groq

### Comparacion de recursos

Los numeros aqui son dificiles de ignorar:

| Metrica | OpenClaw | nanobot | PicoClaw |
|---|---|---|---|
| **RAM** | &gt;1GB | &gt;100MB | menos de 10MB |
| **Inicio (core 0.8GHz)** | &gt;500s | &gt;30s | menos de 1s |
| **Costo minimo de hardware** | Mac Mini $599 | ~$50 SBC | ~$10 placa |

Si tienes un NanoKVM o MaixCAM por ahi, PicoClaw puede convertirlo en un asistente siempre encendido. Ese es un caso de uso que ninguno de los otros proyectos aqui puede tocar.

### Como empezar

```bash
# Descarga binario precompilado de releases, o compila desde source:
git clone https://github.com/sipeed/picoclaw.git
cd picoclaw
make build

# Inicializa configuracion
picoclaw onboard

# Edita ~/.picoclaw/config.json con tus claves API

# Chatea directamente
picoclaw agent -m &quot;Cuanto es 2+2?&quot;

# O inicia como gateway para Telegram/Discord
picoclaw gateway
```

### Para quien es

PicoClaw es la opcion si te importa la eficiencia de recursos por encima de todo, o si quieres ejecutar un bot en hardware que se ahogaria con Python. El codigo Go es pequeno y legible, y el despliegue de binario unico significa que no hay nada que instalar. La compensacion es que es nuevo (lanzado Febrero 2026), asi que el conjunto de features es mas limitado que nanobot, y la comunidad todavia se esta formando. Pero 1,100 estrellas en unos pocos dias sugieren que la gente esta prestando atencion. Para una configuracion completa paso a paso, ve nuestra [guia de configuracion de PicoClaw](/es/guia-configuracion-picoclaw/).

## 6. IronClaw

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/nearai/ironclaw&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;
&lt;Button text=&quot;Fork ZeroClaw&quot; link=&quot;https://github.com/theonlyhennygod/zeroclaw&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

IronClaw viene de NEAR AI y toma un enfoque security-first que va mucho mas alla de lo que los otros proyectos intentan. Es una reescritura completa en Rust del concepto de OpenClaw, y el principal punto de venta es el sandbox WASM. Cada herramienta no confiable se ejecuta dentro de un contenedor WebAssembly aislado con permisos basados en capacidades explicitas. Tus claves API nunca se exponen al codigo de herramientas. Las solicitudes HTTP solo van a hosts que has aprobado.

Si alguna vez te has sentido nervioso por darle acceso shell a un agente de IA en una caja con datos reales, IronClaw fue construido para esa ansiedad.

### Lo que hace

- Asistente de IA nativo en Rust con REPL, webhook HTTP y canales basados en WASM (Telegram, Slack)
- Sandbox WASM para toda ejecucion de herramientas con permisos basados en capacidades
- Proteccion de credenciales: los secretos se inyectan en el limite del host, el codigo de herramientas nunca los ve
- Defensa contra inyeccion de prompts con deteccion de patrones y sanitizacion de contenido
- Endpoint allowlisting para que el agente solo pueda alcanzar hosts que apruebas
- PostgreSQL con pgvector para memoria (busqueda hibrida texto completo + vector)
- Sistema heartbeat para tareas proactivas en segundo plano
- Ejecucion de trabajos paralelos con contextos aislados
- Auto-expansible: describe una herramienta que necesitas, e IronClaw la construye como modulo WASM
- Soporte de protocolo MCP para conectar servidores de herramientas externos

### El modelo de seguridad

Aqui es donde IronClaw se destaca. El pipeline de seguridad para ejecucion de herramientas se ve asi:

1. La solicitud de herramienta llega al validador de allowlist de endpoints
2. La solicitud se escanea por fugas de credenciales
3. Las credenciales se inyectan en el limite del host (el codigo de la herramienta nunca las tiene)
4. La solicitud se ejecuta dentro del sandbox WASM
5. La respuesta se escanea de nuevo por fugas de credenciales
6. El resultado retorna al agente

Tambien hay limites de tasa por herramienta y tapas de recursos (memoria, tiempo de CPU, duracion de ejecucion). Las reglas de politica te permiten establecer niveles de severidad para diferentes situaciones: bloquear, advertir, revisar o sanitizar.

Ningun otro proyecto en esta lista tiene nada cerca de este nivel de aislamiento. NanoClaw tiene su FileGuard y ShellSandbox, pero esos son protecciones a nivel Python. Los contenedores WASM de IronClaw son un enfoque fundamentalmente diferente.

### Como empezar

```bash
git clone https://github.com/nearai/ironclaw.git
cd ironclaw

# Compila
cargo build --release

# Configura PostgreSQL con pgvector
createdb ironclaw
psql ironclaw -c &quot;CREATE EXTENSION IF NOT EXISTS vector;&quot;

# Ejecuta el asistente de configuracion (maneja conexion DB, auth NEAR AI, encriptacion)
ironclaw onboard

# Inicia como REPL
cargo run
```

Necesitas Rust 1.85+, PostgreSQL 15+ con pgvector, y una cuenta NEAR AI (el asistente de configuracion maneja el flujo OAuth a traves de tu navegador).

### Para quien es

IronClaw es para personas que quieren las garantias de seguridad mas fuertes disponibles en este espacio. El sandbox WASM y el aislamiento de credenciales lo hacen la opcion mas segura para ejecutar un agente de IA con acceso real a herramientas en una maquina de produccion. El codigo Rust da rendimiento nativo y seguridad de memoria. Las desventajas: es mas nuevo (368 estrellas), requiere infraestructura PostgreSQL, y un requisito de auth NEAR AI que puede no sentarle bien a todos los que quieren una configuracion self-hosted completamente independiente.

## 7. ZeroClaw

&lt;Button text=&quot;Repositorio GitHub&quot; link=&quot;https://github.com/zeroclaw-labs/zeroclaw&quot; variant=&quot;solid&quot; color=&quot;blue&quot; size=&quot;md&quot; icon=&quot;github&quot; /&gt;

ZeroClaw es un asistente basado en Rust que lleva la eficiencia de recursos mas lejos que PicoClaw. El binario compilado pesa 3.4MB, usa menos de 5MB de RAM y arranca en menos de 10ms. El proyecto viene de zeroclaw-labs y tiene 22+ proveedores integrados, 8+ canales de chat y un sistema de memoria SQLite con busqueda hibrida (FTS5 keyword + similitud coseno vectorial). Escribimos una [guia completa de configuracion de ZeroClaw](/es/guia-configuracion-zeroclaw/) cubriendo MiniMax M2.5, GLM-5 y Discord si quieres probarlo.

### Que hace

- Binario unico en Rust, sin dependencias de runtime mas alla del binario
- 8+ canales: CLI, Telegram, Discord, Slack, iMessage, Matrix, WhatsApp, Webhook
- 22+ proveedores LLM integrados (OpenRouter, Anthropic, OpenAI, Ollama, Gemini, Groq, Mistral, xAI, DeepSeek, y mas)
- Memoria hibrida SQLite: busqueda FTS5 keyword + embeddings vectoriales con similitud coseno
- Pareo gateway con codigos unicos de 6 digitos y auth bearer token
- Sandboxing de workspace, allowlists de comandos y proteccion de paths prohibidos
- Almacenamiento encriptado de secretos (ChaCha20-Poly1305)
- Soporte Docker con imagenes distroless de produccion
- Comando integrado `zeroclaw migrate openclaw` para migrar desde OpenClaw
- Configuracion TOML en vez de JSON

### Enfoque de seguridad

Los valores de seguridad por defecto de ZeroClaw son mas estrictos que la mayoria de proyectos en esta lista. El gateway se enlaza a `127.0.0.1` y se niega a exponerse publicamente sin un tunel. Las allowlists vacias de canales niegan todos los mensajes por defecto (opuesto a la mayoria de bots). Hay un flujo de codigo de pareo de 6 digitos antes de que el gateway acepte solicitudes webhook.

```toml
[autonomy]
workspace_only = true
allowed_commands = [&quot;git&quot;, &quot;npm&quot;, &quot;cargo&quot;, &quot;ls&quot;, &quot;cat&quot;, &quot;grep&quot;]
forbidden_paths = [&quot;/etc&quot;, &quot;/root&quot;, &quot;/proc&quot;, &quot;/sys&quot;, &quot;~/.ssh&quot;, &quot;~/.gnupg&quot;, &quot;~/.aws&quot;]

[secrets]
encrypt = true
```

14 directorios de sistema y 4 dotfiles sensibles estan bloqueados por defecto. Los intentos de escape por symlink se detectan a traves de canonicalizacion de paths.

### Como empezar

```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
cargo build --release --locked
cargo install --path . --force --locked

# Configuracion interactiva
zeroclaw onboard --interactive

# Chat
zeroclaw agent -m &quot;Hola!&quot;

# Iniciar todos los canales
zeroclaw daemon
```

En una Raspberry Pi con 1GB de RAM, usa `CARGO_BUILD_JOBS=1 cargo build --release` para evitar que el kernel mate rustc.

### Para quien es

ZeroClaw es la eleccion si quieres el menor uso posible de recursos con valores de seguridad serios y una amplia gama de proveedores integrados. El soporte de 22+ proveedores significa que puedes apuntarlo a casi cualquier API LLM sin configuracion custom. La memoria hibrida SQLite es mas capaz que lo que PicoClaw o nanobot ofrecen. La desventaja: el tiempo de compilacion (builds Rust toman unos minutos en un VPS) y una comunidad mas nueva y pequena. Si estas migrando desde OpenClaw, el comando de migracion integrado hace el cambio simple.

## Cual deberias elegir?

Depende de que realmente necesitas:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Quieres un bot de Telegram pequeno, legible y enfocado en seguridad? Ve con NanoClaw.&lt;/li&gt;
&lt;li&gt;Necesitas estar en Telegram, Discord, WhatsApp y Slack al mismo tiempo? nanobot maneja eso.&lt;/li&gt;
&lt;li&gt;Construyendo tu propio agente y necesitas un sistema de memoria real? memU es el framework de memoria a mirar.&lt;/li&gt;
&lt;li&gt;Quieres equipos multi-agente en Discord? bitdoze-bot hace eso con Agno.&lt;/li&gt;
&lt;li&gt;Ejecutando en hardware extremadamente limitado o quieres un binario Go unico sin dependencias? PicoClaw.&lt;/li&gt;
&lt;li&gt;Necesitas aislamiento de seguridad serio con herramientas en sandbox WASM? IronClaw es la opcion endurecida.&lt;/li&gt;
&lt;li&gt;Quieres uso ultra-bajo de recursos (menos de 5MB RAM) con 22+ proveedores y memoria hibrida SQLite? ZeroClaw.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

Todos corren en un VPS basico. Un Hetzner CX22 ($5.50/mes) es suficiente para cualquiera de ellos. Los costos de API dependen de que modelo elijas y cuanto chatees, pero $15-50/mes cubre a la mayoria de la gente.

Si no has probado ningun bot de IA self-hosted, en realidad recomiendo empezar con [OpenClaw mismo](/es/guia-configuracion-openclaw/). Es el mas documentado, tiene la comunidad mas grande, y el asistente de configuracion hace la primera ejecucion bastante indolora. Una vez que sepas que quieres cambiar de el, estas alternativas empiezan a tener mas sentido.

&lt;Accordion label=&quot;Preguntas frecuentes&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

**Puedo cambiar de OpenClaw a uno de estos sin perder mis conversaciones?**

No directamente. Cada proyecto almacena memoria diferente. Necesitarias exportar de OpenClaw e importar manualmente, o simplemente empezar de nuevo. memU tiene las opciones de importacion mas flexibles ya que esta disenado como framework de memoria.

**Alguno de estos funciona en una Raspberry Pi?**

NanoClaw y nanobot pueden correr en un Pi 4 con 4GB+ de RAM. El rendimiento sera limitado. memU con PostgreSQL necesita mas recursos. bitdoze-bot depende de cuantos agentes ejecutes. PicoClaw es el claro ganador aqui, corriendo en placas tan baratas como $10 con menos de 10MB de RAM. ZeroClaw queda cerca con menos de 5MB de RAM en ejecucion, aunque necesita mas RAM durante la compilacion. IronClaw necesita PostgreSQL, asi que un Pi 4 con 4GB es el minimo.

**Puedo usar modelos locales en lugar de proveedores de API?**

nanobot tiene soporte nativo vLLM. NanoClaw y bitdoze-bot funcionan con cualquier endpoint compatible OpenAI, asi que puedes apuntarlos a Ollama o vLLM. memU soporta proveedores LLM custom. PicoClaw funciona con OpenRouter y varios proveedores directos. ZeroClaw tiene un proveedor Ollama integrado y soporta cualquier endpoint compatible OpenAI via el proveedor `custom:`. IronClaw enruta a traves de NEAR AI. Ve nuestra [guia Docker Ollama](/ollama-docker-install/) para configurar modelos locales.

**Cuanta programacion requieren estos?**

NanoClaw y nanobot son casi zero-code para configuraciones basicas. PicoClaw tambien es minimal, solo edita una config JSON y ejecuta un binario. ZeroClaw es similar, edita una config TOML y el asistente interactivo onboard maneja el resto. bitdoze-bot necesita algo de configuracion YAML para agentes. memU requiere trabajo de integracion Python ya que es un framework, no un bot standalone. IronClaw requiere tooling Rust y configuracion PostgreSQL, pero el asistente onboard maneja la mayor parte de la configuracion.

&lt;/Accordion&gt;</content:encoded><category>ai</category><category>ai-tools</category><category>self-hosted</category></item><item><title>Arcane vs Dockhand: Cual Gestor Docker Deberias Elegir?</title><link>https://www.bitdoze.com/es/arcane-vs-dockhand/</link><guid isPermaLink="true">https://www.bitdoze.com/es/arcane-vs-dockhand/</guid><description>Una comparacion practica de Arcane y Dockhand, dos nuevas UIs de gestion Docker. Licenciamiento, features, seguridad y cual encaja en tu configuracion.</description><pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import { Picture } from &quot;astro:assets&quot;;
import arcaneUi from &quot;@assets/images/26/02/arcane-ui.webp&quot;;
import dockhandUi from &quot;@assets/images/26/02/dockerhand-ui.webp&quot;;

Gestionar contenedores Docker no tiene que significar Portainer. Por anos, Portainer fue la unica UI web seria para Docker, y funcionaba bien hasta que los cambios de licencia empezaron a empujar a la gente hacia niveles pagos por features basicas. Eso abrio la puerta para alternativas, y dos de ellas han estado recibiendo atencion real ultimamente: [Arcane](https://getarcane.app/) y [Dockhand](https://dockhand.pro/).

Desplegue ambos en el mismo VPS ejecutando una mezcla de stacks compose. Esta comparacion viene de usarlos realmente, no de leer listas de features. Ambos son solidos, pero apuntan a diferentes usuarios y hacen compensaciones diferentes que importan.

## Comparacion rapida

| | Arcane | Dockhand |
|---|---|---|
| Licencia | BSD-3-Clause (totalmente open source) | BSL 1.1 (convierte a Apache 2.0 en 2029) |
| Backend | Go | Bun + SvelteKit |
| Frontend | SvelteKit / TypeScript | SvelteKit 2 / Svelte 5 |
| Estrellas GitHub | ~4.4k | ~2.4k |
| Primer release | 2022 | Diciembre 2025 |
| Contribuidores | 35 | 7 |
| Commits | 1,829 | 74 |
| Precios | Gratis, siempre | Gratis (homelab), SMB $499/host/ano, Enterprise $1,499/host/ano |
| GitOps | Integrado | Integracion Git + webhooks |
| Escaneo vuln | No | Si (Grype/Trivy) |
| SSO/OIDC | Si | Si, nivel gratuito |
| Herramienta CLI | Si | No |
| Agente multi-env | arcane-headless | Hawser (traversia NAT) |


&lt;YouTubeEmbed
  url=&quot;https://www.youtube.com/embed/Ew0pn9Djf-0&quot;
  label=&quot;Arcane vs Dockhand&quot;
/&gt;

## Arquitectura

Estos dos tomaron caminos muy diferentes bajo el capo.

&lt;Tabs&gt;
  &lt;Tab name=&quot;Arcane&quot;&gt;
    Arcane esta escrito en Go. Eso importa porque Go compila a un binario unico, asi que todo corre ligero. La huella de memoria es pequena. El backend maneja requests de API, gestion de contenedores y sirve el frontend SvelteKit.

    Hay una API REST que puedes usar directamente, util para scripting. Arcane tambien incluye una herramienta CLI para personas que quieren acceso de terminal junto con la UI web.

    Para gestionar hosts remotos, esta `arcane-headless`, un agente que instalas en otras maquinas. Se conecta de vuelta a tu instancia principal.
  &lt;/Tab&gt;

  &lt;Tab name=&quot;Dockhand&quot;&gt;
    Dockhand corre en Bun (no Node) con SvelteKit manejando tanto las rutas API como el frontend. La base de datos es SQLite por defecto, con PostgreSQL como opcion si lo necesitas.

    Lo inusual es la capa de OS. Dockhand construye su imagen de contenedor desde cero usando paquetes Wolfi via apko. Sin imagen base con paquetes sobrantes que no necesitas. La superficie de ataque es mas pequena por esto.

    Para hosts remotos, esta Hawser, un agente que maneja traversia NAT y firewall. No necesitas abrir puertos en la maquina remota.
  &lt;/Tab&gt;
&lt;/Tabs&gt;

### Mi opinion sobre arquitectura

Aqui es como se ve cada UI en la practica:

&lt;Picture
  src={arcaneUi}
  alt=&quot;UI de Arcane Docker Manager&quot;
/&gt;

&lt;Picture
  src={dockhandUi}
  alt=&quot;UI de Dockhand Docker Manager&quot;
/&gt;

El backend Go de Arcane se siente mas rapido para operaciones basicas de contenedores. Las cargas de pagina son rapidas, las respuestas de API vuelven rapido. El stack basado en Bun de Dockhand tampoco es lento, pero puedes sentir la diferencia cuando haces clic a traves de muchos contenedores. Es marginal, sin embargo. Ambos son mas rapidos que Portainer.

## Licenciamiento

Aqui es donde realmente necesitas prestar atencion.

&lt;Notice type=&quot;warning&quot; title=&quot;El licenciamiento importa&quot;&gt;
Arcane es BSD-3-Clause. Has fork, modifica, usa comercialmente, vendelo. Sin restricciones mas alla de mantener el aviso de copyright.

Dockhand usa BSL 1.1. Puedes usarlo libremente para propositos personales y de negocios internos. No puedes ofrecerlo como servicio hosteado comercial. La licencia convierte a Apache 2.0 en 2029.
&lt;/Notice&gt;

Para la mayoria de self-hosters, ambas licencias funcionan bien. Estas ejecutandolo en tu propio hardware para tu propio uso. La restriccion BSL en Dockhand solo aplica si intentas revenderlo como servicio.

Pero si estas construyendo algo sobre una UI de gestion Docker, o quieres embeberlo en un producto, Arcane te da mas libertad.

## Features: donde gana cada uno

### Gestion de contenedores y compose

Ambos manejan bien lo basico. Puedes iniciar, detener, reiniciar y remover contenedores. Puedes ver logs, inspeccionar configuraciones y gestionar redes y volumenes. La gestion de stacks compose funciona en ambos. Puedes desplegar, actualizar y editar archivos compose desde la UI web.

&lt;Accordion label=&quot;Donde Arcane lo hace mejor&quot; group=&quot;features&quot; expanded=&quot;true&quot;&gt;

- La API REST esta bien documentada y es facil de usar en scripts
- La herramienta CLI te da acceso de terminal a todo lo que hace la UI
- GitOps esta integrado, no agregado. Apuntalo a un repo git y sincroniza tus stacks automaticamente
- Transparencia SBOM (Software Bill of Materials) para visibilidad de cadena de suministro

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Donde Dockhand lo hace mejor&quot; group=&quot;features&quot;&gt;

- Navegador de archivos dentro de contenedores. Navega el filesystem sin hacer exec
- Auto-actualizaciones programadas con proteccion safe-pull (descarga nueva imagen, verifica que funcione, rollback si no)
- Logging de actividad para todo. Puedes ver quien hizo que y cuando
- Notificaciones via SMTP y Apprise (soporta docenas de servicios de notificacion)

&lt;/Accordion&gt;

### Features de seguridad

Aqui es donde Dockhand se adelanta.

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Dockhand incluye escaneo de vulnerabilidades con Grype y Trivy, integrado en la UI&lt;/li&gt;
&lt;li&gt;OIDC/SSO es gratis en Dockhand, no bloqueado detras de un nivel pago&lt;/li&gt;
&lt;li&gt;La capa de OS personalizada basada en Wolfi significa menos paquetes, menos CVEs&lt;/li&gt;
&lt;li&gt;Zero telemetria. Dockhand no llama a casa para nada&lt;/li&gt;
&lt;li&gt;El nivel Enterprise agrega RBAC, LDAP y audit logging&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

Arcane no tiene escaneo de vulnerabilidades, aunque soporta OIDC/SSO. Para un homelab, la brecha de seguridad entre estos dos es pequena. Para un negocio pequeno ejecutando cargas de trabajo de produccion, el escaneo integrado de Dockhand y la capa de OS endurecida valen la compensacion de una licencia mas restrictiva.

### GitOps y automatizacion

&lt;Tabs&gt;
  &lt;Tab name=&quot;Enfoque de Arcane&quot;&gt;
    GitOps es una feature de primera clase. Conectas un repositorio git, y Arcane lo observa por cambios. Cuando pusheas un archivo compose actualizado, Arcane lo descarga y redespliega. Sin webhooks que configurar, sin CI externo necesario.

    Esto funciona bien si tu flujo de trabajo ya es basado en git. Pushea un cambio, ve como se despliega.
  &lt;/Tab&gt;

  &lt;Tab name=&quot;Enfoque de Dockhand&quot;&gt;
    La integracion Git existe pero funciona diferente. Conectas repos y configuras webhooks. Cuando un push sucede, Dockhand recibe el webhook y actua en el.

    La feature de auto-actualizacion programada es separada y podria ser mas practica para la mayoria de la gente. Configura un horario, y Dockhand verifica por nuevas imagenes, las descarga, verifica que funcionen y hace rollback si algo se rompe. Ya me atrapo dos actualizaciones de imagen malas.
  &lt;/Tab&gt;
&lt;/Tabs&gt;

### Gestion multi-ambiente

Ambos te permiten gestionar contenedores en hosts remotos, pero los mecanismos difieren.

Arcane usa `arcane-headless`, un agente ligero. Instalalo en una maquina remota, apuntalo a tu instancia principal de Arcane, y puedes gestionar ese host desde el mismo dashboard.

Dockhand usa Hawser, que tiene un truco: traversia NAT. Si tu maquina remota esta detras de un firewall o NAT, Hawser todavia puede conectarse sin abrir puertos. Eso es genuinamente util para gestionar maquinas en diferentes redes.

## Madurez y estabilidad

Tengo que ser honesto aqui. Arcane tiene una ventaja significativa.

| Metrica | Arcane | Dockhand |
|---|---|---|
| Primer release | 2022 | Diciembre 2025 |
| Total commits | 1,829 | 74 |
| Releases | 56 | 3 |
| Contribuidores | 35 | 7 |

Arcane ha estado por anos. Ha pasado por muchos ciclos de release, casos extremos se han encontrado y corregido, y hay una comunidad real alrededor. Dockhand lanzo su primer release hace dos meses. Esta pulido para ser un v1, pero todavia es un v1.

&lt;Notice type=&quot;info&quot; title=&quot;Estabilidad en la practica&quot;&gt;
Ejecute ambos por tres semanas. Arcane no crasheo ni una vez. Dockhand tuvo una instancia donde la UI se congelo despues de un reinicio bulk de contenedores, y tuve que refrescar la pagina. No es gran cosa, pero vale la pena mencionarlo.
&lt;/Notice&gt;

## Precios

Arcane es gratis. Sin niveles, sin features pagas, sin &quot;community edition&quot; con partes faltantes. BSD-3-Clause significa que obtienes todo.

Dockhand tiene un modelo escalonado:

| Nivel | Costo | Que obtienes |
|---|---|---|
| Gratis | $0 | Features completas para uso homelab |
| SMB | $499/host/ano | Soporte comercial, actualizaciones prioritarias |
| Enterprise | $1,499/host/ano | RBAC, LDAP, audit logging, soporte dedicado |

El nivel gratuito es genuinamente utilizable. OIDC/SSO esta incluido incluso en el nivel gratuito, que es mejor que lo que ofrece Portainer. Pero si necesitas RBAC o LDAP, estas pagando precios enterprise.

## Comunidad y soporte

Arcane tiene la comunidad mas grande. Mas issues en GitHub, mas discusiones, mas gente contribuyendo. Treinta y cinco contribuidores versus siete te dice algo sobre cuanta gente esta invertida en cada proyecto.

Dockhand ha recibido cobertura de prensa de XDA Developers, The New Stack y Lawrence Systems. Eso es impresionante para un proyecto que solo ha sido publico por dos meses. Pero cobertura y comunidad son cosas diferentes. cuando encuentras un bug raro a las 2am, el tamano de la comunidad importa mas que menciones de prensa.

Ambos tienen canales Discord/GitHub activos. Los tiempos de respuesta han sido razonables de ambos equipos en mi experiencia.

## Instalacion

Ambos son instalaciones basadas en Docker, lo cual es apropiado para herramientas de gestion Docker. He escrito guias de instalacion completas para ambos: [instalar Arcane](/es/instalar-arcane/) e [instalar Dockhand](/es/instalar-dockhand/).

&lt;Tabs&gt;
  &lt;Tab name=&quot;Arcane&quot;&gt;
    Crea un `compose.yaml`:

    ```yaml
    services:
      arcane:
        image: ghcr.io/getarcaneapp/arcane:latest
        container_name: arcane
        ports:
          - &quot;3552:3552&quot;
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - arcane-data:/app/data
          - /opt/docker:/opt/docker
        environment:
          - APP_URL=http://localhost:3552
          - PUID=1000
          - PGID=1000
          - ENCRYPTION_KEY=tu-clave-encripcion-32-bytes
          - JWT_SECRET=tu-jwt-secret
        restart: unless-stopped
    volumes:
      arcane-data:
    ```

    Genera los secretos con:

    ```bash
    docker run --rm ghcr.io/getarcaneapp/arcane:latest /app/arcane generate secret
    ```

    Ejecuta eso dos veces - una para `ENCRYPTION_KEY`, una para `JWT_SECRET`. Luego `docker compose up -d` y abre `localhost:3552`. Login por defecto es `arcane` / `arcane-admin`.

    Una cosa a vigilar: si quieres que Arcane gestione proyectos compose existentes, monta la carpeta de proyectos con rutas coincidentes dentro y fuera del contenedor. Asi que si tus stacks viven en `/opt/docker`, montalo como `/opt/docker:/opt/docker`, no algo como `/opt/docker:/app/data/projects`. Las rutas relativas en archivos compose se rompen de otra forma.
  &lt;/Tab&gt;

  &lt;Tab name=&quot;Dockhand&quot;&gt;
    ```yaml
    services:
      dockhand:
        image: finsys/dockhand:latest
        ports:
          - &quot;3000:3000&quot;
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - dockhand_data:/app/data
        environment:
          - SECRET_KEY=cambia-esto-a-algo-aleatorio
    volumes:
      dockhand_data:
    ```

    Tambien rapido. Dockhand te pide configurar una clave secreta, que es buena practica. La configuracion de primera ejecucion te guia para crear una cuenta de administrador.
  &lt;/Tab&gt;
&lt;/Tabs&gt;

Ambos requieren montar el socket Docker, que es estandar para estas herramientas. Si eso te hace sentir incómodo desde una perspectiva de seguridad, ambos soportan conectarse a hosts Docker remotos en su lugar.

## Quien deberia elegir cual

&lt;Accordion label=&quot;Elige Arcane si...&quot; group=&quot;pick&quot; expanded=&quot;true&quot;&gt;

- Quieres algo verdaderamente open source sin preocupaciones de licenciamiento
- GitOps es parte de tu flujo de trabajo
- Necesitas una API REST o herramienta CLI
- El tamano de comunidad y madurez del proyecto te importan
- El presupuesto es cero, incluyendo soporte

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Elige Dockhand si...&quot; group=&quot;pick&quot;&gt;

- Features de seguridad como escaneo de vulnerabilidades y SSO son requisitos
- Gestionas hosts detras de NATs y firewalls
- Las auto-actualizaciones con proteccion rollback suenan atractivas
- Quieres logging de actividad y audit trails
- Estas bien con un proyecto mas nuevo que todavia esta encontrando su footing

&lt;/Accordion&gt;

## Mi opinion honesta

Si alguien me preguntara cual instalar hoy en un servidor homelab, diria Arcane. Es mas maduro, totalmente open source, y la integracion GitOps es excelente. La comunidad es mas grande, asi que cuando las cosas salen mal, encontraras ayuda mas rapido.

Pero estoy viendo Dockhand de cerca. Las features de seguridad estan adelantadas de cualquier otra cosa en este espacio en el nivel gratuito. OIDC sin pagar, escaneo de vulnerabilidades integrado, esa capa de OS endurecida. Si el equipo sigue enviando a este ritmo, y si el proyecto hace crecer su base de contribuidores, podria convertirse en la mejor opcion para uso en produccion dentro de un ano.

Por ahora, Arcane por confiabilidad. Dockhand si necesitas esas features de seguridad y puedes tolerar algunos bordes rugosos. Y si quieres algo que intenta ser el paquete completo, con gestion de contenedores, backups, proxy inverso, monitoreo y multi-nodo todo en una herramienta, revisa [UsulNet](/es/instalar-usulnet/).

## Articulos relacionados

- [Mejores alternativas a Portainer en 2026](/es/alternativas-portainer/) - cinco UIs de gestion Docker comparadas
- [Instalar Arcane](/es/instalar-arcane/) - guia completa de Arcane con socket proxy y OIDC
- [Instalar Dockhand](/es/instalar-dockhand/) - guia completa de Dockhand con escaneo de vulnerabilidades y Hawser
- [Instalar UsulNet](/es/instalar-usulnet/) - plataforma de gestion Docker todo en uno con escaneo, backups y multi-nodo
- [Instalar Dockge](/es/instalar-dockge/) - otra UI de gestion Docker que vale la pena probar
- [Mejores contenedores Docker para servidor casero](/docker-containers-home-server/) - que ejecutar una vez que elegiste un gestor
- [Mejores paneles self-hosted](/best-self-hosted-panels/) - paneles de gestion de servidor comparados
- [Podman vs Docker](/podman-vs-docker/) - la comparacion de motores de contenedores
- [Auto-actualizacion Docker con Tugtainer](/tugtainer-docker-autoupdate/) - mantener contenedores actualizados automaticamente
- [Herramientas de monitoreo de servidor](/sever-monitoring/) - monitoreando tu host Docker</content:encoded><category>self-hosting</category><category>docker</category><category>self-hosted</category></item><item><title>Instalar Arcane Docker: Gestor de Contenedores Self-Hosted</title><link>https://www.bitdoze.com/es/instalar-arcane/</link><guid isPermaLink="true">https://www.bitdoze.com/es/instalar-arcane/</guid><description>Guia paso a paso para instalar Arcane con Docker Compose. Cubre configuracion basica, seguridad con socket proxy, autenticacion OIDC, configuracion de proxy inverso y gestion de hosts remotos.</description><pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import { Picture } from &quot;astro:assets&quot;;
import arcaneUi from &quot;@assets/images/26/02/arcane-ui.webp&quot;;

He estado ejecutando [Arcane](https://getarcane.app/) en dos de mis servidores por unas semanas ahora. Reemplazo a Portainer en ambos, y no he mirado atras. Todo corre en Go, lo que significa que es rapido, ligero en memoria, y no necesita un runtime complicado.

Si buscas una comparacion con otro gestor Docker mas nuevo, revisa mi articulo [Arcane vs Dockhand](/es/arcane-vs-dockhand/). Pero si ya decidiste por Arcane y solo quieres que funcione, esta guia cubre todo desde instalacion basica hasta seguridad con socket proxy.

## Lo que Arcane realmente hace

Arcane es una UI web de gestion Docker. Obtienes gestion de contenedores, edicion de stacks compose, logs en tiempo real, terminal web y GitOps todo en una interfaz. Se ejecuta como un unico contenedor.

&lt;Picture
  src={arcaneUi}
  alt=&quot;UI de Arcane Docker Manager mostrando lista de contenedores y editor compose&quot;
/&gt;

Algunas cosas que me llamaron la atencion despues de usarlo:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;API REST contra la que puedes hacer scripts directamente&lt;/li&gt;
&lt;li&gt;Herramienta CLI para gestion basada en terminal junto con la UI web&lt;/li&gt;
&lt;li&gt;GitOps integrado, no como un agregado. Apuntalo a un repo y tus stacks se sincronizan automaticamente&lt;/li&gt;
&lt;li&gt;Soporte OIDC/SSO para single sign-on&lt;/li&gt;
&lt;li&gt;Gestion de hosts remotos via el agente arcane-headless&lt;/li&gt;
&lt;li&gt;Licencia BSD-3-Clause. Gratis, sin niveles pagos, sin bloqueos de features&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

El proyecto tiene alrededor de 4,400 estrellas en GitHub, 35 contribuidores, y ha estado en desarrollo activo desde 2022. No es software nuevo.

&lt;YouTubeEmbed
  url=&quot;https://www.youtube.com/embed/Ew0pn9Djf-0&quot;
  label=&quot;Arcane vs Dockhand&quot;
/&gt;


## Requisitos previos

Antes de empezar, necesitas:

- Un servidor Linux (VPS o maquina local). Recomiendo [Hetzner](https://go.bitdoze.com/hetzner), [Hostinger](https://go.bitdoze.com/hostinger-vps) para hosting VPS
- Docker y Docker Compose instalados
- Conocimiento basico de terminal

&lt;Button link=&quot;https://go.bitdoze.com/hetzner&quot; text=&quot;Hetzner VPS&quot; /&gt;
&lt;Button link=&quot;https://go.bitdoze.com/hostinger-vps&quot; text=&quot;Hostinger VPS&quot; /&gt;
&lt;Button link=&quot;https://go.bitdoze.com/do&quot; text=&quot;DigitalOcean $100 Gratis&quot; /&gt;
&lt;Button link=&quot;https://go.bitdoze.com/vultr&quot; text=&quot;Vultr $100 Gratis&quot; /&gt;

O usa un [Mini PC como servidor casero](https://www.bitdoze.com/best-mini-pc-home-server/).

### Instalar Docker

Si no tienes Docker aun:

```sh
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  &quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  jammy stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-compose
```

Recorrido completo: [Instalar Docker y Docker-compose para Ubuntu](https://www.bitdoze.com/install-docker-ubuntu-arm/).

## Instalar Arcane con Docker Compose

Hay dos formas de instalar Arcane. El script de conveniencia es el mas rapido, pero prefiero el metodo compose porque puedes ver y controlar exactamente que esta pasando.

### Instalacion rapida (script de conveniencia)

Si quieres empezar en 30 segundos:

```bash
curl -fsSL https://getarcane.app/install.sh | bash
```

Esto descarga la imagen, genera secretos e inicia el contenedor. Bueno para pruebas, pero no lo usaria para una configuracion permanente porque no controlas el archivo compose.

### Instalacion con Docker Compose (recomendado)

Primero, crea un directorio para Arcane:

```bash
mkdir -p /opt/arcane
cd /opt/arcane
```

Genera los secretos que necesitaras. Ejecuta este comando dos veces, una para `ENCRYPTION_KEY` y otra para `JWT_SECRET`:

```bash
docker run --rm ghcr.io/getarcaneapp/arcane:latest /app/arcane generate secret
```

Copia ambos valores. Ahora crea tu `compose.yaml`:

```yaml
services:
  arcane:
    image: ghcr.io/getarcaneapp/arcane:latest
    container_name: arcane
    ports:
      - &quot;3552:3552&quot;
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - arcane-data:/app/data
      - /opt/stacks:/opt/stacks
    environment:
      - APP_URL=http://localhost:3552
      - PUID=1000
      - PGID=1000
      - ENCRYPTION_KEY=tu-clave-encripcion-generada
      - JWT_SECRET=tu-jwt-secret-generado
    restart: unless-stopped
volumes:
  arcane-data:
```

Reemplaza los valores de `ENCRYPTION_KEY` y `JWT_SECRET` con los que generaste. Configura `APP_URL` a la direccion real de tu servidor si accedes remotamente.

Inicia:

```bash
docker compose up -d
```

Abre `http://ip-de-tu-servidor:3552` en tu navegador. Las credenciales de login por defecto son `arcane` / `arcane-admin`. Cambia la contrasena inmediatamente.

&lt;Notice type=&quot;warning&quot; title=&quot;Las rutas de volumenes importan&quot;&gt;
Si quieres que Arcane gestione proyectos compose existentes en tu servidor, monta el directorio con rutas coincidentes dentro y fuera del contenedor. Por ejemplo, si tus stacks viven en `/opt/stacks`, montalo como `/opt/stacks:/opt/stacks`, NO como `/opt/stacks:/app/data/projects`. Los archivos compose usan rutas relativas, y se romperan si el punto de montaje no coincide. Tambien puedes configurar la variable de entorno `PROJECTS_DIRECTORY` para decirle a Arcane donde buscar.
&lt;/Notice&gt;

## Endurecimiento: Socket proxy de Docker

Montar el socket de Docker directamente le da a Arcane control total sobre tu daemon Docker. Eso es un riesgo de seguridad. Si Arcane se compromete de alguna manera, un atacante tiene acceso equivalente a root en tu host.

La solucion es un socket proxy que filtra que llamadas de API Docker puede hacer Arcane.

&lt;Accordion label=&quot;Por que usar un socket proxy?&quot; group=&quot;security&quot; expanded=&quot;true&quot;&gt;

El socket de Docker (`/var/run/docker.sock`) es esencialmente una API de nivel root. Cualquier contenedor con acceso a el puede crear contenedores privilegiados, montar el filesystem del host, o ejecutar comandos arbitrarios como root en el host.

Un socket proxy se sienta entre Arcane y el daemon Docker. Intercepta llamadas de API y solo permite las que has permitido explicitamente. Obtienes la funcionalidad de gestion sin entregar las llaves del reino.

Esta configuracion es recomendada para cualquier servidor expuesto a internet. Para un homelab detras de un firewall, el montaje directo del socket probablemente esta bien.

&lt;/Accordion&gt;

Aqui hay una configuracion compose con [docker-socket-proxy de Tecnativa](https://github.com/Tecnativa/docker-socket-proxy):

```yaml
services:
  arcane:
    image: ghcr.io/getarcaneapp/arcane:latest
    container_name: arcane
    ports:
      - &quot;3552:3552&quot;
    volumes:
      - arcane-data:/app/data
      - /opt/stacks:/opt/stacks
    environment:
      - APP_URL=http://localhost:3552
      - PUID=1000
      - PGID=1000
      - ENCRYPTION_KEY=tu-clave-encripcion-generada
      - JWT_SECRET=tu-jwt-secret-generado
      - DOCKER_HOST=tcp://docker-socket-proxy:2375
    depends_on:
      - docker-socket-proxy
    networks:
      - arcane-net
    restart: unless-stopped

  docker-socket-proxy:
    image: tecnativa/docker-socket-proxy
    container_name: arcane-socket-proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      - CONTAINERS=1
      - IMAGES=1
      - NETWORKS=1
      - VOLUMES=1
      - SERVICES=1
      - TASKS=1
      - NODES=1
      - BUILD=1
      - EXEC=1
      - SYSTEM=1
      - INFO=1
      - VERSION=1
      - POST=1
      - DELETE=1
    networks:
      - arcane-net
    restart: unless-stopped

networks:
  arcane-net:
    driver: bridge

volumes:
  arcane-data:
```

Nota que Arcane ya no monta el socket de Docker directamente. En su lugar, se conecta al proxy via `DOCKER_HOST=tcp://docker-socket-proxy:2375`. El socket esta montado como solo lectura en el contenedor proxy, y ambos contenedores estan en una red bridge interna.

Las variables de entorno en el proxy controlan que endpoints de API Docker son accesibles. La lista de arriba es bastante permisiva ya que Arcane necesita la mayoria para funcionar. Puedes ajustarla mas si no necesitas ciertas features.

## Configurar OIDC/SSO

Si ya estas ejecutando un proveedor de identidad como Authentik, Keycloak o Authelia, puedes conectar Arcane a el para single sign-on.

&lt;Tabs&gt;
  &lt;Tab name=&quot;Via la UI web&quot;&gt;
    Ve a **Settings &gt; Security &gt; OIDC Authentication** en Arcane. Llena tu client ID, client secret y issuer URL. El redirect URI es:

    ```
    https://tu-url-arcane/auth/oidc/callback
    ```

    Guarda y prueba la conexion. Los usuarios que se autentican via OIDC son aprovisionados automaticamente en el primer login.
  &lt;/Tab&gt;

  &lt;Tab name=&quot;Via variables de entorno&quot;&gt;
    Agrega estas a tu archivo compose:

    ```yaml
    environment:
      - OIDC_ENABLED=true
      - OIDC_CLIENT_ID=tu-client-id
      - OIDC_CLIENT_SECRET=tu-client-secret
      - OIDC_ISSUER_URL=https://tu-idp.ejemplo.com
      - OIDC_ADMIN_CLAIM=groups
      - OIDC_ADMIN_VALUE=arcane-admins
    ```

    `OIDC_ADMIN_CLAIM` y `OIDC_ADMIN_VALUE` te permiten auto-asignar privilegios de admin basados en un claim de tu proveedor de identidad. Asi que si un usuario pertenece al grupo `arcane-admins`, obtiene acceso de admin automaticamente.

    Si quieres deshabilitar el login con contrasena local completamente una vez que OIDC funcione, eso tambien es configurable.
  &lt;/Tab&gt;
&lt;/Tabs&gt;

## Configuracion de proxy inverso

Querras un proxy inverso frente a Arcane para SSL y un nombre de dominio limpio. Arcane usa WebSockets para actualizaciones en tiempo real, asi que tu configuracion de proxy necesita soportar eso.

&lt;Tabs&gt;
  &lt;Tab name=&quot;Nginx&quot;&gt;

```nginx
server {
    listen 443 ssl http2;
    server_name arcane.tudominio.com;

    ssl_certificate /ruta/a/cert.pem;
    ssl_certificate_key /ruta/a/key.pem;

    location / {
        proxy_pass http://127.0.0.1:3552;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection &quot;upgrade&quot;;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
```

Las lineas clave son `proxy_http_version 1.1` y los encabezados `Upgrade` / `Connection`. Sin ellos, las conexiones WebSocket fallan y la UI no obtiene actualizaciones en vivo.

  &lt;/Tab&gt;

  &lt;Tab name=&quot;Traefik&quot;&gt;
    Si ya estas ejecutando Traefik (y probablemente deberias para configuraciones Docker), agrega labels a tu servicio Arcane:

    ```yaml
    labels:
      - &quot;traefik.enable=true&quot;
      - &quot;traefik.http.routers.arcane.rule=Host(`arcane.tudominio.com`)&quot;
      - &quot;traefik.http.routers.arcane.entrypoints=websecure&quot;
      - &quot;traefik.http.routers.arcane.tls.certresolver=letsencrypt&quot;
      - &quot;traefik.http.services.arcane.loadbalancer.server.port=3552&quot;
    ```

    Traefik maneja el upgrade WebSocket automaticamente. Guia completa de Traefik: [Como usar Traefik como proxy inverso en Docker](https://www.bitdoze.com/traefik-proxy-docker/).
  &lt;/Tab&gt;

  &lt;Tab name=&quot;Cloudflare Tunnels&quot;&gt;
    Si no quieres exponer puertos en absoluto, Cloudflare Tunnels funciona bien. Apunta un tunnel a `http://localhost:3552` y Cloudflare maneja SSL y enrutamiento. El soporte WebSocket es automatico.

    Esto es lo que uso en mi homelab ya que no quiero abrir ningun puerto en mi router.
  &lt;/Tab&gt;
&lt;/Tabs&gt;

Actualiza la variable de entorno `APP_URL` en tu archivo compose para que coincida con tu dominio real (ej., `https://arcane.tudominio.com`).

## Gestionando hosts remotos

Arcane puede gestionar Docker en otras maquinas a traves del agente `arcane-headless`. Esto es util si tienes multiples servidores pero quieres un dashboard.

En la maquina remota, despliega el agente:

```yaml
services:
  arcane-agent:
    image: ghcr.io/getarcaneapp/arcane:latest
    container_name: arcane-agent
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - AGENT_MODE=true
      - AGENT_TOKEN=tu-token-agente
      - MANAGER_API_URL=https://arcane.tudominio.com
    restart: unless-stopped
```

Genera el `AGENT_TOKEN` en tu instancia principal de Arcane, luego pegalo aqui. El agente se conecta saliente a tu instancia principal, asi que no necesitas abrir ningun puerto en la maquina remota.

## Referencia de variables de entorno

Aqui estan las variables de entorno mas utiles que puedes configurar:

| Variable | Default | Que hace |
|---|---|---|
| `APP_URL` | `http://localhost:3552` | URL publica de la instancia |
| `PUID` / `PGID` | `1000` | ID usuario/grupo para permisos de archivos |
| `ENCRYPTION_KEY` | none | Requerido. Clave de 32 bytes para encriptar datos sensibles |
| `JWT_SECRET` | none | Requerido. Secreto para firmar tokens de auth |
| `DOCKER_HOST` | `unix:///var/run/docker.sock` | Conexion Docker. Usa `tcp://` para socket proxy |
| `DATABASE_URL` | SQLite | String de conexion PostgreSQL externo |
| `GPU_MONITORING_ENABLED` | `false` | Habilitar estadisticas GPU NVIDIA/AMD |
| `GPU_TYPE` | none | `nvidia` o `amd` |
| `LOG_LEVEL` | `info` | Verbosidad de logging |
| `UI_CONFIGURATION_DISABLED` | `false` | Forzar configuracion solo via env vars |

## Solucion de problemas

&lt;Accordion label=&quot;Arcane no puede ver mis stacks compose existentes&quot; group=&quot;troubleshoot&quot; expanded=&quot;true&quot;&gt;

Esto casi siempre es un desajuste de ruta de montaje de volumen. Si tus archivos compose viven en `/opt/stacks/miapp/compose.yaml`, monta esa ruta exacta:

```yaml
volumes:
  - /opt/stacks:/opt/stacks
```

No `/opt/stacks:/alguna/otra/ruta`. Las rutas dentro y fuera del contenedor deben coincidir. Tambien configura `PROJECTS_DIRECTORY=/opt/stacks` en el environment.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Errores WebSocket o UI no se actualiza en vivo&quot; group=&quot;troubleshoot&quot;&gt;

Tu proxy inverso no esta reenviando conexiones WebSocket. Asegurate de tener los encabezados de upgrade configurados. Para Nginx, necesitas:

```nginx
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection &quot;upgrade&quot;;
```

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Permission denied en socket Docker&quot; group=&quot;troubleshoot&quot;&gt;

Agrega tu usuario al grupo `docker` (`sudo usermod -aG docker $USER`) o asegurate de que los valores `PUID`/`PGID` en el archivo compose coinciden con un usuario con acceso Docker.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;No puedo generar secretos&quot; group=&quot;troubleshoot&quot;&gt;

El comando de generacion de secretos requiere descargar la imagen de Arcane primero. Si falla, descarga manualmente:

```bash
docker pull ghcr.io/getarcaneapp/arcane:latest
docker run --rm ghcr.io/getarcaneapp/arcane:latest /app/arcane generate secret
```

&lt;/Accordion&gt;

## Lo que me gusta y lo que falta

Despues de unas semanas con Arcane, aqui es donde estoy.

La integracion GitOps es genuinamente buena. Mantengo mis archivos compose en un repo Git privado, y cuando pusheo cambios, Arcane los recoge y redespliega. Sin configuracion de webhook, sin pipeline CI necesario. Simplemente funciona.

La API REST es otro punto fuerte. Escribi un script pequeno que revisa la salud de contenedores y reinicia cualquier cosa que este unhealthy. Tomo unos 20 minutos porque la API es directa.

Lo que desearia que tuviera: escaneo de vulnerabilidades (Dockhand tiene esto), auto-actualizaciones programadas con proteccion de rollback, y un navegador de archivos para contenedores. Estos no son dealbreakers, pero harian de Arcane el paquete completo.

Si quieres escaneo de vulnerabilidades y algunas de esas features faltantes, revisa [como instalar Dockhand](/es/instalar-dockhand/). Tambien esta [UsulNet](/es/instalar-usulnet/), una plataforma de gestion Docker todo en uno mas nueva que agrupa escaneo Trivy, backups, configuracion de proxy inverso y orquestacion multi-nodo en un unico binario Go.

## Articulos relacionados

- [Mejores alternativas a Portainer en 2026](/es/alternativas-portainer/) - cinco UIs de gestion Docker comparadas
- [Arcane vs Dockhand](/es/arcane-vs-dockhand/) - comparacion lado a lado de ambas herramientas
- [Instalar Dockhand](/es/instalar-dockhand/) - el otro gestor Docker que vale la pena probar
- [Instalar UsulNet](/es/instalar-usulnet/) - plataforma de gestion Docker todo en uno con escaneo, backups y multi-nodo
- [Instalar Dockge](/es/instalar-dockge/) - otra UI de gestion Docker
- [Mejores contenedores Docker para servidor casero](/docker-containers-home-server/) - que ejecutar una vez configurado tu gestor
- [Mejores paneles self-hosted](/best-self-hosted-panels/) - paneles de gestion de servidor comparados
- [Proxy inverso Traefik para Docker](/traefik-proxy-docker/) - configuracion proper de proxy inverso
- [Auto-actualizacion Docker con Tugtainer](/tugtainer-docker-autoupdate/) - mantener contenedores actualizados
- [Herramientas de monitoreo de servidor](/sever-monitoring/) - monitoreando tu host Docker</content:encoded><category>self-hosting</category><category>docker</category><category>self-hosted</category></item><item><title>Instalar Dockhand Docker: Gestor de Contenedores Enfocado en Seguridad</title><link>https://www.bitdoze.com/es/instalar-dockhand/</link><guid isPermaLink="true">https://www.bitdoze.com/es/instalar-dockhand/</guid><description>Guia paso a paso para instalar Dockhand con Docker Compose. Cubre configuraciones SQLite y PostgreSQL, OIDC/SSO, escaneo de vulnerabilidades, auto-actualizaciones y gestion de hosts remotos con Hawser.</description><pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate><content:encoded>import { Picture } from &quot;astro:assets&quot;;
import dockhandUi from &quot;@assets/images/26/02/dockerhand-ui.webp&quot;;

[Dockhand](https://dockhand.pro/) lanzo su primer release en Diciembre 2025 y ha estado sacando actualizaciones a un ritmo que raramente veo de proyectos nuevos. Dieciseis releases en aproximadamente dos meses. Lo instale junto con [Arcane](/es/instalar-arcane/) en el mismo servidor para ver como se comparan, y mientras Arcane tiene la ventaja de madurez, las features de seguridad de Dockhand captaron mi atencion.

Si estas tratando de decidir entre los dos, lee primero mi [comparacion Arcane vs Dockhand](/es/arcane-vs-dockhand/). Esta guia es para personas que ya decidieron por Dockhand y quieren que funcione properly.

## Lo que Dockhand trae a la mesa

Dockhand es una UI de gestion Docker construida sobre Bun y SvelteKit. El angulo de seguridad es lo que lo hace diferente de otras opciones en este espacio.

&lt;Picture
  src={dockhandUi}
  alt=&quot;UI de Dockhand Docker Manager mostrando dashboard de contenedores&quot;
/&gt;

Esto es lo que me llamo la atencion:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Escaneo de vulnerabilidades con Grype y Trivy integrado en la UI&lt;/li&gt;
&lt;li&gt;Proteccion safe-pull: escanea nuevas imagenes antes de reemplazar contenedores en ejecucion&lt;/li&gt;
&lt;li&gt;OIDC/SSO incluido en el nivel gratuito (Portainer cobra por esto)&lt;/li&gt;
&lt;li&gt;Soporte MFA/TOTP para cuentas locales&lt;/li&gt;
&lt;li&gt;Navegador de archivos de contenedor y terminal web&lt;/li&gt;
&lt;li&gt;Auto-actualizaciones programadas con rollback automatico si algo se rompe&lt;/li&gt;
&lt;li&gt;Logging de actividad para cada accion&lt;/li&gt;
&lt;li&gt;Notificaciones via SMTP y Apprise&lt;/li&gt;
&lt;li&gt;Zero telemetria. Nada llama a casa&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

&lt;YouTubeEmbed
  url=&quot;https://www.youtube.com/embed/Ew0pn9Djf-0&quot;
  label=&quot;Arcane vs Dockhand&quot;
/&gt;

La imagen de contenedor esta construida desde cero usando paquetes Wolfi via apko. Sin capa base Alpine o Debian con paquetes que no necesitas. Menor superficie de ataque por diseno.

Una cosa a saber: Dockhand usa licencia BSL 1.1. Gratis para uso personal y de negocios internos. No puedes revenderlo como servicio hosteado. La licencia se convierte a Apache 2.0 en 2029. Para self-hosting, esto no importa.

## Requisitos previos

Necesitas:

- Un servidor Linux (VPS o local). Uso [Hetzner](https://go.bitdoze.com/hetzner), [Hostinger](https://go.bitdoze.com/hostinger-vps) para hosting VPS
- Docker y Docker Compose instalados
- Funciona en amd64 y arm64 (Raspberry Pi 4 incluido)

&lt;Button link=&quot;https://go.bitdoze.com/hetzner&quot; text=&quot;Hetzner VPS&quot; /&gt;
&lt;Button link=&quot;https://go.bitdoze.com/hostinger-vps&quot; text=&quot;Hostinger VPS&quot; /&gt;
&lt;Button link=&quot;https://go.bitdoze.com/do&quot; text=&quot;DigitalOcean $100 Gratis&quot; /&gt;
&lt;Button link=&quot;https://go.bitdoze.com/vultr&quot; text=&quot;Vultr $100 Gratis&quot; /&gt;

O usa un [Mini PC como servidor casero](https://www.bitdoze.com/best-mini-pc-home-server/).

### Instalar Docker

Si Docker no esta configurado aun:

```sh
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  &quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  jammy stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-compose
```

Recorrido completo: [Instalar Docker y Docker-compose para Ubuntu](https://www.bitdoze.com/install-docker-ubuntu-arm/).

## Instalar Dockhand con Docker Compose

Tienes tres opciones dependiendo de tus necesidades: un comando unico rapido, compose basado en SQLite, o compose con PostgreSQL. Cubrire las tres.

### Instalacion rapida (comando unico)

Si solo quieres probar:

```bash
docker run -d \
  --name dockhand \
  --restart unless-stopped \
  -p 3000:3000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v dockhand_data:/app/data \
  fnsys/dockhand:latest
```

Eso es todo. Abre `http://ip-de-tu-servidor:3000` y crea tu cuenta de administrador. Para una configuracion permanente, usaria uno de los metodos compose de abajo.

### Docker Compose con SQLite (recomendado para la mayoria)

Crea un directorio y archivo compose:

```bash
mkdir -p /opt/dockhand
cd /opt/dockhand
```

Crea `compose.yaml`:

```yaml
services:
  dockhand:
    image: fnsys/dockhand:latest
    container_name: dockhand
    restart: unless-stopped
    ports:
      - &quot;3000:3000&quot;
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockhand_data:/app/data
volumes:
  dockhand_data:
```

Inicia:

```bash
docker compose up -d
```

Abre `http://ip-de-tu-servidor:3000`. El asistente de primera ejecucion te guia para crear una cuenta de administrador. SQLite es la base de datos por defecto y funciona bien para configuraciones de servidor unico. Los datos viven en el volumen `dockhand_data`.

### Docker Compose con PostgreSQL

Si gestionas muchos contenedores o quieres la base de datos ejecutandose separadamente para propositos de backup, usa PostgreSQL:

```yaml
services:
  postgres:
    image: postgres:16-alpine
    container_name: dockhand-db
    restart: unless-stopped
    environment:
      POSTGRES_USER: dockhand
      POSTGRES_PASSWORD: cambia-esta-contrasena
      POSTGRES_DB: dockhand
    volumes:
      - postgres_data:/var/lib/postgresql/data

  dockhand:
    image: fnsys/dockhand:latest
    container_name: dockhand
    restart: unless-stopped
    ports:
      - &quot;3000:3000&quot;
    environment:
      DATABASE_URL: postgres://dockhand:cambia-esta-contrasena@postgres:5432/dockhand
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockhand_data:/app/data
    depends_on:
      - postgres

volumes:
  postgres_data:
  dockhand_data:
```

&lt;Notice type=&quot;warning&quot; title=&quot;Cambia la contrasena de la base de datos&quot;&gt;
Reemplaza `cambia-esta-contrasena` en ambos campos `POSTGRES_PASSWORD` y `DATABASE_URL` con una contrasena fuerte real. Usa la misma contrasena en ambos lugares.
&lt;/Notice&gt;

## Configurar escaneo de vulnerabilidades

Esta es una de las mejores features de Dockhand y esta incluida en el nivel gratuito. Puedes escanear tus imagenes de contenedor por vulnerabilidades conocidas usando Grype o Trivy.

Despues de iniciar sesion, ve a la pagina de configuracion y habilita el escaneo de vulnerabilidades. Elige tu escaner:

&lt;Tabs&gt;
  &lt;Tab name=&quot;Grype&quot;&gt;
    Grype es la opcion por defecto. Es rapido, desarrollado por Anchore, y obtiene datos de vulnerabilidades de multiples fuentes. Los escaneos corren contra tus imagenes locales sin enviar nada a servidores externos.
  &lt;/Tab&gt;

  &lt;Tab name=&quot;Trivy&quot;&gt;
    Trivy de Aqua Security es la otra opcion. Soporta mas objetivos de escaneo (paquetes OS, dependencias especificas de lenguaje, archivos IaC) pero es ligeramente mas lento. Si necesitas escaneo mas profundo mas alla de imagenes de contenedor, Trivy es la mejor opcion.
  &lt;/Tab&gt;
&lt;/Tabs&gt;

La feature safe-pull se vincula al escaneo. Cuando Dockhand auto-actualiza un contenedor, descarga la nueva imagen, la escanea por vulnerabilidades, y solo cambia si el escaneo pasa. Si la nueva imagen tiene problemas, tu contenedor en ejecucion permanece intacto. Esto me atrapo dos actualizaciones de imagen malas en tres semanas.

## Auto-actualizaciones programadas

Dockhand puede verificar por nuevas imagenes de contenedor en un horario y actualizarlas automaticamente. Combinado con la proteccion safe-pull mencionada arriba, esto es realmente utilizable en la practica. Digo &quot;realmente utilizable&quot; porque la mayoria de las herramientas de auto-actualizacion no verifican que la nueva imagen funcione antes de cambiarla.

Configura esto por contenedor o por stack en la UI. Eliges un horario (ej., diario a las 3am), y Dockhand maneja el resto. Si una actualizacion falla o el nuevo contenedor no inicia properly, hace rollback.

## Configurar OIDC/SSO

El soporte OIDC es gratis en Dockhand. Sin nivel pago necesario. Si ejecutas Authentik, Keycloak, o cualquier otro proveedor OIDC, puedes configurar single sign-on.

En la UI de Dockhand, ve a Settings y configura tu proveedor OIDC con:

- Client ID
- Client secret
- Issuer URL / Discovery URL

Los usuarios son aprovisionados automaticamente en el primer login. Una vez que OIDC funciona, puedes ocultar el login con contrasena local configurando la variable de entorno `DISABLE_LOCAL_LOGIN`. Asi los usuarios solo pueden autenticarse a traves de tu proveedor de identidad.

&lt;Notice type=&quot;info&quot; title=&quot;MFA es separado de OIDC&quot;&gt;
Si estas usando cuentas locales en lugar de OIDC, Dockhand soporta MFA basado en TOTP. Cada usuario puede habilitarlo desde la configuracion de su perfil. Si estas usando OIDC, MFA es manejado por tu proveedor de identidad.
&lt;/Notice&gt;

## Configuracion de proxy inverso

Dockhand corre en el puerto 3000 por defecto. Para SSL y un dominio proper, pon un proxy inverso frente a el. El soporte WebSocket es necesario para logs de contenedor en vivo y metricas.

&lt;Tabs&gt;
  &lt;Tab name=&quot;Nginx&quot;&gt;

```nginx
server {
    listen 443 ssl http2;
    server_name dockhand.tudominio.com;

    ssl_certificate /ruta/a/cert.pem;
    ssl_certificate_key /ruta/a/key.pem;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection &quot;upgrade&quot;;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
```

  &lt;/Tab&gt;

  &lt;Tab name=&quot;Traefik&quot;&gt;
    Agrega labels al servicio Dockhand en tu archivo compose:

    ```yaml
    labels:
      - &quot;traefik.enable=true&quot;
      - &quot;traefik.http.routers.dockhand.rule=Host(`dockhand.tudominio.com`)&quot;
      - &quot;traefik.http.routers.dockhand.entrypoints=websecure&quot;
      - &quot;traefik.http.routers.dockhand.tls.certresolver=letsencrypt&quot;
      - &quot;traefik.http.services.dockhand.loadbalancer.server.port=3000&quot;
    ```

    Configuracion completa de Traefik: [Como usar Traefik como proxy inverso en Docker](https://www.bitdoze.com/traefik-proxy-docker/).
  &lt;/Tab&gt;

  &lt;Tab name=&quot;Cloudflare Tunnels&quot;&gt;
    Apunta un tunnel a `http://localhost:3000`. El manejo de SSL y WebSocket es automatico. Esta es la opcion mas facil si no quieres gestionar certificados o abrir puertos.
  &lt;/Tab&gt;
&lt;/Tabs&gt;

## Gestionar hosts remotos con Hawser

Dockhand puede gestionar Docker en maquinas remotas a traves del agente Hawser. Lo que hace interesante a Hawser es la traversia NAT. El agente hace conexiones solo salientes, asi que no necesitas abrir ningun puerto en la maquina remota. Funciona detras de firewalls y NAT sin configuracion especial de red.

[Hawser](https://github.com/Finsys/hawser) es open source (Go), separado de Dockhand mismo.

Para configurarlo:

1. En Dockhand, ve a Environments y crea un nuevo host remoto. Esto genera un token
2. En la maquina remota, despliega Hawser:

```bash
docker run -d \
  --name hawser \
  --restart unless-stopped \
  -v /var/run/docker.sock:/var/run/docker.sock \
  fnsys/hawser:latest \
  --token TU_TOKEN \
  --server https://dockhand.tudominio.com
```

El agente se conecta a tu instancia de Dockhand y el host remoto aparece en tu dashboard. Auth basado en token, auto-reconexion en problemas de red. Hay modos Standard y Edge dependiendo de si la maquina remota tiene conectividad consistente.

## Referencia de variables de entorno

| Variable | Default | Que hace |
|---|---|---|
| `DATABASE_URL` | SQLite | String de conexion PostgreSQL |
| `PUID` / `PGID` | `1000` | Usuario/grupo para propiedad de archivos |
| `DISABLE_LOCAL_LOGIN` | `false` | Ocultar login con contrasena cuando SSO esta activo |
| `SKIP_DF_COLLECTION` | `false` | Saltar recoleccion de uso de disco (util en dispositivos NAS) |
| `DATA_DIR` | `/app/data` | Ruta de directorio de datos personalizado |

## Solucion de problemas

&lt;Accordion label=&quot;Logs de contenedor muestran permission denied&quot; group=&quot;troubleshoot&quot; expanded=&quot;true&quot;&gt;

Verifica que los valores `PUID` y `PGID` coinciden con un usuario con acceso al socket Docker. En la mayoria de sistemas, el socket Docker pertenece al grupo `docker`. Encuentra el ID del grupo con:

```bash
getent group docker
```

Usa ese GID como tu valor `PGID`.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Escaneos de vulnerabilidades fallan o timeout&quot; group=&quot;troubleshoot&quot;&gt;

El primer escaneo toma mas tiempo porque Grype o Trivy necesita descargar la base de datos de vulnerabilidades. Escaneos subsecuentes son mas rapidos. Si sigue timeout, verifica que el contenedor tiene acceso a internet (resolucion DNS, HTTPS saliente).

&lt;/Accordion&gt;

&lt;Accordion label=&quot;Dockhand usa mucha CPU en mi NAS&quot; group=&quot;troubleshoot&quot;&gt;

Configura `SKIP_DF_COLLECTION=true` en tus variables de entorno. La recoleccion de uso de disco puede ser pesada en ciertos dispositivos NAS con muchos puntos de montaje.

&lt;/Accordion&gt;

&lt;Accordion label=&quot;El agente Hawser no se conecta&quot; group=&quot;troubleshoot&quot;&gt;

Verifica que el token es correcto y la URL de Dockhand es alcanzable desde la maquina remota. Hawser hace conexiones HTTPS salientes, asi que la maquina remota necesita poder alcanzar tu instancia de Dockhand en el puerto 443. Revisa las reglas de firewall en el trafico saliente de la maquina remota.

&lt;/Accordion&gt;

## Precios

Vale la pena ser claro sobre esto. Dockhand tiene un modelo de precios escalonado:

| Nivel | Costo | Que obtienes |
|---|---|---|
| Gratis | $0 | Features completas para uso homelab, OIDC/SSO incluido |
| SMB | $499/host/ano | Soporte comercial, actualizaciones prioritarias |
| Enterprise | $1,499/host/ano | RBAC, LDAP/AD, audit logging, soporte dedicado |

El nivel gratuito es legitimo full-featured. OIDC, escaneo de vulnerabilidades, auto-actualizaciones, multi-host, todo incluido. Solo necesitas pagar si necesitas RBAC, LDAP o soporte comercial. Eso es mejor que lo que Portainer ofrece en el nivel gratuito.

## Mi opinion despues de tres semanas

Dockhand es un producto v1 que no lo parece. La UI esta pulida, las features de seguridad funcionan bien, y el ritmo de actualizaciones muestra que el equipo esta enviando activamente.

La feature safe-pull es mi cosa favorita de el. Configure auto-actualizaciones en todos mis contenedores no criticos y deje que corra. Atrapo dos actualizaciones de imagen malas escaneandolas antes de desplegar. Ambas veces, mis contenedores en ejecucion quedaron intactos mientras las nuevas imagenes fueron marcadas.

Lo que me da pausa es la edad del proyecto. Setenta y cuatro commits, siete contribuidores, primer release hace dos meses. Arcane ha estado desde 2022 con mas de 1,800 commits y 35 contribuidores. Ese tipo de madurez toma tiempo de construir, y habra casos extremos que Dockhand aun no ha encontrado.

Si las features de seguridad son tu prioridad y puedes tolerar un proyecto mas nuevo, Dockhand vale la pena instalar. Si quieres algo mas probado en batalla, revisa [como instalar Arcane](/es/instalar-arcane/). Y si quieres una plataforma todo en uno que agrupa gestion de contenedores con backups, configuracion de proxy inverso y monitoreo, revisa [UsulNet](/es/instalar-usulnet/).

## Articulos relacionados

- [Mejores alternativas a Portainer en 2026](/es/alternativas-portainer/) - cinco UIs de gestion Docker comparadas
- [Arcane vs Dockhand](/es/arcane-vs-dockhand/) - comparacion lado a lado de ambas herramientas
- [Instalar Arcane](/es/instalar-arcane/) - el otro gestor Docker cubierto en esta serie
- [Instalar UsulNet](/es/instalar-usulnet/) - plataforma de gestion Docker todo en uno con escaneo, backups y multi-nodo
- [Instalar Dockge](/es/instalar-dockge/) - otra UI de gestion Docker
- [Mejores contenedores Docker para servidor casero](/docker-containers-home-server/) - que ejecutar una vez configurado tu gestor
- [Mejores paneles self-hosted](/best-self-hosted-panels/) - paneles de gestion de servidor comparados
- [Proxy inverso Traefik para Docker](/traefik-proxy-docker/) - configuracion proper de proxy inverso
- [Auto-actualizacion Docker con Tugtainer](/tugtainer-docker-autoupdate/) - mantener contenedores actualizados
- [Herramientas de monitoreo de servidor](/sever-monitoring/) - monitoreando tu host Docker</content:encoded><category>self-hosting</category><category>docker</category><category>self-hosted</category></item><item><title>Guia de Configuracion de OpenClaw (Clawdbot): Tu Asistente de IA 24/7 en VPS o Mac Mini</title><link>https://www.bitdoze.com/es/guia-configuracion-openclaw/</link><guid isPermaLink="true">https://www.bitdoze.com/es/guia-configuracion-openclaw/</guid><description>Guia completa para configurar OpenClaw (anteriormente Moltbot/Clawdbot) en Hetzner VPS o Mac Mini. Cubre instalacion, integracion Telegram, proveedores LLM, skills, memoria y configuracion.</description><pubDate>Mon, 26 Jan 2026 00:00:00 GMT</pubDate><content:encoded>import YouTubeEmbed from &quot;@components/widgets/YouTubeEmbed.astro&quot;;
import Button from &quot;@components/widgets/Button.astro&quot;;
import Notice from &quot;@components/widgets/Notice.astro&quot;;
import ListCheck from &quot;@components/widgets/ListCheck.astro&quot;;
import Accordion from &quot;@components/widgets/Accordion.astro&quot;;
import Tabs from &quot;@components/widgets/Tabs.astro&quot;;
import Tab from &quot;@components/widgets/Tab.astro&quot;;

He estado ejecutando OpenClaw en un VPS de Hetzner por mas de una semana. Esta conectado a Slack y he estado usando GLM 4.7 con el plan de codificacion. Recientemente cambie a Gemini CLI con Gemini 3 Flash. Decidi compartir lo que aprendi configurandolo y hacendolo util.

&lt;Notice type=&quot;warning&quot; title=&quot;Evolucion del Nombre: De Clawdbot a Moltbot a OpenClaw&quot;&gt;
Si, esta cosa ha tenido una crisis de identidad. Empezo como **Clawdbot**, se convirtio en **Moltbot** despues de cierta presion de marca, y ahora se establecio como **OpenClaw**. La URL de instalacion se movio a `openclaw.ai` y todos los comandos son `openclaw` ahora. Podria mencionar los nombres antiguos aqui y alla para contexto, pero todo lo actual apunta a OpenClaw.
&lt;/Notice&gt;

OpenClaw es un asistente de IA de codigo abierto que vive en un servidor 24/7 y chatea contigo a traves de Telegram, WhatsApp, Slack o Discord. A diferencia de ChatGPT o Claude donde vas a su sitio, este viene a ti. Recuerda cosas entre conversaciones y puede avisarte cuando algo necesita atencion.

&lt;YouTubeEmbed
  url=&quot;https://www.youtube.com/embed/9Txk3SpB6fg&quot;
  label=&quot;Construi un Asistente de IA Personal 24/7 (Y Por Que los Mac Mini se Agotaron!)&quot;
/&gt;

&lt;Notice type=&quot;info&quot; title=&quot;Lo Que Cubre Esta Guia&quot;&gt;
&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Mac Mini vs hosting VPS — cual tiene sentido para ti&lt;/li&gt;
&lt;li&gt;Instalacion paso a paso en Hetzner o cualquier VPS Linux&lt;/li&gt;
&lt;li&gt;Integracion con Telegram, WhatsApp, Slack y Discord&lt;/li&gt;
&lt;li&gt;Opciones de proveedor LLM (Anthropic, OpenAI, Gemini, modelos locales)&lt;/li&gt;
&lt;li&gt;Sistema de memoria y como hacer que las cosas perduren&lt;/li&gt;
&lt;li&gt;Skills y archivos de configuracion para personalizacion&lt;/li&gt;
&lt;li&gt;Comandos que realmente usaras&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;
&lt;/Notice&gt;

Si eres nuevo en herramientas de codificacion con IA, nuestra [Guia para Principiantes de Programacion con IA](https://www.bitdoze.com/ai-programming-beginners-guide/) cubre lo basico. Para ejecutar modelos locales, ve [como configurar Ollama con Docker](https://www.bitdoze.com/ollama-docker-install/).

## Lo Que OpenClaw Realmente Hace

La mayoria de las herramientas de IA esperan a que preguntes algo. OpenClaw realmente hace cosas — limpia tu bandeja de entrada, programa reuniones, investiga empresas, da seguimiento a tareas, ejecuta automatizaciones en tu servidor.

La arquitectura se ve asi:

```
Tu (Telegram/WhatsApp/Slack)
    ↓
OpenClaw Gateway (ejecutandose en VPS)
    ↓
Proveedor LLM (Anthropic, OpenAI, Gemini, etc.)
    ↓
Herramientas y Skills (acceso a archivos, busqueda web, calendario, etc.)
```

El Gateway simplemente se ejecuta en segundo plano en tu servidor. Los mensajes entran desde tu app de mensajeria, se enrutan al modelo de IA que elegiste, y el modelo puede ejecutar comandos en tu servidor — mover archivos, ejecutar scripts, navegar la web.

Todo se queda en tu maquina excepto las llamadas reales de IA. Tus datos no viven en el servidor de alguna empresa.

## Mac Mini vs VPS: Cual Elegir

Situacion un poco curiosa — la comunidad de OpenClaw causo una pequeña corrida en Mac Mini M4. La gente los compraba solo para ejecutar esta cosa. Aqui te ayudamos a decidir que ruta tiene sentido para ti.

### Ventajas del Mac Mini M4

| Feature | Mac Mini | VPS |
|---------|----------|-----|
| Soporte iMessage | Si | No |
| Apps nativas de macOS | Si | No |
| Inferencia de modelos locales | Excelente (chip M4) | Limitada |
| Consumo de energia | ~10W idle | N/A (hosteado) |
| Costo inicial | $599-1299 | $0 |
| Costo mensual | ~$3 electricidad | $5-50 |
| Acceso fisico requerido | Si | No |

Si quieres iMessage, Mac Mini es tu unica opcion. El chip M4 tambien maneja bien los modelos locales si estas tratando de evitar facturas de API. Pero necesitas internet casero solido y electricidad — sin cortes.

### Ventajas del VPS

Para la mayoria de la gente, un VPS es la mejor opcion:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Sin hardware que mantener o mantener funcionando&lt;/li&gt;
&lt;li&gt;Energia y red redundantes&lt;/li&gt;
&lt;li&gt;Puedes acceder desde cualquier lugar sin port forwarding&lt;/li&gt;
&lt;li&gt;Mas facil de configurar y migrar&lt;/li&gt;
&lt;li&gt;Menor costo de entrada — $5.49/mes en Hetzner te inicia&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

Estoy usando un [Hetzner CX33](https://www.bitdoze.com/hetzner-cloud-review/) (4 vCPU, 8GB RAM) por €5.49/mes. Maneja OpenClaw comodamente con mucho espacio para otros servicios.

&lt;Notice type=&quot;success&quot; title=&quot;Empieza con Hetzner&quot;&gt;
[Obtén €20 de credito](https://go.bitdoze.com/hetzner), [Hostinger VPS](https://go.bitdoze.com/hostinger-vps) cuando te registras a traves de nuestro enlace de referencia. Eso cubre casi 4 meses de ejecutar OpenClaw.
&lt;/Notice&gt;

### Cuando Elegir Mac Mini

- Necesitas iMessage como tu canal principal
- Quieres ejecutar modelos locales (Llama, Mistral) para evitar costos de API
- Prefieres hardware que controles fisicamente
- Ya tienes un Mac Mini por ahi

### Cuando Elegir VPS

- Telegram, WhatsApp, Slack o Discord son tus canales principales
- No quieres lidiar con networking casero
- Necesitas disponibilidad 24/7 sin preocuparte por cortes de energia
- Estas bien con pagar por llamadas de API

## Instalacion en VPS Hetzner

Toma unos 20 minutos de principio a fin. Estoy usando Hetzner, pero estos pasos funcionan en practicamente cualquier VPS Ubuntu.

### Crear el Servidor

1. Ve a [Hetzner Cloud Console](https://console.hetzner.cloud/)
2. Crea un nuevo proyecto llamado `openclaw`
3. Haz clic en **Create Server**
4. Selecciona:
   - **Location**: Alemania (el mas barato) o tu region mas cercana
   - **Image**: Ubuntu 24.04
   - **Type**: CX33 (4 vCPU, 8GB RAM) — €5.49/mo
   - **IPv4**: Mantenlo habilitado
5. Agrega tu clave SSH (genera una con `ssh-keygen -t ed25519` si no tienes una)
6. Nombralo `openclaw` y crea

Espera 30 segundos a que el servidor inicie, luego obtén la direccion IP.

### Instalar OpenClaw

SSH en tu servidor:

```bash
ssh root@TU_IP_SERVIDOR
```

Actualiza el sistema e instala Node.js 22:

```bash
apt update &amp;&amp; apt upgrade -y
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs
```

Instala OpenClaw y ejecuta el asistente de configuracion:

```bash
curl -fsSL https://openclaw.ai/install.sh | bash
```

El asistente te guia a traves de todo:
- Seleccion de gateway local vs remoto
- Autenticacion de modelos (claves API u OAuth)
- Configuracion de canal (Telegram, WhatsApp, etc.)
- Instalacion del servicio en segundo plano

## Opciones de Proveedor LLM

OpenClaw funciona con varios proveedores de IA. Aqui esta el desglose:

### Anthropic (Claude)

Esto es lo que recomiendo para la mayoria de la gente. Dos formas de conectar:

**Clave API** (recomendado):
1. Ve a [console.anthropic.com](https://console.anthropic.com/)
2. Crea una clave API (empieza con `sk-ant-`)
3. Pegala cuando el asistente la pida

**Claude Code OAuth** (usa tu suscripcion):
Si tienes Claude Pro/Max, puedes usar tu suscripcion en lugar de pagar por creditos de API:
```bash
claude setup-token
```
Esto genera un token que pegas en el asistente. Funciona con Claude Code CLI.

### OpenAI

Para modelos GPT-5 y Codex:
1. Ve a [platform.openai.com](https://platform.openai.com/)
2. Crea una clave API
3. Ingresa durante la configuracion

Si tienes una suscripcion ChatGPT Plus o Codex, puedes usar OAuth similar a Claude Code.

### Google Gemini

He estado usando Gemini 3 Flash recientemente. Es rapido y economico:

```bash
openclaw configure --section models
```

Para configuracion de Gemini CLI OAuth, el asistente te pedira autenticarte a traves de Google.

### Modelos Locales (Ollama)

Si quieres evitar costos de API por completo, OpenClaw funciona con [Ollama](https://www.bitdoze.com/ollama-docker-install/). Instala Ollama en tu servidor:

```bash
curl -fsSL https://ollama.ai/install.sh | sh
ollama pull llama3.2
```

Luego configura OpenClaw para usar modelos locales en tu config.

### Comparacion de Costos

| Proveedor | Modelo | Costo Mensual Tipico |
|----------|-------|---------------------|
| Anthropic | Claude Sonnet 4.5 | $15-50 |
| Anthropic | Claude Opus 4.5 | $50-150 |
| OpenAI | GPT-5 | $20-70 |
| Google | Gemini 3 Flash | $10-30 |
| Local | Llama 3.2 (Ollama) | $0 (solo computo) |

Los costos varian mucho dependiendo de cuanto lo uses. Vigila tu factura del primer mes.

Si quieres usar tu suscripcion existente de Claude o ChatGPT con otras herramientas, consulta [VibeProxy](https://www.bitdoze.com/vibeproxy-ai-subscriptions-guide/) para enrutar acceso de suscripcion.

## Configuracion de Canales

### Telegram (El Mas Facil)

1. Abre Telegram y busca **@BotFather**
2. Envia `/newbot`
3. Elige un nombre y usuario para tu bot
4. Copia el token del bot que BotFather te da
5. Busca **@userinfobot** y envia cualquier mensaje para obtener tu ID de usuario
6. Pega ambos en el asistente de OpenClaw

El ID de usuario va en `allowFrom` para restringir quien puede hablar con tu bot. Sin esto, cualquiera que encuentre tu bot puede chatear con el.

### WhatsApp

WhatsApp usa inicio de sesion QR:

```bash
openclaw channels login
```

Escanea el codigo QR desde WhatsApp &gt; Configuracion &gt; Dispositivos vinculados. Tu numero personal de WhatsApp se convierte en el numero del bot — los mensajes que te envias a ti mismo van a OpenClaw.

### Slack

Para equipos:
1. Crea una app de Slack en [api.slack.com/apps](https://api.slack.com/apps)
2. Agrega Bot Token Scopes: `chat:write`, `app_mentions:read`, `im:history`, `im:read`, `im:write`
3. Instala en tu workspace
4. Copia el Bot User OAuth Token
5. Pega en la configuracion de OpenClaw

Yo ejecuto OpenClaw en un canal dedicado de Slack. Menciona @openclaw para interactuar.

### Discord

1. Crea una aplicacion de Discord en [discord.com/developers](https://discord.com/developers/applications)
2. Crea un usuario bot y copia el token
3. Invita el bot a tu servidor con los permisos apropiados
4. Agrega el token a la configuracion de OpenClaw

## Sistema de Memoria

OpenClaw recuerda cosas de chats anteriores. La configuracion de memoria tiene varias partes:

### Como Funciona la Memoria

- **Corto plazo**: Contexto de la conversacion actual
- **Largo plazo**: Hechos sobre ti almacenados en `~/.openclaw/workspace/MEMORY.md` y `~/.openclaw/workspace/USER.md`
- **Busqueda semantica**: Encuentra conversaciones pasadas relevantes (requiere API de OpenAI para embeddings)

### Hacer Que las Cosas Duren

Si OpenClaw sigue olvidando algo, dile directamente:

&gt; &quot;Recuerda: prefiero invitaciones de reuniones en Google Calendar, no Outlook.&quot;

Lo almacena en tus archivos de memoria. Tambien puedes editarlos directamente:

```bash
nano ~/.openclaw/workspace/USER.md
```

Agrega tus preferencias, contexto de trabajo, detalles de proyectos — cualquier cosa que quieras que siempre sepa.

### Memoria y Archivos de Configuracion

Los archivos del workspace viven en `~/.openclaw/workspace/`. Para la lista completa de opciones de configuracion, ve la [referencia AGENTS.default](https://docs.openclaw.ai/reference/AGENTS.default).

| Archivo | Proposito |
|------|---------|
| `~/.openclaw/workspace/USER.md` | Tu informacion personal y preferencias |
| `~/.openclaw/workspace/SOUL.md` | Personalidad del bot y reglas de comportamiento |
| `~/.openclaw/workspace/MEMORY.md` | Memorias a largo plazo que acumula |
| `~/.openclaw/workspace/AGENTS.md` | Configuracion de agente para tareas especializadas |

## Archivos de Configuracion

La configuracion principal vive en `~/.openclaw/config.json` (nota: esto esta directamente en `~/.openclaw/`, no en la subcarpeta workspace). Secciones clave:

### Configuracion de Modelo

```json
{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: {
        &quot;primary&quot;: &quot;anthropic/claude-sonnet-4-5&quot;,
        &quot;fallback&quot;: [&quot;google/gemini-3-flash&quot;]
      }
    }
  }
}
```

### Configuracion de Canales

```json
{
  &quot;channels&quot;: {
    &quot;telegram&quot;: {
      &quot;enabled&quot;: true,
      &quot;token&quot;: &quot;TU_BOT_TOKEN&quot;,
      &quot;allowFrom&quot;: [&quot;TU_USER_ID&quot;]
    }
  }
}
```

### Editar Configuracion

Usa el comando de configuracion integrado:

```bash
openclaw configure --section channels
openclaw configure --section models
```

O edita directamente y reinicia:

```bash
nano ~/.openclaw/config.json
openclaw gateway restart
```

Para integracion MCP (Model Context Protocol), ve nuestra [Introduccion a MCP para Principiantes](https://www.bitdoze.com/mcp-introduction-beginners/).

## Skills

Los skills son basicamente flujos de trabajo reutilizables que OpenClaw puede ejecutar. Agregan capacidades mas alla de solo chatear.

### Skills Integrados

Algunas capacidades funcionan inmediatamente:
- Gestion de archivos (organizar carpetas, encontrar archivos)
- Busqueda web (requiere clave API de Brave)
- Calendario y email (con autenticacion apropiada)
- Ejecutar scripts y comandos

### Agregar Skills

Explora skills de la comunidad en el registro de OpenClaw. Instala con:

```bash
openclaw skill install nombre-skill
```

### Crear Skills Personalizados

Los skills se definen en `~/.openclaw/workspace/skills/`. Un skill es basicamente una plantilla de prompt con parametros:

```markdown
# Skill de Investigacion

Investiga {tema} y proporciona:
- 3 hallazgos clave
- Fuentes relevantes
- Proximos pasos
```

Tambien puedes pedirle a OpenClaw que cree skills para ti:

&gt; &quot;Crea un skill que revise mis repos de GitHub por nuevos issues cada manana.&quot;

### Carpetas de Skills Personalizados

Carga skills desde una ubicacion personalizada:

```json
{
  &quot;skills&quot;: {
    &quot;paths&quot;: [&quot;~/.openclaw/workspace/skills&quot;, &quot;~/mis-skills-personalizados&quot;]
  }
}
```

### Skills de Herramientas de Codificacion (Claude Code, Codex, Gemini CLI)

Uno de los skills mas poderosos de OpenClaw le permite controlar herramientas de codificacion con IA directamente. Si tienes Claude Code, OpenAI Codex CLI o Gemini CLI instalados en tu servidor, OpenClaw puede orquestarlos para construir aplicaciones completas.

Esto significa que puedes enviar un mensaje a OpenClaw desde tu telefono:

&gt; &quot;Usa Claude Code para crear una app FastAPI con autenticacion de usuarios y desplegada en mi servidor.&quot;

Y OpenClaw:
1. Lanzara Claude Code (o Codex/Gemini CLI)
2. Pasara tus requerimientos como prompts
3. Monitoreara la sesion de codificacion
4. Reportara cuando termine o si encuentra problemas

**Configuracion:**

Asegurate de que tu herramienta de codificacion CLI este instalada y autenticada en el servidor:

```bash
# Para Claude Code
claude --version
claude login

# Para Gemini CLI
gemini --version

# Para OpenAI Codex
codex --version
```

Luego dile a OpenClaw que esta disponible:

&gt; &quot;Tengo Claude Code instalado. Cuando te pida construir algo, usalo para escribir el codigo.&quot;

OpenClaw almacena esto en memoria y usa la herramienta apropiada cuando solicites tareas de codificacion. Esto efectivamente convierte tu suscripcion de Claude de $20/mes en un equipo de desarrollo bajo demanda que puedes comandar desde Telegram.

Para mas sobre estas herramientas de codificacion, ve nuestra [comparacion de herramientas de codificacion con IA](https://www.bitdoze.com/ai-coading-tools/).

## Trabajos Programados y Recordatorios

OpenClaw puede ejecutar trabajos cron para cosas programadas. Aqui es donde deja de ser solo un chatbot y empieza a automatizar cosas realmente.

### Configurar Recordatorios

Recordatorios simples funcionan de inmediato:

&gt; &quot;Recuerdame revisar los logs del servidor cada lunes a las 9am.&quot;

&gt; &quot;En 3 horas, recuerdame revisar el pull request.&quot;

&gt; &quot;Cada viernes a las 5pm, envíame un resumen de lo que logre esta semana.&quot;

OpenClaw almacena estos y te envia mensajes proactivamente a la hora programada.

### Programacion estilo Cron

Para horarios mas complejos, OpenClaw soporta expresiones cron:

&gt; &quot;Ejecuta una verificacion de espacio en disco cada dia a medianoche.&quot;

&gt; &quot;Cada 6 horas, verifica si mi sitio web responde y alertame si esta caido.&quot;

Detras de escena, OpenClaw usa el sistema cron del servidor. Puedes ver los trabajos programados:

```bash
openclaw cron list
```

### Notificaciones Proactivas

A diferencia de ChatGPT o Claude web, OpenClaw te envia mensajes primero. Configura monitoreo:

&gt; &quot;Monitorea el uso de CPU de mi servidor. Si supera el 80% por mas de 5 minutos, envíame un mensaje.&quot;

&gt; &quot;Vigila mi bandeja de entrada por emails de [cliente]. Cuando llegue uno, resumelo y envíamelo inmediatamente.&quot;

Esta funcionalidad de &quot;heartbeat&quot; ejecuta verificaciones periodicas y muestra actualizaciones relevantes sin que preguntes.

### Ejemplo: Asistente de Standup Diario

Aqui hay una automatizacion practica que uso:

&gt; &quot;Cada dia laboral a las 8:30am:
&gt; 1. Revisa mi calendario para las reuniones de hoy
&gt; 2. Escanea mi email por items urgentes
&gt; 3. Mira mis notificaciones de GitHub
&gt; 4. Envíame un solo mensaje resumiendo todo esto&quot;

Un mensaje en Telegram y se exactamente que necesita atencion antes de abrir mi laptop.

## Mejorando OpenClaw con Agno y Scripts Python

Aqui es donde se pone interesante. [Agno](https://www.bitdoze.com/agno-get-start/) es un framework de Python para construir agentes de IA. Combinalo con [uv](https://www.bitdoze.com/uv-get-start/) para gestion de paquetes rapida y puedes construir scripts que OpenClaw ejecuta por ti.

### Por Que Agno + OpenClaw?

OpenClaw maneja el lado de mensajeria. Agno maneja el trabajo complejo de IA — configuraciones multi-agente, pipelines RAG, uso de herramientas. El flujo va:

- Envias un mensaje a OpenClaw en Telegram
- OpenClaw ejecuta tu script Agno
- Agno hace el trabajo real — investigacion, analisis, lo que sea
- Los resultados vuelven a traves de OpenClaw

### Configurar el Entorno

Instala uv en tu servidor (es mucho mas rapido que pip):

```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```

Crea un directorio de scripts para OpenClaw:

```bash
mkdir -p ~/openclaw-scripts
cd ~/openclaw-scripts
uv init
uv add agno openai duckduckgo-search
```

### Ejemplo: Script de Agente de Investigacion

Crea un agente de investigacion que OpenClaw puede invocar:

```python
#!/usr/bin/env python3
# ~/openclaw-scripts/research_agent.py
# /// script
# requires-python = &quot;&gt;=3.11&quot;
# dependencies = [&quot;agno&quot;, &quot;openai&quot;, &quot;duckduckgo-search&quot;]
# ///

import sys
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.duckduckgo import DuckDuckGoTools

def research(topic: str) -&gt; str:
    agent = Agent(
        model=OpenAIChat(id=&quot;gpt-4o&quot;),
        tools=[DuckDuckGoTools()],
        instructions=[
            &quot;You are a research assistant.&quot;,
            &quot;Search the web for current information.&quot;,
            &quot;Provide concise, factual summaries.&quot;,
        ],
        markdown=True,
    )
    
    response = agent.run(f&quot;Research this topic and provide key findings: {topic}&quot;)
    return response.content

if __name__ == &quot;__main__&quot;:
    topic = &quot; &quot;.join(sys.argv[1:]) if len(sys.argv) &gt; 1 else &quot;AI agents&quot;
    print(research(topic))
```

Hazlo ejecutable:

```bash
chmod +x ~/openclaw-scripts/research_agent.py
```

### Conectar Scripts a OpenClaw

Dile a OpenClaw sobre tus scripts:

&gt; &quot;Tengo un script Python en ~/openclaw-scripts/research_agent.py que hace investigacion web. Cuando te pida investigar algo complejo, ejecutalo con uv asi: `uv run ~/openclaw-scripts/research_agent.py [tema]`&quot;

Ahora puedes enviar un mensaje:

&gt; &quot;Investiga los ultimos desarrollos en agentes de IA autonomos&quot;

OpenClaw ejecuta tu script Agno, que genera su propio agente de IA para hacer busquedas web, y devuelve los resultados.

### Ejemplo: Equipo Multi-Agente

Para tareas complejas, crea un squad de Agno:

```python
#!/usr/bin/env python3
# ~/openclaw-scripts/content_team.py
# /// script
# requires-python = &quot;&gt;=3.11&quot;
# dependencies = [&quot;agno&quot;, &quot;openai&quot;, &quot;duckduckgo-search&quot;]
# ///

import sys
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.duckduckgo import DuckDuckGoTools

def create_content(topic: str) -&gt; str:
    researcher = Agent(
        name=&quot;Researcher&quot;,
        model=OpenAIChat(id=&quot;gpt-4o&quot;),
        tools=[DuckDuckGoTools()],
        instructions=[&quot;Research topics thoroughly&quot;, &quot;Find current data and trends&quot;],
    )
    
    writer = Agent(
        name=&quot;Writer&quot;, 
        model=OpenAIChat(id=&quot;gpt-4o&quot;),
        instructions=[&quot;Write clear, engaging content&quot;, &quot;Use the research provided&quot;],
    )
    
    # Researcher gathers info
    research = researcher.run(f&quot;Research: {topic}&quot;)
    
    # Writer creates content based on research
    article = writer.run(
        f&quot;Write a blog post about {topic} using this research:\n\n{research.content}&quot;
    )
    
    return article.content

if __name__ == &quot;__main__&quot;:
    topic = &quot; &quot;.join(sys.argv[1:]) if len(sys.argv) &gt; 1 else &quot;AI trends&quot;
    print(create_content(topic))
```

Envia un mensaje a OpenClaw:

&gt; &quot;Ejecuta el script del equipo de contenido para &apos;mejores practicas de seguridad Docker&apos;&quot;

Para mas ejemplos de Agno, revisa nuestra [guia multi-agente de Agno](https://www.bitdoze.com/agno-squad/) y [Agno con herramientas MCP](https://www.bitdoze.com/agno-mcp-tools-context7/).

### Ideas Practicas de Scripts

Scripts que podrias construir:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;**Bot de investigacion de mercado**: Agente Agno que busca noticias, analiza sentimiento, resume hallazgos&lt;/li&gt;
&lt;li&gt;**Revisor de codigo**: Script que lee un PR de GitHub y proporciona feedback&lt;/li&gt;
&lt;li&gt;**Preparacion de reuniones**: Agente que investiga asistentes antes de una llamada&lt;/li&gt;
&lt;li&gt;**Monitor de competencia**: Verificacion diaria de sitios web de competencia y redes sociales&lt;/li&gt;
&lt;li&gt;**Repurposer de contenido**: Convierte un blog post en hilos de redes sociales&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

El patron siempre es:
1. Escribes un script Agno para la tarea compleja
2. Lo almacenas en tu directorio de scripts
3. Le dices a OpenClaw como ejecutarlo
4. Lo activas via mensaje o programacion

## Referencia de Comandos

### Gestion del Gateway

| Comando | Descripcion |
|---------|-------------|
| `openclaw status` | Verificar si todo esta ejecutandose |
| `openclaw gateway start` | Iniciar el gateway en primer plano |
| `openclaw gateway restart` | Reiniciar el servicio en segundo plano |
| `openclaw gateway stop` | Detener el servicio |
| `openclaw logs --follow` | Ver logs en vivo |
| `openclaw health` | Ejecutar verificaciones de salud |

### Comandos de Chat

Envia estos en tu app de mensajeria:

| Comando | Descripcion |
|---------|-------------|
| `/new` | Iniciar una conversacion nueva |
| `/model` | Cambiar modelos de IA |
| `/compact` | Comprimir conversaciones largas |
| `/status` | Info de estado del bot |
| `/verbose on` | Mostrar respuestas detalladas |
| `/verbose off` | Ocultar mensajes internos |
| `stop` o `abort` | Cancelar una tarea en ejecucion |

### Configuracion

| Comando | Descripcion |
|---------|-------------|
| `openclaw configure` | Editor de config interactivo |
| `openclaw onboard` | Re-ejecutar el asistente de configuracion |
| `openclaw reset` | Restablecer a valores predeterminados |
| `openclaw doctor` | Diagnosticar problemas comunes |

## Usos Practicos

Cosas que realmente funcionan:

### Resumenes Matutinos

&gt; &quot;Cada dia laboral a las 7am, revisa mi calendario y email, luego envíame un resumen de lo que necesita atencion hoy.&quot;

### Tareas de Investigacion

&gt; &quot;Investiga los 5 principales competidores de [empresa]. Dame un resumen de una pagina con fortalezas y debilidades.&quot;

### Gestion de Archivos

&gt; &quot;Organiza mi carpeta de Descargas. Pon PDFs en Documents/PDFs, imagenes en Pictures, y borra cualquier cosa mayor a 30 dias.&quot;

### Asistencia de Codigo

&gt; &quot;Revisa el ultimo commit en mi repo y marca cualquier preocupacion de seguridad.&quot;

### Recordatorios y Seguimientos

&gt; &quot;Recuerdame dar seguimiento con [persona] sobre [tema] en 3 dias.&quot;

### Lo Que Requiere Mas Configuracion

Estos funcionan pero necesitan skills personalizados o integraciones:
- Gestion completa de email con auto-respuestas
- Alertas de trading y monitoreo de mercado
- Publicacion multi-plataforma en redes sociales
- Integracion CRM

Ve nuestro articulo de [mejores herramientas de codificacion con IA](https://www.bitdoze.com/ai-coading-tools/) para herramientas que manejan flujos de trabajo especificos de desarrolladores.

## Solucion de Problemas

### Bot No Responde

```bash
openclaw status --all
openclaw logs --follow
```

Generalmente uno de estos:
- El gateway crasheo o no esta ejecutandose
- La clave API expiro o fue rotada
- El token del canal esta mal o expiro

### Codigo de Emparejamiento Requerido

La seguridad predeterminada requiere aprobar nuevos remitentes:

```bash
openclaw pairing list telegram
openclaw pairing approve telegram &lt;codigo&gt;
```

### Contexto Demasiado Grande

Conversaciones largas alcanzan limites de tokens:

```
/compact
```

O empieza de nuevo:

```
/new
```

### Problemas de Conexion SSH

Si SSH pide contrasena cuando tienes una clave:

```bash
ssh -i ~/.ssh/id_ed25519 root@TU_IP_SERVIDOR
```

### Necesitas Rehacer la Configuracion

```bash
openclaw reset
openclaw onboard --install-daemon
```

## Consideraciones de Seguridad

OpenClaw tiene acceso a tu servidor. Algunas cosas a considerar:

&lt;ListCheck&gt;
&lt;ul&gt;
&lt;li&gt;Usa `allowFrom` para restringir quien puede enviar mensajes a tu bot&lt;/li&gt;
&lt;li&gt;Crea un email/GitHub separado para el bot si necesita acceso a cuentas&lt;/li&gt;
&lt;li&gt;Revisa la configuracion de sandbox si se ejecuta en una maquina con datos sensibles&lt;/li&gt;
&lt;li&gt;Mantén las claves API fuera de archivos de memoria y conversaciones&lt;/li&gt;
&lt;li&gt;Monitorea el uso de API — tareas descontroladas pueden quemar creditos&lt;/li&gt;
&lt;/ul&gt;
&lt;/ListCheck&gt;

El modo de emparejamiento predeterminado significa que remitentes desconocidos obtienen un codigo en lugar de acceso al bot. No deshabilites esto a menos que entiendas las implicaciones.

## Que Sigue

Una vez que tengas OpenClaw ejecutandose:

1. **Personaliza la personalidad**: Edita `~/.openclaw/workspace/SOUL.md` para cambiar como se comunica
2. **Agrega tu contexto**: Llena `~/.openclaw/workspace/USER.md` con tu trabajo y preferencias
3. **Revisa todas las opciones de config**: Ve la [referencia AGENTS.default](https://docs.openclaw.ai/reference/AGENTS.default) para la lista completa de configuraciones
4. **Instala skills utiles**: Explora el registro de skills de OpenClaw
5. **Agrega busqueda web**: Obtén una [clave API de Brave](https://brave.com/search/api/) para capacidad de navegacion web
6. **Conecta mas herramientas**: GitHub, Google Drive, integraciones de calendario

La [documentacion oficial](https://docs.openclaw.ai/) tiene guias detalladas de configuracion para integraciones especificas.

&lt;Accordion label=&quot;Preguntas Frecuentes&quot; group=&quot;faq&quot; expanded=&quot;true&quot;&gt;

**Necesito habilidades tecnicas para configurar OpenClaw?**

Comodidad basica con la linea de comandos ayuda. Si puedes hacer SSH a un servidor y copiar-pegar comandos, puedes configurarlo. El asistente maneja la mayor complejidad.

**Cuanto cuesta ejecutarlo?**

VPS: ~$5.50/mes en Hetzner. Costos de API: $15-100/mes dependiendo del uso y eleccion de modelo. Total: $20-110/mes para la mayoria de usuarios.

**Pueden multiples personas usar un OpenClaw?**

Si. Agrega multiples IDs de usuario a `allowFrom`. Cada persona obtiene su propio contexto de conversacion. Para equipos, Slack o Discord funcionan mejor que bots individuales de Telegram.

**Funciona en Windows?**

Usa WSL2 (Windows Subsystem for Linux). El soporte nativo de Windows no esta probado y tiene problemas de compatibilidad.

**Puedo ejecutarlo en una Raspberry Pi?**

Si, pero es limite. Pi 4/5 con 4GB+ de RAM funciona. Espera rendimiento mas lento y problemas de memoria ocasionales con conversaciones mas grandes.

**Cual es la diferencia entre stable y beta?**

Stable obtiene funciones probadas. Beta obtiene cosas nuevas primero pero puede tener bugs. Para uso en produccion, quedate con stable. Para probar nuevas funciones: `openclaw update --beta`

&lt;/Accordion&gt;

OpenClaw no es magia. Es una herramienta para ejecutar asistentes de IA que encajan en como ya trabajas. La configuracion es un poco de trabajo, sin duda. Pero tener un asistente que esta realmente disponible 24/7 y hace cosas — no solo habla de hacer cosas — ha valido la molestia para mí.

Si quieres explorar que mas hay disponible, revisa nuestro resumen de [alternativas a OpenClaw](/es/alternativas-openclaw/) cubriendo NanoClaw, nanobot, memU y bitdoze-bot.</content:encoded><category>ai</category><category>ai-tools</category><category>self-hosted</category><category>vps</category></item></channel></rss>