approval: dangerous_header: "⚠️ COMANDO PELIGROSO: {description}" choose_long: " [o]una vez | [s]sesión | [a]siempre | [d]denegar" choose_short: " [o]una vez | [s]sesión | [d]denegar" prompt_long: " Opción [o/s/a/D]: " prompt_short: " Opción [o/s/D]: " choose_smart_deny: " [o]una vez | [d]denegar" prompt_smart_deny: " Opción [o/D]: " smart_deny_once_inputs: "o,once,vez" smart_deny_deny_inputs: "d,deny,denegar,no" timeout: " ⏱ Sin respuesta en {waited} — el comando no se ejecutó. Pide de nuevo para reintentar, o sube el límite: hermes config set approvals.timeout {suggested}" allowed_once: " ✓ Permitido una vez" allowed_session: " ✓ Permitido en esta sesión" allowed_always: " ✓ Añadido a la lista de permitidos permanente" denied: " ✗ Denegado" cancelled: " ✗ Cancelado" blocklist_message: "Este comando está en la lista de bloqueo incondicional y no se puede aprobar." inputs: approve: "approve,yes,ok,okay,confirm,y,aprobar,sí,si,confirmar,s" deny: "deny,no,reject,cancel,n,denegar,rechazar,cancelar" always: "always,approve always,always approve,siempre,aprobar siempre,siempre aprobar" session: "session,approve session,session approve,sesión,sesion,aprobar sesión,aprobar sesion" confirm_once: "approve,approve once,once,yes,ok,confirm,aprobar,aprobar una vez,una vez,sí,si,confirmar" confirm_always: "always,always approve,remember,siempre,siempre aprobar,recordar" confirm_cancel: "cancel,nevermind,no,deny,cancelar,olvídalo,olvidalo,denegar" summary: denied: "Denegaste este {noun}: no se ejecutó." timeout: "Sin respuesta en {window}: el {noun} no se ejecutó." notify_failed: "No se pudo entregar la solicitud de aprobación: el {noun} no se ejecutó." cancelled: "La solicitud de aprobación se retiró o nunca te llegó: el {noun} no se ejecutó." blocked: "Este {noun} no está permitido en una sesión sin supervisión: no se ejecutó." default: "Este {noun} no se ejecutó." noun: command: "comando" code: "código" action: "acción" window: hour_one: "{count} hora" hour_other: "{count} horas" minute_one: "{count} minuto" minute_other: "{count} minutos" second_one: "{count} segundo" second_other: "{count} segundos" gateway: approval_expired: "⚠️ La aprobación ha caducado (el agente ya no está esperando). Pida al agente que lo intente de nuevo." draining: "⏳ Esperando a que terminen {count} agente(s) activo(s) antes de reiniciar..." goal_cleared: "✓ Objetivo eliminado." no_active_goal: "No hay objetivo activo." config_read_failed: "⚠️ No se pudo leer config.yaml: {error}" config_save_failed: "⚠️ No se pudo guardar la configuración: {error}" model: error_prefix: "Error: {error}" switched: "Modelo cambiado a `{model}`" provider_label: "Proveedor: {provider}" context_label: "Contexto: {tokens} tokens" max_output_label: "Salida máxima: {tokens} tokens" cost_label: "Coste: {cost}" capabilities_label: "Capacidades: {capabilities}" prompt_caching_enabled: "Caché de prompts: activado" warning_prefix: "Advertencia: {warning}" saved_global: "Guardado en config.yaml (`--global`)" session_only_hint: "_(solo para esta sesión — añade `--global` para guardarlo)_" current_label: "Actual: `{model}` en {provider}" current_tag: " (actual)" more_models_suffix: " (+{count} más)" usage_switch_model: "`/model ` — cambiar modelo" usage_switch_provider: "`/model --provider ` — cambiar proveedor" usage_persist: "`/model --global` — guardar de forma permanente" err_skew: "Este gateway ejecuta código de {boot_rev}, pero el checkout en disco ahora es {disk_rev}. Cambiar de modelo podría provocar un fallo por módulos obsoletos: reinicia el gateway para cargar el código nuevo: hermes gateway restart" err_switch_failed: "El cambio al modelo {model} falló ({error}); se mantiene {current}." err_config_not_updated: "config.yaml no se actualizó ({error})" err_stale_override: "guardado en config.yaml, pero no se pudo borrar la anulación obsoleta de la sesión ({error})" next_turn_only: " (solo el próximo turno: se restaura tras una respuesta)" switch_cancelled: "🟡 Cambio de modelo cancelado. El modelo actual no cambia ({model})." guard_confirm: "⚠️ **{title}**\n\n{message}\n\n_Alternativa en texto: responde `{prefix}approve` para cambiar o `{prefix}cancel` para conservar el modelo actual._" agents: header: "🤖 **Agentes y tareas activos**" active_agents: "**Agentes activos:** {count}" this_chat: " · este chat" more: "... y {count} más" running_processes: "**Procesos en segundo plano en ejecución:** {count}" async_jobs: "**Tareas asíncronas del gateway:** {count}" background_delegations: "**Delegaciones en segundo plano:** {count}" none: "No hay agentes activos ni tareas en ejecución." state_starting: "iniciando" state_running: "en ejecución" no_progress: " · sin progreso {seconds}s" quiet_for: " · en silencio {seconds}s" between_turns: "entre turnos" child_row: " - hijo {index}: {calls} llamadas a la API · {doing}" active_ago: " · activo hace {seconds}s" approve: no_pending: "No hay ningún comando pendiente que aprobar." once_singular: "✅ Comando aprobado. El agente se está reanudando..." once_plural: "✅ Comandos aprobados ({count} comandos). El agente se está reanudando..." session_singular: "✅ Comando aprobado (patrón aprobado para esta sesión). El agente se está reanudando..." session_plural: "✅ Comandos aprobados (patrón aprobado para esta sesión) ({count} comandos). El agente se está reanudando..." always_singular: "✅ Comando aprobado (patrón aprobado permanentemente). El agente se está reanudando..." always_plural: "✅ Comandos aprobados (patrón aprobado permanentemente) ({count} comandos). El agente se está reanudando..." background: usage: "Uso: /bg \nEjemplo: /bg Resume las principales historias de HN de hoy\n\nEjecuta el prompt en una sesión separada. Puedes seguir chateando — el resultado aparecerá aquí cuando termine." started: "🔄 Tarea en segundo plano iniciada: \"{preview}\"\nID de tarea: {task_id}\nPuedes seguir chateando — los resultados aparecerán aquí cuando terminen." task_finished: "✅ Tarea en segundo plano terminada" task_failed: "❌ La tarea en segundo plano falló" exit_code: "código de salida {code}" last_output: ". Última salida:\n```\n{tail}\n```" rerun_hint: "\nPídeme reejecutarla o mostrar el registro completo." no_credentials: "❌ La tarea en segundo plano no pudo iniciarse porque no hay ningún inicio de sesión de modelo de IA configurado. Usa /login o ejecuta `hermes setup` en el host." complete_header: "✅ Tarea en segundo plano completada\nPrompt: \"{preview}\"\n\n" no_response: "(No se generó respuesta)" failed: "❌ Tu tarea en segundo plano \"{preview}\" falló antes de terminar. Envía /bg de nuevo para reintentar, o /agents para ver qué sigue en ejecución." final_output: "{header}\n\nSalida final:\n```\n{output}\n```" still_running: "⏳ La tarea en segundo plano sigue en ejecución" recent_output: "{header}\n\nSalida reciente:\n```\n{output}\n```" btw: usage: "Uso: /btw \nEjemplo: /btw ¿en qué archivo estaba ese error?\n\nResponde una pregunta rápida sobre esta conversación sin interrumpirla. Para una tarea independiente en segundo plano, usa /bg ." no_history: "Aún no hay conversación — envía tu pregunta como un mensaje normal." no_provider: "❌ No se puede responder la pregunta: no hay credenciales de proveedor configuradas." started: "💬 Pregunta aparte: \"{preview}\"\nRespondiendo desde una instantánea de esta conversación — el trabajo actual continúa." answer: "💬 /btw: \"{preview}\"\n\n{answer}" failed: "❌ /btw falló: \"{preview}\"\n{error}" branch: db_unavailable: "Base de datos de sesiones no disponible." no_conversation: "No hay conversación para ramificar — envía un mensaje primero." create_failed: "No se pudo crear la rama: {error}" switch_failed: "Rama creada pero no se pudo cambiar a ella." branched_one: "⑂ Ramificado a **{title}** ({count} mensaje copiado)\nOriginal: `{parent}`\nRama: `{new}`\nUsa `/resume` para volver al original." branched_many: "⑂ Ramificado a **{title}** ({count} mensajes copiados)\nOriginal: `{parent}`\nRama: `{new}`\nUsa `/resume` para volver al original." branched_thread_one: "⑂ Ramificado a **{title}** en un hilo nuevo ({count} mensaje copiado)\nHilo: {thread}\nOriginal: `{parent}` — este chat permanece en él\nRama: `{new}`\nUsa `/branch --here` para ramificar en este chat." branched_thread_many: "⑂ Ramificado a **{title}** en un hilo nuevo ({count} mensajes copiados)\nHilo: {thread}\nOriginal: `{parent}` — este chat permanece en él\nRama: `{new}`\nUsa `/branch --here` para ramificar en este chat." thread_fallback: "No se pudo crear un hilo aquí, así que la rama reemplazó la sesión de este chat." commands: usage: "Uso: `/commands [page]`" skill_header: "⚡ **Comandos de skill**:" default_desc: "Comando de skill" none: "No hay comandos disponibles." header: "📚 **Comandos** ({total} en total, página {page}/{total_pages})" nav_prev: "`/commands {page}` ← anterior" nav_next: "siguiente → `/commands {page}`" out_of_range: "_(La página solicitada {requested} estaba fuera de rango, mostrando la página {page}.)_" compress: not_enough: "No hay suficiente conversación para comprimir (se necesitan al menos 4 mensajes)." no_provider: "No hay proveedor configurado — no se puede comprimir." nothing_to_do: "Aún no hay nada que comprimir (la transcripción sigue siendo todo contexto protegido)." aggressive_unsupported: "--aggressive no es compatible; usa '/compress here [N]' para conservar solo los intercambios recientes, o /undo para eliminar turnos." focus_line: "Enfoque: \"{topic}\"" summary_failed: "⚠️ Falló la generación del resumen ({error}). Se eliminaron {count} mensaje(s) históricos y se reemplazaron por un marcador; el contexto anterior ya no se puede recuperar. Considera revisar la configuración del modelo auxiliary.compression." aborted: "⚠️ Compresión abortada ({error}). No se eliminó ningún mensaje — la conversación está intacta. Ejecuta /compress para reintentar, /reset para una sesión limpia, o revisa la configuración de tu modelo auxiliary.compression." aux_failed: "ℹ️ El modelo de compresión configurado `{model}` falló ({error}). Recuperado con tu modelo principal — el contexto está intacto — pero quizá quieras revisar `auxiliary.compression.model` en config.yaml." turnhold_deferred: "ℹ️ Compresión de contexto aplazada — el resumen aún se está transmitiendo. Se continúa sin compresión en este turno." failed: "Compresión fallida: {error}" hygiene_timeout: "⚠️ Acortar el historial de la conversación tardó demasiado, así que lo omití y dejé todo tal cual. Ejecuta /compress para intentarlo de nuevo o /new para empezar de cero." hygiene_timeout_doctor_hint: " Si esto sigue ocurriendo, ejecuta `hermes doctor` en el host." hygiene_failed: "⚠️ Acortar el historial de la conversación falló, así que dejé todo tal cual. Ejecuta /compress para intentarlo de nuevo o /new para empezar de cero. Si esto sigue ocurriendo, ejecuta `hermes doctor` en el host." codex_nothing: "🗜️ Nada que compactar: esta sesión usa el runtime app-server de Codex, cuyo contexto vive en un hilo propio de Codex que solo existe mientras el agente está activo. Envía primero un mensaje y luego /compress, o /reset para empezar de cero." codex_compacted: "🗜️ Hilo del app-server de Codex compactado (thread/compact). El espejo de la transcripción no cambia por diseño: ahora el app-server lleva el contexto compactado." codex_incomplete: "⚠️ La compactación del app-server de Codex no se completó: el hilo no cambió. Revisa los registros del app-server, reintenta /compress o usa /reset para una sesión limpia." debug: upload_failed: "✗ No se pudo subir el informe de depuración: {error}" header: "**Informe de depuración subido:**" auto_delete: "⏱ Los pastes se eliminarán automáticamente en 6 horas." full_logs_hint: "Para subir registros completos, usa `hermes debug share` desde la CLI." share_hint: "Comparte estos enlaces con el equipo de Hermes para obtener soporte." report_label: "Informe" deny: stale: "❌ Comando denegado (la aprobación había caducado)." no_pending: "No hay ningún comando pendiente que denegar." denied_singular: "❌ Comando denegado." denied_plural: "❌ Comandos denegados ({count} comandos)." denied_reason_singular: "❌ Comando denegado. Motivo transmitido al agente: \"{reason}\"" denied_reason_plural: "❌ Comandos denegados ({count} comandos). Motivo transmitido al agente: \"{reason}\"" fast: not_supported: "⚡ /fast solo está disponible para modelos de OpenAI que admiten Priority Processing." status: "⚡ Priority Processing\n\nModo actual: `{mode}`\n\n_Uso:_ `/fast `" unknown_arg: "⚠️ Argumento desconocido: `{arg}`\n\n**Opciones válidas:** normal, fast, status" saved: "⚡ ✓ Priority Processing: **{label}** (guardado en la configuración)\n_(se aplica en el próximo mensaje)_" session_only: "⚡ ✓ Priority Processing: **{label}** (solo esta sesión)" label_fast: "RÁPIDO" label_normal: "NORMAL" status_fast: "rápido" status_normal: "normal" picker_title: "⚡ **Priority Processing**\n\nModo actual: `{mode}`\n\nElige una opción:" choice_fast: "fast — Priority Processing activado" choice_normal: "normal — procesamiento estándar" choice_auto: "auto — rápido en los primeros segundos de cada turno" choice_cold: "cold — rápido solo en el primer turno de una sesión" choice_ultrafast: "ultrafast — OpenAI Ultrafast (GPT-6 Astra, precio x6)" ultrafast_not_supported: "⚡ Ultrafast solo está disponible para GPT-6 Astra (modelo actual: `{model}`)." footer: status: "📎 Pie de ejecución: **{state}**\nCampos: `{fields}`\nPlataforma: `{platform}`" usage: "Uso: `/footer [on|off|status]`" saved: "📎 Pie de ejecución: **{state}**{example}\n_(guardado globalmente — se aplica en el próximo mensaje)_" example_line: "\nEjemplo: `{preview}`" state_on: "ACTIVADO" state_off: "DESACTIVADO" goal: unavailable: "Los objetivos no están disponibles en esta sesión." no_goal_set: "No hay objetivo establecido." paused: "⏸ Objetivo pausado: {goal}" no_resume: "No hay objetivo para reanudar." resumed: "▶ Objetivo reanudado: {goal}\nContinuando ahora — daré el siguiente paso de inmediato." invalid: "Objetivo no válido: {error}" set: "⊙ Objetivo establecido (presupuesto de {budget} turnos): {goal}\nSeguiré trabajando hasta que el objetivo se complete, lo pauses/elimines o se agote el presupuesto.\nControles: /goal status · /goal pause · /goal resume · /goal clear" gate_add_admin_only: "⛔ /goal gate add requiere un administrador del gateway configurado explícitamente (allow_admin_from para MD, group_allow_admin_from para grupos)." help: header: "📖 **Comandos de Hermes**\n" skill_header: "\n⚡ **Comandos de skill** ({count} activos):" more_use_commands: "\n... y {count} más. Usa `/commands` para la lista paginada completa." insights: invalid_days: "Valor --days no válido: {value}" error: "Error al generar el análisis: {error}" kanban: error_prefix: "⚠ error de kanban: {error}" subscribed_suffix: "(suscrito — recibirás una notificación cuando {task_id} termine o se bloquee)" truncated_suffix: "… (truncado; usa `hermes kanban …` en tu terminal para la salida completa)" no_output: "(sin salida)" wake: completed: "completed" gave_up: "gave up (retries exhausted)" crashed: "crashed (worker exited); dispatcher will retry" timed_out: "timed out; dispatcher will retry" blocked: "blocked; needs attention" review_requested: "handed off for review; the implementation is done" changes_requested: "review requested changes (BLOCK); implementation is not approved" block_loop_detected: "routed to triage after repeated blocks; orchestration attention needed" status_default: "status changed" status_joiner: ", " message: "[kanban] Task {task_id} {status}.\nTitle: {title}\nAssignee: @{assignee}\nBoard: {board}\n\nCheck the result or decide the next step." handoff: "Result: {summary}" review_detail: "Review feedback: {reason}\nInspect the existing card and its current review run; return work to the same implementation task. Do not treat this BLOCK as approval and do not create a duplicate task." guidance: "This is an automatic task-status notification, not a request to decompose the task again. Inspect the current board before creating follow-up tasks; do not recreate tasks or graphs that already exist." ping: completed: "✔ {head} terminada — {title}{handoff}" review_requested: "👀 {head} lista para revisión — {title}{handoff}" changes_default_reason: "los comentarios del revisor requieren cambios" reviewer_suffix: " — revisor @{reviewer}" implementer_suffix: " → implementador @{implementer}" changes_requested: "🛑 {board_tag}Kanban {task_id}: la revisión solicitó cambios/BLOQUEO: {reason}{provenance}" triage: "🛑 {head} enviada a TRIAGE — {why}{recurrences}{reason}" triage_decision: "necesita una decisión humana" triage_attention: "requiere atención de orquestación" triage_recurrences: " (bloqueada {value} veces por la misma causa)" reason_suffix: ": {value}" failed_n_times: "falló {count} veces seguidas" kept_failing: "siguió fallando" last_error: " (último: {value})" gave_up: "⛔ {head} ahora está bloqueada: {count}{last}. Corrige la causa y luego ejecuta `hermes kanban unblock {task_id}` (o `hermes kanban reassign {task_id}`). Registros: `hermes kanban log {task_id}`." limit_minutes: "su límite de {minutes} minutos" limit_generic: "su límite de tiempo" timed_out: "⏱ {head} superó {span} y se detuvo; se reintentará automáticamente." blocked: "⏸ {head} bloqueada{reason}" crashed: "✖ {head} — su worker se detuvo inesperadamente; se reintentará automáticamente." status: "🔄 {head} → {status}" board_tag: "[{board}] " assignee_tag: "@{assignee} " head: "{board_tag}{assignee_tag}Kanban {task_id}" personality: none_configured: "No hay personalidades configuradas en `{path}/config.yaml`" header: "🎭 **Personalidades disponibles**\n" none_option: "• `none` — (sin superposición de personalidad)" item: "• `{name}` — {preview}" usage: "\nUso: `/personality `" save_failed: "⚠️ No se pudo guardar el cambio de personalidad: {error}" cleared: "🎭 Personalidad eliminada — usando el comportamiento base del agente.\n_(surte efecto en el siguiente mensaje)_" set_to: "🎭 Personalidad establecida en **{name}**\n_(surte efecto en el siguiente mensaje)_" unknown: "Personalidad desconocida: `{name}`\n\nDisponibles: {available}" err_config_write: "falló la escritura de la configuración" profile: header: "👤 **Perfil:** `{profile}`" home: "📂 **Inicio:** `{home}`" plain: "Perfil: {profile}\nHome: {home}" reasoning: level_default: "medium (predeterminado)" level_disabled: "none (deshabilitado)" scope_session: "anulación de sesión" scope_global: "configuración global" status: "🧠 **Ajustes de razonamiento**\n\n**Esfuerzo:** `{level}`\n**Alcance:** {scope}\n**Visualización:** {display}\n\n_Uso:_ `/reasoning [--global]`" display_on: "activada ✓" display_off: "desactivada" display_set_on: "🧠 ✓ Visualización de razonamiento: **ACTIVADA**\nEl pensamiento del modelo se mostrará antes de cada respuesta en **{platform}**." display_set_off: "🧠 ✓ Visualización de razonamiento: **DESACTIVADA** para **{platform}**" reset_global_unsupported: "⚠️ `/reasoning reset --global` no es compatible. Usa `/reasoning --global` para cambiar el valor global por defecto." reset_done: "🧠 ✓ Anulación de razonamiento de la sesión borrada; volviendo a la configuración global." unknown_arg: "⚠️ Argumento desconocido: `{arg}`\n\n**Niveles válidos:** none, minimal, low, medium, high, xhigh, max, ultra\n**Visualización:** show, hide\n**Persistir:** añade `--global` para guardar más allá de esta sesión" picker_title: "🧠 **Ajustes de razonamiento**\n\n**Esfuerzo:** `{level}`\n**Alcance:** {scope}\n**Visualización:** {display}\n\nElige una opción:" choice_none: "none — desactivar razonamiento" choice_reset: "reset — borrar el ajuste de sesión" choice_show: "mostrar razonamiento en respuestas" choice_hide: "ocultar razonamiento en respuestas" set_global: "🧠 ✓ Esfuerzo de razonamiento ajustado a `{effort}` (guardado en la configuración)\n_(se aplica en el próximo mensaje)_" set_global_save_failed: "🧠 ✓ Esfuerzo de razonamiento ajustado a `{effort}` (solo en la sesión — error al guardar la configuración)\n_(se aplica en el próximo mensaje)_" set_session: "🧠 ✓ Esfuerzo de razonamiento ajustado a `{effort}` (solo en la sesión — añade `--global` para persistir)\n_(se aplica en el próximo mensaje)_" quote_label_discord: "-# 💭 Razonamiento" quote_label_md: "> 💭 **Razonamiento:**" more_lines: "\n_... ({count} líneas más)_" block: "💭 **Razonamiento:**\n```\n{reasoning}\n```\n\n{response}" reload_mcp: cancelled: "🟡 /reload-mcp cancelado. Las herramientas MCP no han cambiado." always_followup: "ℹ️ Las próximas llamadas a `/reload-mcp` se ejecutarán sin confirmación. Reactiva mediante `approvals.mcp_reload_confirm: true` en `config.yaml`." confirm_prompt: "⚠️ **Confirmar /reload-mcp**\n\nRecargar los servidores MCP reconstruye el conjunto de herramientas de esta sesión e **invalida la caché de prompt del proveedor** — el siguiente mensaje reenviará los tokens de entrada completos. En modelos de contexto largo o de razonamiento alto esto puede resultar costoso.\n\nElige:\n• **Aprobar una vez** — recargar ahora\n• **Aprobar siempre** — recargar ahora y silenciar esta confirmación permanentemente\n• **Cancelar** — dejar las herramientas MCP sin cambios\n\n_Alternativa de texto: responde `/approve`, `/always` o `/cancel`._" header: "🔄 **Servidores MCP recargados**\n" reconnected: "♻️ Reconectados: {names}" added: "➕ Añadidos: {names}" removed: "➖ Eliminados: {names}" none_connected: "No hay servidores MCP conectados." tools_available: "\n🔧 {tools} herramienta(s) disponibles de {servers} servidor(es)" failed: "❌ Falló la recarga de MCP: {error}" reload_skills: header: "🔄 **Skills recargadas**\n" no_new: "No se detectaron nuevas skills." total: "\n📚 {count} skill(s) disponibles" added_header: "➕ **Skills añadidas:**" removed_header: "➖ **Skills eliminadas:**" item_with_desc: " - {name}: {desc}" item_no_desc: " - {name}" failed: "❌ Falló la recarga de skills: {error}" reset: header_default: "✨ ¡Sesión reiniciada! Empezando de nuevo." header_new: "✨ ¡Nueva sesión iniciada!" header_titled: "✨ Nueva sesión iniciada: {title}" title_rejected: "\n⚠️ Título rechazado: {error}" title_error_untitled: "\n⚠️ {error} — sesión iniciada sin título." title_empty_untitled: "\n⚠️ El título queda vacío tras la limpieza — sesión iniciada sin título." tip: "\n✦ Consejo: {tip}" restart: in_progress: "⏳ El reinicio del gateway ya está en curso..." restarting: "♻ Reiniciando el gateway. Si no recibes notificación en 60 segundos, reinicia desde la consola con `hermes gateway restart`." resume: db_unavailable: "Base de datos de sesiones no disponible." parse_error: "⚠️ No se pudo analizar los argumentos de `/resume`: {error}.\nUsa comillas alrededor de títulos con espacios, por ejemplo: `/resume \"Proyecto A Plan\"`." matrix_no_named_sessions: "No se encontraron sesiones con nombre para esta sala de Matrix.\nUsa `/title Mi Sesión` para nombrar la sesión de la sala actual, `/resume --all` para listar todas las sesiones de Matrix, o `/resume --cross-room ` para cruzar límites de sala explícitamente." matrix_blocked_no_origin: "⚠️ Matrix /resume bloqueado: esta sesión con nombre no tiene sala de origen registrada, por lo que Hermes no la reanudará dentro de la sala actual por defecto. Usa `/resume --cross-room {name}` si quieres cruzar los límites de sala intencionadamente." matrix_blocked_other_room: "⚠️ Matrix /resume bloqueado: esa sesión pertenece a una sala de Matrix diferente ({room}). Usa `/resume --cross-room {name}` si quieres reanudarla aquí intencionadamente." matrix_cross_room_success: "⚠️ Reanudación entre salas: **{title}** reanudada dentro de la sala de Matrix **{room}**.\nLos próximos mensajes en esta sala usarán esa transcripción hasta `/reset` u otro `/resume`.{msg_part}" blocked_not_owner: "⚠️ /resume bloqueado: '**{name}**' pertenece a otro usuario o chat. Solo puedes reanudar sesiones de este chat." no_named_sessions: "No se encontraron sesiones con nombre.\nUsa `/title Mi sesión` para nombrar la sesión actual y luego `/resume Mi sesión` para volver a ella." all_requires_admin: "_Nota: `--all` (listado entre chats) requiere un administrador configurado; se muestran solo las sesiones de este chat._" list_header: "📋 **Sesiones con nombre**\n" list_item: "• **{title}**{preview_part}" list_item_numbered: "{index}. **{title}**{preview_part}" list_preview_suffix: " — _{preview}_" list_footer: "\nUso: `/resume `" list_footer_numbered: "\nUso: `/resume ` o `/resume ` (p. ej. `/resume 1` para la más reciente)" list_failed: "No se pudieron listar las sesiones: {error}" out_of_range: "El índice de reanudación {index} está fuera de rango.\nUsa `/resume` sin argumentos para ver las sesiones disponibles." not_found: "No se encontró ninguna sesión que coincida con '**{name}**'.\nUsa `/resume` sin argumentos para ver las sesiones disponibles." already_on: "📌 Ya estás en la sesión **{name}**." switch_failed: "No se pudo cambiar de sesión." resumed_one: "↻ Sesión **{title}** reanudada ({count} mensaje). Conversación restaurada." resumed_many: "↻ Sesión **{title}** reanudada ({count} mensajes). Conversación restaurada." resumed_no_count: "↻ Sesión **{title}** reanudada. Conversación restaurada." msg_count_one: " ({count} mensaje)" msg_count_other: " ({count} mensajes)" retry: no_previous: "No hay un mensaje anterior para reintentar." unsafe: "No se puede reintentar ese mensaje de forma segura: {error}" failed_unchanged: "El reintento falló; la transcripción no se modificó." rollback: not_enabled: "Los checkpoints no están habilitados.\nHabilítalos en config.yaml:\n```\ncheckpoints:\n enabled: true\n```" none_found: "No se encontraron checkpoints para {cwd}" invalid_number: "Número de checkpoint inválido. Usa 1-{max}." restored: "✅ Restaurado al checkpoint {hash}: {reason}\nSe guardó automáticamente un snapshot previo al rollback." kept_user_edits: "↷ Se conservaron tus ediciones manuales: {files}\nUsa /rollback --all para restaurarlas también." kept_oversize: "↷ Conservado (demasiado grande para los checkpoints, no hay copia guardada a la que revertir): {files}" failed_deletes: "⚠️ No se pudo eliminar (se dejó en su lugar): {files}" restore_failed: "❌ {error}" diff: not_enabled: "Los checkpoints no están activados, así que no hay línea base de sesión.\nActívalos en config.yaml:\n```\ncheckpoints:\n enabled: true\n```\nEl /diff normal sigue funcionando — usa git directamente." no_changes: "Sin cambios." failed: "{error}" err_default: "No se pudo generar el diff" more_untracked: "\n... y {count} más" untracked_label: "**Sin seguimiento:**" truncated_note: "\n... (truncado — {lines} líneas en total; usa /diff --stat para ver un resumen)" set_home: save_failed: "No se pudo guardar el canal principal: {error}" success: "✅ Canal principal establecido en **{name}** (ID: {chat_id}).\nLas tareas cron y los mensajes entre plataformas se entregarán aquí." err_missing_platform: "Falta la plataforma lógica" err_relay_unauthenticated: "El relay no autentica este destino home lógico" context: header: "🧠 **Ventana de contexto**" model: "Modelo: `{model}`" window: "Ventana: {total} tokens" in_use: "En uso: {used} / {total} ({pct}%)" bar: "{bar}" headroom: "Margen hasta el límite: {headroom} tokens" threshold: "Compresión automática en: {threshold} ({threshold_pct}%) — faltan {to_go}" over_threshold: "⚠️ **Por encima del umbral de compresión automática ({threshold}, {threshold_pct}%)**" compressions: "Compresiones en esta sesión: {count}" last_savings: "La última compresión liberó: {savings}% del contexto" totals_header: "Totales de la sesión (acumulados en {calls} llamadas API)" totals_line: "Entrada {input} · Salida {output} · Razonamiento {reasoning}" total_billed: "Total facturado: {total}" throughput_note: "_Tráfico acumulado, no tamaño del contexto — cada llamada reenvía la ventana anterior completa._" estimated: "Contexto estimado: ~{count} tokens en {messages} mensajes" detail_after_first: "_(Estadísticas completas de compresión y tráfico disponibles tras la primera respuesta del agente)_" no_data: "Aún no hay datos de contexto. Envía un mensaje para iniciar una sesión." category: system_prompt: "Prompt del sistema" tool_definitions: "Definiciones de herramientas" rules: "Reglas" skills: "Skills" mcp: "MCP" subagent_definitions: "Definiciones de subagentes" memory: "Memoria" conversation: "Conversación" category_header: "Uso estimado por categoría" no_data_yet: " (aún no hay datos: envía primero un mensaje)" free_space: "Espacio libre" category_row: "{glyph} {label} ~{tokens} tokens ~{pct}%" toolset_row: " {toolset} {count} herramientas ~{tokens} tokens" not_available: "n/d" skill_row: " {name} índice ~{index_tokens} SKILL.md {md_tokens} tokens" and_more: " … y {count} más" toolsets_title: "Conjuntos de herramientas por costo de esquema (mayor primero)" skills_title: "Skills por costo (índice = siempre activo; SKILL.md = costo al cargarse)" window_line: "Ventana de contexto: {mark}{used} / {max} tokens ({mark}{pct}%)" source: local_estimate: "estimación local" provider_usage: "uso según el proveedor" provider_usage_plus_estimate: "uso según el proveedor + estimación de mensajes nuevos" source_line: "Fuente: {source}; los recuentos por categoría son estimaciones locales." hint_all: "Usa /context all para ver los costos por skill y por conjunto de herramientas." status: header: "📊 **Estado de Hermes Gateway**" matrix_scope_header: "**Ámbito de Matrix:**" matrix_scope_room: " room: {room}" matrix_scope_room_id: " room_id: {room_id}" matrix_scope_thread: " thread_id: {thread_id}" matrix_scope_mode: " session_scope: {scope}" matrix_scope_key: " session_key: {session_key}" session_id: "**ID de sesión:** `{session_id}`" title: "**Título:** {title}" created: "**Creado:** {timestamp}" last_activity: "**Última actividad:** {timestamp}" model: "**Modelo:** `{model}`" model_provider: "**Modelo:** `{model}` ({provider})" free_tier: "Nous · plan gratuito · nous/welcome · /login para iniciar sesión" context: "**Contexto:** {used} / {total} ({pct}%)" context_used: "**Contexto:** ~{used} tokens" tokens: "**Tokens facturados en total:** {tokens} _(no es el tamaño actual de tu contexto; usa `/context`)_" agent_running: "**Agente activo:** {state}" state_yes: "Sí ⚡" state_no: "No" queued: "**Seguimientos en cola:** {count}" platforms: "**Plataformas conectadas:** {platforms}" stop: stopped_pending: "⚡ Detenido. El agente aún no había comenzado — puedes continuar esta sesión." stopped: "⚡ Detenido. Puedes continuar esta sesión." no_active: "No hay ninguna tarea activa que detener." force_stopped_pending: "⚡ Detención forzada. El agente aún estaba iniciándose: sesión desbloqueada." title: db_unavailable: "Base de datos de sesiones no disponible." warn_prefix: "⚠️ {error}" empty_after_clean: "⚠️ El título está vacío tras la limpieza. Usa caracteres imprimibles." set_to: "✏️ Título de sesión establecido: **{title}**" not_found: "Sesión no encontrada en la base de datos." current_with_title: "📌 Sesión: `{session_id}`\nTítulo: **{title}**" current_no_title: "📌 Sesión: `{session_id}`\nSin título. Uso: `/title Mi nombre de sesión`" topic: not_telegram_dm: "El comando /topic solo está disponible en chats privados de Telegram." no_session_db: "Base de datos de sesiones no disponible." unauthorized: "No tienes autorización para usar /topic en este bot." restore_needs_topic: "Para restaurar una sesión, primero crea o abre un topic de Telegram, luego envía /topic dentro de ese topic. Para crear un topic nuevo, abre All Messages y envía cualquier mensaje allí." topics_disabled: "Los topics de Telegram aún no están habilitados para este bot.\n\nCómo habilitarlos:\n1. Abre @BotFather.\n2. Elige tu bot.\n3. Abre Bot Settings → Threads Settings.\n4. Activa Threaded Mode y asegúrate de permitir que los usuarios creen nuevos threads.\n\nLuego envía /topic de nuevo." topics_user_disallowed: "Los topics de Telegram están habilitados, pero los usuarios no pueden crearlos.\n\nAbre @BotFather → elige tu bot → Bot Settings → Threads Settings, luego desactiva 'Disallow users to create new threads'.\n\nLuego envía /topic de nuevo." enable_failed: "No se pudo habilitar el modo topic de Telegram: {error}" bound_status: "Este topic está vinculado a:\nSesión: {label}\nID: {session_id}\n\nUsa /new para reemplazar este topic con una sesión nueva.\nPara trabajo paralelo, abre All Messages y envía un mensaje allí para crear otro topic." thread_ready: "Los topics multisesión de Telegram están habilitados.\n\nEste topic se usará como una sesión independiente de Hermes. Usa /new para reemplazar la sesión actual de este topic. Para trabajo paralelo, abre All Messages y envía un mensaje allí para crear otro topic." untitled_session: "Sesión sin título" restore_step_1: "1. Crea o abre un topic. Para crear uno nuevo, abre All Messages y envía cualquier mensaje allí." restore_step_2: "2. Envía /topic dentro de ese topic." default_title: "Chat de Hermes" root_lobby: "Este chat principal está reservado para comandos del sistema.\n\nPara iniciar un nuevo chat de Hermes, abre el topic All Messages en la parte superior de esta interfaz del bot y envía cualquier mensaje allí. Telegram creará un topic nuevo para ese mensaje; cada topic funciona como una sesión independiente de Hermes." root_new: "Para iniciar un nuevo chat paralelo de Hermes, abre el topic All Messages en la parte superior de esta interfaz del bot y envía cualquier mensaje allí. Telegram creará un topic nuevo para él.\n\nCada topic es una sesión independiente de Hermes. Usa /new dentro de un topic existente solo si quieres reemplazar la sesión actual de ese topic." new_header: "Se inició una nueva sesión de Hermes en este topic.\n\nConsejo: para trabajo paralelo, abre All Messages y envía un mensaje allí para crear un topic aparte en lugar de usar /new aquí. /new reemplaza la sesión vinculada al topic actual." help: "/topic — activa el modo MD multisesión (un bot, muchos chats paralelos)\n\nUso:\n /topic Activa el modo topic, o muestra el estado si ya está activo\n /topic help Muestra este mensaje\n /topic off Desactiva el modo topic y borra las vinculaciones de topics\n /topic Dentro de un topic: restaura una sesión anterior por ID\n\nCómo funciona:\n1. Ejecuta /topic una vez en este MD: Hermes comprueba que Threads\n Settings esté activado en BotFather y enciende el modo multisesión.\n2. Toca All Messages en la parte superior del bot y envía cualquier mensaje.\n Telegram crea un topic nuevo para ese mensaje; cada topic es\n una sesión independiente de Hermes (historial y contexto nuevos).\n3. El MD raíz pasa a ser un lobby del sistema: envía allí /topic, /status,\n /help, /usage. Los prompts normales van en un topic.\n4. /new dentro de un topic reinicia solo la sesión de ese topic.\n5. /topic dentro de un topic restaura en él una sesión antigua." system_topic_name: "Sistema" system_topic_intro: "Topic del sistema para comandos y estado de Hermes." setup_image_caption: "BotFather → Bot Settings → Threads Settings" no_chat_id: "No se pudo determinar el ID del chat." mode_not_enabled: "El modo topic multisesión no está activado actualmente en este chat." disable_failed: "No se pudo desactivar el modo topic: {error}" mode_disabled: "El modo topic multisesión ahora está DESACTIVADO en este chat.\n\nLos topics existentes en Telegram no se eliminan; simplemente dejarán de tratarse como sesiones independientes. El MD raíz vuelve a funcionar como un chat normal de Hermes. Ejecuta /topic para volver a activarlo más adelante." status_enabled: "Los topics multisesión de Telegram están activados." status_how_to: "Para crear un nuevo chat de Hermes, abre All Messages en la parte superior de esta interfaz del bot y envía cualquier mensaje allí. Telegram creará un topic nuevo para él." previous_unlinked: "Sesiones anteriores sin vincular:" restore_one: "Para restaurar una:" restore_example: "Ejemplo: envía /topic {session_id} dentro de un topic." no_unlinked: "No se encontraron sesiones anteriores de Telegram sin vincular." restore_later: "Para restaurar una sesión anterior más adelante:" session_not_found: "Sesión no encontrada: {session_id}" not_telegram_session: "Esa sesión no es una sesión de Telegram y no se puede restaurar en este topic." not_your_session: "Esa sesión no pertenece a este usuario de Telegram." already_linked: "Esa sesión ya está vinculada a otro topic de Telegram." restored: "Sesión restaurada: {title}" restored_last_message: "\n\nÚltimo mensaje de Hermes:\n{text}" undo: nothing: "Nada que deshacer." removed: "↩️ {turns} turno(s) deshecho(s) ({count} mensaje(s)).\nRespaldado en: \"{preview}\"\nCopia/edita el texto de arriba y envíalo para volver a preguntar desde aquí." invalid_count: "Cantidad no válida \"{arg}\" — usa /undo o /undo N." update: platform_not_messaging: "✗ /update solo está disponible en plataformas de mensajería. Ejecuta `hermes update` desde la terminal." not_git_repo: "✗ No es un repositorio git — no se puede actualizar." hermes_cmd_not_found: "✗ No se pudo localizar el comando `hermes`. Hermes está en ejecución, pero el comando de actualización no encontró el ejecutable en PATH ni a través del intérprete de Python actual. Intenta ejecutar `hermes update` manualmente en tu terminal." start_failed: "✗ No se pudo iniciar la actualización: {error}" starting: "☤ Iniciando la actualización de Hermes… Transmitiré el progreso aquí." reply_failed: "✗ No se pudo enviar la respuesta al proceso de actualización: {error}" reply_sent: "✓ Se envió `{label}` al proceso de actualización." failed_notice: "❌ La actualización de Hermes falló; la versión anterior sigue en ejecución. Ejecuta `hermes update` en el host para ver el error completo, o prueba /update de nuevo más tarde." prompt_default: " (predeterminado: {default})" prompt: "☤ **La actualización necesita tu respuesta:**\n\n{prompt}{default_hint}\n\nResponde `{prefix}approve` (sí) o `{prefix}deny` (no), o escribe tu respuesta directamente." finished: "✅ Actualización de Hermes terminada." timed_out: "❌ La actualización de Hermes expiró tras 30 minutos." finished_success: "✅ La actualización de Hermes terminó correctamente." last_lines: "{msg}\n\nÚltimas líneas:\n```\n{tail}\n```" managed_action: "actualizar Hermes Agent" not_applicable: "✗ `hermes update` no aplica a esta instalación ({method}).\nActualiza con: {command}" usage: rate_limits: "⏱️ **Límites de tasa:** {state}" header_session: "📊 **Uso de tokens de la sesión**" label_model: "Modelo: `{model}`" label_input_tokens: "Tokens de entrada: {count}" label_cache_read: "Tokens de lectura de caché: {count}" label_cache_write: "Tokens de escritura de caché: {count}" label_output_tokens: "Tokens de salida: {count}" label_total: "Total: {count}" label_api_calls: "Llamadas API: {count}" label_cost: "Costo: {prefix}${amount}" label_cost_included: "Costo: incluido" label_context: "Contexto: {used} / {total} ({pct}%)" label_compressions: "Compresiones: {count}" breakdown_header: "🧩 **Desglose del contexto** _(estimado)_" breakdown_line: "• {label}: ~{count} ({pct}%)" breakdown_cat_system_prompt: "Prompt del sistema" breakdown_cat_tool_definitions: "Definiciones de herramientas" breakdown_cat_rules: "Reglas" breakdown_cat_skills: "Habilidades" breakdown_cat_mcp: "MCP" breakdown_cat_subagent_definitions: "Definiciones de subagentes" breakdown_cat_memory: "Memoria" breakdown_cat_conversation: "Conversación" header_session_info: "📊 **Información de la sesión**" label_messages: "Mensajes: {count}" label_estimated_context: "Contexto estimado: ~{count} tokens" detailed_after_first: "_(Uso detallado disponible tras la primera respuesta del agente)_" no_data: "No hay datos de uso disponibles para esta sesión." unknown_subcommand: "Subcomando /usage desconocido: `{args}`. Prueba `/usage` o `/usage reset [--force]`." reset_wrong_provider: "Los reinicios de límite acumulados solo están disponibles con el proveedor openai-codex. Cambia primero con `/model`." credits: not_logged_in: "No has iniciado sesión en Nous Portal. Inicia sesión para ver tu saldo de créditos y recargar." verbose: not_enabled: "El comando `/verbose` no está habilitado para plataformas de mensajería.\n\nHabilítalo en `config.yaml`:\n```yaml\ndisplay:\n tool_progress_command: true\n```" mode_off: "⚙️ Progreso de herramientas: **OFF** — no se muestra actividad de herramientas." mode_new: "⚙️ Progreso de herramientas: **NEW** — se muestra al cambiar de herramienta (longitud de vista previa: `display.tool_preview_length`, por defecto 40)." mode_all: "⚙️ Progreso de herramientas: **ALL** — se muestra cada llamada a herramienta (longitud de vista previa: `display.tool_preview_length`, por defecto 40)." mode_verbose: "⚙️ Progreso de herramientas: **VERBOSE** — cada llamada a herramienta con sus argumentos completos." mode_log: "⚙️ Progreso de herramientas: **LOG** — silencioso en el chat; las llamadas a herramientas se escriben en ~/.hermes/logs/tool_calls.log." saved_suffix: "_(guardado para **{platform}** — se aplica en el próximo mensaje)_" save_failed: "_(no se pudo guardar en la configuración: {error})_" voice: enabled_voice_only: "Modo de voz activado.\nResponderé con voz cuando envíes mensajes de voz.\nUsa /voice tts para recibir respuestas de voz en todos los mensajes." disabled_text: "Modo de voz desactivado. Respuestas solo de texto." tts_enabled: "Auto-TTS activado.\nTodas las respuestas incluirán un mensaje de voz." status_mode: "Modo de voz: {label}" status_channel: "Canal de voz: #{channel}" status_participants: "Participantes: {count}" status_member: " - {name}{status}" speaking: " (hablando)" enabled_short: "Modo de voz activado." disabled_short: "Modo de voz desactivado." label_off: "Desactivado (solo texto)" label_voice_only: "Activado (responder con voz a mensajes de voz)" label_all: "TTS (responder con voz a todos los mensajes)" help: "{toggle}\n\n**Cómo funciona /voice**\n• `/voice on` — respuesta de voz cuando envías un mensaje de voz\n• `/voice tts` — respuesta de voz a *cada* mensaje\n• `/voice off` — volver a respuestas solo de texto\n• `/voice status` — mostrar el modo actual\n• `/voice` (sin argumento) — alternar rápido entre activado y desactivado{channels}" help_channels: "\n\n**Canales de voz en vivo (Discord)**\n• Únete primero a un canal de voz, luego `/voice channel` — me uno, escucho y digo mis respuestas\n• `/voice leave` — desconectar del canal de voz" transcript_echo_short: "🎙️ \"{text}\"" channel_unsupported: "Los canales de voz no son compatibles con esta plataforma." channel_guild_only: "Este comando solo funciona en un servidor de Discord." channel_not_in_voice: "Primero debes estar en un canal de voz." channel_join_failed: "No se pudo unir al canal de voz: {error}" channel_deps_missing: "Faltan dependencias de voz (PyNaCl / davey). Ejecuta: `{hint}`" channel_join_permissions: "No se pudo unir al canal de voz. Revisa los permisos del bot (Connect + Speak)." channel_joined: "Me uní al canal de voz **{name}**.\nDiré mis respuestas en voz alta y te escucharé. Usa /voice leave para desconectar." channel_not_joined: "No estoy en un canal de voz." channel_left: "Salí del canal de voz." transcript_echo: "**[Voz]** <@{user}>: {text}" yolo: disabled: "⚠️ Modo YOLO **DESACTIVADO** en esta sesión — los comandos peligrosos requerirán aprobación." enabled: "⚡ Modo YOLO **ACTIVADO** en esta sesión — todos los comandos se aprueban automáticamente. Úsalo con precaución." shared: session_db_unavailable: "Base de datos de sesiones no disponible." session_db_unavailable_prefix: "Base de datos de sesiones no disponible" session_not_found: "Sesión no encontrada en la base de datos." warn_passthrough: "⚠️ {error}" unknown_error: "error desconocido" error_prefix: "Error: {error}" history_unreadable: "⚠️ Ahora mismo no puedo leer el historial de esta conversación (tus mensajes anteriores existen, pero no se pueden cargar). Ejecuta `hermes doctor --fix` en el host o usa /new para empezar de cero." agent_running_retry_later: "El agente está en ejecución — espera a que termine el turno y luego usa /{command}." none_marker: "(ninguno)" none_value: "ninguno" unknown_value: "desconocido" exec_approval: header: "Hermes quiere ejecutar un comando que necesita tu aprobación" reason_label: "Por qué se marcó" default_reason: "comando peligroso" smart_deny_line: "DENEGACIÓN inteligente: la anulación del propietario aplica solo a esta operación." smart_deny_heading: "⚠️ **DENEGACIÓN inteligente — anulación del propietario para una sola operación:**" timed_out_notice: "⌛ La aprobación expiró tras {window} — el comando NO se ejecutó. Pídeme que lo intente de nuevo si aún lo quieres, o aumenta approvals.timeout en config.yaml." timed_out_card_body: "{notice}\n```\n{command}\n```" action_once: "Permitir una vez" action_session: "Permitir en la sesión" action_always: "Permitir siempre" action_deny: "Denegar" deadline: "Si no respondes en {window}, NO se ejecutará." text_choice_once: "Responde `{prefix}approve` para ejecutarlo una vez" text_choice_session: "`{prefix}approve session` para permitir este patrón durante el resto de la sesión" text_choice_always: "`{prefix}approve always` para permitirlo de forma permanente" text_choice_deny: "`{prefix}deny` para cancelar" text_choice_joiner: ", " text_choice_last: ", o {choice}.\n" text_body: "{heading}\n```\n{command}\n```\n{reason_label}: {reason}\n\n" notify: media_kind: audio: "audio" video: "video" file: "archivo" image: "imagen" media_delivery_failed: "⚠️ No se pudo entregar el adjunto de {kind}." media_delivery_failed_with_name: "⚠️ No se pudo entregar el adjunto de {kind} ({file_name})." delivery_failed_retry: "⚠️ La entrega del mensaje falló tras varios intentos. Inténtalo de nuevo — tu solicitud se procesó, pero la respuesta no se pudo enviar." plain_fallback_prefix: "(Falló el formato de la respuesta, texto sin formato:)\n\n{content}" turn_error_no_details: "sin detalles disponibles" turn_error_detailed: "Lo siento, ocurrió un error ({error_type}).\n{error_detail}\nInténtalo de nuevo o usa /reset para iniciar una sesión nueva." turn_error: "Lo siento, ocurrió un error." context_injection_refused: "Inyección de contexto rechazada." no_home_channel: "📬 No hay un canal principal configurado para {platform}. El canal principal es donde Hermes entrega los resultados de las tareas programadas (cron) y los mensajes entre plataformas.\n\nEscribe {sethome_cmd} para convertir este chat en tu canal principal, o ignora este mensaje para omitirlo." unauthorized: action_notice: "Este bot es privado y no estás en su lista de permitidos. Si eres el propietario, ejecuta `hermes pairing approve {platform} ` en el host (`hermes pairing list` muestra el id)." admin_only_can_run: "Puedes ejecutar: " admin_only_whoami_hint: ". Usa /whoami para ver la lista completa." admin_only_none: "En esta plataforma no hay comandos de barra activados para usuarios que no son administradores. Pide a un administrador que te agregue a allow_admin_from o que configure user_allowed_commands." admin_only: "⛔ /{command} es solo para administradores aquí. {suffix}" owner_hint_env: "agrega el ID a {env_var} en {home}/.env y reinicia el gateway" owner_hint_generic: "agrega el ID a la lista de usuarios permitidos de esta plataforma y reinicia el gateway" owner_notice: "Se descartó un mensaje del usuario no reconocido {who} de {platform}. Si eres tú o alguien de confianza, {allowlist}; o configura `unauthorized_dm_behavior: pair` para {platform} en {home}/config.yaml para que los remitentes desconocidos reciban un código de vinculación que puedes aprobar con `hermes pairing approve {platform} `." picker: page_info: " ({start}–{end} de {total})" clarify: hint_single: "Responde con el número, el texto de la opción o tu propia respuesta." hint_multi: "Se permiten varias selecciones — responde con los números separados por comas o espacios (p. ej. \"1, 3\"), el texto de la opción o tu propia respuesta." option_line: " {index}. {choice}" question: "❓ {question}" answered: "✅ respondido: {response}" cancelled: "↩️ Aclaración cancelada — tu mensaje se tratará como un mensaje de seguimiento." expired: "⏳ Esta pregunta expiró — envía una nueva solicitud." native_stream_placeholder: "💬 Esperando tu elección..." skip_hint: 'Responde "skip" para omitir esta pregunta.' errors: rate_limited: "⏱️ El servicio del modelo de IA está limitando la tasa de solicitudes. Espera un momento y luego usa /retry." auth_failed: "⚠️ Falló el inicio de sesión en el servicio del modelo de IA. Usa /login para iniciar sesión de nuevo, o pide a quien administra este bot que ejecute `hermes doctor` en el host." bad_request: "⚠️ El servicio del modelo de IA rechazó esta solicitud. Intenta reformular tu mensaje o usa /model para cambiar de modelo." connection_interrupted: "⚠️ La conexión con el servicio del modelo de IA se interrumpió a mitad de la solicitud — suele ser pasajero. Usa /retry para intentarlo de nuevo; si sigue ocurriendo, ejecuta `hermes doctor` en el host." unreachable: "⚠️ El servicio del modelo de IA no está accesible ahora mismo — el endpoint del modelo configurado no está en ejecución o no responde. Espera un momento y usa /retry; si persiste, ejecuta `hermes doctor` en el host." connection_unknown: "⚠️ Hermes no pudo conectar con el servicio del modelo de IA (el SDK no dio más detalles). Usa /retry para intentarlo de nuevo; si persiste, ejecuta `hermes doctor` en el host." context_overflow: "⚠️ Esta conversación es demasiado larga para leerla de una sola vez. Usa /compress para acortar el historial o /new para empezar una conversación nueva." usage_limit_resets: "⏱️ Se alcanzó el límite de uso del servicio del modelo de IA; se restablece en {window}. Usa /retry después de eso, o /model para cambiar de modelo." provider_kept_failing: "⚠️ El servicio del modelo de IA siguió fallando. Usa /retry para intentarlo de nuevo o /model para cambiar de modelo. Los detalles están en el registro del gateway (`hermes logs`)." session_storage_unavailable_disk: "⚠️ El almacenamiento de sesiones no estuvo disponible temporalmente, así que este turno se detuvo para proteger tu historial de conversación. Revisa el espacio libre en disco y luego envía tu mensaje de nuevo." session_storage_unavailable: "⚠️ El almacenamiento de sesiones no estuvo disponible temporalmente, así que este turno se detuvo para proteger tu historial de conversación. Tu mensaje ya debería estar guardado — envíalo de nuevo en un momento." generic_failed: "⚠️ Algo salió mal y no pude terminar esta respuesta. Usa /retry para intentarlo de nuevo o /new para empezar una conversación nueva. Los detalles técnicos están en el registro del gateway (`hermes logs`)." interrupted_before_start: "⚠️ Tu mensaje se interrumpió antes de empezar a procesarse (probablemente por un /stop reciente). Envíalo de nuevo." processing_incomplete: "procesamiento incompleto" stopped_before_finishing: "⚠️ Tuve que detenerme antes de terminar{reason}. Usa /retry para intentarlo de nuevo, o /compress si esta conversación se ha vuelto muy larga." no_response: "⚠️ El procesamiento terminó, pero no se generó ninguna respuesta. Puede ser un error pasajero — intenta enviar tu mensaje de nuevo." previous_turn_cleanup: "⚠️ Tu mensaje no se procesó (el turno anterior aún se estaba limpiando). Envíalo de nuevo." unexpected_silence: "⚠️ El modelo devolvió solo un marcador de silencio para un mensaje que necesitaba respuesta. Inténtalo de nuevo o reformúlalo." empty_response_model_label: "El modelo" hint_auth: " Tu inicio de sesión en el servicio del modelo de IA expiró o la clave de API es incorrecta. Usa /login aquí o ejecuta `{relogin}` en el host." hint_quota: " Se agotó tu saldo o cuota del servicio del modelo de IA. Recárgalo en el sitio web del servicio o usa /model para cambiar de modelo." hint_overloaded: " El servicio del modelo de IA está sobrecargado temporalmente. Espera un momento y luego usa /retry." hint_rate_limited: " Se está limitando tu tasa de solicitudes. Espera un momento e inténtalo de nuevo." hint_usage_limit_resets: " Se alcanzó el límite de uso de tu plan. Se restablece en ~{hours}h." hint_usage_limit: " Se alcanzó el límite de uso de tu plan. Espera hasta que se restablezca." hint_rejected: " El servicio del modelo de IA rechazó la solicitud." generic_failed_with_hint: "⚠️ Algo salió mal y no pude terminar esta respuesta.{hint}\nUsa /retry para intentarlo de nuevo o /new para empezar una conversación nueva. Los detalles técnicos están en el registro del gateway (`hermes logs`)." history_unavailable: "⚠️ El historial de esta sesión no está disponible temporalmente, así que este mensaje no se procesó. Pide al operador que revise state.db y reenvíalo cuando esté en buen estado. Usa /reset solo si realmente quieres empezar una conversación nueva." no_credentials: "⚠️ No pude conectar con el servicio del modelo de IA, así que este mensaje no se procesó. Usa /login para iniciar sesión de nuevo, o /model para elegir otro modelo. Si sigue fallando, ejecuta `hermes doctor` en el host." skills: disabled: "La skill **{name}** está instalada pero desactivada.\nActívala con: `hermes skills config`" not_installed: "La skill **{name}** está disponible pero no instalada.\nInstálala con: `hermes skills install {install_name}`" disabled_for_platform: "La skill **{name}** está desactivada para {platform}.\nActívala con: `hermes skills config`" stacked_disabled: "La(s) skill(s) **{names}** de esta invocación apilada están desactivadas para {platform}.\nActívalas con: `hermes skills config`" stacked_load_failed: "No se pudieron cargar las skills apiladas para /{command}." gate_off: "La aprobación de escritura de skills está desactivada (skills.write_approval). Actívala con /skills approval on y luego revisa aquí las escrituras pendientes con /skills pending." unknown_subcommand: "Subcomando de /skills desconocido en esta plataforma. Usa: pending, approve , reject , diff , approval . (Buscar/instalar solo desde la CLI.)" diff_truncated: "\n… (truncado — diff completo en ~/.hermes/pending/skills/{pending_id}.json)" busy: action_restarting: "reiniciándose" action_shutting_down: "apagándose" reject_model: "El agente está en ejecución — espera o usa /stop primero, y luego cambia de modelo." reject_codex_runtime: "El agente está en ejecución — espera o usa /stop primero, y luego cambia el runtime." reject_moa: "El agente está en ejecución — espera o usa /stop primero, y luego ejecuta /moa." drain_queued: "⏳ El gateway está {action} — en cola para el siguiente turno cuando vuelva." drain_rejected: "⏳ El gateway está {action} y ahora mismo no acepta otro turno." drain_rejected_new_work: "⏳ El gateway está {action} y ahora mismo no acepta trabajo nuevo." demoted_tail: " — tu mensaje queda en cola para cuando termine (usa /stop para cancelar todo)." elapsed_min: "{minutes} min transcurridos" running_tool: "ejecutando: {tool}" ack_detail_wrap: " ({detail})" ack_detail_joiner: ", " ack: "{head}{detail}{tail}" steered_subagents_head: "⏩ Redirigido a la ejecución actual y a sus subagentes activos" steered_subagents_tail: ". Tu mensaje llegará tras su siguiente llamada a herramienta." steered_head: "⏩ Redirigido a la ejecución actual" steered_tail: ". Tu mensaje llegará tras la siguiente llamada a herramienta." redirected_head: "↪ Ejecución actual redirigida" redirected_tail: ". Me ajustaré según tu corrección." subagent_working_head: "⏳ Subagente trabajando" compressing_head: "⏳ Comprimiendo el contexto" queued_head: "⏳ En cola para el siguiente turno" queued_tail: ". Responderé cuando termine la tarea actual." interrupting_head: "⚡ Interrumpiendo la tarea actual" interrupting_tail: ". Responderé a tu mensaje en breve." slash_rejected: "⏳ El agente está en ejecución — `/{command}` no puede ejecutarse a mitad de turno. Espera la respuesta actual o usa `/stop` primero." reject_goal: "El agente está en ejecución — usa /goal status / pause / clear / wait durante la ejecución, o /stop antes de definir un nuevo objetivo." reject_loop: "El agente está en ejecución — usa /loop status / pause / stop durante la ejecución, o /stop antes de definir un nuevo bucle." draining_maintenance: "⏳ Este agente se está vaciando para una acción de mantenimiento y ahora mismo no acepta turnos nuevos. Volverá en un momento — reenvía tu mensaje en breve." another_turn_running: "⏳ Otro turno sigue en ejecución en esta sesión. Para proteger la transcripción, este mensaje no se procesó. Espera a que termine el turno activo y luego reenvíalo." behavior_queue_short: "se ponen en cola para el siguiente turno" behavior_queue_long: "Los mensajes se pondrán en cola para el siguiente turno mientras Hermes esté ocupado." behavior_steer_short: "se redirigen a la ejecución actual (tras la próxima herramienta)" behavior_steer_long: "Los mensajes se redirigirán a la ejecución actual (tras la siguiente llamada a herramienta)." behavior_interrupt_short: "interrumpen la ejecución actual" behavior_interrupt_long: "Los mensajes interrumpirán la ejecución actual mientras Hermes esté ocupado." status: "**Modo de entrada al estar ocupado: `{mode}`\nMensajes mientras está ocupado: _{behavior}_\nCámbialo con `/busy queue`, `/busy steer` o `/busy interrupt`." unknown_mode: "Modo desconocido `{arg}`. Usa `/busy queue`, `/busy steer` o `/busy interrupt`." save_failed: "No se pudo guardar el modo de entrada al estar ocupado en la configuración. El modo no cambió." set: "Modo de entrada al estar ocupado establecido en **`{mode}`** (guardado).\n_{behavior}_" pause: resumed: "▶️ Reanudado — se acepta trabajo nuevo de nuevo." not_paused: "Hermes no estaba pausado." reason_suffix: " (motivo: {reason})" already_paused: "⏸️ Hermes ya está pausado{suffix}. Usa `/pause off` para reanudar." paused: "⏸️ Pausado{suffix}. El trabajo nuevo de cron/kanban/gateway queda en espera; el trabajo en curso termina con normalidad. Usa `/pause off` para reanudar." queue: usage: "Uso: /queue " queued: "En cola para el siguiente turno." queued_depth: " ({depth} en cola)" steer: usage: "Uso: /steer " usage_idle: "Uso: /steer (no hay ningún agente en ejecución; se envía como mensaje normal)" queued_starting: "El agente aún está arrancando — /steer en cola para el próximo turno." queued_no_agent: "No hay ningún agente activo — /steer en cola para el próximo turno." failed: "⚠️ La redirección falló: {error}" rejected_empty: "Redirección rechazada (contenido vacío)." target_subagents: "la ejecución y sus subagentes activos" target_run: "la ejecución" queued: "⏩ Redirección en cola en {target} actual — llegará tras la próxima llamada a herramienta: '{preview}'" suggestions: failed: "El comando de sugerencias falló: {error}" blueprint: failed: "El comando de plantilla cron falló: {error}" confirm: destructive_prompt: "⚠️ **Confirmar /{command}**\n\n{detail}\n\nElige:\n• **Aprobar una vez** — continuar solo esta vez\n• **Aprobar siempre** — continuar y silenciar esta confirmación permanentemente\n• **Cancelar** — conservar la conversación actual\n\n_Alternativa en texto: responde `{prefix}approve`, `{prefix}always` o `{prefix}cancel`._" destructive_optout: "\n\nℹ️ En adelante, /clear, /new, /reset y /undo se ejecutarán sin confirmación. Puedes reactivarla con `approvals.destructive_slash_confirm: true` en config.yaml." destructive_optout_save_failed: "\n\n⚠️ No se pudo guardar esa preferencia (config.yaml no es escribible), así que /clear, /new, /reset y /undo volverán a preguntar la próxima vez. Para silenciarla permanentemente, establece `approvals.destructive_slash_confirm: false` en config.yaml." cancelled: "🟡 /{command} cancelado. La conversación no ha cambiado." detail_new: "Esto inicia una sesión nueva y descarta el historial de la conversación actual." detail_undo_one: "Esto elimina del historial el último intercambio usuario/asistente." detail_undo_many: "Esto elimina del historial los últimos {count} turnos del usuario." hooks: command_blocked: "Un hook bloqueó el comando `/{command}`." prompt_command: start_failed: "No se pudo iniciar /{command} — inténtalo de nuevo." learn: ack_described: "Aprendiendo una skill a partir de lo que describiste…" ack_conversation: "Aprendiendo una skill a partir de esta conversación…" plan: ack_task: "Planificando: {task}" ack_conversation: "Planificando a partir del contexto de esta conversación…" init: start_failed: "No se pudo iniciar /init — inténtalo de nuevo." ack_update: "Actualizando AGENTS.md a partir de un análisis del proyecto…" ack_generate: "Generando AGENTS.md a partir de un análisis del proyecto…" moa: prepare_failed: "No se pudo preparar el turno MoA." quick_command: no_output: "El comando no devolvió ninguna salida." timed_out: "El comando rápido agotó el tiempo (30 s)." error: "Error del comando rápido: {error}" no_command: "El comando rápido '/{command}' no tiene ningún comando definido." unsupported_type: "El comando rápido '/{command}' tiene un tipo no compatible (compatibles: 'exec', 'alias')." no_target: "El comando rápido '/{command}' no tiene ningún destino definido." unknown_command: "Comando desconocido `/{command}`. Escribe /commands para ver los disponibles, o reenvíalo sin la barra inicial para mandarlo como mensaje normal." session: auto_reset_notice: "◐ La sesión se reinició tras detenerse. Historial de la conversación borrado.\nUsa /resume para explorar y restaurar una sesión anterior.\n" auto_reset_context_exhausted: "\n\n🔄 Sesión reiniciada automáticamente — la conversación superó el tamaño máximo de contexto y no se pudo comprimir más. Tu próximo mensaje iniciará una sesión nueva." info_model: "◆ Modelo: `{model}`" info_provider: "◆ Proveedor: {provider}" info_context: "◆ Contexto: {tokens} tokens ({source})" info_acting_model: "◆ Modelo en uso (se factura en esta ejecución): {provider}:{model}" info_endpoint: "◆ Endpoint: {url}" proxy: requires_aiohttp: "⚠️ El modo proxy requiere aiohttp. Ejecuta: {hint}" url_missing: "⚠️ URL del proxy no configurada (GATEWAY_PROXY_URL o gateway.proxy_url)" http_error: "⚠️ Error del proxy ({status}): {error}" closed_early: "⚠️ La conexión con el proxy se cerró antes de completar la respuesta" connection_error: "⚠️ Error de conexión con el proxy: {error}" no_response: "(Sin respuesta del agente remoto)" progress: status_fallback_long: "sigo en ello" status_fallback_short: "un momento" stuck_warning: "⚠️ Parece que estoy atascado (sin actividad desde hace {minutes} min). Si no ocurre nada en los próximos {remaining} min, abandonaré esta tarea. Puedes seguir esperando, enviar /stop para cancelarla o /new para empezar una conversación nueva." timeout_header: "⏱️ Agente inactivo durante {minutes} min — sin llamadas a herramientas ni respuestas de la API." timeout_stuck_tool: "El agente parece atascado en la herramienta `{tool}` ({seconds} s desde la última actividad, {progress})." timeout_last_activity: "Última actividad: {activity} (hace {seconds} s, {progress}). Es posible que el agente estuviera esperando una respuesta de la API." timeout_hint: "Para aumentar el límite, establece agent.gateway_timeout en config.yaml (valor en segundos, 0 = sin límite) y reinicia el gateway.\nInténtalo de nuevo o usa /reset para empezar de cero." working_heartbeat: "⏳ Trabajando — {minutes} min{detail}" thinking_prefix: "💬 {text}" tool_head: "{emoji} {tool}" tool_verbose: "{emoji} {tool}({keys})\n{args}" tool_preview: "{emoji} {tool}: \"{preview}\"" tool_pending: "{emoji} {tool}..." task_status_running: "en ejecución" task_status_complete: "completada" task_status_error: "error" task_line: "- {title} - {status}" task_card_title: "Hermes está trabajando" pairing: validity_hour: "{hours} hora" validity_hours: "{hours} horas" code_reply: "¡Hola! Todavía no te reconozco, así que no puedo responderte hasta que la persona que administra este bot te apruebe.\n\nTu código de vinculación: `{code}` (válido durante {validity})\n\nSi este bot es tuyo, abre una terminal y ejecuta: `{approve_cmd}`. Si no, envía ese comando a quien lo administra. Cuando te aprueben, vuelve a enviar tu mensaje." rate_limited: "Demasiadas solicitudes de vinculación en este momento. Espera unos minutos y vuelve a enviar tu mensaje." shutdown: action_shutting_down: "apagándose" action_restarting: "reiniciándose" cron_interrupted: "⚠️ La tarea programada '{job}' se interrumpió porque Hermes se está {action}; esta vez no hay resultado. Volverá a ejecutarse según lo programado, o puedes lanzarla ahora con `hermes cron run {job}` cuando Hermes vuelva a estar disponible." notice_shutdown: "⚠️ Hermes se está apagando — tu tarea actual se interrumpirá. Cuando vuelva a estar en línea, envía cualquier mensaje e intentaré continuar donde lo dejamos." notice_restart: "⚠️ Hermes se está reiniciando — tu tarea actual se interrumpirá. Envía cualquier mensaje después del reinicio e intentaré retomar donde lo dejaste." startup: handoff_thread_title: "Hermes — {title}" restarted: "♻ Gateway reiniciado correctamente. Tu sesión continúa." free_tier_line: "Inferencia: nivel gratuito de Nous (nous/welcome). Inicia sesión para más: /login" online: "♻️ Gateway en línea — Hermes está de vuelta y listo." db_corrupt: "⚠️ Se detectó corrupción en la base de datos de sesiones. Es posible que los mensajes no se guarden. Opciones de recuperación:\n1. Ejecuta `hermes {profile_arg}doctor --fix`\n2. Detén el gateway y luego recupera con:\n hermes {profile_arg}sessions recover --source {db_path} --inspect-only\n (si indica que es recuperable) hermes {profile_arg}sessions recover --source {db_path} --output recovered-state.db\n — la recuperación primero toma una instantánea del archivo dañado; NO ejecutes `sqlite3 ... \".recover\"` sobre el state.db en uso, una CLI sqlite3 vulnerable puede dañarlo aún más\n3. Restaura una copia de seguridad desde {backups_dir}/\nEjecuta `hermes {profile_arg}doctor` para obtener diagnósticos anonimizados." db_fts_corrupt: "⚠️ La base de datos de sesiones informó un error de corrupción limitado al índice de búsqueda (FTS5); las tablas de mensajes no están dañadas. Es posible que los mensajes no se guarden hasta repararlo: ejecuta `hermes {profile_arg}doctor --fix` y luego reinicia el gateway. No ejecutes herramientas de recuperación ni restaures una copia de seguridad a menos que `hermes {profile_arg}doctor` confirme daños." db_then_restart: "{action} Luego ejecuta `hermes {profile_arg}gateway restart`." db_unavailable: "⚠️ Base de datos de sesiones no disponible — es posible que los mensajes no se guarden y /resume estará vacío. Causa: {cause}. {action}" whoami: scope_dm: "MD" scope_group: "grupo/canal" header: "**Tú** — {platform} ({scope})\nID de usuario: `{user_id}`\n" tier_unrestricted: "Nivel: sin restricciones (no hay lista de administradores configurada para este ámbito)\nComandos slash: todos disponibles" tier_admin: "Nivel: **administrador**\nComandos slash: todos disponibles" tier_user: "Nivel: usuario\nComandos slash que puedes ejecutar: {commands}" platform: usage: "Uso: /platform [name]\n /platform list — mostrar el estado de las plataformas\n /platform pause — dejar de reintentar una plataforma que falla\n /platform resume — volver a encolar una plataforma pausada" header: "**Plataformas del gateway**" connected: "Conectadas: {platforms}" reason_default: "pausada" reason_manual: "pausada mediante /platform pause" item_paused: " · {name} — PAUSADA ({reason}). Reanúdala con `/platform resume {name}`." item_retrying: " · {name} — reintentando (intento {attempts})" none_failed: "Fallidas/pausadas: (ninguna)" usage_action: "Uso: /platform {action} " unknown: "Plataforma desconocida: {name}" not_queued_pause: "{name} no está en la cola de reintentos (o está conectada o no está activada)." already_paused: "{name} ya está pausada." paused: "✓ {name} pausada. Reanúdala con `/platform resume {name}` o restablece con `hermes gateway restart`." not_queued_resume: "{name} no está en la cola de reintentos — no hay nada que reanudar." already_retrying: "{name} ya está reintentando — no hace falta reanudar." resumed: "✓ {name} reanudada — se reintentará en el próximo ciclo del monitor." bundles: unavailable: "Subsistema de bundles no disponible: {error}" default_desc: "Cargar {count} skills" none_plain: "No hay bundles de skills instalados.\nCrea uno con: hermes bundles create --skill --skill \nDirectorio: {dir}" header_plain: "Bundles de skills ({count} instalados):" item_plain: "/{slug} — {desc} ({count} skills)" invoke_hint_plain: "Invoca un bundle con / para cargar todas sus skills." none: "No hay bundles de skills instalados.\nCrea uno en el host con:\n `hermes bundles create --skill --skill `\nDirectorio: `{dir}`" header: "**Bundles de skills** ({count} instalados):" item: "• `/{slug}` — {desc} _({count} skills)_" invoke_hint: "Invoca un bundle con `/` para cargar todas sus skills." memory: unknown_subcommand: "Subcomando de /memory desconocido. Usa: pending, approve , reject , approval ." approvals: admin_only: "Solo los administradores del gateway pueden cambiar el modo de aprobación persistente." heartbeat: unavailable: "Heartbeats no disponibles (sin sesión)." paused: "⏸ Heartbeat pausado: {prompt}" none_set: "No hay ningún heartbeat configurado." no_resume: "No hay ningún heartbeat que reanudar." resumed: "▶ Heartbeat reanudado (cada {interval}): {prompt}" cleared: "✓ Heartbeat eliminado." usage: "Uso: /heartbeat every (p. ej. /heartbeat every 10m Revisa el CI)\nTambién: /heartbeat status | pause | resume | clear" interval_too_small: "Intervalo demasiado corto — el mínimo es {min_seconds} s." prompt_required: "Uso: /heartbeat every — el prompt es obligatorio." invalid_prefix: "Heartbeat no válido" set: "♥ Heartbeat configurado (cada {interval}): {prompt}\nSe dispara como un turno normal cuando esta sesión está inactiva y ha pasado el intervalo. Dura mientras el gateway esté en ejecución — usa `hermes cron` para programaciones persistentes." refine: unavailable: "Refinar no disponible (sin sesión)." nothing_yet: "Aún no hay nada que refinar — envía primero un mensaje." empty: "Aún no hay nada que refinar — la conversación está vacía." start_failed: "/refine no pudo iniciarse: {error}" focus_suffix: " (enfoque: {focus})" started: "⚗ Revisando esta conversación en segundo plano{focus_suffix} — cualquier actualización de memoria o skills se informará al terminar." review: unavailable: "Revisión no disponible (sin sesión)." nothing_yet: "Aún no hay nada que revisar — envía primero un mensaje." start_failed: "/review no pudo iniciarse: {error}" subgoal: no_goal: "No hay ningún objetivo activo. Define uno con /goal ." usage_remove: "Uso: /subgoal remove " remove_not_int: "/subgoal remove: debe ser un entero (índice a partir de 1)." removed: "✓ Subobjetivo {index} eliminado: {text}" cleared_one: "✓ {count} subobjetivo eliminado." cleared_other: "✓ {count} subobjetivos eliminados." none_to_clear: "No hay subobjetivos que eliminar." added: "✓ Subobjetivo {index} añadido: {text}" loop: unavailable: "Bucles no disponibles." no_session: "Bucles no disponibles (sin sesión activa)." goal_defers_note: "\nNota: un /goal activo está dirigiendo esta sesión — los despertares del bucle se aplazan hasta que el objetivo termine, se pause o quede aparcado." save: no_messages: "No se encontraron mensajes guardados para esta sesión ({session_id})." no_adapter: "No se encontró el adaptador de plataforma para enviar el documento." caption: "Exportación de sesión: {filename}" complete: "Exportación completada." failed: "Error al exportar la sesión: {error}" sessions: usage_search: "Uso: `/sessions search `" all_requires_admin: "_Nota: `all` (listado entre chats) requiere un administrador configurado; se muestran solo las sesiones de este chat._" title_matching: "Sesiones que coinciden con “{query}”" title_all: "Sesiones" title_named: "Sesiones con nombre" codex_runtime: config_load_failed: "❌ No se pudo cargar la configuración: {error}" topup: header: "💳 **Saldo de Nous**" portal_link: "Gestiona la facturación en el portal: {url}" hint: "Recarga y gestiona la facturación en el navegador — tu saldo se actualizará aquí después." login: free_tier_remaining: "\nAlgunos chats siguen en el nivel gratuito; usa /model en esos chats para cambiar." platform: whatsapp: clarify_other_title: "✏️ Otra" clarify_other_description: "Escribe tu propia respuesta" clarify_list_button: "Elegir" clarify_list_section: "Opciones" approve_button: "✅ Aprobar" deny_button: "❌ Denegar" slash_confirm_once: "✅ Aprobar una vez" slash_confirm_always: "🔒 Siempre" slash_confirm_cancel: "❌ Cancelar" clarify_type_answer: "✏️ Escribe tu respuesta:" approved: "✅ Aprobado." denied: "❌ Denegado." approval_expired: "⌛ Aprobación expirada — el comando no se ejecutó (ya se agotó el tiempo o se resolvió en otro lugar)." yuanbao: slow_response_notice: "Esta tarea es algo compleja — sigo trabajando en ella, un momento por favor..." owner_command_denied: "⚠️ {command} solo está disponible para el creador en modo de chat privado" shared: truncated_suffix: "\n...(truncado)" unknown: "desconocido" approval_expired: "⌛ Aprobación expirada — el comando no se ejecutó (ya se agotó el tiempo o se resolvió en otro lugar)." model_picker_expired: "⏳ Este selector de modelo expiró — vuelve a ejecutar /model." not_authorized: "⛔ No autorizado." handoff: default_name: "sesión" media: image_failed: "⚠️ No se pudo entregar la imagen adjunta." video_failed: "⚠️ No se pudo entregar el video adjunto." file_failed: "⚠️ No se pudo entregar el archivo adjunto ({name})." attachment_failed: "⚠️ No se pudo entregar el adjunto." weixin: voice_as_attachment: "[mensaje de voz como adjunto]" signal: batch_pacing_notice: "(Vienen más imágenes — pausa de ~{wait} por el límite de tasa de Signal, lote {batch}/{total}.)" wait_seconds: "{count} s" wait_minutes: "{count} min" api_server: provider_auth_failed: "Falló la autenticación con el proveedor" provider_rate_limited: "Proveedor con límite de tasa alcanzado" provider_error_line: "⚠️ {label}: {error}" transformed_notice: "\n\n[Respuesta transformada después del streaming]\n" discord: approval: question: "¿Quieres que Hermes ejecute este comando?" requested_command_label: "Comando solicitado:" confirm_title: "Confirmar" already_resolved: "Esta aprobación ya se resolvió~" expired: "⌛ Aprobación expirada — el comando no se ejecutó (ya se agotó el tiempo o se resolvió en otro lugar)" by_user: "{label} por {user}" resolved_once: "Aprobado una vez" resolved_session: "Aprobado para la sesión" resolved_always: "Aprobado permanentemente" resolved_deny: "Denegado" slash_confirm: already_resolved: "Este prompt ya se resolvió~" approve_once: "Aprobar una vez" always_approve: "Aprobar siempre" cancel: "Cancelar" resolved_once: "Aprobado una vez" resolved_always: "Aprobado siempre" resolved_cancel: "Cancelado" prompt: truncated_marker: "... [truncado]" clarify_title: "Hermes necesita tu respuesta" clarify_hint_buttons: "Elige una opción abajo o haz clic en ✏️ Otra para escribir una respuesta personalizada." clarify_hint_text: "Responde en este canal con tu respuesta." default_hint: " (predeterminado: {default})" update_title: "La actualización necesita tu respuesta" expired_footer: "⏱ El prompt expiró — no se realizó ninguna acción" already_answered: "Ya respondido~" affirm: "Sí" negate: "No" other: "✏️ Otra (escribir respuesta)" clarify_already_answered: "Este prompt ya fue respondido~" answered_by: "Respondido por {user}: {choice}" awaiting_typed: "Esperando la respuesta escrita de {user}…" picker: title: "⚙ Configuración del modelo" select_provider: "Modelo actual: `{model}`\nProveedor: {provider}\n\nSelecciona un proveedor:" unknown_model: "desconocido" choice_default_title: "Elige una opción" provider_option: "{provider} ({count} modelos)" current: "actual" provider_placeholder: "Elige un proveedor..." cancel: "Cancelar" model_placeholder: "Elige un modelo de {provider}" back: "◀ Atrás" switch_anyway: "Cambiar de todos modos" more_available: "{count} más disponibles — escribe `/model ` directamente" select_model: "Proveedor: **{provider}**\nSelecciona un modelo:{extra}" already_resolved: "Ya resuelto~" switching: "Cambiando a `{model}`..." switching_title: "⚙ Cambiando de modelo" switch_error: "Error al cambiar de modelo: {error}" switched_title: "⚙ Modelo cambiado" expired_toast: "La selección de modelo expiró." cancelled: "Selección de modelo cancelada." expired: "⏱ La selección expiró — el modelo no cambió." choice_placeholder: "Elige una opción..." choice_error: "Error al aplicar la selección: {error}" choice_expired: "⏱ La selección expiró — no se hizo ningún cambio." command: new: description: "Iniciar una conversación nueva" followup: "Nueva conversación iniciada~" reset: description: "Restablecer tu sesión de Hermes" followup: "Sesión restablecida~" model: description: "Mostrar o cambiar el modelo" arg_name: "Nombre del modelo (p. ej. anthropic/claude-sonnet-4). Déjalo vacío para ver el actual." reasoning: description: "Mostrar/cambiar el nivel de razonamiento o alternar si se muestra" arg_effort: "Elige un nivel, restablece el ajuste o muestra/oculta el razonamiento. Vacío para ver el actual." choice_none: "none — desactivar el razonamiento" choice_ultra: "ultra — razonamiento máximo" choice_reset: "reset — borrar el ajuste de esta sesión" choice_show: "show — mostrar el razonamiento en las respuestas" choice_hide: "hide — ocultar el razonamiento en las respuestas" personality: description: "Establecer una personalidad" arg_name: "Nombre de la personalidad. Déjalo vacío para listar las disponibles." retry: description: "Reintentar tu último mensaje" followup: "Reintentando~" undo: description: "Eliminar el último intercambio" status: description: "Mostrar el estado de la sesión de Hermes" followup: "Estado enviado~" stop: description: "Detener el agente Hermes en ejecución" followup: "Detención solicitada~" steer: description: "Inyectar un mensaje tras la próxima llamada a herramienta (sin interrumpir)" arg_prompt: "Texto a inyectar en el próximo resultado de herramienta del agente" plan: description: "Escribir un plan de implementación en markdown (sin ejecutar)" arg_task: "Qué planificar. Déjalo vacío para inferirlo de la conversación." compress: description: "Comprimir el contexto de la conversación" title: description: "Establecer o mostrar el título de la sesión" arg_name: "Título de la sesión. Déjalo vacío para mostrar el actual." resume: arg_name: "Nombre de la sesión a reanudar. Déjalo vacío para listar las sesiones." usage: description: "Mostrar el uso de tokens de esta sesión" help: description: "Mostrar los comandos disponibles" insights: arg_days: "Número de días a analizar (predeterminado: 7)" reload_skills: description: "Volver a escanear ~/.hermes/skills/ en busca de skills nuevas o eliminadas" voice: description: "Alternar el modo de respuesta por voz" arg_mode: "Modo de voz: join, channel, leave, on, tts, off o status" choice_join: "join — unirse a tu canal de voz" choice_channel: "channel — unirse a tu canal de voz (alias)" choice_leave: "leave — salir del canal de voz" choice_mode_on: "on — responder con voz a los mensajes de voz" choice_tts: "tts — responder con voz a todos los mensajes" choice_mode_off: "off — solo texto" choice_status: "status — mostrar el modo actual" update: followup: "Actualización iniciada~" restart: description: "Reiniciar el gateway de Hermes de forma ordenada" followup: "Reinicio solicitado~" approve: arg_scope: "Opcional: 'all', 'session', 'always', 'all session', 'all always'" deny: description: "Denegar un comando peligroso pendiente" arg_scope: "Opcional: 'all' para denegar todos los comandos pendientes" thread: description: "Crear un hilo nuevo e iniciar en él una sesión de Hermes" arg_name: "Nombre del hilo" arg_message: "Primer mensaje opcional para enviar a Hermes en el hilo" arg_auto_archive: "Archivado automático en minutos (60, 1440, 4320, 10080)" error_unknown: "error desconocido" failed: "No se pudo crear el hilo: {error}" created: "Hilo creado: {link}" error_name_required: "El nombre del hilo es obligatorio." error_invalid_archive: "auto_archive_duration debe ser uno de: {allowed}." error_no_channel: "No se pudo determinar el canal de Discord actual." error_dm_not_supported: "Los hilos de Discord solo se pueden crear en canales de texto de un servidor, no en MD." error_no_parent: "No se pudo determinar un canal de texto principal para el nuevo hilo." error_both_failed: "Discord rechazó la creación directa del hilo y la alternativa también falló. Error directo: {direct_error}. Error de la alternativa: {fallback_error}" queue: description: "Poner en cola un prompt para el próximo turno (no interrumpe)" arg_prompt: "El prompt que se pondrá en cola" followup: "En cola para el próximo turno." bg: arg_prompt: "El prompt que se ejecutará en segundo plano" followup: "Tarea en segundo plano iniciada~" btw: description: "Hacer una pregunta aparte sobre la conversación actual" arg_question: "La pregunta aparte que se responderá sin interrumpir" followup: "Pregunta aparte enviada~" skill: description: "Ejecutar una skill de Hermes" arg_name: "Qué skill ejecutar" arg_args: "Argumentos opcionales para la skill" unknown: "Skill desconocida: `{name}`. Empieza a escribir para ver sugerencias de autocompletado." auto_args_description: "Argumentos: {args_hint}" auto_description_fallback: "Ejecutar /{name}" limits: response_truncated: "⚠️ **Respuesta truncada** — esta respuesta superó el límite de entrega ({max_messages} mensajes). No se entregaron {dropped_chars} caracteres; la respuesta completa está en los registros de la sesión." forum: default_title: "Nueva publicación" voice: ack_1: "Déjame revisarlo." ack_2: "Un momento." ack_3: "Lo estoy revisando." ack_4: "Dame un segundo." ack_5: "Enseguida." left_inactivity: "Salí del canal de voz (tiempo de inactividad agotado)." security: unauthorized_slash_alert: "⚠️ Intento de comando slash de Discord no autorizado\nUsuario: {user_name} ({user_id})\nCanal: {chan_id} (servidor {guild_id})\nComando: {command_text}\nMotivo: {reason}" thread: seed_message: "🧵 Hilo creado por Hermes: **{name}**" default_name: "Hermes" handoff_seed: "🧵 Traspaso de Hermes: **{name}**" auto_create_failed: "⚠️ Hermes no pudo crear un hilo de Discord para este mensaje, así que la solicitud no se procesó. Vuelve a intentarlo." auto_create_failed_generic: "La solicitud no se procesó. Vuelve a intentarlo." media: upload_too_large: "⚠️ No se pudo adjuntar `{filename}` — {size_mb} MB supera el límite de subida de Discord de {limit_mb} MB para este canal. Comprime el archivo o comparte un enlace." image_skipped_too_large: "⚠️ Se omitió `{filename}` — {size_mb} MB supera el límite de subida de Discord de {limit_mb} MB." telegram: approval: action_once: "✅ Permitir una vez" action_session: "✅ Sesión" action_always: "✅ Siempre" action_deny: "❌ Denegar" toast_invalid_data: "Datos de aprobación no válidos." toast_already_resolved: "Esta aprobación ya se resolvió." resolved_once: "✅ Aprobado una vez" resolved_session: "✅ Aprobado para la sesión" resolved_always: "✅ Aprobado permanentemente" resolved_deny: "❌ Denegado" resolved_generic: "Resuelto" resolved_by_user: "{label} por {user}" expired: "⌛ Aprobación expirada" expired_detail: "{label} — no había ningún comando en espera. Ya se agotó el tiempo (y se denegó) o se resolvió en otro lugar." slash_confirm: approve_once: "✅ Aprobar una vez" always_approve: "🔒 Aprobar siempre" cancel: "❌ Cancelar" already_resolved: "Este prompt ya se resolvió." resolved_once: "✅ Aprobado una vez" resolved_always: "🔒 Aprobar siempre" resolved_cancel: "❌ Cancelado" picker: expired_rerun: "El selector expiró — ejecuta el comando de nuevo." invalid_selection: "Selección no válida." expired: "El selector expiró." apply_error: "Error al aplicar la selección: {error}" prev: "◀ Anterior" next: "Siguiente ▶" back: "◀ Atrás" cancel: "✗ Cancelar" more_available: "{count} más disponibles — escribe `/model ` directamente" title: "Configuración del modelo" provider_label: "Proveedor: {provider}" select_model: "Selecciona un modelo:" current_model: "Modelo actual: {model}" select_provider: "Selecciona un proveedor:" unknown_model: "desconocido" provider_family: "Familia de proveedores: {family}" invalid_model_index: "Índice de modelo no válido." switch_error: "Error al cambiar de modelo: {error}" switch_failed: "El cambio falló." switched: "¡Modelo cambiado!" invalid_page: "Página no válida." expired_model: "El selector expiró — usa /model de nuevo." provider_not_found: "Proveedor no encontrado." switch_anyway: "Cambiar de todos modos" confirm_selection: "Confirmar selección de modelo" group_not_found: "Grupo no encontrado." cancelled: "Selección de modelo cancelada." prompt: default_hint: " (predeterminado: {default})" update_header: "La actualización necesita tu respuesta:" affirm: "✓ Sí" negate: "✗ No" other: "✏️ Otra (escribir respuesta)" expired_toast: "⚠️ Este prompt expiró — usa /retry." expired_body: "⚠️ Esta pregunta expiró o la sesión se restableció — usa /retry." type_answer: "✏️ Escribe tu respuesta en el chat." awaiting_typed: "Esperando la respuesta escrita de {user}…" invalid_choice: "Opción no válida." update_sent: "Se envió '{answer}' al proceso de actualización." update_answered: "Prompt de actualización respondido: {answer}" affirm_word: "Sí" negate_word: "No" media: download_failed: "⚠️ No se pudo descargar tu {kind}{name} ({error}). Intenta enviarlo de nuevo." named_suffix: " ({name})" kind_attachment: "archivo adjunto" kind_photo: "foto" kind_voice: "mensaje de voz" kind_audio: "archivo de audio" kind_video: "archivo de video" gmail_triage: done_send: "✓ borrador enviado" done_archive: "✓ archivado" done_draft: "✓ respuesta redactada" done_spam: "✓ marcado como spam" done_mute: "✓ silenciado" done_mute_domain: "✓ dominio silenciado" done_trust: "✓ de confianza" done_trust_domain: "✓ dominio de confianza" done_vip: "✓ marcado como VIP" done_vip_domain: "✓ dominio marcado como VIP" invalid_data: "Datos de gmail-triage no válidos." unknown_verb: "Verbo desconocido: {verb}" script_missing: "❌ Falta {script}" exit_code: "código de salida {code}" failed: "❌ {verb} falló: {detail}" timed_out: "❌ {verb} agotó el tiempo de espera" error: "❌ Error en {verb}: {error}" appended_by: "— {label} por {user}" user_fallback: "Usuario" install_hint: "Ejecuta `hermes setup` para instalar la compatibilidad con Telegram." slack: approval: fallback_text: "⚠️ Se requiere aprobación del comando: {command}" resolved_once: "✅ Aprobado una vez por {user}" resolved_session: "✅ Aprobado para la sesión por {user}" resolved_always: "✅ Aprobado permanentemente por {user}" resolved_deny: "❌ Denegado por {user}" confirm: default_title: "Confirmar" approve_once: "Aprobar una vez" always_approve: "Aprobar siempre" cancel: "Cancelar" resolved_always: "🔒 Aprobado siempre por {user}" resolved_cancel: "❌ Cancelado por {user}" picker: more_available: "\n*{count} más disponibles — escribe `/model ` directamente*" provider_header: "*⚙ Configuración del modelo*\nModelo actual: `{model}`\nProveedor: {provider}\n\nSelecciona un proveedor:{extra}" model_header: "*⚙ Configuración del modelo*\n\nProveedor: *{provider}*\nSelecciona un modelo:{extra}" choose_provider: "Elige un proveedor…" choose_model: "Elige un modelo de {provider}…" cancel: "Cancelar" back: "◀ Atrás" fallback_provider: "⚙ Configuración del modelo — selecciona un proveedor" fallback_model: "⚙ Configuración del modelo — {provider}" cancelled: "❌ Selección de modelo cancelada." no_models_for_provider: "No hay modelos disponibles para `{provider}`." switching: "⚙ Cambiando a `{model}`…" switch_failed: "❌ El cambio de modelo falló: {error}" switch_failed_header: "⚙ Falló el cambio de modelo" switched_header: "⚙ Modelo cambiado" clarify: option_n: "Opción {n}" choice_n: "opción {n}" other: "✏️ Otra…" expired: "⏳ Este prompt expiró — envía una nueva solicitud. (por {user})" awaiting: "✏️ Esperando la respuesta escrita de {user}…" resolved: "✅ {user}: {choice}" feedback: good: "Buena respuesta" good_a11y: "Enviar comentario positivo sobre esta respuesta" bad: "Mala respuesta" bad_a11y: "Enviar comentario negativo sobre esta respuesta" status: thinking: "está pensando..." still_working: "sigue trabajando… ({elapsed})" task_card: title: "Hermes está trabajando" slash: reply_truncated: "\n\n_[Respuesta truncada: {count} parte(s) más superaron el límite de respuestas efímeras de Slack.]_" running: "Ejecutando `/{command}`…" handoff: seed: ":thread: Traspaso de Hermes — *{name}*" matrix: handoff: default_name: "Sesión de Hermes" media: image_download_failed: "No pude descargar y subir la imagen a Matrix. No se muestra la URL de origen porque podría contener tokens privados." approval: typed_hint_once: "Responde `!approve` para ejecutar una vez, o `!deny` para cancelar." typed_hint_session: "Responde `!approve session` para aprobar este patrón durante la sesión, `!approve` para ejecutar una vez, o `!deny` para cancelar." typed_hint_always: "Responde `!approve session` para aprobar este patrón durante la sesión, `!approve always` para aprobarlo permanentemente, `!approve` para ejecutar una vez, o `!deny` para cancelar." legend_intro: "También puedes hacer clic en la reacción para aprobar:" legend_once: "✅ = aprobar una vez" legend_session: "🌀 = aprobar para esta sesión" legend_always: "♾️ = aprobar siempre" legend_deny: "❎ = denegar" invalid_reaction: "Esa reacción no es válida para esta solicitud de aprobación." expired: "Esta solicitud de aprobación ha expirado. Ejecuta el comando de nuevo si aún quieres aprobarlo." picker: no_models: "No hay modelos autenticados disponibles para esta sesión." title: "⚙ **Configuración del modelo**" current_model: "Modelo actual: `{model}`" provider: "Proveedor: {provider}" react_model: "Reacciona para elegir un modelo:" react_choice: "Reacciona para elegir." current_suffix: "{label} ← actual" invalid_model_reaction: "Esa reacción no corresponde a ninguno de los modelos disponibles." invalid_choice_reaction: "Esa reacción no corresponde a ninguna de las opciones disponibles." verb_switch_model: "cambiar de modelo" verb_apply_selection: "aplicar la selección" failed: "No se pudo {action}: {error}" reaction: unauthorized: "Solo un usuario autorizado de Matrix puede usar estos controles." not_requester: "Solo el usuario que solicitó esta acción puede usar estos controles." feishu: approval: action_session: "Sesión" action_always: "Siempre" resolved_once: "Aprobado una vez" resolved_session: "Aprobado para la sesión" resolved_always: "Aprobado permanentemente" resolved_deny: "Denegado" resolved_fallback: "Resuelto" resolved_by_user: "{icon} **{label}** por {user}" update_prompt: title: "☤ La actualización necesita tu respuesta" default_hint: "\n\nPredeterminado: `{default}`" answer_yes: "✓ Sí" answer_no: "✗ No" word_yes: "Sí" word_no: "No" answered_title: "{icon} Pregunta de actualización respondida: {answer}" answered_by: "Respondida por **{user}**" media: gif_downgraded: "[GIF convertido a archivo]" gif_downgraded_caption: "[GIF convertido a archivo]\n{caption}" google_chat: clarify: other_button: "Otro / escribir respuesta" header: "Pregunta" question: "❓ {question}" typing: thinking: "Hermes está pensando…" interrupted: "(interrumpido)" no_reply: "(sin respuesta)" attachment_fallback: header: "⚠️ No he podido adjuntar **{filename}**." explain: "Google Chat sólo permite adjuntar archivos cuando el bot tiene permiso explícito tuyo (OAuth de usuario). Es un consentimiento único que se hace desde este chat." activate: "**Para activarlo:** envía `/setup-files` y sigue las instrucciones." host_path: "Mientras tanto el archivo está en el host: `{path}`" setup_files: not_configured: "🔧 La entrega nativa de adjuntos **no está configurada**.\n**Paso 1 (una sola vez, en el host):** crea credenciales de cliente OAuth en https://console.cloud.google.com/apis/credentials → *Crear credenciales* → *ID de cliente de OAuth* → *Aplicación de escritorio*. Descarga el JSON. Luego, en el host, ejecuta:\n```\npython -m plugins.platforms.google_chat.oauth --client-secret /path/to/client_secret.json\n```\n**Paso 2:** vuelve aquí y envía `/setup-files start`." start_instructions: "1. Abre esta URL en tu navegador y autoriza:\n{auth_url}\n\n2. Tras hacer clic en *Permitir*, tu navegador no podrá cargar `http://localhost:1/?...&code=...`. Es lo esperado.\n\n3. Copia la URL completa que falló desde la barra de direcciones del navegador y pégala aquí como: `/setup-files ` (o solo el valor `code=...`).\n\nConsejo: la URL contiene tu autorización de acceso; mantenla privada." start_failed: "❌ No se pudo generar la URL de OAuth. Revisa los registros del gateway y verifica que client_secret.json sea válido." exchange_failed: "❌ Falló el intercambio del token. Puede que el código haya expirado o que la URL esté mal formada. Envía `/setup-files start` para obtener una nueva URL de OAuth." revoke_completed: "Revocación completada (es posible que se hayan omitido algunos pasos)." revoked: "Revocado." helper_error: "❌ Error: {error}" revoke_error: "❌ Error al revocar: {error}" who_shared: "compartido (legado)" active: "✅ La entrega nativa de adjuntos está **activa** para `{who}`.\nToken: `{token_path}`\nEnvía `/setup-files revoke` para desactivarla." not_authorized_yet: "🔧 Las credenciales de cliente están guardadas, pero aún no has autorizado. Envía `/setup-files start` para comenzar." no_client_credentials: "⚠️ No hay credenciales de cliente guardadas para este perfil. Envía `/setup-files` (sin argumentos) para ver las instrucciones de configuración." done_output: "✅ Listo.\n```\n{output}\n```" authorized: "✅ ¡Autorizado! La entrega nativa de adjuntos ya está activa. Prueba pedirme que te envíe un PDF." exchanged_not_loaded: "⚠️ El token se intercambió, pero el gateway no pudo cargar las nuevas credenciales en memoria. Reinicia el gateway y se tomará el token de `{token_path}`.\nSalida del asistente:\n```\n{output}\n```" teams: approval: resolved_once: "✅ Permitido (una vez)" resolved_session: "✅ Permitido (sesión)" resolved_always: "✅ Permitido siempre" resolved_deny: "❌ Denegado" unknown_action: "Acción desconocida." requires_allowlist: "⛔ Los botones de aprobación requieren que TEAMS_ALLOWED_USERS esté configurado." summary: title: "Reunión {meeting_id}" title_fallback: "resumen" heading: "Resumen" summary_line: "Resumen: {summary}" empty: "No hay resumen disponible." none_item: "Ninguno" key_decisions: "Decisiones clave" action_items: "Acciones pendientes" risks: "Riesgos" line: pending: still_thinking: "🤔 Sigo pensando. Toca abajo para obtener la respuesta cuando esté lista." button_label: "Obtener respuesta" delivered: "Ya respondido ✅" interrupted: "La ejecución se interrumpió antes de completarse." expired: "Esa solicitud ha expirado; envía tu mensaje de nuevo." standalone: attachments_not_deliverable: "[{count} adjunto(s) generado(s); no se pueden entregar desde cron]" wecom: media: kind_image: "Imagen" kind_video: "Video" kind_voice: "Mensaje de voz" file_too_large: "El archivo pesa {size_mb}MB y supera el límite de 20MB de WeCom, así que no se puede enviar. Prueba comprimirlo o reducir su tamaño." voice_format_downgraded: "El formato de voz {content_type} no es compatible (WeCom solo acepta AMR); se envió como archivo." size_downgraded: "{label} pesa {size_mb}MB y supera el límite de {cap}; se envió como archivo." email: image_line: "Imagen: {url}" standalone_subject: "Hermes Agent" dingtalk: emotion: thinking: "🤔Pensando" done: "🥳Listo" irc: quit_message: "Hermes Agent se está apagando" standalone_quit: "entregado" homeassistant: notification_title: "Hermes Agent" relay: confirm_approve_once: "Aprobar una vez" confirm_always_approve: "Aprobar siempre" confirm_cancel: "Cancelar" prompt_other: "✏️ Otra (escribir respuesta)" prompt_expired: ⌛ Esa solicitud ya no espera respuesta. Envía tu respuesta como un mensaje normal. slash: approve: description: "Aprobar un comando peligroso pendiente" bg: description: "Ejecutar un prompt en una sesión separada en segundo plano" insights: description: "Mostrar análisis y estadísticas de uso" reload_mcp: description: "Recargar los servidores MCP" resume: description: "Reanudar una sesión con nombre anterior" sethome: description: "Establecer este chat como canal principal" update: description: "Actualizar Hermes Agent a la última versión" category: session: "Sesión" configuration: "Configuración" info: "Información" tools_skills: "Herramientas y skills" plugins: "Plugins" exit: "Salir" context: "Contexto" background_automation: "Segundo plano y automatización" shared: usage_suffix: "{description} (uso: /{name} {args_hint})" alias_for: "{description} (alias de /{name})" alias_note: " (alias: {aliases})" slack_alias_for: "Alias de /{name} — {description}" plugin_default_desc: "Ejecutar /{name}" plugin_command_desc: "Comando de plugin" hermes: description: "Hablar con Hermes o ejecutar un subcomando" start: description: "Aceptar los pings de inicio de la plataforma sin responder" new: description: "Iniciar una nueva sesión (nuevo ID de sesión + historial)" topic: description: "Activar o inspeccionar sesiones por tema en MD de Telegram" clear: description: "Limpiar la pantalla e iniciar una nueva sesión" redraw: description: "Forzar un repintado completo de la UI (corrige desajustes del terminal)" history: description: "Mostrar el historial de la conversación" save: description: "Exportar la conversación actual (/save sin argumentos muestra el uso)" retry: description: "Reintentar el último mensaje (reenviarlo al agente)" prompt: description: "Redactar tu próximo prompt en $EDITOR (markdown) y enviarlo" undo: description: "Retroceder N turnos de usuario y volver a preguntar (predeterminado 1)" title: description: "Establecer un título para la sesión actual" handoff: description: "Transferir esta sesión a una plataforma de mensajería (Telegram, Discord, etc.)" branch: description: "Ramificar la sesión actual (nuevo hilo en Discord/Telegram/Slack/Matrix; --here se queda aquí)" worktree: description: "Mostrar, listar, crear o limpiar worktrees aislados de git" compress: description: "Comprimir el contexto de la conversación (añade 'here [N]' para conservar los últimos N turnos; --preview muestra qué pasaría)" rollback: description: "Listar o restaurar puntos de control del sistema de archivos (la restauración conserva tus ediciones manuales; --all las anula)" snapshot: description: "Crear o restaurar instantáneas de la configuración/estado de Hermes" export: description: "Exportar un perfil (configuración, skills, tema) a un archivo compartible" import: description: "Importar un archivo de perfil compartido como nuevo perfil" stop: description: "Terminar todos los procesos en segundo plano en ejecución" pause: description: "Pausar todo el trabajo nuevo globalmente (parada de emergencia); '/pause off' reanuda" deny: description: "Denegar un comando peligroso pendiente (opcionalmente con un motivo)" btw: description: "Hacer una pregunta aparte sobre la conversación actual sin interrumpirla" agents: description: "Mostrar los agentes activos y las tareas en ejecución" journey: description: "Abrir la línea de tiempo del recorrido de aprendizaje" queue: description: "Poner en cola un prompt para el próximo turno, o list/edit/rm/move/clear los prompts en cola" steer: description: "Inyectar un mensaje tras la próxima llamada a herramienta sin interrumpir" goal: description: "Establecer un objetivo permanente en el que Hermes trabaja turno tras turno hasta lograrlo" heartbeat: description: "Establecer un prompt recurrente que vuelve a entrar en esta sesión cuando está inactiva" refine: description: "Revisar esta conversación ahora y guardar lecciones en memoria/skills" review: description: "Lanzar un subagente independiente para revisar el trabajo recién tratado (PR, código, docs)" loop: description: "Volver a ejecutar un prompt a intervalos recurrentes en esta sesión" plan: description: "Escribir un plan de implementación en markdown en .hermes/plans/ sin ejecutar nada" moa: description: "Ejecutar un prompt con el preset predeterminado de Mixture of Agents y luego restaurar tu modelo" subgoal: description: "Añadir o gestionar criterios adicionales del objetivo activo" status: description: "Mostrar información de sesión, modelo, tokens y contexto" egress: description: "Mostrar el estado del proxy de salida de Docker" context: description: "Mostrar la vista detallada de la ventana de contexto con indicador de uso, desglose por categoría, estadísticas de compresión y rendimiento" whoami: description: "Mostrar tu nivel de acceso a comandos slash (admin / user)" profile: description: "Mostrar el nombre del perfil activo y su directorio home" sessions: description: "Explorar y reanudar sesiones anteriores" config: description: "Mostrar la configuración actual" model: description: "Cambiar de modelo (solo para la sesión; --global para persistirlo)" codex-runtime: description: "Activar/desactivar el runtime app-server de codex para modelos OpenAI/Codex" personality: description: "Establecer una personalidad predefinida" statusbar: description: "Mostrar/ocultar la barra de estado de contexto/modelo" battery: description: "Mostrar/ocultar un indicador de batería con colores en la barra de estado" timestamps: description: "Mostrar/ocultar marcas de tiempo [HH:MM] en los mensajes y en /history" diff: description: "Mostrar los cambios de git en el directorio de trabajo" verbose: description: "Alternar la vista de progreso de herramientas: off -> new -> all -> verbose" focus: description: "Alternar la vista enfocada: mostrar solo tu prompt y la respuesta final" footer: description: "Mostrar/ocultar el pie con metadatos de ejecución del gateway en las respuestas finales" yolo: description: "Activar/desactivar el modo YOLO (omitir todas las aprobaciones de comandos peligrosos)" approvals: description: "Mostrar o establecer el modo persistente de aprobación de comandos peligrosos" reasoning: description: "Gestionar el esfuerzo de razonamiento y su visualización" fast: description: "Modo rápido: OpenAI Priority Processing / Anthropic Fast Mode (normal/fast/auto/cold/ultrafast)" skin: description: "Mostrar o cambiar el skin/tema de la interfaz" indicator: description: "Elegir el indicador de actividad de la TUI" voice: description: "Activar/desactivar el modo de voz" wake: description: "Alternar la escucha de la palabra de activación 'Hey Hermes'" busy: description: "Controlar cómo se tratan los mensajes mientras Hermes está trabajando" tools: description: "Gestionar herramientas: /tools [list|disable|enable] [name...]" toolsets: description: "Listar los conjuntos de herramientas disponibles" skills: description: "Buscar, instalar, inspeccionar o gestionar skills" memory: description: "Revisar escrituras de memoria pendientes / alternar la puerta de aprobación" bundles: description: "Listar paquetes de skills (alias / para varias skills)" pet: description: "Alternar o adoptar una mascota de petdex (/pet, /pet list, /pet )" hatch: description: "Generar una nueva mascota de petdex a partir de una descripción" learn: description: "Aprender una skill reutilizable a partir de lo que describas (directorios, URLs, este chat, notas)" init: description: "Generar o actualizar las instrucciones de proyecto AGENTS.md a partir de un escaneo del repo" cron: description: "Gestionar tareas programadas" suggestions: description: "Revisar automatizaciones sugeridas (accept/dismiss)" blueprint: description: "Configurar una automatización a partir de una plantilla blueprint" curator: description: "Mantenimiento de skills en segundo plano (status, run, pin, archive, list-archived)" kanban: description: "Tablero de colaboración multiperfil (tareas, enlaces, comentarios)" reload: description: "Recargar las variables de .env en la sesión en curso" reload-mcp: description: "Recargar los servidores MCP" reload-skills: description: "Volver a escanear ~/.hermes/skills/ en busca de skills instaladas o eliminadas" browser: description: "Conectar las herramientas de navegador a tu navegador Chromium en uso vía CDP, o cambiar al modo Browser Use" plugins: description: "Listar los plugins instalados y su estado" commands: description: "Explorar todos los comandos y skills (paginado)" help: description: "Mostrar los comandos disponibles (/help skills lista los comandos de skills, /help filtra)" palette: description: "Abrir la paleta de comandos con búsqueda difusa (también Ctrl+P)" restart: description: "Reiniciar el gateway de forma ordenada tras terminar las ejecuciones activas" usage: description: "Mostrar el uso de tokens y los límites de tasa; `reset` canjea un reinicio de límite de Codex acumulado" subscription: description: "Ver tu plan de Nous y cambiarlo en el navegador" login: description: "Iniciar sesión con una cuenta de Nous (conserva tus conectores)" topup: description: "Mostrar tu saldo de Nous y gestionar la facturación en el portal" platforms: description: "Mostrar el estado de las plataformas de mensajería/gateway" platform: description: "Pausar, reanudar o listar una plataforma del gateway con fallos" copy: description: "Copiar la última respuesta del asistente al portapapeles" paste: description: "Adjuntar una imagen desde tu portapapeles" image: description: "Adjuntar un archivo de imagen local para tu próximo prompt" version: description: "Mostrar la versión de Hermes Agent" debug: description: "Subir un informe de depuración (info del sistema + registros) y obtener enlaces compartibles" quit: description: "Salir de la CLI (usa --delete para eliminar también el historial de la sesión)" cli: billing: load_failed: "{label}: {error}" load_failed_label: "No se pudo cargar la facturación" not_logged_in: "No has iniciado sesión en Nous Portal." run_portal_then: "Ejecuta `hermes portal` para iniciar sesión y luego {cmd}." org_line: "Org: {org}" org_line_role: "Org: {org} · {role}" bar_plan_label: "plan" bar_topup_label: "recarga" bar_pct_used: " · {pct}% usado" bar_plan: "{label}[{bar}] quedan ${remaining} de ${total}{pct}" bar_topup: "{label}[{bar}] ${remaining} · nunca expira" total_spendable: "Total disponible: ${amount}" one_time_setup: "! Configuración única" allow_remote_spending_title: "Permitir Gasto remoto" allow_remote_spending_detail: "Abre tu navegador para autorizar esta terminal." choice_allow_remote_spending: "Permitir Gasto remoto" desc_allow_remote_spending: "abrir tu navegador para autorizar" choice_not_now: "Ahora no" desc_not_now: "cancelar" opening_browser_remote_spending: "Abriendo tu navegador para permitir el Gasto remoto…" couldnt_allow_remote_spending: "No se pudo permitir el Gasto remoto: {error}" remote_spending_allowed: "Gasto remoto permitido." portal_line: "Portal: {url}" open_this_url: "Abre esta URL: {url}" manage_on_portal_url: "Gestionar en el portal: {url}" no_manage_url: "No hay URL de gestión disponible. ¿Está configurado tu portal?" stepup_stale: "El Gasto remoto sigue sin estar activo para esta terminal: la autorización no se aplicó. Reintenta o haz este cambio en el portal." something_went_wrong: "Algo salió mal." under_five: "menos de $5" plan_free: "Gratis" renews_suffix: " · se renueva el {date}" plan_line: "Plan: {plan}{renews}" free_models_only_hint: "> Gratis · solo modelos gratuitos. Ejecuta /subscription para acceder a modelos de pago." low_balance_usage: "! Saldo bajo · quedan {amount}. Ejecuta /topup o /subscription." usage_cta: "Ejecuta /subscription para cambiar de plan · /topup para añadir saldo" choice_cancel: "Cancelar" choice_back: "Atrás" choice_go_back: "Volver" choice_close: "Cerrar" desc_do_nothing: "no hacer nada" desc_do_not_charge: "no cobrar" choice_manage_on_portal: "Gestionar en el portal" desc_open_billing_page: "abrir la página de facturación en tu navegador" topup_header: "Recargar · saldo {balance}" topup_title: "Recarga tu saldo" auto_reload_on_line: "Recarga automática: activada — por debajo de {threshold} → recargar hasta {reload_to}" auto_reload_off_line: "Recarga automática: desactivada" card_line: "Tarjeta: {card}" no_saved_card_add_funds_hint: "No hay tarjeta guardada; “Añadir fondos” te guía para agregar una." actions_require_admin: "Las acciones de facturación requieren admin/propietario de la org." remote_spending_off_for_org: "El gasto remoto está desactivado para esta org." killswitch_reason_overview: "Un administrador de facturación puede activarlo desde la página Hermes Agent del portal para añadir fondos aquí." killswitch_reason_buy: "Un administrador de facturación puede activarlo desde la página Hermes Agent del portal antes de añadir fondos." add_funds_now_hint: "Añadir fondos ahora: un solo cargo, sumado a tu saldo hoy." refill_when_low_amounts: "Recargar cuando baje: cobra {reload_to} automáticamente cuando tu saldo cae por debajo de {threshold}." refill_when_low_generic: "Recargar cuando baje: cobra a tu tarjeta automáticamente cuando tu saldo cae por debajo del monto que definas." choice_add_funds: "Añadir fondos" desc_add_funds: "un solo cargo, sumado a tu saldo hoy" choice_auto_reload: "Recarga automática" desc_auto_reload: "recargar automáticamente cuando tu saldo esté bajo" choice_monthly_limit: "Límite mensual" desc_monthly_limit: "ver el tope de gasto mensual (solo lectura)" cancelled: "Cancelado." cancelled_yellow: "🟡 Cancelado." cancelled_no_funds: "Cancelado. No se añadieron fondos." no_portal_url: "No hay URL del portal disponible." complete_in_browser: "Completa los cambios de facturación en el navegador." add_card_first: "Primero añade una tarjeta" add_card_title: "Añadir una tarjeta" no_saved_card: "No hay tarjeta guardada." no_saved_card_short: "No hay tarjeta guardada" no_saved_card_lower: "sin tarjeta guardada" add_card_once_hint: "Añade una tarjeta una sola vez en la página de facturación del portal; después podrás recargar directamente desde la terminal." add_card_then_recheck: "Añade la tarjeta en la página de facturación y luego elige “volver a comprobar” aquí." card_found_continuing: "Tarjeta encontrada: {card} — continuando." still_no_card: "Aún no hay tarjeta guardada: termina de añadirla en el portal y vuelve a comprobar." choice_add_card_on_portal: "Añadir una tarjeta en el portal" desc_add_card_on_portal: "abre la página de facturación en tu navegador" choice_recheck_card: "Ya la añadí — volver a comprobar" desc_recheck_card: "volver a buscar la tarjeta y continuar" add_funds: "Añadir fondos" presets: "Montos predefinidos: {presets}" run_interactive_to_purchase: "Ejecuta esto en la CLI interactiva para completar una compra." desc_one_time_purchase: "compra única de créditos" choice_custom_amount: "Monto personalizado…" desc_custom_amount: "introduce tu propio monto" payment_line: "Pago: {card}" amount_prompt: "Monto (USD):" invalid_selection: "🔴 Selección no válida." confirm_purchase: "Confirmar compra" total_line: "Total: {amount}" portal_card_will_be_charged: "Se cobrará a la tarjeta guardada en el portal." consent_charge: "Al confirmar, autorizas a Nous Research a cobrar a tu tarjeta." choice_pay_now: "Pagar {amount} ahora" desc_submit_charge: "enviar el cargo" desc_manage_card_billing: "gestionar tu tarjeta / facturación en el navegador" run_interactive_to_confirm: "Ejecuta en la CLI interactiva para confirmar una compra." pay_question: "¿Pagar {amount}?" no_charge_id: "No se devolvió ningún id de cargo; revisa el portal." charge_submitted: "Cargo enviado — confirmando la liquidación…" could_not_check_charge: "🔴 No se pudo verificar el cargo: {error}" added_to_balance: "✓ {amount} añadidos a tu saldo." still_processing: "🟡 Sigue procesándose tras 5 minutos: es un tiempo de espera agotado, no un fallo. Revisa /billing o el portal en breve." charge_failed_authentication_required: "🔴 Tu banco requiere verificación (3DS). Complétala en el portal para terminar esta compra." charge_failed_payment_method_expired: "🔴 Tu tarjeta ha expirado. Actualízala en el portal." charge_failed_card_declined: "🔴 Tu tarjeta fue rechazada. Prueba con otra tarjeta en el portal." charge_failed_generic: "🔴 El cargo no se completó ({reason})." charge_error_no_payment_method: "💳 No hay tarjeta guardada: recarga y gestiona la facturación en el portal." charge_error_remote_spending_disabled: "El gasto remoto está desactivado para esta cuenta; un administrador de facturación puede activarlo desde la página Hermes Agent del portal." charge_error_role_required: "Añadir fondos requiere un administrador o propietario de la org. Pídeselo a un administrador o gestiónalo en el portal." charge_error_idempotency_conflict: "🔴 Esa clave de cargo ya se usó con un monto distinto. Inicia una recarga nueva." revoked_by_admin: "Un administrador detuvo el gasto de esta terminal." revoked_by_you: "Detuviste el gasto de esta terminal." revoked_reconnect: "🔴 {who} Reconecta para restaurarlo: ejecuta `hermes portal` para volver a autorizar." session_logged_out: "🔴 Tu sesión se cerró. Ejecuta `hermes portal` para iniciar sesión de nuevo." monthly_cap_reached_headroom: "🔴 Tope de gasto mensual alcanzado — quedan ${remaining} de margen." monthly_cap_reached: "🔴 Tope de gasto mensual alcanzado." try_again_in_min: " (inténtalo de nuevo en ~{minutes} min)" too_many_charges: "🟡 Demasiados cargos en este momento{mins}. No es un fallo de pago." remote_spending_needs_approval: "🔴 El Gasto remoto necesita aprobación: ejecuta /topup para permitirlo y luego reintenta." your_topup: "tu recarga" charge_stepup_explain: "Para cobrar desde esta terminal, permite el Gasto remoto una sola vez. Se abre tu navegador para autorizar y luego {amount} continúa aquí mismo." charge_stepup_noninteractive: "Ejecuta `hermes portal`, permite el Gasto remoto y luego reintenta." charge_stepup_declined: "No se hizo ningún cargo. Ejecuta /topup cuando quieras permitir el Gasto remoto." charge_stepup_not_granted: "No se pudo permitir el Gasto remoto: debe aprobarlo un administrador o propietario de la org. No se cobró a tu tarjeta." allowed_but_org_off: "El Gasto remoto está permitido para esta terminal, pero sigue desactivado para esta org. Un administrador de facturación puede activarlo desde la página Hermes Agent del portal; luego ejecuta /topup de nuevo." allowed_no_card: "Gasto remoto permitido, pero aún no hay ninguna tarjeta guardada." topup_on_portal_to_continue: "Recarga y gestiona la facturación en el portal para continuar." allowed_run_topup: "Gasto remoto permitido. Ejecuta /topup para continuar." choice_resume_topup: "Reanudar recarga de {amount}" desc_resume_topup: "terminar la compra retenida" resume_topup_title: "Reanuda tu recarga" resume_topup_detail: "{amount} está listo para completarse — presiona Enter para reanudar." resuming_topup: "Reanudando tu recarga — confirmando la liquidación…" auto_reload: "Recarga automática" auto_reload_hint: "Añade fondos automáticamente cuando tu saldo esté bajo." card_on_file: "Tarjeta guardada: {card}" no_saved_card_manage_portal: "No hay tarjeta guardada: gestiona la facturación en el portal." auto_reload_rule: "por debajo de {threshold} → recargar hasta {reload_to}" auto_reload_rule_cap: "Por debajo de {threshold} → recargar hasta {reload_to}" currently: "Actualmente: {rule}" auto_reload_on_detail: "Activada — {rule}" run_interactive_to_configure: "Ejecuta en la CLI interactiva para configurar la recarga automática." choice_edit_thresholds: "Editar umbrales" desc_edit_thresholds: "cambiar cuándo y cuánto recargar" choice_turn_off: "Desactivar" desc_turn_off: "desactivar la recarga automática" choice_agree_turn_on: "Aceptar y activar" desc_agree_turn_on: "activar la recarga automática" amount_prompt_labeled: "{label} (USD)" threshold_label: "Cuando el saldo baje de" reload_to_label: "Recargar el saldo hasta" reload_must_exceed_threshold: "🔴 El monto de recarga debe ser mayor que el umbral." auto_reload_consent: "Al confirmar, autorizas a Nous Research a cobrar a {card} cada vez que tu saldo llegue a {threshold}. Puedes desactivarlo en cualquier momento aquí o en el portal." turn_on_auto_reload_question: "¿Activar la recarga automática?" auto_reload_enabled: "✅ Recarga automática activada: por debajo de {threshold} → recargar hasta {reload_to}." auto_reload_disabled: "✅ Recarga automática desactivada." monthly_spend_limit: "Límite de gasto mensual" no_monthly_cap: "No hay tope mensual visible (se gestiona en el portal)." default_ceiling_suffix: " (tope predeterminado)" used_this_month: "{spent} de {limit} usados este mes{ceiling}" monthly_limit_read_only: "El límite mensual se define en el portal; la terminal lo muestra en modo de solo lectura." subscription: load_failed_label: "No se pudo cargar la suscripción" team_header: "Suscripción de equipo" a_team_org: "una organización de equipo" team_connected: "Esta terminal está conectada a {org}. Los equipos usan un saldo compartido · usa /topup para añadir fondos." personal_note: "Las suscripciones personales viven en tu cuenta personal." your_plan: "tu plan" cancels: "se cancela" end_of_billing_period: "el final del período de facturación" end_of_cycle: "el final del ciclo" status_flip_cancels: " → se cancela" status_flip_to: " → {tier}" status_left: " · quedan ${amount}" status_view_only: " · solo lectura" status_renews: " · se renueva el {date}" status_line: "Plan: {plan}{flip}{left}{tail}" status_free: "Plan: Free · solo modelos gratuitos" scheduled_change: "Cambio programado" scheduled_change_line: "{from_plan} ──▶ {to_plan} {when}" scheduled_when: "· {when}" keep_until_then: "Conservas {plan} (y sus créditos) hasta entonces." paid_models_need_subscription: "> Los modelos de pago requieren una suscripción. Inicia una para acceder a ellos." low_balance: "! Saldo bajo · quedan {amount}. Recarga o mejora tu plan antes de que se corte a mitad de ejecución." plan_changes_need_admin: "Cambiar de plan requiere un admin o propietario de la org." manage_url_line: "Gestiona tu suscripción: {url}" open_then_rerun: "Ábrelo en tu navegador y luego vuelve a ejecutar /subscription." start_subscription: "Iniciar una suscripción" choose_plan: "Elige un plan" start_opens_portal: "Al iniciar una suscripción se abre el portal para añadir tu tarjeta." desc_start_on_portal: "iniciar {name} en el portal" pick_plan_detail: "Elige un plan para abrirlo en el portal." cancelled_no_plan_started: "🟡 Cancelado. No se inició ningún plan." opening_portal_to_start: "Abriendo el portal para iniciar {plan}…" open_url_to_start: "Abre esta URL para iniciar {plan}: {url}" finish_in_browser: "Termina en tu navegador y luego vuelve a ejecutar /subscription." manage_your_subscription: "Gestiona tu suscripción" desc_open_subscription_page: "abrir la página de suscripción en tu navegador" choice_copy_link: "Copiar enlace" desc_copy_link: "copiar al portapapeles la URL de gestión de la suscripción" copied: "📋 Copiado: {url}" manage_url: "URL de gestión: {url}" choice_keep_plan: "Conservar {plan} (deshacer el cambio programado)" desc_keep_plan: "cancelar el cambio pendiente" choice_change_plan: "Cambiar de plan" desc_change_plan: "mejorar o reducir el plan desde la terminal" choice_cancel_subscription: "Cancelar suscripción" desc_cancel_subscription: "programar la cancelación al final del período" closed_no_change: "🟡 Cerrado. Sin cambio de plan." no_other_plans: "Ahora mismo no hay otros planes disponibles a los que cambiar." direction_upgrade: "mejora" direction_downgrade: "reducción" tier_row: "{row} · {direction}" desc_switch_to: "cambiar a {name}" change_plan_title: "Cambiar de plan" current_pick_detail: "Actual: {plan}. Elige un plan para ver una vista previa del efecto." cancelled_no_plan_change: "🟡 Cancelado. Sin cambio de plan." checking_change: "Comprobando el cambio…" the_selected_plan: "el plan seleccionado" already_on_nothing_to_change: "Ya estás en {plan}: no hay nada que cambiar." cannot_confirm_here: "Este cambio no se puede confirmar aquí: gestiónalo en el portal." confirm_plan_change: "Confirmar cambio de plan" tag_charged_now: "· se cobra ahora" tag_scheduled_not_today: "· programado · no es hoy" charged_amount_now: "{amount} ahora (prorrateado)" charged_prorated_now: "el importe prorrateado ahora" upgrade_will_be_charged: "Mejora a {plan}. Se te cobrará {charged}." card_on_subscription_charged: "Se cobrará a la tarjeta de tu suscripción." named_card_on_subscription_charged: "Se cobrará a {card}, la tarjeta de tu suscripción." choice_pay_and_upgrade: "Pagar {amount} y mejorar ahora" choice_upgrade_now_prorated: "Mejorar ahora (cobro prorrateado)" desc_charge_and_upgrade: "cobrar y mejorar ahora" change_takes_effect: "Cambio a {plan}: entra en vigor {when}. Sin cobro ahora; conservas tu plan actual hasta entonces." choice_schedule_change: "Programar el cambio a {plan}" desc_apply_change: "aplicar este cambio" desc_do_not_change: "no cambiar" monthly_credits_change: "Cambio en los créditos mensuales: {delta}." confirm_cancellation: "Confirmar cancelación" cancel_stays_active_until: "Cancelar {plan}: sigue activo hasta {end} y después no se renovará." keep_remaining_credits: "Conservas los créditos que te quedan de este período. Puedes reanudarlo antes de que termine." cancel_subscription_question: "¿Cancelar la suscripción?" desc_keep_your_plan: "conservar tu plan" cancelled_plan_unchanged: "🟡 Cancelado. Tu plan no ha cambiado." your_new_plan: "tu nuevo plan" upgrade_already_on_tier: "Ya estás en {name}." upgrade_upgraded: "Has mejorado a {name}. Tus nuevos créditos mensuales llegarán en un momento." upgrade_requires_action: "🟡 Esta mejora requiere una verificación adicional (3DS). Complétala en el portal." upgrade_payment_failed: "🔴 Tu tarjeta fue rechazada. Actualiza tu método de pago en el portal e inténtalo de nuevo." pending_scheduled: "Programado: tu plan no cambia hoy. Lo conservas hasta el final del período de facturación y después cambia." pending_cancel_scheduled: "Programado: tu plan sigue activo hasta el final del período de facturación y después se cancela. Hoy no cambia nada." pending_resumed: "Deshecho: sigues en tu plan actual." rerun_to_review: "Vuelve a ejecutar /subscription cuando quieras para revisarlo." stepup_explain: "Para cambiar tu plan desde la terminal, permite Remote Spending una vez. Se abrirá tu navegador para autorizarlo y luego el cambio continuará aquí mismo." stepup_noninteractive: "Ejecuta `hermes portal`, permite Remote Spending y luego vuelve a ejecutar /subscription." stepup_declined: "No se hizo ningún cambio. Permite Remote Spending cuando estés listo." stepup_not_granted: "No se pudo permitir Remote Spending: un administrador o propietario de la organización debe aprobarlo." remote_spending_not_allowed_yet: "🟡 Remote Spending aún no está permitido. Permítelo y vuelve a intentarlo." upgrade_ambiguous: "🟡 No se pudo confirmar la mejora: es posible que se haya cobrado a tu tarjeta o no." rerun_to_check_plan: "Vuelve a ejecutar /subscription para comprobar tu plan antes de intentarlo de nuevo." model: switched: "✓ Modelo cambiado: {model}" acting_model: "Modelo activo (el que se factura en la ejecución): {model}" reasoning_effort: "Esfuerzo de razonamiento: {effort}" reasoning_effort_saved: "Esfuerzo de razonamiento: {effort} (guardado en la configuración)" saved: "Guardado en config.yaml" saved_global: "Guardado en config.yaml (--global)" next_turn_only: "(solo el próximo turno; se restaura tras una respuesta)" session_only: "(solo esta sesión; añade --global para hacerlo permanente)" effort_none: "none (desactivar el razonamiento)" effort_keep_current: "Mantener el esfuerzo actual" no_authenticated_providers: "No se encontraron proveedores autenticados." usage_switch: "cambiar de modelo (esta sesión)" usage_switch_global: "cambiar de modelo y guardarlo como predeterminado" usage_switch_once: "cambiar solo para el próximo turno" usage_switch_session: "cambiar solo para esta sesión" usage_switch_provider_model: "cambiar de proveedor y modelo" usage_switch_reasoning: "cambiar y establecer el esfuerzo de razonamiento" usage_switch_provider: "cambiar de proveedor" usage_refresh: "recargar las listas de modelos" choice_switch_anyway: "Cambiar de todos modos" desc_switch_anyway: "Usar este modelo en la sesión actual de Hermes." choice_cancel: "Cancelar" desc_keep_current_model: "Mantener el modelo actual." switch_cancelled: "Cambio de modelo cancelado." selection_failed: "✗ Falló la selección de modelo: {error}" switch_failed: "⚠ Falló el cambio al modelo {model} ({error}); se mantiene {old_model}." cleared_picker_cache: "Caché del selector de modelos borrada. Actualizando..." moa_one_shot_queued: "MoA de un solo uso en cola con el preajuste {preset}; el modelo anterior se restaurará tras este turno." normalized_model: "Modelo '{old}' normalizado a '{new}' para {provider}." normalized_copilot_model: "Modelo de Copilot '{old}' normalizado a '{new}'." stripped_provider_prefix: "Se quitó el prefijo de proveedor de '{old}'; se usa '{new}' para {provider}." restored_from_session: "Modelo restaurado desde la sesión: {model}" could_not_load_config: "❌ no se pudo cargar la configuración: {error}" tip_reset_new_session: "Consejo: `/reset` inicia una nueva sesión de inmediato." single_query: query_label: "Consulta:" kanban_run_reclaimed: "kanban: la ejecución de este worker fue reclamada antes de empezar; saliendo" shared: cancel: "Cancelar" back: "← Atrás" unknown: "desconocido" unknown_error: "Error desconocido" noun_model: "modelo" label_enabled: "activado" label_disabled: "desactivado" label_yes: "sí" label_no: "no" label_on: "activado" label_off: "desactivado" label_on_upper: "ACTIVADO" label_off_upper: "DESACTIVADO" label_value: "{label}: {value}" just_now: "justo ahora" ago_seconds: "hace {seconds}s" ago_minutes: "hace {minutes} min" ago_hours: "hace {hours}h" duration_s: "{seconds}s" duration_m: "{minutes}m" duration_ms: "{minutes}m {seconds}s" duration_ms_compact: "{minutes}m{seconds}s" duration_hm: "{hours}h {minutes}m" duration_hms: "{hours}h {minutes}m {seconds}s" duration_dhm: "{days}d {hours}h {minutes}m" duration_m_rest: "{minutes}m {rest}" duration_hm_rest: "{hours}h {minutes}m {rest}" no_active_agent: "(._.) No hay ningún agente activo -- envía un mensaje primero." n_more: "{count} más" more_not_shown: "más sin mostrar" yes_no_default_yes: "S/n" yes_no_default_no: "s/N" yes_initial: "s" tui: approval_once: "Permitir una vez" approval_session: "Permitir durante esta sesión" approval_always: "Permitir siempre (lista permanente)" approval_deny: "Denegar" approval_view: "Mostrar el comando completo" approval_title: "⚠️ Comando peligroso" approval_choose_full: "… (elige {label})" approval_command_truncated: "… (comando truncado; usa /logs o /debug para ver el texto completo)" approval_description_truncated: "… (descripción truncada)" confirm_title: "Confirmar acción" confirm_footer: "Escribe 1/2/3 o usa ↑/↓ y luego Enter. ESC/Ctrl+C cancela." detail_truncated: "… (detalle truncado)" clarify_title: "{agent_name} necesita tu respuesta" clarify_question_count_one: "{count} pregunta" clarify_question_count_other: "{count} preguntas" clarify_other_answer: "Otra: {text}" clarify_other_type_below: "Otra (escríbela abajo)" clarify_other_type_answer: "Otra (escribe tu respuesta)" clarify_guidance: "Escribe tu respuesta en el prompt de abajo y luego presiona Enter." picker_title_provider: "⚙ Selector de modelos — Elige un proveedor" picker_provider_row_one: "{name} ({count} modelo)" picker_provider_row_other: "{name} ({count} modelos)" picker_current_marker: " ← actual" picker_current_hint: "Actual: {model} en {provider}" picker_title_effort: "⚙ Selector de modelos — Esfuerzo de razonamiento para {model}" picker_current_labeled: "{label} ← actual" picker_effort_hint: "Se aplica junto con el cambio de modelo (mismo alcance) — Enter para elegir" picker_title_models: "⚙ Selector de modelos — {provider}" picker_provider_fallback: "Proveedor" picker_filter_hint: "Filtro: {query}▏ ({shown}/{total} coinciden — escribe para acotar, Retroceso para borrar)" picker_select_hint: "Selecciona un modelo ({count} disponibles) — escribe para filtrar" picker_empty: "No hay modelos listados para este proveedor. Usa Atrás o Cancelar." palette_title: "⚙ Paleta de comandos" palette_filter_hint: "Filtro: {query}▏ ({shown}/{total} coinciden — Enter inserta, Esc cancela)" palette_hint: "Escribe para filtrar {total} comandos — ↑/↓ y luego Enter inserta, Esc cancela" palette_empty: "(no hay comandos que coincidan)" vault_code_title: "🔐 Código de verificación para {site}" vault_code_body: "{site} está pidiendo un código de un solo uso (SMS, correo o app de autenticación).\nEscribe el código y presiona Enter; {agent_name} lo introduce en la página por ti.\nEnter en una línea vacía lo omite. El modelo nunca ve el código." vault_save_title: "🔐 Guardar inicio de sesión para {site}" vault_save_body: "El agente llegó a una página de inicio de sesión sin credenciales guardadas para este sitio.\nEscribe el correo o nombre de usuario con el que inicias sesión (visible) y luego Enter.\nEnter en una línea vacía lo omite. Nada de esto se muestra al modelo." vault_save_pw_body: "Ahora la contraseña (oculta). Se cifra en este equipo, se vincula a\n{origin} y se rellena en la página sin que el modelo la vea nunca.\nEnter en una línea vacía lo omite." vault_unlock_title: "🔐 Desbloquear {backend}" vault_unlock_body: "El agente quiere iniciar sesión en un sitio con credenciales guardadas en {backend}.\nEscribe tu contraseña maestra (oculta) para desbloquearlo durante esta sesión.\nEnter en una línea vacía lo deja bloqueado. El modelo nunca ve la contraseña." sudo_title: "🔐 Se requiere la contraseña de sudo" sudo_body: "Escribe la contraseña abajo (oculta) o presiona Enter para omitir" secret_title: "🔑 Configuración de skill requerida" secret_prompt: "Introduce el valor de {var_name}" secret_fallback_name: "secreto" secret_body: "Escribe el secreto abajo (oculto); ESC o Ctrl+C para omitir" connection_connect: "Conectar" connection_continue: "Continuar" hint_sudo: "contraseña oculta · Enter para omitir" hint_secret: "secreto oculto · Enter para omitir" hint_approval: "↑/↓ para seleccionar, Enter para confirmar" hint_slash_confirm: "escribe 1/2/3 o ↑/↓ para seleccionar, Enter para confirmar" hint_connection_form: "escribe el valor, Enter para el siguiente campo · ↑/↓ mover · ESC cancelar" hint_connection_url: "Enter para abrir en el navegador · ESC cancelar" hint_connection_authorized: "↑/↓ seleccionar, Enter para confirmar" hint_connection_waiting: "esperando al backend… · Ctrl+C interrumpir" hint_connection_default: "configuración de la conexión" hint_vault_username: "visible mientras escribes · Enter para continuar" hint_clarify_freetext: "escribe tu respuesta y presiona Enter" hint_clarify_batch: "↑/↓ para seleccionar, Enter para fijar, Tab siguiente pregunta" hint_input_disabled: "entrada desactivada temporalmente" hint_input_queues: "la entrada sigue activa; Enter pone en cola" hint_command_running: "{frame} comando en curso · {detail}" placeholder_recording: "grabando... {shortcut} para detener, Ctrl+C para cancelar" placeholder_transcribing: "transcribiendo..." placeholder_vault_username: "escribe tu correo o nombre de usuario, Enter para continuar · ESC para omitir" placeholder_vault_code: "escribe el código, Enter para enviar · ESC para omitir" placeholder_password: "escribe la contraseña (oculta), Enter para enviar · ESC para omitir" placeholder_secret: "escribe el secreto (oculto), Enter para enviar · ESC para omitir" placeholder_choice: "escribe 1/2/3 o usa ↑/↓ y luego Enter" placeholder_answer: "escribe tu respuesta aquí y presiona Enter" placeholder_processing_command: "Procesando comando..." placeholder_busy: "msg=interrumpir · /queue · /bg · /steer · Ctrl+C cancelar" placeholder_voice_idle: "escribe o {shortcut} para grabar" voice_recording_failed: "Falló la grabación de voz: {error}" recording_cancelled: "Grabación cancelada." force_exiting: "⚡ Forzando la salida..." interrupting_again_hint: "⚡ Interrumpiendo al agente... (presiona Ctrl+C otra vez para forzar la salida)" interrupting: "⚡ Interrumpiendo al agente..." suspend_unsupported: "Suspender (Ctrl+Z) no está disponible en Windows." suspended: "{agent_name} se ha suspendido. Ejecuta `fg` para traer de vuelta a {agent_name}." steer_failed_queued: "Falló la redirección ({error}); en cola para el próximo turno." steered: "⏩ Redirigido: '{preview}'" images_attached_preview_one: "[{count} imagen adjunta]" images_attached_preview_other: "[{count} imágenes adjuntas]" queued_next_turn: "En cola para el próximo turno: {preview}" redirected_turn: "↪ Turno actual redirigido: '{preview}'" model_selection_failed: "✗ Falló la selección de modelo: {error}" auto_attached_image: "📎 Imagen adjuntada automáticamente: {name}" detected_file: "📄 Archivo detectado: {name}" images_attached_one: "📎 {count} imagen adjunta" images_attached_other: "📎 {count} imágenes adjuntas" command_interrupted: "Comando interrumpido." welcome: "¡Bienvenido a Hermes Agent! Escribe tu mensaje o /help para ver los comandos." activated_skills_label: "Skills activadas:" redaction_disabled_title: "⚠ La redacción de secretos está DESACTIVADA" redaction_disabled_body: "(HERMES_REDACT_SECRETS={value}). Las claves de API y los tokens pueden aparecer sin ocultar en la salida del chat, los JSON de sesión y los registros. Establece {setting} en config.yaml para reactivarla." stdin_unavailable: "Error: stdin (fd 0) no está disponible.\nEsto puede ocurrir con ciertas instalaciones de Python (p. ej., cPython gestionado por uv en macOS).\nPrueba a reinstalar Python con pyenv o Homebrew y luego vuelve a ejecutar: hermes setup" shutting_down: "Apagando… (finalizando la sesión)" session_deleted: "✓ Sesión {session_id} eliminada" session_delete_missing: "✗ No se encontró la sesión {session_id} para eliminarla" voice: err_termux_app_missing: "Se detectó el paquete de comandos Termux:API, pero falta la app de Android.\nInstala o actualiza la app de Android Termux:API y vuelve a intentar /voice on." err_mic_access: "El modo de voz necesita acceso al micrófono.\nEjecuta pkg install termux-api, instala la app de Android Termux:API y vuelve a intentar /voice on." err_audio_capture: "El modo de voz requiere captura de audio." err_stt_provider: "El modo de voz requiere un proveedor STT para la transcripción.\nEjecuta hermes tools, configura Speech-to-Text y luego reinicia Hermes." silence_autostop: "Silencio detectado, deteniendo automáticamente..." hint_continuous: "se detiene solo con el silencio | {shortcut} para detener y salir del modo continuo" hint_termux: "Captura con Termux:API | {shortcut} para detener" hint_stop: "{shortcut} para detener" recording: "● Grabando..." autorestart_failed: "Falló el reinicio automático de voz: {error}" no_speech: "No se detectó voz." preparing_stt: "Preparando el modelo STT local '{model}' (la primera vez puede descargarse desde Hugging Face)..." transcribing: "Transcribiendo..." stop_phrase: "Frase de parada detectada — finalizando el chat de voz." transcription_failed: "Falló la transcripción: {error}" processing_error: "Error al procesar la voz: {error}" recording_preserved: "Grabación conservada en: {path}" no_speech_stop: "No se detectó voz 3 veces; el modo continuo se detuvo." tts_failed: "Falló la reproducción TTS: {error}" interjection: "🎤 Interrupción por voz — interrumpiendo…" echo_ignored: "Se ignoró un probable eco del TTS (no se puso en cola)." already_enabled: "El modo de voz ya está activado." unavailable_header: "El modo de voz no está disponible en este entorno:" requirements_header: "No se cumplen los requisitos del modo de voz:" termux_install_cmd: "Ejecuta: pkg install termux-api" termux_install_hint: "Luego instala o actualiza la app de Android Termux:API para capturar el micrófono" tts_enabled_suffix: " (TTS activado)" enabled: "Modo de voz activado{tts_status}" record_key_hint: "{shortcut} para iniciar/detener la grabación" tts_toggle_hint: "/voice tts para alternar la salida de voz" disable_hint: "/voice off para desactivar el modo de voz" stop_phrase_typed: "Frase de parada escrita — finalizando el chat de voz." disabled: "Modo de voz desactivado." wake_unavailable: "Palabra de activación no disponible: {error}" wake_already: "La palabra de activación ya está escuchando." wake_requirements_header: "Faltan requisitos de la palabra de activación:" wake_installing: "Instalando el motor de palabra de activación (primer uso — puede tardar un minuto)..." wake_start_failed: "No se pudo iniciar la palabra de activación: {error}" wake_listening: "Palabra de activación escuchando" wake_listening_hint: "(di \"{phrase}\" — /wake off para detener)" wake_stopped: "Palabra de activación detenida." wake_not_running: "Palabra de activación inactiva." wake_profile_hint: "Frase de activación del perfil '{profile}' — ejecuta: hermes -p {profile}" wake_detected: "✦ Palabra de activación detectada — escuchando..." wake_capture_failed: "Falló la captura de activación: {error}" state_listening: "ESCUCHANDO" state_paused: "EN PAUSA" state_off: "DESACTIVADO" state_on: "ACTIVADO" state_yes: "SÍ" wake_status_title: "Estado de la palabra de activación" label_state: " Estado: {state}" label_phrase: " Frase: \"{phrase}\"" label_provider: " Proveedor: {provider}" label_surface: " Superficie: {surface}" label_new_session: " Nueva sesión: {value}" mic_silent_warning: "⚠ El micrófono solo entrega silencio — el detector no puede oír nada." mic_silent_macos_hint: "En macOS: Configuración del Sistema > Privacidad y seguridad > Micrófono — permite tu terminal/Hermes y luego /wake off + /wake on." wake_enable_hint: "Activa con /wake on" enable_first_hint: "Activa primero el modo de voz: /voice on" tts_no_provider: "Advertencia: no hay ningún proveedor TTS disponible. Instala edge-tts o configura las claves de API." tts_status: "TTS de voz {status}." status_title: "Estado del modo de voz" label_mode: " Modo: {value}" label_tts: " TTS: {value}" label_recording: " Grabación: {value}" label_record_key: " Tecla de grabación: {shortcut}" label_requirements: "Requisitos:" render: response_transformed: "[Respuesta transformada después del streaming]" banner_tagline: "{name} - Framework de agentes de IA" banner_version: "Hermes Agent v{version} ({date})" subagents: cannot_steer_process: "Los procesos en segundo plano no se pueden redirigir; deténlos o lee el registro." count_live: "{count} activos" count_done: "{count} terminados" count_running: "{count} en ejecución" count_procs_one: "{count} proceso" count_procs_other: "{count} procesos" count_queued: "{count} en cola" goal_parked: "objetivo en espera" goal_paused: "objetivo en pausa" goal_active: "objetivo activo" title_live_work: "Trabajo en curso" title_subagents: "Subagentes" title_processes: "Procesos" last_tool: "última: {tool}" starting: "iniciando" next_queued: "siguiente: {text}" heading_full: "{title} · {count} · Ctrl+T expandir · Ctrl+R restaurar" heading_medium: "{count} · Ctrl+T expandir · Ctrl+R restaurar" heading_compact: "{count} · Ctrl+T · Ctrl+R" heading_session_restore: "{count} · Ctrl+R restaurar" heading_session_compact: "{count} · Ctrl+R" subagents_heading: "Subagentes · {count} activos · Ctrl+T expandir · Ctrl+R contraer" more_subagents: "+{count} más · Ctrl+T todos los subagentes" controls_expand_collapse: " · Ctrl+T expandir · Ctrl+R contraer" processes_heading: "Procesos · {summary}{controls}" more_processes: "+{count} más · Ctrl+T todos los procesos" controls_collapse: " · Ctrl+R contraer" queue_heading: "Cola · {count} en cola · /queue list{controls}" more_queued: "+{count} más" transcript_unavailable: "La transcripción en vivo aún no está disponible." steer_prompt: "Redirigir: " roster_empty: "No hay subagentes activos ni procesos en segundo plano. Los resultados llegan a la conversación." entry_gone: "Esta entrada ya no está activa." noun_process: "proceso" noun_subagent: "subagente" footer_confirm_stop: "¿Detener el {noun} seleccionado? y confirmar · Esc cancelar" footer_confirm_stop_compact: "¿Detener? y sí · Esc cancelar" footer_steering: "Enter pone en cola la indicación · Esc cancela (no interrumpe)" footer_steering_compact: "Enter enviar · Esc cancelar" footer_steer_key: " s redirigir" footer_steer_key_long: " · s redirigir" footer_detail_compact: "PgUp/Dn ·{steer} x detener · Esc" footer_roster_compact: "↑↓ · Enter seguir · Ctrl+T cerrar" footer_detail: "Esc lista · PgUp/PgDn seguir{steer} · x detener" footer_roster: "↑/↓ seleccionar · Enter seguir{steer} · x detener · q/Ctrl+T cerrar" dock: process_goal_label: "proceso en segundo plano" last_output: "último: {detail}" starting: "iniciando" exit_code: "salida {code}" verdict_killed: "detenido" verdict_lost: "perdido" verdict_ago: "{verdict} · hace {seconds}s" process_gone: "Este proceso ya no se rastrea." no_output: "Aún no hay salida." approval: bell_context: "aprobación" label: "Aprobación" timeout_denying: "⏱ Tiempo agotado — denegando el comando" timed_out_no_response: "tiempo agotado (sin respuesta)" outcome_once: "permitido una vez" outcome_session: "permitido para la sesión" outcome_always: "añadido a la lista de permitidos" outcome_deny: "denegado" clarify: bell_context: "aclaración" label: "Aclarar" timed_out_locked_answers: "(la aclaración expiró tras {timeout}s — se devolvieron las respuestas fijadas)" connect: bell_context: "configuración de conexión" cannot_restart: "Esta conexión no se puede iniciar de nuevo. Cancela y vuelve a pedírselo al agente." secret_set: "Configurado" set_up: "Configurar {name}" button_connect: "Conectar" button_cancel: "Cancelar" button_continue: "Continuar" press_enter_open: "Presiona Enter para abrir en el navegador" failed: "Falló la conexión" authorized_no_tools: "Autorizado. Herramientas no disponibles." connected: "Conectado" waiting: "Esperando…" editor: only_interactive: "El editor externo solo está disponible dentro de la CLI interactiva." wait_for_command: "Espera a que termine el comando actual antes de abrir el editor." finish_active_prompt: "Completa el prompt activo antes de abrir el editor." no_input_buffer: "No hay ningún búfer de entrada activo disponible para el editor externo." open_failed: "No se pudo abrir el editor externo: {error}" shell_command_failed: "Falló el comando de shell: {error}" command_failed: "Falló el comando: {error}" queued_next_turn: "En cola para el siguiente turno: {preview}" modal: cancelled_no_input: "🟡 /{command} cancelado (sin entrada)." unrecognized_choice: "🟡 Opción no reconocida '{raw}'. /{command} cancelado." cancelled: "🟡 /{command} cancelado. {unchanged}" re_enable_hint: " Vuelve a activarlo con `approvals.{setting}: true` en config.yaml." persist_opt_out_failed: "⚠️ No se pudo guardar la exclusión — {once_verb} una vez." persist_failed_proceeding: "⚠️ No se pudo guardar la exclusión — continuando una vez." choice_prompt: "Opción [1/2/3]: " destructive_title: "⚠️ /{command} — destruye el estado de la conversación" approve_once: "Aprobar una vez" approve_once_detail: "continuar solo esta vez" always_approve: "Aprobar siempre" always_approve_detail: "continuar y silenciar este aviso permanentemente" cancel: "Cancelar" cancel_detail: "mantener la conversación actual" conversation_unchanged: "Conversación sin cambios." destructive_always_msg: "🔒 En adelante, /clear, /new, /reset y /undo se ejecutarán sin confirmación." bell_input_needed: "se necesita entrada" bell_turn_complete: "turno completado" palette: category_skill: "Skill" secret: bell_sudo: "contraseña de sudo" sudo_timeout: "⏱ Tiempo agotado — continuando sin sudo" sudo_received: "✓ Contraseña recibida (guardada para la sesión)" sudo_skipped: "⏭ Omitido" bell_unlock: "desbloquear {name}" stays_locked: "⏭ {name} sigue bloqueado" unlocking_for_session: "✓ Desbloqueando {name} para esta sesión" bell_save_login: "guardar inicio de sesión para {site}" login_not_saved: "⏭ No se guardará el inicio de sesión para {site}" login_saved: "✓ Inicio de sesión para {site} guardado en tu bóveda" bell_verification_code: "código de verificación para {site}" code_not_entered: "⏭ No se ingresó ningún código para {site}" code_entered: "✓ Código ingresado en {site}" display: ui_redrawn: "✓ Interfaz redibujada" status_bar_visible: "Barra de estado visible" status_bar_hidden: "Barra de estado oculta" exit: unknown_argument: "✗ Argumento desconocido: {argument}. Usa /exit --delete para eliminar también el historial de la sesión." goal: barrier_lifted: "▶ Barrera del objetivo levantada — reanudando." paused_interrupted: "⏸ Objetivo en pausa — el turno fue interrumpido. Usa /goal resume para continuar o /goal clear para detenerlo." loop: wakeup_firing: "↻ Disparando el despertar #{tick} de /loop…" paused_interrupted: "⏸ Bucle en pausa — el turno de despertar fue interrumpido. Usa /loop resume para continuar o /loop stop para finalizarlo." remaining: "↻ Bucle: {label}." plugins: none_installed: "No hay plugins de usuario instalados." install_hint: "Instala uno: hermes plugins install owner/repo" drop_dir_hint: "O coloca un directorio de plugin en {path}" bundled_available: "({count} plugins integrados disponibles — ver: hermes plugins list)" user_plugins_header: "Plugins de usuario ({count}):" count_noun_tools: "herramientas" count_noun_hooks: "hooks" count_noun_commands: "comandos" bundled_more: "(+{count} integrados — ver: hermes plugins list)" enable_disable_hint: "Activar/desactivar: hermes plugins enable/disable " system_error: "Error del sistema de plugins: {error}" queue: usage: "Uso: /queue | /queue list | /queue edit N | /queue rm N | /queue move DESDE HASTA | /queue clear" queued: "En cola: {preview}" queued_next_turn: "En cola para el siguiente turno: {preview}" empty: "La cola está vacía." pending_header: "Cola ({count} pendientes):" cleared_one: "Se eliminó {count} prompt en cola." cleared_other: "Se eliminaron {count} prompts en cola." removed: "Se eliminó el elemento {index} de la cola: {preview}" item_not_found: "No se encontró el elemento {index} de la cola. Tamaño actual: {size}" usage_edit: "Uso: /queue edit " updated: "Se actualizó el elemento {index} de la cola: {preview}" usage_move: "Uso: /queue move " move_out_of_range: "Movimiento fuera de rango en la cola. Tamaño actual: {size}" moved: "Elemento {source} de la cola movido a {destination}." usage_add: "Uso: /queue add " reload: env_reloaded: "Se recargó .env ({count} variable(s) actualizada(s))" steer: usage: "Uso: /steer " failed: "Falló la redirección: {error}" queued: "⏩ Redirección en cola — llegará después de la siguiente llamada a herramienta: {preview}" rejected_empty: "Redirección rechazada (contenido vacío)." no_agent_queued: "Sin agente en ejecución; en cola como siguiente turno: {preview}" title: session_id: "ID de sesión: {session_id}" current: "Título: {title}" pending: "Título (pendiente): {title}" none_set_usage: "No hay título definido. Uso: /title " usage: "Uso: /title " empty_after_cleanup: "El título quedó vacío tras la limpieza. Usa caracteres imprimibles." set: "Título de sesión establecido: {title}" already_in_use: "El título '{title}' ya lo usa la sesión {session_id}" queued: "Título de sesión en cola: {title} (se guardará con el primer mensaje)" undo: invalid_count: "(._.) Cantidad no válida {value} — usa /undo o /undo N." removes_last_exchange: "Esto elimina del historial el último intercambio usuario/asistente." removes_last_turns: "Esto elimina del historial los últimos {count} turnos del usuario." resume: tool_calls_one: "[{count} llamada a herramienta: {names}]" tool_calls_other: "[{count} llamadas a herramientas: {names}]" event_model_changed: "modelo cambiado" event_delegation_completed: "delegación en segundo plano completada" event_process_finished: "proceso en segundo plano finalizado" event_resumed_interrupted: "turno interrumpido reanudado" session_id_hint: "Usa un ID de sesión de una ejecución anterior de la CLI (hermes sessions list)." session_not_found: "Sesión no encontrada: {session_id}" compressed_into: "La sesión {session_id} se comprimió en {descendant}; reanudando la descendiente con tu transcripción." cannot_resume: "No se puede reanudar la sesión: {error}" cannot_resume_prefix: "No se puede reanudar la sesión:" resumed_session: "↻ Sesión reanudada" counts_one: "({count} mensaje del usuario, {total} mensajes en total)" counts_other: "({count} mensajes del usuario, {total} mensajes en total)" session_no_messages: "Se encontró la sesión {session_id}, pero no tiene mensajes. Empezando de cero." title_applied: "Título de sesión aplicado: {title}" title_apply_failed: "No se pudo aplicar el título pendiente: {error}" label_you: "● Tú:" label_assistant: "◆ {agent_name}:" earlier_messages: "... {count} mensajes anteriores ..." panel_title: "Conversación anterior" startup: cooldown_cause_rate_limit: "tras una respuesta de límite de tasa o de cuota" cooldown_cause_token_refresh: "tras un fallo al renovar el token" cooldown_cause_http: "tras una respuesta HTTP {code}" cooldown_cause_failed_request: "tras una solicitud fallida" credential_cooling_down: "La credencial de {provider} está en enfriamiento {cause}; volverá a la rotación en unos {minutes} min." sign_in_lost: "inicio de sesión perdido" sign_in_was_lost: "Se perdió el inicio de sesión de {provider} ({reason}); ejecuta `hermes auth add {provider}` para iniciar sesión de nuevo." provider_resolution_failed: "Falló la resolución del proveedor." no_api_key_for_provider: "⚠️ No se encontró una clave de API para el proveedor '{provider}'." no_provider_configured: "⚠️ No hay ningún proveedor de inferencia configurado." run_model_or_setup: "Ejecuta 'hermes model' para elegir un proveedor o 'hermes setup' para la configuración inicial." empty_base_url: "⚠️ El resolutor de proveedores devolvió una URL base vacía. Revisa la configuración del proveedor o ejecuta: hermes setup" switching_to_fallback: "⚠️ {reason} — cambiando al proveedor de respaldo: {provider} / {model}" first_run_no_provider: "☤ Aún no hay ningún proveedor de inferencia configurado — vamos a solucionarlo." first_run_pick_provider: "Elegirás un proveedor (Nous Portal OAuth es el más rápido; no necesita clave de API) y un modelo." first_run_prompt: "¿Configurar un proveedor ahora? [Y/n]:" first_run_skipped: "Omitido. Ejecuta 'hermes model' o 'hermes setup' cuando quieras." first_run_cancelled: "Configuración cancelada. Ejecuta 'hermes model' cuando quieras." provider_setup_failed: "⚠️ Falló la configuración del proveedor: {error}" run_model_to_retry: "Ejecuta 'hermes model' para intentarlo de nuevo." provider_configured: "✓ Proveedor configurado — ya puedes chatear." provider_setup_incomplete: "La configuración del proveedor no se completó. Ejecuta 'hermes model' para reintentar." tirith_unavailable: "⚠ El escáner de seguridad tirith está activado pero no disponible — el análisis de comandos usará solo coincidencia de patrones" unknown_toolsets: "Aviso: conjuntos de herramientas desconocidos: {names}" stdin_unusable: "\nError: stdin no se puede usar ({error}).\nEsto puede ocurrir con ciertas instalaciones de Python (p. ej., cPython gestionado por uv en macOS)\ndonde kqueue no puede registrar el fd 0.\nPrueba a reinstalar Python con pyenv o Homebrew y luego vuelve a ejecutar: hermes setup" warning: "Advertencia: {warning}" chat: initializing_agent: "Inicializando el agente..." context_refs: "[@ contexto: {count} ref(s), {tokens} tokens]" context_injection_refused: "Inyección de contexto rechazada." skipped_unreadable_images: "⚠ se omitieron {count} ruta(s) de imagen ilegibles" attaching_images_natively: "📎 adjuntando {count} imagen(es) de forma nativa (el modelo admite visión): {names}" new_message_interrupting: "⚡ Nuevo mensaje detectado, interrumpiendo..." unknown_error: "Error desconocido" continuous_voice_stopped: "El modo de voz continuo se detuvo por un error." interrupted_marker: "── [Interrumpido — procesando el nuevo mensaje] ──" iteration_budget_reached: "⚠ Se alcanzó el límite de iteraciones ({used}/{max}) — la respuesta puede estar incompleta" sending_after_interrupt_multi: "⚡ Enviando {count} mensajes tras la interrupción: '{preview}'" sending_after_interrupt: "⚡ Enviando tras la interrupción: '{preview}'" delivering_leftover_steer: "⏩ Entregando el /steer pendiente como siguiente turno: '{preview}'" reasoning_label: "Razonamiento" reasoning_more_lines: "... ({count} líneas más — /reasoning full para verlas)" billing_cta_nous: "Ejecuta [bold]/topup[/] para añadir créditos o [bold]/subscription[/] para cambiar de plan." billing_cta_provider: "Añade créditos con {provider}" your_provider: "tu proveedor" billing_cta_switch: "O cambia de proveedor con [bold]/model --provider [/]." out_of_credits_title: "⚡ Sin créditos" session: fresh_start: "✨ (◕‿◕)✨ ¡Empezamos de cero! Pantalla limpia y conversación reiniciada." model_reset_default: "(modelo restablecido al predeterminado: {model})" title_rejected: "Título rechazado: {error}" title_empty_untitled: "El título quedó vacío tras limpiarlo — la sesión empezó sin título." title_error_untitled: "{error} — la sesión empezó sin título." cwd_gone: "⚠ El directorio de trabajo de la sesión ya no existe: {recorded} — permaneciendo en {current}" cwd_restored: "↻ Directorio de trabajo: {path}" cwd_enter_failed: "⚠ No se pudo entrar al directorio de trabajo de la sesión {path}: {error}" yolo_restored: "⚡ Modo YOLO restaurado desde la sesión — todos los comandos se aprueban automáticamente. /yolo para desactivarlo." invalid_checkpoint: "Número de punto de control no válido. Usa 1-{count}." status_tools_deferred: "herramientas diferidas" status_tools_count: "{count} herramientas" status_toolsets: "conjuntos de herramientas: {toolsets}" status_provider: "proveedor: {provider}" status_auth: "autenticación: {source}" reasoning_display_suffix: " (visualización: {state})" yolo_bypass_suffix: " (omisión YOLO activa)" ctx_left_prefix: "{percent}% libre · " ctx_tokens_used: "{left}{used} / {max} tokens usados" status_title: "Estado de Hermes CLI" label_reasoning: "Razonamiento" label_approvals: "Aprobaciones" label_context: "Contexto" recent_intro: "(._.) Aún no hay mensajes en este chat — estas son sesiones recientes que puedes reanudar:" recent_header: "Sesiones recientes:" column_title: "Título" column_preview: "Vista previa" column_last_active: "Última actividad" column_id: "ID" resume_usage: "Usa /resume , /resume o /resume para continuar." resume_example: "Ejemplo: /resume 2" history_empty: "(._.) Aún no hay historial de conversación." history_tools_header: "[Herramientas]" history_tools_hidden_one: "({count} mensaje de herramienta oculto)" history_tools_hidden_other: "({count} mensajes de herramienta ocultos)" history_title: "(^_^) Historial de la conversación" history_you_header: "[Tú #{index}]" history_assistant_header: "[{agent_name} #{index}]" history_no_text: "(sin respuesta de texto)" history_tool_calls_one: "(solicitó {count} llamada a herramienta)" history_tool_calls_other: "(solicitó {count} llamadas a herramientas)" new_session_titled: "(^_^)v Nueva sesión iniciada: {title}" new_session: "(^_^)v ¡Nueva sesión iniciada!" resume_index_out_of_range: "El índice de reanudación {index} está fuera de rango." resume_no_args_hint: "Usa /resume sin argumentos para ver las sesiones disponibles." save_nothing: "(;_;) No hay conversación que guardar." save_dir_failed: "(x_x) No se pudo crear el directorio de guardado {path}: {error}" format_markdown: "Markdown" save_ok: "(^_^)v Conversación guardada en: {path} ({label})" save_resume_hint: "Reanuda la sesión activa con: hermes --resume {session_id}" save_failed: "(x_x) No se pudo guardar: {error}" retry_no_messages: "(._.) No hay mensajes que reintentar." retry_no_user_message: "(._.) No hay mensaje de usuario que reintentar." retry_unsafe: "(._.) No se puede reintentar ese mensaje de forma segura: {error}" retry_rewind_failed: "(x_x) Falló el retroceso para reintentar; el historial no cambió: {error}" retrying: "(^_^)b Reintentando: \"{preview}\"" undo_no_messages: "(._.) No hay mensajes que deshacer." undo_no_user_message: "(._.) No hay mensaje de usuario que deshacer." undo_failed: "(x_x) Falló al deshacer; el historial no cambió: {error}" undo_ok_one: "(^_^)b Se deshizo {count} turno ({messages} mensaje(s)). Copia de seguridad en: \"{backup}\"" undo_ok_other: "(^_^)b Se deshicieron {count} turnos ({messages} mensaje(s)). Copia de seguridad en: \"{backup}\"" undo_remaining: "Quedan {count} mensaje(s) en el historial." yolo_state_locked_on: "bloqueado ACTIVADO" yolo_locked: "⚡ YOLO está {state} para este proceso (se inició con --yolo / HERMES_YOLO_MODE). /yolo no puede desactivarlo — reinicia sin la bandera para volver a activar las aprobaciones." yolo_off: "⚠ Modo YOLO {state} — los comandos peligrosos requerirán aprobación." yolo_on: "⚡ Modo YOLO {state} — todos los comandos se aprueban automáticamente. Úsalo con precaución." compress_too_short: "(._.) No hay suficiente conversación para comprimir (se necesitan al menos {min} mensajes)." compress_no_agent: "(._.) No hay un agente activo -- envía un mensaje primero." compress_busy: "Comprimiendo el contexto..." compress_summarizing: "🗜️ Resumiendo hasta aquí: {count} mensajes, conservando los últimos {keep_last} intercambio(s) literalmente..." compress_focus: "🗜️ Comprimiendo {count} mensajes, enfoque: \"{focus}\"..." compress_plain: "🗜️ Comprimiendo {count} mensajes..." compress_failed: "❌ Falló la compresión: {error}" persist_prompt_summary: "{icon} {label}: {detail} → {outcome}" goodbye: "¡Hasta luego! ☤" exit_resume_hint: "Reanuda esta sesión con:" exit_label_session: "Sesión: {session_id}" exit_label_title: "Título: {title}" exit_label_duration: "Duración: {duration}" exit_label_messages: "Mensajes: {count} ({user} de usuario, {tool_calls} llamadas a herramientas)" status_bar: vim_insert: "INSERTAR" vim_replace: "REEMPLAZAR" vim_normal: "NORMAL" battery_none: "no se detectó batería en este equipo" battery_none_nothing_shown: "no se detectó batería, así que aquí no se mostrará nada" battery_currently: " — actualmente {reading}" battery_state: "Indicador de batería {state}{detail}" battery_usage: "Uso: /battery [on|off|status]" battery_on: "Indicador de batería activado{detail}" battery_off: "Indicador de batería desactivado" latency_label: "{value}s" velocity_label: "{value} t/s" voice_rec: "● REC" voice_rec_stop_hint: "● REC {shortcut} para detener" voice_stt: "◉ STT" voice_transcribing: "◉ Transcribiendo..." voice_tts_on: " | TTS activado" voice_continuous: " | Continuo" voice_mode_hint: "🎤 Modo de voz{tts}{cont} — {shortcut} para grabar" goal_turns: "⊙ objetivo {used}/{max}" goal: "⊙ objetivo" ctx_pinned: " fijado" ctx_unknown: "ctx --" yolo_badge: "⚠ YOLO" stash_header_one: "📌 Guardados ({count} elemento)" stash_header_other: "📌 Guardados ({count} elementos)" stash_footer: "↑↓ Enter=restaurar D=eliminar Esc" stash_footer_compact: "↑↓ ⏎ D Esc" stream: busy_skills_search: "Buscando skills..." busy_skills_browse: "Cargando skills..." busy_skills_inspect: "Inspeccionando la skill..." busy_skills_install: "Instalando la skill..." busy_skills: "Procesando el comando de skills..." busy_browser: "Configurando el navegador..." busy_reload_mcp: "Recargando los servidores MCP..." busy_reload_skills: "Recargando las skills..." processing_command: "Procesando el comando..." thinking_label: "[pensando]" thinking_more_lines: "... ({count} líneas más)" preview_more_lines_one: "... (+{count} línea más)" preview_more_lines_other: "... (+{count} líneas más)" vision_analyzing: "👁️ analizando {name} ({size_kb}KB)..." vision_analyzed: "✓ imagen analizada" vision_failed: "⚠ falló el análisis de visión — se incluye la ruta para reintentar" vision_error: "⚠ error en el análisis de visión — se incluye la ruta para reintentar" tool_preparing: "{emoji} preparando {what}…" reference_noun: "referencia" reference_header_indexed: "Referencia {index}/{count} — {label}" reference_header: "Referencia — {label}" aggregating_detail: "◆ agregando ({detail})" aggregating: "◆ agregando" background_running_one: "↩ Tarea en segundo plano en ejecución — continuaré cuando termine. Puedes seguir chateando." background_running_other: "↩ {count} tareas en segundo plano en ejecución — continuaré cuando terminen. Puedes seguir chateando." terminal: recovered_mouse_modes: "Se recuperaron los modos de entrada del terminal tras una fuga de reportes del mouse. Si se repite, ejecuta /new o reinicia esta pestaña." recovered_cooked_mode: "Se recuperó el terminal tras una desviación del modo cooked (la entrada debería responder con normalidad otra vez)." image_badge_count: "[📎 {count} imágenes adjuntas]" image_badge_numbered: "[📎 Imagen #{index}]" commands: shared: more_suffix: " (+{count} más)" set_saved: "✓ {label} establecido en '{value}' (guardado en la configuración)" set_session_only: "✓ {label} establecido en '{value}' (solo esta sesión)" scope_saved: "(guardado en la configuración)" scope_save_failed: "(solo esta sesión; error al guardar config)" scope_session: "(esta sesión — usa --global para que persista)" unknown_argument: "(._.) Argumento desconocido: {arg}" usage: "Uso: {usage}" needs_active_session: "{command} necesita una sesión de chat activa para ejecutarse." unavailable_no_session: "{label} no disponible (no hay sesión activa)." state_on: "ON" state_off: "OFF" error: "Error: {error}" agent_busy: "El agente está ocupado. Espera a que termine el turno actual y vuelve a intentar {command}." no_active_agent_session: "No hay ninguna sesión de agente activa." could_not_generate_diff: "No se pudo generar el diff" busy: short_queue: "pone en cola para el siguiente turno" short_steer: "redirige la ejecución actual (tras la siguiente llamada a herramienta)" short_interrupt: "redirige la ejecución actual de inmediato" long_queue: "Enter pondrá en cola tu mensaje mientras Hermes esté ocupado." long_steer: "Enter redirigirá tu mensaje hacia la ejecución actual (tras la siguiente llamada a herramienta)." long_interrupt: "Enter redirigirá la ejecución actual mientras Hermes esté ocupado; /stop sigue cancelándola." usage: "Uso: /busy [queue|steer|interrupt|status]" status: "Modo de entrada al estar ocupado: {mode}" enter_while_busy: "Enter mientras está ocupado: {behavior}" label: "Modo de entrada al estar ocupado" reasoning: headline_on: "ON" headline_off: "OFF" headline_full: "COMPLETO" headline_clamped: "RECORTADO a 10 líneas" note_show: "El pensamiento del modelo se mostrará durante y después de cada respuesta." note_full: "El recuadro de resumen tras la respuesta mostrará el pensamiento completo." display_on: "activado ✓" display_off: "desactivado" full_state_full: "completo" full_state_clamped: "recortado a 10 líneas" effort_line: "Esfuerzo de razonamiento: {level}" display_line: "Visualización del razonamiento: {display} ({full})" usage: "Uso: /reasoning [--global]" display_saved: "✓ Visualización del razonamiento: {headline} (guardado)" display_off_note: "Nota: la visualización del razonamiento está OFF — ejecuta /reasoning show para verlo." valid_levels: "Niveles válidos: none, minimal, low, medium, high, xhigh, max, ultra" valid_display: "Visualización: show, hide" valid_scope: "Alcance: solo esta sesión por defecto, --global para que persista" effort_set: "✓ Esfuerzo de razonamiento establecido en '{effort}' {scope}" indicator: usage: "Uso: /indicator [{styles}]" status: "Estilo del indicador de ocupado: {style}" unknown_style: "(._.) Estilo de indicador desconocido: {arg}" label: "Estilo del indicador de ocupado" note: "La TUI aplicará el nuevo estilo en su próximo renderizado." fast: not_supported: "(._.) /fast solo está disponible para modelos que admiten el modo rápido (OpenAI Priority Processing o Anthropic Fast Mode)." feature_generic: "Modo rápido" feature_anthropic: "Anthropic Fast Mode" feature_openai: "Priority Processing" feature_ultrafast: "OpenAI Ultrafast" ultrafast_not_supported: "(._.) Ultrafast solo está disponible para GPT-6 Astra (modelo actual: {model})." usage: "Uso: /fast [normal|fast|auto|cold|ultrafast|status] [--global]" status: "{feature}: {status}" set_to: "✓ {feature} establecido en {value} {scope}" hatch: progress_compose: "┊ componiendo la hoja de sprites…" progress_save: "┊ guardando…" progress_drawing: "┊ dibujando {state}…" describe_prompt: "(o_o) Describe tu mascota: " usage: "(o_o) Uso: /hatch (p. ej. /hatch un pequeño zorro cibernético)" default_name: "Mascota" designing: "(o_o) Diseñando '{concept}'… (un minuto de llamadas al modelo de imágenes)" base_failed: "(x_x) No se pudo generar un aspecto base: {error}" no_base_draft: "(x_x) No llegó ningún borrador base — inténtalo de nuevo." failed: "(x_x) La incubación falló: {error}" hatched: "(^_^)b ¡{name} nació y fue adoptado — aparecerá en un momento!" pet: is_out: "(^_^)b {name} está fuera — aparecerá en un momento." put_away_named: "(-_-)zzZ {name} guardado." put_away: "(-_-)zzZ Mascota guardada." usage_scale: "(o_o) Uso: /pet scale (p. ej. /pet scale 0.5)" scale_set: "(^_^) Escala de la mascota → {scale}." fetching: "(o_o) Obteniendo '{name}' del petdex…" adopt_failed: "(x_x) No se pudo adoptar '{name}': {error}" error: "(x_x) {error}" diff: label_working: "Sin preparar" label_staged: "Preparados" label_all: "Todo (vs HEAD)" untracked: "Sin seguimiento:" and_more: "... y {count} más" more_lines: "... ({count} líneas más — {hint})" stat_hint: "ejecuta /diff --stat para ver un resumen" stat_hint_session: "ejecuta /diff session --stat para ver un resumen" not_enabled: "Los puntos de control no están activados, así que no hay una línea base de sesión.\nActívalos con: hermes --checkpoints\nO en config.yaml: checkpoints: { enabled: true }\n(El /diff normal sigue funcionando — usa git directamente.)" no_session_changes: "Sin cambios — Hermes aún no ha editado ningún archivo aquí." rollback: not_enabled: "Los puntos de control no están activados.\nActívalos con: hermes --checkpoints\nO en config.yaml: checkpoints: { enabled: true }" none_here_showing_all: "No hay puntos de control para {cwd} — mostrando todos los directorios." all_directories: "todos los directorios" usage_diff: "Uso: /rollback diff " no_changes_since: "Sin cambios desde este punto de control." more_lines: "... ({count} líneas más, mostrando las primeras 80)" restored_all: "✅ Restaurado al punto de control {hash}: {reason}" restored_file: "✅ {file} restaurado desde el punto de control {hash}: {reason}" snapshot_saved: "Se guardó automáticamente una instantánea previa a la reversión." chat_turn_undone: "Turno del chat deshecho según los archivos restaurados." snapshot: unknown_subcommand: "Subcomando desconocido: {subcommand}" usage: "Uso: /snapshot [list|create [label]|restore |prune [N]]" none_yet: "Aún no hay instantáneas de estado." create_hint: "Crea una: /snapshot create [label]" list_header: "Instantáneas de estado ({dir}/state-snapshots/):" col_num: "#" col_id: "ID" col_files: "Archivos" col_size: "Tamaño" col_label: "Etiqueta" created: "Instantánea creada: {snapshot_id}" nothing_to_snapshot: "No hay archivos de estado que capturar." usage_restore: "Uso: /snapshot restore " most_recent: "Más reciente: {snapshot_id}" invalid_number: "Número de instantánea no válido. Usa 1-{max}." restored: "Estado restaurado desde: {snapshot_id}" restart_recommended: "Se recomienda reiniciar los procesos del gateway/dashboard para que apliquen los cambios de state.db." not_found: "Instantánea no encontrada: {snapshot_id}" usage_prune: "Uso: /snapshot prune [keep-count]" pruned: "Se eliminaron {deleted} instantánea(s) antigua(s) (conservando {keep})." export: usage: "Uso: /export [perfil] [-o salida.tar.gz]" exported: "✓ '{name}' exportado a {path}" share_hint: "Compártelo: la otra persona ejecuta /import o `hermes profile import `." import: usage: "Uso: /import [--name ]" imported: "✓ Perfil '{name}' importado en {path}" wrapper_created: "Wrapper creado: {path}" use_it: "Úsalo con: hermes -p {name}" stop: none_running: "No hay procesos en segundo plano en ejecución." stopping: "Deteniendo {count} proceso(s) en segundo plano..." stopped: "✅ Se detuvieron {count} proceso(s)." interrupted_delegations: "✅ Se interrumpieron {count} delegación(es) en segundo plano." agents: running_processes: "Procesos en ejecución: {count}" recently_finished: "Terminados recientemente: {count}" background_delegations: "Delegaciones en segundo plano: {count} en ejecución" no_progress: " · sin progreso {seconds}s — interrumpiendo" quiet: " · en silencio {seconds}s" in_tool: "en {tool}" between_turns: "entre turnos" child_line: "└ hijo {index}: {api_calls} llamadas a la API · {doing}" last_activity: " · última actividad hace {seconds}s" agent_running: "Agente: en ejecución" agent_idle: "Agente: inactivo" journey: failed: "/journey falló: {error}" paste: no_image: "(._.) No hay imagen en el portapapeles" attached: "📎 Imagen #{index} adjuntada desde el portapapeles" extract_failed: "(>_<) El portapapeles tiene una imagen, pero no se pudo extraer" copy: nothing_yet: "Aún no hay nada que copiar." usage: "Uso: /copy [número]" invalid_number: "Número de respuesta no válido. Usa 1-{max}." nothing_in_responses: "Aún no hay nada que copiar en las respuestas del asistente." nothing_in_response: "No hay nada que copiar en esa respuesta del asistente." copied_osc52: "Respuesta del asistente #{index} copiada mediante OSC 52 (requiere compatibilidad de la terminal)" copied: "Respuesta del asistente #{index} copiada al portapapeles" failed: "Error al copiar al portapapeles: {error}" image: usage: "Uso: /image p. ej. /image {example}" not_found: "(>_<) Archivo no encontrado: {path}" unsupported: "(._.) No es un archivo de imagen compatible: {name}" attached: "📎 Imagen adjuntada: {name}" now_type_prompt: "Ahora escribe tu prompt (o usa --image en el modo de consulta única): {text}" tools: usage: "(._.) Uso: /tools {subcommand} [nombre ...]" example_toolset: "Conjunto integrado: /tools {subcommand} web" example_mcp: "Herramienta MCP: /tools {subcommand} github:create_issue" disabling: "Desactivando {names}..." enabling: "Activando {names}..." session_reset: "Sesión reiniciada. La nueva configuración de herramientas está activa." profile: profile: "Perfil: {profile}" home: "Home: {home}" handoff: usage: "Uso: /handoff " usage_detail_1: "Transfiere la sesión actual al canal principal de esa plataforma." usage_detail_2: "La sesión de la CLI termina aquí; reanúdala más tarde con /resume." already_in_flight: "La sesión ya está en proceso de transferencia. Espera a que se estabilice y vuelve a intentarlo." queued: "Transferencia de '{title}' → {platform} en cola (canal principal: {home})." waiting: "Esperando a que el gateway la recoja..." config_load_failed: "No se pudo cargar la configuración del gateway: {error}" unknown_platform: "Plataforma desconocida: '{platform}'." platform_not_enabled: "La plataforma '{platform}' no está configurada/activada en el gateway." no_home_channel: "No hay un canal principal configurado para {platform}." set_home_hint: "Primero configura uno con /sethome en el chat de destino." session_row_failed: "No se pudo asegurar la fila de la sesión en state.db: {error}" picked_up: "El gateway la recogió; transfiriendo..." complete: "↻ Transferencia completada. La sesión ahora está activa en {platform}." resume_hint: "Reanúdala más tarde en esta CLI con: /resume {title}" unknown_error: "error desconocido" failed: "La transferencia falló: {error}" session_intact_retry: "Tu sesión de la CLI está intacta. Prueba /handoff de nuevo, o usa /resume manualmente en la plataforma." still_transferring: "Aún transfiriendo (el agente está reproduciendo tu sesión en el destino)..." taking_long: "El gateway está tardando más de lo habitual en completar la transferencia." check_platform: "Revisa {platform} — es posible que la sesión aún llegue allí." no_longer_waiting: "Esta CLI ya no está esperando. Evita continuar esta sesión aquí;" retry_when_settled: "si no llega nada, vuelve a intentar /handoff cuando el estado se estabilice." timed_out: "Se agotó el tiempo de espera del gateway. ¿Está `hermes gateway` en ejecución?" session_intact: "Tu sesión de la CLI está intacta." resume: usage: "Uso: /resume " tip_find_sessions: "Consejo: usa /history o `hermes sessions list` para encontrar sesiones." already_on: "Ya estás en esa sesión." resumed_one: "↻ Sesión {session_id}{title} reanudada ({count} mensaje de usuario, {total} en total)" resumed_other: "↻ Sesión {session_id}{title} reanudada ({count} mensajes de usuario, {total} en total)" resumed_empty: "↻ Sesión {session_id}{title} reanudada — sin mensajes, empezando de cero." not_found: "Sesión no encontrada: {target}" not_found_hint: "Usa /sessions o `hermes sessions list` para ver las sesiones disponibles." compressed_redirect: "La sesión {session_id} se comprimió en {resolved_id}; reanudando la sesión descendiente con tu transcripción." sessions: none_yet: "(._.) Aún no hay sesiones anteriores." branch: branched_one: "⑂ Sesión \"{title}\" ramificada ({count} mensaje de usuario)" branched_other: "⑂ Sesión \"{title}\" ramificada ({count} mensajes de usuario)" original_session: "Sesión original: {session_id}" branch_session: "Sesión rama: {session_id}" worktree: active: "Worktree activo: {path}" branch: "Rama: {branch}" none_active: "No hay un worktree activo para esta sesión." hint_new: "/worktree new [name] — crea uno y mueve esta sesión a él" hint_prune: "/worktree prune — recupera árboles obsoletos y ramas ya fusionadas" not_in_repo_note: "(no estás dentro de un repositorio git)" unknown_subcommand: "Subcomando de /worktree desconocido: {subcommand}" usage: "Uso: /worktree [new [name] | list]" new_requires_repo: "❌ /worktree new requiere estar dentro de un repositorio git." not_in_repo: "No estás dentro de un repositorio git." actions_planned: "{count} acción(es) planificada(s)." actions_done: "{count} acción(es) realizada(s)." nothing_to_reclaim: "Nada que recuperar — los árboles/ramas restantes contienen trabajo real." preserved: "Se conservaron {count} árbol(es) con trabajo real:" list_failed: "No se pudieron listar los worktrees." enter_failed: "⚠ Se creó el worktree, pero no se pudo entrar en él: {error}" ready: "✅ Worktree listo: {path}" tools_in_worktree: "Las herramientas de terminal y de archivos ahora operan en el worktree." personality: title: "(^o^)/ Personalidades" none_option: "(sin capa de personalidad)" usage: "Uso: /personality (* = activa)" unknown: "(._.) Personalidad desconocida: {name}" available: "Disponibles: none, {available}" scope_saved: "(guardado en la configuración)" scope_session: "(solo esta sesión)" cleared: "{face} Personalidad eliminada {scope}" cleared_note: "Sin capa de personalidad — se usa el comportamiento base del agente." set_to: "{face} Personalidad establecida en '{name}' {scope}" cron: repeat_must_be_integer: "(._.) --repeat debe ser un número entero" unknown_command: "(._.) Comando de cron desconocido: {subcommand}" available: "Disponibles: list, add, edit, pause, resume, run, remove" overview_title: "(^_^) Tareas programadas" overview_commands: "Comandos:" overview_usage: "/cron list\n/cron add \"every 2h\" \"Revisar el estado del servidor\" [--skill blogwatcher]\n/cron edit --schedule \"every 4h\" --prompt \"Nueva tarea\"\n/cron edit --skill blogwatcher --skill maps\n/cron edit --remove-skill blogwatcher\n/cron edit --clear-skills\n/cron pause \n/cron resume \n/cron run \n/cron remove " current_jobs: "Tareas actuales:" skills: "Skills: {skills}" skills_none: "Skills: ninguna" next_short: "Próxima" no_jobs_hint: "No hay tareas programadas. Usa '/cron add' para crear una." no_jobs: "(._.) No hay tareas programadas." list_header: "Tareas programadas:" id: "ID: {job_id}" name: "Nombre: {name}" state: "Estado: {state}" schedule: "Programación: {schedule}" schedule_repeat: "Programación: {schedule} ({repeat})" next_run: "Próxima ejecución: {value}" next_run_na: "Próxima ejecución: N/D" prompt: "Prompt: {prompt}" status_delivery_failed: "delivery_failed: {error}" status_error: "error: {error}" last_run: "Última ejecución: {when} ({status})" usage_add: "(._.) Uso: /cron add " need_prompt_or_skill: "(._.) Indica un prompt o al menos una skill" create_failed: "(x_x) No se pudo crear la tarea: {error}" created: "(^_^)b Tarea creada: {job_id}" usage_edit: "(._.) Uso: /cron edit [--schedule ...] [--prompt ...] [--skill ...]" job_not_found: "(._.) Tarea no encontrada: {job_id}" update_failed: "(x_x) No se pudo actualizar la tarea: {error}" updated: "(^_^)b Tarea actualizada: {job_id}" usage_action: "(._.) Uso: /cron {subcommand} " pause_failed: "(x_x) No se pudo pausar la tarea: {error}" resume_failed: "(x_x) No se pudo reanudar la tarea: {error}" run_failed: "(x_x) No se pudo ejecutar la tarea: {error}" remove_failed: "(x_x) No se pudo eliminar la tarea: {error}" removed: "(^_^)b Tarea eliminada: {name} ({job_id})" did_not_run: "(x_x) La tarea no se ejecutó: {name} ({job_id})\n {reason}" paused: "(^_^)b Tarea pausada: {name} ({job_id})" resumed: "(^_^)b Tarea reanudada: {name} ({job_id})" triggered: "(^_^)b Tarea lanzada: {name} ({job_id})" suggestions: failed: "El comando de sugerencias falló: {error}" blueprint: failed: "El comando de plantillas de cron falló: {error}" curator: failed: "(._.) curator: {error}" kanban: failed: "(._.) error de kanban: {error}" memory: unknown_subcommand: "Subcomando de /memory desconocido. Usa: pending, approve , reject , approval ." learn: from_description: "⚡ Aprendiendo una skill a partir de lo que describiste..." from_conversation: "⚡ Aprendiendo una skill a partir de esta conversación..." plan: planning: "📋 Planificando: {task}" from_conversation: "📋 Planificando a partir del contexto de esta conversación..." init: updating: "⚡ Actualizando AGENTS.md a partir de un análisis del proyecto..." generating: "⚡ Generando AGENTS.md a partir de un análisis del proyecto..." background: usage: "Uso: /bg \nEjemplo: /bg Resume las principales historias de HN de hoy\n(Para una pregunta rápida sobre esta conversación, usa /btw .)\nLa tarea se ejecuta en una sesión separada y los resultados aparecerán aquí cuando termine." no_credentials: "(>_<) No se puede iniciar la tarea en segundo plano: no hay credenciales válidas." started: "🔄 Tarea en segundo plano #{number} iniciada: \"{preview}\"" task_id: "ID de la tarea: {task_id}" keep_chatting: "Puedes seguir chateando — los resultados aparecerán cuando termine." label: "Tarea en segundo plano #{number}" complete: "✅ Tarea en segundo plano #{number} completada" prompt: "Prompt: \"{preview}\"" title_suffix: "(segundo plano #{number})" no_response: "(No se generó ninguna respuesta)" side_result: complete: "{label} completada" failed: "❌ {label} falló: {error}" login: label: "Inicio de sesión" title_suffix: "(inicio de sesión)" no_result: "(Sin resultado)" btw: usage: "Uso: /btw \nEjemplo: /btw ¿en qué archivo estaba ese error?\nResponde una pregunta rápida sobre esta conversación sin interrumpirla.\n(Para una tarea independiente en segundo plano, usa /bg .)" no_credentials: "(>_<) No se puede responder la pregunta rápida: no hay credenciales válidas." header: "💬 /btw: \"{preview}\"" title_suffix: "(btw)" no_answer: "(No se generó respuesta)" bundles: unavailable: "Subsistema de paquetes no disponible: {error}" none_installed: "No hay paquetes de skills instalados." create_hint: "Crea uno con: hermes bundles create --skill --skill " directory: "Directorio: {dir}" title: "Paquetes de skills" installed_count: "({count} instalados):" default_desc: "Cargar {count} skills" skills_count: "({count} skills)" invoke_hint: "Invoca un paquete con /. Gestiónalos con `hermes bundles`." browser: engine_not_in_use: "⚠ browser.engine es 'lightpanda' pero NO está en uso: {reason}" engine_lightpanda: "Motor: Lightpanda — {reason} (sin capturas de pantalla)" binary: "Binario: {path}" binary_not_found: "⚠ No se encontró el binario de lightpanda — {hint}" use_usage: "Uso: /browser use [off]" use_on_hint: "/browser use — cambiar al modo Browser Use (browser_exec vía CLI 3.0)" use_off_hint: "/browser use off — volver a las herramientas de navegador integradas" use_enabled: "🌐 Modo Browser Use activado — browser_exec vía la CLI 3.0 de Browser Use" use_disabled: "🌐 Modo Browser Use desactivado — herramientas de navegador integradas restauradas" session_reset: "Sesión reiniciada. La nueva configuración de herramientas está activa." scheme_missing: "(falta)" unsupported_scheme: "⚠ Esquema de URL del navegador no compatible: {scheme} (se esperaba uno de: http, https, ws, wss)" invalid_port: "⚠ Puerto no válido en la URL del navegador: {url}" missing_host: "⚠ Falta el host en la URL del navegador: {url}" port_occupied: "⚠ El puerto {port} está ocupado por otra aplicación que no es un navegador CDP" port_occupied_detail: "(puede estar usándolo un depurador del IDE o un servidor de desarrollo) — lanzando en el puerto {launch_port} en su lugar..." launching: "No hay ningún navegador basado en Chromium con depuración remota en ejecución — intentando lanzarlo..." launch_failed: "⚠ No se pudo lanzar automáticamente un navegador basado en Chromium" launch_manually: "Lanza manualmente un navegador basado en Chromium:" no_executable: "No se encontró ningún ejecutable de navegador basado en Chromium compatible en este entorno" launched: "✓ Navegador basado en Chromium lanzado y escuchando en el puerto {port}" not_responding: "⚠ El navegador se lanzó, pero el puerto {port} aún no responde" try_again: "Inténtalo de nuevo en unos segundos — la instancia de depuración puede seguir iniciándose" already_listening: "✓ El navegador basado en Chromium ya está escuchando en {url}" port_unreachable: "⚠ No se puede acceder al puerto {port} en {url}" not_connected: "Navegador no conectado — inicia un navegador basado en Chromium con depuración remota y reintenta /browser connect" connected: "🌐 Navegador conectado a un navegador basado en Chromium en vivo vía CDP" endpoint: "Endpoint: {url}" already_default: "El navegador no está conectado a un navegador basado en Chromium en vivo (ya se usa el modo predeterminado)" disconnected: "🌐 Navegador desconectado del navegador basado en Chromium en vivo" reverted: "Herramientas de navegador restauradas al modo predeterminado (headless local o proveedor en la nube)" status_lightpanda: "🌐 Navegador: Lightpanda local (agent-browser --engine lightpanda)" status_lightpanda_note: "⚡ Lightpanda: navegación más rápida, sin soporte de capturas de pantalla" status_lightpanda_fallback: "Respaldo automático con Chromium para capturas de pantalla y comandos fallidos" status_chrome: "🌐 Navegador: Chromium headless local (agent-browser --engine chrome)" status_auto: "🌐 Navegador: Chromium headless local (agent-browser)" status_browser_use: "🌐 Navegador: modo Browser Use (browser_exec vía la CLI 3.0 de Browser Use)" status_browser_use_note: "Chrome local vía CDP, o navegadores en la nube de Browser Use" status_use_off_hint: "/browser use off — volver a las herramientas de navegador integradas" status_connected: "🌐 Navegador: conectado a un navegador basado en Chromium en vivo vía CDP" status_reachable: "Estado: ✓ accesible" status_unreachable: "Estado: ⚠ no accesible (puede que el navegador no esté en ejecución)" status_cloud: "🌐 Navegador: {provider} (nube)" status_connect_hint: "/browser connect — conectar con tu navegador basado en Chromium en vivo" status_disconnect_hint: "/browser disconnect — volver al modo predeterminado" usage: "Uso: /browser connect|disconnect|status|use" usage_connect: "connect Conectar las herramientas de navegador a tu sesión de navegador basado en Chromium en vivo" usage_disconnect: "disconnect Volver al backend de navegador predeterminado" usage_status: "status Mostrar el modo de navegador actual" usage_use: "use [off] Cambiar al modo Browser Use (CLI 3.0) / volver a las herramientas integradas" heartbeat: label: "Heartbeats" paused: "⏸ Heartbeat pausado: {prompt}" none_set: "No hay ningún heartbeat configurado." none_to_resume: "No hay ningún heartbeat que reanudar." resumed: "▶ Heartbeat reanudado (cada {interval}): {prompt}" cleared: "✓ Heartbeat eliminado." usage: "Uso: /heartbeat every (p. ej. /heartbeat every 10m Revisa el CI)" usage_also: "También: /heartbeat status | pause | resume | clear" interval_too_small: "Intervalo demasiado corto — el mínimo es {min_seconds}s." prompt_required: "Uso: /heartbeat every — el prompt es obligatorio." invalid_label: "Heartbeat no válido" set: "♥ Heartbeat configurado (cada {interval}): {prompt}" set_note: "Se ejecuta como un turno normal cuando la sesión está inactiva y ha pasado el intervalo. Gestiónalo con /heartbeat pause | resume | clear; solo existe mientras corre este proceso de Hermes — usa `hermes cron` para programaciones persistentes." refine: nothing_yet: "Aún no hay nada que refinar — envía primero un mensaje." empty: "Aún no hay nada que refinar — la conversación está vacía." failed: "/refine no pudo iniciarse: {error}" focus_suffix: " (enfoque: {focus})" started: "⚗ Revisando esta conversación en segundo plano{focus} — cualquier actualización de memoria o skills se informará al terminar." review: nothing_yet: "Aún no hay nada que revisar — envía primero un mensaje." failed: "/review no pudo iniciarse: {error}" goal: label: "Objetivos" continuing: "Continuando ahora — dando el siguiente paso." send_to_kick: "Envía cualquier mensaje para iniciar el siguiente paso." loop: label: "Bucles" goal_defers_note: "Nota: un /goal activo dirige esta sesión — las activaciones del bucle se posponen hasta que el objetivo termine, se pause o se aparque." subgoal: no_goal: "No hay ningún objetivo activo. Define uno con /goal ." usage_remove: "Uso: /subgoal remove " remove_needs_int: "/subgoal remove: debe ser un entero (índice a partir de 1)." removed: "✓ Subobjetivo {index} eliminado: {text}" cleared_one: "✓ Se eliminó {count} subobjetivo." cleared_other: "✓ Se eliminaron {count} subobjetivos." none_to_clear: "No hay subobjetivos que eliminar." added: "✓ Subobjetivo {index} añadido: {text}" skin: unavailable: "Motor de skins no disponible." current: "Skin actual: {name}" available_header: "Skins disponibles:" usage: "Uso: /skin " custom_hint: "Skins personalizadas: coloca un archivo YAML en {dir}/skins/" unknown: "Skin desconocida: {name}" available: "Disponibles: {names}" saved_suffix: " (guardada)" set_to: "Skin establecida: {name}{saved}" banner_note: "Nota: los colores del banner se actualizarán al iniciar la próxima sesión." colors_updated: "Colores del prompt y de la TUI actualizados." prompt_compose: editor_header: "#! Redacta tu prompt abajo. Las líneas que empiezan con '#!' se ignoran.\n#! Guarda y cierra para enviar; déjalo vacío para cancelar." editor_failed: "(>_<) No se pudo abrir el editor: {error}" empty: "(._.) Prompt vacío — no se envió nada." focus: usage: "Uso: /focus [on|off|status]" toggle: save_failed: "No se pudo guardar el ajuste {setting} en config.yaml" footer: usage: "/footer [on|off|status]" label: "Pie de ejecución" fields: "Campos: {fields}" timestamps: usage: "/timestamps [on|off|status]" label: "Marcas de tiempo de los mensajes" update: managed_action: "actualizar Hermes Agent" choice_update: "Actualizar ahora" choice_update_desc: "salir de la sesión actual y actualizar Hermes Agent" choice_cancel: "Cancelar" choice_cancel_desc: "mantener la sesión actual" title: "☤ Actualizar Hermes Agent" detail: "Esto cerrará la sesión actual y ejecutará `hermes update`." cancelled: "🟡 /update cancelado." launching: "☤ Iniciando la actualización..." voice: unknown_subcommand: "Subcomando de voz desconocido: {subcommand}" usage: "Uso: /voice [on|off|tts|status]" wake: unknown_subcommand: "Subcomando de wake desconocido: {subcommand}" usage: "Uso: /wake [on|off|status]" enabled_in_config: "Palabra de activación activada en la configuración (wake_word.enabled: true)." disabled_in_config: "Palabra de activación desactivada en la configuración (wake_word.enabled: false)." tip_line: "✦ Consejo: {tip}" banner: context_too_low: "⚠️ La longitud de contexto es de solo {tokens} tokens — probablemente es demasiado baja para usar el agente con herramientas." context_minimum: "Hermes necesita al menos {tokens} tokens. Los esquemas de herramientas + el prompt del sistema ocupan un prefijo fijo grande." fix_ollama: "Solución para Ollama: OLLAMA_CONTEXT_LENGTH={tokens} ollama serve" fix_lm_studio: "Solución LM Studio: ajusta el contexto en los ajustes del modelo → recárgalo" fix_local_server: "Solución: inicia tu servidor con al menos {tokens_k}K de contexto (llama.cpp: -c {tokens}), o define model.ollama_num_ctx en config.yaml con la ventana que realmente sirve" fix_config: "Solución: define model.context_length en config.yaml, o aumenta el ajuste de contexto de tu servidor" hermes_models_not_agentic: "⚠ Los modelos Hermes 3 y 4 de Nous Research NO son agénticos y no están diseñados para usarse con Hermes Agent." hermes_models_lack_tools: "Carecen de la capacidad de llamar herramientas que requieren los flujos de trabajo del agente. Considera usar un modelo agéntico (Claude, GPT, Gemini, DeepSeek, etc.)." hermes_models_switch_hint: "Cambia con: /model sonnet o /model gpt5" project_skills_loaded: "◆ {count} skill(s) del proyecto cargada(s) desde este repositorio" project_skills_untrusted: "◆ {count} skill(s) del proyecto encontrada(s) en {root} pero no cargada(s) — ejecuta `hermes skills trust` para activarlas." command: unknown_nothing_sent: "Comando desconocido {command} — no se envió nada.{hint}" did_you_mean_one: "¿Quisiste decir {suggestion}?" type_help: "Escribe /help para ver la lista completa." ambiguous: "Comando ambiguo: {command}" did_you_mean_many: "¿Quisiste decir: {candidates}?" config: title: "(^_^) Configuración" loaded: "(cargado)" not_found: "(no encontrado)" microsoft_entra_id: "Microsoft Entra ID" api_key_not_set: "¡Sin definir!" value_not_set: "sin definir" section_model: "Modelo" section_terminal: "Terminal" section_agent: "Agente" section_session: "Sesión" label_model: "Modelo:" label_base_url: "URL base:" label_api_key: "Clave de API:" label_environment: "Entorno:" label_ssh_target: "Destino SSH:" label_working_dir: "Directorio de trabajo:" label_timeout: "Tiempo de espera:" label_max_turns: "Turnos máx.:" label_toolsets: "Conjuntos de herramientas:" label_verbose: "Detallado:" label_started: "Inicio:" label_config_file: "Archivo de configuración:" context: header: "🧠 Uso de contexto — {model}" compute_failed: "(._.) No se pudo calcular el desglose del contexto: {error}" error: auth: "Tu clave de {provider} fue rechazada. Ejecuta `hermes model` para volver a introducirla." billing: "Tu cuenta de {provider} no tiene crédito. Recarga en el proveedor o ejecuta /model para cambiar." model_not_found: "'{model}' no está disponible en {provider}. Ejecuta /model para elegir un modelo válido." rate_limit: "{provider} aplicó un límite de tasa; espera un minuto o usa /model para cambiar." upstream_blocked: "Un firewall/CDN delante de {provider} bloqueó la solicitud (no es tu clave). Define un User-Agent con extra_headers, o usa /model para cambiar." overloaded: "{provider} está sobrecargado ahora mismo. Envía /retry en un momento, o /model para cambiar." server_error: "{provider} tuvo un error interno. Envía /retry en un momento, o /model para cambiar." timeout: "{provider} no respondió a tiempo. Envía /retry, o /model para cambiar." unknown: "La solicitud al modelo falló. Ejecuta /model para cambiar o `hermes doctor` para revisar la configuración." the_provider: "el proveedor" the_current_model: "el modelo actual" with_details: "{lead}\nDetalles: {details}" agent_init_failed: "Hermes no pudo iniciar la conexión con el modelo: {error}. Tu mensaje no se envió. Ejecuta `hermes doctor` para revisar la configuración, o /model para elegir otro proveedor." gateway: starting: "Iniciando Hermes Gateway (plataformas de mensajería)..." gateway_status: header: "(✿◠‿◠) Estado del gateway" platform_config_header: "Configuración de plataformas de mensajería:" enabled: "Activado" not_configured: "Sin configurar ({env_var})" conversations_persist: "Las conversaciones persisten hasta /new o /reset." to_start: "Para iniciar el gateway:" config_file: "Archivo de configuración: {path}" load_error: "Error al cargar la configuración del gateway: {error}" to_configure: "Para configurar el gateway:" step_env_vars: "1. Define las variables de entorno:" step_config: "2. O ajusta la configuración en {path}" help: header: "(^_^)? Comandos disponibles" section_session: "Sesión" section_configuration: "Configuración" section_tools_skills: "Herramientas y skills" section_info: "Información" section_exit: "Salir" section_context: "Contexto" section_background_automation: "Segundo plano y automatización" usage_suffix: "{description} (uso: /{command} {args})" alias_suffix: "{description} (alias de /{command})" skill_commands: "Comandos de skill" skill_bundles: "Paquetes de skills" quick_commands: "Comandos rápidos" n_installed: "{count} instalados" n_configured: "{count} configurados" n_skills: "{count} skills" load_n_skills: "Cargar {count} skills" no_skill_commands: "No hay comandos de skill instalados." matching_query: "que coinciden con '{query}'" to_list_them: "para listarlos" filtered_by: "Filtrado por '{query}' — ejecuta /help para ver la lista completa." tip_line: "Consejo: /help skills lista los comandos de skill · /help filtra · Ctrl+P abre la paleta de comandos" multiline_hint: "Varias líneas: Ctrl+J, Alt+Enter o \\\\+Enter para una nueva línea" draft_editor_hint: "Editor de borrador: Ctrl+G (Alt+G en VSCode/Cursor)" attach_image_hint: "Adjuntar imagen: /image {path} o empieza tu prompt con la ruta de una imagen local" paste_image_hint: "Pegar imagen: Alt+V (o /paste)" insights: no_session_data: "Aún no hay datos de sesión." mcp_watch: changed_reload_skipped: "🔄 La configuración de servidores MCP cambió — recarga omitida (recarga automática desactivada)." not_applied_run: "Los nuevos ajustes aún NO se aplicaron. Para aplicarlos ahora, ejecuta:" cache_note: "⚠️ Nota: /reload-mcp reconstruye el conjunto de herramientas e invalida la caché de prompt del proveedor (el próximo mensaje reenviará todos los tokens de entrada)." changed_reloading: "🔄 La configuración de servidores MCP cambió — recargando conexiones..." plugin: command_error: "Error en comando de plugin: {error}" quick: no_target: "El comando rápido '{command}' no tiene destino definido" unsupported_type: "El comando rápido '{command}' tiene un tipo no admitido (admitidos: 'exec', 'alias')" no_command: "El comando rápido '{command}' no tiene comando definido" no_output: "El comando no devolvió salida" timed_out: "Comando rápido: tiempo agotado (30 s)" error: "Error en comando rápido: {error}" reload_mcp: title: "⚠️ /reload-mcp — Aviso de invalidación de la caché de prompt" detail: "Recargar los servidores MCP reconstruye el conjunto de herramientas de esta sesión e\ninvalida la caché de prompt del proveedor. El próximo mensaje\nreenviará todos los tokens de entrada (puede ser costoso en modelos de\ncontexto largo o razonamiento intenso)." choice_once: "Aprobar una vez" choice_once_hint: "recargar ahora" choice_always: "Aprobar siempre" choice_always_hint: "recargar ahora y silenciar este aviso permanentemente" choice_cancel: "Cancelar" choice_cancel_hint: "dejar las herramientas MCP sin cambios" unchanged: "Herramientas MCP sin cambios." always_msg: "🔒 Las próximas llamadas a /reload-mcp se ejecutarán sin confirmación." once_verb: "recargando" reloading: "🔄 Recargando servidores MCP..." reconnected: "♻️ Reconectados: {names}" added: "➕ Añadidos: {names}" removed: "➖ Eliminados: {names}" tools_available: "🔧 {tools} herramienta(s) disponible(s) de {servers} servidor(es)" agent_updated: "✅ Agente actualizado — {count} herramienta(s) disponible(s)" reload_skills: reloading: "🔄 Recargando skills..." total: "📚 {count} skill(s) disponible(s)" added_header: "➕ Skills añadidas:" removed_header: "➖ Skills eliminadas:" session_store: unavailable_rich: "[bold yellow]⚠ Almacén de sesiones no disponible[/bold yellow] — esta conversación [bold]NO se guardará[/bold] y no podrá reanudarse después. La búsqueda en sesiones anteriores también está desactivada.\n Motivo: {reason}.\n {action}\n [dim]Detalles: {details}[/dim]" unavailable_plain: "ADVERTENCIA: Almacén de sesiones no disponible — esta conversación NO se guardará y no podrá reanudarse después. Motivo: {reason}. {action}" shell: command_denied: "Comando denegado: {reason}" flagged_as_dangerous: "marcado como peligroso" exited: "! terminó con {code}" skills: bundle_load_failed: "No se pudo cargar el paquete de {command}" loading_bundle: "Cargando paquete: {name} ({count} skills)" skipped_missing: "Skills ausentes omitidas: {names}" stacked_load_failed: "No se pudieron cargar las skills apiladas de {command}" loading_stacked: "Cargando {count} skills apiladas: {names}" loading_skill: "Cargando skill: {name}" skill_load_failed: "No se pudo cargar la skill de {command}" tools: none_available: "(;_;) No hay herramientas disponibles" header: "(^_^)/ Herramientas disponibles" total: "Total: {count} herramientas ヽ(^o^)ノ" toolsets: header: "(^_^)b Conjuntos de herramientas disponibles" currently_enabled_legend: "(*) = activado actualmente" tip_enable_all: "Consejo: 'all' o '*' activa todos los conjuntos" example: "Ejemplo: python cli.py --toolsets web,terminal" usage: unknown_subcommand: "Subcomando de /usage desconocido: {args}. Prueba /usage o /usage reset [--force]." reset_wrong_provider: "Los reinicios de uso acumulado solo están disponibles en el proveedor openai-codex." reset_switch_hint: "Cambia primero con `/model` o `hermes auth`." checking_reset_credits: "⏳ Comprobando créditos de reinicio acumulados..." codex_timeout: "❌ Se agotó el tiempo de espera al conectar con el backend de Codex — inténtalo de nuevo en breve." no_api_calls: "(._.) Aún no se han hecho llamadas a la API en esta sesión." header_session: "📊 Uso de tokens de la sesión" label_model: "Modelo:" label_input_tokens: "Tokens de entrada:" label_output_tokens: "Tokens de salida:" label_reasoning_subset: "↳ Razonamiento (subconjunto):" label_prompt_tokens_total: "Tokens de prompt (total):" label_completion_tokens: "Tokens de completado:" label_total_tokens: "Tokens totales:" label_api_calls: "Llamadas a la API:" label_session_duration: "Duración de la sesión:" label_current_context: "Contexto actual:" label_messages: "Mensajes:" label_compressions: "Compresiones:" verbose: label_off: "Progreso de herramientas: OFF" detail_off: "modo silencioso, solo la respuesta final." label_new: "Progreso de herramientas: NEW" detail_new: "mostrar cada herramienta nueva (omitir repeticiones)." label_all: "Progreso de herramientas: ALL" detail_all: "mostrar cada llamada a herramienta." label_verbose: "Progreso de herramientas: VERBOSE" detail_verbose: "argumentos completos, resultados y bloques de pensamiento." whoami: you_label: "Tú:" you_value: "cli (terminal local)" user_label: "Usuario:" tier_label: "Nivel:" tier_value: "sin restricciones" slash_commands_label: "Comandos slash:" slash_commands_value: "todos disponibles" worktree: shallow_clone_keeping: "⚠ Clon superficial — no se puede verificar el estado del push, se conserva: {path}" next_session_deepens: "La próxima sesión `hermes -w` profundiza el clon y elimina automáticamente los worktrees fusionados." unpushed_keeping: "⚠ El worktree tiene commits sin push, se conserva: {path}" uncommitted_keeping: "⚠ El worktree tiene cambios sin commit, se conserva: {path}" clean_up_manually: "Para limpiar manualmente: git worktree remove --force {path}" cleaned_up: "✓ Worktree limpiado: {path}" display: verb: web_search: "Buscando en la web" web_extract: "Leyendo" browser_navigate: "Navegando" browser_click: "Haciendo clic" browser_type: "Escribiendo" read_file: "Leyendo" write_file: "Escribiendo" patch: "Editando" search_files: "Buscando archivos" terminal: "Ejecutando" execute_code: "Ejecutando código" image_generate: "Generando imagen" video_generate: "Generando video" text_to_speech: "Generando voz" vision_analyze: "Mirando la imagen" session_search: "Buscando sesiones anteriores" skill_view: "Leyendo skill" skills_list: "Listando skills" skill_manage: "Actualizando skill" delegate_task: "Delegando" cronjob_manage: "Programando" clarify: "Preguntando" memory: "Actualizando memoria" todo_list: "Actualizando tareas" verb_connector: search: " por " default: " " bridge_generating: tool_call: "una llamada a herramienta" tool_search: "una búsqueda de herramientas" tool_describe: "detalles de herramienta" status_phrase: verb: "está {verb}" using_tool: "está usando {tool}" preview: shell_plus_one: "{first} + {count} comando" shell_plus_many: "{first} + {count} comandos" delegate_tasks: "{count} tareas: {goals}" delegate_parallel_tasks: "{count} tareas en paralelo" todo_verb_updating: "actualizando" todo_verb_planning: "planificando" todo_reading: "leyendo lista de tareas" todo_tasks: "{verb} {count} tarea(s)" missing_old_text: "" send_message_to: "a {target}: \"{message}\"" session_search_recall: "recordar: \"{query}\"" diff: review_header: " ┊ revisar diff" omitted_lines: "… {count} línea(s) de diff omitida(s)" omitted_files: " en {count} archivo(s)/sección(es) más" thinking_verbs: "reflexionando,contemplando,meditando,cavilando,rumiando,deliberando,sopesando,considerando,procesando,razonando,analizando,calculando,sintetizando,formulando,ideando" spinner: tool_line: " [herramienta] {message}" done_line: " [listo] {message}{elapsed}" failure: file_not_found: "Archivo no encontrado: {name}" terminal_backend_unavailable: "backend de terminal no disponible" exit_code: " [salida {code}]" memory_full: " [llena]" generic: " [error]" generic_word: "error" cute: verb: search: "buscar" fetch: "obtener" terminal: "$" read: "leer" write: "escribir" patch: "parchar" find: "encontrar" grep: "grep" navigate: "navegar" snapshot: "captura" click: "clic" type: "teclear" scroll: "desplazar" back: "atrás" press: "presionar" images: "imágenes" vision: "visión" plan: "plan" recall: "recordar" memory: "memoria" skills: "skills" skill: "skill" create: "crear" speak: "hablar" send: "enviar" cron: "cron" exec: "exec" browser: "navegador" delegate: "delegar" proc: "proc" fetch_pages: "páginas" todo_progress: "{done}/{total} tarea(s)" todo_reading: "leyendo tareas" todo_update_progress: "actualizar {done}/{total} ✓" todo_update_count: "actualizar {count} tarea(s)" todo_count: "{count} tarea(s)" cron_task_fallback: "tarea" cron_create: "crear {label}" cron_listing: "listando" delegate_parallel: "en paralelo" process_list: "ls procesos" snapshot_full: "completa" snapshot_compact: "compacta" images_extracting: "extrayendo" vision_analyzing_page: "analizando página" skills_list: "listar {category}" skills_all: "todas" scroll: up: "arriba" down: "abajo" left: "izquierda" right: "derecha" fallback_tool_name: "herramienta" fallback_done: "listo" completed: "┊ ⚡ {tool} completado {duration}" iteration_progress: unbounded: "iteración {n}" bounded: "iteración {n}/{max}" review: routing_fallback_warning: "⚠ auxiliary.background_review.provider='{task_provider}' (modelo '{task_model}') no se pudo enrutar ({error}); usando {provider}/{model} como alternativa" reasoning_effort_warning: "⚠ auxiliary.background_review.reasoning_effort='{effort}' no tiene efecto mientras el modelo de revisión no sea el modelo principal" memory_op_line: "{label} {glyph} {preview}" skill_patched_verbose: "📝 Skill '{name}' parchada: \"{old}\" → \"{new}\"" skill_changed_verbose: "📝 Skill '{name}' {verb}: {description}" skill_message_verbose: "📝 {message}" skill_action: "Skill {action}" label_updated: "{label} actualizado" skill_result: "Skill '{name}' {verb}{path}" skill_verb: created: "creada" rewritten: "reescrita" patched: "parchada" written: "escrita" removed: "quitada" deleted: "eliminada" label: skill: "Skill" memory: "Memoria" user: "Perfil de usuario" summary_cli: " 💾 Revisión de automejora: {summary}" summary_callback: "💾 Revisión de automejora: {summary}" aux_failure_label: "revisión en segundo plano" notice: uncompressed_context_overflow: "⚠️ El contexto de la sesión (~{tokens} tokens) supera la ventana de contexto del modelo (~{context_length} tokens) con la compresión desactivada (compression.enabled: false). Usa /compact para comprimir el historial o activa la compresión en config.yaml." explainer: no_reply_prefix: "⚠️ Sin respuesta: " empty_response: "{model} no produjo una respuesta esta vez, ni siquiera tras los reintentos. Envía `continue` para intentarlo de nuevo, o cambia de modelo con /model." exit: all_retries_exhausted_no_response: "el proveedor del modelo no respondió tras agotar todos los reintentos. Envía /retry, o cambia de modelo con /model." partial_stream_recovery: "la transmisión se detuvo antes de tiempo y solo se recuperó una respuesta parcial. Envía `continue` para reanudar desde donde se detuvo." fallback_prior_turn_content: "no se produjo contenido nuevo en este turno; se muestra el contexto previo recuperado. Envía `continue` para reintentar." redirect_restart_limit_exceeded: "una nueva corrección canceló la solicitud en cada intento, así que el turno se detuvo en lugar de reintentar indefinidamente. Tu última corrección quedó en cola como el siguiente mensaje." rebuilt_restart_limit_exceeded: "todos los proveedores de la cadena de respaldo siguieron fallando, así que el turno se detuvo en lugar de reintentar indefinidamente. Envía `continue` o cambia de proveedor." budget_exhausted: "el presupuesto de iteraciones/costo por turno se agotó antes de llegar a una respuesta final. Envía `continue` para seguir." ollama_runtime_context_too_small: "la ventana de contexto del modelo local era demasiado pequeña para terminar. Aumenta el tamaño del contexto o usa un modelo más grande." pending_tool_result: "el turno se detuvo con un resultado de herramienta aún pendiente y el modelo no produjo texto de seguimiento. Envía `continue` para que lo resuma." interrupted_during_api_call: "la solicitud se interrumpió a mitad de la llamada, antes de recibir una respuesta. Envía `continue` para reintentar." max_iterations_reached: "se alcanzó el límite máximo de iteraciones de herramientas antes de una respuesta final. Envía `continue` para seguir, o aumenta `max_iterations`." error_near_max_iterations: "ocurrió un error cerca del límite de iteraciones antes de una respuesta final. Revisa la salida de la herramienta arriba y luego envía `continue`." repeated_outer_errors: "el turno siguió fallando con errores repetidos y se detuvo antes de tiempo en lugar de reintentar indefinidamente. Revisa los errores arriba y luego envía `continue` para reintentar." persistence: compression: "el turno se detuvo porque otro proceso estaba comprimiendo esta sesión. Tu mensaje ya debería estar guardado — vuelve a enviarlo cuando termine la compresión." compression_closed: "el turno se detuvo porque la compresión de contexto rotó esta sesión y no se pudo adoptar su continuación activa. El almacenamiento está en buen estado — actualiza el cliente (o inicia un nuevo turno) para que tome el nuevo id de sesión y vuelve a enviar tu mensaje." turn_lease: "el turno se detuvo porque otro proceso de Hermes tomó el control de esta sesión. Tu respuesta no se guardó — espera a que el otro proceso termine y vuelve a enviar tu mensaje." session_row_missing: "esta sesión se eliminó del almacenamiento mientras el chat seguía abierto y Hermes no pudo recrearla, así que este mensaje no se guardó. Vuelve a enviarlo; si sigue fallando, ejecuta `hermes {profile_arg}doctor`." locked: "el turno se detuvo porque el almacenamiento de sesiones estaba ocupado (otro proceso de Hermes estaba escribiendo en la base de datos de estado). Tu mensaje ya debería estar guardado — vuelve a enviarlo en un momento." replaced: "el archivo de la base de datos de sesiones fue reemplazado mientras Hermes se ejecutaba, así que este mensaje no se guardó (se conserva una copia en {home}/sessions/). Detén Hermes (`hermes {profile_arg}gateway stop`), ejecuta `hermes {profile_arg}doctor` — no `hermes {profile_arg}doctor --fix`, que repararía el archivo equivocado en su lugar —, luego inícialo de nuevo y vuelve a enviar tu mensaje. Los pasos avanzados de recuperación están en el log." deleted_wal: "otro proceso de Hermes aún conserva una copia antigua del write-ahead log de la base de datos de sesiones, así que Hermes dejó de escribir para proteger el archivo y este mensaje no se guardó (se conserva una copia en {home}/sessions/). No se perdió nada. Cierra todos los procesos de Hermes de este perfil (app de escritorio, `hermes {profile_arg}gateway stop`, dashboard, cron), ejecuta `hermes {profile_arg}doctor` — indica qué proceso sigue reteniendo el log —, luego inicia Hermes de nuevo y vuelve a enviar tu mensaje. No ejecutes `doctor --fix` ni elimines archivos state.db mientras estén en ejecución. Guía: {recovery_docs}" corrupt: "el turno se detuvo porque la base de datos de estado reportó corrupción estructural (la transcripción se habría perdido al reiniciar). Liberar espacio en disco no ayudará. Opciones de recuperación:\n1. Ejecuta `hermes {profile_arg}doctor --fix`\n2. Detén el gateway y luego recupera con:\n hermes {profile_arg}sessions recover --source {db_path} --inspect-only\n (si indica que es recuperable) hermes {profile_arg}sessions recover --source {db_path} --output recovered-state.db\n — la recuperación toma primero una instantánea del archivo dañado; NO ejecutes `sqlite3 ... \".recover\"` contra el state.db activo, una CLI de sqlite3 vulnerable puede corromperlo aún más\n3. Restaura una copia de seguridad desde {backups_dir}/\nDespués, vuelve a enviar tu mensaje." fts_index: "el turno se detuvo porque el índice de búsqueda de sesiones (FTS5) está corrupto y no se pudo desvincular, así que este mensaje no se guardó. El almacén de mensajes no está dañado: no ejecutes herramientas de recuperación ni restaures una copia de seguridad. Ejecuta `hermes {profile_arg}doctor --fix` (o reinicia Hermes, que repara el índice al abrir) y vuelve a enviar tu mensaje." disk: "Hermes no pudo guardar esta conversación en el disco, así que se detuvo en lugar de perder tus mensajes. Probablemente el disco está lleno: libera espacio (o corrige los permisos de {home}/state.db) y vuelve a enviar tu mensaje." default: "Hermes no pudo guardar esta conversación, así que se detuvo en lugar de perder tus mensajes. Causas posibles: la unidad se quedó sin espacio, u otro proceso de Hermes está reteniendo la base de datos. Cierra las demás ventanas de Hermes, ejecuta `hermes {profile_arg}doctor` para revisar el almacenamiento y vuelve a enviar tu mensaje." file_mutation: header: "⚠️ Verificador de modificación de archivos: {count} edición(es) de archivo FALLARON en este turno, aunque el texto de arriba sugiera lo contrario. Ejecuta `git status` o `read_file` para confirmar qué se aplicó realmente." entry: " • `{path}` — [{tool}] {preview}" failed: "falló" shared: and_more: " • … y {count} más" the_model: "El modelo" tips: t001: "/bg ejecuta una tarea en una sesión separada mientras la actual queda libre; /btw responde una pregunta al margen sobre esta conversación sin interrumpirla." t002: "/branch bifurca la sesión actual para que explores otra dirección sin perder el progreso." t003: "/compress comprime manualmente el contexto de la conversación cuando se alarga demasiado." t004: "/rollback lista los puntos de control del sistema de archivos: restaura los archivos que modificó el agente a cualquier estado anterior." t005: "/rollback diff 2 muestra qué cambió desde el punto de control 2 sin restaurar nada." t006: "/rollback 2 src/file.py restaura un solo archivo desde un punto de control específico." t007: "/title \"mi proyecto\" da nombre a tu sesión; reanúdala después con /resume o hermes -c." t008: "/resume retoma una sesión con nombre justo donde la dejaste." t009: "/queue pone un mensaje en cola para el siguiente turno sin interrumpir el actual." t010: "/undo elimina el último intercambio usuario/asistente de la conversación." t011: "/retry reenvía tu último mensaje; útil cuando la respuesta del agente no fue del todo acertada." t012: "/verbose alterna la visualización del progreso de herramientas: off → new → all → verbose." t013: "/reasoning high aumenta la profundidad de razonamiento del modelo. /reasoning show muestra el razonamiento." t014: "/fast activa o desactiva el procesamiento prioritario para obtener respuestas de la API más rápidas (según el proveedor)." t015: "/yolo omite todas las solicitudes de aprobación de comandos peligrosos durante el resto de la sesión." t016: "/model te permite cambiar de modelo a mitad de sesión; prueba /model sonnet o /model gpt-5." t017: "/model --global cambia tu modelo predeterminado de forma permanente." t018: "/personality pirate activa una personalidad divertida: 14 opciones integradas, de kawaii a shakespeare." t019: "/skin cambia el tema de la CLI; prueba ares, mono, slate, poseidon o charizard." t020: "/statusbar activa o desactiva una barra persistente con el modelo, los tokens, el % de contexto usado, el costo y la duración." t021: "/tools disable browser quita temporalmente las herramientas del navegador durante la sesión actual." t022: "/browser connect conecta las herramientas del navegador a tu navegador basado en Chromium en ejecución mediante CDP." t023: "/plugins lista los plugins instalados y su estado." t024: "/cron gestiona las tareas programadas: configura prompts recurrentes con entrega a cualquier plataforma." t025: "/reload-mcp recarga en caliente la configuración de los servidores MCP sin reiniciar." t026: "/usage muestra el uso de tokens, el desglose de costos y la duración de la sesión." t027: "/insights muestra el análisis de uso de los últimos 30 días." t028: "/paste busca una imagen en tu portapapeles y la adjunta a tu siguiente mensaje." t029: "/profile muestra qué perfil está activo y su directorio home." t030: "/config muestra tu configuración actual de un vistazo." t031: "/stop termina todos los procesos en segundo plano iniciados por el agente." t032: "@file:path/to/file.py inserta el contenido de un archivo directamente en tu mensaje." t033: "@file:main.py:10-50 inserta solo las líneas 10-50 de un archivo." t034: "@folder:src/ inserta el listado del árbol de un directorio." t035: "@diff inserta en el mensaje tus cambios de git sin preparar (unstaged)." t036: "@staged inserta tus cambios de git preparados (git diff --staged)." t037: "@git:5 inserta los últimos 5 commits con sus parches completos." t038: "@url:https://example.com descarga e inserta el contenido de una página web." t039: "Escribir @ activa el autocompletado de rutas del sistema de archivos: navega a cualquier archivo de forma interactiva." t040: "Combina varias referencias: \"Revisa @file:main.py y @file:test.py para comprobar la consistencia\"." t041: "Alt+Enter inserta un salto de línea para escribir varias líneas. (Windows Terminal intercepta Alt+Enter; usa Ctrl+Enter en su lugar.)" t042: "Ctrl+C interrumpe al agente. Presiónalo dos veces en 2 segundos para forzar la salida." t043: "Ctrl+Z suspende Hermes en segundo plano; ejecuta fg en tu shell para reanudarlo." t044: "Tab acepta el texto fantasma de la autosugerencia o autocompleta los comandos con barra." t045: "Escribe un mensaje nuevo mientras el agente trabaja para interrumpirlo y redirigirlo." t046: "Alt+V pega una imagen de tu portapapeles en la conversación." t047: "Al pegar 5 líneas o más, el texto se guarda automáticamente en un archivo y se inserta una referencia compacta en su lugar." t048: "hermes -c reanuda tu sesión de CLI más reciente. hermes -c \"nombre del proyecto\" reanuda por título." t049: "hermes -w crea un worktree de git aislado, ideal para flujos de trabajo con agentes en paralelo." t050: "hermes -w -q \"Fix issue #42\" combina el aislamiento del worktree con una consulta de una sola ejecución." t051: "hermes chat -t web,terminal activa solo conjuntos de herramientas específicos para una sesión enfocada." t052: "hermes chat -s github-pr-workflow precarga una skill al iniciar." t053: "hermes chat -q \"consulta\" ejecuta una sola consulta no interactiva y sale." t054: "hermes chat --max-turns 1000 anula el límite predeterminado de 500 iteraciones por turno." t055: "hermes chat --checkpoints activa instantáneas del sistema de archivos antes de cada cambio destructivo de archivos." t056: "hermes --yolo omite todas las solicitudes de aprobación de comandos peligrosos durante toda la sesión." t057: "hermes chat --source telegram etiqueta la sesión para filtrarla en hermes sessions list." t058: "hermes -p work chat se ejecuta con un perfil específico sin cambiar tu perfil predeterminado." t059: "hermes doctor --fix diagnostica y repara automáticamente problemas de configuración y dependencias." t060: "hermes dump genera un resumen compacto de tu instalación, ideal para reportes de errores." t061: "hermes config set KEY VALUE envía automáticamente los secretos a .env y todo lo demás a config.yaml." t062: "hermes config edit abre config.yaml en tu editor predeterminado." t063: "hermes config check busca opciones de configuración faltantes u obsoletas." t064: "hermes sessions browse abre un selector interactivo de sesiones con búsqueda." t065: "hermes sessions stats muestra el número de sesiones por plataforma y el tamaño de la base de datos." t066: "hermes sessions prune --older-than 30 limpia las sesiones antiguas." t067: "hermes skills search react --source skills-sh busca en el directorio público skills.sh." t068: "hermes skills check revisa si las skills instaladas desde el hub tienen actualizaciones." t069: "hermes skills tap add myorg/skills-repo agrega una fuente de skills personalizada de GitHub." t070: "hermes skills snapshot export setup.json exporta tu configuración de skills para respaldarla o compartirla." t071: "hermes mcp add github --command npx agrega servidores MCP desde la línea de comandos." t072: "hermes mcp serve ejecuta Hermes como servidor MCP para otros agentes." t073: "hermes auth add te permite agregar varias claves de API para rotar un grupo de credenciales." t074: "hermes completion bash >> ~/.bashrc activa el autocompletado con Tab para todos los comandos y perfiles." t075: "hermes logs -f sigue agent.log en tiempo real. --level WARNING --since 1h filtra la salida." t076: "hermes backup crea una copia de seguridad en zip de todo tu directorio home de Hermes." t077: "hermes profile create coder crea un perfil aislado que se convierte en su propio comando." t078: "hermes profile create work --clone copia tu configuración y claves actuales a un perfil nuevo." t079: "hermes update sincroniza automáticamente las nuevas skills incluidas en TODOS los perfiles." t080: "hermes gateway install configura Hermes como servicio del sistema (systemd/launchd)." t081: "hermes memory setup te permite configurar un proveedor de memoria externo (Honcho, Mem0, etc.)." t082: "hermes webhook subscribe crea rutas de webhook basadas en eventos con validación HMAC." t083: "Ahorra dinero: hermes tools desactiva herramientas que no usas y hermes skills config recorta las skills." t084: "/reasoning low o /reasoning minimal reduce la profundidad de razonamiento por debajo del valor predeterminado (medium): respuestas más rápidas y baratas." t085: "hermes models envía las tareas de visión, compresión y auxiliares a modelos más baratos: reduce el costo de tokens en segundo plano en más de un 85% sin degradar tu modelo de chat principal." t086: "Configura display.bell_on_complete: true en config.yaml para oír una campana cuando terminen las tareas largas." t087: "Configura display.streaming: true para ver los tokens aparecer en tiempo real mientras el modelo genera." t088: "Configura display.show_reasoning: true para observar la cadena de razonamiento del modelo." t089: "Configura display.compact: true para reducir los espacios en la salida y mostrar la información más densa." t090: "Configura display.busy_input_mode: queue para poner los mensajes en cola en lugar de interrumpir al agente, o steer para inyectarlos a mitad de ejecución mediante /steer." t091: "Configura display.resume_display: minimal para omitir el resumen completo de la conversación al reanudar una sesión." t092: "Configura compression.threshold: 0.50 para controlar cuándo se activa la compresión automática (predeterminado: 50% del contexto)." t093: "Configura agent.max_turns: 1000 para que el agente pueda dar más pasos de llamadas a herramientas por turno." t094: "Configura file_read_max_chars: 200000 para aumentar el contenido máximo por llamada a read_file." t095: "Configura approvals.mode: smart para que un LLM apruebe automáticamente los comandos seguros y deniegue los peligrosos." t096: "Configura fallback_model en config.yaml para conmutar automáticamente a un proveedor de respaldo." t097: "Configura privacy.redact_pii: true para aplicar hash a los IDs de usuario y números de teléfono antes de enviarlos al LLM." t098: "Configura browser.record_sessions: true para grabar automáticamente las sesiones del navegador como videos WebM." t099: "Configura worktree: true en config.yaml para crear siempre un worktree de git (igual que hermes -w)." t100: "Configura security.website_blocklist.enabled: true para bloquear dominios específicos en las herramientas web." t101: "Configura cron.wrap_response: false para entregar la salida del agente sin el encabezado ni el pie de cron." t102: "HERMES_TIMEZONE reemplaza la zona horaria del servidor con cualquier cadena de zona horaria IANA." t103: "La sustitución de variables de entorno funciona en config.yaml: usa la sintaxis ${VAR_NAME}." t104: "Los comandos rápidos en config.yaml ejecutan comandos de shell al instante sin gastar tokens." t105: "Puedes definir personalidades personalizadas en config.yaml bajo agent.personalities." t106: "provider_routing controla el orden, la lista de permitidos y la lista de bloqueo de proveedores en OpenRouter." t107: "execute_code ejecuta scripts de Python que llaman a las herramientas de Hermes de forma programática; los resultados quedan fuera del contexto." t108: "delegate_task lanza hasta 10 subagentes concurrentes de forma predeterminada (delegation.max_concurrent_children) con contextos aislados para trabajar en paralelo." t109: "web_extract funciona con URLs de PDF: pásale cualquier enlace a un PDF y lo convierte a markdown." t110: "search_files se basa en ripgrep y es más rápido que grep; úsalo en lugar de grep en la terminal." t111: "patch usa 9 estrategias de coincidencia aproximada, así que las pequeñas diferencias de espacios no rompen las ediciones." t112: "patch admite el formato V4A para editar varios archivos en bloque en una sola llamada." t113: "read_file sugiere nombres de archivo similares cuando no encuentra el archivo." t114: "read_file deduplica automáticamente: volver a leer un archivo sin cambios devuelve un marcador ligero." t115: "browser_vision toma una captura de pantalla y la analiza con IA; funciona con CAPTCHAs y contenido visual." t116: "browser_console puede evaluar expresiones de JavaScript en el contexto de la página." t117: "image_generate crea imágenes con FLUX 2 Pro y escalado automático 2x." t118: "text_to_speech convierte texto en audio; en Telegram se reproduce como mensaje de voz." t119: "send_message puede llegar a cualquier plataforma de mensajería conectada desde dentro de una sesión." t120: "La herramienta todo ayuda al agente a seguir tareas complejas de varios pasos durante una sesión." t121: "session_search realiza búsquedas de texto completo en TODAS las conversaciones anteriores." t122: "El agente guarda automáticamente en memoria tus preferencias, correcciones y datos del entorno." t123: "/moa envía un prompt difícil a través del conjunto de modelos Mixture of Agents que hayas configurado." t124: "Los comandos de terminal admiten el modo en segundo plano con notify_on_complete para tareas de larga duración." t125: "Los procesos de terminal en segundo plano admiten watch_patterns para avisar cuando aparecen líneas de salida específicas." t126: "La herramienta terminal admite 6 backends: local, Docker, SSH, Modal, Daytona y Singularity." t127: "Cada perfil tiene su propia configuración, claves de API, memoria, sesiones, skills y tareas programadas (cron)." t128: "Los nombres de perfil se convierten en comandos de shell: 'hermes profile create coder' crea el comando 'coder'." t129: "hermes profile export coder -o backup.tar.gz crea un archivo portátil del perfil." t130: "Si dos perfiles comparten por accidente un token de bot, el segundo gateway se bloquea con un error claro." t131: "Las sesiones generan títulos descriptivos automáticamente tras el primer intercambio; no hace falta nombrarlas a mano." t132: "Los títulos de sesión admiten linaje: \"mi proyecto\" → \"mi proyecto #2\" → \"mi proyecto #3\"." t133: "Al salir, Hermes imprime un comando para reanudar con el ID de la sesión y sus estadísticas." t134: "hermes sessions export backup.jsonl exporta todas las sesiones para respaldo o análisis." t135: "hermes -r SESSION_ID reanuda cualquier sesión anterior específica por su ID." t136: "La memoria es una instantánea congelada: los cambios aparecen en el prompt del sistema solo al iniciar la siguiente sesión." t137: "Las entradas de memoria se analizan automáticamente en busca de patrones de inyección de prompts y exfiltración." t138: "El agente tiene dos almacenes de memoria: notas personales (~2200 caracteres) y perfil de usuario (~1375 caracteres)." t139: "Las correcciones que le das al agente (\"no, hazlo así\") suelen guardarse automáticamente en memoria." t140: "Más de 80 skills incluidas que cubren github, creative, mlops, productivity, research y más." t141: "Cada skill instalada se convierte automáticamente en un comando con barra; escribe / para verlas todas." t142: "hermes skills install official/security/1password instala skills opcionales desde el repositorio." t143: "Las skills pueden limitarse a sistemas operativos específicos; algunas solo se cargan en macOS o Linux." t144: "skills.external_dirs en config.yaml te permite cargar skills desde directorios personalizados." t145: "El agente puede crear sus propias skills como memoria procedimental usando skill_manage." t146: "/plan escribe un plan de implementación en markdown en .hermes/plans/ sin ejecutar nada." t147: "Las tareas programadas pueden adjuntar skills: hermes cron add --skill blogwatcher \"Check for new posts\"." t148: "Los destinos de entrega de cron incluyen telegram, discord, slack, email, sms y más de 12 plataformas adicionales." t149: "Si una respuesta de cron empieza con [SILENT], se suprime la entrega; útil para tareas de solo monitoreo." t150: "Cron admite retrasos relativos (30m), intervalos (every 2h), expresiones cron y marcas de tiempo ISO." t151: "Las tareas programadas (cron) se ejecutan en sesiones de agente completamente nuevas: los prompts deben ser autocontenidos." t152: "El modo de voz funciona sin ninguna clave de API si faster-whisper está instalado (voz a texto local y gratuito)." t153: "Hay cinco proveedores de TTS disponibles: Edge TTS (gratis), ElevenLabs, OpenAI, NeuTTS (local y gratis) y MiniMax." t154: "/voice on activa el modo de voz en la CLI. Ctrl+B alterna la grabación pulsar-para-hablar." t155: "El TTS en streaming reproduce las frases a medida que se generan: no tienes que esperar la respuesta completa." t156: "Los mensajes de voz en Telegram, Discord, WhatsApp y Slack se transcriben automáticamente." t157: "Hermes funciona en 21 plataformas de mensajería: Telegram, Discord, Slack, WhatsApp, Signal, Matrix, IRC, Microsoft Teams, correo electrónico y más." t158: "hermes gateway install lo configura como servicio del sistema que arranca al iniciar el equipo." t159: "DingTalk usa Stream Mode: no necesita webhooks ni una URL pública." t160: "BlueBubbles lleva iMessage a Hermes mediante un servidor local en macOS." t161: "Las rutas de webhook admiten validación HMAC, límite de tasa y filtrado de eventos." t162: "El servidor de API expone un endpoint compatible con OpenAI que funciona con Open WebUI y LibreChat." t163: "Modo de canal de voz en Discord: el bot entra al canal de voz, transcribe lo que se dice y responde hablando." t164: "group_sessions_per_user: true da a cada persona su propia sesión en los chats grupales." t165: "/sethome marca un chat como canal principal para las entregas de las tareas programadas (cron)." t166: "El gateway admite tiempos de espera basados en inactividad: los agentes activos pueden ejecutarse indefinidamente." t167: "La aprobación de comandos peligrosos tiene 4 niveles: once, session, always (lista de permitidos permanente) y deny." t168: "El modo de aprobación inteligente usa un LLM para aprobar automáticamente los comandos seguros y marcar los peligrosos." t169: "La protección SSRF bloquea redes privadas, loopback, direcciones link-local y direcciones de metadatos de la nube." t170: "El escaneo previo a la ejecución de Tirith detecta URLs falsificadas con homógrafos y patrones de tubería a intérprete." t171: "Los subprocesos MCP reciben un entorno filtrado: solo pasan las variables seguras del sistema." t172: "Los archivos de contexto (.hermes.md, AGENTS.md) se escanean en busca de inyección de prompts antes de cargarse." t173: "command_allowlist en config.yaml aprueba de forma permanente patrones concretos de comandos de shell." t174: "El contexto se comprime automáticamente al alcanzar el umbral: se vuelcan las memorias y se resume el historial." t175: "La barra de estado pasa a amarillo, luego a naranja y después a rojo a medida que se llena el contexto." t176: "SOUL.md es el archivo de identidad principal del agente: personalízalo para moldear su comportamiento." t177: "Hermes carga el contexto del proyecto desde .hermes.md, AGENTS.md, CLAUDE.md o .cursorrules (la primera coincidencia)." t178: "Los archivos AGENTS.md de subdirectorios se descubren progresivamente a medida que el agente entra en las carpetas." t179: "Los archivos de contexto se limitan a 20 000 caracteres con truncado inteligente de inicio/final." t180: "Cinco proveedores de navegador: Chromium local, Browserbase, Browser Use, Camofox y Firecrawl." t181: "Camofox es un navegador antidetección: un fork de Firefox con suplantación de huella digital en C++." t182: "browser_navigate devuelve automáticamente una captura de la página: no hace falta llamar a browser_snapshot después." t183: "browser_vision con annotate=true superpone etiquetas numeradas sobre los elementos interactivos." t184: "hermes mcp abre un selector interactivo de MCPs aprobados por Nous que puedes instalar con una sola tecla." t185: "hermes mcp catalog lista los servidores MCP aprobados por Nous que se incluyen con el repositorio." t186: "hermes mcp install instala una entrada del catálogo, pide las credenciales y te deja elegir cuáles de sus herramientas activar." t187: "Los servidores MCP se configuran en config.yaml: se admiten los transportes stdio y HTTP." t188: "Filtrado de herramientas por servidor: tools.include permite y tools.exclude bloquea herramientas concretas." t189: "Los servidores MCP generan sus conjuntos de herramientas al arrancar; hermes tools los activa o desactiva por plataforma." t190: "Compatibilidad con OAuth en MCP: auth: oauth activa la autorización desde el navegador con PKCE." t191: "Los puntos de control no tienen ningún costo cuando no se modifican archivos: están activados de forma predeterminada." t192: "Se guarda automáticamente una instantánea previa a la reversión para que puedas deshacer el deshacer." t193: "/rollback también deshace el turno de la conversación, así que el agente no recuerda los cambios revertidos." t194: "Los puntos de control usan repositorios sombra en ~/.hermes/checkpoints/: el .git de tu proyecto nunca se toca." t195: "batch_runner.py procesa cientos de prompts en paralelo para generar datos de entrenamiento." t196: "hermes chat -Q activa el modo silencioso para uso programático: oculta el banner y el spinner." t197: "El guardado de trayectorias (--save-trajectories) captura trazas completas de uso de herramientas para entrenar modelos." t198: "Tres tipos de plugin: generales (herramientas/hooks), proveedores de memoria y motores de contexto." t199: "hermes plugins install owner/repo instala plugins directamente desde GitHub." t200: "Proveedores de memoria externos: Honcho, OpenViking y Mem0 vienen incluidos; Hindsight y otros vía hermes plugins install." t201: "Los hooks de plugin incluyen pre/post_tool_call, pre/post_llm_call y transform_terminal_output para canonicalizar la salida." t202: "El caché de prompts (Anthropic) reduce costos reutilizando prefijos del prompt del sistema ya cacheados." t203: "El agente genera los títulos de sesión automáticamente en un hilo en segundo plano: sin impacto en la latencia." t204: "El enrutamiento inteligente puede enviar las consultas simples a un modelo más barato." t205: "Los comandos de barra admiten coincidencia por prefijo: /h se resuelve como /help y /mod como /model." t206: "Arrastrar una ruta de archivo a la terminal adjunta imágenes automáticamente o la envía como contexto." t207: ".worktreeinclude en la raíz de tu repositorio lista los archivos ignorados por git que se copiarán a los worktrees." t208: "hermes acp ejecuta Hermes como servidor ACP para integrarlo con VS Code, Zed y JetBrains." t209: "Proveedores personalizados: guarda endpoints con nombre en config.yaml bajo custom_providers." t210: "HERMES_EPHEMERAL_SYSTEM_PROMPT inyecta un prompt del sistema que nunca se guarda en el historial." t211: "credential_pool_strategies admite las rotaciones fill_first, round_robin, least_used y random." t212: "hermes auth add nous o hermes auth add openai-codex configuran proveedores basados en OAuth." t213: "El servidor de API admite tanto Chat Completions como la Responses API con estado del lado del servidor." t214: "tool_preview_length: 0 en la configuración muestra las rutas de archivo completas en el feed de actividad del spinner." t215: "hermes status --deep ejecuta comprobaciones de diagnóstico más profundas en todos los componentes." t216: "Las tareas programadas (cron) pueden adjuntar un script de Python (--script) cuya salida estándar se inyecta en el prompt como contexto." t217: "Los scripts de cron viven en ~/.hermes/scripts/ y se ejecutan antes que el agente: perfectos para pipelines de recolección de datos." t218: "prefill_messages_file en config.yaml inyecta ejemplos few-shot en cada llamada a la API, sin guardarlos nunca en el historial." t219: "SOUL.md reemplaza por completo la identidad predeterminada del agente: reescríbelo para hacer a Hermes tuyo." t220: "SOUL.md se rellena automáticamente con una personalidad predeterminada en la primera ejecución. Edítalo para personalizarlo." t221: "/compress asigna el 60-70 % del presupuesto del resumen a tu tema y recorta agresivamente el resto." t222: "A partir de la segunda compresión, el compresor actualiza el resumen anterior en lugar de empezar desde cero." t223: "Antes de reiniciar una sesión del gateway, Hermes vuelca automáticamente los hechos importantes a la memoria en segundo plano." t224: "network.force_ipv4: true en config.yaml corrige los bloqueos en servidores con IPv6 defectuoso: aplica un monkey-patch a socket." t225: "La herramienta terminal anota los códigos de salida comunes: grep devolviendo 1 = 'Sin coincidencias (no es un error)'." t226: "Los comandos de terminal en primer plano que fallan se reintentan automáticamente hasta 3 veces con retroceso exponencial (2 s, 4 s, 8 s)." t227: "Los comandos sudo sin más se reescriben automáticamente para canalizar SUDO_PASSWORD desde .env: no hace falta ningún prompt interactivo." t228: "Los helpers de execute_code requieren importaciones explícitas: from hermes_tools import json_parse, shell_quote, retry." t229: "Las 7 herramientas del sandbox de execute_code (web_search, terminal, read/write/search/patch) usan RPC: nunca entran en el contexto." t230: "Leer la misma región de un archivo 3 o más veces genera una advertencia. A partir de 4, se bloquea por completo para evitar bucles." t231: "write_file y patch detectan si un archivo se modificó externamente desde la última lectura y avisan de que está desactualizado." t232: "El formato de parche V4A admite las directivas Add File, Delete File y Move File, no solo Update." t233: "Los servidores MCP pueden pedir completados del LLM mediante sampling: el agente se convierte en una herramienta para el servidor." t234: "Los servidores MCP envían notifications/tools/list_changed para volver a registrar las herramientas automáticamente sin reiniciar." t235: "delegate_task con acp_command: 'claude' lanza Claude Code como agente hijo desde cualquier plataforma." t236: "La delegación tiene un hilo de heartbeat: la actividad del hijo se propaga al padre y evita los tiempos de espera del gateway." t237: "Cuando un proveedor devuelve HTTP 402 (pago requerido), el cliente auxiliar pasa automáticamente al siguiente." t238: "agent.tool_use_enforcement corrige a los modelos que describen acciones en lugar de llamar a herramientas: automático para GPT/Codex." t239: "agent.restart_after_turn_timeout deja que los turnos en curso terminen antes de que /restart entre en stop(); restart_drain_timeout es solo el margen de interrupción forzada una vez que empieza stop()." t240: "agent.api_max_retries (predeterminado 3) controla cuántas veces el agente reintenta una llamada a la API fallida antes de mostrar el error: bájalo para un fallback rápido." t241: "El gateway cachea las instancias de AIAgent por sesión: destruir este caché rompe el caché de prompts de Anthropic." t242: "Cualquier sitio web puede exponer skills vía /.well-known/skills/index.json: el hub de skills las descubre automáticamente." t243: "El registro de auditoría de skills en ~/.hermes/skills/.hub/audit.log rastrea cada operación de instalación y eliminación." t244: "Los worktrees de git obsoletos se limpian automáticamente al iniciar: los árboles limpios y totalmente fusionados se eliminan; el trabajo sucio o sin push siempre se conserva." t245: "Los perfiles delimitan el estado de Hermes mediante HERMES_HOME; los subprocesos de herramientas del host conservan tu HOME real salvo que terminal.home_mode sea profile." t246: "La variable de entorno HERMES_HOME_MODE (octal, p. ej. 0701) fija permisos de directorio personalizados para el acceso del servidor web." t247: "Modo contenedor: coloca .container-mode en HERMES_HOME y la CLI del host se ejecutará automáticamente dentro del contenedor." t248: "Ctrl+C tiene 5 niveles de prioridad: cancelar grabación → cancelar prompts → cancelar selector → interrumpir agente → salir." t249: "Cada interrupción durante la ejecución de un agente se registra en ~/.hermes/interrupt_debug.log con marcas de tiempo." t250: "BROWSER_CDP_URL conecta las herramientas de navegador a cualquier navegador de la familia Chromium en ejecución: acepta WebSocket, HTTP o host:port." t251: "BROWSERBASE_ADVANCED_STEALTH=true activa la antidetección avanzada con Chromium personalizado (Scale Plan)." t252: "La CLI cambia automáticamente al modo compacto en terminales de menos de 80 columnas." t253: "Los comandos rápidos admiten dos tipos: exec (ejecuta un comando de shell directamente) y alias (redirige a otro comando)." t254: "Modelo de delegación por tarea: delegation.model y delegation.provider en la configuración envían los subagentes a modelos más baratos." t255: "delegation.reasoning_effort controla de forma independiente la profundidad de razonamiento de los subagentes." t256: "display.platforms en config.yaml permite anular la visualización por plataforma: {telegram: {tool_progress: all}}." t257: "human_delay.mode en la configuración simula la velocidad de escritura humana: rango min_ms/max_ms configurable." t258: "Las migraciones de versión de la configuración se ejecutan automáticamente al cargar: las claves nuevas aparecen sin intervención manual." t259: "Los modelos GPT y Codex reciben indicaciones especiales en el prompt del sistema sobre disciplina y uso obligatorio de herramientas." t260: "Los modelos Gemini reciben directivas específicas sobre rutas absolutas, llamadas paralelas a herramientas y comandos no interactivos." t261: "context.engine en config.yaml puede apuntar al nombre de un plugin para usar estrategias alternativas de gestión del contexto." t262: "Las capturas de página del navegador de más de 15 000 caracteres se truncan o se resumen automáticamente; la captura completa se guarda en cache/web para paginarla con read_file." t263: "El compresor hace una pasada previa barata: las salidas de herramientas de más de 200 caracteres se reemplazan por marcadores antes de ejecutar el LLM." t264: "Cuando la compresión falla, los siguientes intentos se pausan 10 minutos para no saturar la API." t265: "Los comandos peligrosos largos (>70 caracteres) tienen una opción 'view' en el prompt de aprobación para ver antes el texto completo." t266: "La visualización del nivel de audio muestra barras ▁▂▃▄▅▆▇ durante la grabación de voz según el nivel RMS del micrófono." t267: "Los nombres de perfil no pueden coincidir con binarios existentes en el PATH: 'hermes profile create ls' sería rechazado." t268: "hermes profile create backup --clone-all copia todo (configuración, claves, SOUL.md, memorias, skills, sesiones)." t269: "La tecla de grabación de voz se configura con voice.record_key en config.yaml: no tiene que ser solo Ctrl+B." t270: "Los archivos .cursorrules y .cursor/rules/*.mdc se detectan y cargan automáticamente como contexto del proyecto." t271: "Los archivos de contexto se revisan contra más de 10 patrones de inyección de prompts: Unicode invisible, 'ignore instructions', intentos de exfiltración." t272: "GPT-5 y Codex usan el rol 'developer' en lugar de 'system' en el formato de mensajes." t273: "Anulaciones auxiliares por tarea: auxiliary.vision.provider, auxiliary.compression.model, etc. en config.yaml." t274: "El cliente auxiliar trata 'main' como alias de proveedor: se resuelve a tu proveedor y modelo principales reales." t275: "hermes claw migrate --dry-run muestra una vista previa de la migración desde OpenClaw sin escribir nada." t276: "Las rutas de archivo pegadas con comillas o espacios escapados se procesan automáticamente: no hace falta limpiarlas a mano." t277: "Los comandos de barra nunca activan el colapso de pegados grandes: /command con argumentos largos funciona correctamente." t278: "En modo interrupción, los comandos de barra escritos durante la ejecución del agente omiten la lógica de interrupción y se ejecutan de inmediato." t279: "HERMES_DEV=1 omite la detección del modo contenedor para el desarrollo local." t280: "Cada servidor MCP tiene su propio conjunto de herramientas (mcp-servername) que se puede activar o desactivar de forma independiente con hermes tools." t281: "Los marcadores ${ENV_VAR} de MCP en la configuración se resuelven al lanzar el servidor, incluidas las variables de ~/.hermes/.env." t282: "Las skills de repositorios de confianza (NousResearch) reciben el nivel de seguridad 'trusted'; las skills de la comunidad pasan por un escaneo adicional." t283: "La cuarentena de skills en ~/.hermes/skills/.hub/quarantine/ guarda las skills pendientes de revisión de seguridad." t284: "/steer inyecta una nota después de la siguiente llamada a herramienta: redirige el rumbo a mitad de tarea sin interrumpir." t285: "/goal fija un objetivo permanente tipo bucle Ralph: Hermes continúa turno tras turno hasta que un juez da la tarea por terminada." t286: "/snapshot create [label] guarda una instantánea completa del estado de la configuración de Hermes; /snapshot restore la restaura más tarde." t287: "/copy [N] copia la última respuesta del asistente a tu portapapeles, o la N-ésima desde el final si indicas un número." t288: "/redraw fuerza un repintado completo de la interfaz y corrige el desajuste de la terminal tras redimensionar tmux o seleccionar con el mouse." t289: "/agents (alias /tasks) muestra los agentes activos y las tareas en segundo plano en ejecución en la sesión actual." t290: "/footer activa o desactiva el pie del gateway en las respuestas finales, que muestra el modelo, el % de contexto y el cwd." t291: "/busy queue|steer|interrupt controla qué hace presionar Enter mientras Hermes está trabajando." t292: "/topic en los mensajes directos de Telegram activa el modo de temas multisesión gestionado por el usuario: /topic restaura sesiones anteriores en el mismo chat." t293: "/approve session|always ejecuta un comando peligroso pendiente con el alcance de confianza que elijas; /deny lo rechaza." t294: "/restart reinicia el gateway de forma ordenada tras drenar las ejecuciones activas y luego avisa a quien lo solicitó cuando vuelve a estar en línea." t295: "/kanban boards switch cambia el tablero kanban multiproyecto activo desde el propio chat." t296: "/reload recarga ~/.hermes/.env en la sesión en curso: incorpora claves de API nuevas sin reiniciar." t297: "cronjob con no_agent=True ejecuta un script según la programación y envía su salida estándar directamente: cero tokens, cero LLM." t298: "Una salida vacía del script de cron significa un tick silencioso: no se entrega nada, perfecto para vigilantes de umbral." t299: "HERMES_CRON_MAX_PARALLEL (predeterminado 4) limita cuántas tareas programadas se ejecutan por tick para que las ráfagas no saturen tus claves." t300: "Los hooks del gateway viven en ~/.hermes/hooks// con HOOK.yaml + handler.py: el handler debe llamarse `handle`." t301: "Los eventos de hooks incluyen gateway:startup, session:start, agent:step y suscripciones con comodín command:*." t302: "Deja una lista de tareas en ~/.hermes/BOOT.md y un hook gateway:startup la ejecutará como agente de una sola pasada en cada arranque." t303: "hermes curator run --dry-run muestra qué archivaría o consolidaría el curador sin modificar nada." t304: "hermes curator pin blinda una skill tanto contra el archivado automático como contra la herramienta skill_manage del agente." t305: "hermes curator rollback restaura las skills desde una instantánea previa a la ejecución — los respaldos viven en skills/.curator_backups/." t306: "hermes auth reset [target] limpia los enfriamientos y las marcas de agotamiento de todo un pool de credenciales, o de una sola credencial por índice, id o etiqueta." t307: "credential_pool_strategies.: round_robin rota las claves de forma equitativa en lugar del fill_first predeterminado." t308: "use_gateway: true por herramienta enruta web, image, tts o browser a través de tu suscripción de Nous — sin claves adicionales." t309: "provider_routing.data_collection: deny excluye a los proveedores que almacenan datos en OpenRouter." t310: "provider_routing.require_parameters: true solo enruta a proveedores que admiten todos los parámetros de tu solicitud." t311: "HERMES_TUI_RESUME=1 vuelve a conectar automáticamente con la sesión TUI más reciente al iniciar — muy útil cuando se cae la conexión SSH." t312: "HERMES_TUI_THEME=light|dark| fuerza el tema de la TUI en terminales que no definen COLORFGBG." t313: "Ctrl+G o Ctrl+X Ctrl+E en la TUI abre el búfer de entrada en $EDITOR para prompts largos de varias líneas." t314: "La TUI renderiza LaTeX en línea — $E=mc^2$ se convierte en notación matemática Unicode en lugar de TeX crudo." t315: "hermes dashboard lanza una interfaz web local en 127.0.0.1:9119 — ningún dato sale de localhost." t316: "hermes dashboard incrusta la TUI completa de Hermes en tu navegador mediante xterm.js y un PTY por WebSocket." t317: "Deja un YAML en ~/.hermes/dashboard-themes/ con dos colores de paleta para cambiar la apariencia de todo el dashboard." t318: "Los plugins del dashboard se instalan con solo copiarlos: manifest.json + bundle JS en ~/.hermes/dashboard-plugins/ — sin necesidad de compilar con npm." t319: "layoutVariant: cockpit en un tema del dashboard añade un panel izquierdo de 260px que los plugins pueden llenar mediante el slot sidebar." t320: "display.tool_progress_command: true expone /verbose en las plataformas de mensajería; por defecto es solo para la CLI." t321: "HERMES_BACKGROUND_NOTIFICATIONS=result solo avisa cuando terminan las tareas en segundo plano (frente a concise/all/error/off)." t322: "HERMES_WRITE_SAFE_ROOT restringe write_file/patch a ciertos prefijos de directorio; varias rutas separadas con os.pathsep (: o ;)." t323: "HERMES_IGNORE_RULES omite la inyección automática de AGENTS.md, SOUL.md, .cursorrules, la memoria y las skills precargadas." t324: "HERMES_ACCEPT_HOOKS aprueba automáticamente los hooks de shell no vistos declarados en config.yaml sin pedir confirmación en la TTY." t325: "auxiliary.goal_judge.model enruta el juez de /goal a un modelo rápido y barato para mantener el costo del bucle casi en cero." t326: "Los puntos de control omiten directorios con más de 50,000 archivos para evitar operaciones git lentas en monorepos enormes." t327: "tts.provider: piper ejecuta TTS local en 44 idiomas sobre CPU — las voces se descargan automáticamente en ~/.hermes/cache/piper-voices/." t328: "tts.providers..type: command conecta cualquier motor TTS de línea de comandos con los marcadores {input_path} y {output_path}." t329: "API_SERVER_ENABLED=true ejecuta un endpoint compatible con OpenAI junto al gateway para Open WebUI y LibreChat." t330: "GATEWAY_PROXY_URL ejecuta una configuración dividida: la E/S de plataformas en local y el trabajo del agente delegado a un servidor API remoto." t331: "MATRIX_DEVICE_ID fija un ID de dispositivo estable para E2EE — sin él, las claves rotan en cada arranque y el descifrado del historial deja de funcionar." t332: "TELEGRAM_WEBHOOK_SECRET es obligatorio siempre que TELEGRAM_WEBHOOK_URL esté definido — genéralo con openssl rand -hex 32." t333: "batch_runner.py --resume compara por texto los prompts ya completados, así que reordenar el dataset no vuelve a ejecutar el trabajo terminado." t334: "/new inicia una sesión nueva en el mismo lugar (alias /reset) — ID de sesión nuevo, historial limpio y la CLI sigue abierta." t335: "/clear limpia la pantalla del terminal Y además inicia una sesión nueva — un solo atajo para un reinicio visual." t336: "/history imprime la conversación actual en línea sin salir de la CLI — útil para releerla rápidamente." t337: "/save guarda la conversación actual en disco sin terminar la sesión." t338: "/status muestra la información de la sesión de un vistazo: ID, título, modelo, uso de tokens y tiempo transcurrido." t339: "/image adjunta un archivo de imagen local para tu siguiente prompt sin pegar ni arrastrar y soltar." t340: "/platforms muestra el estado de conexión del gateway y de las plataformas de mensajería directamente desde el chat." t341: "/commands pagina la lista completa de comandos slash + skills instaladas — útil en plataformas sin autocompletado con Tab." t342: "/toolsets enumera todos los conjuntos de herramientas disponibles para que sepas qué acepta -t/--toolsets." t343: "/voice tts activa o desactiva el modo solo TTS — el agente responde en voz alta, pero tú sigues escribiendo tus prompts." t344: "/reload-skills vuelve a escanear ~/.hermes/skills/ para que las skills copiadas a mano aparezcan sin reiniciar la sesión." t345: "/indicator kaomoji|emoji|unicode|ascii elige el estilo del indicador de actividad de la TUI que se muestra mientras el agente trabaja." t346: "/debug sube un paquete de soporte (información del sistema + logs) y devuelve enlaces para compartir — también funciona en el chat." t347: "hermes -z \"\" es el modo de una sola pasada más puro: la respuesta final en stdout y nada más — ideal para encadenar en scripts." t348: "hermes chat --pass-session-id inyecta el ID de sesión en el prompt del sistema para que el agente pueda referirse a él." t349: "hermes chat --image path/to/pic.png adjunta una imagen local a una sola consulta -q sin un paso de subida aparte." t350: "hermes chat --ignore-user-config omite la configuración de usuario activa — ideal para reportes de errores reproducibles y ejecuciones en CI." t351: "hermes chat --source tool etiqueta los chats programáticos para que no saturen hermes sessions list." t352: "hermes dump --show-keys incluye huellas censuradas de las claves de API para una depuración de soporte más profunda." t353: "hermes sessions rename \"nuevo título\" renombra cualquier sesión pasada; hermes sessions delete elimina una." t354: "hermes import restaura un zip de respaldo completo de Hermes; las exportaciones de sesión en JSON/JSONL se importan desde la página Sessions del dashboard." t355: "hermes fallback gestiona la cadena fallback_model de forma interactiva — sin editar config.yaml a mano." t356: "hermes pairing rota el token de vinculación por mensaje directo — la primera persona que escriba tras la rotación obtiene acceso al bot." t357: "hermes setup guía a quienes empiezan por el proveedor, las claves y la conexión de plataformas en un solo flujo interactivo." t358: "hermes status --deep ejecuta la revisión de salud completa de cada componente; hermes status a secas es la vista rápida." t359: "HERMES_AGENT_TIMEOUT=0 desactiva la terminación por inactividad del gateway para un agente en ejecución — úsalo en investigaciones largas." t360: "HERMES_ENABLE_PROJECT_PLUGINS=1 carga automáticamente los plugins locales del repositorio desde ./.hermes/plugins/ — con control de confianza por diseño." t361: "HERMES_DISABLE_FILE_STATE_GUARD=1 desactiva la protección 'el archivo cambió desde que lo leíste' en patch y write_file." t362: "HERMES_ALLOW_PRIVATE_URLS=true permite que las herramientas web accedan a localhost y redes privadas — desactivado por defecto en modo gateway." t363: "HERMES_OPTIONAL_SKILLS=name1,name2 instala automáticamente skills adicionales del catálogo opcional en la primera ejecución de cada perfil." t364: "HERMES_BUNDLED_SKILLS apunta a un árbol personalizado de skills incluidas — lo usan los paquetes de Homebrew y Nix." t365: "HERMES_DUMP_REQUEST_STDOUT=1 vuelca el payload de cada solicitud a la API en stdout en lugar de en archivos de log." t366: "HERMES_OAUTH_TRACE=1 registra, con datos censurados, los intercambios de tokens OAuth y los intentos de renovación para depurar la autenticación del proveedor." t367: "HERMES_STREAM_RETRIES (3 por defecto) controla los intentos de reconexión a mitad de la transmisión ante errores de red transitorios." t368: "HERMES_GATEWAY_BUSY_ACK_ENABLED=false silencia los mensajes de acuse ⚡/⏳/⏩ cuando un usuario escribe a un agente ocupado." t369: "HERMES_AGENT_NOTIFY_INTERVAL (180s por defecto) define cada cuánto el gateway avisa del progreso en turnos largos." t370: "HERMES_RESTART_DRAIN_TIMEOUT (900s por defecto) limita cuánto espera /restart a las ejecuciones en curso antes de forzar el reinicio." t371: "HERMES_CHECKPOINT_TIMEOUT (30s por defecto) limita la creación de puntos de control del sistema de archivos — súbelo en monorepos enormes." t372: "image_gen.model en config.yaml elige el modelo de FAL: flux-2/klein, gpt-image-2, nano-banana-pro y más." t373: "image_gen.provider enruta la generación de imágenes a través de un plugin (OpenAI Images, Codex, FAL) en lugar del predeterminado." t374: "AUXILIARY_VISION_BASE_URL + AUXILIARY_VISION_API_KEY apuntan el análisis de visión a cualquier endpoint compatible con OpenAI." t375: "security.tirith_fail_open: false hace que Hermes bloquee los comandos cuando el propio escáner tirith falla." t376: "La variable de entorno TIRITH_FAIL_OPEN anula la configuración tirith_fail_open — un interruptor rápido sin editar config.yaml." t377: "Los chats con --source tool quedan excluidos de hermes sessions list por defecto — indica --source explícitamente para verlos." t378: "Los IDs de sesión llevan la marca de tiempo como prefijo (20250305_091523_abcd), así que ordenar con ls y jq funciona de forma natural." t379: "API_SERVER_MODEL_NAME personaliza el nombre del modelo en /v1/models — esencial en configuraciones de Open WebUI con varios perfiles." t380: "Los plugins del dashboard se sirven desde /dashboard-plugins// — copia los archivos en ~/.hermes/dashboard-plugins/." placeholder: p01: "Pregunta lo que quieras, o escribe / para ver los comandos…" p02: "Resume el contenido de esta carpeta" p03: "Redacta una respuesta al último correo de mi bandeja de entrada" p04: "Planifica una función y luego constrúyela paso a paso" p05: "Encuentra y corrige una prueba que falla" p06: "Investiga este tema y escríbeme un resumen" p07: "¿Qué ha cambiado en este repositorio recientemente?" p08: "Convierte estas notas en una lista de tareas" p09: "Explica este error y cómo solucionarlo" p10: "Crea un recordatorio o programa una tarea recurrente" p11: "Escribe / para explorar los comandos, o Ctrl+P para la paleta"