11 KiB
nix-hermes-agent
Paquete de Nix y módulo de NixOS declarativo para Hermes Agent de Nous Research.
Todo está configurado en Nix. Configuración, documentos, secretos, servicio — un nixos-rebuild switch y ya está activo.
Los pines de upstream se promueven a través de PRs de candidatos en cuarentena, por lo que una versión defectuosa de Hermes no puede reemplazar el último paquete conocido como estable. Consulta la política de actualización de upstream.
Inicio Rápido
1. Añadir a tu flake
{
inputs.nix-hermes.url = "github:0xrsydn/nix-hermes-agent";
outputs = { self, nixpkgs, nix-hermes, ... }: {
nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
modules = [
nix-hermes.nixosModules.hermes-agent
./hermes.nix # tu configuración (ver abajo)
];
};
};
}
2. Configurar declarativamente
# hermes.nix
{ ... }:
{
services.hermes-agent = {
enable = true;
# ── Configuración declarativa (se renderiza en cli-config.yaml) ──
config = {
model = {
default = "anthropic/claude-opus-4.6";
provider = "openrouter";
};
terminal = {
backend = "local";
timeout = 180;
lifetime_seconds = 300;
};
agent = {
max_turns = 60;
reasoning_effort = "medium";
};
memory = {
memory_enabled = true;
user_profile_enabled = true;
memory_char_limit = 2200;
nudge_interval = 10;
};
compression = {
enabled = true;
threshold = 0.85;
summary_model = "google/gemini-3-flash-preview";
};
toolsets = [ "all" ];
};
# ── Secretos (no en el Nix store) ──
environmentFiles = [
"/run/secrets/hermes-env" # ANTHROPIC_API_KEY, TELEGRAM_TOKEN, etc.
];
# ── Variables de entorno no secretas ──
environment = {
LLM_MODEL = "anthropic/claude-opus-4.6";
};
# ── Documentos del espacio de trabajo (en línea o rutas de archivo) ──
documents = {
"SOUL.md" = ''
# SOUL.md
Eres un asistente de IA agudo y pragmático.
'';
"AGENTS.md" = ''
# AGENTS.md
Lee SOUL.md primero. Luego ayuda al usuario.
'';
"USER.md" = ''
# USER.md
Nombre: Tu Humano
'';
# O referencia un archivo:
# "SOUL.md" = ./documents/SOUL.md;
};
# ── Habilidades declarativas (fase 1) ──
skills = {
bundled.enable = true;
optional = [
"creative/blender-mcp"
];
custom = {
repo-watch = {
category = "research";
source = ./skills/repo-watch;
};
};
};
# ── Servidores MCP ──
mcpServers = {
context7 = {
command = "npx";
args = [ "-y" "@upstash/context7-mcp@latest" ];
};
};
# ── Herramientas extra en el PATH ──
extraPackages = with pkgs; [ jq ripgrep curl ];
};
}
Gestión de Secretos
Enfoque de archivos planos
services.hermes-agent = {
environmentFiles = [ "/run/secrets/hermes-env" ];
authFile = "/run/secrets/hermes-auth.json"; # opcional, para tokens OAuth
};
Enfoque con sops-nix
sops.secrets."hermes/env" = {
sopsFile = ./secrets/hermes.yaml;
owner = "hermes";
group = "hermes";
};
sops.secrets."hermes/auth" = {
sopsFile = ./secrets/hermes.yaml;
owner = "hermes";
group = "hermes";
};
services.hermes-agent = {
enable = true;
environmentFiles = [ config.sops.secrets."hermes/env".path ];
authFile = config.sops.secrets."hermes/auth".path;
config.model = {
default = "anthropic/claude-opus-4.6";
provider = "openrouter";
};
};
Ejemplo de estructura de archivo de secretos
hermes/env: |
OPENROUTER_API_KEY=sk-or-...
ANTHROPIC_API_KEY=sk-ant-...
TELEGRAM_TOKEN=123456:ABC...
GLM_API_KEY=...
hermes/auth: |
{"nous": {"token": "...", "refresh": "..."}, "codex": {"token": "..."}}
3. Crear archivo de secretos
# /run/secrets/hermes-env (o donde gestiones tus secretos)
OPENROUTER_API_KEY=sk-or-...
ANTHROPIC_API_KEY=sk-ant-...
TELEGRAM_TOKEN=123456:ABC...
TELEGRAM_ALLOWED_USERS=tu_user_id
4. Desplegar
nixos-rebuild switch
systemctl status hermes-agent
journalctl -u hermes-agent -f
Arquitectura
Tú (Telegram/Discord/WhatsApp/Slack) → Gateway → Tools → La máquina ejecuta acciones
Cómo funciona
- El
attrsetservices.hermes-agent.configse fusiona profundamente y se renderiza encli-config.yaml. - Los documentos se instalan en el directorio del espacio de trabajo (
workspace). - Los secretos permanecen fuera del Nix store mediante
environmentFiles. - El servicio de systemd ejecuta
hermes gatewaycon todo conectado.
Diseño de directorios
/var/lib/hermes/ # stateDir
├── .hermes/ # Hogar de Hermes (HERMES_HOME)
│ ├── cli-config.yaml # Generado desde la opción config
│ ├── .env # Secretos (desde environmentFiles)
│ ├── memory/ # Memoria del agente (tiempo de ejecución)
│ ├── skills/ # Habilidades (tiempo de ejecución)
│ └── logs/ # Logs de sesión
├── workspace/ # workingDirectory
│ ├── SOUL.md # Desde la opción documents
│ ├── AGENTS.md
│ └── USER.md
└── logs/
└── gateway.log # Log del servicio
Habilidades Declarativas vs Habilidades Nativas de Hermes
La opción skills está diseñada para aumentar a Hermes, no para reemplazar el flujo de trabajo nativo de habilidades de Hermes.
Ambos enfoques se componen en el mismo directorio de ejecución:
${stateDir}/.hermes/skills/
Eso significa que puedes usar ambos:
- habilidades declarativas desde Nix.
- habilidades interactivas/de tiempo de ejecución mediante
hermes skills install.
Modelo de propiedad
Gestionadas por Nix
Las habilidades declaradas a través de:
services.hermes-agent.skills.bundledservices.hermes-agent.skills.optionalservices.hermes-agent.skills.custom
son conciliadas por el módulo y rastreadas en:
.nix-managed-skills.json
Estas rutas se consideran propiedad de Nix.
Gestionadas por Hermes
Las habilidades instaladas posteriormente a través de la CLI de Hermes, junto con los metadatos del hub en:
.hermes/skills/.hub/
no son tocadas por el módulo a menos que colisionen con una ruta gestionada por Nix.
Regla de colisión
Si una instalación de la CLI de Hermes y una habilidad declarativa de Nix apuntan a la misma ruta instalada, la versión declarativa de Nix gana en la siguiente activación/reconstrucción.
Ejemplo:
- Nix declara
creative/blender-mcp. - El usuario instala más tarde otro
creative/blender-mcpa través de la CLI de Hermes.
En la siguiente reconstrucción, se restaura la versión declarada en Nix.
Flujo de trabajo recomendado
Usa la CLI de Hermes para:
- Experimentación.
- Descubrimiento de habilidades en el hub/comunidad.
- Instalaciones temporales.
- Probar antes de conservar.
Usa las habilidades declarativas de Nix para:
- Despliegues estables/reproducibles.
- Habilidades de upstream empaquetadas que siempre quieras tener.
- Habilidades opcionales seleccionadas que quieras fijar a la revisión del paquete.
- Habilidades personalizadas locales almacenadas en git.
Un patrón recomendado es:
- Instalar/probar una habilidad interactivamente.
- Decidir que vale la pena conservarla.
- Promoverla a la configuración de Nix si deseas que sea reproducible.
Esto mantiene nix-hermes-agent útil sin interferir con la experiencia nativa de Hermes.
Opciones del Módulo
| Opción | Tipo | Predeterminado | Descripción |
|---|---|---|---|
enable |
bool | false |
Habilitar el gateway de Hermes Agent |
config |
attrset | {} |
Configuración declarativa (→ cli-config.yaml) |
configFile |
path | null |
Usar un archivo de configuración existente (sobrescribe config) |
documents |
attrset | {} |
Archivos del espacio de trabajo (valores de cadena o ruta) |
skills |
attrset | {} |
Habilidades declarativas de Hermes (bundled, optional, custom local) |
environmentFiles |
list | [] |
Archivos de entorno para secretos (systemd EnvironmentFile) |
environment |
attrset | {} |
Variables de entorno no secretas |
authFile |
path | null |
Archivo de credenciales OAuth (auth.json) |
mcpServers |
attrset | {} |
Configuraciones de servidor MCP (fusionadas en config) |
user |
string | "hermes" |
Usuario del servicio |
group |
string | "hermes" |
Grupo del servicio |
stateDir |
path | /var/lib/hermes |
Directorio de estado |
workingDirectory |
path | ${stateDir}/workspace |
Directorio de trabajo |
extraPackages |
list | [] |
Paquetes extra en el PATH |
extraArgs |
list | [] |
Argumentos extra para hermes gateway |
logPath |
path | ${stateDir}/logs/gateway.log |
Archivo de log |
restart |
string | "always" |
Política de reinicio de systemd |
restartSec |
int | 5 |
Retraso de reinicio |
Referencia de Configuración
El attrset config se mapea directamente al cli-config.yaml de Hermes. Secciones clave:
| Sección | Propósito |
|---|---|
model |
Modelo predeterminado, proveedor, base_url |
terminal |
Backend (local/ssh/docker/modal), cwd, timeout |
agent |
max_turns, verbose, reasoning_effort, personalities |
memory |
memory_enabled, user_profile_enabled, límites de caracteres |
compression |
Ajustes de compresión de contexto |
session_reset |
Política de auto-reinicio para mensajería |
skills |
Ajustes de sugerencia para creación de habilidades |
toolsets |
Qué grupos de herramientas habilitar |
mcp_servers |
Conexiones de servidores MCP |
delegation |
Ajustes de sub-agentes |
browser |
Ajustes de la herramienta de navegador |
stt |
Configuración de transcripción de voz |
display |
Ajustes de UI/skin |
Consulta la referencia de configuración completa.
Solo el Paquete
# Ejecutar directamente
nix run github:0xrsydn/nix-hermes-agent -- --help
# En un shell de desarrollo
nix develop github:0xrsydn/nix-hermes-agent
# Usar el overlay
nixpkgs.overlays = [ nix-hermes.overlays.default ];
Licencia
MIT (igual que el upstream)