Files
hermes-agent/locales/it.yaml
teknium1 781334eea4 chore(memory): remove the bundled mem0 provider (moved to the plugin catalog)
plugin-catalog/mem0.yaml (#131267) points at mem0ai/mem0's own
integrations/hermes-plugin-mem0 at a reviewed pin. The entry stays dormant
while a bundled copy exists (bundled providers win in find_provider_dir), so
deleting the in-tree copy is what lets hermes_cli/memory_provider_migration.py
install it for every home whose memory.provider is "mem0". The vendor copy
keeps the provider name, mem0.json, the MEM0_* keys and the setup wizard.

Also dropped: the hermes-agent[mem0] extra, its win-arm64 platform row and
exclude-newer row, the pm/extras.py anchor (uv lock removes only mem0ai,
posthog, qdrant-client and sqlalchemy), the mem0-specific doctor check (the
generic check now names `hermes plugins install mem0`), and the tests that
imported plugins.memory.mem0. Prose that lists the bundled set now names mem0
as a catalog provider. MEM0_* env hints and redaction stay: the catalog copy
still reads them.
2026-10-06 05:50:08 -07:00

3870 lines
272 KiB
YAML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

approval:
dangerous_header: "⚠️ COMANDO PERICOLOSO: {description}"
choose_long: " [o]una volta | [s]essione | [a]sempre | [d]nega"
choose_short: " [o]una volta | [s]essione | [d]nega"
prompt_long: " Scelta [o/s/a/D]: "
prompt_short: " Scelta [o/s/D]: "
choose_smart_deny: " [o]una volta | [d]nega"
prompt_smart_deny: " Scelta [o/D]: "
smart_deny_once_inputs: "o,once,volta,unavolta"
smart_deny_deny_inputs: "d,deny,n,nega"
timeout: " ⏱ Nessuna risposta entro {waited} — il comando non è stato eseguito. Richiedi di nuovo per riprovare, oppure aumenta il limite: hermes config set approvals.timeout {suggested}"
allowed_once: " ✓ Consentito una volta"
allowed_session: " ✓ Consentito per questa sessione"
allowed_always: " ✓ Aggiunto alla lista permessi permanente"
denied: " ✗ Negato"
cancelled: " ✗ Annullato"
blocklist_message: "Questo comando è nella lista di blocco incondizionata e non può essere approvato."
inputs:
approve: "approve,yes,ok,okay,confirm,y,approva,sì,si,conferma,s"
deny: "deny,no,reject,cancel,n,nega,rifiuta,annulla"
always: "always,approve always,always approve,sempre,approva sempre"
session: "session,approve session,session approve,sessione,approva sessione"
confirm_once: "approve,approve once,once,yes,ok,confirm,approva,approva una volta,una volta,sì,si,conferma"
confirm_always: "always,always approve,remember,sempre,approva sempre,ricorda"
confirm_cancel: "cancel,nevermind,no,deny,annulla,lascia stare,nega"
summary:
denied: "Hai negato {noun} — nessuna esecuzione."
timeout: "Nessuna risposta entro {window} — nessuna esecuzione per {noun}."
notify_failed: "Impossibile recapitare la richiesta di approvazione — nessuna esecuzione per {noun}."
cancelled: "La richiesta di approvazione è stata ritirata o non ti ha mai raggiunto — nessuna esecuzione per {noun}."
blocked: "In una sessione non presidiata non è possibile autorizzare {noun} — nessuna esecuzione."
default: "Nessuna esecuzione per {noun}."
noun:
command: "il comando"
code: "il codice"
action: "l'azione"
window:
hour_one: "{count} ora"
hour_other: "{count} ore"
minute_one: "{count} minuto"
minute_other: "{count} minuti"
second_one: "{count} secondo"
second_other: "{count} secondi"
gateway:
approval_expired: "⚠️ Approvazione scaduta (l'agente non è più in attesa). Chiedi all'agente di riprovare."
draining: "⏳ Attendo il completamento di {count} agente/i attivo/i prima di riavviare..."
goal_cleared: "✓ Obiettivo cancellato."
no_active_goal: "Nessun obiettivo attivo."
config_read_failed: "⚠️ Impossibile leggere config.yaml: {error}"
config_save_failed: "⚠️ Impossibile salvare la configurazione: {error}"
model:
error_prefix: "Errore: {error}"
switched: "Modello cambiato a `{model}`"
provider_label: "Provider: {provider}"
context_label: "Contesto: {tokens} token"
max_output_label: "Output massimo: {tokens} token"
cost_label: "Costo: {cost}"
capabilities_label: "Capacità: {capabilities}"
prompt_caching_enabled: "Caching dei prompt: attivo"
warning_prefix: "Avviso: {warning}"
saved_global: "Salvato in config.yaml (`--global`)"
session_only_hint: "_(solo per questa sessione — aggiungi `--global` per renderlo permanente)_"
current_label: "Attuale: `{model}` su {provider}"
current_tag: " (attuale)"
more_models_suffix: " (+{count} altri)"
usage_switch_model: "`/model <name>` — cambia modello"
usage_switch_provider: "`/model <name> --provider <slug>` — cambia provider"
usage_persist: "`/model <name> --global` — rendi permanente"
err_skew: "Questo gateway esegue il codice di {boot_rev}, ma il checkout su disco è ora {disk_rev}. Cambiare modello rischierebbe un crash per moduli obsoleti — riavvia il gateway per caricare il nuovo codice: hermes gateway restart"
err_switch_failed: "Passaggio al modello {model} non riuscito ({error}); resto su {current}."
err_config_not_updated: "config.yaml non aggiornato ({error})"
err_stale_override: "salvato in config.yaml, ma l'override obsoleto della sessione non è stato rimosso ({error})"
next_turn_only: " (solo per il prossimo turno — viene ripristinato dopo una risposta)"
switch_cancelled: "🟡 Cambio di modello annullato. Modello attuale invariato ({model})."
guard_confirm: "⚠️ **{title}**\n\n{message}\n\n_Fallback testuale: rispondi `{prefix}approve` per cambiare o `{prefix}cancel` per mantenere il modello attuale._"
agents:
header: "🤖 **Agenti e attività attivi**"
active_agents: "**Agenti attivi:** {count}"
this_chat: " · questa chat"
more: "... e {count} altri"
running_processes: "**Processi in background in esecuzione:** {count}"
async_jobs: "**Job asincroni del gateway:** {count}"
background_delegations: "**Delegazioni in background:** {count}"
none: "Nessun agente attivo o attività in esecuzione."
state_starting: "in avvio"
state_running: "in esecuzione"
no_progress: " · nessun progresso da {seconds}s"
quiet_for: " · silenzio da {seconds}s"
between_turns: "tra un turno e l'altro"
child_row: " - figlio {index}: {calls} chiamate API · {doing}"
active_ago: " · attivo {seconds}s fa"
approve:
no_pending: "Nessun comando in attesa di approvazione."
once_singular: "✅ Comando approvato. L'agente sta riprendendo..."
once_plural: "✅ Comandi approvati ({count} comandi). L'agente sta riprendendo..."
session_singular: "✅ Comando approvato (modello approvato per questa sessione). L'agente sta riprendendo..."
session_plural: "✅ Comandi approvati (modello approvato per questa sessione) ({count} comandi). L'agente sta riprendendo..."
always_singular: "✅ Comando approvato (modello approvato in modo permanente). L'agente sta riprendendo..."
always_plural: "✅ Comandi approvati (modello approvato in modo permanente) ({count} comandi). L'agente sta riprendendo..."
background:
usage: "Uso: /bg <prompt>\nEsempio: /bg Riassumi le principali notizie di HN di oggi\n\nEsegue il prompt in una sessione separata. Puoi continuare a chattare — il risultato apparirà qui al termine."
started: "🔄 Attività in background avviata: \"{preview}\"\nID attività: {task_id}\nPuoi continuare a chattare — i risultati appariranno al termine."
task_finished: "✅ Attività in background terminata"
task_failed: "❌ Attività in background non riuscita"
exit_code: "exit {code}"
last_output: ". Ultimo output:\n```\n{tail}\n```"
rerun_hint: "\nChiedimi di rieseguirla o di mostrarti il log completo."
no_credentials: "❌ L'attività in background non è partita perché non è configurato alcun accesso a un modello AI. Usa /login oppure esegui `hermes setup` sull'host."
complete_header: "✅ Attività in background completata\nPrompt: \"{preview}\"\n\n"
no_response: "(Nessuna risposta generata)"
failed: "❌ La tua attività in background \"{preview}\" si è interrotta prima di terminare. Invia di nuovo /bg per riprovare, oppure /agents per vedere cosa è ancora in esecuzione."
final_output: "{header}\n\nOutput finale:\n```\n{output}\n```"
still_running: "⏳ Attività in background ancora in esecuzione"
recent_output: "{header}\n\nOutput recente:\n```\n{output}\n```"
btw:
usage: "Uso: /btw <domanda>\nEsempio: /btw in quale file era quell'errore?\n\nRisponde a una rapida domanda su questa conversazione senza interromperla. Per un'attività in background indipendente usa /bg <prompt>."
no_history: "Nessuna conversazione ancora — invia la domanda come messaggio normale."
no_provider: "❌ Impossibile rispondere: nessuna credenziale del provider configurata."
started: "💬 Domanda a margine: \"{preview}\"\nRispondo da uno snapshot di questa conversazione — il lavoro attuale continua."
answer: "💬 /btw: \"{preview}\"\n\n{answer}"
failed: "❌ /btw non riuscito: \"{preview}\"\n{error}"
branch:
db_unavailable: "Database delle sessioni non disponibile."
no_conversation: "Nessuna conversazione da diramare — invia prima un messaggio."
create_failed: "Creazione del ramo non riuscita: {error}"
switch_failed: "Ramo creato ma il passaggio ad esso non è riuscito."
branched_one: "⑂ Diramato in **{title}** ({count} messaggio copiato)\nOriginale: `{parent}`\nRamo: `{new}`\nUsa `/resume` per tornare all'originale."
branched_many: "⑂ Diramato in **{title}** ({count} messaggi copiati)\nOriginale: `{parent}`\nRamo: `{new}`\nUsa `/resume` per tornare all'originale."
branched_thread_one: "⑂ Ramificato in **{title}** in un nuovo thread ({count} messaggio copiato)\nThread: {thread}\nOriginale: `{parent}` — questa chat resta su di esso\nRamo: `{new}`\nUsa `/branch --here` per ramificare in questa chat."
branched_thread_many: "⑂ Ramificato in **{title}** in un nuovo thread ({count} messaggi copiati)\nThread: {thread}\nOriginale: `{parent}` — questa chat resta su di esso\nRamo: `{new}`\nUsa `/branch --here` per ramificare in questa chat."
thread_fallback: "Non è stato possibile creare un thread qui, quindi il ramo ha sostituito la sessione di questa chat."
commands:
usage: "Uso: `/commands [page]`"
skill_header: "⚡ **Comandi skill**:"
default_desc: "Comando skill"
none: "Nessun comando disponibile."
header: "📚 **Comandi** ({total} totali, pagina {page}/{total_pages})"
nav_prev: "`/commands {page}` ← prec"
nav_next: "succ → `/commands {page}`"
out_of_range: "_(La pagina richiesta {requested} è fuori intervallo, mostrando la pagina {page}.)_"
compress:
not_enough: "Conversazione insufficiente da comprimere (servono almeno 4 messaggi)."
no_provider: "Nessun provider configurato — impossibile comprimere."
nothing_to_do: "Niente da comprimere per ora (la trascrizione è ancora tutta contesto protetto)."
aggressive_unsupported: "--aggressive non è supportato; usa '/compress here [N]' per conservare solo gli scambi recenti, oppure /undo per rimuovere i turni."
focus_line: "Focus: \"{topic}\""
summary_failed: "⚠️ Generazione del riepilogo non riuscita ({error}). {count} messaggio/i storico/i sono stati rimossi e sostituiti con un segnaposto; il contesto precedente non è più recuperabile. Considera di controllare la configurazione del modello auxiliary.compression."
aborted: "⚠️ Compressione interrotta ({error}). Nessun messaggio è stato eliminato — la conversazione è invariata. Esegui /compress per riprovare, /reset per una nuova sessione, o controlla la configurazione del modello auxiliary.compression."
aux_failed: "ℹ️ Il modello di compressione configurato `{model}` non è riuscito ({error}). Recupero effettuato usando il modello principale — il contesto è intatto — ma potresti voler controllare `auxiliary.compression.model` in config.yaml."
turnhold_deferred: "ℹ️ Compressione del contesto rinviata — il riepilogo è ancora in streaming. Si continua senza compressione per questo turno."
failed: "Compressione non riuscita: {error}"
hygiene_timeout: "⚠️ Accorciare la cronologia della conversazione ha richiesto troppo tempo, quindi ho saltato il passaggio e mantenuto tutto com'è. Esegui /compress per riprovare o /new per ricominciare da zero."
hygiene_timeout_doctor_hint: " Se il problema si ripete, esegui `hermes doctor` sull'host."
hygiene_failed: "⚠️ Accorciare la cronologia della conversazione non è riuscito, quindi ho mantenuto tutto com'è. Esegui /compress per riprovare o /new per ricominciare da zero. Se il problema si ripete, esegui `hermes doctor` sull'host."
codex_nothing: "🗜️ Niente da compattare: questa sessione usa il runtime app-server di Codex, il cui contesto vive in un thread gestito da Codex che esiste solo mentre l'agente è attivo. Invia prima un messaggio, poi /compress — oppure /reset per ricominciare da zero."
codex_compacted: "🗜️ Thread dell'app-server Codex compattato (thread/compact). La copia della trascrizione resta invariata per design — ora è l'app-server a contenere il contesto compattato."
codex_incomplete: "⚠️ La compattazione dell'app-server Codex non è stata completata — il thread è invariato. Controlla i log dell'app-server, riprova /compress oppure usa /reset per una sessione pulita."
debug:
upload_failed: "✗ Caricamento del report di debug non riuscito: {error}"
header: "**Report di debug caricato:**"
auto_delete: "⏱ I paste verranno eliminati automaticamente tra 6 ore."
full_logs_hint: "Per il caricamento dei log completi, usa `hermes debug share` dalla CLI."
share_hint: "Condividi questi link con il team Hermes per ricevere supporto."
report_label: "Report"
deny:
stale: "❌ Comando negato (l'approvazione era obsoleta)."
no_pending: "Nessun comando in attesa da negare."
denied_singular: "❌ Comando negato."
denied_plural: "❌ Comandi negati ({count} comandi)."
denied_reason_singular: "❌ Comando negato. Motivo inoltrato all'agente: \"{reason}\""
denied_reason_plural: "❌ Comandi negati ({count} comandi). Motivo inoltrato all'agente: \"{reason}\""
fast:
not_supported: "⚡ /fast è disponibile solo per i modelli OpenAI che supportano Priority Processing."
status: "⚡ Priority Processing\n\nModalità attuale: `{mode}`\n\n_Uso:_ `/fast <normal|fast|status>`"
unknown_arg: "⚠️ Argomento sconosciuto: `{arg}`\n\n**Opzioni valide:** normal, fast, status"
saved: "⚡ ✓ Priority Processing: **{label}** (salvato nella configurazione)\n_(verrà applicato al prossimo messaggio)_"
session_only: "⚡ ✓ Priority Processing: **{label}** (solo per questa sessione)"
label_fast: "VELOCE"
label_normal: "NORMALE"
status_fast: "veloce"
status_normal: "normale"
picker_title: "⚡ **Priority Processing**\n\nModalità attuale: `{mode}`\n\nScegli un\\'opzione:"
choice_fast: "fast — Priority Processing attivo"
choice_normal: "normal — elaborazione standard"
choice_auto: "auto — veloce nei primi secondi di ogni turno"
choice_cold: "cold — veloce solo nel primo turno di una sessione"
choice_ultrafast: "ultrafast — OpenAI Ultrafast (GPT-6 Astra, prezzo x6)"
ultrafast_not_supported: "⚡ Ultrafast è disponibile solo per GPT-6 Astra (modello attuale: `{model}`)."
footer:
status: "📎 Footer di runtime: **{state}**\nCampi: `{fields}`\nPiattaforma: `{platform}`"
usage: "Uso: `/footer [on|off|status]`"
saved: "📎 Footer di runtime: **{state}**{example}\n_(salvato globalmente — verrà applicato al prossimo messaggio)_"
example_line: "\nEsempio: `{preview}`"
state_on: "ATTIVO"
state_off: "DISATTIVO"
goal:
unavailable: "Gli obiettivi non sono disponibili in questa sessione."
no_goal_set: "Nessun obiettivo impostato."
paused: "⏸ Obiettivo in pausa: {goal}"
no_resume: "Nessun obiettivo da riprendere."
resumed: "▶ Obiettivo ripreso: {goal}\nContinuo subito — farò immediatamente il prossimo passo."
invalid: "Obiettivo non valido: {error}"
set: "⊙ Obiettivo impostato (budget di {budget} turni): {goal}\nContinuerò a lavorare finché l'obiettivo non sarà completato, lo metterai in pausa/lo cancellerai, oppure il budget sarà esaurito.\nControlli: /goal status · /goal pause · /goal resume · /goal clear"
gate_add_admin_only: "⛔ /goal gate add richiede un admin del gateway configurato esplicitamente (allow_admin_from per i DM, group_allow_admin_from per i gruppi)."
help:
header: "📖 **Comandi Hermes**\n"
skill_header: "\n⚡ **Comandi skill** ({count} attivi):"
more_use_commands: "\n... e altri {count}. Usa `/commands` per la lista paginata completa."
insights:
invalid_days: "Valore --days non valido: {value}"
error: "Errore nella generazione degli insight: {error}"
kanban:
error_prefix: "⚠ errore kanban: {error}"
subscribed_suffix: "(iscritto — riceverai notifica quando {task_id} verrà completato o si bloccherà)"
truncated_suffix: "… (troncato; usa `hermes kanban …` nel terminale per l'output completo)"
no_output: "(nessun output)"
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} completato — {title}{handoff}"
review_requested: "👀 {head} pronto per la revisione — {title}{handoff}"
changes_default_reason: "il feedback del revisore richiede modifiche"
reviewer_suffix: " — revisore @{reviewer}"
implementer_suffix: " → implementatore @{implementer}"
changes_requested: "🛑 {board_tag}Kanban {task_id}: la revisione ha richiesto modifiche/BLOCK: {reason}{provenance}"
triage: "🛑 {head} inviato a TRIAGE — {why}{recurrences}{reason}"
triage_decision: "richiede una decisione umana"
triage_attention: "richiede l'attenzione dell'orchestrazione"
triage_recurrences: " (bloccato {value} volte per la stessa causa)"
reason_suffix: ": {value}"
failed_n_times: "è fallito {count} volte di seguito"
kept_failing: "ha continuato a fallire"
last_error: " (ultimo: {value})"
gave_up: "⛔ {head} è ora bloccato: {count}{last}. Correggi la causa, poi `hermes kanban unblock {task_id}` (oppure `hermes kanban reassign {task_id}`). Log: `hermes kanban log {task_id}`."
limit_minutes: "il suo limite di {minutes} minuti"
limit_generic: "il suo limite di tempo"
timed_out: "⏱ {head} ha superato {span} ed è stato interrotto; verrà ritentato automaticamente."
blocked: "⏸ {head} bloccato{reason}"
crashed: "✖ {head} — il suo worker si è arrestato in modo imprevisto; verrà ritentato automaticamente."
status: "🔄 {head} → {status}"
board_tag: "[{board}] "
assignee_tag: "@{assignee} "
head: "{board_tag}{assignee_tag}Kanban {task_id}"
personality:
none_configured: "Nessuna personalità configurata in `{path}/config.yaml`"
header: "🎭 **Personalità disponibili**\n"
none_option: "• `none` — (nessun overlay di personalità)"
item: "• `{name}` — {preview}"
usage: "\nUso: `/personality <name>`"
save_failed: "⚠️ Salvataggio del cambio di personalità non riuscito: {error}"
cleared: "🎭 Personalità cancellata — uso il comportamento base dell'agente.\n_(verrà applicato al prossimo messaggio)_"
set_to: "🎭 Personalità impostata su **{name}**\n_(verrà applicato al prossimo messaggio)_"
unknown: "Personalità sconosciuta: `{name}`\n\nDisponibili: {available}"
err_config_write: "scrittura della configurazione non riuscita"
profile:
header: "👤 **Profilo:** `{profile}`"
home: "📂 **Home:** `{home}`"
plain: "Profilo: {profile}\nHome: {home}"
reasoning:
level_default: "medio (predefinito)"
level_disabled: "nessuno (disattivato)"
scope_session: "override di sessione"
scope_global: "configurazione globale"
status: "🧠 **Impostazioni di reasoning**\n\n**Sforzo:** `{level}`\n**Ambito:** {scope}\n**Visualizzazione:** {display}\n\n_Uso:_ `/reasoning <none|minimal|low|medium|high|xhigh|max|ultra|reset|show|hide> [--global]`"
display_on: "attivo ✓"
display_off: "disattivato"
display_set_on: "🧠 ✓ Visualizzazione del reasoning: **ATTIVA**\nIl pensiero del modello verrà mostrato prima di ogni risposta su **{platform}**."
display_set_off: "🧠 ✓ Visualizzazione del reasoning: **DISATTIVATA** per **{platform}**"
reset_global_unsupported: "⚠️ `/reasoning reset --global` non è supportato. Usa `/reasoning <level> --global` per cambiare il valore predefinito globale."
reset_done: "🧠 ✓ Override di reasoning della sessione cancellato; ripristino della configurazione globale."
unknown_arg: "⚠️ Argomento sconosciuto: `{arg}`\n\n**Livelli validi:** none, minimal, low, medium, high, xhigh, max, ultra\n**Visualizzazione:** show, hide\n**Persistenza:** aggiungi `--global` per salvare oltre questa sessione"
picker_title: "🧠 **Impostazioni di reasoning**\n\n**Sforzo:** `{level}`\n**Ambito:** {scope}\n**Visualizzazione:** {display}\n\nScegli un\\'opzione:"
choice_none: "none — disattiva il reasoning"
choice_reset: "reset — cancella l'override di sessione"
choice_show: "mostra il reasoning nelle risposte"
choice_hide: "nascondi il reasoning dalle risposte"
set_global: "🧠 ✓ Sforzo di reasoning impostato su `{effort}` (salvato nella configurazione)\n_(verrà applicato al prossimo messaggio)_"
set_global_save_failed: "🧠 ✓ Sforzo di reasoning impostato su `{effort}` (solo per questa sessione — salvataggio della configurazione non riuscito)\n_(verrà applicato al prossimo messaggio)_"
set_session: "🧠 ✓ Sforzo di reasoning impostato su `{effort}` (solo per questa sessione — aggiungi `--global` per renderlo permanente)\n_(verrà applicato al prossimo messaggio)_"
quote_label_discord: "-# 💭 Ragionamento"
quote_label_md: "> 💭 **Ragionamento:**"
more_lines: "\n_... ({count} altre righe)_"
block: "💭 **Ragionamento:**\n```\n{reasoning}\n```\n\n{response}"
reload_mcp:
cancelled: "🟡 /reload-mcp annullato. Strumenti MCP invariati."
always_followup: "ℹ️ Le future chiamate a `/reload-mcp` verranno eseguite senza conferma. Riattiva tramite `approvals.mcp_reload_confirm: true` in config.yaml."
confirm_prompt: "⚠️ **Conferma /reload-mcp**\n\nIl ricaricamento dei server MCP ricostruisce il set di strumenti per questa sessione e **invalida la cache dei prompt del provider** — il prossimo messaggio invierà nuovamente tutti i token di input. Sui modelli a contesto lungo o ad alto reasoning questo può essere costoso.\n\nScegli:\n• **Approva una volta** — ricarica ora\n• **Approva sempre** — ricarica ora e silenzia questa richiesta in modo permanente\n• **Annulla** — lascia gli strumenti MCP invariati\n\n_Alternativa testuale: rispondi `/approve`, `/always`, oppure `/cancel`._"
header: "🔄 **Server MCP ricaricati**\n"
reconnected: "♻️ Riconnessi: {names}"
added: "➕ Aggiunti: {names}"
removed: "➖ Rimossi: {names}"
none_connected: "Nessun server MCP connesso."
tools_available: "\n🔧 {tools} strumento/i disponibile/i da {servers} server"
failed: "❌ Ricaricamento MCP non riuscito: {error}"
reload_skills:
header: "🔄 **Skill ricaricate**\n"
no_new: "Nessuna nuova skill rilevata."
total: "\n📚 {count} skill disponibili"
added_header: "➕ **Skill aggiunte:**"
removed_header: "➖ **Skill rimosse:**"
item_with_desc: " - {name}: {desc}"
item_no_desc: " - {name}"
failed: "❌ Ricaricamento delle skill non riuscito: {error}"
reset:
header_default: "✨ Sessione reimpostata! Si ricomincia da zero."
header_new: "✨ Nuova sessione avviata!"
header_titled: "✨ Nuova sessione avviata: {title}"
title_rejected: "\n⚠️ Titolo rifiutato: {error}"
title_error_untitled: "\n⚠️ {error} — sessione avviata senza titolo."
title_empty_untitled: "\n⚠️ Il titolo è vuoto dopo la pulizia — sessione avviata senza titolo."
tip: "\n✦ Suggerimento: {tip}"
restart:
in_progress: "⏳ Riavvio del gateway già in corso..."
restarting: "♻ Riavvio del gateway. Se non ricevi una notifica entro 60 secondi, riavvia dalla console con `hermes gateway restart`."
resume:
db_unavailable: "Database delle sessioni non disponibile."
parse_error: "⚠️ Could not parse `/resume` arguments: {error}. Use quotes around titles with spaces, for example: `/resume \"Project A Plan\"`."
matrix_no_named_sessions: "No named sessions found for this Matrix room. Use `/title My Session` to name the current room session, `/resume --all` to list all Matrix sessions, or `/resume --cross-room <session name>` to explicitly cross room boundaries."
matrix_blocked_no_origin: "⚠️ /resume Matrix bloccato: questa sessione con nome non ha una stanza di origine registrata, quindi per impostazione predefinita Hermes non la riprenderà nella stanza attuale. Usa `/resume --cross-room {name}` se vuoi davvero superare i confini della stanza."
matrix_blocked_other_room: "⚠️ /resume Matrix bloccato: quella sessione appartiene a un'altra stanza Matrix ({room}). Usa `/resume --cross-room {name}` se vuoi davvero riprenderla qui."
matrix_cross_room_success: "⚠️ Cross-room resume: resumed **{title}** inside Matrix room **{room}**. Future messages in this room will use that transcript until `/reset` or another `/resume`.{msg_part}"
blocked_not_owner: "⚠️ /resume bloccato: '**{name}**' appartiene a un altro utente o a un'altra chat. Puoi riprendere solo le sessioni di questa chat."
no_named_sessions: "Nessuna sessione con nome trovata.\nUsa `/title My Session` per dare un nome alla sessione attuale, poi `/resume My Session` per tornare a essa in seguito."
all_requires_admin: "_Nota: `--all` (elenco tra chat) richiede un amministratore configurato; vengono mostrate solo le sessioni di questa chat._"
list_header: "📋 **Sessioni con nome**\n"
list_item: "• **{title}**{preview_part}"
list_item_numbered: "{index}. **{title}**{preview_part}"
list_preview_suffix: " — _{preview}_"
list_footer: "\nUso: `/resume <session name>`"
list_footer_numbered: "\nUso: `/resume <nome sessione>` o `/resume <numero>` (es. `/resume 1` per la più recente)"
list_failed: "Impossibile elencare le sessioni: {error}"
out_of_range: "L'indice di ripresa {index} è fuori intervallo.\nUsa `/resume` senza argomenti per vedere le sessioni disponibili."
not_found: "Nessuna sessione trovata corrispondente a '**{name}**'.\nUsa `/resume` senza argomenti per vedere le sessioni disponibili."
already_on: "📌 Già nella sessione **{name}**."
switch_failed: "Cambio di sessione non riuscito."
resumed_one: "↻ Sessione **{title}** ripresa ({count} messaggio). Conversazione ripristinata."
resumed_many: "↻ Sessione **{title}** ripresa ({count} messaggi). Conversazione ripristinata."
resumed_no_count: "↻ Sessione **{title}** ripresa. Conversazione ripristinata."
msg_count_one: " ({count} messaggio)"
msg_count_other: " ({count} messaggi)"
retry:
no_previous: "Nessun messaggio precedente da ripetere."
unsafe: "Impossibile riprovare quel messaggio in sicurezza: {error}"
failed_unchanged: "Nuovo tentativo non riuscito; la trascrizione non è stata modificata."
rollback:
not_enabled: "I checkpoint non sono abilitati.\nAbilitali in config.yaml:\n```\ncheckpoints:\n enabled: true\n```"
none_found: "Nessun checkpoint trovato per {cwd}"
invalid_number: "Numero di checkpoint non valido. Usa 1-{max}."
restored: "✅ Ripristinato al checkpoint {hash}: {reason}\nUno snapshot pre-rollback è stato salvato automaticamente."
kept_user_edits: "↷ Le tue modifiche manuali sono state conservate: {files}\nUsa /rollback <N> --all per ripristinare anche quelle."
kept_oversize: "↷ Conservato (troppo grande per i checkpoint, nessuna copia salvata a cui tornare): {files}"
failed_deletes: "⚠️ Impossibile rimuovere (lasciato al suo posto): {files}"
restore_failed: "❌ {error}"
diff:
not_enabled: "I checkpoint non sono abilitati, quindi non esiste una baseline di sessione.\nAbilitali in config.yaml:\n```\ncheckpoints:\n enabled: true\n```\nIl /diff semplice funziona comunque — usa git direttamente."
no_changes: "Nessuna modifica."
failed: "{error}"
err_default: "Impossibile generare il diff"
more_untracked: "\n... e altri {count}"
untracked_label: "**Non tracciati:**"
truncated_note: "\n... (troncato — {lines} righe in totale; usa /diff --stat per un riepilogo)"
set_home:
save_failed: "Salvataggio del canale home non riuscito: {error}"
success: "✅ Canale home impostato su **{name}** (ID: {chat_id}).\nI cron job e i messaggi cross-platform verranno consegnati qui."
err_missing_platform: "Piattaforma logica mancante"
err_relay_unauthenticated: "Il relay non autentica questa destinazione home logica"
context:
header: "🧠 **Finestra di contesto**"
model: "Modello: `{model}`"
window: "Finestra: {total} token"
in_use: "In uso: {used} / {total} ({pct}%)"
bar: "{bar}"
headroom: "Margine fino al limite: {headroom} token"
threshold: "Compressione automatica a: {threshold} ({threshold_pct}%) — mancano {to_go}"
over_threshold: "⚠️ **Oltre la soglia di compressione automatica ({threshold}, {threshold_pct}%)**"
compressions: "Compressioni in questa sessione: {count}"
last_savings: "Ultima compressione ha liberato: {savings}% del contesto"
totals_header: "Totali della sessione (cumulativi su {calls} chiamate API)"
totals_line: "Input {input} · Output {output} · Ragionamento {reasoning}"
total_billed: "Totale fatturato: {total}"
throughput_note: "_Traffico complessivo, non dimensione del contesto — ogni chiamata reinvia l'intera finestra indicata sopra._"
estimated: "Contesto stimato: ~{count} token su {messages} messaggi"
detail_after_first: "_(Le statistiche complete di compressione e traffico saranno disponibili dopo la prima risposta dell'agente)_"
no_data: "Nessun dato sul contesto disponibile per ora. Invia un messaggio per avviare una sessione."
category:
system_prompt: "Prompt di sistema"
tool_definitions: "Definizioni degli strumenti"
rules: "Regole"
skills: "Skill"
mcp: "MCP"
subagent_definitions: "Definizioni dei subagenti"
memory: "Memoria"
conversation: "Conversazione"
category_header: "Utilizzo stimato per categoria"
no_data_yet: " (ancora nessun dato — invia prima un messaggio)"
free_space: "Spazio libero"
category_row: "{glyph} {label} ~{tokens} token ~{pct}%"
toolset_row: " {toolset} {count} strumenti ~{tokens} token"
not_available: "n/d"
skill_row: " {name} indice ~{index_tokens} SKILL.md {md_tokens} token"
and_more: " … e altri {count}"
toolsets_title: "Toolset per costo dello schema (dal più grande)"
skills_title: "Skill per costo (indice = sempre attivo; SKILL.md = costo quando caricata)"
window_line: "Finestra di contesto: {mark}{used} / {max} token ({mark}{pct}%)"
source:
local_estimate: "stima locale"
provider_usage: "utilizzo del provider"
provider_usage_plus_estimate: "utilizzo del provider + stima dei nuovi messaggi"
source_line: "Fonte: {source}; i conteggi per categoria sono stime locali."
hint_all: "Usa /context all per i costi per skill e per toolset."
status:
header: "📊 **Stato del Gateway Hermes**"
matrix_scope_header: "**Ambito 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 sessione:** `{session_id}`"
title: "**Titolo:** {title}"
created: "**Creata:** {timestamp}"
last_activity: "**Ultima attività:** {timestamp}"
model: "**Modello:** `{model}`"
model_provider: "**Modello:** `{model}` ({provider})"
free_tier: "Nous · piano gratuito · nous/welcome · /login per accedere"
context: "**Contesto:** {used} / {total} ({pct}%)"
context_used: "**Contesto:** ~{used} token"
tokens: "**Token fatturati in totale:** {tokens} _(non è la dimensione attuale del contesto; usa `/context`)_"
agent_running: "**Agente in esecuzione:** {state}"
state_yes: "Sì ⚡"
state_no: "No"
queued: "**Follow-up in coda:** {count}"
platforms: "**Piattaforme connesse:** {platforms}"
stop:
stopped_pending: "⚡ Fermato. L'agente non era ancora partito — puoi continuare questa sessione."
stopped: "⚡ Fermato. Puoi continuare questa sessione."
no_active: "Nessuna attività attiva da fermare."
force_stopped_pending: "⚡ Interruzione forzata. L'agente si stava ancora avviando — sessione sbloccata."
title:
db_unavailable: "Database delle sessioni non disponibile."
warn_prefix: "⚠️ {error}"
empty_after_clean: "⚠️ Il titolo è vuoto dopo la pulizia. Usa caratteri stampabili."
set_to: "✏️ Titolo della sessione impostato: **{title}**"
not_found: "Sessione non trovata nel database."
current_with_title: "📌 Sessione: `{session_id}`\nTitolo: **{title}**"
current_no_title: "📌 Sessione: `{session_id}`\nNessun titolo impostato. Uso: `/title My Session Name`"
topic:
not_telegram_dm: "Il comando /topic è disponibile solo nelle chat private di Telegram."
no_session_db: "Database delle sessioni non disponibile."
unauthorized: "Non sei autorizzato a usare /topic su questo bot."
restore_needs_topic: "Per ripristinare una sessione, crea o apri prima un topic Telegram, poi invia /topic <session-id> all'interno di quel topic. Per creare un nuovo topic, apri All Messages e invia un messaggio qualsiasi lì."
topics_disabled: "I topic Telegram non sono ancora abilitati per questo bot.\n\nCome abilitarli:\n1. Apri @BotFather.\n2. Scegli il tuo bot.\n3. Apri Bot Settings → Threads Settings.\n4. Attiva la modalità Threaded e assicurati che gli utenti possano creare nuovi thread.\n\nPoi invia di nuovo /topic."
topics_user_disallowed: "I topic Telegram sono abilitati, ma agli utenti non è permesso crearne.\n\nApri @BotFather → scegli il tuo bot → Bot Settings → Threads Settings, poi disattiva 'Disallow users to create new threads'.\n\nPoi invia di nuovo /topic."
enable_failed: "Abilitazione della modalità topic Telegram non riuscita: {error}"
bound_status: "Questo topic è collegato a:\nSessione: {label}\nID: {session_id}\n\nUsa /new per sostituire questo topic con una nuova sessione.\nPer lavorare in parallelo, apri All Messages e invia un messaggio lì per creare un altro topic."
thread_ready: "I topic multi-sessione di Telegram sono abilitati.\n\nQuesto topic verrà usato come una sessione Hermes indipendente. Usa /new per sostituire la sessione corrente di questo topic. Per lavorare in parallelo, apri All Messages e invia un messaggio lì per creare un altro topic."
untitled_session: "Sessione senza titolo"
restore_step_1: "1. Crea o apri un topic. Per crearne uno nuovo, apri Tutti i messaggi e invia lì un messaggio qualsiasi."
restore_step_2: "2. Invia /topic <session-id> dentro quel topic."
default_title: "Chat Hermes"
root_lobby: "Questa chat principale è riservata ai comandi di sistema.\n\nPer avviare una nuova chat Hermes, apri il topic Tutti i messaggi in alto nell'interfaccia del bot e invia lì un messaggio qualsiasi. Telegram creerà un nuovo topic per quel messaggio; ogni topic funziona come sessione Hermes indipendente."
root_new: "Per avviare una nuova chat Hermes parallela, apri il topic Tutti i messaggi in alto nell'interfaccia del bot e invia lì un messaggio qualsiasi. Telegram creerà un nuovo topic per quel messaggio.\n\nOgni topic è una sessione Hermes indipendente. Usa /new dentro un topic esistente solo se vuoi sostituire la sessione attuale di quel topic."
new_header: "Avviata una nuova sessione Hermes in questo topic.\n\nSuggerimento: per lavorare in parallelo, apri Tutti i messaggi e invia lì un messaggio per creare un topic separato, invece di usare /new qui. /new sostituisce la sessione collegata al topic attuale."
help: "/topic — attiva la modalità DM multi-sessione (un bot, tante chat parallele)\n\nUtilizzo:\n /topic Attiva la modalità topic, o mostra lo stato se è già attiva\n /topic help Mostra questo messaggio\n /topic off Disattiva la modalità topic e rimuove i collegamenti ai topic\n /topic <id> Dentro un topic: ripristina una sessione precedente tramite ID\n\nCome funziona:\n1. Esegui /topic una volta in questa DM — Hermes verifica che i Threads\n Settings di BotFather siano attivi e abilita la modalità multi-sessione.\n2. Tocca Tutti i messaggi in alto nel bot e invia un messaggio qualsiasi.\n Telegram crea un nuovo topic per quel messaggio; ogni topic è una\n sessione Hermes indipendente (cronologia e contesto nuovi).\n3. La DM principale diventa una lobby di sistema — invia lì /topic, /status,\n /help, /usage. I prompt normali vanno in un topic.\n4. /new dentro un topic reimposta solo la sessione di quel topic.\n5. /topic <id> dentro un topic vi ripristina una sessione precedente."
system_topic_name: "Sistema"
system_topic_intro: "Topic di sistema per comandi e stato di Hermes."
setup_image_caption: "BotFather → Bot Settings → Threads Settings"
no_chat_id: "Impossibile determinare l'ID della chat."
mode_not_enabled: "La modalità topic multi-sessione non è attualmente attiva per questa chat."
disable_failed: "Impossibile disattivare la modalità topic: {error}"
mode_disabled: "La modalità topic multi-sessione è ora OFF per questa chat.\n\nI topic esistenti in Telegram non vengono rimossi — semplicemente non saranno più gestiti come sessioni indipendenti. La DM principale torna a funzionare come normale chat Hermes. Esegui /topic per riattivarla in seguito."
status_enabled: "I topic multi-sessione di Telegram sono attivi."
status_how_to: "Per creare una nuova chat Hermes, apri Tutti i messaggi in alto nell'interfaccia del bot e invia lì un messaggio qualsiasi. Telegram creerà un nuovo topic per quel messaggio."
previous_unlinked: "Sessioni precedenti non collegate:"
restore_one: "Per ripristinarne una:"
restore_example: "Esempio: invia /topic {session_id} dentro un topic."
no_unlinked: "Nessuna sessione Telegram precedente non collegata trovata."
restore_later: "Per ripristinare una sessione precedente in seguito:"
session_not_found: "Sessione non trovata: {session_id}"
not_telegram_session: "Quella sessione non è una sessione Telegram e non può essere ripristinata in questo topic."
not_your_session: "Quella sessione non appartiene a questo utente Telegram."
already_linked: "Quella sessione è già collegata a un altro topic Telegram."
restored: "Sessione ripristinata: {title}"
restored_last_message: "\n\nUltimo messaggio di Hermes:\n{text}"
undo:
nothing: "Niente da annullare."
removed: "↩️ Annullati {turns} turno/i ({count} messaggio/i).\nSalvato in: \"{preview}\"\nCopia/modifica il testo qui sopra e invialo per ripartire da qui."
invalid_count: "Conteggio non valido \"{arg}\" — usa /undo o /undo N."
update:
platform_not_messaging: "✗ /update è disponibile solo dalle piattaforme di messaggistica. Esegui `hermes update` dal terminale."
not_git_repo: "✗ Non è un repository git — impossibile aggiornare."
hermes_cmd_not_found: "✗ Impossibile localizzare il comando `hermes`. Hermes è in esecuzione, ma il comando di aggiornamento non ha trovato l'eseguibile nel PATH o tramite l'interprete Python attuale. Prova a eseguire `hermes update` manualmente nel terminale."
start_failed: "✗ Avvio dell'aggiornamento non riuscito: {error}"
starting: "☤ Avvio dell'aggiornamento di Hermes… mostrerò qui i progressi in streaming."
reply_failed: "✗ Impossibile inviare la risposta al processo di aggiornamento: {error}"
reply_sent: "✓ Inviato `{label}` al processo di aggiornamento."
failed_notice: "❌ Aggiornamento di Hermes non riuscito; la versione precedente è ancora in esecuzione. Esegui `hermes update` sull'host per vedere l'errore completo, oppure riprova /update più tardi."
prompt_default: " (predefinito: {default})"
prompt: "☤ **L'aggiornamento richiede il tuo input:**\n\n{prompt}{default_hint}\n\nRispondi `{prefix}approve` (sì) o `{prefix}deny` (no), oppure digita direttamente la tua risposta."
finished: "✅ Aggiornamento di Hermes completato."
timed_out: "❌ Aggiornamento di Hermes scaduto dopo 30 minuti."
finished_success: "✅ Aggiornamento di Hermes completato con successo."
last_lines: "{msg}\n\nUltime righe:\n```\n{tail}\n```"
managed_action: "aggiornare Hermes Agent"
not_applicable: "✗ `hermes update` non si applica a questa installazione ({method}).\nAggiorna con: {command}"
usage:
rate_limits: "⏱️ **Limiti di frequenza:** {state}"
header_session: "📊 **Uso dei token della sessione**"
label_model: "Modello: `{model}`"
label_input_tokens: "Token di input: {count}"
label_cache_read: "Token di lettura cache: {count}"
label_cache_write: "Token di scrittura cache: {count}"
label_output_tokens: "Token di output: {count}"
label_total: "Totale: {count}"
label_api_calls: "Chiamate API: {count}"
label_cost: "Costo: {prefix}${amount}"
label_cost_included: "Costo: incluso"
label_context: "Contesto: {used} / {total} ({pct}%)"
label_compressions: "Compressioni: {count}"
breakdown_header: "🧩 **Suddivisione del contesto** _(stimata)_"
breakdown_line: "• {label}: ~{count} ({pct}%)"
breakdown_cat_system_prompt: "Prompt di sistema"
breakdown_cat_tool_definitions: "Definizioni degli strumenti"
breakdown_cat_rules: "Regole"
breakdown_cat_skills: "Competenze"
breakdown_cat_mcp: "MCP"
breakdown_cat_subagent_definitions: "Definizioni dei subagenti"
breakdown_cat_memory: "Memoria"
breakdown_cat_conversation: "Conversazione"
header_session_info: "📊 **Info sessione**"
label_messages: "Messaggi: {count}"
label_estimated_context: "Contesto stimato: ~{count} token"
detailed_after_first: "_(L'uso dettagliato sarà disponibile dopo la prima risposta dell'agente)_"
no_data: "Nessun dato di utilizzo disponibile per questa sessione."
unknown_subcommand: "Sottocomando /usage sconosciuto: `{args}`. Prova `/usage` o `/usage reset [--force]`."
reset_wrong_provider: "I reset dei limiti accumulati sono disponibili solo con il provider openai-codex. Cambia prima con `/model`."
credits:
not_logged_in: "Non hai effettuato l'accesso a Nous Portal. Accedi per vedere il saldo dei crediti e ricaricare."
verbose:
not_enabled: "Il comando `/verbose` non è abilitato per le piattaforme di messaggistica.\n\nAbilitalo in `config.yaml`:\n```yaml\ndisplay:\n tool_progress_command: true\n```"
mode_off: "⚙️ Progresso strumenti: **OFF** — nessuna attività degli strumenti mostrata."
mode_new: "⚙️ Progresso strumenti: **NEW** — mostrato quando lo strumento cambia (lunghezza anteprima: `display.tool_preview_length`, predefinito 40)."
mode_all: "⚙️ Progresso strumenti: **ALL** — ogni chiamata a uno strumento viene mostrata (lunghezza anteprima: `display.tool_preview_length`, predefinito 40)."
mode_verbose: "⚙️ Progresso strumenti: **VERBOSE** — ogni chiamata a uno strumento con argomenti completi."
mode_log: "⚙️ Progresso strumenti: **LOG** — silenzioso in chat; le chiamate agli strumenti vengono scritte in ~/.hermes/logs/tool_calls.log."
saved_suffix: "_(salvato per **{platform}** — verrà applicato al prossimo messaggio)_"
save_failed: "_(impossibile salvare nella configurazione: {error})_"
voice:
enabled_voice_only: "Modalità vocale attivata.\nRisponderò con la voce quando invii messaggi vocali.\nUsa /voice tts per ricevere risposte vocali per tutti i messaggi."
disabled_text: "Modalità vocale disattivata. Risposte solo testuali."
tts_enabled: "Auto-TTS attivato.\nTutte le risposte includeranno un messaggio vocale."
status_mode: "Modalità vocale: {label}"
status_channel: "Canale vocale: #{channel}"
status_participants: "Partecipanti: {count}"
status_member: " - {name}{status}"
speaking: " (sta parlando)"
enabled_short: "Modalità vocale attivata."
disabled_short: "Modalità vocale disattivata."
label_off: "Off (solo testo)"
label_voice_only: "On (risposta vocale ai messaggi vocali)"
label_all: "TTS (risposta vocale a tutti i messaggi)"
help: "{toggle}\n\n**Come funziona /voice**\n• `/voice on` — risposta vocale quando invii un messaggio vocale\n• `/voice tts` — risposta vocale a *ogni* messaggio\n• `/voice off` — torna alle risposte solo testo\n• `/voice status` — mostra la modalità attuale\n• `/voice` (senza argomento) — alterna rapidamente tra attivo e disattivo{channels}"
help_channels: "\n\n**Canali vocali dal vivo (Discord)**\n• Entra prima in un canale vocale, poi `/voice channel` — mi unisco, ascolto e parlo le mie risposte\n• `/voice leave` — disconnetti dal canale vocale"
transcript_echo_short: "🎙️ \"{text}\""
channel_unsupported: "I canali vocali non sono supportati su questa piattaforma."
channel_guild_only: "Questo comando funziona solo in un server Discord."
channel_not_in_voice: "Devi prima entrare in un canale vocale."
channel_join_failed: "Impossibile entrare nel canale vocale: {error}"
channel_deps_missing: "Mancano le dipendenze vocali (PyNaCl / davey). Esegui: `{hint}`"
channel_join_permissions: "Impossibile entrare nel canale vocale. Controlla i permessi del bot (Connetti + Parla)."
channel_joined: "Sono entrato nel canale vocale **{name}**.\nPronuncerò le mie risposte e ti ascolterò. Usa /voice leave per disconnetterti."
channel_not_joined: "Non sono in un canale vocale."
channel_left: "Ho lasciato il canale vocale."
transcript_echo: "**[Voce]** <@{user}>: {text}"
yolo:
disabled: "⚠️ Modalità YOLO **OFF** per questa sessione — i comandi pericolosi richiederanno approvazione."
enabled: "⚡ Modalità YOLO **ON** per questa sessione — tutti i comandi auto-approvati. Usa con cautela."
shared:
session_db_unavailable: "Database delle sessioni non disponibile."
session_db_unavailable_prefix: "Database delle sessioni non disponibile"
session_not_found: "Sessione non trovata nel database."
warn_passthrough: "⚠️ {error}"
unknown_error: "errore sconosciuto"
error_prefix: "Errore: {error}"
history_unreadable: "⚠️ Al momento non riesco a leggere la cronologia di questa conversazione (i tuoi messaggi precedenti esistono ma non possono essere caricati). Esegui `hermes doctor --fix` sull'host, oppure usa /new per ricominciare da zero."
agent_running_retry_later: "L'agente è in esecuzione — attendi la fine del turno, poi usa /{command}."
none_marker: "(nessuno)"
none_value: "nessuno"
unknown_value: "sconosciuto"
exec_approval:
header: "Hermes vuole eseguire un comando che richiede il tuo OK"
reason_label: "Motivo della segnalazione"
default_reason: "comando pericoloso"
smart_deny_line: "DENY intelligente: l'override del proprietario vale solo per questa singola operazione."
smart_deny_heading: "⚠️ **DENY intelligente — override del proprietario per una sola operazione:**"
timed_out_notice: "⌛ Approvazione scaduta dopo {window} — il comando NON è stato eseguito. Chiedimi di riprovare se lo vuoi ancora, oppure aumenta approvals.timeout in config.yaml."
timed_out_card_body: "{notice}\n```\n{command}\n```"
action_once: "Consenti una volta"
action_session: "Consenti per la sessione"
action_always: "Consenti sempre"
action_deny: "Nega"
deadline: "Se non rispondi entro {window} NON verrà eseguito."
text_choice_once: "Rispondi `{prefix}approve` per eseguirlo una volta"
text_choice_session: "`{prefix}approve session` per consentire questo pattern per il resto della sessione"
text_choice_always: "`{prefix}approve always` per consentirlo in modo permanente"
text_choice_deny: "`{prefix}deny` per annullare"
text_choice_joiner: ", "
text_choice_last: ", oppure {choice}.\n"
text_body: "{heading}\n```\n{command}\n```\n{reason_label}: {reason}\n\n"
notify:
media_kind:
audio: "audio"
video: "video"
file: "file"
image: "immagine"
media_delivery_failed: "⚠️ Impossibile recapitare l'allegato {kind}."
media_delivery_failed_with_name: "⚠️ Impossibile recapitare l'allegato {kind} ({file_name})."
delivery_failed_retry: "⚠️ Invio del messaggio non riuscito dopo diversi tentativi. Riprova — la tua richiesta è stata elaborata ma la risposta non è stata inviata."
plain_fallback_prefix: "(Formattazione della risposta non riuscita, testo semplice:)\n\n{content}"
turn_error_no_details: "nessun dettaglio disponibile"
turn_error_detailed: "Mi dispiace, si è verificato un errore ({error_type}).\n{error_detail}\nRiprova oppure usa /reset per avviare una nuova sessione."
turn_error: "Mi dispiace, si è verificato un errore."
context_injection_refused: "Iniezione di contesto rifiutata."
no_home_channel: "📬 Nessun canale principale impostato per {platform}. Il canale principale è dove Hermes recapita i risultati dei cron job e i messaggi tra piattaforme.\n\nDigita {sethome_cmd} per rendere questa chat il tuo canale principale, oppure ignora questo messaggio."
unauthorized:
action_notice: "Questo bot è privato e non sei nella sua lista dei consentiti. Se è tuo, esegui `hermes pairing approve {platform} <request-id>` sull'host (`hermes pairing list` mostra l'id)."
admin_only_can_run: "Puoi eseguire: "
admin_only_whoami_hint: ". Usa /whoami per l'elenco completo."
admin_only_none: "Nessun comando slash è attivo per i non amministratori su questa piattaforma. Chiedi a un amministratore di aggiungerti ad allow_admin_from o di impostare user_allowed_commands."
admin_only: "⛔ /{command} qui è riservato agli amministratori. {suffix}"
owner_hint_env: "aggiungi l'ID a {env_var} in {home}/.env e riavvia il gateway"
owner_hint_generic: "aggiungi l'ID alla lista degli utenti consentiti di questa piattaforma e riavvia il gateway"
owner_notice: "Scartato un messaggio dall'utente {platform} non riconosciuto {who}. Se sei tu o qualcuno di cui ti fidi, {allowlist}; oppure imposta `unauthorized_dm_behavior: pair` per {platform} in {home}/config.yaml, così i mittenti sconosciuti ricevono un codice di pairing che puoi approvare con `hermes pairing approve {platform} <code>`."
picker:
page_info: " ({start}–{end} di {total})"
clarify:
hint_single: "Rispondi con il numero, il testo dell'opzione o una tua risposta."
hint_multi: "Selezione multipla consentita — rispondi con i numeri separati da virgole o spazi (es. \"1, 3\"), il testo dell'opzione o una tua risposta."
option_line: " {index}. {choice}"
question: "❓ {question}"
answered: "✅ risposta: {response}"
cancelled: "↩️ Chiarimento annullato — il tuo messaggio verrà gestito come follow-up."
expired: "⏳ Questa richiesta è scaduta — invia una nuova richiesta."
native_stream_placeholder: "💬 In attesa della tua scelta..."
skip_hint: 'Rispondi "skip" per saltare questa domanda.'
errors:
rate_limited: "⏱️ Il servizio del modello AI sta limitando le richieste. Attendi un momento, poi usa /retry."
auth_failed: "⚠️ Accesso al servizio del modello AI non riuscito. Usa /login per accedere di nuovo, oppure chiedi a chi gestisce questo bot di eseguire `hermes doctor` sull'host."
bad_request: "⚠️ Il servizio del modello AI ha rifiutato questa richiesta. Prova a riformulare il messaggio, oppure usa /model per cambiare modello."
connection_interrupted: "⚠️ La connessione al servizio del modello AI si è interrotta a metà richiesta — di solito è un problema temporaneo. Usa /retry per riprovare; se continua, esegui `hermes doctor` sull'host."
unreachable: "⚠️ Il servizio del modello AI non è raggiungibile al momento — l'endpoint del modello configurato non è in esecuzione o è irraggiungibile. Attendi un momento e usa /retry; se persiste, esegui `hermes doctor` sull'host."
connection_unknown: "⚠️ Hermes non è riuscito a raggiungere il servizio del modello AI (nessun altro dettaglio dall'SDK). Usa /retry per riprovare; se persiste, esegui `hermes doctor` sull'host."
context_overflow: "⚠️ Questa conversazione è diventata troppo lunga perché io possa leggerla tutta insieme. Usa /compress per accorciare la cronologia, oppure /new per iniziare una nuova conversazione."
usage_limit_resets: "⏱️ Il limite di utilizzo del servizio del modello AI è stato raggiunto; si azzera tra {window}. Dopo usa /retry, oppure /model per cambiare modello."
provider_kept_failing: "⚠️ Il servizio del modello AI ha continuato a fallire. Usa /retry per riprovare, oppure /model per cambiare modello. I dettagli sono nel log del gateway (`hermes logs`)."
session_storage_unavailable_disk: "⚠️ L'archiviazione della sessione era temporaneamente non disponibile, quindi questo turno è stato interrotto per proteggere la cronologia della conversazione. Controlla lo spazio disponibile sul disco, poi invia di nuovo il messaggio."
session_storage_unavailable: "⚠️ L'archiviazione della sessione era temporaneamente non disponibile, quindi questo turno è stato interrotto per proteggere la cronologia della conversazione. Il tuo messaggio dovrebbe essere già salvato — invialo di nuovo tra un momento."
generic_failed: "⚠️ Qualcosa è andato storto e non sono riuscito a completare questa risposta. Usa /retry per riprovare, oppure /new per iniziare una nuova conversazione. I dettagli tecnici sono nel log del gateway (`hermes logs`)."
interrupted_before_start: "⚠️ Il tuo messaggio è stato interrotto prima dell'inizio dell'elaborazione (probabilmente da un /stop recente). Invialo di nuovo."
processing_incomplete: "elaborazione incompleta"
stopped_before_finishing: "⚠️ Ho dovuto fermarmi prima di finire{reason}. Usa /retry per riprovare, oppure /compress se questa conversazione è diventata molto lunga."
no_response: "⚠️ Elaborazione completata ma nessuna risposta è stata generata. Potrebbe essere un errore temporaneo — prova a inviare di nuovo il messaggio."
previous_turn_cleanup: "⚠️ Il tuo messaggio non è stato elaborato (il turno precedente era ancora in fase di pulizia). Invialo di nuovo."
unexpected_silence: "⚠️ Il modello ha restituito solo un marcatore di silenzio per un messaggio che richiedeva una risposta. Riprova o riformula."
empty_response_model_label: "Il modello"
hint_auth: " Il tuo accesso al servizio del modello AI è scaduto o la chiave API è errata. Usa /login qui, oppure esegui `{relogin}` sull'host."
hint_quota: " Il saldo o la quota del servizio del modello AI sono esauriti. Ricarica sul sito del servizio, oppure usa /model per cambiare modello."
hint_overloaded: " Il servizio del modello AI è temporaneamente sovraccarico. Attendi un momento, poi usa /retry."
hint_rate_limited: " Le tue richieste vengono limitate. Attendi un momento e riprova."
hint_usage_limit_resets: " Il limite di utilizzo del tuo piano è stato raggiunto. Si azzera tra ~{hours}h."
hint_usage_limit: " Il limite di utilizzo del tuo piano è stato raggiunto. Attendi che si azzeri."
hint_rejected: " Il servizio del modello AI ha rifiutato la richiesta."
generic_failed_with_hint: "⚠️ Qualcosa è andato storto e non sono riuscito a completare questa risposta.{hint}\nUsa /retry per riprovare, oppure /new per iniziare una nuova conversazione. I dettagli tecnici sono nel log del gateway (`hermes logs`)."
history_unavailable: "⚠️ La cronologia di questa sessione è temporaneamente non disponibile, quindi questo messaggio non è stato elaborato. Chiedi all'operatore di controllare state.db, poi invialo di nuovo quando è di nuovo integro. Usa /reset solo se vuoi davvero iniziare una nuova conversazione."
no_credentials: "⚠️ Non sono riuscito a connettermi al servizio del modello AI, quindi questo messaggio non è stato elaborato. Usa /login per accedere di nuovo, oppure /model per scegliere un altro modello. Se continua a fallire, esegui `hermes doctor` sull'host."
skills:
disabled: "La skill **{name}** è installata ma disattivata.\nAttivala con: `hermes skills config`"
not_installed: "La skill **{name}** è disponibile ma non installata.\nInstallala con: `hermes skills install {install_name}`"
disabled_for_platform: "La skill **{name}** è disattivata per {platform}.\nAttivala con: `hermes skills config`"
stacked_disabled: "Le skill **{names}** in questa invocazione combinata sono disattivate per {platform}.\nAttivale con: `hermes skills config`"
stacked_load_failed: "Impossibile caricare le skill combinate per /{command}."
gate_off: "L'approvazione delle scritture delle skill è off (skills.write_approval). Attivala con /skills approval on, poi rivedi qui le scritture in attesa con /skills pending."
unknown_subcommand: "Sottocomando /skills sconosciuto su questa piattaforma. Usa: pending, approve <id>, reject <id>, diff <id>, approval <on|off>. (Ricerca/installazione solo da CLI.)"
diff_truncated: "\n… (troncato — diff completo in ~/.hermes/pending/skills/{pending_id}.json)"
busy:
action_restarting: "in riavvio"
action_shutting_down: "in arresto"
reject_model: "L'agente è in esecuzione — attendi o usa prima /stop, poi cambia modello."
reject_codex_runtime: "L'agente è in esecuzione — attendi o usa prima /stop, poi cambia runtime."
reject_moa: "L'agente è in esecuzione — attendi o usa prima /stop, poi esegui /moa."
drain_queued: "⏳ Gateway {action} — messo in coda per il prossimo turno, quando tornerà disponibile."
drain_rejected: "⏳ Il gateway è {action} e al momento non accetta un altro turno."
drain_rejected_new_work: "⏳ Il gateway è {action} e al momento non accetta nuovo lavoro."
demoted_tail: " — il tuo messaggio è in coda per quando avrà finito (usa /stop per annullare tutto)."
elapsed_min: "{minutes} min trascorsi"
running_tool: "in esecuzione: {tool}"
ack_detail_wrap: " ({detail})"
ack_detail_joiner: ", "
ack: "{head}{detail}{tail}"
steered_subagents_head: "⏩ Indirizzato nell'esecuzione corrente e nei suoi subagenti attivi"
steered_subagents_tail: ". Il tuo messaggio arriverà dopo la loro prossima chiamata a uno strumento."
steered_head: "⏩ Indirizzato nell'esecuzione corrente"
steered_tail: ". Il tuo messaggio arriverà dopo la prossima chiamata a uno strumento."
redirected_head: "↪ Esecuzione corrente reindirizzata"
redirected_tail: ". Mi adeguerò in base alla tua correzione."
subagent_working_head: "⏳ Subagente al lavoro"
compressing_head: "⏳ Compressione del contesto"
queued_head: "⏳ In coda per il prossimo turno"
queued_tail: ". Risponderò appena l'attività corrente sarà terminata."
interrupting_head: "⚡ Interruzione dell'attività corrente"
interrupting_tail: ". Risponderò al tuo messaggio a breve."
slash_rejected: "⏳ L'agente è in esecuzione — `/{command}` non può essere eseguito a metà turno. Attendi la risposta corrente o usa prima `/stop`."
reject_goal: "L'agente è in esecuzione — usa /goal status / pause / clear / wait durante l'esecuzione, oppure /stop prima di impostare un nuovo obiettivo."
reject_loop: "L'agente è in esecuzione — usa /loop status / pause / stop durante l'esecuzione, oppure /stop prima di impostare un nuovo loop."
draining_maintenance: "⏳ Questo agente sta completando il lavoro in corso per un'azione di manutenzione e al momento non accetta nuovi turni. Tornerà tra poco — reinvia il messaggio a breve."
another_turn_running: "⏳ Un altro turno è ancora in esecuzione in questa sessione. Per proteggere la trascrizione, questo messaggio non è stato elaborato. Attendi che il turno attivo finisca, poi reinvialo."
behavior_queue_short: "mette in coda per il prossimo turno"
behavior_queue_long: "Mentre Hermes è occupato, i messaggi verranno messi in coda per il prossimo turno."
behavior_steer_short: "indirizza nell'esecuzione corrente (dopo la prossima chiamata a uno strumento)"
behavior_steer_long: "I messaggi verranno indirizzati nell'esecuzione corrente (dopo la prossima chiamata a uno strumento)."
behavior_interrupt_short: "interrompe l'esecuzione corrente"
behavior_interrupt_long: "Mentre Hermes è occupato, i messaggi interromperanno l'esecuzione corrente."
status: "**Modalità input quando occupato: `{mode}`\nMessaggi mentre è occupato: _{behavior}_\nCambia con `/busy queue`, `/busy steer` o `/busy interrupt`."
unknown_mode: "Modalità sconosciuta `{arg}`. Usa `/busy queue`, `/busy steer` o `/busy interrupt`."
save_failed: "Impossibile salvare la modalità input quando occupato nella configurazione. Modalità invariata."
set: "Modalità input quando occupato impostata su **`{mode}`** (salvata).\n_{behavior}_"
pause:
resumed: "▶️ Ripreso — il nuovo lavoro viene di nuovo accettato."
not_paused: "Hermes non era in pausa."
reason_suffix: " (motivo: {reason})"
already_paused: "⏸️ Hermes è già in pausa{suffix}. Usa `/pause off` per riprendere."
paused: "⏸️ In pausa{suffix}. Il nuovo lavoro cron/kanban/gateway è sospeso; il lavoro in corso termina normalmente. Usa `/pause off` per riprendere."
queue:
usage: "Uso: /queue <prompt>"
queued: "In coda per il prossimo turno."
queued_depth: " ({depth} in coda)"
steer:
usage: "Uso: /steer <prompt>"
usage_idle: "Uso: /steer <prompt> (nessun agente in esecuzione; inviato come messaggio normale)"
queued_starting: "L'agente si sta ancora avviando — /steer messo in coda per il prossimo turno."
queued_no_agent: "Nessun agente attivo — /steer messo in coda per il prossimo turno."
failed: "⚠️ Indirizzamento non riuscito: {error}"
rejected_empty: "Indirizzamento rifiutato (contenuto vuoto)."
target_subagents: "esecuzione e nei suoi subagenti attivi"
target_run: "esecuzione"
queued: "⏩ Indirizzamento in coda nell'{target} corrente — arriva dopo la prossima chiamata a uno strumento: '{preview}'"
suggestions:
failed: "Comando suggestions non riuscito: {error}"
blueprint:
failed: "Comando blueprint cron non riuscito: {error}"
confirm:
destructive_prompt: "⚠️ **Conferma /{command}**\n\n{detail}\n\nScegli:\n• **Approva una volta** — procedi solo questa volta\n• **Approva sempre** — procedi e disattiva questa richiesta in modo permanente\n• **Annulla** — mantieni la conversazione corrente\n\n_Alternativa testuale: rispondi `{prefix}approve`, `{prefix}always` o `{prefix}cancel`._"
destructive_optout: "\n\nℹ️ In futuro /clear, /new, /reset e /undo verranno eseguiti senza conferma. Riattivala con `approvals.destructive_slash_confirm: true` in config.yaml."
destructive_optout_save_failed: "\n\n⚠️ Impossibile salvare questa preferenza (config.yaml non è scrivibile), quindi /clear, /new, /reset e /undo chiederanno di nuovo la prossima volta. Per disattivarla in modo permanente, imposta `approvals.destructive_slash_confirm: false` in config.yaml."
cancelled: "🟡 /{command} annullato. Conversazione invariata."
detail_new: "Avvia una nuova sessione e scarta la cronologia della conversazione corrente."
detail_undo_one: "Rimuove dalla cronologia l'ultimo scambio utente/assistente."
detail_undo_many: "Rimuove dalla cronologia gli ultimi {count} turni utente."
hooks:
command_blocked: "Il comando `/{command}` è stato bloccato da un hook."
prompt_command:
start_failed: "Impossibile avviare /{command} — riprova."
learn:
ack_described: "Sto apprendendo una skill da quanto hai descritto…"
ack_conversation: "Sto apprendendo una skill da questa conversazione…"
plan:
ack_task: "Pianificazione: {task}"
ack_conversation: "Pianificazione dal contesto di questa conversazione…"
init:
start_failed: "Impossibile avviare /init — riprova."
ack_update: "Aggiornamento di AGENTS.md da una scansione del progetto…"
ack_generate: "Generazione di AGENTS.md da una scansione del progetto…"
moa:
prepare_failed: "Impossibile preparare il turno MoA."
quick_command:
no_output: "Il comando non ha restituito output."
timed_out: "Comando rapido scaduto (30s)."
error: "Errore del comando rapido: {error}"
no_command: "Il comando rapido '/{command}' non ha nessun comando definito."
unsupported_type: "Il comando rapido '/{command}' ha un tipo non supportato (supportati: 'exec', 'alias')."
no_target: "Il comando rapido '/{command}' non ha nessuna destinazione definita."
unknown_command: "Comando sconosciuto `/{command}`. Digita /commands per vedere quelli disponibili, oppure reinvia senza la barra iniziale per mandarlo come messaggio normale."
session:
auto_reset_notice: "◐ Sessione reimpostata dopo l'interruzione. Cronologia della conversazione cancellata.\nUsa /resume per sfogliare e ripristinare una sessione precedente.\n"
auto_reset_context_exhausted: "\n\n🔄 Sessione reimpostata automaticamente — la conversazione ha superato la dimensione massima del contesto e non poteva essere compressa ulteriormente. Il tuo prossimo messaggio avvierà una nuova sessione."
info_model: "◆ Modello: `{model}`"
info_provider: "◆ Provider: {provider}"
info_context: "◆ Contesto: {tokens} token ({source})"
info_acting_model: "◆ Modello attivo (addebitato per l'esecuzione): {provider}:{model}"
info_endpoint: "◆ Endpoint: {url}"
proxy:
requires_aiohttp: "⚠️ La modalità proxy richiede aiohttp. Esegui: {hint}"
url_missing: "⚠️ URL del proxy non configurato (GATEWAY_PROXY_URL o gateway.proxy_url)"
http_error: "⚠️ Errore del proxy ({status}): {error}"
closed_early: "⚠️ Connessione al proxy chiusa prima del completamento della risposta"
connection_error: "⚠️ Errore di connessione al proxy: {error}"
no_response: "(Nessuna risposta dall'agente remoto)"
progress:
status_fallback_long: "ci sto ancora lavorando"
status_fallback_short: "un attimo"
stuck_warning: "⚠️ Sembra che mi sia bloccato (nessuna attività da {minutes} min). Se non succede nulla nei prossimi {remaining} min rinuncerò a questa attività. Puoi continuare ad attendere, inviare /stop per annullarla o /new per iniziare una nuova conversazione."
timeout_header: "⏱️ Agente inattivo da {minutes} min — nessuna chiamata a strumenti né risposta dall'API."
timeout_stuck_tool: "L'agente sembra bloccato sullo strumento `{tool}` ({seconds}s dall'ultima attività, {progress})."
timeout_last_activity: "Ultima attività: {activity} ({seconds}s fa, {progress}). L'agente potrebbe essere rimasto in attesa di una risposta dall'API."
timeout_hint: "Per aumentare il limite, imposta agent.gateway_timeout in config.yaml (valore in secondi, 0 = nessun limite) e riavvia il gateway.\nRiprova, oppure usa /reset per ricominciare da zero."
working_heartbeat: "⏳ Al lavoro — {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: "in esecuzione"
task_status_complete: "completato"
task_status_error: "errore"
task_line: "- {title} - {status}"
task_card_title: "Hermes è al lavoro"
pairing:
validity_hour: "{hours} ora"
validity_hours: "{hours} ore"
code_reply: "Ciao! Non ti riconosco ancora, quindi non posso risponderti finché la persona che gestisce questo bot non ti approva.\n\nIl tuo codice di associazione: `{code}` (valido per {validity})\n\nSe gestisci tu questo bot, apri un terminale ed esegui: `{approve_cmd}`. Altrimenti invia quel comando al proprietario del bot. Dopo l'approvazione, invia di nuovo il tuo messaggio."
rate_limited: "Troppe richieste di associazione in questo momento. Attendi qualche minuto, poi invia di nuovo il tuo messaggio."
shutdown:
action_shutting_down: "in arresto"
action_restarting: "in riavvio"
cron_interrupted: "⚠️ Il job pianificato '{job}' è stato interrotto perché Hermes è {action}; nessun risultato per questa esecuzione. Verrà eseguito di nuovo come pianificato, oppure eseguilo subito con `hermes cron run {job}` quando Hermes sarà tornato."
notice_shutdown: "⚠️ Hermes si sta arrestando — la tua attività corrente verrà interrotta. Quando sarà di nuovo online, invia un messaggio qualsiasi e proverò a riprendere da dove eravamo rimasti."
notice_restart: "⚠️ Hermes si sta riavviando — la tua attività corrente verrà interrotta. Invia un messaggio qualsiasi dopo il riavvio e proverò a riprendere da dove eri rimasto."
startup:
handoff_thread_title: "Hermes — {title}"
restarted: "♻ Gateway riavviato correttamente. La tua sessione continua."
free_tier_line: "Inferenza: piano gratuito Nous (nous/welcome). Accedi per avere di più: /login"
online: "♻️ Gateway online — Hermes è tornato ed è pronto."
db_corrupt: "⚠️ Rilevata corruzione del database delle sessioni. I messaggi potrebbero non essere salvati. Opzioni di ripristino:\n1. Esegui `hermes {profile_arg}doctor --fix`\n2. Ferma il gateway, poi ripristina con:\n hermes {profile_arg}sessions recover --source {db_path} --inspect-only\n (se segnala che è recuperabile) hermes {profile_arg}sessions recover --source {db_path} --output recovered-state.db\n — il ripristino crea prima uno snapshot del file danneggiato; NON eseguire `sqlite3 ... \".recover\"` sullo state.db attivo, una CLI sqlite3 vulnerabile può corromperlo ulteriormente\n3. Ripristina da un backup in {backups_dir}/\nEsegui `hermes {profile_arg}doctor` per una diagnostica sanificata."
db_fts_corrupt: "⚠️ Il database delle sessioni ha segnalato un errore di corruzione limitato all'indice di ricerca (FTS5); le tabelle dei messaggi non sono danneggiate. I messaggi potrebbero non essere salvati finché non viene riparato: esegui `hermes {profile_arg}doctor --fix`, poi riavvia il gateway. Non eseguire strumenti di ripristino né ripristinare un backup a meno che `hermes {profile_arg}doctor` non confermi il danno."
db_then_restart: "{action} Poi `hermes {profile_arg}gateway restart`."
db_unavailable: "⚠️ Database delle sessioni non disponibile — i messaggi potrebbero non essere salvati e /resume sarà vuoto. Causa: {cause}. {action}"
whoami:
scope_dm: "DM"
scope_group: "gruppo/canale"
header: "**Tu** — {platform} ({scope})\nID utente: `{user_id}`\n"
tier_unrestricted: "Livello: senza restrizioni (nessuna lista admin configurata per questo ambito)\nComandi slash: tutti disponibili"
tier_admin: "Livello: **admin**\nComandi slash: tutti disponibili"
tier_user: "Livello: utente\nComandi slash che puoi eseguire: {commands}"
platform:
usage: "Uso: /platform <list|pause|resume> [name]\n /platform list — mostra lo stato delle piattaforme\n /platform pause <name> — smetti di ritentare una piattaforma che fallisce\n /platform resume <name> — rimetti in coda una piattaforma in pausa"
header: "**Piattaforme del gateway**"
connected: "Connesse: {platforms}"
reason_default: "in pausa"
reason_manual: "in pausa tramite /platform pause"
item_paused: " · {name} — IN PAUSA ({reason}). Riprendi con `/platform resume {name}`."
item_retrying: " · {name} — nuovo tentativo in corso (tentativo {attempts})"
none_failed: "Non riuscite/in pausa: (nessuna)"
usage_action: "Uso: /platform {action} <name>"
unknown: "Piattaforma sconosciuta: {name}"
not_queued_pause: "{name} non è nella coda dei tentativi (è connessa oppure non è attiva)."
already_paused: "{name} è già in pausa."
paused: "✓ {name} in pausa. Riprendi con `/platform resume {name}` oppure usa `hermes gateway restart` per reimpostare."
not_queued_resume: "{name} non è nella coda dei tentativi — niente da riprendere."
already_retrying: "{name} sta già ritentando — non serve riprendere."
resumed: "✓ {name} ripresa — nuovo tentativo al prossimo ciclo del watcher."
bundles:
unavailable: "Sottosistema bundle non disponibile: {error}"
default_desc: "Carica {count} skill"
none_plain: "Nessun bundle di skill installato.\nCreane uno con: hermes bundles create <name> --skill <s1> --skill <s2>\nDirectory: {dir}"
header_plain: "Bundle di skill ({count} installati):"
item_plain: "/{slug} — {desc} ({count} skill)"
invoke_hint_plain: "Richiama un bundle con /<slug> per caricare tutte le sue skill."
none: "Nessun bundle di skill installato.\nCreane uno sull'host con:\n `hermes bundles create <name> --skill <s1> --skill <s2>`\nDirectory: `{dir}`"
header: "**Bundle di skill** ({count} installati):"
item: "• `/{slug}` — {desc} _({count} skill)_"
invoke_hint: "Richiama un bundle con `/<slug>` per caricare tutte le sue skill."
memory:
unknown_subcommand: "Sottocomando /memory sconosciuto. Usa: pending, approve <id>, reject <id>, approval <on|off>."
approvals:
admin_only: "Solo gli admin del gateway possono cambiare la modalità di approvazione persistente."
heartbeat:
unavailable: "Heartbeat non disponibili (nessuna sessione)."
paused: "⏸ Heartbeat in pausa: {prompt}"
none_set: "Nessun heartbeat impostato."
no_resume: "Nessun heartbeat da riprendere."
resumed: "▶ Heartbeat ripreso (ogni {interval}): {prompt}"
cleared: "✓ Heartbeat rimosso."
usage: "Uso: /heartbeat every <interval> <prompt> (es. /heartbeat every 10m Controlla la CI)\nInoltre: /heartbeat status | pause | resume | clear"
interval_too_small: "Intervallo troppo breve — il minimo è {min_seconds}s."
prompt_required: "Uso: /heartbeat every <interval> <prompt> — il prompt è obbligatorio."
invalid_prefix: "Heartbeat non valido"
set: "♥ Heartbeat impostato (ogni {interval}): {prompt}\nSi attiva come turno normale ogni volta che questa sessione è inattiva e l'intervallo è trascorso. Dura finché il gateway è in esecuzione — usa `hermes cron` per pianificazioni durevoli."
refine:
unavailable: "Refine non disponibile (nessuna sessione)."
nothing_yet: "Ancora niente da perfezionare — invia prima un messaggio."
empty: "Ancora niente da perfezionare — la conversazione è vuota."
start_failed: "Impossibile avviare /refine: {error}"
focus_suffix: " (focus: {focus})"
started: "⚗ Revisione di questa conversazione in background{focus_suffix} — eventuali aggiornamenti a memoria/skill verranno riportati al termine."
review:
unavailable: "Revisione non disponibile (nessuna sessione)."
nothing_yet: "Ancora niente da revisionare — invia prima un messaggio."
start_failed: "Impossibile avviare /review: {error}"
subgoal:
no_goal: "Nessun obiettivo attivo. Impostane uno con /goal <text>."
usage_remove: "Uso: /subgoal remove <n>"
remove_not_int: "/subgoal remove: <n> deve essere un numero intero (indice a partire da 1)."
removed: "✓ Sotto-obiettivo {index} rimosso: {text}"
cleared_one: "✓ {count} sotto-obiettivo rimosso."
cleared_other: "✓ {count} sotto-obiettivi rimossi."
none_to_clear: "Nessun sotto-obiettivo da rimuovere."
added: "✓ Sotto-obiettivo {index} aggiunto: {text}"
loop:
unavailable: "Loop non disponibili."
no_session: "Loop non disponibili (nessuna sessione attiva)."
goal_defers_note: "\nNota: un /goal attivo sta guidando questa sessione — i risvegli del loop vengono rimandati finché l'obiettivo non termina, va in pausa o viene parcheggiato."
save:
no_messages: "Nessun messaggio salvato trovato per questa sessione ({session_id})."
no_adapter: "Adattatore della piattaforma non trovato per inviare il documento."
caption: "Esportazione sessione: {filename}"
complete: "Esportazione completata."
failed: "Errore durante l'esportazione della sessione: {error}"
sessions:
usage_search: "Uso: `/sessions search <query>`"
all_requires_admin: "_Nota: `all` (elenco tra tutte le chat) richiede un admin configurato; vengono mostrate solo le sessioni di questa chat._"
title_matching: "Sessioni corrispondenti a “{query}”"
title_all: "Sessioni"
title_named: "Sessioni con nome"
codex_runtime:
config_load_failed: "❌ Impossibile caricare la configurazione: {error}"
topup:
header: "💳 **Saldo Nous**"
portal_link: "Gestisci la fatturazione sul portale: {url}"
hint: "Ricarica e gestisci la fatturazione nel browser — il saldo qui si aggiornerà subito dopo."
login:
free_tier_remaining: "\nAlcune chat sono ancora sul piano gratuito; usa /model in quelle chat per cambiare."
platform:
whatsapp:
clarify_other_title: "✏️ Altro"
clarify_other_description: "Digita la tua risposta"
clarify_list_button: "Scegli"
clarify_list_section: "Opzioni"
approve_button: "✅ Approva"
deny_button: "❌ Nega"
slash_confirm_once: "✅ Approva una volta"
slash_confirm_always: "🔒 Sempre"
slash_confirm_cancel: "❌ Annulla"
clarify_type_answer: "✏️ Digita la tua risposta:"
approved: "✅ Approvato."
denied: "❌ Negato."
approval_expired: "⌛ Approvazione scaduta — il comando non è stato eseguito (timeout già scattato o risolto altrove)."
yuanbao:
slow_response_notice: "Questa attività è un po' impegnativa — ci sto ancora lavorando, attendi un attimo..."
owner_command_denied: "⚠️ {command} è disponibile solo per il creatore in modalità chat privata"
shared:
truncated_suffix: "\n...(troncato)"
unknown: "sconosciuto"
approval_expired: "⌛ Approvazione scaduta — il comando non è stato eseguito (timeout già scattato o risolto altrove)."
model_picker_expired: "⏳ Questo selettore di modelli è scaduto — esegui di nuovo /model."
not_authorized: "⛔ Non autorizzato."
handoff:
default_name: "sessione"
media:
image_failed: "⚠️ Impossibile consegnare l'immagine allegata."
video_failed: "⚠️ Impossibile consegnare il video allegato."
file_failed: "⚠️ Impossibile consegnare il file allegato ({name})."
attachment_failed: "⚠️ Impossibile consegnare l'allegato."
weixin:
voice_as_attachment: "[messaggio vocale come allegato]"
signal:
batch_pacing_notice: "(Altre immagini in arrivo — pausa di ~{wait} per il limite di frequenza di Signal, gruppo {batch}/{total}.)"
wait_seconds: "{count}s"
wait_minutes: "{count} min"
api_server:
provider_auth_failed: "Autenticazione del provider non riuscita"
provider_rate_limited: "Provider con limite di frequenza raggiunto"
provider_error_line: "⚠️ {label}: {error}"
transformed_notice: "\n\n[Risposta trasformata dopo lo streaming]\n"
discord:
approval:
question: "Vuoi che Hermes esegua questo comando?"
requested_command_label: "Comando richiesto:"
confirm_title: "Conferma"
already_resolved: "Questa approvazione è già stata risolta~"
expired: "⌛ Approvazione scaduta — il comando non è stato eseguito (timeout già scattato o risolto altrove)"
by_user: "{label} da {user}"
resolved_once: "Approvato una volta"
resolved_session: "Approvato per la sessione"
resolved_always: "Approvato in modo permanente"
resolved_deny: "Negato"
slash_confirm:
already_resolved: "Questa richiesta è già stata risolta~"
approve_once: "Approva una volta"
always_approve: "Approva sempre"
cancel: "Annulla"
resolved_once: "Approvato una volta"
resolved_always: "Approvato sempre"
resolved_cancel: "Annullato"
prompt:
truncated_marker: "... [troncato]"
clarify_title: "Hermes ha bisogno del tuo contributo"
clarify_hint_buttons: "Scegli un'opzione qui sotto oppure clicca ✏️ Altro per digitare una risposta personalizzata."
clarify_hint_text: "Rispondi in questo canale con la tua risposta."
default_hint: " (predefinito: {default})"
update_title: "L'aggiornamento richiede il tuo intervento"
expired_footer: "⏱ Richiesta scaduta — nessuna azione eseguita"
already_answered: "Già risposto~"
affirm: "Sì"
negate: "No"
other: "✏️ Altro (digita la risposta)"
clarify_already_answered: "A questa richiesta è già stata data risposta~"
answered_by: "Risposta di {user}: {choice}"
awaiting_typed: "In attesa della risposta digitata da {user}…"
picker:
title: "⚙ Configurazione modello"
select_provider: "Modello attuale: `{model}`\nProvider: {provider}\n\nSeleziona un provider:"
unknown_model: "sconosciuto"
choice_default_title: "Scegli un'opzione"
provider_option: "{provider} ({count} modelli)"
current: "attuale"
provider_placeholder: "Scegli un provider..."
cancel: "Annulla"
model_placeholder: "Scegli un modello di {provider}"
back: "◀ Indietro"
switch_anyway: "Cambia comunque"
more_available: "Altri {count} disponibili — digita direttamente `/model <name>`"
select_model: "Provider: **{provider}**\nSeleziona un modello:{extra}"
already_resolved: "Già risolto~"
switching: "Passaggio a `{model}`..."
switching_title: "⚙ Cambio modello"
switch_error: "Errore nel cambio modello: {error}"
switched_title: "⚙ Modello cambiato"
expired_toast: "Selezione del modello scaduta."
cancelled: "Selezione del modello annullata."
expired: "⏱ Selezione scaduta — nessun cambio di modello."
choice_placeholder: "Scegli un'opzione..."
choice_error: "Errore nell'applicare la selezione: {error}"
choice_expired: "⏱ Selezione scaduta — nessuna modifica effettuata."
command:
new:
description: "Avvia una nuova conversazione"
followup: "Nuova conversazione avviata~"
reset:
description: "Reimposta la tua sessione Hermes"
followup: "Sessione reimpostata~"
model:
description: "Mostra o cambia il modello"
arg_name: "Nome del modello (es. anthropic/claude-sonnet-4). Lascia vuoto per vedere quello attuale."
reasoning:
description: "Mostra/cambia il livello di ragionamento o attiva/disattiva la sua visualizzazione"
arg_effort: "Scegli un livello, reimposta l'override o mostra/nascondi il ragionamento. Vuoto = stato attuale."
choice_none: "none — disattiva il ragionamento"
choice_ultra: "ultra — ragionamento massimo"
choice_reset: "reset — cancella l'override di questa sessione"
choice_show: "show — mostra il ragionamento nelle risposte"
choice_hide: "hide — nascondi il ragionamento dalle risposte"
personality:
description: "Imposta una personalità"
arg_name: "Nome della personalità. Lascia vuoto per elencare quelle disponibili."
retry:
description: "Riprova il tuo ultimo messaggio"
followup: "Riprovo~"
undo:
description: "Rimuovi l'ultimo scambio"
status:
description: "Mostra lo stato della sessione Hermes"
followup: "Stato inviato~"
stop:
description: "Interrompi l'agente Hermes in esecuzione"
followup: "Interruzione richiesta~"
steer:
description: "Inserisci un messaggio dopo la prossima chiamata a uno strumento (senza interrompere)"
arg_prompt: "Testo da inserire nel prossimo risultato di strumento dell'agente"
plan:
description: "Scrivi un piano di implementazione in markdown (senza esecuzione)"
arg_task: "Cosa pianificare. Lascia vuoto per dedurlo dalla conversazione."
compress:
description: "Comprimi il contesto della conversazione"
title:
description: "Imposta o mostra il titolo della sessione"
arg_name: "Titolo della sessione. Lascia vuoto per mostrare quello attuale."
resume:
arg_name: "Nome della sessione da riprendere. Lascia vuoto per elencare le sessioni."
usage:
description: "Mostra l'utilizzo di token per questa sessione"
help:
description: "Mostra i comandi disponibili"
insights:
arg_days: "Numero di giorni da analizzare (predefinito: 7)"
reload_skills:
description: "Riesamina ~/.hermes/skills/ per trovare skill nuove o rimosse"
voice:
description: "Attiva/disattiva la modalità risposta vocale"
arg_mode: "Modalità voce: join, channel, leave, on, tts, off o status"
choice_join: "join — entra nel tuo canale vocale"
choice_channel: "channel — entra nel tuo canale vocale (alias)"
choice_leave: "leave — esci dal canale vocale"
choice_mode_on: "on — risposta vocale ai messaggi vocali"
choice_tts: "tts — risposta vocale a tutti i messaggi"
choice_mode_off: "off — solo testo"
choice_status: "status — mostra la modalità attuale"
update:
followup: "Aggiornamento avviato~"
restart:
description: "Riavvia in modo controllato il gateway Hermes"
followup: "Riavvio richiesto~"
approve:
arg_scope: "Facoltativo: 'all', 'session', 'always', 'all session', 'all always'"
deny:
description: "Nega un comando pericoloso in attesa"
arg_scope: "Facoltativo: 'all' per negare tutti i comandi in attesa"
thread:
description: "Crea un nuovo thread e avvia al suo interno una sessione Hermes"
arg_name: "Nome del thread"
arg_message: "Primo messaggio facoltativo da inviare a Hermes nel thread"
arg_auto_archive: "Archiviazione automatica in minuti (60, 1440, 4320, 10080)"
error_unknown: "errore sconosciuto"
failed: "Impossibile creare il thread: {error}"
created: "Thread {link} creato"
error_name_required: "Il nome del thread è obbligatorio."
error_invalid_archive: "auto_archive_duration deve essere uno tra: {allowed}."
error_no_channel: "Impossibile individuare il canale Discord attuale."
error_dm_not_supported: "I thread Discord possono essere creati solo nei canali testuali di un server, non nei DM."
error_no_parent: "Impossibile determinare un canale testuale padre per il nuovo thread."
error_both_failed: "Discord ha rifiutato la creazione diretta del thread e anche il fallback non è riuscito. Errore diretto: {direct_error}. Errore del fallback: {fallback_error}"
queue:
description: "Metti in coda un prompt per il prossimo turno (senza interrompere)"
arg_prompt: "Il prompt da mettere in coda"
followup: "In coda per il prossimo turno."
bg:
arg_prompt: "Il prompt da eseguire in background"
followup: "Attività in background avviata~"
btw:
description: "Fai una domanda a margine sulla conversazione attuale"
arg_question: "La domanda a margine a cui rispondere senza interrompere"
followup: "Domanda a margine inviata~"
skill:
description: "Esegui una skill Hermes"
arg_name: "Quale skill eseguire"
arg_args: "Argomenti facoltativi per la skill"
unknown: "Skill sconosciuta: `{name}`. Inizia a digitare per i suggerimenti di completamento automatico."
auto_args_description: "Argomenti: {args_hint}"
auto_description_fallback: "Esegui /{name}"
limits:
response_truncated: "⚠️ **Risposta troncata** — questa risposta ha superato il limite di consegna ({max_messages} messaggi). {dropped_chars} caratteri non sono stati consegnati; la risposta completa è nei log della sessione."
forum:
default_title: "Nuovo post"
voice:
ack_1: "Fammi controllare."
ack_2: "Un momento."
ack_3: "Sto controllando."
ack_4: "Dammi un secondo."
ack_5: "Ci penso io."
left_inactivity: "Uscito dal canale vocale (timeout per inattività)."
security:
unauthorized_slash_alert: "⚠️ Tentativo di comando slash Discord non autorizzato\nUtente: {user_name} ({user_id})\nCanale: {chan_id} (guild {guild_id})\nComando: {command_text}\nMotivo: {reason}"
thread:
seed_message: "🧵 Thread creato da Hermes: **{name}**"
default_name: "Hermes"
handoff_seed: "🧵 Passaggio di consegne Hermes: **{name}**"
auto_create_failed: "⚠️ Hermes non è riuscito a creare un thread Discord per questo messaggio, quindi la richiesta non è stata elaborata. Riprova."
auto_create_failed_generic: "La richiesta non è stata elaborata. Riprova."
media:
upload_too_large: "⚠️ Impossibile allegare `{filename}` — {size_mb} MB supera il limite di caricamento di Discord di {limit_mb} MB per questo canale. Comprimi il file o condividi un link."
image_skipped_too_large: "⚠️ `{filename}` ignorato — {size_mb} MB supera il limite di caricamento di Discord di {limit_mb} MB."
telegram:
approval:
action_once: "✅ Consenti una volta"
action_session: "✅ Sessione"
action_always: "✅ Sempre"
action_deny: "❌ Nega"
toast_invalid_data: "Dati di approvazione non validi."
toast_already_resolved: "Questa approvazione è già stata risolta."
resolved_once: "✅ Approvato una volta"
resolved_session: "✅ Approvato per la sessione"
resolved_always: "✅ Approvato in modo permanente"
resolved_deny: "❌ Negato"
resolved_generic: "Risolto"
resolved_by_user: "{label} da {user}"
expired: "⌛ Approvazione scaduta"
expired_detail: "{label} — nessun comando era in attesa. È già andato in timeout (ed è stato negato) oppure è stato risolto altrove."
slash_confirm:
approve_once: "✅ Approva una volta"
always_approve: "🔒 Approva sempre"
cancel: "❌ Annulla"
already_resolved: "Questa richiesta è già stata risolta."
resolved_once: "✅ Approvato una volta"
resolved_always: "🔒 Approva sempre"
resolved_cancel: "❌ Annullato"
picker:
expired_rerun: "Selettore scaduto — esegui di nuovo il comando."
invalid_selection: "Selezione non valida."
expired: "Selettore scaduto."
apply_error: "Errore nell'applicare la selezione: {error}"
prev: "◀ Prec"
next: "Succ ▶"
back: "◀ Indietro"
cancel: "✗ Annulla"
more_available: "Altri {count} disponibili — digita direttamente `/model <name>`"
title: "Configurazione modello"
provider_label: "Provider: {provider}"
select_model: "Seleziona un modello:"
current_model: "Modello attuale: {model}"
select_provider: "Seleziona un provider:"
unknown_model: "sconosciuto"
provider_family: "Famiglia provider: {family}"
invalid_model_index: "Indice modello non valido."
switch_error: "Errore nel cambio modello: {error}"
switch_failed: "Cambio non riuscito."
switched: "Modello cambiato!"
invalid_page: "Pagina non valida."
expired_model: "Selettore scaduto — usa di nuovo /model."
provider_not_found: "Provider non trovato."
switch_anyway: "Cambia comunque"
confirm_selection: "Conferma il modello"
group_not_found: "Gruppo non trovato."
cancelled: "Selezione del modello annullata."
prompt:
default_hint: " (predefinito: {default})"
update_header: "L'aggiornamento richiede il tuo input:"
affirm: "✓ Sì"
negate: "✗ No"
other: "✏️ Altro (digita)"
expired_toast: "⚠️ Questa richiesta è scaduta — usa /retry."
expired_body: "⚠️ Questa domanda è scaduta o la sessione è stata reimpostata — usa /retry."
type_answer: "✏️ Digita la tua risposta nella chat."
awaiting_typed: "In attesa della risposta digitata da {user}…"
invalid_choice: "Scelta non valida."
update_sent: "Inviato '{answer}' al processo di aggiornamento."
update_answered: "Risposta alla richiesta di aggiornamento: {answer}"
affirm_word: "Sì"
negate_word: "No"
media:
download_failed: "⚠️ Impossibile scaricare {kind}{name} ({error}). Prova a inviarlo di nuovo."
named_suffix: " ({name})"
kind_attachment: "l'allegato"
kind_photo: "la foto"
kind_voice: "il messaggio vocale"
kind_audio: "il file audio"
kind_video: "il file video"
gmail_triage:
done_send: "✓ bozza inviata"
done_archive: "✓ archiviato"
done_draft: "✓ risposta in bozza"
done_spam: "✓ segnato come spam"
done_mute: "✓ silenziato"
done_mute_domain: "✓ dominio silenziato"
done_trust: "✓ attendibile"
done_trust_domain: "✓ dominio attendibile"
done_vip: "✓ segnato VIP"
done_vip_domain: "✓ dominio segnato VIP"
invalid_data: "Dati gmail-triage non validi."
unknown_verb: "Verbo sconosciuto: {verb}"
script_missing: "❌ {script} mancante"
exit_code: "exit {code}"
failed: "❌ {verb} non riuscito: {detail}"
timed_out: "❌ {verb} in timeout"
error: "❌ errore {verb}: {error}"
appended_by: "— {label} da {user}"
user_fallback: "Utente"
install_hint: "Esegui `hermes setup` per installare il supporto Telegram."
slack:
approval:
fallback_text: "⚠️ Richiesta approvazione del comando: {command}"
resolved_once: "✅ Approvato una volta da {user}"
resolved_session: "✅ Approvato per la sessione da {user}"
resolved_always: "✅ Approvato in modo permanente da {user}"
resolved_deny: "❌ Negato da {user}"
confirm:
default_title: "Conferma"
approve_once: "Approva una volta"
always_approve: "Approva sempre"
cancel: "Annulla"
resolved_always: "🔒 Approvato sempre da {user}"
resolved_cancel: "❌ Annullato da {user}"
picker:
more_available: "\n*Altri {count} disponibili — digita direttamente `/model <name>`*"
provider_header: "*⚙ Configurazione modello*\nModello attuale: `{model}`\nProvider: {provider}\n\nSeleziona un provider:{extra}"
model_header: "*⚙ Configurazione modello*\n\nProvider: *{provider}*\nSeleziona un modello:{extra}"
choose_provider: "Scegli un provider…"
choose_model: "Scegli un modello di {provider}…"
cancel: "Annulla"
back: "◀ Indietro"
fallback_provider: "⚙ Configurazione modello — seleziona un provider"
fallback_model: "⚙ Configurazione modello — {provider}"
cancelled: "❌ Selezione del modello annullata."
no_models_for_provider: "Nessun modello disponibile per `{provider}`."
switching: "⚙ Passaggio a `{model}`…"
switch_failed: "❌ Cambio modello non riuscito: {error}"
switch_failed_header: "⚙ Cambio modello non riuscito"
switched_header: "⚙ Modello cambiato"
clarify:
option_n: "Opzione {n}"
choice_n: "scelta {n}"
other: "✏️ Altro…"
expired: "⏳ Questa richiesta è scaduta — invia una nuova richiesta. (da {user})"
awaiting: "✏️ In attesa della risposta digitata da {user}…"
resolved: "✅ {user}: {choice}"
feedback:
good: "Risposta utile"
good_a11y: "Invia un feedback positivo su questa risposta"
bad: "Risposta scadente"
bad_a11y: "Invia un feedback negativo su questa risposta"
status:
thinking: "sta ragionando..."
still_working: "ancora al lavoro… ({elapsed})"
task_card:
title: "Hermes è al lavoro"
slash:
reply_truncated: "\n\n_[Risposta troncata: {count} altre parti hanno superato il limite delle risposte effimere di Slack.]_"
running: "Esecuzione di `/{command}`…"
handoff:
seed: ":thread: Passaggio di consegne Hermes — *{name}*"
matrix:
handoff:
default_name: "Sessione Hermes"
media:
image_download_failed: "Non sono riuscito a scaricare e caricare l'immagine su Matrix. L'URL di origine non è stato mostrato perché potrebbe contenere token privati."
approval:
typed_hint_once: "Rispondi `!approve` per eseguire una volta, oppure `!deny` per annullare."
typed_hint_session: "Rispondi `!approve session` per approvare questo pattern per la sessione, `!approve` per eseguire una volta, oppure `!deny` per annullare."
typed_hint_always: "Rispondi `!approve session` per approvare questo pattern per la sessione, `!approve always` per approvare in modo permanente, `!approve` per eseguire una volta, oppure `!deny` per annullare."
legend_intro: "Puoi anche cliccare la reazione per approvare:"
legend_once: "✅ = approva una volta"
legend_session: "🌀 = approva per questa sessione"
legend_always: "♾️ = approva sempre"
legend_deny: "❎ = nega"
invalid_reaction: "Questa reazione non è valida per questa richiesta di approvazione."
expired: "Questa richiesta di approvazione è scaduta. Esegui di nuovo il comando se vuoi ancora approvarlo."
picker:
no_models: "Nessun modello autenticato disponibile per questa sessione."
title: "⚙ **Configurazione modello**"
current_model: "Modello attuale: `{model}`"
provider: "Provider: {provider}"
react_model: "Reagisci per scegliere un modello:"
react_choice: "Reagisci per scegliere."
current_suffix: "{label} ← attuale"
invalid_model_reaction: "Questa reazione non corrisponde a nessuno dei modelli disponibili."
invalid_choice_reaction: "Questa reazione non corrisponde a nessuna delle scelte disponibili."
verb_switch_model: "cambiare modello"
verb_apply_selection: "applicare la selezione"
failed: "Impossibile {action}: {error}"
reaction:
unauthorized: "Solo un utente Matrix autorizzato può usare questi controlli."
not_requester: "Solo l'utente che ha richiesto questa azione può usare questi controlli."
feishu:
approval:
action_session: "Sessione"
action_always: "Sempre"
resolved_once: "Approvato una volta"
resolved_session: "Approvato per la sessione"
resolved_always: "Approvato in modo permanente"
resolved_deny: "Negato"
resolved_fallback: "Risolto"
resolved_by_user: "{icon} **{label}** da {user}"
update_prompt:
title: "☤ L'aggiornamento richiede il tuo input"
default_hint: "\n\nPredefinito: `{default}`"
answer_yes: "✓ Sì"
answer_no: "✗ No"
word_yes: "Sì"
word_no: "No"
answered_title: "{icon} Risposta alla richiesta di aggiornamento: {answer}"
answered_by: "Risposta di **{user}**"
media:
gif_downgraded: "[GIF convertita in file]"
gif_downgraded_caption: "[GIF convertita in file]\n{caption}"
google_chat:
clarify:
other_button: "Altro / digita la risposta"
header: "Domanda"
question: "❓ {question}"
typing:
thinking: "Hermes sta ragionando…"
interrupted: "(interrotto)"
no_reply: "(nessuna risposta)"
attachment_fallback:
header: "⚠️ Non sono riuscito ad allegare **{filename}**."
explain: "Google Chat consente gli allegati solo se il bot ha la tua autorizzazione esplicita (OAuth utente). È un consenso una tantum che si dà da questa chat."
activate: "**Per attivarlo:** invia `/setup-files` e segui le istruzioni."
host_path: "Nel frattempo il file si trova sull'host: `{path}`"
setup_files:
not_configured: "🔧 La consegna nativa degli allegati **non è configurata**.\n**Passo 1 (una tantum, sull'host):** crea le credenziali del client OAuth su https://console.cloud.google.com/apis/credentials → *Crea credenziali* → *ID client OAuth* → *App desktop*. Scarica il JSON. Poi sull'host esegui:\n```\npython -m plugins.platforms.google_chat.oauth --client-secret /path/to/client_secret.json\n```\n**Passo 2:** torna qui e invia `/setup-files start`."
start_instructions: "1. Apri questo URL nel browser e autorizza:\n{auth_url}\n\n2. Dopo aver cliccato *Consenti*, il browser non riuscirà a caricare `http://localhost:1/?...&code=...`. È normale.\n\n3. Copia l'intero URL non caricato dalla barra degli indirizzi del browser e incollalo qui come: `/setup-files <PASTE_URL>` (oppure solo il valore `code=...`).\n\nSuggerimento: l'URL contiene la tua autorizzazione di accesso — tienilo privato."
start_failed: "❌ Impossibile generare l'URL OAuth. Controlla i log del gateway e verifica che client_secret.json sia valido."
exchange_failed: "❌ Scambio del token non riuscito. Il codice potrebbe essere scaduto o l'URL è malformato. Invia `/setup-files start` per ottenere un nuovo URL OAuth."
revoke_completed: "Revoca completata (alcuni passaggi potrebbero essere stati saltati)."
revoked: "Revocato."
helper_error: "❌ Errore: {error}"
revoke_error: "❌ Errore durante la revoca: {error}"
who_shared: "condiviso (legacy)"
active: "✅ La consegna nativa degli allegati è **attiva** per `{who}`.\nToken: `{token_path}`\nInvia `/setup-files revoke` per disattivarla."
not_authorized_yet: "🔧 Le credenziali del client sono salvate ma non hai ancora autorizzato. Invia `/setup-files start` per iniziare."
no_client_credentials: "⚠️ Nessuna credenziale client salvata per questo profilo. Invia `/setup-files` (senza argomenti) per le istruzioni di configurazione."
done_output: "✅ Fatto.\n```\n{output}\n```"
authorized: "✅ Autorizzato! La consegna nativa degli allegati è ora attiva. Prova a chiedermi di inviarti un PDF."
exchanged_not_loaded: "⚠️ Token scambiato, ma il gateway non è riuscito a caricare le nuove credenziali in memoria. Riavvia il gateway e il token in `{token_path}` verrà caricato.\nOutput dell'helper:\n```\n{output}\n```"
teams:
approval:
resolved_once: "✅ Consentito (una volta)"
resolved_session: "✅ Consentito (sessione)"
resolved_always: "✅ Consentito sempre"
resolved_deny: "❌ Negato"
unknown_action: "Azione sconosciuta."
requires_allowlist: "⛔ I pulsanti di approvazione richiedono che TEAMS_ALLOWED_USERS sia configurato."
summary:
title: "Riunione {meeting_id}"
title_fallback: "riepilogo"
heading: "Riepilogo"
summary_line: "Riepilogo: {summary}"
empty: "Nessun riepilogo disponibile."
none_item: "Nessuno"
key_decisions: "Decisioni chiave"
action_items: "Azioni da fare"
risks: "Rischi"
line:
pending:
still_thinking: "🤔 Sto ancora ragionando. Tocca qui sotto per ricevere la risposta quando è pronta."
button_label: "Ricevi risposta"
delivered: "Già risposto ✅"
interrupted: "L'esecuzione è stata interrotta prima del completamento."
expired: "Questa richiesta è scaduta — invia di nuovo il messaggio."
standalone:
attachments_not_deliverable: "[Allegati generati: {count}; non consegnabili da cron]"
wecom:
media:
kind_image: "Immagine"
kind_video: "Video"
kind_voice: "Messaggio vocale"
file_too_large: "La dimensione del file ({size_mb}MB) supera il limite di 20MB di WeCom e non può essere inviato. Prova a comprimere il file o a ridurne la dimensione."
voice_format_downgraded: "Il formato vocale {content_type} non è supportato (WeCom accetta solo AMR); inviato come file."
size_downgraded: "{label}: la dimensione di {size_mb}MB supera il limite di {cap}; inviato come file."
email:
image_line: "Immagine: {url}"
standalone_subject: "Hermes Agent"
dingtalk:
emotion:
thinking: "🤔Sto ragionando"
done: "🥳Fatto"
irc:
quit_message: "Hermes Agent in arresto"
standalone_quit: "consegnato"
relay:
confirm_approve_once: "Approva una volta"
confirm_always_approve: "Approva sempre"
confirm_cancel: "Annulla"
prompt_other: "✏️ Altro (digita)"
prompt_expired: ⌛ Quella richiesta non attende più una risposta. Invia la tua risposta come messaggio normale.
slash:
approve:
description: "Approva un comando pericoloso in attesa"
bg:
description: "Esegui un prompt in una sessione separata in background"
insights:
description: "Mostra statistiche e analisi di utilizzo"
reload_mcp:
description: "Ricarica i server MCP dalla configurazione"
resume:
description: "Riprendi una sessione a cui hai dato un nome"
sethome:
description: "Imposta questa chat come canale principale"
update:
description: "Aggiorna Hermes Agent all'ultima versione"
category:
session: "Sessione"
configuration: "Configurazione"
info: "Info"
tools_skills: "Strumenti e skill"
plugins: "Plugin"
exit: "Uscita"
context: "Contesto"
background_automation: "Background e automazione"
shared:
usage_suffix: "{description} (uso: /{name} {args_hint})"
alias_for: "{description} (alias di /{name})"
alias_note: " (alias: {aliases})"
slack_alias_for: "Alias di /{name} — {description}"
plugin_default_desc: "Esegui /{name}"
plugin_command_desc: "Comando di un plugin"
hermes:
description: "Parla con Hermes o esegui un sottocomando"
start:
description: "Riconosci i ping di avvio della piattaforma senza rispondere"
new:
description: "Avvia una nuova sessione (nuovo ID di sessione + cronologia)"
topic:
description: "Attiva o ispeziona le sessioni per argomento nei DM Telegram"
clear:
description: "Pulisci lo schermo e avvia una nuova sessione"
redraw:
description: "Forza il ridisegno completo dell'interfaccia (ripara il terminale sfasato)"
history:
description: "Mostra la cronologia della conversazione"
save:
description: "Esporta la conversazione attuale (/save senza argomenti mostra l'uso)"
retry:
description: "Riprova l'ultimo messaggio (lo reinvia all'agente)"
prompt:
description: "Scrivi il prossimo prompt in $EDITOR (markdown), poi invialo"
undo:
description: "Torna indietro di N turni utente e riformula il prompt (predefinito 1)"
title:
description: "Imposta un titolo per la sessione attuale"
handoff:
description: "Passa questa sessione a una piattaforma di messaggistica (Telegram, Discord, ecc.)"
branch:
description: "Crea un ramo della sessione attuale (nuovo thread su Discord/Telegram/Slack/Matrix; --here resta qui)"
worktree:
description: "Mostra, elenca, crea o elimina worktree git isolati"
compress:
description: "Comprimi il contesto della conversazione (aggiungi 'here [N]' per conservare gli ultimi N turni; --preview mostra cosa succederebbe)"
rollback:
description: "Elenca o ripristina i checkpoint del filesystem (il ripristino conserva le tue modifiche manuali; --all le sovrascrive)"
snapshot:
description: "Crea o ripristina snapshot dello stato/configurazione di Hermes"
export:
description: "Esporta un profilo (configurazione, skill, tema) in un archivio condivisibile"
import:
description: "Importa un archivio di profilo condiviso come nuovo profilo"
stop:
description: "Termina tutti i processi in background in esecuzione"
pause:
description: "Metti in pausa globalmente il nuovo lavoro (arresto di emergenza); '/pause off' riprende"
deny:
description: "Nega un comando pericoloso in attesa (opzionalmente con un motivo)"
btw:
description: "Fai una domanda a margine sulla conversazione attuale senza interromperla"
agents:
description: "Mostra gli agenti attivi e le attività in esecuzione"
journey:
description: "Apri la timeline del percorso di apprendimento"
queue:
description: "Metti in coda un prompt per il prossimo turno, oppure list/edit/rm/move/clear per i prompt in coda"
steer:
description: "Inserisci un messaggio dopo la prossima chiamata a uno strumento senza interrompere"
goal:
description: "Imposta un obiettivo permanente su cui Hermes lavora turno dopo turno fino a raggiungerlo"
heartbeat:
description: "Imposta un prompt ricorrente che rientra in questa sessione quando è inattiva"
refine:
description: "Rivedi subito questa conversazione e salva le lezioni in memoria/skill"
review:
description: "Avvia un subagente indipendente per revisionare il lavoro appena discusso (PR, codice, documentazione)"
loop:
description: "Riesegui un prompt a intervalli ricorrenti in questa sessione"
plan:
description: "Scrivi un piano di implementazione in markdown in .hermes/plans/ senza eseguire nulla"
moa:
description: "Esegui un prompt con il preset Mixture of Agents predefinito, poi ripristina il tuo modello"
subgoal:
description: "Aggiungi o gestisci criteri aggiuntivi sull'obiettivo attivo"
status:
description: "Mostra informazioni su sessione, modello, token e contesto"
egress:
description: "Mostra lo stato del proxy egress Docker"
context:
description: "Mostra la vista dettagliata della finestra di contesto con indicatore di utilizzo, ripartizione per categoria, statistiche di compressione e throughput"
whoami:
description: "Mostra il tuo livello di accesso ai comandi slash (admin / user)"
profile:
description: "Mostra il nome del profilo attivo e la sua directory home"
sessions:
description: "Sfoglia e riprendi le sessioni precedenti"
config:
description: "Mostra la configurazione attuale"
model:
description: "Cambia modello (solo per la sessione; --global per renderlo permanente)"
codex-runtime:
description: "Attiva/disattiva il runtime app-server di codex per i modelli OpenAI/Codex"
personality:
description: "Imposta una personalità predefinita"
statusbar:
description: "Attiva/disattiva la barra di stato contesto/modello"
battery:
description: "Attiva/disattiva un indicatore a batteria colorato nella barra di stato"
timestamps:
description: "Attiva/disattiva gli orari [HH:MM] sui messaggi e in /history"
diff:
description: "Mostra le modifiche git nella directory di lavoro"
verbose:
description: "Cicla la visualizzazione dell'avanzamento degli strumenti: off -> new -> all -> verbose"
focus:
description: "Attiva/disattiva la vista focalizzata — mostra solo il tuo prompt e la risposta finale"
footer:
description: "Attiva/disattiva il footer con i metadati di runtime del gateway nelle risposte finali"
yolo:
description: "Attiva/disattiva la modalità YOLO (salta tutte le approvazioni dei comandi pericolosi)"
approvals:
description: "Mostra o imposta la modalità permanente di approvazione dei comandi pericolosi"
reasoning:
description: "Gestisci lo sforzo di ragionamento e la sua visualizzazione"
fast:
description: "Modalità veloce — OpenAI Priority Processing / Anthropic Fast Mode (normal/fast/auto/cold/ultrafast)"
skin:
description: "Mostra o cambia la skin/tema di visualizzazione"
indicator:
description: "Scegli lo stile dell'indicatore di attività della TUI"
voice:
description: "Attiva/disattiva la modalità voce"
wake:
description: "Attiva/disattiva l'ascolto della parola di attivazione 'Hey Hermes'"
busy:
description: "Controlla come vengono gestiti i messaggi mentre Hermes è al lavoro"
tools:
description: "Gestisci gli strumenti: /tools [list|disable|enable] [nome...]"
toolsets:
description: "Elenca i toolset disponibili"
skills:
description: "Cerca, installa, ispeziona o gestisci le skill"
memory:
description: "Rivedi le scritture in memoria in attesa / attiva o disattiva il controllo di approvazione"
bundles:
description: "Elenca i bundle di skill (alias /<nome> per più skill)"
pet:
description: "Attiva/disattiva o adotta una mascotte petdex (/pet, /pet list, /pet <slug>)"
hatch:
description: "Genera un nuovo animaletto petdex da una descrizione"
learn:
description: "Impara una skill riutilizzabile da qualsiasi cosa tu descriva (directory, URL, questa chat, appunti)"
init:
description: "Genera o aggiorna le istruzioni di progetto AGENTS.md da una scansione del repository"
cron:
description: "Gestisci le attività pianificate"
suggestions:
description: "Rivedi le automazioni suggerite (accetta/ignora)"
blueprint:
description: "Configura un'automazione da un modello blueprint"
curator:
description: "Manutenzione delle skill in background (status, run, pin, archive, list-archived)"
kanban:
description: "Bacheca di collaborazione multi-profilo (attività, collegamenti, commenti)"
reload:
description: "Ricarica le variabili .env nella sessione in esecuzione"
reload-mcp:
description: "Ricarica i server MCP dalla configurazione"
reload-skills:
description: "Riesamina ~/.hermes/skills/ per trovare skill installate o rimosse di recente"
browser:
description: "Collega gli strumenti browser al tuo browser Chromium attivo via CDP, oppure passa alla modalità Browser Use"
plugins:
description: "Elenca i plugin installati e il loro stato"
commands:
description: "Sfoglia tutti i comandi e le skill (con paginazione)"
help:
description: "Mostra i comandi disponibili (/help skills elenca i comandi delle skill, /help <testo> filtra)"
palette:
description: "Apri la palette comandi con ricerca fuzzy (anche Ctrl+P)"
restart:
description: "Riavvia il gateway in modo controllato dopo aver completato le esecuzioni attive"
usage:
description: "Mostra l'utilizzo dei token e i limiti di frequenza; `reset` riscatta un reset del limite Codex accumulato"
subscription:
description: "Vedi il tuo piano Nous e modificalo nel browser"
login:
description: "Accedi con un account Nous (mantiene i tuoi connettori)"
topup:
description: "Mostra il tuo saldo Nous e gestisci la fatturazione sul portale"
platforms:
description: "Mostra lo stato del gateway e delle piattaforme di messaggistica"
platform:
description: "Metti in pausa, riprendi o elenca una piattaforma del gateway in errore"
copy:
description: "Copia l'ultima risposta dell'assistente negli appunti"
paste:
description: "Allega l'immagine presente negli appunti"
image:
description: "Allega un file immagine locale per il tuo prossimo prompt"
version:
description: "Mostra la versione di Hermes Agent"
debug:
description: "Carica un report di debug (info di sistema + log) e ottieni link condivisibili"
quit:
description: "Esci dalla CLI (usa --delete per eliminare anche la cronologia della sessione)"
cli:
billing:
load_failed: "{label}: {error}"
load_failed_label: "Impossibile caricare la fatturazione"
not_logged_in: "Non hai effettuato l'accesso a Nous Portal."
run_portal_then: "Esegui `hermes portal` per accedere, poi {cmd}."
org_line: "Org: {org}"
org_line_role: "Org: {org} · {role}"
bar_plan_label: "piano"
bar_topup_label: "ricarica"
bar_pct_used: " · {pct}% usato"
bar_plan: "{label}[{bar}] ${remaining} rimasti su ${total}{pct}"
bar_topup: "{label}[{bar}] ${remaining} · non scade mai"
total_spendable: "Totale spendibile: ${amount}"
one_time_setup: "! Configurazione una tantum"
allow_remote_spending_title: "Consenti la Spesa remota"
allow_remote_spending_detail: "Apre il browser per autorizzare questo terminale."
choice_allow_remote_spending: "Consenti la Spesa remota"
desc_allow_remote_spending: "apri il browser per autorizzare"
choice_not_now: "Non ora"
desc_not_now: "annulla"
opening_browser_remote_spending: "Apertura del browser per consentire la Spesa remota…"
couldnt_allow_remote_spending: "Impossibile consentire la Spesa remota: {error}"
remote_spending_allowed: "Spesa remota consentita."
portal_line: "Portale: {url}"
open_this_url: "Apri questo URL: {url}"
manage_on_portal_url: "Gestisci sul portale: {url}"
no_manage_url: "Nessun URL di gestione disponibile — il portale è configurato?"
stepup_stale: "La Spesa remota non è ancora attiva per questo terminale — l'autorizzazione non è andata a buon fine. Riprova, oppure fai questa modifica sul portale."
something_went_wrong: "Qualcosa è andato storto."
under_five: "meno di $5"
plan_free: "Free"
renews_suffix: " · si rinnova il {date}"
plan_line: "Piano: {plan}{renews}"
free_models_only_hint: "> Free · solo modelli gratuiti. Esegui /subscription per accedere ai modelli a pagamento."
low_balance_usage: "! Saldo basso · {amount} rimasti. Esegui /topup o /subscription."
usage_cta: "Esegui /subscription per cambiare piano · /topup per aumentare il saldo"
choice_cancel: "Annulla"
choice_back: "Indietro"
choice_go_back: "Torna indietro"
choice_close: "Chiudi"
desc_do_nothing: "non fare nulla"
desc_do_not_charge: "non addebitare"
choice_manage_on_portal: "Gestisci sul portale"
desc_open_billing_page: "apri la pagina di fatturazione nel browser"
topup_header: "Ricarica · saldo {balance}"
topup_title: "Ricarica il tuo saldo"
auto_reload_on_line: "Ricarica automatica: on — sotto {threshold} → ricarica fino a {reload_to}"
auto_reload_off_line: "Ricarica automatica: off"
card_line: "Carta: {card}"
no_saved_card_add_funds_hint: "Nessuna carta salvata — “Aggiungi fondi” ti guida nell'aggiungerne una."
actions_require_admin: "Le azioni di fatturazione richiedono un admin/proprietario dell'org."
remote_spending_off_for_org: "La Spesa remota è disattivata per questa org."
killswitch_reason_overview: "Un admin della fatturazione può attivarla dalla pagina Hermes Agent del portale per aggiungere fondi da qui."
killswitch_reason_buy: "Un admin della fatturazione può attivarla dalla pagina Hermes Agent del portale prima di aggiungere fondi."
add_funds_now_hint: "Aggiungi fondi ora — un addebito singolo, accreditato sul tuo saldo oggi."
refill_when_low_amounts: "Ricarica quando il saldo è basso — addebita {reload_to} automaticamente quando il saldo scende sotto {threshold}."
refill_when_low_generic: "Ricarica quando il saldo è basso — addebita automaticamente la tua carta quando il saldo scende sotto l'importo che imposti."
choice_add_funds: "Aggiungi fondi"
desc_add_funds: "un addebito singolo, accreditato sul tuo saldo oggi"
choice_auto_reload: "Ricarica automatica"
desc_auto_reload: "ricarica automaticamente quando il saldo si esaurisce"
choice_monthly_limit: "Limite mensile"
desc_monthly_limit: "mostra il tetto di spesa mensile (sola lettura)"
cancelled: "Annullato."
cancelled_yellow: "🟡 Annullato."
cancelled_no_funds: "Annullato. Nessun fondo aggiunto."
no_portal_url: "Nessun URL del portale disponibile."
complete_in_browser: "Completa le modifiche di fatturazione nel browser."
add_card_first: "Aggiungi prima una carta"
add_card_title: "Aggiungi una carta"
no_saved_card: "Nessuna carta salvata."
no_saved_card_short: "Nessuna carta salvata"
no_saved_card_lower: "nessuna carta salvata"
add_card_once_hint: "Aggiungi una carta una sola volta nella pagina di fatturazione del portale — dopo potrai ricaricare direttamente dal terminale."
add_card_then_recheck: "Aggiungi la carta nella pagina di fatturazione, poi scegli “controlla di nuovo” qui."
card_found_continuing: "Carta trovata: {card} — continuo."
still_no_card: "Ancora nessuna carta salvata — completa l'aggiunta sul portale, poi controlla di nuovo."
choice_add_card_on_portal: "Aggiungi una carta sul portale"
desc_add_card_on_portal: "apre la pagina di fatturazione nel browser"
choice_recheck_card: "L'ho aggiunta — controlla di nuovo"
desc_recheck_card: "ricontrolla la carta e continua"
add_funds: "Aggiungi fondi"
presets: "Preimpostati: {presets}"
run_interactive_to_purchase: "Esegui questo comando nella CLI interattiva per completare un acquisto."
desc_one_time_purchase: "acquisto singolo di crediti"
choice_custom_amount: "Importo personalizzato…"
desc_custom_amount: "inserisci un importo a tua scelta"
payment_line: "Pagamento: {card}"
amount_prompt: "Importo (USD):"
invalid_selection: "🔴 Selezione non valida."
confirm_purchase: "Conferma acquisto"
total_line: "Totale: {amount}"
portal_card_will_be_charged: "Verrà addebitata la carta salvata sul portale."
consent_charge: "Confermando, autorizzi Nous Research ad addebitare la tua carta."
choice_pay_now: "Paga {amount} ora"
desc_submit_charge: "invia l'addebito"
desc_manage_card_billing: "gestisci carta / fatturazione nel browser"
run_interactive_to_confirm: "Esegui nella CLI interattiva per confermare un acquisto."
pay_question: "Pagare {amount}?"
no_charge_id: "Nessun id di addebito restituito; controlla il portale."
charge_submitted: "Addebito inviato — conferma del pagamento in corso…"
could_not_check_charge: "🔴 Impossibile verificare l'addebito: {error}"
added_to_balance: "✓ {amount} aggiunti al tuo saldo."
still_processing: "🟡 Ancora in elaborazione dopo 5 minuti — è un timeout, non un errore. Controlla /billing o il portale tra poco."
charge_failed_authentication_required: "🔴 La tua banca richiede una verifica (3DS). Completala sul portale per concludere questo acquisto."
charge_failed_payment_method_expired: "🔴 La tua carta è scaduta. Aggiornala sul portale."
charge_failed_card_declined: "🔴 La tua carta è stata rifiutata. Prova un'altra carta sul portale."
charge_failed_generic: "🔴 L'addebito non è andato a buon fine ({reason})."
charge_error_no_payment_method: "💳 Nessuna carta salvata — ricarica e gestisci la fatturazione sul portale."
charge_error_remote_spending_disabled: "La Spesa remota è disattivata per questo account — un admin della fatturazione può attivarla dalla pagina Hermes Agent del portale."
charge_error_role_required: "Per aggiungere fondi serve un admin/proprietario dell'org. Chiedi a un admin, oppure gestisci sul portale."
charge_error_idempotency_conflict: "🔴 Quella chiave di addebito è già stata usata per un importo diverso. Avvia una nuova ricarica."
revoked_by_admin: "Un admin ha interrotto la spesa da questo terminale."
revoked_by_you: "Hai interrotto la spesa da questo terminale."
revoked_reconnect: "🔴 {who} Riconnettiti per ripristinarla — esegui `hermes portal` per autorizzare di nuovo."
session_logged_out: "🔴 La tua sessione è stata disconnessa. Esegui `hermes portal` per accedere di nuovo."
monthly_cap_reached_headroom: "🔴 Tetto di spesa mensile raggiunto — ${remaining} di margine rimasti."
monthly_cap_reached: "🔴 Tetto di spesa mensile raggiunto."
try_again_in_min: " (riprova tra ~{minutes} min)"
too_many_charges: "🟡 Troppi addebiti in questo momento{mins}. Non è un errore di pagamento."
remote_spending_needs_approval: "🔴 La Spesa remota richiede un'approvazione — esegui /topup per consentirla, poi riprova."
your_topup: "la tua ricarica"
charge_stepup_explain: "Per addebitare da questo terminale, consenti la Spesa remota una sola volta. Si apre il browser per autorizzare, poi {amount} riprende direttamente da qui."
charge_stepup_noninteractive: "Esegui `hermes portal` e consenti la Spesa remota, poi riprova."
charge_stepup_declined: "Nessun addebito effettuato. Esegui /topup quando vuoi consentire la Spesa remota."
charge_stepup_not_granted: "Impossibile consentire la Spesa remota — deve approvarla un admin o proprietario dell'org. La tua carta non è stata addebitata."
allowed_but_org_off: "La Spesa remota è consentita per questo terminale, ma è ancora disattivata per questa org. Un admin della fatturazione può attivarla dalla pagina Hermes Agent del portale; poi esegui di nuovo /topup."
allowed_no_card: "Spesa remota consentita — ma non c'è ancora nessuna carta salvata."
topup_on_portal_to_continue: "Ricarica e gestisci la fatturazione sul portale per continuare."
allowed_run_topup: "Spesa remota consentita. Esegui /topup per continuare."
choice_resume_topup: "Riprendi la ricarica di {amount}"
desc_resume_topup: "completa l'acquisto in sospeso"
resume_topup_title: "Riprendi la tua ricarica"
resume_topup_detail: "{amount} è pronto per essere completato — premi Invio per riprendere."
resuming_topup: "Ripresa della ricarica — conferma del pagamento in corso…"
auto_reload: "Ricarica automatica"
auto_reload_hint: "Aggiungi fondi automaticamente quando il saldo è basso."
card_on_file: "Carta salvata: {card}"
no_saved_card_manage_portal: "Nessuna carta salvata — gestisci la fatturazione sul portale."
auto_reload_rule: "sotto {threshold} → ricarica fino a {reload_to}"
auto_reload_rule_cap: "Sotto {threshold} → ricarica fino a {reload_to}"
currently: "Attualmente: {rule}"
auto_reload_on_detail: "On — {rule}"
run_interactive_to_configure: "Esegui nella CLI interattiva per configurare la ricarica automatica."
choice_edit_thresholds: "Modifica soglie"
desc_edit_thresholds: "cambia quando / quanto ricaricare"
choice_turn_off: "Disattiva"
desc_turn_off: "disattiva la ricarica automatica"
choice_agree_turn_on: "Accetta e attiva"
desc_agree_turn_on: "attiva la ricarica automatica"
amount_prompt_labeled: "{label} (USD)"
threshold_label: "Quando il saldo scende sotto"
reload_to_label: "Ricarica il saldo fino a"
reload_must_exceed_threshold: "🔴 L'importo di ricarica deve essere maggiore della soglia."
auto_reload_consent: "Confermando, autorizzi Nous Research ad addebitare {card} ogni volta che il saldo raggiunge {threshold}. Puoi disattivarla in qualsiasi momento qui o sul portale."
turn_on_auto_reload_question: "Attivare la ricarica automatica?"
auto_reload_enabled: "✅ Ricarica automatica attiva: sotto {threshold} → ricarica fino a {reload_to}."
auto_reload_disabled: "✅ Ricarica automatica disattivata."
monthly_spend_limit: "Limite di spesa mensile"
no_monthly_cap: "Nessun tetto mensile visibile (gestito sul portale)."
default_ceiling_suffix: " (tetto predefinito)"
used_this_month: "{spent} su {limit} usati questo mese{ceiling}"
monthly_limit_read_only: "Il limite mensile si imposta sul portale — il terminale lo mostra in sola lettura."
subscription:
load_failed_label: "Impossibile caricare l'abbonamento"
team_header: "Abbonamento team"
a_team_org: "un'organizzazione team"
team_connected: "Questo terminale è collegato a {org}. I team usano un saldo condiviso · usa /topup per aggiungere fondi."
personal_note: "Gli abbonamenti personali sono legati al tuo account personale."
your_plan: "il tuo piano"
cancels: "si annulla"
end_of_billing_period: "la fine del periodo di fatturazione"
end_of_cycle: "la fine del ciclo"
status_flip_cancels: " → si annulla"
status_flip_to: " → {tier}"
status_left: " · ${amount} rimanenti"
status_view_only: " · sola visualizzazione"
status_renews: " · si rinnova il {date}"
status_line: "Piano: {plan}{flip}{left}{tail}"
status_free: "Piano: Free · solo modelli gratuiti"
scheduled_change: "Modifica programmata"
scheduled_change_line: "{from_plan} ──▶ {to_plan} {when}"
scheduled_when: "· {when}"
keep_until_then: "Mantieni {plan} (e i suoi crediti) fino ad allora."
paid_models_need_subscription: "> I modelli a pagamento richiedono un abbonamento. Attivane uno per usarli."
low_balance: "! Saldo basso · {amount} rimanenti. Ricarica o passa a un piano superiore prima di un'interruzione a metà esecuzione."
plan_changes_need_admin: "Le modifiche al piano richiedono un admin o proprietario dell'organizzazione."
manage_url_line: "Gestisci il tuo abbonamento: {url}"
open_then_rerun: "Aprilo nel browser, poi esegui di nuovo /subscription."
start_subscription: "Attiva un abbonamento"
choose_plan: "Scegli un piano"
start_opens_portal: "Attivare un abbonamento apre il portale per aggiungere la tua carta."
desc_start_on_portal: "attiva {name} sul portale"
pick_plan_detail: "Scegli un piano per aprirlo sul portale."
cancelled_no_plan_started: "🟡 Annullato. Nessun piano attivato."
opening_portal_to_start: "Apertura del portale per attivare {plan}…"
open_url_to_start: "Apri questo URL per attivare {plan}: {url}"
finish_in_browser: "Completa nel browser, poi esegui di nuovo /subscription."
manage_your_subscription: "Gestisci il tuo abbonamento"
desc_open_subscription_page: "apri la pagina dell'abbonamento nel browser"
choice_copy_link: "Copia link"
desc_copy_link: "copia negli appunti l'URL di gestione dell'abbonamento"
copied: "📋 Copiato: {url}"
manage_url: "URL di gestione: {url}"
choice_keep_plan: "Mantieni {plan} (annulla la modifica programmata)"
desc_keep_plan: "annulla la modifica in attesa"
choice_change_plan: "Cambia piano"
desc_change_plan: "passa a un piano superiore o inferiore dal terminale"
choice_cancel_subscription: "Annulla abbonamento"
desc_cancel_subscription: "programma la cancellazione a fine periodo"
closed_no_change: "🟡 Chiuso. Nessuna modifica al piano."
no_other_plans: "Al momento non ci sono altri piani a cui passare."
direction_upgrade: "upgrade"
direction_downgrade: "downgrade"
tier_row: "{row} · {direction}"
desc_switch_to: "passa a {name}"
change_plan_title: "Cambia piano"
current_pick_detail: "Attuale: {plan}. Scegli un piano per vedere l'anteprima dell'effetto."
cancelled_no_plan_change: "🟡 Annullato. Nessuna modifica al piano."
checking_change: "Verifica della modifica…"
the_selected_plan: "il piano selezionato"
already_on_nothing_to_change: "Sei già su {plan} — niente da modificare."
cannot_confirm_here: "Questa modifica non può essere confermata qui — gestiscila sul portale."
confirm_plan_change: "Conferma la modifica del piano"
tag_charged_now: "· addebito immediato"
tag_scheduled_not_today: "· programmata · non oggi"
charged_amount_now: "{amount} ora (proporzionale)"
charged_prorated_now: "l'importo proporzionale ora"
upgrade_will_be_charged: "Upgrade a {plan}. Ti verrà addebitato {charged}."
card_on_subscription_charged: "L'addebito avverrà sulla carta associata al tuo abbonamento."
named_card_on_subscription_charged: "L'addebito avverrà su {card} — la carta associata al tuo abbonamento."
choice_pay_and_upgrade: "Paga {amount} e fai l'upgrade ora"
choice_upgrade_now_prorated: "Upgrade ora (addebito proporzionale)"
desc_charge_and_upgrade: "addebito + upgrade ora"
change_takes_effect: "Passaggio a {plan} — ha effetto {when}. Nessun addebito ora; mantieni il piano attuale fino ad allora."
choice_schedule_change: "Programma il passaggio a {plan}"
desc_apply_change: "applica questa modifica"
desc_do_not_change: "non modificare"
monthly_credits_change: "Variazione dei crediti mensili: {delta}."
confirm_cancellation: "Conferma la cancellazione"
cancel_stays_active_until: "Annulla {plan} — resta attivo fino a {end}, poi non si rinnoverà."
keep_remaining_credits: "Mantieni i crediti rimanenti per questo periodo. Puoi riprendere l'abbonamento prima della scadenza."
cancel_subscription_question: "Annullare l'abbonamento?"
desc_keep_your_plan: "mantieni il tuo piano"
cancelled_plan_unchanged: "🟡 Annullato. Il tuo piano non è cambiato."
your_new_plan: "il tuo nuovo piano"
upgrade_already_on_tier: "Sei già su {name}."
upgrade_upgraded: "Upgrade a {name} completato. I nuovi crediti mensili arriveranno tra poco."
upgrade_requires_action: "🟡 Questo upgrade richiede una verifica aggiuntiva (3DS). Completala sul portale."
upgrade_payment_failed: "🔴 La tua carta è stata rifiutata. Aggiorna il metodo di pagamento sul portale e riprova."
pending_scheduled: "Programmato — il tuo piano non cambia oggi. Lo mantieni fino alla fine del periodo di fatturazione, poi avviene il passaggio."
pending_cancel_scheduled: "Programmato — il tuo piano resta attivo fino alla fine del periodo di fatturazione, poi si annulla. Oggi non cambia nulla."
pending_resumed: "Annullato — resti sul tuo piano attuale."
rerun_to_review: "Esegui di nuovo /subscription in qualsiasi momento per controllarlo."
stepup_explain: "Per cambiare piano dal terminale, consenti Remote Spending una sola volta. Si apre il browser per l'autorizzazione, poi la modifica prosegue qui."
stepup_noninteractive: "Esegui `hermes portal` e consenti Remote Spending, poi esegui di nuovo /subscription."
stepup_declined: "Nessuna modifica effettuata. Consenti Remote Spending quando sei pronto."
stepup_not_granted: "Impossibile consentire Remote Spending — deve approvarlo un admin o proprietario di questa organizzazione."
remote_spending_not_allowed_yet: "🟡 Remote Spending non è ancora consentito. Consentilo, poi riprova."
upgrade_ambiguous: "🟡 Impossibile confermare l'upgrade — la tua carta potrebbe essere stata addebitata o meno."
rerun_to_check_plan: "Esegui di nuovo /subscription per controllare il tuo piano prima di riprovare."
model:
switched: "✓ Modello cambiato: {model}"
acting_model: "Modello attivo (addebitato per l'esecuzione): {model}"
reasoning_effort: "Livello di ragionamento: {effort}"
reasoning_effort_saved: "Livello di ragionamento: {effort} (salvato nella configurazione)"
saved: "Salvato in config.yaml"
saved_global: "Salvato in config.yaml (--global)"
next_turn_only: "(solo per il prossimo turno — viene ripristinato dopo una risposta)"
session_only: "(solo per questa sessione — aggiungi --global per renderlo permanente)"
effort_none: "nessuno (disattiva il ragionamento)"
effort_keep_current: "Mantieni il livello attuale"
no_authenticated_providers: "Nessun provider autenticato trovato."
usage_switch: "cambia modello (questa sessione)"
usage_switch_global: "cambia modello e salvalo come predefinito"
usage_switch_once: "cambia solo per il prossimo turno"
usage_switch_session: "cambia solo per questa sessione"
usage_switch_provider_model: "cambia provider + modello"
usage_switch_reasoning: "cambia e imposta il livello di ragionamento"
usage_switch_provider: "cambia provider"
usage_refresh: "ricarica gli elenchi dei modelli disponibili"
choice_switch_anyway: "Cambia comunque"
desc_switch_anyway: "Usa questo modello per la sessione Hermes corrente."
choice_cancel: "Annulla"
desc_keep_current_model: "Mantieni il modello attuale."
switch_cancelled: "Cambio di modello annullato."
selection_failed: "✗ Selezione del modello non riuscita: {error}"
switch_failed: "⚠ Passaggio al modello {model} non riuscito ({error}); resto su {old_model}."
cleared_picker_cache: "Cache del selettore di modelli svuotata. Aggiornamento..."
moa_one_shot_queued: "MoA one-shot in coda con il preset {preset}; il modello precedente verrà ripristinato dopo questo turno."
normalized_model: "Modello '{old}' normalizzato in '{new}' per {provider}."
normalized_copilot_model: "Modello Copilot '{old}' normalizzato in '{new}'."
stripped_provider_prefix: "Rimosso il prefisso del provider da '{old}'; uso '{new}' per {provider}."
restored_from_session: "Modello ripristinato dalla sessione: {model}"
could_not_load_config: "❌ impossibile caricare la configurazione: {error}"
tip_reset_new_session: "Suggerimento: `/reset` avvia subito una nuova sessione."
single_query:
query_label: "Richiesta:"
kanban_run_reclaimed: "kanban: l'esecuzione di questo worker è stata riassegnata prima dell'avvio; uscita"
shared:
cancel: "Annulla"
back: "← Indietro"
unknown: "sconosciuto"
unknown_error: "Errore sconosciuto"
noun_model: "modello"
label_enabled: "attivo"
label_disabled: "disattivato"
label_yes: "sì"
label_no: "no"
label_on: "on"
label_off: "off"
label_on_upper: "ON"
label_off_upper: "OFF"
label_value: "{label}: {value}"
just_now: "adesso"
ago_seconds: "{seconds}s fa"
ago_minutes: "{minutes} min fa"
ago_hours: "{hours}h fa"
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: "(._.) Nessun agente attivo -- invia prima un messaggio."
n_more: "altri {count}"
more_not_shown: "altri non mostrati"
yes_no_default_yes: "S/n"
yes_no_default_no: "s/N"
yes_initial: "s"
tui:
approval_once: "Consenti una volta"
approval_session: "Consenti per questa sessione"
approval_always: "Aggiungi alla allowlist permanente"
approval_deny: "Nega"
approval_view: "Mostra il comando completo"
approval_title: "⚠️ Comando pericoloso"
approval_choose_full: "… (scegli {label})"
approval_command_truncated: "… (comando troncato — usa /logs o /debug per il testo completo)"
approval_description_truncated: "… (descrizione troncata)"
confirm_title: "Conferma azione"
confirm_footer: "Digita 1/2/3 o usa ↑/↓ e poi Invio. ESC/Ctrl+C annulla."
detail_truncated: "… (dettaglio troncato)"
clarify_title: "{agent_name} ha bisogno di una tua risposta"
clarify_question_count_one: "{count} domanda"
clarify_question_count_other: "{count} domande"
clarify_other_answer: "Altro: {text}"
clarify_other_type_below: "Altro (digita sotto)"
clarify_other_type_answer: "Altro (digita la tua risposta)"
clarify_guidance: "Digita la tua risposta nel prompt qui sotto, poi premi Invio."
picker_title_provider: "⚙ Selettore modelli — Scegli il provider"
picker_provider_row_one: "{name} ({count} modello)"
picker_provider_row_other: "{name} ({count} modelli)"
picker_current_marker: " ← attuale"
picker_current_hint: "Attuale: {model} su {provider}"
picker_title_effort: "⚙ Selettore modelli — Livello di ragionamento per {model}"
picker_current_labeled: "{label} ← attuale"
picker_effort_hint: "Si applica insieme al cambio di modello (stesso ambito) — Invio per scegliere"
picker_title_models: "⚙ Selettore modelli — {provider}"
picker_provider_fallback: "Provider"
picker_filter_hint: "Filtro: {query}▏ ({shown}/{total} corrispondenti — digita per restringere, Backspace per cancellare)"
picker_select_hint: "Seleziona un modello ({count} disponibili) — digita per filtrare"
picker_empty: "Nessun modello elencato per questo provider. Usa Indietro o Annulla."
palette_title: "⚙ Palette comandi"
palette_filter_hint: "Filtro: {query}▏ ({shown}/{total} corrispondenti — Invio inserisce, Esc annulla)"
palette_hint: "Digita per filtrare {total} comandi — ↑/↓ e poi Invio inserisce, Esc annulla"
palette_empty: "(nessun comando corrispondente)"
vault_code_title: "🔐 Codice di verifica per {site}"
vault_code_body: "{site} chiede un codice monouso (SMS, email o app di autenticazione).\nDigita il codice e premi Invio; {agent_name} lo inserisce nella pagina per te.\nInvio su una riga vuota salta il passaggio. Il modello non vede mai il codice."
vault_save_title: "🔐 Salva l'accesso per {site}"
vault_save_body: "L'agente ha raggiunto una pagina di accesso senza credenziali salvate per questo sito.\nDigita l'email / nome utente con cui accedi (visibile), poi Invio.\nInvio su una riga vuota salta il passaggio. Nulla di quanto scrivi qui viene mostrato al modello."
vault_save_pw_body: "Ora la password (nascosta). Viene cifrata su questa macchina, associata a\n{origin} e inserita nella pagina senza che il modello la veda mai.\nInvio su una riga vuota salta il passaggio."
vault_unlock_title: "🔐 Sblocca {backend}"
vault_unlock_body: "L'agente vuole accedere a un sito con credenziali salvate in {backend}.\nDigita la tua password principale (nascosta) per sbloccarlo per questa sessione.\nInvio su una riga vuota lo lascia bloccato. Il modello non vede mai la password."
sudo_title: "🔐 Password sudo richiesta"
sudo_body: "Inserisci la password qui sotto (nascosta), oppure premi Invio per saltare"
secret_title: "🔑 Configurazione skill richiesta"
secret_prompt: "Inserisci il valore per {var_name}"
secret_fallback_name: "segreto"
secret_body: "Inserisci il segreto qui sotto (nascosto), ESC o Ctrl+C per saltare"
connection_connect: "Connetti"
connection_continue: "Continua"
hint_sudo: "password nascosta · Invio per saltare"
hint_secret: "segreto nascosto · Invio per saltare"
hint_approval: "↑/↓ per selezionare, Invio per confermare"
hint_slash_confirm: "digita 1/2/3, oppure ↑/↓ per selezionare, Invio per confermare"
hint_connection_form: "digita il valore, Invio per il campo successivo · ↑/↓ sposta · ESC annulla"
hint_connection_url: "Invio per aprire nel browser · ESC annulla"
hint_connection_authorized: "↑/↓ seleziona, Invio per confermare"
hint_connection_waiting: "in attesa del backend… · Ctrl+C interrompe"
hint_connection_default: "configurazione connessione"
hint_vault_username: "visibile mentre digiti · Invio per continuare"
hint_clarify_freetext: "digita la tua risposta e premi Invio"
hint_clarify_batch: "↑/↓ per selezionare, Invio per bloccare, Tab domanda successiva"
hint_input_disabled: "input temporaneamente disattivato"
hint_input_queues: "l'input resta attivo; Invio mette in coda"
hint_command_running: "{frame} comando in corso · {detail}"
placeholder_recording: "registrazione... {shortcut} per fermare, Ctrl+C per annullare"
placeholder_transcribing: "trascrizione in corso..."
placeholder_vault_username: "digita email / nome utente, Invio per continuare · ESC per saltare"
placeholder_vault_code: "digita il codice, Invio per inviare · ESC per saltare"
placeholder_password: "digita la password (nascosta), Invio per inviare · ESC per saltare"
placeholder_secret: "digita il segreto (nascosto), Invio per inviare · ESC per saltare"
placeholder_choice: "digita 1/2/3, oppure usa ↑/↓ e poi Invio"
placeholder_answer: "digita qui la tua risposta e premi Invio"
placeholder_processing_command: "Elaborazione del comando..."
placeholder_busy: "msg=interrompi · /queue · /bg · /steer · Ctrl+C annulla"
placeholder_voice_idle: "digita o {shortcut} per registrare"
voice_recording_failed: "Registrazione vocale non riuscita: {error}"
recording_cancelled: "Registrazione annullata."
force_exiting: "⚡ Uscita forzata..."
interrupting_again_hint: "⚡ Interruzione dell'agente... (premi di nuovo Ctrl+C per forzare l'uscita)"
interrupting: "⚡ Interruzione dell'agente..."
suspend_unsupported: "La sospensione (Ctrl+Z) non è supportata su Windows."
suspended: "{agent_name} è stato sospeso. Esegui `fg` per riportare {agent_name} in primo piano."
steer_failed_queued: "Indirizzamento non riuscito ({error}) — messo in coda per il prossimo turno."
steered: "⏩ Indirizzato: '{preview}'"
images_attached_preview_one: "[{count} immagine allegata]"
images_attached_preview_other: "[{count} immagini allegate]"
queued_next_turn: "In coda per il prossimo turno: {preview}"
redirected_turn: "↪ Turno corrente reindirizzato: '{preview}'"
model_selection_failed: "✗ Selezione del modello non riuscita: {error}"
auto_attached_image: "📎 Immagine allegata automaticamente: {name}"
detected_file: "📄 File rilevato: {name}"
images_attached_one: "📎 {count} immagine allegata"
images_attached_other: "📎 {count} immagini allegate"
command_interrupted: "Comando interrotto."
welcome: "Benvenuto in Hermes Agent! Digita il tuo messaggio o /help per i comandi."
activated_skills_label: "Skill attivate:"
redaction_disabled_title: "⚠ La redazione dei segreti è DISATTIVATA"
redaction_disabled_body: "(HERMES_REDACT_SECRETS={value}). Chiavi API e token potrebbero comparire in chiaro nell'output della chat, nei JSON di sessione e nei log. Imposta {setting} in config.yaml per riattivarla."
stdin_unavailable: "Errore: stdin (fd 0) non è disponibile.\nPuò succedere con alcune installazioni di Python (es. cPython gestito da uv su macOS).\nProva a reinstallare Python con pyenv o Homebrew, poi riesegui: hermes setup"
shutting_down: "Chiusura in corso… (finalizzazione della sessione)"
session_deleted: "✓ Sessione {session_id} eliminata"
session_delete_missing: "✗ Sessione {session_id} non trovata per l'eliminazione"
voice:
err_termux_app_missing: "Rilevato il pacchetto comandi Termux:API, ma l'app Android manca.\nInstalla/aggiorna l'app Android Termux:API, poi riprova con /voice on."
err_mic_access: "La modalità vocale richiede l'accesso al microfono.\nEsegui pkg install termux-api e installa l'app Android Termux:API, poi riprova con /voice on."
err_audio_capture: "La modalità vocale richiede l'acquisizione audio."
err_stt_provider: "La modalità vocale richiede un provider STT per la trascrizione.\nEsegui hermes tools e configura Speech-to-Text, poi riavvia Hermes."
silence_autostop: "Silenzio rilevato, interruzione automatica..."
hint_continuous: "si interrompe da solo al silenzio | {shortcut} per fermare ed uscire dalla modalità continua"
hint_termux: "Acquisizione Termux:API | {shortcut} per fermare"
hint_stop: "{shortcut} per fermare"
recording: "● Registrazione..."
autorestart_failed: "Riavvio automatico della voce non riuscito: {error}"
no_speech: "Nessun parlato rilevato."
preparing_stt: "Preparazione del modello STT locale '{model}' (al primo uso potrebbe essere scaricato da Hugging Face)..."
transcribing: "Trascrizione in corso..."
stop_phrase: "Frase di stop rilevata — chiusura della chat vocale."
transcription_failed: "Trascrizione non riuscita: {error}"
processing_error: "Errore nell'elaborazione vocale: {error}"
recording_preserved: "Registrazione conservata in: {path}"
no_speech_stop: "Nessun parlato rilevato per 3 volte, modalità continua interrotta."
tts_failed: "Riproduzione TTS non riuscita: {error}"
interjection: "🎤 Intervento vocale — interruzione in corso…"
echo_ignored: "Ignorato probabile eco del TTS (non messo in coda)."
already_enabled: "La modalità vocale è già attiva."
unavailable_header: "Modalità vocale non disponibile in questo ambiente:"
requirements_header: "Requisiti della modalità vocale non soddisfatti:"
termux_install_cmd: "Esegui: pkg install termux-api"
termux_install_hint: "Poi installa/aggiorna l'app Android Termux:API per l'acquisizione dal microfono"
tts_enabled_suffix: " (TTS attivo)"
enabled: "Modalità vocale attivata{tts_status}"
record_key_hint: "{shortcut} per avviare/fermare la registrazione"
tts_toggle_hint: "/voice tts per attivare/disattivare l'output vocale"
disable_hint: "/voice off per disattivare la modalità vocale"
stop_phrase_typed: "Frase di stop digitata — chiusura della chat vocale."
disabled: "Modalità vocale disattivata."
wake_unavailable: "Parola di attivazione non disponibile: {error}"
wake_already: "La parola di attivazione è già in ascolto."
wake_requirements_header: "Requisiti della parola di attivazione non soddisfatti:"
wake_installing: "Installazione del motore per la parola di attivazione (primo uso — potrebbe volerci un minuto)..."
wake_start_failed: "Impossibile avviare la parola di attivazione: {error}"
wake_listening: "Parola di attivazione in ascolto"
wake_listening_hint: "(pronuncia \"{phrase}\" — /wake off per fermare)"
wake_stopped: "Parola di attivazione fermata."
wake_not_running: "La parola di attivazione non è in esecuzione."
wake_profile_hint: "Frase di attivazione per il profilo '{profile}' — esegui: hermes -p {profile}"
wake_detected: "✦ Parola di attivazione rilevata — in ascolto..."
wake_capture_failed: "Acquisizione dopo l'attivazione non riuscita: {error}"
state_listening: "IN ASCOLTO"
state_paused: "IN PAUSA"
state_off: "OFF"
state_on: "ON"
state_yes: "SÌ"
wake_status_title: "Stato parola di attivazione"
label_state: " Stato: {state}"
label_phrase: " Frase: \"{phrase}\""
label_provider: " Provider: {provider}"
label_surface: " Superficie: {surface}"
label_new_session: " Nuova sessione: {value}"
mic_silent_warning: "⚠ Il microfono restituisce solo silenzio — l'ascoltatore non sente nulla."
mic_silent_macos_hint: "Su macOS: Impostazioni di Sistema > Privacy e sicurezza > Microfono — consenti il tuo terminale/Hermes, poi /wake off + /wake on."
wake_enable_hint: "Attiva con /wake on"
enable_first_hint: "Attiva prima la modalità vocale: /voice on"
tts_no_provider: "Avviso: nessun provider TTS disponibile. Installa edge-tts o imposta le chiavi API."
tts_status: "TTS vocale {status}."
status_title: "Stato modalità vocale"
label_mode: " Modalità: {value}"
label_tts: " TTS: {value}"
label_recording: " Registrazione: {value}"
label_record_key: " Tasto di registrazione: {shortcut}"
label_requirements: "Requisiti:"
render:
response_transformed: "[Risposta trasformata dopo lo streaming]"
banner_tagline: "{name} - Framework per agenti AI"
banner_version: "Hermes Agent v{version} ({date})"
subagents:
cannot_steer_process: "I processi in background non possono essere indirizzati; interrompili o leggi il log."
count_live: "{count} attivi"
count_done: "{count} completati"
count_running: "{count} in esecuzione"
count_procs_one: "{count} processo"
count_procs_other: "{count} processi"
count_queued: "{count} in coda"
goal_parked: "obiettivo parcheggiato"
goal_paused: "obiettivo in pausa"
goal_active: "obiettivo attivo"
title_live_work: "Lavoro in corso"
title_subagents: "Subagenti"
title_processes: "Processi"
last_tool: "ultimo: {tool}"
starting: "avvio"
next_queued: "prossimo: {text}"
heading_full: "{title} · {count} · Ctrl+T espandi · Ctrl+R ripristina"
heading_medium: "{count} · Ctrl+T espandi · Ctrl+R ripristina"
heading_compact: "{count} · Ctrl+T · Ctrl+R"
heading_session_restore: "{count} · Ctrl+R ripristina"
heading_session_compact: "{count} · Ctrl+R"
subagents_heading: "Subagenti · {count} attivi · Ctrl+T espandi · Ctrl+R comprimi"
more_subagents: "+{count} altri · Ctrl+T tutti i subagenti"
controls_expand_collapse: " · Ctrl+T espandi · Ctrl+R comprimi"
processes_heading: "Processi · {summary}{controls}"
more_processes: "+{count} altri · Ctrl+T tutti i processi"
controls_collapse: " · Ctrl+R comprimi"
queue_heading: "Coda · {count} in coda · /queue list{controls}"
more_queued: "+{count} altri"
transcript_unavailable: "Trascrizione in tempo reale non ancora disponibile."
steer_prompt: "Indirizza: "
roster_empty: "Nessun subagente attivo né processo in background. I risultati arrivano nella conversazione."
entry_gone: "Questa voce non è più attiva."
noun_process: "processo"
noun_subagent: "subagente"
footer_confirm_stop: "Interrompere il {noun} selezionato? s conferma · Esc annulla"
footer_confirm_stop_compact: "Interrompere? s sì · Esc annulla"
footer_steering: "Invio mette in coda le indicazioni · Esc annulla (non interrompe)"
footer_steering_compact: "Invio invia · Esc annulla"
footer_steer_key: " s indirizza"
footer_steer_key_long: " · s indirizza"
footer_detail_compact: "PgSu/Giù ·{steer} x interrompi · Esc"
footer_roster_compact: "↑↓ · Invio segui · Ctrl+T chiudi"
footer_detail: "Esc elenco · PgSu/PgGiù segui{steer} · x interrompi"
footer_roster: "↑/↓ seleziona · Invio segui{steer} · x interrompi · q/Ctrl+T chiudi"
dock:
process_goal_label: "processo in background"
last_output: "ultimo: {detail}"
starting: "avvio"
exit_code: "uscita {code}"
verdict_killed: "terminato"
verdict_lost: "perso"
verdict_ago: "{verdict} · {seconds}s fa"
process_gone: "Questo processo non è più tracciato."
no_output: "Ancora nessun output."
approval:
bell_context: "approvazione"
label: "Approvazione"
timeout_denying: "⏱ Timeout — comando negato"
timed_out_no_response: "timeout (nessuna risposta)"
outcome_once: "consentito una volta"
outcome_session: "consentito per la sessione"
outcome_always: "aggiunto alla allowlist"
outcome_deny: "negato"
clarify:
bell_context: "chiarimento"
label: "Chiarimento"
timed_out_locked_answers: "(chiarimento scaduto dopo {timeout}s — restituite le risposte bloccate)"
connect:
bell_context: "configurazione connessione"
cannot_restart: "Questa connessione non può essere riavviata. Annulla e chiedi di nuovo all'agente."
secret_set: "Impostato"
set_up: "Configura {name}"
button_connect: "Connetti"
button_cancel: "Annulla"
button_continue: "Continua"
press_enter_open: "Premi Invio per aprire nel browser"
failed: "Connessione non riuscita"
authorized_no_tools: "Autorizzato. Strumenti non disponibili."
connected: "Connesso"
waiting: "In attesa…"
editor:
only_interactive: "L'editor esterno è disponibile solo nella CLI interattiva."
wait_for_command: "Attendi che il comando corrente finisca prima di aprire l'editor."
finish_active_prompt: "Completa il prompt attivo prima di aprire l'editor."
no_input_buffer: "Nessun buffer di input attivo disponibile per l'editor esterno."
open_failed: "Impossibile aprire l'editor esterno: {error}"
shell_command_failed: "Comando shell non riuscito: {error}"
command_failed: "Comando non riuscito: {error}"
queued_next_turn: "In coda per il prossimo turno: {preview}"
modal:
cancelled_no_input: "🟡 /{command} annullato (nessun input)."
unrecognized_choice: "🟡 Scelta '{raw}' non riconosciuta. /{command} annullato."
cancelled: "🟡 /{command} annullato. {unchanged}"
re_enable_hint: " Riattiva con `approvals.{setting}: true` in config.yaml."
persist_opt_out_failed: "⚠️ Impossibile salvare la disattivazione — {once_verb} solo per questa volta."
persist_failed_proceeding: "⚠️ Impossibile salvare la disattivazione — si procede solo per questa volta."
choice_prompt: "Scelta [1/2/3]: "
destructive_title: "⚠️ /{command} — distrugge lo stato della conversazione"
approve_once: "Approva una volta"
approve_once_detail: "procedi solo questa volta"
always_approve: "Approva sempre"
always_approve_detail: "procedi e silenzia questa richiesta per sempre"
cancel: "Annulla"
cancel_detail: "mantieni la conversazione attuale"
conversation_unchanged: "Conversazione invariata."
destructive_always_msg: "🔒 In futuro /clear, /new, /reset e /undo verranno eseguiti senza conferma."
bell_input_needed: "input richiesto"
bell_turn_complete: "turno completato"
palette:
category_skill: "Skill"
secret:
bell_sudo: "password sudo"
sudo_timeout: "⏱ Timeout — si continua senza sudo"
sudo_received: "✓ Password ricevuta (in cache per la sessione)"
sudo_skipped: "⏭ Saltato"
bell_unlock: "sblocca {name}"
stays_locked: "⏭ {name} resta bloccato"
unlocking_for_session: "✓ Sblocco di {name} per questa sessione"
bell_save_login: "salva le credenziali per {site}"
login_not_saved: "⏭ Credenziali per {site} non salvate"
login_saved: "✓ Credenziali per {site} salvate nel tuo vault"
bell_verification_code: "codice di verifica per {site}"
code_not_entered: "⏭ Nessun codice inserito per {site}"
code_entered: "✓ Codice inserito su {site}"
display:
ui_redrawn: "✓ Interfaccia ridisegnata"
status_bar_visible: "Barra di stato visibile"
status_bar_hidden: "Barra di stato nascosta"
exit:
unknown_argument: "✗ Argomento sconosciuto: {argument}. Usa /exit --delete per eliminare anche la cronologia della sessione."
goal:
barrier_lifted: "▶ Barriera dell'obiettivo rimossa — ripresa in corso."
paused_interrupted: "⏸ Obiettivo in pausa — il turno è stato interrotto. Usa /goal resume per continuare o /goal clear per fermarlo."
loop:
wakeup_firing: "↻ Risveglio /loop n. {tick} in avvio…"
paused_interrupted: "⏸ Loop in pausa — il turno di risveglio è stato interrotto. Usa /loop resume per continuare o /loop stop per terminarlo."
remaining: "↻ Loop: {label}."
plugins:
none_installed: "Nessun plugin utente installato."
install_hint: "Installane uno: hermes plugins install owner/repo"
drop_dir_hint: "Oppure copia una directory di plugin in {path}"
bundled_available: "({count} plugin integrati disponibili — vedi: hermes plugins list)"
user_plugins_header: "Plugin utente ({count}):"
count_noun_tools: "strumenti"
count_noun_hooks: "hook"
count_noun_commands: "comandi"
bundled_more: "(+{count} integrati — vedi: hermes plugins list)"
enable_disable_hint: "Attiva/disattiva: hermes plugins enable/disable <name>"
system_error: "Errore del sistema plugin: {error}"
queue:
usage: "Uso: /queue <prompt> | /queue list | /queue edit N <prompt> | /queue rm N | /queue move FROM TO | /queue clear"
queued: "In coda: {preview}"
queued_next_turn: "In coda per il prossimo turno: {preview}"
empty: "La coda è vuota."
pending_header: "Coda ({count} in attesa):"
cleared_one: "Rimosso {count} prompt dalla coda."
cleared_other: "Rimossi {count} prompt dalla coda."
removed: "Rimosso l'elemento {index} della coda: {preview}"
item_not_found: "Elemento {index} della coda non trovato. Dimensione attuale: {size}"
usage_edit: "Uso: /queue edit <number> <new prompt>"
usage_remove: "Uso: /queue rm <number>"
updated: "Aggiornato l'elemento {index} della coda: {preview}"
usage_move: "Uso: /queue move <from> <to>"
move_out_of_range: "Spostamento fuori dai limiti della coda. Dimensione attuale: {size}"
moved: "Elemento {source} della coda spostato in posizione {destination}."
usage_add: "Uso: /queue add <prompt>"
reload:
env_reloaded: "Ricaricato .env (variabili aggiornate: {count})"
steer:
usage: "Uso: /steer <prompt>"
failed: "Indirizzamento non riuscito: {error}"
queued: "⏩ Indirizzamento in coda — arriverà dopo la prossima chiamata a uno strumento: {preview}"
rejected_empty: "Indirizzamento rifiutato (contenuto vuoto)."
no_agent_queued: "Nessun agente in esecuzione; messo in coda come prossimo turno: {preview}"
title:
session_id: "ID sessione: {session_id}"
current: "Titolo: {title}"
pending: "Titolo (in attesa): {title}"
none_set_usage: "Nessun titolo impostato. Uso: /title <titolo della sessione>"
usage: "Uso: /title <titolo della sessione>"
empty_after_cleanup: "Il titolo è vuoto dopo la pulizia. Usa caratteri stampabili."
set: "Titolo della sessione impostato: {title}"
already_in_use: "Il titolo '{title}' è già usato dalla sessione {session_id}"
queued: "Titolo della sessione in coda: {title} (verrà salvato al primo messaggio)"
undo:
invalid_count: "(._.) Numero {value} non valido — usa /undo o /undo N."
removes_last_exchange: "Questa operazione rimuove dalla cronologia l'ultimo scambio utente/assistente."
removes_last_turns: "Questa operazione rimuove dalla cronologia gli ultimi {count} turni dell'utente."
resume:
tool_calls_one: "[{count} chiamata a strumento: {names}]"
tool_calls_other: "[{count} chiamate a strumenti: {names}]"
event_model_changed: "modello cambiato"
event_delegation_completed: "delega in background completata"
event_process_finished: "processo in background terminato"
event_resumed_interrupted: "turno interrotto ripreso"
session_id_hint: "Usa l'ID di una sessione di un'esecuzione CLI precedente (hermes sessions list)."
session_not_found: "Sessione non trovata: {session_id}"
compressed_into: "La sessione {session_id} è stata compressa in {descendant}; riprendo la sessione discendente con la tua trascrizione."
cannot_resume: "Impossibile riprendere la sessione: {error}"
cannot_resume_prefix: "Impossibile riprendere la sessione:"
resumed_session: "↻ Sessione ripresa"
counts_one: "({count} messaggio utente, {total} messaggi in totale)"
counts_other: "({count} messaggi utente, {total} messaggi in totale)"
session_no_messages: "Sessione {session_id} trovata ma senza messaggi. Si parte da zero."
title_applied: "Titolo della sessione applicato: {title}"
title_apply_failed: "Impossibile applicare il titolo in attesa: {error}"
label_you: "● Tu:"
label_assistant: "◆ {agent_name}:"
earlier_messages: "... {count} messaggi precedenti ..."
panel_title: "Conversazione precedente"
startup:
cooldown_cause_rate_limit: "dopo una risposta di rate-limit o quota"
cooldown_cause_token_refresh: "dopo un aggiornamento del token non riuscito"
cooldown_cause_http: "dopo una risposta HTTP {code}"
cooldown_cause_failed_request: "dopo una richiesta non riuscita"
credential_cooling_down: "La credenziale {provider} è in pausa {cause}; rientrerà in rotazione tra circa {minutes}m."
sign_in_lost: "accesso perso"
sign_in_was_lost: "L'accesso a {provider} è andato perso ({reason}); esegui `hermes auth add {provider}` per accedere di nuovo."
provider_resolution_failed: "Risoluzione del provider non riuscita."
no_api_key_for_provider: "⚠️ Nessuna chiave API trovata per il provider '{provider}'."
no_provider_configured: "⚠️ Nessun provider di inferenza configurato."
run_model_or_setup: "Esegui 'hermes model' per scegliere un provider, oppure 'hermes setup' per la configurazione iniziale."
empty_base_url: "⚠️ Il resolver del provider ha restituito un URL base vuoto. Controlla la configurazione del provider o esegui: hermes setup"
switching_to_fallback: "⚠️ {reason} — passo al fallback: {provider} / {model}"
first_run_no_provider: "☤ Nessun provider di inferenza è ancora configurato — rimediamo subito."
first_run_pick_provider: "Sceglierai un provider (l'OAuth di Nous Portal è il più rapido; nessuna chiave API richiesta) e un modello."
first_run_prompt: "Configurare un provider adesso? [S/n]:"
first_run_skipped: "Saltato. Esegui 'hermes model' o 'hermes setup' in qualsiasi momento."
first_run_cancelled: "Configurazione annullata. Esegui 'hermes model' in qualsiasi momento."
provider_setup_failed: "⚠️ Configurazione del provider non riuscita: {error}"
run_model_to_retry: "Esegui 'hermes model' per riprovare."
provider_configured: "✓ Provider configurato — sei pronto per chattare."
provider_setup_incomplete: "La configurazione del provider non è stata completata. Esegui 'hermes model' per riprovare."
tirith_unavailable: "⚠ scanner di sicurezza tirith attivo ma non disponibile — la scansione dei comandi userà solo il pattern matching"
unknown_toolsets: "Avviso: toolset sconosciuti: {names}"
stdin_unusable: "\nErrore: stdin non è utilizzabile ({error}).\nPuò succedere con alcune installazioni di Python (es. cPython gestito da uv su macOS)\nin cui kqueue non riesce a registrare il fd 0.\nProva a reinstallare Python tramite pyenv o Homebrew, poi esegui di nuovo: hermes setup"
warning: "Avviso: {warning}"
chat:
initializing_agent: "Inizializzazione dell'agente..."
context_refs: "[@ contesto: {count} riferimento/i, {tokens} token]"
context_injection_refused: "Iniezione del contesto rifiutata."
skipped_unreadable_images: "⚠ saltati {count} percorsi di immagini illeggibili"
attaching_images_natively: "📎 allego {count} immagine/i in modo nativo (il modello supporta la visione): {names}"
new_message_interrupting: "⚡ Nuovo messaggio rilevato, interrompo..."
unknown_error: "Errore sconosciuto"
continuous_voice_stopped: "Modalità voce continua interrotta a causa di un errore."
interrupted_marker: "── [Interrotto — elaboro il nuovo messaggio] ──"
iteration_budget_reached: "⚠ Budget di iterazioni raggiunto ({used}/{max}) — la risposta potrebbe essere incompleta"
sending_after_interrupt_multi: "⚡ Invio {count} messaggi dopo l'interruzione: '{preview}'"
sending_after_interrupt: "⚡ Invio dopo l'interruzione: '{preview}'"
delivering_leftover_steer: "⏩ Consegno lo /steer rimasto come prossimo turno: '{preview}'"
reasoning_label: "Ragionamento"
reasoning_more_lines: "... ({count} altre righe — /reasoning full per mostrarle)"
billing_cta_nous: "Esegui [bold]/topup[/] per aggiungere crediti, oppure [bold]/subscription[/] per cambiare piano."
billing_cta_provider: "Aggiungi crediti con {provider}"
your_provider: "il tuo provider"
billing_cta_switch: "Oppure cambia provider con [bold]/model <model> --provider <provider>[/]."
out_of_credits_title: "⚡ Crediti esauriti"
session:
fresh_start: "✨ (◕‿◕)✨ Si ricomincia! Schermo pulito e conversazione azzerata."
model_reset_default: "(modello ripristinato al valore predefinito della configurazione: {model})"
title_rejected: "Titolo rifiutato: {error}"
title_empty_untitled: "Il titolo è vuoto dopo la pulizia — sessione avviata senza titolo."
title_error_untitled: "{error} — sessione avviata senza titolo."
cwd_gone: "⚠ La directory di lavoro della sessione non esiste più: {recorded} — resto in {current}"
cwd_restored: "↻ Directory di lavoro: {path}"
cwd_enter_failed: "⚠ Impossibile entrare nella directory di lavoro della sessione {path}: {error}"
yolo_restored: "⚡ Modalità YOLO ripristinata dalla sessione — tutti i comandi auto-approvati. /yolo per disattivarla."
invalid_checkpoint: "Numero di checkpoint non valido. Usa 1-{count}."
status_tools_deferred: "strumenti differiti"
status_tools_count: "{count} strumenti"
status_toolsets: "toolset: {toolsets}"
status_provider: "provider: {provider}"
status_auth: "auth: {source}"
reasoning_display_suffix: " (visualizzazione: {state})"
yolo_bypass_suffix: " (bypass YOLO attivo)"
ctx_left_prefix: "{percent}% rimasto · "
ctx_tokens_used: "{left}{used} / {max} token usati"
status_title: "Stato Hermes CLI"
label_reasoning: "Ragionamento"
label_approvals: "Approvazioni"
label_context: "Contesto"
recent_intro: "(._.) Nessun messaggio nella chat corrente — ecco le sessioni recenti che puoi riprendere:"
recent_header: "Sessioni recenti:"
column_title: "Titolo"
column_preview: "Anteprima"
column_last_active: "Ultima attività"
column_id: "ID"
resume_usage: "Usa /resume <number>, /resume <session id> o /resume <session title> per continuare."
resume_example: "Esempio: /resume 2"
history_empty: "(._.) Nessuna cronologia della conversazione."
history_tools_header: "[Strumenti]"
history_tools_hidden_one: "({count} messaggio di strumento nascosto)"
history_tools_hidden_other: "({count} messaggi di strumenti nascosti)"
history_title: "(^_^) Cronologia della conversazione"
history_you_header: "[Tu #{index}]"
history_assistant_header: "[{agent_name} #{index}]"
history_no_text: "(nessuna risposta testuale)"
history_tool_calls_one: "(richiesta {count} chiamata a strumento)"
history_tool_calls_other: "(richieste {count} chiamate a strumenti)"
new_session_titled: "(^_^)v Nuova sessione avviata: {title}"
new_session: "(^_^)v Nuova sessione avviata!"
resume_index_out_of_range: "L'indice di ripresa {index} è fuori intervallo."
resume_no_args_hint: "Usa /resume senza argomenti per vedere le sessioni disponibili."
save_nothing: "(;_;) Nessuna conversazione da salvare."
save_dir_failed: "(x_x) Impossibile creare la directory di salvataggio {path}: {error}"
format_markdown: "Markdown"
save_ok: "(^_^)v Conversazione salvata in: {path} ({label})"
save_resume_hint: "Riprendi la sessione attiva con: hermes --resume {session_id}"
save_failed: "(x_x) Impossibile salvare: {error}"
retry_no_messages: "(._.) Nessun messaggio da riprovare."
retry_no_user_message: "(._.) Nessun messaggio utente da riprovare."
retry_unsafe: "(._.) Impossibile riprovare quel messaggio in sicurezza: {error}"
retry_rewind_failed: "(x_x) Riavvolgimento per il nuovo tentativo non riuscito; la cronologia non è stata modificata: {error}"
retrying: "(^_^)b Riprovo: \"{preview}\""
undo_no_messages: "(._.) Nessun messaggio da annullare."
undo_no_user_message: "(._.) Nessun messaggio utente da annullare."
undo_failed: "(x_x) Annullamento non riuscito; la cronologia non è stata modificata: {error}"
undo_ok_one: "(^_^)b Annullato {count} turno ({messages} messaggio/i). Backup salvato in: \"{backup}\""
undo_ok_other: "(^_^)b Annullati {count} turni ({messages} messaggio/i). Backup salvato in: \"{backup}\""
undo_remaining: "Messaggi rimasti nella cronologia: {count}."
yolo_state_locked_on: "bloccato su ON"
yolo_locked: "⚡ YOLO è {state} per questo processo (avviato con --yolo / HERMES_YOLO_MODE). /yolo non può disattivarlo — riavvia senza il flag per riattivare le approvazioni."
yolo_off: "⚠ Modalità YOLO {state} — i comandi pericolosi richiederanno approvazione."
yolo_on: "⚡ Modalità YOLO {state} — tutti i comandi auto-approvati. Usa con cautela."
compress_too_short: "(._.) Conversazione troppo breve per la compressione (servono almeno {min} messaggi)."
compress_no_agent: "(._.) Nessun agente attivo -- invia prima un messaggio."
compress_busy: "Compressione del contesto..."
compress_summarizing: "🗜️ Riepilogo fino a qui: {count} messaggi, mantenendo gli ultimi {keep_last} scambi alla lettera..."
compress_focus: "🗜️ Comprimo {count} messaggi, focus: \"{focus}\"..."
compress_plain: "🗜️ Comprimo {count} messaggi..."
compress_failed: "❌ Compressione non riuscita: {error}"
persist_prompt_summary: "{icon} {label}: {detail} → {outcome}"
goodbye: "Arrivederci! ☤"
exit_resume_hint: "Riprendi questa sessione con:"
exit_label_session: "Sessione: {session_id}"
exit_label_title: "Titolo: {title}"
exit_label_duration: "Durata: {duration}"
exit_label_messages: "Messaggi: {count} ({user} utente, {tool_calls} chiamate a strumenti)"
status_bar:
vim_insert: "INSERT"
vim_replace: "REPLACE"
vim_normal: "NORMAL"
battery_none: "nessuna batteria rilevata su questa macchina"
battery_none_nothing_shown: "nessuna batteria rilevata, quindi qui non verrà mostrato nulla"
battery_currently: " — attualmente {reading}"
battery_state: "Indicatore batteria {state}{detail}"
battery_usage: "Utilizzo: /battery [on|off|status]"
battery_on: "Indicatore batteria on{detail}"
battery_off: "Indicatore batteria off"
latency_label: "{value}s"
velocity_label: "{value} t/s"
voice_rec: "● REC"
voice_rec_stop_hint: "● REC {shortcut} per fermare"
voice_stt: "◉ STT"
voice_transcribing: "◉ Trascrizione..."
voice_tts_on: " | TTS on"
voice_continuous: " | Continua"
voice_mode_hint: "🎤 Modalità voce{tts}{cont} — {shortcut} per registrare"
goal_turns: "⊙ obiettivo {used}/{max}"
goal: "⊙ obiettivo"
ctx_pinned: " fissato"
ctx_unknown: "ctx --"
yolo_badge: "⚠ YOLO"
stash_header_one: "📌 Stash ({count} elemento)"
stash_header_other: "📌 Stash ({count} elementi)"
stash_footer: "↑↓ Enter=ripristina D=elimina Esc"
stash_footer_compact: "↑↓ ⏎ D Esc"
stream:
busy_skills_search: "Ricerca delle skill..."
busy_skills_browse: "Caricamento delle skill..."
busy_skills_inspect: "Ispezione della skill..."
busy_skills_install: "Installazione della skill..."
busy_skills: "Elaborazione del comando skills..."
busy_browser: "Configurazione del browser..."
busy_reload_mcp: "Ricaricamento dei server MCP..."
busy_reload_skills: "Ricaricamento delle skill..."
processing_command: "Elaborazione del comando..."
thinking_label: "[ragionamento]"
thinking_more_lines: "... ({count} altre righe)"
preview_more_lines_one: "... (+{count} altra riga)"
preview_more_lines_other: "... (+{count} altre righe)"
vision_analyzing: "👁️ analizzo {name} ({size_kb}KB)..."
vision_analyzed: "✓ immagine analizzata"
vision_failed: "⚠ analisi visiva non riuscita — percorso incluso per riprovare"
vision_error: "⚠ errore nell'analisi visiva — percorso incluso per riprovare"
tool_preparing: "{emoji} preparo {what}…"
reference_noun: "riferimento"
reference_header_indexed: "Riferimento {index}/{count} — {label}"
reference_header: "Riferimento — {label}"
aggregating_detail: "◆ aggregazione ({detail})"
aggregating: "◆ aggregazione"
background_running_one: "↩ Attività in background in esecuzione — riprenderò quando termina. Continua pure a chattare."
background_running_other: "↩ {count} attività in background in esecuzione — riprenderò quando terminano. Continua pure a chattare."
terminal:
recovered_mouse_modes: "Modalità di input del terminale ripristinate dopo report del mouse sfuggiti. Se si ripete, esegui /new o riavvia questa scheda."
recovered_cooked_mode: "Terminale ripristinato dopo una deriva in cooked mode (l'input dovrebbe rispondere di nuovo normalmente)."
image_badge_count: "[📎 {count} immagini allegate]"
image_badge_numbered: "[📎 Immagine #{index}]"
commands:
shared:
more_suffix: " (+{count} altri)"
set_saved: "✓ {label} impostato su '{value}' (salvato nella configurazione)"
set_session_only: "✓ {label} impostato su '{value}' (solo sessione)"
scope_saved: "(salvato nella configurazione)"
scope_save_failed: "(solo sessione; salvataggio della configurazione non riuscito)"
scope_session: "(questa sessione — usa --global per renderlo permanente)"
unknown_argument: "(._.) Argomento sconosciuto: {arg}"
usage: "Uso: {usage}"
needs_active_session: "{command} richiede una sessione di chat attiva per funzionare."
unavailable_no_session: "{label} non disponibile (nessuna sessione attiva)."
state_on: "ON"
state_off: "OFF"
error: "Errore: {error}"
agent_busy: "L'agente è occupato. Attendi la fine del turno corrente, poi riprova {command}."
no_active_agent_session: "Nessuna sessione agente attiva."
could_not_generate_diff: "Impossibile generare il diff"
busy:
short_queue: "mette in coda per il turno successivo"
short_steer: "indirizza l'esecuzione corrente (dopo la prossima chiamata a uno strumento)"
short_interrupt: "reindirizza subito l'esecuzione corrente"
long_queue: "Invio metterà in coda il messaggio mentre Hermes è occupato."
long_steer: "Invio indirizzerà il tuo messaggio nell'esecuzione corrente (dopo la prossima chiamata a uno strumento)."
long_interrupt: "Invio reindirizzerà l'esecuzione corrente mentre Hermes è occupato; /stop la annulla comunque."
usage: "Uso: /busy [queue|steer|interrupt|status]"
status: "Modalità input quando occupato: {mode}"
enter_while_busy: "Invio quando occupato: {behavior}"
label: "Modalità input quando occupato"
reasoning:
headline_on: "ON"
headline_off: "OFF"
headline_full: "COMPLETO"
headline_clamped: "LIMITATO a 10 righe"
note_show: "Il ragionamento del modello sarà mostrato durante e dopo ogni risposta."
note_full: "Il riquadro di riepilogo dopo la risposta mostrerà il ragionamento completo."
display_on: "on ✓"
display_off: "off"
full_state_full: "completo"
full_state_clamped: "limitato a 10 righe"
effort_line: "Sforzo di ragionamento: {level}"
display_line: "Visualizzazione ragionamento: {display} ({full})"
usage: "Uso: /reasoning <none|minimal|low|medium|high|xhigh|max|ultra|show|hide|full|clamp> [--global]"
display_saved: "✓ Visualizzazione ragionamento: {headline} (salvato)"
display_off_note: "Nota: la visualizzazione del ragionamento è OFF — esegui /reasoning show per vederlo."
valid_levels: "Livelli validi: none, minimal, low, medium, high, xhigh, max, ultra"
valid_display: "Visualizzazione: show, hide"
valid_scope: "Ambito: per sessione di default, --global per renderlo permanente"
effort_set: "✓ Sforzo di ragionamento impostato su '{effort}' {scope}"
indicator:
usage: "Uso: /indicator [{styles}]"
status: "Stile dell'indicatore di attività: {style}"
unknown_style: "(._.) Stile indicatore sconosciuto: {arg}"
label: "Stile dell'indicatore di attività"
note: "La TUI applicherà il nuovo stile al prossimo aggiornamento dello schermo."
fast:
not_supported: "(._.) /fast è disponibile solo per i modelli che supportano la modalità veloce (OpenAI Priority Processing o Anthropic Fast Mode)."
feature_generic: "Modalità veloce"
feature_anthropic: "Anthropic Fast Mode"
feature_openai: "Priority Processing"
feature_ultrafast: "OpenAI Ultrafast"
ultrafast_not_supported: "(._.) Ultrafast è disponibile solo per GPT-6 Astra (modello attuale: {model})."
usage: "Uso: /fast [normal|fast|auto|cold|ultrafast|status] [--global]"
status: "{feature}: {status}"
set_to: "✓ {feature} impostato su {value} {scope}"
hatch:
progress_compose: "┊ composizione dello spritesheet…"
progress_save: "┊ salvataggio…"
progress_drawing: "┊ disegno {state}…"
describe_prompt: "(o_o) Descrivi il tuo pet: "
usage: "(o_o) Uso: /hatch <description> (es. /hatch a tiny cyber fox)"
default_name: "Pet"
designing: "(o_o) Progettazione di '{concept}'… (circa un minuto di chiamate al modello immagini)"
base_failed: "(x_x) Impossibile generare l'aspetto di base: {error}"
no_base_draft: "(x_x) Nessuna bozza di base ricevuta — riprova."
failed: "(x_x) Schiusa non riuscita: {error}"
hatched: "(^_^)b {name} è nato ed è stato adottato — comparirà tra poco!"
pet:
is_out: "(^_^)b {name} è fuori — comparirà tra poco."
put_away_named: "(-_-)zzZ {name} messo a riposo."
put_away: "(-_-)zzZ Pet messo a riposo."
usage_scale: "(o_o) Uso: /pet scale <factor> (es. /pet scale 0.5)"
scale_set: "(^_^) Scala del pet → {scale}."
fetching: "(o_o) Recupero di '{name}' dal petdex…"
adopt_failed: "(x_x) Impossibile adottare '{name}': {error}"
error: "(x_x) {error}"
diff:
label_working: "Non in stage"
label_staged: "In stage"
label_all: "Tutto (rispetto a HEAD)"
untracked: "Non tracciati:"
and_more: "... e altri {count}"
more_lines: "... ({count} righe in più — {hint})"
stat_hint: "esegui /diff --stat per un riepilogo"
stat_hint_session: "esegui /diff session --stat per un riepilogo"
not_enabled: "I checkpoint non sono abilitati, quindi non esiste una baseline di sessione.\nAbilitali con: hermes --checkpoints\nOppure in config.yaml: checkpoints: { enabled: true }\n(Il /diff semplice funziona comunque — usa git direttamente.)"
no_session_changes: "Nessuna modifica — Hermes non ha ancora modificato alcun file qui."
rollback:
not_enabled: "I checkpoint non sono abilitati.\nAbilitali con: hermes --checkpoints\nOppure in config.yaml: checkpoints: { enabled: true }"
none_here_showing_all: "Nessun checkpoint per {cwd} — mostro tutte le directory."
all_directories: "tutte le directory"
usage_diff: "Uso: /rollback diff <N>"
no_changes_since: "Nessuna modifica da questo checkpoint."
more_lines: "... ({count} righe in più, mostro le prime 80)"
restored_all: "✅ Ripristinato al checkpoint {hash}: {reason}"
restored_file: "✅ Ripristinato {file} dal checkpoint {hash}: {reason}"
snapshot_saved: "Uno snapshot pre-rollback è stato salvato automaticamente."
chat_turn_undone: "Turno di chat annullato per corrispondere allo stato ripristinato dei file."
snapshot:
unknown_subcommand: "Sottocomando sconosciuto: {subcommand}"
usage: "Uso: /snapshot [list|create [label]|restore <id>|prune [N]]"
none_yet: "Nessuno snapshot di stato ancora."
create_hint: "Creane uno: /snapshot create [label]"
list_header: "Snapshot di stato ({dir}/state-snapshots/):"
col_num: "#"
col_id: "ID"
col_files: "File"
col_size: "Dimensione"
col_label: "Etichetta"
created: "Snapshot creato: {snapshot_id}"
nothing_to_snapshot: "Nessun file di stato trovato di cui fare uno snapshot."
usage_restore: "Uso: /snapshot restore <snapshot-id>"
most_recent: "Più recente: {snapshot_id}"
invalid_number: "Numero di snapshot non valido. Usa 1-{max}."
restored: "Stato ripristinato da: {snapshot_id}"
restart_recommended: "Riavvio consigliato per i processi gateway/dashboard affinché rilevino le modifiche a state.db."
not_found: "Snapshot non trovato: {snapshot_id}"
restore_incomplete: "Lo snapshot {snapshot_id} non è stato ripristinato completamente; alcuni file sono stati rifiutati (vedi i log)"
usage_prune: "Uso: /snapshot prune [keep-count]"
pruned: "Eliminati {deleted} snapshot vecchi (conservati: {keep})."
export:
usage: "Uso: /export [profile] [-o output.tar.gz]"
exported: "✓ Esportato '{name}' in {path}"
share_hint: "Condividilo: l'altro utente esegue /import o `hermes profile import <archive>`."
import:
usage: "Uso: /import <archive.tar.gz> [--name <name>]"
imported: "✓ Profilo '{name}' importato in {path}"
wrapper_created: "Wrapper creato: {path}"
use_it: "Per usarlo: hermes -p {name}"
stop:
none_running: "Nessun processo in background in esecuzione."
stopping: "Interruzione di {count} processi in background..."
stopped: "✅ Processi interrotti: {count}."
interrupted_delegations: "✅ Delegazioni in background interrotte: {count}."
agents:
running_processes: "Processi in esecuzione: {count}"
recently_finished: "Terminati di recente: {count}"
background_delegations: "Delegazioni in background: {count} in esecuzione"
no_progress: " · nessun progresso da {seconds}s — interruzione in corso"
quiet: " · silenzio da {seconds}s"
in_tool: "in {tool}"
between_turns: "tra un turno e l'altro"
child_line: "└ figlio {index}: {api_calls} chiamate API · {doing}"
last_activity: " · ultima attività {seconds}s fa"
agent_running: "Agente: in esecuzione"
agent_idle: "Agente: inattivo"
journey:
failed: "/journey non riuscito: {error}"
paste:
no_image: "(._.) Nessuna immagine trovata negli appunti"
attached: "📎 Immagine #{index} allegata dagli appunti"
extract_failed: "(>_<) Gli appunti contengono un'immagine ma l'estrazione non è riuscita"
copy:
nothing_yet: "Niente da copiare per ora."
usage: "Uso: /copy [number]"
invalid_number: "Numero di risposta non valido. Usa 1-{max}."
nothing_in_responses: "Niente da copiare nelle risposte dell'assistente per ora."
nothing_in_response: "Niente da copiare in quella risposta dell'assistente."
copied_osc52: "Risposta dell'assistente #{index} copiata via OSC 52 (richiede il supporto del terminale)"
copied: "Risposta dell'assistente #{index} copiata negli appunti"
failed: "Copia negli appunti non riuscita: {error}"
image:
usage: "Uso: /image <path> es. /image {example}"
not_found: "(>_<) File non trovato: {path}"
unsupported: "(._.) Non è un file immagine supportato: {name}"
attached: "📎 Immagine allegata: {name}"
now_type_prompt: "Ora digita il tuo prompt (o usa --image in modalità query singola): {text}"
tools:
usage: "(._.) Uso: /tools {subcommand} <name> [name ...]"
example_toolset: "Toolset integrato: /tools {subcommand} web"
example_mcp: "Strumento MCP: /tools {subcommand} github:create_issue"
disabling: "Disattivazione di {names}..."
enabling: "Attivazione di {names}..."
session_reset: "Sessione reimpostata. La nuova configurazione degli strumenti è attiva."
profile:
profile: "Profilo: {profile}"
home: "Home: {home}"
handoff:
usage: "Uso: /handoff <platform>"
usage_detail_1: "Trasferisce la sessione corrente al canale principale di quella piattaforma."
usage_detail_2: "La sessione CLI termina qui; riprendila più tardi con /resume."
already_in_flight: "La sessione è già in fase di trasferimento. Attendi che si stabilizzi, poi riprova."
queued: "Trasferimento di '{title}' → {platform} in coda (canale principale: {home})."
waiting: "In attesa che il gateway lo prenda in carico..."
config_load_failed: "Impossibile caricare la configurazione del gateway: {error}"
unknown_platform: "Piattaforma sconosciuta '{platform}'."
platform_not_enabled: "La piattaforma '{platform}' non è configurata/attiva nel gateway."
no_home_channel: "Nessun canale principale configurato per {platform}."
set_home_hint: "Impostane uno prima con /sethome nella chat di destinazione."
session_row_failed: "Impossibile garantire la riga di sessione in state.db: {error}"
picked_up: "Il gateway l'ha preso in carico; trasferimento in corso..."
complete: "↻ Trasferimento completato. La sessione è ora attiva su {platform}."
resume_hint: "Riprendila più tardi su questa CLI con: /resume {title}"
unknown_error: "errore sconosciuto"
failed: "Trasferimento non riuscito: {error}"
session_intact_retry: "La tua sessione CLI è intatta. Riprova /handoff, oppure usa /resume manualmente sulla piattaforma."
still_transferring: "Trasferimento ancora in corso (l'agente sta riproducendo la tua sessione sulla destinazione)..."
taking_long: "Il gateway sta impiegando insolitamente tanto a completare il trasferimento."
check_platform: "Controlla {platform} — la sessione potrebbe ancora arrivare lì."
no_longer_waiting: "Questa CLI non è più in attesa. Evita di continuare la sessione qui;"
retry_when_settled: "se non arriva nulla, riprova /handoff quando lo stato si è stabilizzato."
timed_out: "Timeout in attesa del gateway. `hermes gateway` è in esecuzione?"
session_intact: "La tua sessione CLI è intatta."
resume:
usage: "Uso: /resume <number|session_id_or_title>"
tip_find_sessions: "Suggerimento: usa /history o `hermes sessions list` per trovare le sessioni."
already_on: "Sei già su quella sessione."
resumed_one: "↻ Sessione ripresa {session_id}{title} ({count} messaggio utente, {total} in totale)"
resumed_other: "↻ Sessione ripresa {session_id}{title} ({count} messaggi utente, {total} in totale)"
resumed_empty: "↻ Sessione ripresa {session_id}{title} — nessun messaggio, si parte da zero."
not_found: "Sessione non trovata: {target}"
not_found_hint: "Usa /sessions o `hermes sessions list` per vedere le sessioni disponibili."
compressed_redirect: "La sessione {session_id} è stata compressa in {resolved_id}; riprendo la sessione discendente con la tua trascrizione."
sessions:
none_yet: "(._.) Nessuna sessione precedente."
branch:
branched_one: "⑂ Sessione ramificata \"{title}\" ({count} messaggio utente)"
branched_other: "⑂ Sessione ramificata \"{title}\" ({count} messaggi utente)"
original_session: "Sessione originale: {session_id}"
branch_session: "Sessione ramo: {session_id}"
worktree:
active: "Worktree attivo: {path}"
branch: "Branch: {branch}"
none_active: "Nessun worktree attivo per questa sessione."
hint_new: "/worktree new [name] — creane uno e sposta questa sessione al suo interno"
hint_prune: "/worktree prune — recupera i worktree obsoleti e i branch già uniti"
not_in_repo_note: "(non all'interno di un repository git)"
unknown_subcommand: "Sottocomando /worktree sconosciuto: {subcommand}"
usage: "Uso: /worktree [new [name] | list]"
new_requires_repo: "❌ /worktree new richiede di trovarsi all'interno di un repository git."
not_in_repo: "Non all'interno di un repository git."
actions_planned: "Azioni pianificate: {count}."
actions_done: "Azioni completate: {count}."
nothing_to_reclaim: "Niente da recuperare — i worktree/branch rimanenti contengono lavoro reale."
preserved: "Worktree conservati con lavoro reale: {count}:"
list_failed: "Impossibile elencare i worktree."
enter_failed: "⚠ Worktree creato ma impossibile entrarci: {error}"
ready: "✅ Worktree pronto: {path}"
tools_in_worktree: "Gli strumenti terminale e file ora operano nel worktree."
personality:
title: "(^o^)/ Personalità"
none_option: "(nessun overlay di personalità)"
usage: "Uso: /personality <name> (* = attiva)"
unknown: "(._.) Personalità sconosciuta: {name}"
available: "Disponibili: none, {available}"
scope_saved: "(salvato nella configurazione)"
scope_session: "(solo sessione)"
cleared: "{face} Personalità rimossa {scope}"
cleared_note: "Nessun overlay di personalità — uso il comportamento base dell'agente."
set_to: "{face} Personalità impostata su '{name}' {scope}"
cron:
repeat_must_be_integer: "(._.) --repeat deve essere un numero intero"
unknown_command: "(._.) Comando cron sconosciuto: {subcommand}"
available: "Disponibili: list, add, edit, pause, resume, run, remove"
overview_title: "(^_^) Attività pianificate"
overview_commands: "Comandi:"
overview_usage: "/cron list\n/cron add \"every 2h\" \"Controlla lo stato del server\" [--skill blogwatcher]\n/cron edit <job_id> --schedule \"every 4h\" --prompt \"Nuova attività\"\n/cron edit <job_id> --skill blogwatcher --skill maps\n/cron edit <job_id> --remove-skill blogwatcher\n/cron edit <job_id> --clear-skills\n/cron pause <job_id>\n/cron resume <job_id>\n/cron run <job_id>\n/cron remove <job_id>"
current_jobs: "Job attuali:"
skills: "Skill: {skills}"
skills_none: "Skill: nessuna"
next_short: "Prossima"
no_jobs_hint: "Nessun job pianificato. Usa '/cron add' per crearne uno."
no_jobs: "(._.) Nessun job pianificato."
list_header: "Job pianificati:"
id: "ID: {job_id}"
name: "Nome: {name}"
state: "Stato: {state}"
schedule: "Pianificazione: {schedule}"
schedule_repeat: "Pianificazione: {schedule} ({repeat})"
next_run: "Prossima esecuzione: {value}"
next_run_na: "Prossima esecuzione: N/D"
prompt: "Prompt: {prompt}"
status_delivery_failed: "delivery_failed: {error}"
status_error: "errore: {error}"
last_run: "Ultima esecuzione: {when} ({status})"
usage_add: "(._.) Uso: /cron add <schedule> <prompt>"
need_prompt_or_skill: "(._.) Indica un prompt o almeno una skill"
create_failed: "(x_x) Impossibile creare il job: {error}"
created: "(^_^)b Job creato: {job_id}"
usage_edit: "(._.) Uso: /cron edit <job_id> [--schedule ...] [--prompt ...] [--skill ...]"
job_not_found: "(._.) Job non trovato: {job_id}"
update_failed: "(x_x) Impossibile aggiornare il job: {error}"
updated: "(^_^)b Job aggiornato: {job_id}"
usage_action: "(._.) Uso: /cron {subcommand} <job_id>"
pause_failed: "(x_x) Impossibile mettere in pausa il job: {error}"
resume_failed: "(x_x) Impossibile riprendere il job: {error}"
run_failed: "(x_x) Impossibile eseguire il job: {error}"
remove_failed: "(x_x) Impossibile rimuovere il job: {error}"
removed: "(^_^)b Job rimosso: {name} ({job_id})"
did_not_run: "(x_x) Job non eseguito: {name} ({job_id})\n {reason}"
paused: "(^_^)b Job in pausa: {name} ({job_id})"
resumed: "(^_^)b Job ripreso: {name} ({job_id})"
triggered: "(^_^)b Job avviato: {name} ({job_id})"
suggestions:
failed: "Comando suggestions non riuscito: {error}"
blueprint:
failed: "Comando cron blueprint non riuscito: {error}"
curator:
failed: "(._.) curator: {error}"
kanban:
failed: "(._.) errore kanban: {error}"
memory:
unknown_subcommand: "Sottocomando /memory sconosciuto. Usa: pending, approve <id>, reject <id>, approval <on|off>."
learn:
from_description: "⚡ Sto creando una skill da quanto hai descritto..."
from_conversation: "⚡ Sto creando una skill da questa conversazione..."
plan:
planning: "📋 Pianificazione: {task}"
from_conversation: "📋 Pianificazione dal contesto di questa conversazione..."
init:
updating: "⚡ Aggiornamento di AGENTS.md da una scansione del progetto..."
generating: "⚡ Generazione di AGENTS.md da una scansione del progetto..."
background:
usage: "Uso: /bg <prompt>\nEsempio: /bg Riassumi le principali notizie di HN di oggi\n(Per una domanda a margine su questa conversazione, usa /btw <question>.)\nL'attività viene eseguita in una sessione separata e i risultati compaiono qui al termine."
no_credentials: "(>_<) Impossibile avviare l'attività in background: nessuna credenziale valida."
started: "🔄 Attività in background #{number} avviata: \"{preview}\""
task_id: "ID attività: {task_id}"
keep_chatting: "Puoi continuare a chattare — i risultati compariranno al termine."
label: "Attività in background #{number}"
complete: "✅ Attività in background #{number} completata"
prompt: "Prompt: \"{preview}\""
title_suffix: "(background #{number})"
no_response: "(Nessuna risposta generata)"
side_result:
complete: "{label} completata"
failed: "❌ {label} non riuscita: {error}"
login:
label: "Accesso"
title_suffix: "(accesso)"
no_result: "(Nessun risultato)"
btw:
usage: "Uso: /btw <question>\nEsempio: /btw in quale file era quell'errore?\nRisponde a una rapida domanda su questa conversazione senza interromperla.\n(Per un'attività in background indipendente, usa /bg <prompt>.)"
no_credentials: "(>_<) Impossibile rispondere alla domanda a margine: nessuna credenziale valida."
header: "💬 /btw: \"{preview}\""
title_suffix: "(btw)"
no_answer: "(Nessuna risposta generata)"
bundles:
unavailable: "Sottosistema bundle non disponibile: {error}"
none_installed: "Nessun bundle di skill installato."
create_hint: "Creane uno con: hermes bundles create <name> --skill <s1> --skill <s2>"
directory: "Directory: {dir}"
title: "Bundle di skill"
installed_count: "({count} installati):"
default_desc: "Carica {count} skill"
skills_count: "({count} skill)"
invoke_hint: "Richiama un bundle con /<slug>. Gestiscili con `hermes bundles`."
browser:
engine_not_in_use: "⚠ browser.engine è 'lightpanda' ma NON è in uso: {reason}"
engine_lightpanda: "Motore: Lightpanda — {reason} (nessuno screenshot)"
binary: "Binario: {path}"
binary_not_found: "⚠ binario lightpanda non trovato — {hint}"
use_usage: "Uso: /browser use [off]"
use_on_hint: "/browser use — passa alla modalità Browser Use (browser_exec tramite CLI 3.0)"
use_off_hint: "/browser use off — torna agli strumenti browser integrati"
use_enabled: "🌐 Modalità Browser Use attiva — browser_exec tramite la Browser Use CLI 3.0"
use_disabled: "🌐 Modalità Browser Use disattivata — strumenti browser integrati ripristinati"
session_reset: "Sessione reimpostata. La nuova configurazione degli strumenti è attiva."
scheme_missing: "(mancante)"
unsupported_scheme: "⚠ Schema URL del browser non supportato: {scheme} (atteso uno tra: http, https, ws, wss)"
invalid_port: "⚠ Porta non valida nell'URL del browser: {url}"
missing_host: "⚠ Host mancante nell'URL del browser: {url}"
port_occupied: "⚠ La porta {port} è occupata da un'altra applicazione che non è un browser CDP"
port_occupied_detail: "(potrebbe usarla un debugger dell'IDE o un dev server) — avvio sulla porta {launch_port}..."
launching: "Nessun browser della famiglia Chromium in esecuzione con debug remoto — tentativo di avvio..."
launch_failed: "⚠ Impossibile avviare automaticamente un browser della famiglia Chromium"
launch_manually: "Avvia manualmente un browser della famiglia Chromium:"
no_executable: "Nessun eseguibile di un browser della famiglia Chromium supportato trovato in questo ambiente"
launched: "✓ Browser della famiglia Chromium avviato e in ascolto sulla porta {port}"
not_responding: "⚠ Browser avviato ma la porta {port} non risponde ancora"
try_again: "Riprova tra qualche secondo — l'istanza di debug potrebbe essere ancora in avvio"
already_listening: "✓ Un browser della famiglia Chromium è già in ascolto su {url}"
port_unreachable: "⚠ La porta {port} non è raggiungibile su {url}"
not_connected: "Browser non connesso — avvia un browser della famiglia Chromium con debug remoto e riprova /browser connect"
connected: "🌐 Browser connesso a un browser della famiglia Chromium attivo tramite CDP"
endpoint: "Endpoint: {url}"
already_default: "Il browser non è connesso a un browser della famiglia Chromium attivo (modalità predefinita già in uso)"
disconnected: "🌐 Browser disconnesso dal browser della famiglia Chromium attivo"
reverted: "Strumenti browser riportati alla modalità predefinita (headless locale o provider cloud)"
status_lightpanda: "🌐 Browser: Lightpanda locale (agent-browser --engine lightpanda)"
status_lightpanda_note: "⚡ Lightpanda: navigazione più veloce, nessun supporto per gli screenshot"
status_lightpanda_fallback: "Fallback automatico a Chromium per screenshot e comandi non riusciti"
status_chrome: "🌐 Browser: Chromium headless locale (agent-browser --engine chrome)"
status_auto: "🌐 Browser: Chromium headless locale (agent-browser)"
status_browser_use: "🌐 Browser: modalità Browser Use (browser_exec tramite la Browser Use CLI 3.0)"
status_browser_use_note: "Chrome locale tramite CDP, oppure browser cloud di Browser Use"
status_use_off_hint: "/browser use off — torna agli strumenti browser integrati"
status_connected: "🌐 Browser: connesso a un browser della famiglia Chromium attivo tramite CDP"
status_reachable: "Stato: ✓ raggiungibile"
status_unreachable: "Stato: ⚠ non raggiungibile (il browser potrebbe non essere in esecuzione)"
status_cloud: "🌐 Browser: {provider} (cloud)"
status_connect_hint: "/browser connect — connettiti al tuo browser della famiglia Chromium attivo"
status_disconnect_hint: "/browser disconnect — torna alla modalità predefinita"
usage: "Uso: /browser connect|disconnect|status|use"
usage_connect: "connect Connette gli strumenti browser alla sessione attiva del tuo browser della famiglia Chromium"
usage_disconnect: "disconnect Torna al backend browser predefinito"
usage_status: "status Mostra la modalità browser attuale"
usage_use: "use [off] Passa alla modalità Browser Use (CLI 3.0) / torna agli strumenti integrati"
heartbeat:
label: "Heartbeat"
paused: "⏸ Heartbeat in pausa: {prompt}"
none_set: "Nessun heartbeat impostato."
none_to_resume: "Nessun heartbeat da riprendere."
resumed: "▶ Heartbeat ripreso (ogni {interval}): {prompt}"
cleared: "✓ Heartbeat rimosso."
usage: "Uso: /heartbeat every <interval> <prompt> (es. /heartbeat every 10m Controlla la CI)"
usage_also: "Inoltre: /heartbeat status | pause | resume | clear"
interval_too_small: "Intervallo troppo breve — il minimo è {min_seconds}s."
prompt_required: "Uso: /heartbeat every <interval> <prompt> — il prompt è obbligatorio."
invalid_label: "Heartbeat non valido"
set: "♥ Heartbeat impostato (ogni {interval}): {prompt}"
set_note: "Si attiva come un turno normale quando la sessione è inattiva e l'intervallo è trascorso. Gestiscilo con /heartbeat pause | resume | clear; vive solo finché questo processo Hermes è in esecuzione — per pianificazioni durevoli usa `hermes cron`."
refine:
nothing_yet: "Niente da perfezionare per ora — invia prima un messaggio."
empty: "Niente da perfezionare per ora — la conversazione è vuota."
failed: "Impossibile avviare /refine: {error}"
focus_suffix: " (focus: {focus})"
started: "⚗ Revisione di questa conversazione in background{focus} — eventuali aggiornamenti a memoria/skill verranno riportati al termine."
review:
nothing_yet: "Niente da revisionare per ora — invia prima un messaggio."
failed: "Impossibile avviare /review: {error}"
goal:
label: "Obiettivi"
continuing: "Continuo subito — passo al prossimo step."
send_to_kick: "Invia un messaggio qualsiasi per avviare il prossimo step."
loop:
label: "Loop"
goal_defers_note: "Nota: un /goal attivo sta guidando questa sessione — i risvegli del loop vengono rinviati finché l'obiettivo non termina, va in pausa o viene parcheggiato."
subgoal:
no_goal: "Nessun obiettivo attivo. Impostane uno con /goal <text>."
usage_remove: "Uso: /subgoal remove <n>"
remove_needs_int: "/subgoal remove: <n> deve essere un numero intero (indice a partire da 1)."
removed: "✓ Sotto-obiettivo {index} rimosso: {text}"
cleared_one: "✓ Rimosso {count} sotto-obiettivo."
cleared_other: "✓ Rimossi {count} sotto-obiettivi."
none_to_clear: "Nessun sotto-obiettivo da rimuovere."
added: "✓ Sotto-obiettivo {index} aggiunto: {text}"
skin:
unavailable: "Motore delle skin non disponibile."
current: "Skin attuale: {name}"
available_header: "Skin disponibili:"
usage: "Uso: /skin <name>"
custom_hint: "Skin personalizzate: metti un file YAML in {dir}/skins/"
unknown: "Skin sconosciuta: {name}"
available: "Disponibili: {names}"
saved_suffix: " (salvata)"
set_to: "Skin impostata su: {name}{saved}"
banner_note: "Nota: i colori del banner si aggiorneranno al prossimo avvio della sessione."
colors_updated: "Colori del prompt e della TUI aggiornati."
prompt_compose:
editor_header: "#! Scrivi il tuo prompt qui sotto. Le righe che iniziano con '#!' vengono ignorate.\n#! Salva ed esci per inviare; lascia vuoto per annullare."
editor_failed: "(>_<) Impossibile aprire l'editor: {error}"
empty: "(._.) Prompt vuoto — niente inviato."
focus:
usage: "Uso: /focus [on|off|status]"
toggle:
save_failed: "Impossibile salvare l'impostazione {setting} in config.yaml"
footer:
usage: "/footer [on|off|status]"
label: "Footer di runtime"
fields: "Campi: {fields}"
timestamps:
usage: "/timestamps [on|off|status]"
label: "Timestamp dei messaggi"
update:
managed_action: "aggiornare Hermes Agent"
choice_update: "Aggiorna ora"
choice_update_desc: "esci dalla sessione attuale e aggiorna Hermes Agent"
choice_cancel: "Annulla"
choice_cancel_desc: "mantieni la sessione attuale"
title: "☤ Aggiorna Hermes Agent"
detail: "Verrà chiusa la sessione attuale ed eseguito `hermes update`."
cancelled: "🟡 /update annullato."
launching: "☤ Avvio dell'aggiornamento..."
voice:
unknown_subcommand: "Sottocomando voice sconosciuto: {subcommand}"
usage: "Uso: /voice [on|off|tts|status]"
wake:
unknown_subcommand: "Sottocomando wake sconosciuto: {subcommand}"
usage: "Uso: /wake [on|off|status]"
enabled_in_config: "Parola di attivazione attiva nella configurazione (wake_word.enabled: true)."
disabled_in_config: "Parola di attivazione disattivata nella configurazione (wake_word.enabled: false)."
tip_line: "✦ Suggerimento: {tip}"
banner:
context_too_low: "⚠️ La lunghezza del contesto è di soli {tokens} token — probabilmente troppo bassa per un agente che usa strumenti."
context_minimum: "Hermes richiede almeno {tokens} token. Gli schemi degli strumenti e il prompt di sistema occupano un prefisso fisso molto ampio."
fix_ollama: "Soluzione per Ollama: OLLAMA_CONTEXT_LENGTH={tokens} ollama serve"
fix_lm_studio: "Soluzione per LM Studio: imposta la lunghezza del contesto nelle impostazioni del modello → ricarica il modello"
fix_local_server: "Soluzione: avvia il server con almeno {tokens_k}K di contesto (llama.cpp: -c {tokens}), oppure imposta model.ollama_num_ctx in config.yaml alla finestra realmente servita"
fix_config: "Soluzione: imposta model.context_length in config.yaml, oppure aumenta l'impostazione del contesto del server"
hermes_models_not_agentic: "⚠ I modelli Nous Research Hermes 3 e 4 NON sono agentici e non sono progettati per l'uso con Hermes Agent."
hermes_models_lack_tools: "Non dispongono delle capacità di tool calling necessarie ai flussi agentici. Valuta un modello agentico (Claude, GPT, Gemini, DeepSeek, ecc.)."
hermes_models_switch_hint: "Cambia con: /model sonnet oppure /model gpt5"
project_skills_loaded: "◆ Skill di progetto caricate da questo repo: {count}"
project_skills_untrusted: "◆ {count} skill di progetto trovate in {root} ma non caricate — esegui `hermes skills trust` per attivarle."
command:
unknown_nothing_sent: "Comando sconosciuto {command} — nulla è stato inviato.{hint}"
did_you_mean_one: "Intendevi {suggestion}?"
type_help: "Digita /help per l'elenco completo."
ambiguous: "Comando ambiguo: {command}"
did_you_mean_many: "Intendevi: {candidates}?"
config:
title: "(^_^) Configurazione"
loaded: "(caricato)"
not_found: "(non trovato)"
microsoft_entra_id: "Microsoft Entra ID"
api_key_not_set: "Non impostata!"
value_not_set: "non impostato"
section_model: "Modello"
section_terminal: "Terminale"
section_agent: "Agente"
section_session: "Sessione"
label_model: "Modello:"
label_base_url: "URL base:"
label_api_key: "Chiave API:"
label_environment: "Ambiente:"
label_ssh_target: "Destinazione SSH:"
label_working_dir: "Directory di lavoro:"
label_timeout: "Timeout:"
label_max_turns: "Turni massimi:"
label_toolsets: "Toolset:"
label_verbose: "Dettagliato:"
label_started: "Avviato:"
label_config_file: "File di configurazione:"
context:
header: "🧠 Utilizzo del contesto — {model}"
compute_failed: "(._.) Impossibile calcolare la ripartizione del contesto: {error}"
error:
auth: "La tua chiave {provider} è stata rifiutata. Esegui `hermes model` per reinserirla."
billing: "Il tuo account {provider} ha esaurito il credito. Ricarica presso il provider, oppure esegui /model per cambiare."
model_not_found: "'{model}' non è disponibile su {provider}. Esegui /model per scegliere un modello valido."
rate_limit: "Limite di richieste raggiunto su {provider}; attendi un minuto oppure usa /model per cambiare."
upstream_blocked: "Un firewall/CDN davanti a {provider} ha bloccato la richiesta (non è la tua chiave). Imposta uno User-Agent tramite extra_headers, oppure usa /model per cambiare."
overloaded: "{provider} è sovraccarico al momento. Invia /retry tra poco, oppure usa /model per cambiare."
server_error: "{provider} ha restituito un errore interno. Invia /retry tra poco, oppure usa /model per cambiare."
timeout: "{provider} non ha risposto in tempo. Invia /retry, oppure usa /model per cambiare."
unknown: "La richiesta al modello non è riuscita. Esegui /model per cambiare oppure `hermes doctor` per verificare la configurazione."
the_provider: "il provider"
the_current_model: "il modello corrente"
with_details: "{lead}\nDettagli: {details}"
agent_init_failed: "Hermes non è riuscito ad avviare la connessione al modello: {error}. Il tuo messaggio non è stato inviato. Esegui `hermes doctor` per verificare la configurazione, oppure /model per scegliere un altro provider."
gateway:
starting: "Avvio di Hermes Gateway (piattaforme di messaggistica)..."
gateway_status:
header: "(✿◠‿◠) Stato del gateway"
platform_config_header: "Configurazione piattaforme di messaggistica:"
enabled: "Attivo"
not_configured: "Non configurato ({env_var})"
conversations_persist: "Le conversazioni persistono fino a /new o /reset."
to_start: "Per avviare il gateway:"
config_file: "File di configurazione: {path}"
load_error: "Errore nel caricamento della configurazione del gateway: {error}"
to_configure: "Per configurare il gateway:"
step_env_vars: "1. Imposta le variabili d'ambiente:"
step_config: "2. Oppure configura le impostazioni in {path}"
help:
header: "(^_^)? Comandi disponibili"
section_session: "Sessione"
section_configuration: "Configurazione"
section_tools_skills: "Strumenti e skill"
section_info: "Info"
section_exit: "Uscita"
section_context: "Contesto"
section_background_automation: "Background e automazione"
usage_suffix: "{description} (utilizzo: /{command} {args})"
alias_suffix: "{description} (alias di /{command})"
skill_commands: "Comandi skill"
skill_bundles: "Bundle di skill"
quick_commands: "Comandi rapidi"
n_installed: "{count} installati"
n_configured: "{count} configurati"
n_skills: "{count} skill"
load_n_skills: "Carica {count} skill"
no_skill_commands: "Nessun comando skill installato."
matching_query: "corrispondenti a '{query}'"
to_list_them: "per elencarli"
filtered_by: "Filtrato per '{query}' — esegui /help per l'elenco completo."
tip_line: "Suggerimento: /help skills elenca i comandi skill · /help <testo> filtra · Ctrl+P apre la palette comandi"
multiline_hint: "Multi-riga: Ctrl+J, Alt+Enter oppure \\\\+Enter per una nuova riga"
draft_editor_hint: "Editor bozza: Ctrl+G (Alt+G in VSCode/Cursor)"
attach_image_hint: "Allega immagine: /image {path} oppure inizia il prompt con il percorso di un'immagine locale"
paste_image_hint: "Incolla immagine: Alt+V (o /paste)"
insights:
no_session_data: "Nessun dato di sessione al momento."
mcp_watch:
changed_reload_skipped: "🔄 Configurazione dei server MCP modificata — ricaricamento saltato (ricaricamento automatico disattivato)."
not_applied_run: "Le nuove impostazioni NON sono ancora applicate. Per applicarle adesso, esegui:"
cache_note: "⚠️ Nota: /reload-mcp ricostruisce il set di strumenti e invalida la cache dei prompt del provider (il prossimo messaggio invierà di nuovo tutti i token di input)."
changed_reloading: "🔄 Configurazione dei server MCP modificata — ricaricamento delle connessioni..."
plugin:
command_error: "Errore nel comando del plugin: {error}"
quick:
no_target: "Il comando rapido '{command}' non ha una destinazione definita"
unsupported_type: "Il comando rapido '{command}' ha un tipo non supportato (supportati: 'exec', 'alias')"
no_command: "Il comando rapido '{command}' non ha un comando definito"
no_output: "Il comando non ha restituito output"
timed_out: "Comando rapido scaduto (30s)"
error: "Errore nel comando rapido: {error}"
reload_mcp:
title: "⚠️ /reload-mcp — Avviso di invalidazione della cache dei prompt"
detail: "Il ricaricamento dei server MCP ricostruisce il set di strumenti per questa sessione e\ninvalida la cache dei prompt del provider. Il prossimo messaggio\ninvierà di nuovo tutti i token di input (può essere costoso su modelli\na contesto lungo o ad alto ragionamento)."
choice_once: "Approva una volta"
choice_once_hint: "ricarica adesso"
choice_always: "Approva sempre"
choice_always_hint: "ricarica adesso e silenzia questa richiesta in modo permanente"
choice_cancel: "Annulla"
choice_cancel_hint: "lascia invariati gli strumenti MCP"
unchanged: "Strumenti MCP invariati."
always_msg: "🔒 Le prossime chiamate a /reload-mcp verranno eseguite senza conferma."
once_verb: "ricaricamento"
reloading: "🔄 Ricaricamento dei server MCP..."
reconnected: "♻️ Riconnessi: {names}"
added: "➕ Aggiunti: {names}"
removed: "➖ Rimossi: {names}"
tools_available: "🔧 {tools} strumenti disponibili da {servers} server"
agent_updated: "✅ Agente aggiornato — {count} strumenti disponibili"
reload_skills:
reloading: "🔄 Ricaricamento delle skill..."
total: "📚 {count} skill disponibili"
added_header: "➕ Skill aggiunte:"
removed_header: "➖ Skill rimosse:"
session_store:
unavailable_rich: "[bold yellow]⚠ Archivio sessioni non disponibile[/bold yellow] — questa conversazione [bold]NON verrà salvata[/bold] e non potrà essere ripresa in seguito. Anche la ricerca nelle sessioni passate è disattivata.\n Motivo: {reason}.\n {action}\n [dim]Dettagli: {details}[/dim]"
unavailable_plain: "AVVISO: archivio sessioni non disponibile — questa conversazione NON verrà salvata e non potrà essere ripresa in seguito. Motivo: {reason}. {action}"
shell:
command_denied: "Comando negato: {reason}"
flagged_as_dangerous: "segnalato come pericoloso"
exited: "! uscito con {code}"
skills:
bundle_load_failed: "Impossibile caricare il bundle per {command}"
loading_bundle: "Caricamento bundle: {name} ({count} skill)"
skipped_missing: "Skill mancanti saltate: {names}"
stacked_load_failed: "Impossibile caricare le skill combinate per {command}"
loading_stacked: "Caricamento di {count} skill combinate: {names}"
loading_skill: "Caricamento skill: {name}"
skill_load_failed: "Impossibile caricare la skill per {command}"
tools:
none_available: "(;_;) Nessuno strumento disponibile"
header: "(^_^)/ Strumenti disponibili"
total: "Totale: {count} strumenti ヽ(^o^)ノ"
toolsets:
header: "(^_^)b Toolset disponibili"
currently_enabled_legend: "(*) = attualmente attivo"
tip_enable_all: "Suggerimento: usa 'all' o '*' per attivare tutti i toolset"
example: "Esempio: python cli.py --toolsets web,terminal"
usage:
unknown_subcommand: "Sottocomando /usage sconosciuto: {args}. Prova /usage oppure /usage reset [--force]."
reset_wrong_provider: "I reset dell'utilizzo accumulato sono disponibili solo con il provider openai-codex."
reset_switch_hint: "Prima cambia con `/model` o `hermes auth`."
checking_reset_credits: "⏳ Verifica dei crediti di reset accumulati..."
codex_timeout: "❌ Timeout nella comunicazione con il backend Codex — riprova tra poco."
no_api_calls: "(._.) Nessuna chiamata API effettuata finora in questa sessione."
header_session: "📊 Utilizzo token della sessione"
label_model: "Modello:"
label_input_tokens: "Token di input:"
label_output_tokens: "Token di output:"
label_reasoning_subset: "↳ Ragionamento (sottoinsieme):"
label_prompt_tokens_total: "Token del prompt (totale):"
label_completion_tokens: "Token di completamento:"
label_total_tokens: "Token totali:"
label_api_calls: "Chiamate API:"
label_session_duration: "Durata sessione:"
label_current_context: "Contesto attuale:"
label_messages: "Messaggi:"
label_compressions: "Compressioni:"
verbose:
label_off: "Avanzamento strumenti: OFF"
detail_off: "modalità silenziosa, solo la risposta finale."
label_new: "Avanzamento strumenti: NEW"
detail_new: "mostra ogni nuovo strumento (salta le ripetizioni)."
label_all: "Avanzamento strumenti: ALL"
detail_all: "mostra ogni chiamata a uno strumento."
label_verbose: "Avanzamento strumenti: VERBOSE"
detail_verbose: "argomenti completi, risultati e blocchi di ragionamento."
whoami:
you_label: "Tu:"
you_value: "cli (terminale locale)"
user_label: "Utente:"
tier_label: "Livello:"
tier_value: "senza restrizioni"
slash_commands_label: "Comandi slash:"
slash_commands_value: "tutti disponibili"
worktree:
shallow_clone_keeping: "⚠ Clone shallow — impossibile verificare lo stato del push, mantengo: {path}"
next_session_deepens: "La prossima sessione `hermes -w` approfondisce il clone ed elimina automaticamente i worktree già uniti."
unpushed_keeping: "⚠ Il worktree ha commit non inviati, mantengo: {path}"
uncommitted_keeping: "⚠ Il worktree ha modifiche non committate, mantengo: {path}"
clean_up_manually: "Per pulire manualmente: git worktree remove --force {path}"
cleaned_up: "✓ Worktree pulito: {path}"
display:
verb:
web_search: "Ricerca sul web"
web_extract: "Lettura"
browser_navigate: "Navigazione"
browser_click: "Clic"
browser_type: "Digitazione"
read_file: "Lettura"
write_file: "Scrittura"
patch: "Modifica"
search_files: "Ricerca nei file"
terminal: "Esecuzione"
execute_code: "Esecuzione codice"
image_generate: "Generazione immagine"
video_generate: "Generazione video"
text_to_speech: "Generazione voce"
vision_analyze: "Analisi dell'immagine"
session_search: "Ricerca nelle sessioni passate"
skill_view: "Lettura skill"
skills_list: "Elenco skill"
skill_manage: "Aggiornamento skill"
delegate_task: "Delega"
cronjob_manage: "Pianificazione"
clarify: "Domanda"
memory: "Aggiornamento memoria"
todo_list: "Aggiornamento attività"
verb_connector:
search: " di "
default: " "
bridge_generating:
tool_call: "una chiamata a uno strumento"
tool_search: "una ricerca di strumenti"
tool_describe: "dettagli dello strumento"
status_phrase:
verb: "— {verb}"
using_tool: "sta usando {tool}"
preview:
shell_plus_one: "{first} + {count} comando"
shell_plus_many: "{first} + {count} comandi"
delegate_tasks: "{count} attività: {goals}"
delegate_parallel_tasks: "{count} attività in parallelo"
todo_verb_updating: "aggiornamento"
todo_verb_planning: "pianificazione"
todo_reading: "lettura elenco attività"
todo_tasks: "{verb} di {count} attività"
missing_old_text: "<old_text mancante>"
send_message_to: "a {target}: \"{message}\""
session_search_recall: "richiamo: \"{query}\""
diff:
review_header: " ┊ diff della revisione"
omitted_lines: "… omesse {count} righe di diff"
omitted_files: " in altri {count} file/sezioni"
thinking_verbs: "riflessione,contemplazione,meditazione,ponderazione,rimuginamento,deliberazione,valutazione,elaborazione,ragionamento,analisi,calcolo,sintesi,formulazione,ideazione,brainstorming"
spinner:
tool_line: " [strumento] {message}"
done_line: " [fatto] {message}{elapsed}"
failure:
file_not_found: "File non trovato: {name}"
terminal_backend_unavailable: "backend del terminale non disponibile"
exit_code: " [exit {code}]"
memory_full: " [piena]"
generic: " [errore]"
generic_word: "errore"
cute:
verb:
search: "ricerca"
fetch: "recupero"
terminal: "$"
read: "lettura"
write: "scrittura"
patch: "patch"
find: "trova"
grep: "grep"
navigate: "naviga"
snapshot: "snapshot"
click: "clic"
type: "digita"
scroll: "scroll"
back: "indietro"
press: "premi"
images: "immagini"
vision: "visione"
plan: "piano"
recall: "richiamo"
memory: "memoria"
skills: "skill"
skill: "skill"
create: "crea"
speak: "parla"
send: "invia"
cron: "cron"
exec: "exec"
browser: "browser"
delegate: "delega"
proc: "proc"
fetch_pages: "pagine"
todo_progress: "{done}/{total} attività"
todo_reading: "lettura attività"
todo_update_progress: "aggiorna {done}/{total} ✓"
todo_update_count: "aggiorna {count} attività"
todo_count: "{count} attività"
cron_task_fallback: "attività"
cron_create: "crea {label}"
cron_listing: "elenco"
delegate_parallel: "in parallelo"
process_list: "ls processi"
snapshot_full: "completo"
snapshot_compact: "compatto"
images_extracting: "estrazione"
vision_analyzing_page: "analisi pagina"
skills_list: "elenco {category}"
skills_all: "tutte"
scroll:
up: "su"
down: "giù"
left: "sinistra"
right: "destra"
fallback_tool_name: "strumento"
fallback_done: "fatto"
completed: "┊ ⚡ {tool} completato {duration}"
iteration_progress:
unbounded: "iterazione {n}"
bounded: "iterazione {n}/{max}"
review:
routing_fallback_warning: "⚠ auxiliary.background_review.provider='{task_provider}' (modello '{task_model}') non instradabile ({error}); fallback su {provider}/{model}"
reasoning_effort_warning: "⚠ auxiliary.background_review.reasoning_effort='{effort}' non ha effetto finché il modello di revisione non è quello principale"
memory_op_line: "{label} {glyph} {preview}"
skill_patched_verbose: "📝 Skill '{name}' corretta: \"{old}\" → \"{new}\""
skill_changed_verbose: "📝 Skill '{name}' {verb}: {description}"
skill_message_verbose: "📝 {message}"
skill_action: "Skill: {action}"
label_updated: "{label} aggiornato"
skill_result: "Skill '{name}' {verb}{path}"
skill_verb:
created: "creata"
rewritten: "riscritta"
patched: "corretta"
written: "scritta"
removed: "rimossa"
deleted: "eliminata"
label:
skill: "Skill"
memory: "Memoria"
user: "Profilo utente"
summary_cli: " 💾 Revisione di auto-miglioramento: {summary}"
summary_callback: "💾 Revisione di auto-miglioramento: {summary}"
aux_failure_label: "revisione in background"
notice:
uncompressed_context_overflow: "⚠️ Il contesto della sessione (~{tokens} token) supera la finestra di contesto del modello (~{context_length} token) con la compressione disattivata (compression.enabled: false). Usa /compact per comprimere la cronologia o attiva la compressione in config.yaml."
explainer:
no_reply_prefix: "⚠️ Nessuna risposta: "
empty_response: "{model} non ha prodotto una risposta questa volta, nemmeno dopo i tentativi ripetuti. Invia `continue` per riprovare, oppure cambia modello con /model."
exit:
all_retries_exhausted_no_response: "il provider del modello non ha risposto dopo tutti i tentativi. Invia /retry, oppure cambia modello con /model."
partial_stream_recovery: "lo streaming si è interrotto in anticipo ed è stata recuperata solo una risposta parziale. Invia `continue` per riprendere dal punto in cui si è fermato."
fallback_prior_turn_content: "in questo turno non è stato prodotto nuovo contenuto; viene mostrato il contesto precedente recuperato. Invia `continue` per riprovare."
redirect_restart_limit_exceeded: "la richiesta è stata annullata da una nuova correzione a ogni tentativo, quindi il turno si è fermato invece di riprovare all'infinito. La tua ultima correzione è in coda come prossimo messaggio."
rebuilt_restart_limit_exceeded: "ogni provider della catena di fallback ha continuato a cedere il passo al successivo, quindi il turno si è fermato invece di riprovare all'infinito. Invia `continue` oppure cambia provider."
budget_exhausted: "il budget di iterazioni/costo per turno si è esaurito prima di una risposta finale. Invia `continue` per proseguire."
ollama_runtime_context_too_small: "la finestra di contesto del modello locale era troppo piccola per finire. Aumenta la dimensione del contesto o usa un modello più grande."
pending_tool_result: "il turno si è fermato mentre il risultato di uno strumento era ancora in attesa e il modello non ha prodotto altro testo. Invia `continue` per farglielo riassumere."
interrupted_during_api_call: "la richiesta è stata interrotta a metà chiamata prima di ricevere una risposta. Invia `continue` per riprovare."
max_iterations_reached: "è stato raggiunto il limite massimo di iterazioni degli strumenti prima di una risposta finale. Invia `continue` per proseguire, oppure aumenta `max_iterations`."
error_near_max_iterations: "si è verificato un errore vicino al limite di iterazioni prima di una risposta finale. Controlla l'output dello strumento qui sopra, poi invia `continue`."
repeated_outer_errors: "il turno ha continuato a fallire con errori ripetuti ed è stato fermato in anticipo invece di riprovare all'infinito. Controlla gli errori qui sopra, poi invia `continue` per riprovare."
persistence:
compression: "il turno è stato fermato perché un altro processo stava comprimendo questa sessione. Il tuo messaggio dovrebbe essere già salvato — invialo di nuovo al termine della compressione."
compression_closed: "il turno è stato fermato perché questa sessione è stata ruotata dalla compressione del contesto e la sua continuazione attiva non ha potuto essere adottata. Lo storage è integro — aggiorna il client (o avvia un nuovo turno) così da usare il nuovo id di sessione, poi invia di nuovo il messaggio."
turn_lease: "il turno è stato fermato perché un altro processo Hermes ha preso il controllo di questa sessione. La tua risposta non è stata salvata — attendi che l'altro processo finisca, poi invia di nuovo il messaggio."
session_row_missing: "questa sessione è stata eliminata dallo storage mentre la chat era ancora aperta e Hermes non è riuscito a ricrearla, quindi questo messaggio non è stato salvato. Invia di nuovo il messaggio; se continua a fallire, esegui `hermes {profile_arg}doctor`."
locked: "il turno è stato fermato perché lo storage della sessione era occupato (un altro processo Hermes stava scrivendo nel database di stato). Il tuo messaggio dovrebbe essere già salvato — invialo di nuovo tra un momento."
replaced: "il file del database delle sessioni è stato sostituito mentre Hermes era in esecuzione, quindi questo messaggio non è stato salvato (una copia è conservata in {home}/sessions/). Ferma Hermes (`hermes {profile_arg}gateway stop`), esegui `hermes {profile_arg}doctor` — non `hermes {profile_arg}doctor --fix`, che riparerebbe il file sbagliato sul posto — poi riavvialo e invia di nuovo il messaggio. I passaggi di recupero avanzati sono nel log."
deleted_wal: "un altro processo Hermes tiene ancora una vecchia copia del write-ahead log del database delle sessioni, quindi Hermes ha smesso di scrivere per proteggere il file e questo messaggio non è stato salvato (una copia è conservata in {home}/sessions/). Non è andato perso nulla. Chiudi ogni processo Hermes su questo profilo (app Desktop, `hermes {profile_arg}gateway stop`, dashboard, cron), esegui `hermes {profile_arg}doctor` — indica quale processo tiene ancora il log — poi riavvia Hermes e invia di nuovo il messaggio. Non eseguire `doctor --fix` né eliminare file state.db mentre sono in esecuzione. Guida: {recovery_docs}"
corrupt: "il turno è stato fermato perché il database di stato ha segnalato una corruzione strutturale (la trascrizione sarebbe andata perduta al riavvio). Liberare spazio su disco non servirà. Opzioni di recupero:\n1. Esegui `hermes {profile_arg}doctor --fix`\n2. Ferma il gateway, poi recupera con:\n hermes {profile_arg}sessions recover --source {db_path} --inspect-only\n (se segnala che è recuperabile) hermes {profile_arg}sessions recover --source {db_path} --output recovered-state.db\n — il recupero crea prima uno snapshot del file danneggiato; NON eseguire `sqlite3 ... \".recover\"` sullo state.db attivo, una CLI sqlite3 vulnerabile può corromperlo ulteriormente\n3. Ripristina da un backup in {backups_dir}/\nPoi invia di nuovo il messaggio."
fts_index: "il turno è stato fermato perché l'indice di ricerca delle sessioni (FTS5) è corrotto e non ha potuto essere scollegato, quindi questo messaggio non è stato salvato. L'archivio dei messaggi non è danneggiato: non eseguire strumenti di recupero né ripristinare un backup. Esegui `hermes {profile_arg}doctor --fix` (o riavvia Hermes, che ripara l'indice all'apertura), poi invia di nuovo il messaggio."
disk: "Hermes non è riuscito a salvare questa conversazione su disco, quindi si è fermato piuttosto che perdere i tuoi messaggi. Il disco è probabilmente pieno: libera spazio (o correggi i permessi su {home}/state.db), poi invia di nuovo il messaggio."
default: "Hermes non è riuscito a salvare questa conversazione, quindi si è fermato piuttosto che perdere i tuoi messaggi. Cause possibili: il disco è pieno, oppure un altro processo Hermes sta tenendo occupato il database. Chiudi le altre finestre di Hermes, esegui `hermes {profile_arg}doctor` per controllare lo storage, poi invia di nuovo il messaggio."
file_mutation:
header: "⚠️ Verifica modifiche ai file: {count} modifiche FALLITE in questo turno, nonostante quanto il testo sopra possa far pensare. Esegui `git status` o `read_file` per confermare cosa è stato davvero applicato."
entry: " • `{path}` — [{tool}] {preview}"
failed: "non riuscito"
shared:
and_more: " • … e altri {count}"
the_model: "Il modello"
tips:
t001: "/bg <prompt> esegue un'attività in una sessione separata mentre quella corrente resta libera; /btw <question> risponde a una domanda a margine su questa conversazione senza interromperla."
t002: "/branch crea una diramazione della sessione corrente, così puoi esplorare una direzione diversa senza perdere i progressi."
t003: "/compress comprime manualmente il contesto della conversazione quando diventa troppo lungo."
t004: "/rollback elenca i checkpoint del filesystem: ripristina i file modificati dall'agente a qualsiasi stato precedente."
t005: "/rollback diff 2 mostra in anteprima cosa è cambiato dal checkpoint 2 senza ripristinare nulla."
t006: "/rollback 2 src/file.py ripristina un singolo file da un checkpoint specifico."
t007: "/title \"mio progetto\" dà un nome alla sessione: riprendila più tardi con /resume o hermes -c."
t008: "/resume riprende da dove avevi lasciato in una sessione a cui hai dato un nome in precedenza."
t009: "/queue <prompt> mette in coda un messaggio per il turno successivo senza interrompere quello corrente."
t010: "/undo rimuove dalla conversazione l'ultimo scambio utente/assistente."
t011: "/retry reinvia il tuo ultimo messaggio: utile quando la risposta dell'agente non era proprio quella giusta."
t012: "/verbose alterna la visualizzazione dell'avanzamento degli strumenti: off → new → all → verbose."
t013: "/reasoning high aumenta la profondità di ragionamento del modello. /reasoning show mostra il ragionamento."
t014: "/fast attiva o disattiva l'elaborazione prioritaria per risposte API più rapide (dipende dal provider)."
t015: "/yolo salta tutte le richieste di approvazione per comandi pericolosi per il resto della sessione."
t016: "/model ti permette di cambiare modello a metà sessione: prova /model sonnet o /model gpt-5."
t017: "/model --global cambia in modo permanente il tuo modello predefinito."
t018: "/personality pirate imposta una personalità divertente: 14 opzioni integrate, da kawaii a shakespeare."
t019: "/skin cambia il tema della CLI: prova ares, mono, slate, poseidon o charizard."
t020: "/statusbar attiva o disattiva una barra persistente che mostra modello, token, % di riempimento del contesto, costo e durata."
t021: "/tools disable browser rimuove temporaneamente gli strumenti browser per la sessione corrente."
t022: "/browser connect collega gli strumenti browser al tuo browser della famiglia Chromium già in esecuzione tramite CDP."
t023: "/plugins elenca i plugin installati e il loro stato."
t024: "/cron gestisce le attività pianificate: configura prompt ricorrenti con consegna su qualsiasi piattaforma."
t025: "/reload-mcp ricarica a caldo la configurazione dei server MCP senza riavviare."
t026: "/usage mostra l'utilizzo dei token, la ripartizione dei costi e la durata della sessione."
t027: "/insights mostra le statistiche di utilizzo degli ultimi 30 giorni."
t028: "/paste controlla se negli appunti c'è un'immagine e la allega al tuo prossimo messaggio."
t029: "/profile mostra quale profilo è attivo e la sua directory home."
t030: "/config mostra a colpo d'occhio la tua configurazione corrente."
t031: "/stop termina tutti i processi in background avviati dall'agente."
t032: "@file:path/to/file.py inserisce il contenuto del file direttamente nel tuo messaggio."
t033: "@file:main.py:10-50 inserisce solo le righe 10-50 di un file."
t034: "@folder:src/ inserisce l'elenco ad albero di una directory."
t035: "@diff inserisce nel messaggio le tue modifiche git non ancora in stage."
t036: "@staged inserisce le tue modifiche git in stage (git diff --staged)."
t037: "@git:5 inserisce gli ultimi 5 commit con le patch complete."
t038: "@url:https://example.com scarica e inserisce il contenuto di una pagina web."
t039: "Digitando @ si attiva il completamento dei percorsi del filesystem: raggiungi qualsiasi file in modo interattivo."
t040: "Combina più riferimenti: \"Rivedi @file:main.py e @file:test.py per verificarne la coerenza.\""
t041: "Alt+Enter inserisce un a capo per l'input su più righe. (Windows Terminal intercetta Alt+Enter: usa Ctrl+Enter al suo posto.)"
t042: "Ctrl+C interrompe l'agente. Premilo due volte entro 2 secondi per forzare l'uscita."
t043: "Ctrl+Z sospende Hermes in background: esegui fg nella tua shell per riprenderlo."
t044: "Tab accetta il testo suggerito in trasparenza o completa automaticamente i comandi slash."
t045: "Digita un nuovo messaggio mentre l'agente sta lavorando per interromperlo e reindirizzarlo."
t046: "Alt+V incolla un'immagine dagli appunti nella conversazione."
t047: "Incollando 5 o più righe, il testo viene salvato automaticamente in un file e al suo posto viene inserito un riferimento compatto."
t048: "hermes -c riprende la tua sessione CLI più recente. hermes -c \"nome progetto\" riprende in base al titolo."
t049: "hermes -w crea un worktree git isolato: perfetto per flussi di lavoro con agenti in parallelo."
t050: "hermes -w -q \"Fix issue #42\" combina l'isolamento del worktree con una query singola."
t051: "hermes chat -t web,terminal abilita solo toolset specifici per una sessione mirata."
t052: "hermes chat -s github-pr-workflow precarica una skill all'avvio."
t053: "hermes chat -q \"query\" esegue una singola query non interattiva ed esce."
t054: "hermes chat --max-turns 1000 sovrascrive il limite predefinito di 500 iterazioni per turno."
t055: "hermes chat --checkpoints abilita gli snapshot del filesystem prima di ogni modifica distruttiva ai file."
t056: "hermes --yolo ignora tutte le richieste di approvazione per comandi pericolosi per l'intera sessione."
t057: "hermes chat --source telegram etichetta la sessione per filtrarla in hermes sessions list."
t058: "hermes -p work chat esegue Hermes con un profilo specifico senza cambiare quello predefinito."
t059: "hermes doctor --fix diagnostica e ripara automaticamente i problemi di configurazione e dipendenze."
t060: "hermes dump produce un riepilogo compatto della tua installazione: ottimo per le segnalazioni di bug."
t061: "hermes config set KEY VALUE indirizza automaticamente i segreti in .env e tutto il resto in config.yaml."
t062: "hermes config edit apre config.yaml nel tuo editor predefinito."
t063: "hermes config check cerca opzioni di configurazione mancanti o obsolete."
t064: "hermes sessions browse apre un selettore interattivo di sessioni con ricerca."
t065: "hermes sessions stats mostra il numero di sessioni per piattaforma e la dimensione del database."
t066: "hermes sessions prune --older-than 30 elimina le sessioni vecchie."
t067: "hermes skills search react --source skills-sh cerca nella directory pubblica skills.sh."
t068: "hermes skills check controlla se le skill installate dall'hub hanno aggiornamenti upstream."
t069: "hermes skills tap add myorg/skills-repo aggiunge una sorgente GitHub personalizzata per le skill."
t070: "hermes skills snapshot export setup.json esporta la configurazione delle tue skill per backup o condivisione."
t071: "hermes mcp add github --command npx aggiunge server MCP dalla riga di comando."
t072: "hermes mcp serve esegue Hermes stesso come server MCP per altri agenti."
t073: "hermes auth add ti permette di aggiungere più chiavi API per la rotazione del pool di credenziali."
t074: "hermes completion bash >> ~/.bashrc abilita il completamento con Tab per tutti i comandi e i profili."
t075: "hermes logs -f segue agent.log in tempo reale. --level WARNING --since 1h filtra l'output."
t076: "hermes backup crea un backup zip dell'intera directory home di Hermes."
t077: "hermes profile create coder crea un profilo isolato che diventa un comando a sé stante."
t078: "hermes profile create work --clone copia la configurazione e le chiavi correnti in un nuovo profilo."
t079: "hermes update sincronizza automaticamente le nuove skill integrate su TUTTI i profili."
t080: "hermes gateway install configura Hermes come servizio di sistema (systemd/launchd)."
t081: "hermes memory setup ti permette di configurare un provider di memoria esterno (Honcho, Mem0, ecc.)."
t082: "hermes webhook subscribe crea route webhook basate su eventi con validazione HMAC."
t083: "Risparmia: hermes tools disattiva gli strumenti inutilizzati, hermes skills config riduce le skill all'essenziale."
t084: "/reasoning low o /reasoning minimal riduce la profondità di ragionamento sotto il valore predefinito (medium): risposte più rapide ed economiche."
t085: "hermes models instrada visione, compressione e attività ausiliarie verso modelli più economici: taglia il costo dei token in background dell'85% o più senza declassare il tuo modello di chat principale."
t086: "Imposta display.bell_on_complete: true in config.yaml per sentire un segnale acustico quando le attività lunghe terminano."
t087: "Imposta display.streaming: true per vedere i token comparire in tempo reale mentre il modello li genera."
t088: "Imposta display.show_reasoning: true per osservare la catena di ragionamento del modello."
t089: "Imposta display.compact: true per ridurre gli spazi vuoti nell'output e avere informazioni più dense."
t090: "Imposta display.busy_input_mode: queue per mettere in coda i messaggi invece di interrompere l'agente, oppure steer per iniettarli durante l'esecuzione tramite /steer."
t091: "Imposta display.resume_display: minimal per saltare il riepilogo completo della conversazione alla ripresa della sessione."
t092: "Imposta compression.threshold: 0.50 per controllare quando scatta la compressione automatica (predefinito: 50% del contesto)."
t093: "Imposta agent.max_turns: 1000 per consentire all'agente più passaggi di chiamata agli strumenti per turno."
t094: "Imposta file_read_max_chars: 200000 per aumentare il contenuto massimo per ogni chiamata a read_file."
t095: "Imposta approvals.mode: smart per lasciare che un LLM approvi automaticamente i comandi sicuri e neghi quelli pericolosi."
t096: "Imposta fallback_model in config.yaml per passare automaticamente a un provider di riserva in caso di errore."
t097: "Imposta privacy.redact_pii: true per trasformare in hash ID utente e numeri di telefono prima di inviarli all'LLM."
t098: "Imposta browser.record_sessions: true per registrare automaticamente le sessioni del browser come video WebM."
t099: "Imposta worktree: true in config.yaml per creare sempre un worktree git (equivale a hermes -w)."
t100: "Imposta security.website_blocklist.enabled: true per bloccare domini specifici negli strumenti web."
t101: "Imposta cron.wrap_response: false per consegnare l'output grezzo dell'agente senza intestazione e piè di pagina del cron."
t102: "HERMES_TIMEZONE sostituisce il fuso orario del server con qualsiasi stringa di fuso orario IANA."
t103: "La sostituzione delle variabili d'ambiente funziona in config.yaml: usa la sintassi ${VAR_NAME}."
t104: "I comandi rapidi in config.yaml eseguono comandi shell all'istante senza consumare token."
t105: "Puoi definire personalità personalizzate in config.yaml sotto agent.personalities."
t106: "provider_routing controlla l'ordinamento, la whitelist e la blacklist dei provider di OpenRouter."
t107: "execute_code esegue script Python che chiamano gli strumenti di Hermes in modo programmatico: i risultati restano fuori dal contesto."
t108: "delegate_task avvia fino a 10 subagenti concorrenti per impostazione predefinita (delegation.max_concurrent_children) con contesti isolati per il lavoro in parallelo."
t109: "web_extract funziona anche con URL di PDF: passagli qualsiasi link a un PDF e lo converte in markdown."
t110: "search_files si basa su ripgrep ed è più veloce di grep: usalo al posto di grep nel terminale."
t111: "patch usa 9 strategie di corrispondenza fuzzy, così piccole differenze di spaziatura non rompono le modifiche."
t112: "patch supporta il formato V4A per modifiche in blocco su più file in una singola chiamata."
t113: "read_file suggerisce nomi di file simili quando un file non viene trovato."
t114: "read_file deduplica automaticamente: rileggere un file invariato restituisce solo un breve segnaposto."
t115: "browser_vision acquisisce uno screenshot e lo analizza con l'AI: funziona con CAPTCHA e contenuti visivi."
t116: "browser_console può valutare espressioni JavaScript nel contesto della pagina."
t117: "image_generate crea immagini con FLUX 2 Pro e upscaling automatico 2x."
t118: "text_to_speech converte il testo in audio: su Telegram viene riprodotto come messaggio vocale."
t119: "send_message può raggiungere qualsiasi piattaforma di messaggistica connessa dall'interno di una sessione."
t120: "Lo strumento todo aiuta l'agente a tenere traccia di attività complesse in più passaggi durante una sessione."
t121: "session_search esegue una ricerca full-text in TUTTE le conversazioni passate."
t122: "L'agente salva automaticamente in memoria preferenze, correzioni e informazioni sull'ambiente."
t123: "/moa instrada un singolo prompt difficile attraverso il set di modelli Mixture of Agents che hai configurato."
t124: "I comandi del terminale supportano la modalità in background con notify_on_complete per le attività di lunga durata."
t125: "I processi in background del terminale supportano watch_patterns per avvisarti su righe di output specifiche."
t126: "Lo strumento terminal supporta 6 backend: local, Docker, SSH, Modal, Daytona e Singularity."
t127: "Ogni profilo ha la propria configurazione, chiavi API, memoria, sessioni, skill e job cron."
t128: "I nomi dei profili diventano comandi shell: 'hermes profile create coder' crea il comando 'coder'."
t129: "hermes profile export coder -o backup.tar.gz crea un archivio portabile del profilo."
t130: "Se due profili condividono per errore lo stesso token del bot, il secondo gateway viene bloccato con un errore chiaro."
t131: "Le sessioni generano automaticamente titoli descrittivi dopo il primo scambio: non serve assegnare nomi a mano."
t132: "I titoli delle sessioni supportano la discendenza: \"mio progetto\" → \"mio progetto #2\" → \"mio progetto #3\"."
t133: "All'uscita, Hermes stampa un comando per riprendere con l'ID della sessione e le statistiche."
t134: "hermes sessions export backup.jsonl esporta tutte le sessioni per backup o analisi."
t135: "hermes -r SESSION_ID riprende una specifica sessione passata tramite il suo ID."
t136: "La memoria è uno snapshot congelato: le modifiche compaiono nel prompt di sistema solo all'avvio della sessione successiva."
t137: "Le voci di memoria vengono controllate automaticamente alla ricerca di pattern di prompt injection ed esfiltrazione."
t138: "L'agente ha due archivi di memoria: note personali (~2200 caratteri) e profilo utente (~1375 caratteri)."
t139: "Le correzioni che dai all'agente (\"no, fallo così\") vengono spesso salvate automaticamente in memoria."
t140: "Oltre 80 skill integrate che coprono github, creatività, mlops, produttività, ricerca e altro ancora."
t141: "Ogni skill installata diventa automaticamente un comando slash: digita / per vederle tutte."
t142: "hermes skills install official/security/1password installa skill opzionali dal repository."
t143: "Le skill possono limitarsi a sistemi operativi specifici: alcune si caricano solo su macOS o Linux."
t144: "skills.external_dirs in config.yaml ti permette di caricare skill da directory personalizzate."
t145: "L'agente può creare le proprie skill come memoria procedurale usando skill_manage."
t146: "/plan scrive un piano di implementazione in markdown in .hermes/plans/ senza eseguire nulla."
t147: "I job cron possono includere skill: hermes cron add --skill blogwatcher \"Check for new posts\"."
t148: "Le destinazioni di consegna del cron includono telegram, discord, slack, email, sms e più di 12 altre piattaforme."
t149: "Se una risposta del cron inizia con [SILENT], la consegna viene soppressa: utile per i job di solo monitoraggio."
t150: "Il cron supporta ritardi relativi (30m), intervalli (every 2h), espressioni cron e timestamp ISO."
t151: "I job cron vengono eseguiti in sessioni agente completamente nuove: i prompt devono essere autosufficienti."
t152: "La modalità voce funziona senza alcuna chiave API se faster-whisper è installato (riconoscimento vocale locale gratuito)."
t153: "Cinque provider TTS disponibili: Edge TTS (gratuito), ElevenLabs, OpenAI, NeuTTS (locale gratuito), MiniMax."
t154: "/voice on abilita la modalità voce nella CLI. Ctrl+B attiva o disattiva la registrazione push-to-talk."
t155: "Il TTS in streaming riproduce le frasi man mano che vengono generate: non devi aspettare la risposta completa."
t156: "I messaggi vocali su Telegram, Discord, WhatsApp e Slack vengono trascritti automaticamente."
t157: "Hermes funziona su 21 piattaforme di messaggistica: Telegram, Discord, Slack, WhatsApp, Signal, Matrix, IRC, Microsoft Teams, email e altre."
t158: "hermes gateway install lo configura come servizio di sistema che si avvia al boot."
t159: "DingTalk usa la Stream Mode: non servono webhook né URL pubblici."
t160: "BlueBubbles porta iMessage in Hermes tramite un server macOS locale."
t161: "Le route webhook supportano validazione HMAC, limitazione della frequenza e filtraggio degli eventi."
t162: "Il server API espone un endpoint compatibile con OpenAI, utilizzabile con Open WebUI e LibreChat."
t163: "Modalità canale vocale di Discord: il bot entra nel canale vocale, trascrive il parlato e risponde a voce."
t164: "group_sessions_per_user: true assegna a ogni persona una sessione propria nelle chat di gruppo."
t165: "/sethome contrassegna una chat come canale principale per le consegne dei job cron."
t166: "Il gateway supporta timeout basati sull'inattività: gli agenti attivi possono lavorare senza limiti di tempo."
t167: "L'approvazione dei comandi pericolosi ha 4 livelli: una volta, sessione, sempre (allowlist permanente), nega."
t168: "La modalità di approvazione smart usa un LLM per approvare automaticamente i comandi sicuri e segnalare quelli pericolosi."
t169: "La protezione SSRF blocca reti private, loopback, link-local e indirizzi dei metadati cloud."
t170: "La scansione pre-esecuzione di Tirith rileva lo spoofing di URL con omoglifi e i pattern pipe-verso-interprete."
t171: "I sottoprocessi MCP ricevono un ambiente filtrato: passano solo le variabili di sistema sicure."
t172: "I file di contesto (.hermes.md, AGENTS.md) vengono controllati per prompt injection prima del caricamento."
t173: "command_allowlist in config.yaml approva in modo permanente pattern specifici di comandi shell."
t174: "Il contesto viene compresso automaticamente al raggiungimento della soglia: le memorie vengono salvate e la cronologia riassunta."
t175: "La barra di stato diventa gialla, poi arancione, poi rossa man mano che il contesto si riempie."
t176: "SOUL.md è il file di identità principale dell'agente: personalizzalo per modellarne il comportamento."
t177: "Hermes carica il contesto del progetto da .hermes.md, AGENTS.md, CLAUDE.md o .cursorrules (prima corrispondenza)."
t178: "I file AGENTS.md nelle sottodirectory vengono scoperti progressivamente man mano che l'agente entra nelle cartelle."
t179: "I file di contesto sono limitati a 20.000 caratteri con troncamento intelligente di testa e coda."
t180: "Cinque provider browser: Chromium locale, Browserbase, Browser Use, Camofox e Firecrawl."
t181: "Camofox è un browser anti-rilevamento: un fork di Firefox con spoofing delle impronte digitali in C++."
t182: "browser_navigate restituisce automaticamente uno snapshot della pagina: non serve chiamare browser_snapshot subito dopo."
t183: "browser_vision con annotate=true sovrappone etichette numerate agli elementi interattivi."
t184: "hermes mcp apre un selettore interattivo di MCP approvati da Nous che puoi installare con un solo tasto."
t185: "hermes mcp catalog elenca i server MCP approvati da Nous inclusi nel repository."
t186: "hermes mcp install <name> installa una voce del catalogo, chiede le credenziali e ti lascia scegliere quali dei suoi strumenti abilitare."
t187: "I server MCP si configurano in config.yaml: sono supportati sia il trasporto stdio sia quello HTTP."
t188: "Filtro degli strumenti per server: tools.include mette in whitelist e tools.exclude mette in blacklist strumenti specifici."
t189: "I server MCP generano automaticamente toolset a runtime: hermes tools può attivarli o disattivarli per piattaforma."
t190: "Supporto OAuth per MCP: auth: oauth abilita l'autorizzazione tramite browser con PKCE."
t191: "I checkpoint non hanno alcun overhead quando nessun file viene modificato — sono attivi per impostazione predefinita."
t192: "Uno snapshot pre-rollback viene salvato automaticamente, così puoi annullare l'annullamento."
t193: "/rollback annulla anche il turno di conversazione, quindi l'agente non ricorda le modifiche ripristinate."
t194: "I checkpoint usano repository shadow in ~/.hermes/checkpoints/ — il .git del tuo progetto non viene mai toccato."
t195: "batch_runner.py elabora centinaia di prompt in parallelo per generare dati di addestramento."
t196: "hermes chat -Q attiva la modalità silenziosa per l'uso programmatico — nasconde banner e spinner."
t197: "Il salvataggio delle traiettorie (--save-trajectories) cattura tracce complete dell'uso degli strumenti per l'addestramento dei modelli."
t198: "Tre tipi di plugin: generali (strumenti/hook), provider di memoria e motori di contesto."
t199: "hermes plugins install owner/repo installa i plugin direttamente da GitHub."
t200: "Provider di memoria esterni: OpenViking è incluso; Honcho, Hindsight, Mem0 e altri tramite hermes plugins install."
t201: "Gli hook dei plugin includono pre/post_tool_call, pre/post_llm_call e transform_terminal_output per la canonicalizzazione dell'output."
t202: "Il prompt caching (Anthropic) riduce i costi riutilizzando i prefissi del prompt di sistema in cache."
t203: "L'agente genera automaticamente i titoli delle sessioni in un thread in background — nessun impatto sulla latenza."
t204: "Il routing intelligente dei modelli può indirizzare automaticamente le richieste semplici a un modello più economico."
t205: "I comandi slash supportano la corrispondenza per prefisso: /h corrisponde a /help, /mod a /model."
t206: "Trascinare il percorso di un file nel terminale allega automaticamente le immagini o lo invia come contesto."
t207: ".worktreeinclude nella radice del repository elenca i file ignorati da git da copiare nei worktree."
t208: "hermes acp esegue Hermes come server ACP per l'integrazione con VS Code, Zed e JetBrains."
t209: "Provider personalizzati: salva endpoint con nome in config.yaml sotto custom_providers."
t210: "HERMES_EPHEMERAL_SYSTEM_PROMPT inietta un prompt di sistema che non viene mai salvato nella cronologia."
t211: "credential_pool_strategies supporta le rotazioni fill_first, round_robin, least_used e random."
t212: "hermes auth add nous oppure hermes auth add openai-codex configura i provider basati su OAuth."
t213: "Il server API supporta sia la Chat Completions API sia la Responses API con stato lato server."
t214: "tool_preview_length: 0 nella configurazione mostra i percorsi completi dei file nel feed di attività dello spinner."
t215: "hermes status --deep esegue controlli diagnostici più approfonditi su tutti i componenti."
t216: "I job cron possono allegare uno script Python (--script) il cui stdout viene iniettato nel prompt come contesto."
t217: "Gli script cron vivono in ~/.hermes/scripts/ e vengono eseguiti prima dell'agente — perfetti per pipeline di raccolta dati."
t218: "prefill_messages_file in config.yaml inietta esempi few-shot in ogni chiamata API, senza mai salvarli nella cronologia."
t219: "SOUL.md sostituisce completamente l'identità predefinita dell'agente — riscrivilo per rendere Hermes davvero tuo."
t220: "SOUL.md viene inizializzato con una personalità predefinita al primo avvio. Modificalo per personalizzarlo."
t221: "/compress <focus topic> destina il 60-70% del budget del riepilogo al tuo argomento e taglia con decisione il resto."
t222: "Dalla seconda compressione in poi, il compressore aggiorna il riepilogo precedente invece di ripartire da zero."
t223: "Prima di un reset della sessione gateway, Hermes salva automaticamente in memoria i fatti importanti, in background."
t224: "network.force_ipv4: true in config.yaml risolve i blocchi sui server con IPv6 difettoso — applica un monkey-patch a socket."
t225: "Lo strumento terminal annota i codici di uscita comuni: grep che restituisce 1 = 'Nessuna corrispondenza (non è un errore)'."
t226: "I comandi terminal in foreground non riusciti vengono ritentati automaticamente fino a 3 volte con backoff esponenziale (2s, 4s, 8s)."
t227: "I comandi sudo semplici vengono riscritti automaticamente per ricevere SUDO_PASSWORD da .env tramite pipe — nessun prompt interattivo."
t228: "Gli helper di execute_code richiedono import espliciti: from hermes_tools import json_parse, shell_quote, retry."
t229: "I 7 strumenti sandbox di execute_code (web_search, terminal, read/write/search/patch) usano RPC — non entrano mai nel contesto."
t230: "Leggere la stessa regione di un file 3 o più volte genera un avviso. Dalla quarta volta viene bloccato per prevenire i loop."
t231: "write_file e patch rilevano se un file è stato modificato dall'esterno dopo l'ultima lettura e avvisano che è obsoleto."
t232: "Il formato patch V4A supporta le direttive Add File, Delete File e Move File — non solo Update."
t233: "I server MCP possono richiedere completamenti LLM tramite sampling — l'agente diventa uno strumento per il server."
t234: "I server MCP inviano notifications/tools/list_changed per attivare la ri-registrazione automatica degli strumenti senza riavvio."
t235: "delegate_task con acp_command: 'claude' avvia Claude Code come agente figlio da qualsiasi piattaforma."
t236: "La delega ha un thread heartbeat — l'attività del figlio si propaga al genitore, evitando i timeout del gateway."
t237: "Quando un provider restituisce HTTP 402 (pagamento richiesto), il client ausiliario passa automaticamente al successivo."
t238: "agent.tool_use_enforcement indirizza i modelli che descrivono le azioni invece di chiamare gli strumenti — automatico per GPT/Codex."
t239: "agent.restart_after_turn_timeout lascia terminare i turni in corso prima che /restart entri in stop(); restart_drain_timeout è solo il budget per l'interruzione forzata una volta iniziato stop()."
t240: "agent.api_max_retries (predefinito 3) controlla quante volte l'agente ritenta una chiamata API fallita prima di mostrare l'errore — abbassalo per un fallback rapido."
t241: "Il gateway mette in cache le istanze AIAgent per sessione — distruggere questa cache rompe il prompt caching di Anthropic."
t242: "Qualsiasi sito web può esporre skill tramite /.well-known/skills/index.json — l'hub delle skill le scopre automaticamente."
t243: "Il log di audit delle skill in ~/.hermes/skills/.hub/audit.log traccia ogni operazione di installazione e rimozione."
t244: "I worktree git obsoleti vengono puliti automaticamente all'avvio: gli alberi puliti e completamente uniti vengono rimossi; il lavoro non committato o non pushato viene sempre preservato."
t245: "I profili delimitano lo stato di Hermes tramite HERMES_HOME; i sottoprocessi degli strumenti host mantengono la tua HOME reale a meno che terminal.home_mode sia profile."
t246: "La variabile d'ambiente HERMES_HOME_MODE (ottale, es. 0701) imposta permessi di directory personalizzati per l'attraversamento da parte del server web."
t247: "Modalità container: metti .container-mode in HERMES_HOME e la CLI host passa automaticamente in esecuzione nel container."
t248: "Ctrl+C ha 5 livelli di priorità: annulla registrazione → annulla prompt → annulla selettore → interrompi agente → esci."
t249: "Ogni interruzione durante l'esecuzione dell'agente viene registrata in ~/.hermes/interrupt_debug.log con timestamp."
t250: "BROWSER_CDP_URL collega gli strumenti browser a qualsiasi browser della famiglia Chromium in esecuzione — accetta WebSocket, HTTP o host:port."
t251: "BROWSERBASE_ADVANCED_STEALTH=true attiva l'anti-rilevamento avanzato con Chromium personalizzato (piano Scale)."
t252: "La CLI passa automaticamente alla modalità compatta nei terminali più stretti di 80 colonne."
t253: "I comandi rapidi supportano due tipi: exec (esegue direttamente un comando shell) e alias (reindirizza a un altro comando)."
t254: "Modello di delega per attività: delegation.model e delegation.provider nella configurazione indirizzano i subagenti a modelli più economici."
t255: "delegation.reasoning_effort controlla in modo indipendente la profondità di ragionamento dei subagenti."
t256: "display.platforms in config.yaml consente override di visualizzazione per piattaforma: {telegram: {tool_progress: all}}."
t257: "human_delay.mode nella configurazione simula la velocità di digitazione umana — intervallo min_ms/max_ms configurabile."
t258: "Le migrazioni di versione della configurazione avvengono automaticamente al caricamento — le nuove chiavi compaiono senza intervento manuale."
t259: "I modelli GPT e Codex ricevono indicazioni speciali nel prompt di sistema per la disciplina e l'uso obbligatorio degli strumenti."
t260: "I modelli Gemini ricevono direttive su misura per percorsi assoluti, chiamate parallele agli strumenti e comandi non interattivi."
t261: "context.engine in config.yaml può essere impostato al nome di un plugin per strategie alternative di gestione del contesto."
t262: "Gli snapshot delle pagine browser oltre i 15.000 caratteri vengono troncati o riassunti automaticamente; lo snapshot completo viene salvato in cache/web per la lettura paginata con read_file."
t263: "Il compressore esegue una pre-passata economica: gli output degli strumenti oltre i 200 caratteri vengono sostituiti da segnaposto prima di eseguire l'LLM."
t264: "Quando la compressione fallisce, i tentativi successivi vengono sospesi per 10 minuti per non martellare l'API."
t265: "I comandi pericolosi lunghi (>70 caratteri) hanno un'opzione 'view' nel prompt di approvazione per vedere prima il testo completo."
t266: "La visualizzazione del livello audio mostra le barre ▁▂▃▄▅▆▇ durante la registrazione vocale in base ai livelli RMS del microfono."
t267: "I nomi dei profili non possono coincidere con binari presenti nel PATH — 'hermes profile create ls' verrebbe rifiutato."
t268: "hermes profile create backup --clone-all copia tutto (configurazione, chiavi, SOUL.md, memorie, skill, sessioni)."
t269: "Il tasto di registrazione vocale è configurabile tramite voice.record_key in config.yaml — non solo Ctrl+B."
t270: "I file .cursorrules e .cursor/rules/*.mdc vengono rilevati e caricati automaticamente come contesto del progetto."
t271: "I file di contesto supportano oltre 10 pattern di prompt injection — Unicode invisibile, 'ignore instructions', tentativi di esfiltrazione."
t272: "GPT-5 e Codex usano il ruolo 'developer' invece di 'system' nel formato dei messaggi."
t273: "Override ausiliari per attività: auxiliary.vision.provider, auxiliary.compression.model, ecc. in config.yaml."
t274: "Il client ausiliario tratta 'main' come alias di provider — si risolve nel tuo provider primario + modello effettivi."
t275: "hermes claw migrate --dry-run mostra in anteprima la migrazione da OpenClaw senza scrivere nulla."
t276: "I percorsi di file incollati con virgolette o spazi con escape vengono gestiti automaticamente — nessuna pulizia manuale."
t277: "I comandi slash non attivano mai il collasso degli incolla lunghi — /command con argomenti grandi funziona correttamente."
t278: "In modalità interrupt, i comandi slash digitati durante l'esecuzione dell'agente saltano la logica di interruzione e vengono eseguiti subito."
t279: "HERMES_DEV=1 salta il rilevamento della modalità container per lo sviluppo locale."
t280: "Ogni server MCP ha il proprio toolset (mcp-servername) che può essere attivato o disattivato indipendentemente tramite hermes tools."
t281: "I segnaposto MCP ${ENV_VAR} nella configurazione vengono risolti all'avvio del server — incluse le variabili da ~/.hermes/.env."
t282: "Le skill da repository fidati (NousResearch) hanno il livello di sicurezza 'trusted'; le skill della community ricevono scansioni aggiuntive."
t283: "La quarantena delle skill in ~/.hermes/skills/.hub/quarantine/ contiene le skill in attesa di revisione di sicurezza."
t284: "/steer <prompt> inietta una nota dopo la prossima chiamata a uno strumento — correggi la direzione a metà attività senza interrompere."
t285: "/goal <text> imposta un obiettivo permanente in stile Ralph-loop — Hermes continua automaticamente turno dopo turno finché un giudice non dichiara fatto."
t286: "/snapshot create [label] salva uno snapshot completo dello stato della configurazione di Hermes; /snapshot restore <id> lo ripristina in seguito."
t287: "/copy [N] copia l'ultima risposta dell'assistente negli appunti, oppure l'N-esima dalla fine indicando un numero."
t288: "/redraw forza un ridisegno completo dell'interfaccia, correggendo lo sfasamento del terminale dopo un ridimensionamento in tmux o artefatti da selezione col mouse."
t289: "/agents (alias /tasks) mostra gli agenti attivi e le attività in background in esecuzione nella sessione corrente."
t290: "/footer attiva o disattiva il footer del gateway sulle risposte finali, con modello, % di contesto e cwd."
t291: "/busy queue|steer|interrupt controlla cosa fa la pressione di Enter mentre Hermes sta lavorando."
t292: "/topic nei DM di Telegram attiva la modalità argomenti multi-sessione gestita dall'utente — /topic <id> ripristina inline le sessioni passate."
t293: "/approve session|always esegue un comando pericoloso in attesa con l'ambito di fiducia scelto; /deny lo rifiuta."
t294: "/restart riavvia il gateway in modo controllato dopo aver lasciato terminare le esecuzioni attive, poi avvisa chi l'ha richiesto quando è di nuovo attivo."
t295: "/kanban boards switch <slug> cambia la board Kanban multi-progetto attiva direttamente dalla chat."
t296: "/reload ricarica ~/.hermes/.env nella sessione in esecuzione — recupera nuove chiavi API senza riavviare."
t297: "cronjob con no_agent=True esegue uno script a orario e invia direttamente il suo stdout — zero token, zero LLM."
t298: "Uno stdout vuoto dello script cron significa tick silenzioso — non viene consegnato nulla, perfetto per watchdog a soglia."
t299: "HERMES_CRON_MAX_PARALLEL (predefinito 4) limita quanti job cron girano per tick, così i picchi non saturano le tue chiavi."
t300: "Gli hook del gateway vivono in ~/.hermes/hooks/<name>/ con HOOK.yaml + handler.py — l'handler deve chiamarsi `handle`."
t301: "Gli eventi hook includono gateway:startup, session:start, agent:step e le sottoscrizioni con wildcard command:*."
t302: "Metti una checklist in ~/.hermes/BOOT.md e un hook gateway:startup la esegue come agente one-shot a ogni avvio."
t303: "hermes curator run --dry-run mostra in anteprima cosa il curatore archivierebbe o consoliderebbe senza modificare nulla."
t304: "hermes curator pin <skill> protegge una skill sia dall'archiviazione automatica sia dallo strumento skill_manage dell'agente."
t305: "hermes curator rollback ripristina le skill da uno snapshot pre-esecuzione — i backup stanno in skills/.curator_backups/."
t306: "hermes auth reset <provider> [target] azzera cooldown e flag di esaurimento su un intero pool di credenziali, o su una sola credenziale per indice, id o etichetta."
t307: "credential_pool_strategies.<provider>: round_robin alterna le chiavi in modo uniforme invece del fill_first predefinito."
t308: "use_gateway: true per strumento instrada web, image, tts o browser attraverso il tuo abbonamento Nous — nessuna chiave extra."
t309: "provider_routing.data_collection: deny esclude su OpenRouter i provider che conservano i dati."
t310: "provider_routing.require_parameters: true instrada solo verso provider che supportano ogni parametro della tua richiesta."
t311: "HERMES_TUI_RESUME=1 si ricollega automaticamente alla sessione TUI più recente all'avvio — comodo dopo una caduta SSH."
t312: "HERMES_TUI_THEME=light|dark|<hex> forza il tema della TUI sui terminali che non impostano COLORFGBG."
t313: "Ctrl+G o Ctrl+X Ctrl+E nella TUI apre il buffer di input in $EDITOR per prompt lunghi su più righe."
t314: "La TUI rende LaTeX inline — $E=mc^2$ diventa matematica Unicode invece di TeX grezzo."
t315: "hermes dashboard avvia un'interfaccia web locale su 127.0.0.1:9119 — nessun dato lascia localhost."
t316: "hermes dashboard incorpora la TUI completa di Hermes nel browser tramite xterm.js e una PTY WebSocket."
t317: "Metti un YAML in ~/.hermes/dashboard-themes/ con due colori di palette per cambiare l'aspetto dell'intera dashboard."
t318: "I plugin della dashboard sono drop-in: manifest.json + bundle JS in ~/.hermes/dashboard-plugins/ — nessuna build npm richiesta."
t319: "layoutVariant: cockpit in un tema della dashboard aggiunge una barra laterale sinistra di 260px che i plugin possono popolare tramite lo slot sidebar."
t320: "display.tool_progress_command: true espone /verbose sulle piattaforme di messaggistica; per impostazione predefinita è solo CLI."
t321: "HERMES_BACKGROUND_NOTIFICATIONS=result avvisa solo quando le attività in background terminano (rispetto a concise/all/error/off)."
t322: "HERMES_WRITE_SAFE_ROOT limita write_file/patch a prefissi di directory; più percorsi tramite os.pathsep (: o ;)."
t323: "HERMES_IGNORE_RULES salta l'iniezione automatica di AGENTS.md, SOUL.md, .cursorrules, memoria e skill precaricate."
t324: "HERMES_ACCEPT_HOOKS approva automaticamente gli hook shell mai visti dichiarati in config.yaml senza un prompt TTY."
t325: "auxiliary.goal_judge.model instrada il giudice di /goal a un modello economico e veloce per tenere il costo del loop vicino a zero."
t326: "I checkpoint saltano le directory con più di 50.000 file per evitare operazioni git lente su monorepo enormi."
t327: "tts.provider: piper esegue un TTS locale su CPU in 44 lingue — le voci si scaricano automaticamente in ~/.hermes/cache/piper-voices/."
t328: "tts.providers.<name>.type: command collega qualsiasi motore TTS a riga di comando con i segnaposto {input_path} e {output_path}."
t329: "API_SERVER_ENABLED=true esegue un endpoint compatibile OpenAI accanto al gateway per Open WebUI e LibreChat."
t330: "GATEWAY_PROXY_URL esegue una configurazione divisa: I/O delle piattaforme in locale, lavoro dell'agente delegato a un server API remoto."
t331: "MATRIX_DEVICE_ID fissa un ID dispositivo stabile per E2EE — senza di esso le chiavi ruotano a ogni avvio e la decifratura dello storico si rompe."
t332: "TELEGRAM_WEBHOOK_SECRET è obbligatorio ogni volta che TELEGRAM_WEBHOOK_URL è impostato — generalo con openssl rand -hex 32."
t333: "batch_runner.py --resume riconosce i prompt completati in base al testo, così i riordini del dataset non rieseguono il lavoro già fatto."
t334: "/new avvia una nuova sessione sul posto (alias /reset) — nuovo ID di sessione, cronologia pulita, la CLI resta aperta."
t335: "/clear pulisce lo schermo del terminale E avvia una nuova sessione — una sola scorciatoia per un reset visivo."
t336: "/history stampa la conversazione corrente inline senza uscire dalla CLI — utile per una rilettura veloce."
t337: "/save scrive la conversazione corrente su disco senza terminare la sessione."
t338: "/status mostra le informazioni della sessione a colpo d'occhio: ID, titolo, modello, utilizzo dei token e tempo trascorso."
t339: "/image <path> allega un file immagine locale al tuo prossimo prompt senza incollare o trascinare."
t340: "/platforms mostra lo stato di connessione del gateway e delle piattaforme di messaggistica direttamente dalla chat."
t341: "/commands mostra paginato l'elenco completo dei comandi slash e delle skill installate — utile sulle piattaforme senza completamento con Tab."
t342: "/toolsets elenca tutti i toolset disponibili, così sai cosa accetta -t/--toolsets."
t343: "/voice tts attiva o disattiva la modalità solo TTS — l'agente risponde a voce ma tu continui a digitare i prompt."
t344: "/reload-skills riesamina ~/.hermes/skills/ così le skill aggiunte a mano compaiono senza riavviare la sessione."
t345: "/indicator kaomoji|emoji|unicode|ascii sceglie lo stile dell'indicatore di attività della TUI mostrato durante le esecuzioni dell'agente."
t346: "/debug carica un bundle di supporto (info di sistema + log) e restituisce link condivisibili — funziona anche in chat."
t347: "hermes -z \"<prompt>\" è il one-shot più puro: risposta finale su stdout e nient'altro — ideale per le pipe negli script."
t348: "hermes chat --pass-session-id inietta l'ID di sessione nel prompt di sistema così l'agente può farvi riferimento."
t349: "hermes chat --image path/to/pic.png allega un'immagine locale a una singola query -q senza un passaggio di upload separato."
t350: "hermes chat --ignore-user-config salta la configurazione utente attiva — segnalazioni di bug riproducibili ed esecuzioni CI."
t351: "hermes chat --source tool contrassegna le chat programmatiche così non intasano hermes sessions list."
t352: "hermes dump --show-keys include le impronte oscurate delle chiavi API per un debug di supporto più approfondito."
t353: "hermes sessions rename <ID> \"new title\" rinomina qualsiasi sessione passata; hermes sessions delete <ID> ne elimina una."
t354: "hermes import ripristina un backup zip completo di Hermes; le esportazioni JSON/JSONL delle sessioni si importano dalla pagina Sessions della dashboard."
t355: "hermes fallback gestisce la catena fallback_model in modo interattivo — niente modifiche a mano a config.yaml."
t356: "hermes pairing ruota il token di pairing dei DM — il primo che scrive dopo la rotazione ottiene l'accesso al bot."
t357: "hermes setup guida i nuovi utenti nella configurazione di provider, chiavi e piattaforme in un unico flusso interattivo."
t358: "hermes status --deep esegue il controllo di salute completo su ogni componente; hermes status semplice è la vista rapida."
t359: "HERMES_AGENT_TIMEOUT=0 disattiva la terminazione per inattività del gateway per un agente in esecuzione — utile per lunghe sessioni di ricerca."
t360: "HERMES_ENABLE_PROJECT_PLUGINS=1 carica automaticamente i plugin locali del repository da ./.hermes/plugins/ — protetti da un controllo di fiducia per design."
t361: "HERMES_DISABLE_FILE_STATE_GUARD=1 disattiva la protezione 'file modificato dopo la lettura' su patch e write_file."
t362: "HERMES_ALLOW_PRIVATE_URLS=true consente agli strumenti web di raggiungere localhost e reti private — disattivato per impostazione predefinita in modalità gateway."
t363: "HERMES_OPTIONAL_SKILLS=name1,name2 installa automaticamente skill extra del catalogo opzionale al primo avvio di ogni profilo."
t364: "HERMES_BUNDLED_SKILLS punta a un albero personalizzato di skill incluse — usato dal packaging Homebrew e Nix."
t365: "HERMES_DUMP_REQUEST_STDOUT=1 scarica su stdout il payload di ogni richiesta API invece che nei file di log."
t366: "HERMES_OAUTH_TRACE=1 registra, oscurati, gli scambi e i tentativi di refresh del token OAuth per il debug dell'autenticazione dei provider."
t367: "HERMES_STREAM_RETRIES (predefinito 3) controlla i tentativi di riconnessione a metà stream in caso di errori di rete transitori."
t368: "HERMES_GATEWAY_BUSY_ACK_ENABLED=false silenzia i messaggi di conferma ⚡/⏳/⏩ quando un utente scrive a un agente occupato."
t369: "HERMES_AGENT_NOTIFY_INTERVAL (predefinito 180s) imposta ogni quanto il gateway invia aggiornamenti di avanzamento sui turni lunghi."
t370: "HERMES_RESTART_DRAIN_TIMEOUT (predefinito 900s) limita quanto /restart attende le esecuzioni in corso prima di forzare."
t371: "HERMES_CHECKPOINT_TIMEOUT (predefinito 30s) limita il tempo di creazione dei checkpoint del filesystem — aumentalo su monorepo enormi."
t372: "image_gen.model in config.yaml sceglie il modello FAL: flux-2/klein, gpt-image-2, nano-banana-pro e altri."
t373: "image_gen.provider instrada la generazione di immagini attraverso un plugin (OpenAI Images, Codex, FAL) invece del predefinito."
t374: "AUXILIARY_VISION_BASE_URL + AUXILIARY_VISION_API_KEY puntano l'analisi visiva a qualsiasi endpoint compatibile OpenAI."
t375: "security.tirith_fail_open: false fa sì che Hermes blocchi i comandi quando lo scanner tirith stesso va in errore."
t376: "La variabile d'ambiente TIRITH_FAIL_OPEN sovrascrive la configurazione tirith_fail_open — un interruttore rapido senza modificare config.yaml."
t377: "Le chat --source tool sono escluse da hermes sessions list per impostazione predefinita — imposta --source esplicitamente per vederle."
t378: "Gli ID di sessione hanno un prefisso timestamp (20250305_091523_abcd), così l'ordinamento funziona naturalmente in ls e jq."
t379: "API_SERVER_MODEL_NAME personalizza il nome del modello su /v1/models — essenziale per configurazioni Open WebUI multi-profilo."
t380: "I plugin della dashboard vengono serviti da /dashboard-plugins/<name>/ — metti i file in ~/.hermes/dashboard-plugins/."
placeholder:
p01: "Chiedi qualsiasi cosa, o digita / per i comandi…"
p02: "Riassumi cosa c'è in questa cartella"
p03: "Scrivi una bozza di risposta all'ultima email nella mia casella"
p04: "Pianifica una funzionalità, poi costruiscila passo dopo passo"
p05: "Trova e correggi un test che fallisce"
p06: "Fai una ricerca su questo argomento e scrivimi una sintesi"
p07: "Cosa è cambiato di recente in questo repository?"
p08: "Trasforma questi appunti in una lista di cose da fare"
p09: "Spiega questo errore e come risolverlo"
p10: "Imposta un promemoria o pianifica un'attività ricorrente"
p11: "Digita / per sfogliare i comandi, o Ctrl+P per la palette comandi"